Skip to content

简单类型 λ 演算

Simply typed lambda calculus · STLC

以基础类型和箭头类型约束 λ 项,获得类型安全与强正规化的最小函数演算。

条目类型
模型

形式陈述

简单类型 λ 演算(STLC)在λ 演算上加入简单类型。给定基础类型 ι,类型和带注解项由

T::=ιTT,t::=xλx:T.ttt

生成。箭头向右结合,ABC 表示 A(BC)类型判断 Γt:T 由三条核心规则生成:

x:TΓΓx:T,Γ,x:At:BΓλx:A.t:AB,Γt1:ABΓt2:AΓt1t2:B.

抽象规则在扩展上下文 Γ,x:A 下检查函数体,应用规则要求函数的定义域类型与实参类型完全吻合。项的计算使用β-归约;可以研究完整 β-归约,也可另选调用值或调用名小步策略。

STLC 是System F去掉全称类型、类型抽象和类型应用后的单态片段。纯 STLC 不含一般递归、递归类型或固定点常量;在这一精确边界内,每个良类型项强正规化。

直觉

AB 是函数接口:输入须有 A 型,应用结果获得 B 型。推导树把每次变量使用、抽象和应用的接口匹配记录下来;执行前无法构造推导的项被静态排除。

简单类型没有解递归类型方程的机制。给 xx 定型会要求 x 既有某个参数类型 A,又有函数类型 AB,进而需要有限类型满足 A=AB。这个方程无解,因而循环项 Ω=(λx.xx)(λx.xx) 被挡在类型推导之外。

例子与边界

恒等项可由

x:Ax:Aλx:A.x:AA

定型。若上下文含 f:ABx:A,应用规则得到 fx:B,连续两次抽象便有

λf:AB.λx:A.fx:(AB)AB.

这棵推导同时展示箭头右结合与上下文中临时假设的解除。

类型判断不等于运行结果。开项 x:Ax:A 良类型,却在没有环境时不能独立执行;闭项 (λx:A.x)(λy:B.y) 是否良类型取决于实参类型是否正好是 A。原始语法相似不能替代推导。

加入固定点常量 fix:(TT)T 后,可以写出良类型发散项;进展与保持仍可能成立,强正规化却立即失效。类型安全与终止是不同元定理。

推论与应用

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。
关系图谱17 个相邻概念 · 3 类关系

拖动节点调整位置。

显示关系

显示:依赖

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

上位 / 更一般

下位 / 直接特例

暂未标注直接特例。

类型化关系

使用的工具