Skip to content

β-归约

Beta reduction

收缩函数应用 redex,以无捕获替换把实参代入函数体的一步改写关系。

条目类型
定义

形式陈述

λ 演算中,形如 (λx.t)s 的子项称为 β-redex,其 contractum 为

(λx.t)sβt[x:=s],

其中 t[x:=s]无捕获替换。完整的一步 β-归约是根规则的相容闭包:

tβttuβtu,uβutuβtu,tβtλx.tβλx.t.

项按 α-等价识别,因而收缩前可以先选新鲜绑定名。tβu 表示恰好一步,tβu 表示零步或有限多步;t=βu 还允许反向 β 步,是另一种关系。

求值策略从完整 β-归约中挑选确定或受限的子关系。调用值只在实参已是值时收缩外层 β-redex,且通常不进入 λ 体;调用名优先处理最外层应用,也不等于允许任意位置的完整 β-归约。规则说明哪些改写合法,策略说明运行时下一步选哪一个。

直觉

β-收缩消去一次“抽象—应用”接口:形式参数从函数体中退出,实参接管它的自由出现。函数体若多次使用参数,实参会被复制;若从未使用参数,实参会被丢弃。因此一步归约既可能缩短项,也可能使项显著增大。

完整 β-归约把局部计算与位置选择分开。一个项的多个 redex 可以重叠或嵌套,先收缩哪处不由根规则决定;合流性、标准化和强正规化分别研究这些选择能否汇合、是否存在找到正规形的标准路径、以及所有路径是否终止。

例子与边界

对项 (λx.xx)(λy.y),外层收缩先复制实参:

(λx.xx)(λy.y)β(λy.y)(λy.y)βλy.y.
左侧 redex 的函数体含两个 x;收缩后,同一个实参 s 替换两处并形成右侧应用。

(λx.λy.x)y 中,直接代入会错误地产生 λy.y;先把内层绑定变量换成新鲜 z,正确结果是 λz.y。两项并不 α-等价,捕获规避是规则正确性的一部分。

Ω=(λz.zz)(λz.zz)。擦除参数的 redex 展示策略差异:

(λx.y)Ωβy.

完整 β-归约也允许一直收缩 Ω,调用值则必须先求实参而发散。项有正规形 y,却不是强正规化,也不在所有策略下终止。

β-正规形、值和闭项仍是三种不同分类。λx.(λy.y)z 在弱调用语义中是值,却含 β-redex;自由变量 x 是 β-正规形,却不是闭项。现实语言的整数运算、存储、异常与 I/O 还需要 β 规则之外的动态语义。

推论与应用

多步归约把若干 β 步连接起来,λ-正规形刻画没有任何 β-redex 的项。Church–Rosser 定理保证从同一起点到达的两个结果仍可汇合,因而已存在的正规形在 α-等价意义下唯一。

类型理论用替换引理证明 β-步骤保持类型;强正规化还需额外证明所有允许的 β 路径有限。编译器内联可看作带成本、共享与副作用条件的 β-收缩,不能在有状态语言中无条件复制或删除实参计算。

参考资料
  • Henk Barendregt, The Lambda Calculus: Its Syntax and Semantics, revised ed., North-Holland, 1984, Chapters 2–3。
  • Benjamin C. Pierce, Types and Programming Languages, MIT Press, 2002, Chapters 5–7。
  • J. Roger Hindley and Jonathan P. Seldin, Lambda-Calculus and Combinators: An Introduction, Cambridge University Press, 2008, Chapters 3–4。
关系图谱18 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系

被这些条目使用