某程序在给定数据下,是否会在有限时间内结束运行。(反证法)
假设可以写出判断程序 HaltChecker
我们编写一个名为HaltChecker判断程序,来判断上述问题。
Boolean HaltChecker(p,d) p 一个为需要判断的程序,d 为所需要的数据。
- 返回true 表示p会在有限时间内结束运行
- 返回false表示p不会在有限时间内结束运行
编写SelfLoop程序
SelfLoop (p){
halts = HaltChecker(p, p);
if(halts) {
while死循环
}
}
- 判断“ 对于程序p 将程序p本身作为数据输入时会不会结束运行 ”
- 如果判断结果是会结束运行,那么SelfLoop就会陷入无限循环
- 如果判断结果是不会结束,那么SelfLoop就会马上结束运行
推导出矛盾
判断SelfLoop(SelfLoop)的运行情况
(1) 假设SelfLoop(SelfLoop)会在有限时间内结束运行
假设SelfLoop(SelfLoop)会在有限时间内结束运行。即 HaltChecker(SelfLoop,SelfLoop)为false的情况,而HaltChecker(SelfLoop,SelfLoop)为false意思是 如果将SelfLoop传入SelfLoop,SelfLoop就不会结束运行 与假设矛盾。
(2)SelfLoop(SelfLoop)陷入无限循环
假设SelfLoop(SelfLoop)陷入无限循环。即 HaltChecker(SelfLoop,SelfLoop)为true的情况,而HaltChecker(SelfLoop,SelfLoop)为true意思是 如果将SelfLoop传入SelfLoop,SelfLoop会结束运行 与假设矛盾。
(1)(2)都矛盾 说明假设能写出HaltChecker就必然产生矛盾