是否有程序(可以暂停?p)可以判断是否存在输入以便(p输入)停止?
我试过简单的对角化,但它只告诉我(可能会停止?diag-may-halt)必须是真的。它无助于证明程序是否存在。
这样的程序是否存在?
答案 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
和输入x
,halt? p x
将决定p x
是否终止。但我们知道这是不可能的,因此may-halt?
不存在。