我正在尝试围绕lambda演算,以及它与语言,编译器和二进制代码的关系。它实际上意味着lambda演算相当于图灵机,它实际上表现在哪里?
我不明白lambda演算如何取代图灵机作为理论计算模型。图灵机是关于改变状态的顺序指令,lambda演算是关于评估某事的表达式。它更抽象,就像它自己的编程语言一样,而不是如何实际计算某些东西的模型,使事情发生。或者让我们这样说吧:lambda演算就像路线图一样,图灵机像汽车模型。这两个如何被认为是等价的?是否有可能在没有实现图灵机的情况下在硬件上运行软件?
例如,lisp编译器和语言如何与lambda演算相关?在哪个层实现了lambda演算?在lambda演算的定义方面,实现是否纯粹? lambda演算背后的理论在何处以及如何将语法转换为运行二进制文件?例如,在lambda演算中,数字被编码为应用于某些其他函数n次的特殊函数。然而在语法中我们使用数字文字。使用所有这些公理的地方?
答案 0 :(得分:4)
所有这些基础语言都是在计算机出现之前的一个时代引入的。研究的重点在于描述一类(数值)函数,这些函数在算法意义上看起来“直观”可计算,而不一定是自动设备。现在,事实证明,lambda演算和图灵机,以及许多其他计算模型,如组合逻辑,Post系统,广义递归函数等,精确地表达了同一类可计算函数。这激发了教会的论点。
我同意你的观点,图灵机(如随机存取机)有更多 与其他车型相比的建筑风味。 事实上,这就是让Goedel信服的原因 对教会论文的有效性持怀疑态度。
我也同意你的看法,lambda演算不能取代图灵机作为理论计算模型:在这样的操作中没有任何明显的好处。
与此同时,lambda演算很有趣,而图灵机是致命的 无聊。这很有趣,正是因为它与图灵极为相反 机。我认为可以合理地说它是最高级别的 已经构思出来的计算模型(可能永远都是如此) 是)。这就是为什么它对每个人来说都是具有挑战性和指导性的语言 程序员。
答案 1 :(得分:2)
在可计算性理论中,两个理论计算模型之间的等价意味着它们可以解决同一组问题。你可以在图灵机中计算任何东西,你可以使用Lambda微积分进行计算,反之亦然。
我们如何证明这一点?可以说,如果我们可以在lambda演算中对图灵机进行建模,那么显然lambda演算可以计算图灵机所能得到的一切。如果我们可以在图灵机上解决lambda演算,那么反过来也是如此。
这两种都是可能的,因此模型被认为是等效的。
当然,在实践中,对于某些用例,一种模型可能更容易实用。今天的计算机基于RAM状态模型,这反过来又从图灵机的概念中借鉴了它的理论基础。 Lambda演算确实非常抽象,并且它不会像在物理硬件中实现那样容易实现。然而,这两个模型都存在于同一计算类中,它们可以解决相同的问题,因此被称为等效。