停机问题 (halting problem)

我头像左下脚的那个人像是阿兰.图灵,计算机的创始人,冯.诺伊曼根据图灵的理论实现了计算机。 这哥们一生太牛逼了,这里回顾下被他证明的停机问题,也就是说,图灵机有做不到的东西,碰到客户提出一些可笑需求的时候我都会摆这个问题给他们讲,一讲客户就蒙,蒙了就不敢再问为什么做不到,自然在提新需求之前就不会拍脑袋就提了。大师的理论被我拿来拍客户实在是有些亵渎和龌龊,但是也算是活学活用吧。


停机问题

给定一个图灵机 T,和一个任意语言集合 S,是否 T 会最终停机于每一个 s  ∈ S

其意义相同于可确定语言。显然任意有限S 可判定性的,可数的(countableS 也是可停机的

其实简单的理解起来,是否有一个程序,给它一个程序和即将输入到这个程序的输入项,然后是否可以判断出运行这个程序会停机或者会无限运行下去。

图灵在1936年证明了,没有这样一个程序H可以判断任意图灵程序在任意输入项上是否会停机。


来看证明吧

图灵证明了,如下的程序H是不存在的

证明 

假设H存在,则H的描述如下且H 属于完全图灵机程序 I

程序H

输入 :任意程序 i,任意输入 x  

输出: 停机 (1 ) 或 不停机 (0)


同时也存在另外一个程序

程序G

输入 : i

运行 :H(i , i)

输出 : (如果H输出0)0 , (其他情况)Undefined



那运行G (G)

G (G)

if  H(G,G)== 0  输出 0

otherwise   循环


现在我们能得到的结论就是 ,这段程序会这么跑,

如果 H(G,G) == 0  ,也就是说 H 程序测试( G(G))的结果是G(G)不停机。 但是 G(G)本身当H(G,G)==0 时停机。

如果 H(G,G) == 1 , 也就是说 H 程序测试( G(G))给出不停机。 但是G(G)本身的定义是当 H (G,G)==1 时停机。

上述两个结果都是自相矛盾的,所以H不能总是给出正确的答案,所以H不存在。


这段被我说烂掉的东西不知蒙倒了多少提出一些新的可笑的需求的客户,罪过罪过,这个理论实在不该被我这么用。

你可能感兴趣的:(停机问题 (halting problem))