为什么图灵功能语言完整?


22

也许我对这个主题的有限理解是错误的,但这是我到目前为止所了解的:

  • 函数式编程基于Alonzo Church制定的Lambda微积分。

  • 命令式编程基于教会学生Alan Turing制作的Turing机器模型。

  • Lambda演算的功能和图灵机一样强大,
    这意味着它们的计算能力相当。

如果函数式编程基于Lambda演算而不是Turing机器,那么为什么其中某些(或全部)描述为Turing完整,而不是Lambda完整或类似的东西?“图灵完备性”一词在图灵机上是否有任何特殊之处,还是仅此一个词?

最后,如果命令式语言基于Turing Machine,而计算机基本上是Turing计算机,没有无限的内存,这是否意味着它们在我们现代PC上的性能优于功能编程语言?

如果是这样的话,那么lambda演算机器的等效条件是什么?

我知道这似乎是3个独立的问题,但它们都是紧密相关的,并且每个问题都取决于前一个问题是否是有效的问题。


6
这不是一个答案,但您提到并非所有版本的lambda演算都是图灵完成的。简单类型Lambda演算以及基于终止检查的Coq和Agda的更强版本都不是图灵完备的(因为它们具有可确定的停止问题)。强类型语言(例如Haskell和SML)通过使用定位点组合器(带有type的术语)允许任意递归来解决此问题(a -> a) -> a
jmite 2015年

说“定义为图灵完整”是非常错误的。我们可以更改标题吗?
Andrej Bauer

@AndrejBauer感谢您对标题进行编辑,但是我很好奇为什么它(定义为Turning Complete)错误?是因为这是一个形容词吗?描述比定义更好吗?
阿卜杜勒

1
@Abdul好吧,问题出在“定义”这个词上。如果您说“功能语言被定义为图灵完成”,则表示“功能语言”的定义或“图灵完成”的定义都表明功能语言是图灵完成的。实际上,两个定义都没有这样说。
Tanner Swett

Answers:


20

简而言之

命令式编程语言的特点是接近图灵机和PC等普通计算机(它们更接近随机存取机(RAM)而不是图灵机)是显式存储器的概念,可以对其进行修改以存储(中间结果) )。它是计算的自动视图,具有状态概念(包括有限状态控制和内存内容),状态可以随着计算的进行而改变。

大多数其他模型都比较抽象。尽管它们可以将计算表示为原始结构的一系列转换步骤,但是这些转换被应用在某种数学意义上的临时性宇宙中。这可以保留诸如引用透明性之类的属性,这些属性可以简化数学分析。但是,它与依赖内存约束的自然物理模型之间的距离较远。

因此,除了如下所述的广义上的解释之外,没有自然的功能机器,因为软件与硬件并不是真正可分离的。

将Turing称为可计算性的尺度可能来自于以下事实:他的模型Turing机器最接近于此物理可实现性约束,这使其成为一个更直观的计算模型。

进一步考虑

有许多计算模型,这些模型旨在以最通用的方式捕获计算概念。它们包括实际上具有许多不同口味的图灵机,lambda演算(也有口味),半Thue重写系统,部分递归函数,组合逻辑。

它们都捕获了数学家用来表达或进行计算的各种技术的某些方面。大多数已在某种程度上用作某些编程语言设计的基础(例如,用于重写系统的Snobol,用于组合器的APL,用于lambda演算的Lisp / Scheme),并且经常可以在现代编程语言中以多种方式组合。

一个主要的结果是,所有这些计算模型都被证明是等效的,这导致了Church-Turing的论点,即没有物理可实现的计算模型可以做的比这些模型中的任何一个都多。如果可以证明计算模型等效于这些模型之一,则称该模型为图灵完备的

名称可能不同。选择图灵机(TM)作为参考可能是由于它可能是这些模型中最简单的一个,它紧密(虽然简单地)模仿了人类的计算方式,并且相当容易实现(以有限的有限形式) )作为一种物理设备,以至于图灵机是用乐高玩具组制造的。基本思想不需要复杂的数学方法。赋予此参考位置的可能是该模型的简单性和可实现性。

在艾伦·图灵(Alan Turing)创建其计算设备时,桌上还有其他提议可以作为可计算性的正式定义,这是数学基础的关键问题(请参阅 Entscheidungsproblem)。当时的专家认为Turing提案是最令人信服的涵盖了有关应计算性的已知工作(请参阅Computability and Recursion,RI Soare,1996,请参阅第3.2节)。各种建议被证明是等效的,但图灵的建议更具说服力。[摘自Yuval Filmus的评论]

应该注意的是,从硬件的角度来看,我们的计算机不是图灵机,而是所谓的随机存取机(RAM),它也是图灵完整的。

纯粹的命令性语言(可能意味着什么)可能是用于最基本模型(例如Turing机器)或计算机的汇编语言(跳过其二进制编码)的形式主义。众所周知,这两者都不可读,并且很难编写重要的程序。实际上,与直接使用机器指令相比,即使汇编语言也具有一些更高级别的功能以使编程变得更轻松。基本的命令式模型对物理世界是封闭的,但不是很有用。

这迅速导致了更高级别的计算模型的开发,并开始将各种计算技术(例如子程序和函数调用,内存位置命名,名称范围,名称和量化以及虚拟变量)混合使用,已经以某种形式使用数学和逻辑,甚至是非常抽象的概念,例如反射Lisp 1958)。

将编程语言分为诸如命令式,功能性,逻辑,面向对象的编程范式的分类是基于这些技术中某些在语言设计中的优势,以及某些强制执行程序某些属性的计算功能的存在与否或用该语言编写的程序片段。

某些型号对于物理机很方便。其他一些对于算法的高级描述更为方便,这可能取决于要描述的算法的类型。一些理论家甚至使用算法的不确定性规范,甚至可以将其翻译成更常规的编程术语。但是没有不匹配的问题,因为我们开发了一种复杂的编译器/解释器技术,可以根据需要将每个模型转换为另一个模型(这也是Church-Turing论文的基础)。

现在,您永远不应将计算机视为原始硬件。它确实包含布尔电路,该布尔电路执行非常基本的处理。但是,其中大部分是由您永远不会了解的计算机内部的微程序驱动的。然后,您将拥有一个使您的计算机看上去与硬件看起来甚至有所不同的操作系统。最重要的是,您可能拥有一个虚拟机,该虚拟机执行字节码,然后是一种高级语言,例如Pyva和Jathon或Haskell或OCaml,可以将其编译为字节码。

在每个级别,您都会看到不同的计算模型。很难将硬件级别与软件级别分开,从而为计算机分配特定的计算模型。而且由于它们都是可互译的,因此最终的硬件计算模型的想法几乎是一种幻想。

lambda演算机器确实存在:它是一台可以减少lambda演算表达式的计算机。轻松完成广告。

关于专用机器架构

实际上,作为对Peter Taylor的回答的补充,并在硬件/软件交织方面进行了跟进,生产了专用机器,以更好地适应特定的范式,并使用基于该范式的编程语言编写其基本软件。

这些包括

从根本上讲,这些也是必不可少的硬件结构,但是通过特殊的硬件功能或微程序解释器可以减轻这些负担,以更好地适应预期的范例。

实际上,从长远来看,专门用于特定范例的硬件似乎从未成功过。原因是在香草硬件上实现任何范式的编译技术变得越来越有效,因此不需要专门的硬件。此外,硬件性能正在快速提高,但改进的成本(包括基本软件的演进)在专用硬件上比在专用硬件上更容易摊销。从长远来看,专用硬件无法竞争。

尽管如此,尽管我没有确切的数据,但我怀疑这些冒险活动会留下一些确实影响机器,存储器和指令集体系结构发展的想法。


选择图灵机作为参考,实际上是对它的扩展,这主要是出于历史原因:图灵是第一个提出令人满意的可计算性定义的人。
Yuval Filmus 2015年

@YuvalFilmus为什么它更像是“可计算性的令人满意的定义”?
babou 2015年

那就是哥德尔的想法。鲍勃· 苏亚雷( Bob Soare)在此有几句话要说:cs.uchicago.edu/~soare/Publications/compute.ps
Yuval Filmus 2015年

@YuvalFilmus这是46页。我的意思是说出一些原因,使它更令人满意。他们可能天真。如果有更多令人信服的东西来解释成功,那就值得一提。
babou 2015年

请参阅第3.2节。以前有可计算性的定义,但并不令人信服。图灵是第一个令人信服的,至少对于某些关键人员而言。
Yuval Filmus 2015年

21

图灵完成只是一个名字。如果需要,可以将其称为Abdul-complete。名称是由历史决定的,通常以“错误”的人命名。这是一个没有明确标准的社会过程。该名称除了其官方语义外没有其他含义。

命令式语言不是基于图灵机。它们基于RAM机器。您的计算机是RAM机器。图灵机是一个很好的理论模型,但它们并不是实际计算机的很好模型。

即使其他基础CPU本身不支持基于其他范式的编程语言,也可以非常成功。例如,打印机运行堆栈语言。编程不仅仅是机器代码。


“图灵机是一个很好的理论模型,但它们并不是实际计算机的很好模型。” 除了缺少无限内存外,还有什么其他原因使它不是实际计算机的良好模型?另外,我是否认为功能语言是基于lambda演算的?
阿卜杜勒2015年

5
λ

11
命令性语言倾向于允许在恒定时间内使用C进行数组访问A[x]。图灵机无法在恒定时间内执行此操作。这就是为什么即使在理论计算机科学中,算法的运行时间也是在RAM机器模型上而不是在Turing机器模型上进行分析的原因。
Yuval Filmus 2015年

14
实际上,图灵机一台真正的计算机……除了图灵在写论文时,“计算机”是人类用笔和纸做的工作描述。读/写头是笔的模型,胶带是无限叠纸的模型(将它们切成小条并粘在一起),字母是我们的字母表的模型,而有限过渡是人们可以掌握的有限规则数量的模型。
约尔格W¯¯米塔格

3
这是我有史以来最好的见解,为什么在地狱之旅中选择了图灵机。我一直想知道“他为什么选择如此笨拙的计算模型”。我一直想着如果发明算术理论留给我(上帝帮助我们;我们相距不远),我可能仍会选择更好的计算模型。现在我知道他来自哪里,这变得更加有意义。
2015年

10

因为“图灵完成”仅表示“它可以计算图灵机可以计算的任何东西”。


图灵完备也可以以纪念图灵(此人)而命名,图灵提出了第一个在哲学上令人满意的可计算性定义。也可以以图灵在其中描述这一概念的论文中的名字命名。
Yuval Filmus 2015年

1
@YuvalFilmus:它可以以艾伦·图灵(Alan Turing)的妈妈的名字命名,但是这里的断言不是;-)
史蒂夫·杰索普

@YuvalFilmus可能是(尽管据我所知不是)。但是,术语的来源仅是次要的。这里重要的是该术语的含义
David Richerby

2
这又短又甜,但是可能有点太短了。图灵机“做什么”?他们“要做”的事情之一就是读写磁带,而lambda表达式则不行。更好的做法是“完整的计算模型可以计算所有可计算的函数”。
西奥多·诺维

@TheodoreNorvell我认为您的评论与我的想法相似。我知道lambda演算和Turing机器在功率上是等效的,但机制不同(现在我了解到其他机器),但是我想知道“ Turing完整性”一词是否对Turing机器而言是特殊的,还是如果只是一个名字。
阿卜杜勒

6

您的问题之一似乎尚未得到解答:

如果是这样的话,那么lambda演算机器的等效条件是什么?

一个Lisp的机器。专为适应LISP计算模型而设计的硬件。维基百科上的文章谈到了商业产品,但是我在大学的学习主管在他的办公室里有一个手工制作的产品。


0

教会发明的lambda演算形式的功能语言被证明是图灵完整的。这是一个实际的数学证明,可以通过将lambda演算“减少”到图灵机上的运算/计算中,在已发表的科学论文中找到。在1936年Turings论文发表之时和之后,提出了不同的“综合”计算模型。并没有立即意识到所有这些都是等同的。图灵斯论文发表后的大约1930年代和1940年代,大约发表了它们等效的证明。

Turing机器在概念上(但在功能上并非如此)比其他模型要简单,这很可能是Turing完整性以他命名的重要原因。λ演算之类的其他思想则更为抽象,它们起源/起源于数学/逻辑理论。图灵提出了一种理论机器。一个“机器”实际上是一种“物理设备”。它是一个非凡的概念对象/构造,将两个不同的世界(应用和理论)联系在一起/统一在一起。它给物理实体赋予了新的抽象含义,例如“时间和空间”。数学家有时提到证明的“技术”,“机械”或“设备”并不是一个偶然的巧合。图灵在他的概念发明中巧妙地融合了所有这些。它的定义很简单,但是对其进行分析却展现出科学/数学思想史上最罕见的一些新兴行为。图灵是第一个掌握很多这种意义/能力/潜力的科学家/数学家。


换句话说,可以说图灵是第一个识别/“认可”图灵完整性现象的重要性的人,反过来,CS通过使用术语来“认可”他的这一非凡成就。
vzn 2015年

X
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.