从matrix67的网站上翻到了一篇关于停机问题的文章,细细思考了一下感觉挺有意思,证明非常的巧妙。
http://www.matrix67.com/blog/archives/55
停机问题的简单表述其实就是不能写出程序来判断一个程序是死循环。
为什么,”背叛法“来证明:
假设我们能写出一个程序B能够判断程序A在输入i的时候是不是进入死循环。
B(program,input)
然后再写一个背叛程序A
if B(A,A) then
return 0
else
loop forever
为什么叫A为背叛程序,因为我故意让他返回了一个跟B(A,A)相反的结果。
如果你利用B来判断出A是死循环,那么我就让A返回一个0,相反的如果你利用B来判断出A不是死循环,我就让A进入死循环。
正是这个停机问题,导致现代计算机中存在着死循环,其实,类似的命题还有很多,比如:
我在说谎。
万能的上帝不能创造出一个不能被打碎的鸡蛋。
理发师只给不给自己理发的人理发。
所有这些命题,其实都是一个如果A,那么非A的命题,也叫做罗素悖论,正是它导致了第三次数学危机的发生。