图灵机思想的价值在于它虽然结构简单,但可以描述任何人类能够完成的逻辑推理和计算过程,换句话说,图灵机的计算能力是人类能够完成的所有计算的全集,只要一个问题是可判定的,且它的计算过程可以被符号和算法所表达出来,它就可以使用图灵机来完成计算。当时很多学者都无法想象这样一台听起来跟打字机差不多的东西,会是一个能够承载人类所有可以完成的逻辑和运算的计算模型。此前,“计算”能力是被视为与“思考”相类似的人类抽象能力,大家一时间很难接受“计算”可以被如此简单的模型所概括。
了解过“可计算性理论”(Computability Theory)这个学术分支历史的读者会知道,在图灵机被提出之前其实就已经有了能模拟人类所能进行的全部计算过程的模型。例如图灵硕博阶段的导师—普林斯顿大学的阿隆佐·邱奇(Alonzo Church,1903—1995)教授于 1928 年提出的“ Lambda 演算”就是其中之一。但相比其他计算模型,图灵机的优势在于它极为直观、易于理解,而且很容易通过机械或者电子技术来实现。因此,图灵机在其价值被人们发现后,迅速成为计算机解决“如何计算”问题的基础,在计算理论上也成为可计算性的对标物。当一个新的计算模型出现时,人们会判定它能否解决所有在算法上可计算的问题,如果能,它就被称为是图灵等价或者图灵完备的。今天,我们称某种程序设计语言是图灵完备的,意思也是所有可计算的算法都能够用这种语言来实现(如今天常见的 C、C++、Java、JavaScript 等都是图灵完备的,而 HTML、CSS 这些语言则不是图灵完备的<sup>○一</sup>)。由于笔者是程序员,因此这里再多写一句题外话:由于图灵机的结构简单,不考虑编码效率和可读性的话,只需寥寥几个操作指令就能照着图灵机的定义实现一门图灵完备的语言,制造出脑洞大开的效果,大家有兴趣的话可以搜索一下“ BrainFuck”和“Whitespace”这两门语言看看。
10
第一部分 以智慧创造智慧
○一 笔者在 StackOverflow 上找到一篇通过 CSS3 的伪类定义来实现 Rule 110(一种元细胞自动机,被证明是图灵等价的)方法的文章,它的作者简直要把 HTML、CSS 给玩坏了。这里大家通过两门语言的差异对比有个直观感受就好,其他就不用纠结了。文章地址为https://stackoverflow.com/questions/2497146/is-css-turing-complete。