4.3 布尔值编码
在 B 语言中,我们选择了 f 和 t 去“代表” “false” 和 “true”, 在Lambda演算中,我们将会做出不同的选择 —— 虽然在原则上是随机的,但是事实证明这样很方便:
≐ 符号表示我们正在对表达式速记异或“宏”。“true” “false” 和 “if” 的宏如果表现有用的话将会非常有帮助。比如,我们会认为对于任何M和N:
i
f
t
r
u
e
M
N
=
n
M
if \ true \ M\ N=_nM
if true M N=nM
我们可以将宏拓展来证明:
类似,if false M N =n N:
事实上,我们发现 (if true) =n true 且 (if false) =n false 。 换言之,true 的速记(宏)会走到第一个参数分支。 false 的速记(宏)会走到第二个参数分支。if 的速记(宏)仅仅为了可读性。
练习 4.3
证明 (if true) =n 以及 (if false) =n false。
题解
(if true) = (λv.λt.λf.v t f) (λx.λy.x)
→nβ (λt.λf.(λx.λy.x) t f)
→nβ (λf.(λx.λy.x) f)
→nβ (λx.λy.x) = true
(if false) = (λv.λt.λf.v t f) (λx.λy.y)
→nβ (λt.λf.(λx.λy.y) t f)
→nβ (λf.(λx.λy.y) f)
→nβ (λx.λy.y) = false
练习
定义 与 和 或 的宏操作符,使它们表现和自然情况一致(则 and true false =n false, 等等)
题解
- and ≐ λx.λy if x y false
- or ≐ λx.λy if x true y