MathLabs
定理已证明

停机问题的不可判定性

命题陈述

不存在这样的算法:对任意给定的程序(图灵机)PP 与输入 xx,总能在有限时间内正确判断 PP 在输入 xx 上运行是否会停机。

为什么成立?

假设存在这样的停机判定器 HH。构造一个程序 DD:对输入的程序 QQ,先用 HH 检查 QQ 在以自身为输入运行时是否停机,然后做相反的事(若 QQ 停机则死循环,若 QQ 死循环则停机)。把 DD 自身作为输入运行,无论哪种情形都会导致矛盾,因此 HH 不可能存在。

证明思路

对角线论证:假设存在判定器 H(P,x)H(P,x),能输出 PP 在 xx 上是否停机;定义 D(P)=D(P) = :若 H(P,P)H(P,P) 回答“停机”则“死循环”,否则“停机”;再追问 D(D)D(D) 是否停机。若它停机,按定义 H(D,D)H(D,D) 应回答“死循环”,矛盾;若它死循环,H(D,D)H(D,D) 应回答“停机”,同样矛盾。因此 HH 不可能存在。

证明者

用到此定理的主题

相关定理

分步证明

该定理暂无分步证明。

参考文献

  1. Alan M. Turing (1936). On Computable Numbers, with an Application to the Entscheidungsproblem · DOI:10.1112/plms/s2-42.1.230
  2. Michael Sipser (2012). Introduction to the Theory of Computation