用反证法。
假设存在一个可以计算停机问题的程序hating声明如下, 该程序计算p是否可停机并返回结果。
int halting(p);
halting的返回值可以为1或0,若p可停机,halting返回1,若p不可停机,halting返回0.
再定义程序prove如下。
void prove(p){
bool x = halting(p);
while(x)
;
}
现在,我们把prove程序作为参数p传入prove程序中。
若prove可停机,x为1,while(1)陷入死循环,则prove不可停机。
若prove不可停机,x为0,while(0)直接结束,则prove可停机。
prove即可停机,又不可停机,矛盾,所以假设不成立。所以不存在可以计算停机问题的程序。