图灵机与lambda演算的关系

莱布尼兹曾经有两个梦想: 
1. 创建一种“普遍语言”(universal language)使得任何问题都可以用这种语言表述; 
2. 找到一种"判定方法"(decision method)以解决所有可以在“普遍语言”中所表述的问题。 
这两个问题是上百年来数理逻辑、数学哲学和数学基础问题的核心、实质。对前一个问题的回答就是自弗雷格、罗素开始,经公理集合论运动的最终结果:以一阶谓词逻辑为语言所形式化阐述的集合论,现在已经成为数学的普遍语言,现代逻辑学、特别是将符号逻辑应用于数学领域所产生的数理逻辑,其最重要的目标就是为整个数学提供一个严格精确的语言。这是我们在学习数理逻辑时应当把握的方向。 
而第二个问题则是现代哲学和计算机科学最关注的问题之一:是否可以解决用这个“普遍语言”所形式化描述的所有问题?这个问题就是所谓“可判定性问题”(Entscheidungsproblem,decision problem)。对这个问题的研究最终导致了理论计算机科学的诞生:阿隆佐·丘奇和阿兰·图灵分别以各自的方式对这个问题做出了否定的回答。他们在研究这个问题时首先对“可判定的”(decidable)这个直觉概念进行了深入研究并给出了形式化定义和解释,进一步把这个问题归结成“可计算的”(computable)问题,并最终将其定义为“可计算函数”(computable function)问题的研究。为此,丘奇和图灵分别提出了关于可计算函数的模型。图灵的模型就是著名的图灵机,它已经成为现代计算机科学的理论基础;而丘奇的模型则是lambda演算,这成为后来计算机语言Lisp和现代函数式程序语言的理论基础。其后图灵证明了这两个模型其实定义了同一类别的可计算函数。可以说,丘奇和图灵对数理逻辑的研究是从传统的解决数学基础问题出发开创了一个崭新的领域:计算科学。

[出处] https://www.douban.com/doulist/45802431/

原文地址:https://www.cnblogs.com/hugetong/p/9777137.html

时间: 2024-11-11 06:22:40

图灵机与lambda演算的关系的相关文章

lambda演算

先了解下相关的知识点(以下都只用先了解简单的概念,建议wiki): BNF范式,上下文无关文法,函数柯里化. lambda读书笔记演算: http://www.blogjava.net/wxb_nudt/archive/2005/05/15/4311.aspx lambda演算实例 关于lambda演算的定义和解释的确有点让人迷糊,主要不是因为lambda演算有多复杂,而是一些基本概念没有归入正确位置的原因. 这里先写一点草稿,在实践中学习和领悟lambda演算到底是个什么东西. 一:自然数运算

Java8 新特性----函数式接口,以及和Lambda表达式的关系

这里来讲解一下Java8 新特性中的函数式接口, 以及和Lambda 表达式的关系.看到过很多不少介绍Java8特性的文章,都会介绍到函数式接口和lambda表达式,但是都是分别介绍,没有将两者的关系说明清楚,在这里,把自己的理解整理如下: 一.函数式接口: 函数式接口其实本质上还是一个接口,但是它是一种特殊的接口:SAM类型的接口(Single Abstract Method).定义了这种类型的接口,使得以其为参数的方法,可以在调用时,使用一个lambda表达式作为参数.从另一个方面说,一旦我

Lambda演算 - 简述Y组合子的作用

Y组合子:\f.(\x.f(xx))(\x.f(xx)),接受一个函数,返回一个高阶函数 Y组合子用于生成匿名递归函数. 什么叫匿名递归函数,考虑以下C语言递归函数 int sum(int n) { return n == 0 ? 0 : n + sum(n-1); } 这个函数在内部递归调用了自身,调用自身需要函数本体的名字,这个函数叫sum,sum内部用名字sum,递归调用了自己 在lambda演算中,可以写成类似的表达式sum = \x. x == 0 ? 0 : sum x 但是对于一个

Lambda演算 Lambda Calculus 的简单理解

Lambda演算 在λ演算中,每个表达式都代表一个函数,这个函数有一个参数,并且返回一个值.不论是参数和返回值,也都是一个单参的函数.可以这么说,λ演算中,只有一种"类型",那就是这种单参函数. 函数是通过λ表达式匿名地定义的,这个表达式说明了此函数将对其参数进行什么操作.例如,"加2"函数f(x)= x + 2可以用lambda演算表示为λx.x + 2 (或者λy.y + 2,参数的取名无关紧要)而f(3)的值可以写作(λx.x + 2) 3.函数的应用(app

lambda演算感想之规则

在lambda演算中,丘奇创建了丘奇数,在理解丘奇数的过程中,逐渐颠覆了一些以前的认知,丘奇数用自己的方式重新定义了数字,即: 0是 lambda s z . z  1是 lambda s z . s z 2是 lambda s z . s (s z) 在理解丘奇数的过程中,我一直在纠结于为何丘奇就可以创建一个数字代表0 1 2,然后还在其中加入了运算规则,因为在我之前的认知中,数字是神圣的,他就像客观事物中的一草一木一样,是不可以被替代的,所以我们不可能在创建一个丘奇数来代替数字,因为数字是唯

SQL、Linq和Lambda表达式 的关系

首先说说这三者完全是三种不同的东西,SQL是结构化查询语言(Structured Query Language)简称,这大家再熟悉不过了,下面主要介绍LINQ和Lambda表达式的基本概念以及同一查询这三者的不同实现. 简单介绍 LINQ(Language Integrate Query)是语言集成查询他在对象和数据之间建立一种对应的关系,可以使用访问内存对象的方式查询数据集合.LINQ查询是C#中的一种语言构造.因此开发人员可以再C#代码汇总嵌套类似于SQL语句的查询表达式,从而实现数据查询的

lambda 演算

本文是来自 g9yuayon, 算是一篇读书笔记. :-) 详细内容还是看原作者的. 自由变量 在 (lambda (x) (x y…)) 中, x 是绑定的变量, y 是自由变量 在 (lambda (x) (lambda (y) (x y …))) 中, 要分情况 在第一个 lambda 中, x, y 都是绑定的, 在 第二个 lambda中, x是自由变量 alpha 规则, (转换规则) (lambda (x) (if (= x 0) 1 0)) ;; 等价于 (lambda (y)

Lambda演算(二)归约!归约!归约!

(一) 这里先不列出λ项的正式定义,只记住λ表达式语义上的构造方式为: x 一个单独的变量名是一个λ项表达式: (λx.M) 该λ表示一个函数.其中 M 是这个函数的函数体,M 本身也是一个 λ项. 除了 x 之外,M 中可能还有其他变量名,λ 这个符号用于指示函数体 M 的参数为 x. 了便于理解,可以将 M 看作函数体,x 看作形参,即变量名. 例如:λx.x+3 即表示一个函数 f(x) = x+3,该函数会返回x与3相加的结果 要注意的是,我这里的写法并不规范,在λ表达式中,二元运算符是

Atitit . 编程模型的变革总结

Atitit . 编程模型的变革总结 1. 面向对象与面向过程程序设计有如下不同:  1 1.1. 函数与数据是否分离.... 1 1.2. 以功能为中心;以数据为中心..... 1 1.3. 事件驱动 2 1.4. 继承和多态 2 2. 面向对象的弊端 2 2.1.  OO的弊端就是:设计抽象和封装的时间远远超过你解决问题的时间. 2 2.2. 复杂的数据类型 2 2.3. 并发编程/并行计算/多核编程 2 2.4. "面向对象编程语言的问题在于,它总是附带着所有它需要的隐含环境. 2 2.5