哥德尔,图灵和康托尔 part 2 停机问题

图灵著名的停机问题对于软件开发者而已是非常熟悉的。下面简单描述停机问题:

假设给你一个计算机程序的源代码,也给你所有程序要用的数据,文件,硬盘,DVD等等,所有它需要处理的东西。你能告诉我程序最终是否能够输出我们需要的结果吗,并且在工作完成之后,程序是就退出,还是会永远运行下去不会停止呢?换句话所就是,对于它会不会停止这个问题,
检查程序和数据,是不是足以能够让你回答是或否呢?

图灵对于停机问题不可解决的证明是决定性的。没有一个软件仅靠检查另一个软件的源代码,就能够决定它是否会停止运行,还是会永远运行。这是从软件领域对哥德尔证明的重新表述。很多程度上这个证明与哥德尔的是相同的,只是更容易理解,这个证明可以表示成简单的软件代码,而不是令人费解的运行在逻辑语法上的函数。停机问题的证明对开发人员是很容易理解的,但对其它人来讲并没有太大用处,因此,我们这里就不去讲述了。可以自己去读。

不用枯燥的证明,我们用一个实际的例子来展示。比如我向你要一个预言,下面这个程序会不会停止呢?

从$x=4$开始。给我第一个素数$p$,$p$小于$x$。如果$x-p$也是素数,把$x$加2然后继续。如果不是,让$p$作为下一个小的素数然后重新开始。重复以上直到$p=2$。如果$x-p$还不是素数,打印$x$然后退出。

问题并不复杂,而且对于任何现代的计算机语言来讲都很简单。假设我们不知道停机问题,那很可能会想这样简单的问题应该是容易预测的。

迷惑之处在于,我没有说是任何程序。上面的语句描述的是著名的哥德巴赫猜想,300年来都是不可证明的。软件仅仅检查这个语句“每个大于2的偶数能够用2个素数之和表示”是否为真,然后移到下一个偶数。对所有前4,000,000,000,000,000,000个数检查下来,我们仍然没有得到一个真正的数学证明。

关键在于,知道这几行代码是否停止等于证明哥德巴赫猜想!如果猜想是真则软件不会停止,检查所有直到无穷大的数,都不会发现任何一个破坏这个规则的数。如果猜想为假,那软件就会在找到第一个破坏规则的数之后停止。

有些有趣的东西正在发生。很明显软件只是另一个写逻辑形式系统的方法。我们能用语言或者软件,甚至更低级别的纯粹的哥德尔风格的逻辑算符,如果想的话。然而,基本上,几行语句就能够表示数学上最基础的问题。知道什么时候程序会停止-给出我们想要的结果-和证明难以置信的难题一样困难。我们甚至可以重新用哥德尔的递归函数来写这个软件,然后写这样一个语句“这个函数在某个数之后停止是否为真”。同样是又一次证明这个语句和证明哥德巴赫猜想是一样的。

哥德巴赫猜想目前是数学上一个很大的不可解问题。或者某天有人会真正找到证明;但很可能是某人不用其他公理,证明这个猜想是不可决定的。这样的证明不可思议地难,但类似的问题以前也曾经被证明过。

即使形式系统中最简单的表达式,比如几行软件代码,都能表示非常难的语句,对于我们目前的数学知识,其中一些是不能决定的。软件限制不了其他软件。软件又是如此普遍的存在,以至于行为完全不可预测。另一个软件不能预先告诉你结果会是什么。得到结果的唯一的办法,只有等他运行完毕-可能几小时,或者永远运行下去。

停机问题显示出硬币的另一面。如果一个语句是不可判定的,你不能作弊,只能写一个软件去检查它。软件轻易就可以表示那个语句,但它可能会用无尽的时间去完成它的工作。只要语句的不可判定无法证明,你就证明不了软件是不是会停止。无穷的知识,更多的证明就在那里:然而这些知识却触摸不到,只要我们受限于当前的系统。

既然现在我们开始处理无穷,就是时候了解更多了。大概40年前哥德尔打开大门时,另一个辉煌的思想正在分析关于无穷的问题。

初遇无穷

我们思考无穷的时候,第一个想到的就是无穷大。但比起一行简单递增的数字来讲,无穷变得更加有趣。我们考察自然数和实数。我们知道自然数是$1,2,3$这样的序列,用于计数。我们用实数来衡量真实世界里面的元素,-即,两点间的距离是1.23米之类。无穷的自然数和无穷的实数一样显而易见。

格奥尔格.康托尔证明了一个惊人的结论,称为康托尔对角证明,即就算用无穷的自然数,我们仍然不能对实数进行计数!不知道怎么了,无穷多个自然数其实不够“无穷”!而且有不同类型的无穷;由实数组成的无穷,要比自然数组成的无穷更强大。这个证明惊人地简单。

【证明略...对角引理】

很明显连续无穷更强大。那是属于我们周围真实世界的无穷,我们世界里的每个东西都是实数描述的。然而我们永远不知道任意这些实数的准确数字。我们永远局限在我们仪器的误差之中。我们的测量工具在某个地方舍弃了数据,包含无穷的数字的实数被截断。

【...】

这篇文章其实是一篇非常好的引入计算理论和lambda
calculus的文章。读者可以知道图灵机实际上是数学问题,而lambda其实是一个逻辑系统。能够在二者之间建立起初步的概念。然后在Reducibility和NP之类的主题,就可以选择角度,互相参照。


哥德尔,图灵和康托尔 part 2 停机问题,布布扣,bubuko.com

时间: 2024-12-15 06:55:53

哥德尔,图灵和康托尔 part 2 停机问题的相关文章

哥德尔,图灵和康托尔

在看计算理论相关的书的时候,偶然看到这个blog,http://skibinsky.com/godel-turing-and-cantor-the-math/,写的很好.我觉得用自动机的方式讲计算理论的话,从DFA,正则,到图灵机,都是很直观而且容易理解的,但是从Halt, Reducibility开始,再用图灵机的语言来描述就是一件可怕而且容易令人迷惑的方式了.这个时候通常不得不退回去,尝试从Lambda Calculus的角度去理解计算理论.不过 Recursion 的符号确实也很讨厌.如果

哥德尔不完全性定理:现代数学的边界

德国数理逻辑学家哥德尔(Kurt Godel,1906-1978)是康托尔的继承人,也是现代数学边疆的开拓者. 1931年,年仅25岁的哥德尔在其博士论文(只有两页纸)证明了知名的"不完全性定理",其结论如下:: 1)If the system is consistent(不矛盾),it cannot be complete(完全的): 2)The consistency(不矛盾性)of the axioms(公理系统)cannot be proven(被证明) within the

哥德尔不全然性定理:现代数学的边界

德国数理逻辑学家哥德尔(Kurt Godel,1906-1978)是康托尔的继承人.也是现代数学边疆的开拓者. 1931年,年仅25岁的哥德尔在其博士论文(仅仅有两页纸)证明了知名的"不全然性定理",其结论例如以下:: 1)If the system is consistent(不矛盾),it cannot be complete(全然的). 2)The consistency(不矛盾性)of the axioms(公理系统)cannot be proven(被证明) within t

哥德尔不完备定理

自从牛顿用物理的直觉,闯进无穷领域里大胆计算,铸造出犀利无比的分析工具后,许多人凭借着直观想象和聪明,也涌进去推导出许多互相冲突的结论,数学家花了两百多年的时间,才厘清了分析领域里的混乱,将整个数学建立在严格逻辑,而不是直观想象的基础上. 欧几里德几何一直是科学理论的范本,四条自明性的公理加上一条平行公设,通过逻辑演绎,推导出平面几何无穷数量的定理,一直到了近代还只有几何,被认为是具有坚实基础的数学分支,在这光辉的榜样下,人们尝试用这公理化的方法来规范整个数学,人们后来发现欧几里德也不够严谨,逻

哥德尔-----------------

以前崇拜物理,因为逻辑简单.讨厌数学,因为物理才能给数学带来利益. 到了大学,然后就垮了.就像天书, 紧接着,其他需要数学的地方,就同时垮了.然后形成了一个大轮回.回到起点,数学是一个哲学问题.一直到现在,还是一团浆糊.凭借网络的力量,数学理解力上升,哲学思想上升.然后带动其他相关领域. 会编程了.但是数学根基很浅显. 只是命好,编程只需要理解力,底层别人都已经给你搞好了,只需要调用. 哥德尔,的牛逼的地方,在于用数学推演上帝的存在.并得出哥德尔不完备定理. 所以数学也等同于推演.但是推演有极限

康托尔连续统假设正确吗?

大家知道,在1874年,康托尔利用"对角线法"巧妙地证明了实数集(也叫"连续统",Continum)是不可数集合,让数学家大开眼界.但是,实数本身是不是最小的不可数集合,当时康托尔自己并不知道.为了弄清楚这个问题,虽然康托尔自己付出了最大的努力,但是,毫无结果. 连续统是不是最小的不可数集合,对于数学基础研究而言,是一个根本问题.为此,1900年,在法国巴黎召开的第二届世界数学家大会上,希尔伯特蒋其列为第一个未解决的问题(共计23个问题),提请世界数学家注意. 在上

康托尔是怎样发现超限数的?

大家知道,超限数(Transfinite)集合论的核心概念.我们搞清除了超限数是怎样发现的这个问题,实质上就等于搞清除了集合论是怎样创立的. 在三维空间中,坐标原点O的直角坐标是(0,0,0).由此,我们可以推想,在无限维空间中,也有类似情况.回顾历史,19世纪的欧洲,三角级数是一个非常热门的研究领域.但是,三角级数收敛的关键问题是极限函数变现的唯一性,如果三角级数收敛的唯一性不能证明,整个现代数学必然是乱糟糟的了. 在当时情况下,许多知名数学家都知道上述问题是个"硬骨头",不敢问津.

康托尔定理是怎样证明的?

康托尔定理指的是什么?定理的内容很有兴趣,但是,定理的证明方法(所谓"三角线证明法",Diagonal Method)却很独特,超出一般人的想象力. 康托尔定理是对于一般的任意集合A来说的,定理是说:给定任意集合A就怎么怎么样.集合A是抽象的集合,定理内容属于什么具体范畴很不好确定,看上去定理内容就有点"奇怪". 我们把问题简化,康托尔定理断言:单位区间[0,1]中的数字不可计数(即"数"不过来).也可以说,定理断定:区间[0,1]里面的数字比自

编程题目----约德尔测试

约德尔测试 题目描述 兰博和提莫闲聊之后,回归到了他们的正题,约德尔人的未来. 说起约德尔人的未来,黑默丁格曾经提出了一个约德尔测试,将约德尔人的历史的每个阶段都用一个字符表达出来.(包括可写字符,不包括空格.).然后将这个字符串转化为一个01串.转化规则是如果这个字符如果是字母或者数字,这个字符变为1,其它变为0.然后将这个01串和黑默丁格观测星空得到的01串做比较,得到一个相似率.相似率越高,则约德尔的未来越光明. 请问:相似率为多少? 输入 每组输入数据为两行,第一行为有关约德尔人历史的字