【Programming Languages And Lambda calculi】4.3 Lambda 表达式中给布尔值编码

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

猜你喜欢

转载自blog.csdn.net/qq_35714301/article/details/113812178