MathLabs

解法:MRDP定理:丢番图集合恰为递归可枚举集合(1970年)

第 8/9 步:停机问题:一个可枚举但不可判定的集合
通俗地说

设想要写一个万能检测程序,只看任意其他程序的代码,就能在不真的把它跑到永远的情况下,提前正确预测这个程序最终会停机还是会永远运行下去。阿兰·图灵在1936年用一个巧妙的自指技巧证明,不可能存在这样一个对所有程序都通用的万能检测程序。

然而,“在自己代码上会停机的程序”这个集合仍然是可枚举的:你总能通过真的运行这个程序并等它停下来,来确认“是的,它会停机”,但你永远无法在任何固定的时间内确定“不,它永远不会停机”。这是一个递归可枚举但不可判定集合的具体例子——而根据MRDP定理,它因此必定已经是丢番图的。

K={e:program e halts on input e},K is r.e. but not decidable (Turing, 1936)K = \{ e : \text{program } e \text{ halts on input } e \}, \quad K \text{ is r.e. but not decidable (Turing, 1936)}
详细分析

阿兰·图灵在其1936年关于可计算数的奠基性论文中,定义了一个精确的计算数学模型(图灵机),并用一个对角线式的自指论证证明了停机问题是不可判定的:集合 K={e:Φe(e)↓}K = \{ e : \Phi_e(e){\downarrow} \}(即以自身代码作为输入时会停机的程序代码 ee)不存在能对每个 ee 都正确判定成员关系的算法。

然而 KK 仍然是递归可枚举的:一个算法可以在输入 ee 上逐步模拟程序 ee,一旦模拟停机就输出 ee;对于 e∉Ke \notin K,它只是永远不会终止,因此它能确认成员关系,却永远无法确定地否定它。KK 是r.e.但不可判定集合的典型例子,基本上每一个经典的不可判定性结果都以某种方式归约到它。

根据上一步证明的MRDP定理,递归可枚举的 KK 本身必定是丢番图的:存在一个多项式 PP,使得 e∈K  ⟺  ∃x1,…,xn P(e,x1,…,xn)=0e \in K \iff \exists x_1, \ldots, x_n\, P(e, x_1, \ldots, x_n) = 0。这恰好为最后一步所需要的归约铺平了道路,以便把图灵的不可判定性结果转移到希尔伯特第十问题上。

本步骤中的术语
可判定(递归)集合
存在一个算法,对每个输入都会停机,并根据成员关系正确输出“是”或“否”的集合;这严格强于仅仅是递归可枚举。
停机问题
给定程序在给定输入上是否会停机的问题;图灵在1936年证明,不存在单一算法能对所有程序和输入都正确回答这个问题。
本步骤用到的知识