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

本文探讨了布尔值在B语言和Lambda演算中的表示方式,通过使用宏来实现`true`和`false`的行为。通过一系列的β归约步骤,证明了`(iftrue)`等于`true`,`(iffalse)`等于`false`。文章还提出了`and`和`or`的宏定义,并邀请读者进行练习以确保它们的行为符合预期。
摘要由CSDN通过智能技术生成

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值