图灵停机问题

来源:互联网 发布:我的世界命令方块编程 编辑:程序博客网 时间:2024/06/10 07:48

          图灵停机问题:输入一段程序代码以及提供此段代码的输入,能否通过程序来判定运行这个程序后程序是否中止。(好拗口!)

          对图灵停机问题比较通俗的讲法就是:知道某个想法,能够用想法判定该想法是否可行。这么说,好像有点感觉是用结论来证明结论的感觉。其实答案是显然的,不能。

          而图灵提供该问题的证明伪码为:

Program Bug;
var
    code:input_type;
begin
   get(code);   //读入code
   if halting(code,code) then repeat until false
      else halt;
end.

        有了这段伪码,证明就非常简单了。采用反证法来证明,即假设能够通过程序来判定运行这个程序后程序是否中止。这里分两种情况来考虑:1.通过运行这个程序确定程序会中止,即halting(code,code)返回值为true时,那么执行上面的代码会出现死循环的情况,与halting(code,code)相违背;2.通过运行这个程序确定程序会死循环,即halting(code,code)返回值为flase,那么执行上面的代码出现停机情况。综合可得,出现了悖论。          

看了图灵停机问题的证明,感觉越是没谱的东西,有的时候证明比较简单,但是你的思维一定要比较清醒,不要被问题所迷惑。 

其实Turing 的停机问题我们可以得出:一旦把某个想法付诸实践,除非我们亲身经历这一切,目睹结局的到来,否则完全不知道它会通向一个怎样的结局