“经典证明不对普通 β 步直接套局部菱形。它先定义可同时收缩若干 redex 的平行归约 $\Rightarrow$,证明每个项的完全展开 $t^\star$ 满足:若 $t\Rightarr…”
形式陈述
先固定带名字的项语法
若
先把显示的绑定器α-换名为
自由变量满足可核对的边界:若
若
直觉
替换把一棵带作用域的语法树嵌入另一棵树。代入项中的自由变量携带原来的外部依赖;穿过同名绑定器时,它们不能突然改为引用该绑定器。遇到冲突先改绑定器名字,正是在移动子树时保留绑定连线。
同名绑定器还形成一道停止边界。进入
例子与边界
计算
遮蔽给出另一结果:
因为体内的
替换组合也需要侧条件。若
侧条件的作用可以直接算出。取
推论与应用
无捕获替换直接定义β-归约,并出现在量词实例化、宏展开和函数内联中。类型安全证明使用类型替换引理:
这里是简单类型语境,
实际实现常用 de Bruijn 索引、显式替换演算或 locally nameless 表示,把选新鲜名字的义务转成索引提升、显式代换规则或有限支持运算。表示改变后仍须证明实现与名字式无捕获替换一致。
索引替换把本页的绑定保持义务转成实际数字变化;同一 (λx.λy.x) z 在Γ=[z]下由 (λ.λ.1) 0 收缩为 λ.1。局部无名开启得到 λ.f(z),但其无需提升的接口要求实参没有悬空绑定索引。
参考资料
- Cornell University, Functional Programming in OCaml, §10.2.3 Capture-Avoiding Substitution, CS 3110, Spring 2021。
- Robert Harper, Practical Foundations for Programming Languages, 2nd ed., Cambridge University Press, 2016, Chapters 1–4。
- Benjamin C. Pierce, Types and Programming Languages, MIT Press, 2002, Chapters 5–6。
- Henk Barendregt, The Lambda Calculus: Its Syntax and Semantics, revised ed., North-Holland, 1984, §2.1。