MathLabs
定理已证明

赖斯定理

命题陈述

对偏可计算函数的每个非平凡语义性质 PP,集合 {e:φe has property P}\{e : \varphi_e \text{ has property } P\} 都是不可判定的。

为什么成立?

这一个定理立刻排除了诸如"这个程序是否计算零函数""这个程序是否计算全函数""这两个程序是否等价"等无数关于程序行为的自然问题的算法——无需为每个问题单独构造对角线论证,一击即中。

证明思路

不失一般性,假设处处未定义的函数 ∅\emptyset(由一个对任何输入都永不停机的程序所计算)不具有性质 PP——否则改用补性质 ¬P\lnot P 论证,它可判定当且仅当 PP 可判定。由于 PP 非平凡,固定某个程序 e0e_0,其函数 φe0\varphi_{e_0} 具有性质 PP。

反证:假设 PP 可由某算法 DD 判定(给定一个程序索引,DD 停机并正确报告该程序的函数是否具有性质 PP)。我们把停机问题归约到 PP,从而与定理1矛盾。

对任意一对 (e,x)(e,x),有效地构造(通过简单的文本操作——克莱尼的 s-m-n 定理)一个新程序 e′e',它对任意输入 yy:先模拟程序 ee 在输入 xx 上运行;一旦该模拟停机,e′e' 就接着模拟程序 e0e_0 在输入 yy 上运行并输出其结果。

考察两种情形。若 ee 在 xx 上停机:对 ee 在 xx 上的模拟会结束,于是 e′e' 在所有输入上的行为都与 e0e_0 完全一致,即 φe′=φe0\varphi_{e'}=\varphi_{e_0}——它具有性质 PP(因为 PP 是语义的,只依赖于所计算的函数,而 φe0\varphi_{e_0} 具有 PP)。若 ee 在 xx 上不停机:对 ee 在 xx 上的模拟永不结束,于是 e′e' 在任何输入 yy 上都永远到不了模拟 e0e_0 的那一步;因此 φe′\varphi_{e'} 就是处处未定义的函数 ∅\emptyset,按假设它不具有性质 PP。

所以:ee 在 xx 上停机   ⟺  \iff φe′\varphi_{e'} 具有性质 PP   ⟺  \iff D(e′)D(e') 回答"是"。由于 (e,x)↦e′(e,x)\mapsto e' 可计算,算法"由 (e,x)(e,x) 计算出 e′e',再运行 D(e′)D(e')"就能判定停机问题——与定理1矛盾。故不存在这样的 DD:PP 不可判定。■\blacksquare

用到此定理的主题

分步证明

该定理暂无分步证明。

参考文献

  1. Wikipedia contributors (2024). Halting problem
  2. Wikipedia contributors (2024). Rice's theorem
  3. Wikipedia contributors (2024). Ackermann function