lambda演算对计算理论领域有什么贡献?


85

我只是在阅读lambda演算以“了解它”。我认为它是图灵机的另一种计算形式。这是一种有趣的用功能/约简做事的方式(简而言之)。一些问题一直困扰着我:

  • Lambda微积分的意义是什么?为什么要经历所有这些功能/减少?什么目的?
  • 结果,我不得不怀疑:lambda微积分到底是做什么来推动CS理论的?是什么使我有一个“哈哈”的时刻来了解其存在的必要性?
  • 为什么关于自动机理论的文章中没有涵盖lambda演算?常见的途径是遍历各种自动机,语法,图灵机和复杂性类。Lambda演算仅包含在SICP样式课程的课程提纲中(也许不?)。但是我很少看到它是CS核心课程的一部分。这是否意味着它不那么有价值?也许不是,也许我在这里错过了一些东西?

我知道函数式编程语言基于lambda演算,但我不认为这是有效的贡献,因为它是在我们拥有编程语言之前就创建的。那么,了解/理解lambda演算的真正意义是什么,它对理论的应用/贡献呢?


6
一组相关的答案解释了微积分和TM 之间的幂差:cstheory.stackexchange.com/questions/1117/…–λ
Suresh Venkat

4
也许关于将图灵机用作计算的主要模型历史原因的讨论也很有趣。
Martin Berger 2014年

5
在某种程度上,它的贡献是创造了这个领域。不要忘记,Church首先提出了lambda演算,但起初并没有将其视为通用的计算模型。
丹·赫尔姆

在我的核心研究中,我Functional Programming讨论了Haskell和一些Lisp。其后继者是Principles of Programming Languages,它使用ML并引入了lambda演算。由于一些答案表明,这是真正在那里演算属于:在大约编程语言,打字等类
Shaz

这个问题与TM和Lambda演算之间的关系相似,并且还讨论了Lambda演算的历史先例
vzn 2014年

Answers:


96

演算具有两个关键作用。λ

  • 它是顺序,功能,高阶计算行为的简单数学基础。

  • 它是构造逻辑中证明的表示。

这也称为Curry-Howard对应。连带的双视图演算作为证明和(顺序,功能,高阶)的编程语言,通过的代数手感加强λ演算(这不是由图灵机共享),具有导致大规模技术转让在逻辑,数学基础和编程之间。这种转移仍在进行,例如在同伦类型理论中。特别是没有λ的情况下,一般编程语言尤其是打字学科的开发是不可想象的 λλλ-结石。大多数编程语言都应归功于Lisp和ML(例如,为Lisp发明了垃圾回收),它们是微积分的直接后代。受到λ微积分影响很大的第二项工作是 交互式证明助手λλ

是否需要知道微积分才能成为有能力的程序员,或者甚至是计算机科学的理论家?不。如果您对具有高阶功能的类型,验证和编程语言不感兴趣,那么它可能是一种计算模型,对您而言并不是特别有用。特别是,如果你有兴趣的复杂性理论,那么 λ演算大概不是因为基本的还原步骤的理想模型λ X 中号ñ β中号[ ñ / X ]功能强大:它可以使任意数量N上的副本,所以 βλλ

λX中号ñβ中号[ñ/X]
ñβ在考虑微观计算成本时,这是一个不切实际的基本概念。我认为这是为什么理论A不那么迷恋微积分的主要原因。相反,图灵机并不是编程语言开发的灵感之源,因为没有自然的机器组成概念,而对于λ微积分,如果MN是程序,那么M N也是。这种计算的代数观点自然地与实践中使用的编程语言有关,许多语言的发展可以理解为对新颖的程序组成运算符的搜索和研究。λλ中号ñ中号ñ

有关微积分历史的百科全书概述,请参阅Cardone和Hindley撰写的Lambda微积分历史和组合逻辑λ


8
这是一个非常好的答案。
Suresh Venkat 2014年

9
关于还原的“不现实” :Beniamino Accattoli和Ugo Dal Lago最近证明了一个令人惊讶的结果,它表明在任何标准的还原策略中(例如,从最左边到最左边)β到正常形式的步数都是不变的复杂性度量。这意味着,即使实施β-还原本身很昂贵,对还原次数进行计数也不是不切实际的复杂性度量(例如,这不会影响类P的定义)。βββP
Damiano Mazza 2014年

5
@DamianoMazza由于这是一个新结果,因此它不可能在A理论的历史中产生影响。此外,我认为这仅适用于某些归约概念。IIRC Asperti的论文P = NP,直至共享表明,如果您采取J.-J的“最佳”减少策略,则P和NP会崩溃。征收。
Martin Berger 2014年

6
@MartinBerger:当然可以。我的评论旨在添加有关还原的复杂性的信息,而根本不是“纠正”您对理论A缺乏影响的陈述(我在回答中重复了)。顺便说一句,阿卡托利和达拉戈的结果适用于通常最左端的β还原(参见他们论文的p.2,c.2,l.11)。这就是为什么它是如此有趣(并且值得一提)的原因。正如您所说,Asperti的结果涉及Lévy最优归约,它不是β的归约策略(特别是最左外不是Lévy最优)。βββ
Damiano Mazza 2014年

27

我认为微积分对这一领域做出了许多贡献,并且仍然对此做出了贡献。以下是三个示例,但这并不详尽。由于我不是λ微积分专家,因此我肯定会错过一些要点。λλ

  • 首先,我认为使用不同的计算模型来表示完全相同的函数集是Church-Turing论文的起源,并且微积分以及Turing机器和μ-递归函数起着重要作用。λμ

  • 第二,关于函数式编程语言,我不认为这是无效的贡献:基本上,我们所有的计算模型都是在计算机科学发生任何事情之前就发明的!因此,演算带来了另一种计算观点,在某种意义上与图灵机正交,这在编程语言领域(属于计算理论领域的一部分)非常有益。λ

  • 最后,作为一个更具体的示例,我想到了隐式计算复杂性,它旨在通过专用语言来表征复杂性类。诸如贝兰托尼-库克定理之类的第一个结果是用递归函数表示的,但是最近的结果使用了λ-微积分的词汇和技术。有关更多信息和提示,请参见“ 隐式计算复杂性简介 ”,或DICE研讨会的会议记录μλ


20

除了在所有其他答案中都提到的微积分的基本作用之外,我还想在λ

lambda演算究竟是做什么来促进CS理论的?

我相信并发理论是CS的一个领域,受到Martin Berger提到的组合视图的极大影响。当然,演算本身不是并发语言,但是其“代数精神”渗透到现代过程计算的定义和发展中。我认为可以说,过程代数比自动机和Turing机器更是λ演算的后代,而且,一般而言,如果不引入λ演算,并发理论将不再是今天。λλλ

除了并发之外,我很高兴看到其中一个答案中提到了隐式计算复杂性(ICC)(这是我个人参与的领域)。但是,必须指出的是,到目前为止,ICC在CS语言中除了编程语言和软件验证以外都没有用。这只是一个更一般情况的例子:在演算基础上并且以“理论B”为主导的模块化,组合,高度结构化的计算视图似乎对“理论A”中关注的深层问题没有多大了解。对我来说,为什么如此是一个有趣的同时又令人沮丧的反思主题。(有关相关讨论,请参见此问题)。λ

(作为一个旁注,我要说的是,由于微积分与证明理论(Curry-Howard)的紧密联系,它甚至在CS“适当”范围之外,特别是在集合论中,也具有有趣的应用。我特别提到对于最近关于古典可实现性的工作,Jean-Louis Krivine(以及现在的其他一些人,例如Alexandre Miquel,在他的网页上找到的演讲是对该主题的出色介绍)从2000年代开始开发的研究程序。从模型理论的角度来看,经典可实现性可以看作是Cohen强迫的“非可交换”概括,产生了用强迫无法获得的集合论模型。λ


2
关于并发理论的一个好处是:交互系统类型的发展(主要由K.Honda 和他的同事们追求)在很大程度上是将 calculi的类型改写为交互系统的类型。使所有这些起作用的关键桥梁是米尔纳函数(作为过程),从λπ转换。这已经导致了技术的逆向转移:大多数类似于ML的编程语言的Hoare逻辑都是作为类型π片段的逻辑而诞生的,然后通过米尔纳的编码进行推后。λλππ
马丁·伯格

5
如果可以克隆自己,我将进行复制以使用BLL和可实现性研究P / NP。逻辑关系似乎不是“自然证明”,线性类型规则确保您不能相对化,而BLL的多时间完整性定理似乎可以让您避免担心是否缺少某些类的算法。线性和表示理论之间的关系也暗示了与GCT的联系。我想这就是为什么让您着迷又沮丧的原因。:)
Neel Krishnaswami 2014年

1
嘿,@ NeelKrishnaswami,您能否指出我阅读与BLL(有界线性逻辑)和自然证明相关的材料?
Martin Berger 2014年

关于B与A:lambda演算仅是为了更好地构造相同的计算,而不能例如产生更好的算法。通过结果的消除和子公式属性,可以编写任何具有一阶类型的程序而无需一等函数。但是剪切消除对应于复制代码:因此我们再次发现,如果您愿意进行足够的复制粘贴,则不需要高阶函数。(雷诺(Reynolds)的去功能化功能甚至可以避免复制粘贴,但这是全局转换,因此最好由编译器决定)。
Blaisorblade

有趣的是,我的评论是由一位算法学家进行编程的-他虽然很棒,但是他的抽象程度似乎远远低于我的期望。我不认为这是一般性的,但我认为编写算法时通常不需要/强调代码中的抽象。(考虑在内联分区函数中内联多少个quicksort实现-我发现这是不可接受的)。
Blaisorblade

13

您的问题可以从许多方面解决。我想把历史和哲学方面放在一边,并解决您的主要问题,我想就是这样:

Lambda微积分的意义是什么?为什么要经历所有这些功能/减少?

布尔代数,关系代数,一阶逻辑或类型理论或其他数学形式主义/理论的意义是什么?答案是他们没有,即使他们的设计师出于某种目的而创建它们固有的目的。莱布尼兹(Leibniz)在建立布尔代数(Boolean Algebra)的基础时,就想到了某些哲学项目。布尔出于自己的原因对其进行了研究。de Morgan在关系代数方面的工作也受到他各种项目的推动。皮尔斯和弗雷格有创建现代逻辑的动机。

关键是:无论教会在创建Lambda演算时可能出于什么原因,Lambda演算的要点因一名从业者而异。

  • 对某人而言,这是一种方便的表示法谈论计算。图灵机的替代品,依此类推。

  • 另一个方面,它是构建更复杂的编程语言(例如McCarthy,Stanley)的坚实的数学基础

  • 对于第三方来说,这是提供自然语言和编程语言(例如Montague,Fitch,Kraztzer)语义的严格工具

我认为Lambda演算是一种形式的语言,值得为自己着想。您可以了解以下事实:在无类型的lambda演算中,我们有这些称为“ Y组合”的小野兽,它们如何帮助我们定义递归函数并使不确定性证明如此优雅和简单。您可以了解到一个令人惊奇的事实,即简单键入的lambda演算与一种直觉逻辑之间有着密切的对应关系。还有许多其他有趣的主题需要探索(例如,我们应该如何赋予语义 lambda演算?如何将lambda演算转换为像FOL这样的演绎系统?)


查阅Hindley&Seldin的“组合器简介和λ微积分 ”以获取简介。Barendregt的《The Lambda Calculus》是圣经,因此,如果您被Hindley&Seldin迷住了,那么您将可以探索很多具有语义和句法性质的主题。


6
我不赞成这种“为自己着想”的说法。数学形式主义的重点是阐明我们对某些概念的理解。阐明的内容可能随着时间的推移而发展,但是除非形式主义帮助我们更清晰地思考某个想法,否则它通常会消失。从这个意义上讲,λ演算如何以TM所没有的方式阐明计算概念是正确的。
Sasho Nikolov 2014年

1
我认为人们可以研究lambda演算,而无需将还原和替代视为计算。如果我是对的,而且实际上可行,那么即使我们对计算完全不感兴趣,我们也可以对lambda微积分感兴趣。但是感谢您的评论;只要有机会,我就会尝试相应地修改答案。
湖南罗斯托扬2014年

@SashoNikolov —“以TM不会包含的方式。” 根据定义,这是不可能的,因为LC和TM等效。您可以用一个表达或证明的任何东西,都可以用另一个表达(或相反)。因此,它们使彼此冗余(就像它们都与通用递归理论一样,也是另一种TM等效形式主义)。这是否意味着我们应该淘汰除TM本身以外的所有TM等效系统?我不会这么说,因为有时候在LC中表达比TM 容易,反之亦然。这只是谈论可计算性的另一种方式。
加布里埃尔·L。

1
@GabrielL。如果您阅读了整个句子,它会说“ lambda演算如何以TM所没有的方式阐明计算的概念”。形式上等效的两个数学定义仍可以不同且互补的方式阐明相同的基本概念。我的评论意味着,有理由问一下,用lambda演算而不是TM表示可计算性会获得什么清晰度。这根本不是形式上的对等。
Sasho Nikolov

知道了–设法以某种方式错过了关键字。谢谢回复。
加布里埃尔·L。

12

图灵认为,数学可以简化为从有限集合中选择的读/写符号的组合,并可以在有限数量的心理“状态”之间切换。他在《图灵机》中对此进行了纠正,在图灵机中,符号记录在磁带上的单元格中,并且自动机可以跟踪状态。

但是,图灵的机器并不是这种减少的建设性证据。他争辩说,任何“有效程序”都可以由图灵机实现,并表明通用图灵机可以实现所有其他这些机,但他实际上并未给出实现数学的一组符号,状态和更新规则。按照他的说法。换句话说,他没有提出带有标准符号集的“标准图灵机”,我们可以用它来写下数学。

另一方面,Lambda微积分正是这样。教会专门试图统一用来写下我们的数学的符号。一旦证明LC和TM等效,我们就可以将LC用作我们的“标准图灵机”,并且每个人都可以阅读我们的程序(理论上,这是不错的选择)。

现在,我们可以问为什么将LC视为原始语言而不是TM方言?答案是LC的语义是指称的:LC术语具有“内在”的含义。有教堂数字,有加法,乘法,递归等功能。这使LC与(正式)数学的实现方式非常一致,这就是为什么许多(功能)算法仍直接在LC中呈现的原因。

另一方面,TM程序的语义是可操作的:其含义被定义为机器的行为。从这个意义上讲,我们不能切掉一部分磁带并说“这是加法”,因为它是上下文相关的。碰到磁带的那部分时,机器的行为取决于机器的状态,长度/偏移量/等。参数,结果将使用多少磁带,以前的操作是否破坏了该磁带的部分,等等。这是一种可怕的工作方式(“没人想对图灵机进行编程”),这就是为什么许多(命令式)算法都以伪代码的形式出现。


5

其他答案也不错,这里考虑的另一个角度/原因是与其他对象啮合,但可能更加确定,但是由于旧时的起源在时光流逝中有些失落,因此可能更难牢记:

历史优先!

Lambda演算至少1932年引入以下参考文献中:

  • A.教会,“逻辑基础的一组假设”,《数学年鉴》,系列2,33:346-366(1932)。

图灵机是在引进〜1936年,所以演算早于TM通过几年的外观!

  • 图灵(1936年)。“关于可计算数字,并应用于Entscheidungs问题”。伦敦数学学会学报。2(1937)42:230–265。doi:10.1112 / plms / s2-42.1.230

因此换句话说,一个基本的答案是Lambda微积分在许多方面都是TCS 的终极遗留系统。它仍然与Cobol大致相同,尽管该语言没有进行太多的新开发!它似乎是最早引入的图灵完备计算系统,甚至早于图灵完备性的基本思想。只是后来的回顾性分析表明,Lambda微积分,图灵机和邮政对应问题是等效的,并引入了图灵等效的概念和教会图灵论文

Lambda演算只是将逻辑表示为数学定理和逻辑公式推导等方面的一种研究逻辑中心 pov的简单方法。它也显示了计算与递归之间的深层联系,以及与数学归纳的进一步紧密耦合。

这是一个有点了不起的事实,因为它表明计算的(至少是理论上的)起源从根本上讲是逻辑/数学,这是戴维斯在他的《逻辑/数学家的引擎》一书中详细介绍/扩展的论文。电脑。(当然,布尔代数的起源和基本作用也进一步加强了这种概念上的历史框架。)

因此,引人注目的是,甚至有人可能会说Lambda演算有点像用于探索计算起源的教学时间机器


1
附录中,Whitehead / Russell认为Lambda演算也受到了数学原理的高度影响,这也是Godels thm的主要灵感来源。某些研究还受到世纪之交的希尔伯茨(Hilberts)第10个问题的启发,该问题“算法”被精确(数学)定义之前要求一种算法解决方案,而实际上,寻求很大程度上是导致后来的精确技术定义的原因。
vzn 2014年

btw / clarification / iiuc实际上是Post规范系统,是Post最早研究的,显然更简单的Post对应问题是特例。也是Kleene通过帮助证明所有3个主要系统都是可互换/等效的(TM,Lambda微积分,Post规范系统),在发展Turing完整性(不是该名称下的名称)概念方面发挥了作用。
vzn 2014年

另请参阅可追溯到许多历史细节/相互关系的Church-Turing论文历史Wikipedia
vzn 2014年

4
在Cobol比较中,我很难不被冒犯。
尼尔·多伦多

-2

我刚刚遇到了这个帖子,尽管我的帖子在一天(一年之后)中很晚,但我认为也许“我的一分钱”可能有用。

在大学学习这个学科时,我对此有类似的想法。因此,我向讲师提出了“为什么”的问题,回答是:“编译器”。她一提到它,还原的强大功能以及评估如何最好地操作它的艺术突然就成为了为什么它仍然是潜在有用工具的全部目的。

好吧,可以这么说是我的“啊哈”时刻。

在我看来,我们经常认为高级语言,模式,自动机,算法复杂性等很有用,因为我们可以将它们与手头的“任务”联系起来。而lamdba演算似乎有点抽象。但是,仍然有一些人在较低的语言水平上工作-我认为lambda演算,对象演算和其他相关的形式化帮助他们理解并开发了新的理论和技术,普通程序员可以从中受益。的确,出于这个原因,它可能不是核心模块,但是(由于我已经陈述的原因),除了学者以外,还会有少数人会发现它是他们选择的计算机职业道路不可或缺的一部分。


什么是编译器上的“啊哈” ?
博士

您的最后一段似乎完全是推测性的,并且您从未真正解释过为什么“编译器”这个词回答了这个问题。
David Richerby 2014年

@PhD:运行程序时不使用Beta减少和替换功能,而是在优化编译器内部使用。那不是lambda演算主要意义,而是一个非常具体的应用。
Blaisorblade
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.