“保持需要替换引理:若 $x\notin\operatorname{dom}(\Gamma)$、$\Gamma,x:S\vdash t:T$ 且 $\Gamma\vdash s:S$,则 $\…”
形式陈述 ​
对λ 项,
若
先把显示的绑定器α-换名为
自由变量满足可核对的边界:若
若
直觉
替换把一棵带作用域的语法树嵌入另一棵树。代入项中的自由变量携带原来的外部依赖;穿过同名绑定器时,它们不能突然改为引用该绑定器。遇到冲突先改绑定器名字,正是在移动子树时保留绑定连线。
同名绑定器还形成一道停止边界。进入
例子与边界
计算
遮蔽给出另一结果:
因为体内的
替换组合也需要侧条件。若
缺少新鲜性条件时,两边可能对自由变量作不同处理。该公式是顺序代入、β-归约交换和许多归纳证明的常用工具。
推论与应用
无捕获替换直接定义β-归约,并出现在量词实例化、宏展开和函数内联中。类型安全证明使用类型替换引理:
上下文的弱化条件、变量新鲜性和绑定器分支必须在证明中明确处理;它不是从替换的记号自动得到的结论。
实际实现常用 de Bruijn 索引、显式替换演算或 locally nameless 表示,把选新鲜名字的义务转成索引提升、显式代换规则或有限支持运算。表示改变后仍须证明实现与名字式无捕获替换一致。
参考资料
- 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。