定理已证明
停机问题的不可判定性
命题陈述
不存在这样的算法 :对每个程序索引 和输入 ,它总是停机并正确输出 (即以输入 运行程序 )是否会停机。
为什么成立?
这正是无论何种杀毒软件、编译器或集成开发环境,都无法在完全一般的意义下完美检测出死循环、死代码或"这个函数总是崩溃"的数学原因——这不是当今工程技术的局限,而是一堵坚硬的数学壁垒。
证明思路
反证:假设存在这样的判定器 :若 (停机)则 ,若 (永远运行)则 ,且 本身总是停机并给出正确答案。
利用 ,构造一个新程序 ,对输入 :计算 ;若 ,则 进入无限循环;若 ,则 立即停机。 是由 有效构造而成的(只是 加上一条 if 语句和一个循环),所以它有某个程序索引 ,即 。
现在提出自指的问题: 是否停机?
情形1:若 停机,那么由 的正确性,。但由 的定义, 会使 在输入 上永远循环——即 不停机。矛盾。
情形2:若 不停机,那么由 的正确性,。但由 的定义, 会使 在输入 上停机——即 确实停机。矛盾。
两种情形都导致矛盾,所以 存在的假设为假。停机问题不可判定。
用到此定理的主题
分步证明
该定理暂无分步证明。
参考文献
- Wikipedia contributors (2024). Halting problem
- Wikipedia contributors (2024). Rice's theorem
- Wikipedia contributors (2024). Ackermann function