一个程序可以决定一个任意程序是否因某些输入而停止?

时间:2015-07-28 18:24:42

标签: logic computer-science halting-problem computability

是否有程序(可以暂停?p)可以判断是否存在输入以便(p输入)停止?

我试过简单的对角化,但它只告诉我(可能会停止?diag-may-halt)必须是真的。它无助于证明程序是否存在。

这样的程序是否存在?

My diagonalization

1 个答案:

答案 0 :(得分:2)

不,may-halt?不存在。

(我不认为对角化的直接证明不会比Halting problem is undecidable的证明复杂;否则 将成为标准示例。相反,让&# 39; s将你的问题减少到停机问题:)

假设有一个程序may-halt? p,它决定程序p是否暂停某些输入。然后定义:

halt? p x := may-halt? (\y -> if y==x then p x else ⊥)

括号中的东西是派生程序。让我们分解一下:

halt? p x := may-halt? p'

其中p'是(i)在输入x上计算p x的程序,(ii)在任何其他输入上只是循环而不终止:

p' y := if y==x then p x else ⊥

当且仅当may-halt? p'终止时,p x才输出true。

因此,对于任何计划p和输入xhalt? p x将决定p x是否终止。但我们知道这是不可能的,因此may-halt?不存在。