图灵停机问题

阅读《哥德尔 艾舍尔 巴赫 集异璧之大成》这本书中,有涉及到图灵停机问题,在知乎上各大神都做了详细的解释(还说是最通俗易懂的)。其中最经典的解释为以下方法(反正我是不会承认花了两小时都没看懂,本文最后有视频解说):


停机问题
不存在这样一个程序(算法),它能够计算任何程序(算法)在给定输入上是否会结束(停机)。

那么,如何来证明这个停机问题呢?反证。假设我们某一天真做出了这么一个极度聪明的万能算法(就叫God_algo吧),你只要给它一段程序(二进制描述),再给它这段程序的输入,它就能告诉你这段程序在这个输入上会不会结束(停机),我们来编写一下我们的这个算法吧:

bool God_algo(char* program, char* input)
{
if(<program> halts on <input>)
return true;
return false;
}

这里我们假设if的判断语句里面是你天才思考的结晶,它能够像上帝一样洞察一切程序的宿命。现在,我们从这个God_algo出发导出一个新的算法:

bool Satan_algo(char* program)
{
if( God_algo(program, program) ){
while(1); // loop forever!
return false; // can never get here!
}
else
return true;
}

正如它的名字所暗示的那样,这个算法便是一切邪恶的根源了。当我们把这个算法运用到它自身身上时,会发生什么呢?

Satan_algo(Satan_algo);

我们来分析一下这行简单的调用:

显然,Satan_algo(Satan_algo)这个调用要么能够运行结束返回(停机),要么不能返回(loop forever)。

如果它能够结束,那么Santa_algo算法里面的那个if判断就会成立(因为God_algo(Santa_algo,Santa_algo)将会返回true),从而程序便进入那个包含一个无穷循环while(1);的if分支,于是这个Satan_algo(Satan_algo)调用便永远不会返回(结束)了

如果Satan_algo(Satan_algo)不能结束(停机)呢,则if判断就会失败,从而选择另一个if分支并返回true,即Satan_algo(Satan_algo)能够返回(停机)

总之,我们有:

Satan_algo(Satan_algo)能够停机=> 它不能停机
Satan_algo(Satan_algo)
不能停机
*=> *它能够停机

所以它停也不是,不停也不是。左右矛盾。

于是,我们的假设,即God_algo算法的存在性,便不成立了。正如拉格朗日所说:“陛下,我们不需要(上帝)这个假设”[4]


以上为网上摘录图灵停机问题证明过程。
但考虑到我们没有程序猿那样聪慧的灰质及白质,看到以上的证明过程只有两个选择:

  1. “呵呵,再见”
  2. “妈蛋,什么鬼!”

为了能够将装逼境界提高到新的高度,不得不操起渣渣的英文拼音,Google了一下“The Halting Problem”,翻出一段关于图灵停机问题的视频解说

记住,我们的目的只有一个:推出逻辑悖论。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 之前再更新“图灵完备智能合约”的时候,讲过了谁是图灵的问题,那么今天再看一下,当图灵+停机,又会产生什么概念。停机...
    Hellc阅读 897评论 0 0
  • 排版不好是因为文章从我的笔记应用中复制粘贴上传,而简书的富文本编辑器不支持列表的功能,也不支持代码的添加。我也不太...
    游冶星河阅读 461评论 0 1
  • 第一部分 背景和历史 第1章~第7章 术语卡 术语:奥卡姆剃刀(Occam's Razor) 印象:entia n...
    MealieXu阅读 2,002评论 0 1
  • 卡车终于在黎明破晓前赶达目的地。源跳下车,才知另有两辆运兵车已先行抵达。放眼望去,自己正身在密林深处,密林...
    花星阅读 174评论 2 2
  • 瞩目回归二十年, 繁华胜昔赞新天。 心潮澎湃谁甘后? 步履铿锵自向前! 香海波浮多潋滟, 紫荆花绽任娇姸。 富强祖...
    红色阳光阅读 546评论 0 0