深入理解 λ 演算机器:从弱规范化到全规范化
1. 延迟替换与 λ 表达式语法
延迟替换的概念是将 β - 归约拆分为在空间和时间上分布的两个步骤。当遇到 β - 可归约式时,通常是连续多个,机器会在环境结构中收集待替换的操作数表达式。然后,通过在环境中查找操作数,一次性对抽象体进行所有替换。闭包是一种特殊的构造,简单来说,它将抽象与后续可能需要对其进行求值的环境配对。
为了构建支持正常顺序求值的机器,我们需要为 λ 表达式选择合适的语法。考虑到机器处理变量和括号的困难,我们使用 deBruijn 的无名 λ 演算,将 λ 绑定的变量出现替换为绑定索引。同时,我们切换到无名抽象器 Λ,将应用的左括号替换为应用节点 @,并完全省略右括号。由此产生的构造函数语法如下:
eΛ =s #i | Λ eb | @ ef ea
表达式分别为 deBruijn 索引 #i、抽象和正常顺序应用。应用节点 @ 和抽象器 Λ 是这种语法的构造函数。deBruijn 索引的值 i 可以是 { 0, …, n - 1 } 中的任意值,其中 n 是从 Λ 表达式的根节点到索引 #i 出现位置所遇到的 Λ - 抽象器的数量。索引本身衡量了与绑定它的抽象器之间的距离(以中间的 Λ 数量计算),索引 #0 绑定到最内层的 Λ。
除了 Λ - 表达式,机器还处理两种语法构造 [ E Λ eb ] 和 [ E e ],分别称为闭包和挂起。它们都将表达式与可能需要对其进行求值的环境配对。两者的区别在于,闭包是专门为出现在应用操作符位置的抽象创建的,而挂起是为操作数表达式(包括抽象)创建的,以延
超级会员免费看
订阅专栏 解锁全文
50

被折叠的 条评论
为什么被折叠?



