我正在上理论 CS 课程,我们刚刚讨论了停机问题。在我的理解中,问题无法解决的原因是如果有一个程序 Halt 告诉我们一个不是程序是否停止,而你编写另一个程序证明这样
function Proof (program, input)
if (Halt(program, input)) loop infinitely;
else return 1
对我来说,问题的症结在于 if 条件是让程序无限循环,这就是 Halt 的失败条件。
这是我不确定的部分:
假设您有一个程序来检查另一个程序是否在某个输入上返回数字 4。我们称这个程序为 FourCheck。然后,我们可以编写另一个程序 ProofFour 使得
ProofFour(program, input)
if(FourCheck(program, input) return 5;
else return 4;
在这种情况下,我们可以调用 ProofFour(ProofFour,input)。如果 FourCheck() 返回 true,则 ProofFour 返回 5,使 FourCheck() 的输出不正确。如果 FourCheck 返回 false,则 ProofFour 返回 4,再次使 FourCheck() 的输出不正确。
因此,假设您基本上没有程序来检查其他程序是否正确,因为您总是可以构建一个类似于 Proof() 和 ProofFour() 的程序,它基本上反转了检查程序的输出。