SICP Exercise 4.15

这是图灵在他的论文中提到的停机定理

证明:我们不可能写出一个过程halts?,使它能正确的对任何过程p和p的参数a,判断出p对a是否终止。

证明思路:假设我们能写出这样的过程halts?,然后我们去构造一个过程,使得其结果与我们的假设矛盾。下面就是图灵构造的能够引出矛盾的过程:

1 (define (run-forever) (run-forever))
2 (define (try p)
3  (if (halts? p p)
4      (run-forever)
5      'halted))
现在我们来看看矛盾是如何引起的,我们把try过程自身作为try的参数,即求值(try try)表达式:

首先,我到达了程序的第3行,此时这行中的p的值是try过程,所以这一行实际上是:

(if (halts? try try))
这句话其实就是让halts?过程判断表达式(try try)的是否能够终止。其结果有以下两种可能:

1)如果过程halts?判断表达式(try try)可以终止,那么程序将执行第4行,从而(try try)的求值进入无限循环,无法终止,这与halts?过程的判断相反,矛盾。

2)如果过程halts?判断表达式(try try)不能终止,那么程序将执行第5行,从而(try try)的求值返回'halted,终止,这也与halst?过程的判断相反,矛盾。

所以这就说明存在这样的过程try,以及参数try,使得halts?不能判断其求值是否终止,这与我们的假设矛盾,所以定理得到证明。



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值