图灵停机有关问题
图灵停机问题
图灵停机问题:输入一段程序代码以及提供此段代码的输入,能否通过程序来判定运行这个程序后程序是否中止。(好拗口!)
对图灵停机问题比较通俗的讲法就是:知道某个想法,能够用想法判定该想法是否可行。这么说,好像有点感觉是用结论来证明结论的感觉。其实答案是显然的,不能。
而图灵提供该问题的证明伪码为:
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 的停机问题我们可以得出:一旦把某个想法付诸实践,除非我们亲身经历这一切,目睹结局的到来,否则完全不知道它会通向一个怎样的结局。