编程问题的提出
我们是否可以编写一个程序用来测试任何可以用哥德尔数表示的程序是否会终止?
反证法
假设这样的测试程序存在,然后证明它的存在将会产生一个矛盾。
证明步骤
第一步 假设测试程序存在
- 存在这样的一个程序,名为Test;
- 该程序使用任何可以用哥德尔数表示的程序P作为输入,输出变量X(1或0);
- 如果程序P会运行终止,则输出1;
- 如果程序P没有停止,则输出0;
如下图所示:
第二步 构造Stange程序
- 程序Stange由两部分构成:
前半部分为Test程序,输出为变量X(1或0);
后半部分是以X为循环条件的while循环语句while(X){ }
- 用程序P作为输入,当程序运行时:
若P会运行终止,则变量X=1,while(X=1){}
进入无限循环,strange程序不会终止;
若p不会终止,则