“以下使用带布尔值的简单类型 λ 演算,按值、从左到右求值。类型与项为”
形式陈述
简单类型 λ 演算(STLC)在λ 演算上加入简单类型。给定基础类型
生成。箭头向右结合,
抽象规则在扩展上下文
STLC 是System F去掉全称类型、类型抽象和类型应用后的单态片段。纯 STLC 不含一般递归、递归类型或固定点常量;在这一精确边界内,每个良类型项强正规化。
直觉
简单类型没有解递归类型方程的机制。给
例子与边界
恒等项可由
定型。若上下文含
这棵推导同时展示箭头右结合与上下文中临时假设的解除。顺序不能颠倒:先解除
自应用被排除并不表示所有嵌套调用被排除。若
类型判断不等于运行结果。开项
加入固定点常量
推论与应用
另一种更小的非终止扩充见上下文等价:在含 Bool、布尔常量和条件式的 STLC 扩充上,再增加原始常量
STLC 是静态语义与动态语义相互作用的最小实验场。进展与保持定理说明良类型闭项不会因类型错误卡住,强正规化定理另外证明每条完整 β-归约路径都有限。后者严格强于某个求值策略终止。
在Curry–Howard 对应下,箭头类型对应蕴含,项对应自然演绎证明,β-归约对应证明化简。积、和、多态与依赖类型可继续扩展这条对应,但每项扩展都需重新检查类型规则、动态规则与元定理。
参考资料
- Benjamin C. Pierce, Types and Programming Languages, MIT Press, 2002, Chapters 8–9.
- Robert Harper, Practical Foundations for Programming Languages, 2nd ed., Cambridge University Press, 2016, Chapter 10.
- Jean-Yves Girard, Yves Lafont, and Paul Taylor, Proofs and Types, Cambridge University Press, 1989, Chapters 3–4。