【Programming Languages And Lambda calculi】5.2 ISWIM 约化

5.2 ISWIM 约化

由于ISWIM的函数只接收值参数,我们必须首先定义 集。 值集 V (或 UW)是表达式集合的子集。
在这里插入图片描述

特别是,一个应用表达式永远不是一个值,而抽象(例如函数)则永远是一个值,不管它的body的格式如何。

ISWIM 最核心的约化关系为 βv ,类似于 β,但是它的参数必须从属 V 而不是 M
在这里插入图片描述

将参数限制为 V 的成员,再一定程度上强行规定了赋值的顺序。例如, ((λx.1) (sub1λy.y)) 无法用 βv 约化为 1,由于 (sub1λy.y) 并非 V 的成员。类似的,((λx.1) (sub11)) 必须先被约化为 ((λx.1) 0) 然后才是 1 。

ISWIM没有类似于 η 的关系。这反映了编程语言的实现一般不会提取应用于另一个程序语言主体中的函数。此外,从现在开始,我们在比较表达式时一般会使用 α-等价(=α),而非将 α 看作一种约化。

除了函数应用之外,ISWIM约化规则还需要考虑到基元的操作。与 bon 在原则上抽象(即使我们定义了具体的集合)一样,与基元操作相关的约化由抽象的 δ 表示。 δ 关系将每个 on 加 n 个基本常数映射成一个值。为了具体而言,我们选择下述 δ
在这里插入图片描述

通过结合 βδ ,我们得到了完整的约化关系 v
在这里插入图片描述

一如既往的,→vv 的兼并闭合,→→v 是自反-传递式闭合,=v 为对称闭合。

练习 5.1

用 →**v **证明 (λw.(− (w ⌈1⌉) ⌈5⌉)) ((λx.x ⌈10⌉) λyz.(+ z y)) 可约化为值。

题解:

(λw.(− (w ⌈1⌉) ⌈5⌉)) ((λx.x ⌈10⌉) λyz.(+ z y))

**v ** (λw.(− (w ⌈1⌉) ⌈5⌉)) (λyz.(+ z y) ⌈10⌉)

**v ** (λw.(− (w ⌈1⌉) ⌈5⌉)) (λz.(+ z ⌈10⌉))

**v ** (− ((λz.(+ z ⌈10⌉)) ⌈1⌉) ⌈5⌉)

**v ** (− (+ ⌈1⌉ ⌈10⌉) ⌈5⌉)

**v ** (− ⌈11⌉ ⌈5⌉)

**v ** ⌈6⌉

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值