我考虑了一会儿是否要添加另一个答案。其他答案集中在他的问题的中间(关于“图灵完成”,“重言式”等)。让我抓住第一部分和最后一部分,从而获得更大而略带哲学的图景:
但是这是什么意思?
图灵完善意味着什么?
有没有一种方法可以定义Turing Machine的功能而不仅仅是说“能够模拟另一台Turing Machine”?
非正式地讲,图灵完善意味着您的机制可以运行您可能想到的任何算法,无论它有多复杂,深入,递归,复杂,长(就代码而言),无论有多少存储空间或时间都可以需要对其进行评估。不言而喻,如果该问题是可计算的,它只能成功,但如果它是可计算的,它会成功(停止)。
(注:要找出为什么这是“非正式的”,请查看符合这些原则的Church-Turing论文,措辞要更详尽;不过,作为论文,它可能正确也可能不正确。感谢@DavidRicherby支持在评论中指出这一点。)
“算法”是指我们今天通常理解为计算机算法的内容;即,通过一系列离散的步骤来操作存储,并混入了一些控制逻辑。但是,它与Oracle计算机不同,即它不能“猜测”。
实用的非tc语言示例
如果您已编程,则可能知道用于将字符串匹配到某种模式的正则表达式。
这是一个结构的一个例子不是图灵完备。您可以轻松地找到不可能创建与某些短语匹配的正则表达式的练习。
例如(这肯定使许多程序员在实际的实际应用中感到烦恼),从理论上和实践上都不可能创建与编程语言或XML文档相匹配的正则表达式:正则表达式无法找到块结构(do ... end
或{ ... }
语言;打开和关闭XML文档中的标签)(如果允许的话,可以任意深一些)。如果有一个限制,例如您只能有3个级别的“递归”,那么您可以找到一个正则表达式;但是如果没有限制,那是不行的。
由于显然可以用图灵完备的语言(例如C)创建程序来解析源代码(任何编译器都可以),因此正则表达式将永远无法模拟该程序,因此按定义它们不是图灵完备的
动机
图灵机本身的想法是不切实际的。也就是说,图灵当然不是发明它来创建真正的计算机之类的东西,例如与查尔斯·巴贝奇或冯·诺依曼相反。具有图灵机概念的要点是极其简单。它几乎不包含任何内容。它将可能的(和实际的)计算机减少到可以想象的最低水平。
反过来,这种简化的目的在于,这使得思考理论问题(如暂停问题,复杂性类别以及任何理论计算机科学本身困扰自己)的思考变得容易。特别地,一个特征是通常很容易通过简单地用该语言编程所述图灵机来验证给定语言或计算机是否可以模拟图灵机。
到无穷远
请注意,您永远不需要无限的时间或存储空间。但是时间和存储空间都是无限的。对于每个可计算的运行,它们将具有最大值,但是该值可以变为多大没有限制。一台真正的计算机最终将用完RAM的事实在这里被掩盖了;这当然是对任何物理计算机的限制,但它也是显而易见的,并且与计算机的理论“计算能力”无关。另外,我们根本不关心实际需要多长时间。因此,我们的小型机器可以使用任意数量的时间和空间,这绝对是不切实际的。
... 超越
一个惊人的最后一点,那么,就是这样一个简单的,简单的事情可以做的一切任何可以想象真正的计算机可能曾经,在整个宇宙,实现(只是很慢得多) -至少就我们今天所知。