什么是图灵完成?

时间:2008-08-10 18:41:02

标签: theory turing-machines turing-complete

“图灵完成”的含义是什么意思?

你可以给出一个简单的解释,而不会涉及太多的理论细节吗?

16 个答案:

答案 0 :(得分:269)

以下是最简短的解释:

图灵完整系统是指一个系统,在该系统中可以编写一个可以找到答案的程序(尽管不保证运行时或内存)。

所以,如果有人说“我的新东西是图灵完全”,这意味着原则上(虽然通常不在实践中)它可以用来解决任何计算问题。

有时这是一个笑话......一个人在vi中写了一个图灵机模拟器,所以可以说vi是世界上唯一需要的计算引擎。

答案 1 :(得分:154)

以下是最简单的解释

Alan Turing创建了一台可以接受程序并运行该程序并显示结果的机器。但他必须为不同的程序创建不同的机器。所以他创造了#34; Universal Turing Machine"可以采取任何程序并运行它。

编程语言与那些机器类似(尽管是虚拟的)。他们接受程序并运行它们。现在,编程语言被称为"图灵完成",如果它可以运行任何程序(不论语言)图灵机可以运行给定足够的时间和内存。

例如:假设有一个程序需要10个数字并添加它们。图灵机可以轻松运行该程序。但是现在想象一下,由于某种原因,你的编程语言不能做同样的添加,那么它的图灵机就不完整了。另一方面,如果它可以运行任何程序,如通用图灵机可以运行,那么它的图灵完成。

大多数现代编程语言(如Java,JavaScript,Perl等)都是完整的,因为它们都实现了运行程序所需的所有功能,如加法,乘法,if-else条件,返回语句,存储/检索/擦除数据的方法等等。

更新:您可以在我的博文中了解更多信息:"JavaScript Is Turing Complete" — Explained

答案 2 :(得分:86)

来自wikipedia

  

图灵完整,以艾伦命名   图灵,每一个都很重要   合理的计算设计   到目前为止先进的设备可以模拟   通过一台通用的图灵机 - 一台   观察已被称为   Church-Turing论文。因此,一个   可以充当通用的机器   图灵机原则上可以   执行任何其他计算   可编程计算机是能够的。   但是,这与此无关   编写程序所需的努力   对于机器,它可能需要的时间   为了机器执行   计算,或任何能力   机器可能拥有不相关的机器   计算。

     

真正图灵完整的机器   很可能在身体上不可能,   因为他们需要无限存储,   图灵完整性往往是松散的   归因于物理机器或   编程语言   如果他们有无限的通用   存储。所有现代电脑都是   在这个意义上图灵完成。

我不知道你怎么能比那更具技术性,除非说“图灵完整的手段'能够在给定足够的时间和空间的情况下回答可计算的问题”。

答案 3 :(得分:59)

非正式定义

图灵完整语言是可以执行任何计算的语言。 Church-Turing Thesis表示任何可执行的计算都可以由图灵机完成。 Turing machine是一台具有无限随机存取存储器和有限“程序”的机器,它指示何时应该读取,写入和移动该存储器,何时应该以某个结果终止,以及它应该做什么。图灵机的输入在开始之前就被放入其内存中。

可以使语言无法完成的事情

图灵机可以根据内存中的内容做出决定 - 仅支持+-*的“语言”和整数上的/并不是图灵完整的,因为它无法根据其输入做出选择,但是图灵机可以。

图灵机可以永远运行 - 如果我们使用Java,Javascript或Python并删除了执行任何类型的循环,GOTO或函数调用的能力,它将不会是图灵完成因为它无法执行永不完成的任意计算。 Coq是一个定理证明器,无法表达不终止的程序,所以它不是图灵完整的。

图灵机可以使用无限内存 - 一种与Java完全相同的语言,但是一旦使用超过4千兆字节的内存就会终止,因为图灵机可以使用无限的记忆。这就是为什么我们实际上不能构建图灵机,但Java仍然是图灵完整语言,因为Java 语言没有限制阻止它使用无限内存。这是正则表达式不是图灵完成的一个原因。

图灵机具有随机存取内存 - 只允许您通过pushpop操作将内存处理到堆栈的语言不会图灵完成。如果我有一个“语言”读取字符串一次并且只能通过从堆栈中推送和弹出来使用内存,它可以告诉我字符串中的每个(是否都有自己的{ {1}}稍后会在看到)时推送,并在看到(时弹出。但是,它无法告诉我每个)是否有自己的(稍后每个)都有自己的[稍后(请注意]符合此条件,但([)]不符合此条件。图灵机可以使用其随机存取存储器分别跟踪([]](),但这种只有堆栈的语言不能。

图灵机可以模拟任何其他图灵机 - 图灵机,当给定适当的“程序”时,可以采用另一个图灵机的“程序”并在任意输入上模拟它。如果你有一种被禁止实现Python解释器的语言,那么它就不会是图灵完成的。

图灵齐全语言的例子

如果您的语言具有无限随机存取存储器,条件执行和某种形式的重复执行,则可能是图灵完成的。有更多的奇特系统仍然可以实现图灵机所能达到的一切,这也使得图灵完成了:

  • 无类型lambda演算
  • 康威的生命游戏
  • C ++模板
  • 的Prolog

答案 4 :(得分:15)

从根本上说,图灵完整性是一个简洁的要求,无限制的递归。

甚至没有内存限制。

我独立地想到了这个,但是断言的here is some discussionMy definition of LSP提供了更多背景信息。

这里的其他答案并不直接定义图灵完整性的基本要素。

答案 5 :(得分:11)

图灵完成意味着它至少与Turing Machine一样强大。这意味着图灵机可以计算的任何东西都可以通过图灵完备系统来计算。

还没有人发现比图灵机更强大的系统。所以,暂时说系统是Turing Complete就像说系统和任何已知的计算系统一样强大(见Church-Turing Thesis)。

答案 6 :(得分:7)

用最简单的术语来说,图灵完备系统可以解决任何可能的计算问题。

其中一个关键要求是暂存区域大小无限制,可以倒带以访问先前写入暂存区的内容。

因此在实践中没有任何系统是图灵完备的。

相反,有些系统通过对无界内存进行建模并执行任何可能适合系统内存的可能计算来近似图灵完备性。

答案 7 :(得分:2)

我认为“图灵完成”概念的重要性在于能够识别计算机器(不一定是机械/电气“计算机”),可以将其过程解构为“简单”指令,由更简单,更简单的指令,通用机器可以解释然后执行。

我强烈推荐The Annotated Turing

@Mark我认为你所解释的是通用图灵机和图灵完成之间的混合。

在实际意义上,图灵完成的东西将是能够被编写并表示为程序的机器/过程/计算,由通用机器(台式计算机)执行。虽然它没有考虑时间或存储,正如其他人所说。

答案 8 :(得分:2)

我用简单的话可以理解:

图灵完成: 可以进行计算的编程语言/程序就是图灵完成。

例如:

  1. 可以使用Just HTML 添加两个数字。 (答案是“ ”,您必须使用JavaScript进行加法。)因此,HTML并非图灵完成。

  2. Java,C ++,Python,Javascript,以太坊的Solidity等语言均已完成Turing Complete,因为您可以使用这种语言进行计算,例如将两个数字相加。

希望这会有所帮助。

答案 9 :(得分:1)

Brasilford 教授在本video中解释的超级简要总结。

图灵完备 ≅ 做图灵机可以做的任何事情。

  1. 它具有条件分支(即“if 语句”)。此外,暗示“转到”并因此允许循环。

  2. 它获得程序所需的任意数量的内存(例如足够长的磁带)。

答案 10 :(得分:0)

图灵机需要任何程序 可以执行条件测试。那是根本。

考虑演奏者钢琴弹奏。钢琴演奏者可以 播放非常复杂的音乐 但是,在 音乐。图灵完成了。

条件逻辑既是力量又是力量 图灵完成机器的危险。

保证钢琴卷每次都停止。 TM并没有这样的保证。这个 被称为“暂停问题”。

答案 11 :(得分:0)

我们称一种语言为图灵完备的当且仅当 (1) 它可由图灵机决定,但 (2) 不能由任何比图灵机能力差的东西决定。例如,字母 {a, b} 上的回文语言可以由图灵机决定,也可以由下推自动机决定;所以,这种语言不是图灵完备的。真正的图灵完备语言——需要图灵机的全部计算能力的语言——非常罕见。也许是字符串 x.y.z 的语言,其中 x 是一个数字,y 是一个图灵机,z 是一个初始磁带配置,并且 y 停在 z 上的时间少于 x!步骤 - 也许有资格(尽管需要显示!)

一种常见的不精确用法将图灵完备性与图灵等价性混淆。图灵等价是指计算系统的属性,它可以模拟,也可以被图灵机模拟。例如,我们可能会说 Java 是一种与图灵等效的编程语言,因为您可以用 Java 编写图灵机模拟器,并且因为您可以定义模拟 Java 程序执行的图灵机。根据 Church-Turing 论文,图灵机可以执行任何有效的计算,因此图灵等效意味着一个系统尽可能有能力(如果 Church-Turing 论文成立!)

图灵等价是比真正的图灵完备性更主流的关注点;这一点以及“完整”比“等价”短的事实可以解释为什么“图灵完备”经常被误用于表示图灵等价,但我离题了。

答案 12 :(得分:-1)

作为Waylon Flinn said

  

图灵完成意味着它至少与图灵机一样强大。

我认为这是不正确的,如果它与图灵机一样强大,系统就是图灵完成,即机器完成的每一次计算都可以由系统完成,而且系统完成的每一次计算都可以通过图灵机。

答案 13 :(得分:-1)

在大多数程序员熟悉的实用语言术语中,检测图灵完整性的常用方法是语言是否允许或允许模拟嵌套的无界while语句(与语句的Pascal风格相反,具有固定的上限)。 / p>

答案 14 :(得分:-2)

如果可以测试并分支(具有'if'),则完成

答案 15 :(得分:-7)

关系数据库可以输入地点和道路的纬度和经度,并计算它们之间的最短路径 - 没有。这是一个显示SQL不是图灵完成的问题。

但是C ++可以做到,并且可以做任何问题。因此它就是。