"Turing Complete"这个表达式的意思是什么?
你能简单地解释一下,不涉及太多理论细节吗?
"Turing Complete"这个表达式的意思是什么?
你能简单地解释一下,不涉及太多理论细节吗?
这是最简要的解释:
Turing完备系统指的是一个能够编写程序以找到答案的系统(尽管对于运行时间或内存没有任何保证)。
所以,如果有人说“我的新东西是Turing完备的”,这意味着原则上它可以用来解决任何计算问题(虽然通常并非如此)。
有时这也是个笑话……有个人在vi编辑器中编写了一个图灵机模拟器,因此可以说vi是世界上唯一需要的计算引擎。
以下是简单的解释
Alan Turing 创造了一台机器,可以接收一个程序、运行它,并显示出结果。但是他需要为不同的程序创建不同的机器。因此,他创造了“通用图灵机”,可以接收任何程序并运行。
编程语言类似于这些机器(虚拟机)。它们接受程序并运行。现在,如果一个编程语言可以运行图灵机器所能运行的所有程序(无论使用哪种语言),那么它被称为“图灵完备”。
例如:假设有一个程序接受10个数字并将它们相加。图灵机很容易运行这个程序。但是,如果由于某种原因你的编程语言不能执行相同的加法运算,这将使它成为“图灵不完备”(就是这样说的)。另一方面,如果它可以运行任何通用图灵机能够运行的程序,则它是图灵完备的。
大多数现代编程语言(如Java、JavaScript、Perl等)都是图灵完备的,因为它们都实现了运行程序所需的所有功能,例如加法、乘法、if-else条件语句、返回语句、存储/检索/清除数据的方法等等。
更新:你可以在我的博客文章中了解更多信息:“JavaScript是图灵完备的” - 解释
图灵完备语言是指能够执行任何计算的语言。 “ Church-Turing Thesis ” 表明,任何可行的计算都可以通过图灵机来完成。 图灵机 是一种具有无限随机访问内存和有限程序的机器,该程序规定了它何时应读取、写入和在内存中移动,何时以特定结果终止以及接下来应该做什么。输入到图灵机中之前会被放在它的内存中。
图灵机可以基于其看到的内存内容做出决策 - 只支持对整数使用+
,-
,*
和/
的“语言”并非图灵完备,因为它不能根据输入进行选择,但图灵机可以。
图灵机可以永远运行 - 如果我们从Java、Javascript或Python中删除了任何形式的循环、GOTO或函数调用能力,它将不是图灵完备的,因为它不能执行任何永不结束的计算。Coq 是一个定理证明器,无法表达不终止的程序,因此它不是图灵完备的。
图灵机可以使用无限内存 - 如果有一种与Java完全相同的语言,但一旦使用超过4吉字节的内存就会终止,那么它将不是图灵完备的,因为图灵机可以使用无限内存。这也是正则表达式不是图灵完备的原因之一,而Java仍然是图灵完备的语言,因为Java 语言没有限制它使用无限内存的能力。
图灵机具有随机访问内存 - 如果一种语言只能通过对栈执行push
和pop
操作来处理内存,则该语言不是图灵完备的。如果我有一个“语言”,它只读取一次字符串,并且只能通过从栈中推入和弹出来使用内存,则可以通过在看到(
时推入并在看到)
时弹出来告诉我字符串中的每个(
是否有自己的)
。然而,它无法告诉我每个(
都有自己的)
并且每个[
都有自己的]
(请注意,([)]
符合此标准,但([]]
不符合)。图灵机可以使用其随机访问内存分别跟踪()
和[]
,但是这种仅具有堆栈的语言无法做到。
图灵机可以模拟任何其他图灵机 - 给定适当的“程序”,图灵机可以接受另一个图灵机的“程序”并在任意输入上模拟它。如果您的语言禁止实现Python解释器,则它不是图灵完备的。
如果您的语言具有无限随机访问内存、条件执行和某种形式的重复执行,那么它可能是图灵完备的。还有一些更奇特的系统,它们仍然可以实现图灵机能做到的一切,这也使它们成为图灵完备系统:
根据 维基百科:
图灵完备性(Turing completeness)是以艾伦·图灵的名字命名的,其重要性在于目前为止每个计算设备的可行设计都可以被通用图灵机所模拟 - 这一观察被称为“丘奇-图灵论题”。因此,一个能够作为通用 图灵机 的机器原则上可以执行任何其他可编程计算机能够执行的计算。然而,这与编写程序所需的工作量、机器执行计算所需的时间以及机器可能拥有的与计算无关的能力无关。
虽然真正的图灵完备机器很可能在物理上是不可能的,因为它们需要无限的存储空间,但图灵完备性通常被宽泛地归属于如果它们有无限存储空间就会成为通用的实际机器或编程语言。所有现代计算机在这个意义上都是图灵完备的。
除非说“图灵完备意味着‘在足够的时间和空间下能够回答可计算问题’”,否则我不知道你如何比这更非技术性地表达了。
图灵完备意味着它至少和一台图灵机一样强大。这意味着任何能够被图灵机计算的东西都可以被图灵完备系统计算。
目前还没有比图灵机更加强大的系统被发现,所以暂时来说,说一个系统是图灵完备的就等同于说这个系统和任何已知的计算系统一样强大 (详见Church-Turing Thesis)。
从根本上讲,图灵完备性只有一个简明要求:无限递归。
甚至不受内存的限制。
我独立思考过这个问题,但是这里有一些关于这个说法的讨论。我的LSP定义提供了更多上下文信息。
这里的其他答案没有直接定义图灵完备性的基本本质。
a*
。 - user824425while (p) { /* ... */ }
。 "我在阐述广义递归和执行任何可能计算的能力之间的等价性。" Church's thesis 是一个非常不同的问题,应该真正分开讨论。 - user824425简单来说,图灵完备系统可以解决任何可能的计算问题。
其中一个关键要求是擦板大小无限制,并且可以倒回以访问先前写入的擦板。
因此,在实践中,没有任何系统是图灵完备的。
相反,一些系统通过模拟无限制内存并执行适合于系统内存的任何可能计算来近似于图灵完备性。
以下是自己在视频中总结的超简要点。
Turing Complete ≅ 可以做任何图灵机能做的事情。
它具有条件分支(即“if语句”)。同时,意味着“跳转”,从而允许循环。
它可以获得程序所需的任意数量的内存(例如足够长的磁带)。
图灵机要求任何程序都能执行条件测试。这是基本的。
考虑一下自动钢琴卷轴。自动钢琴可以演奏高度复杂的音乐,但音乐中从来没有条件逻辑。它不是图灵完备的。
条件逻辑既是图灵完备机器的力量,也是危险所在。
钢琴卷轴保证每次都会停止。对于图灵机来说,没有这样的保证。这被称为“停机问题”。