7. 延伸讨论
• 停机的程序-数据集合 HALT 半可判定
• 证明思路:利⽤用解释器 u,构造如下程序
read PD
V = u PD
write ‘true
• 推论:HALT的补集既不可判定也不半可判定
8. s-m-n 定理
• 特化器的存在性
• [[spec](p.s)](d) = [p](s.d)
• 构造思路:
• 特化时刻:
• 程序 spec 输⼊入的 s 转接给输出的程序 q,成为 q 内部的⼀一个赋值
• 程序 spec 输⼊入的 p 转接给输出的程序 q,使得 p 嵌⼊入到 q 内部
• 运⾏行时刻:
• q 有输⼊入 d,这样 q 可以把 s 和 d 合并,再转接给嵌⼊入其中的程序 p
9. Rice 定理
• ⼏几个定义:
• 属性 A 是⼀一个 While 程序的集合;
• 属性 A 是⾮非平凡的,当且仅当 A 不是空集或全集;
• 属性 A 是外延属性,当且仅当,对任意给定的语义等价的两个程
序 p 和 q, p 属于 A 等价于 q 属于 A;
• Rice 定理:
• 程序的任何⾮非平凡的外延属性都是不可判定的
10. Rice 定理的证明
• 证明思路:
• 若 Rice 定理不成⽴立,则存在⾮非平凡属性 R 可判定,即判定程序 is-R
可计算⼀一个程序 q 是否属于 R。
• 取程序 r 属于 R, 对任意程序 p 和任意⼀一个参数 d,可构造程序 q
read X; Y = p d; Z = r X; write Z;
• 另有程序 h :
read pd; W = is-R q; write W;
• 易⻅见 h 可判定与停机定理⽭矛盾。