Skip to content

System F

System F · Polymorphic lambda calculus

具有显式类型抽象与类型应用的二阶多态 λ 演算。

条目类型
模型

形式陈述

System F(二阶多态 λ 演算)扩展简单类型 λ 演算,其类型与项包含

T::=αTTα.T,t::=xλx:T.tttΛα.tt[T].

类型抽象规则要求 α 不自由出现于项变量上下文;类型应用把全称量化变量替换为任意类型。计算除项级 β-归约外还有类型级规则

(Λα.t)[T]t[α:=T].

量化是 impredicative 的:α.T 可实例化为包含全称量化的类型。System F 中良类型项强正规化。对上面这种显式写出类型抽象、类型应用与参数类型的 Church-style 语法,类型检查是可判定的;擦除这些类型信息后,Curry-style System F 的 typability 与一般类型检查均不可判定。

直觉

简单类型 λ 演算要求每个函数固定在某个具体参数类型上,System F 允许函数再对类型本身抽象。Λα 表示“接下来这段程序对任意类型 α 都成立”,类型应用则选择一个实例。impredicativity 的力量在于多态值可以用含全称量化的类型实例化,这带来丰富编码;当类型抽象与实例化位置不再显式给出时,推断问题也随之越过可判定边界。类型参数在运行时通常可擦除,因为纯 System F 项不能检查它到底是哪种类型。

例子与边界

多态恒等函数

id=Λα.λx:α.x

具有类型 α.αα,且 id[B]truetrue。Church 布尔可赋类型 α.ααα,自然数可赋类型 α.(αα)αα,显示全称类型能编码数据接口。

边界是把 System F 与 Hindley–Milner 混同。前者允许多态参数在任意位置并要求显式类型抽象,表达力更强;后者主要在 let 绑定处作秩一泛化,因而拥有主类型与可判定推断。

纯 System F 的强正规化还依赖没有一般递归;加入固定点算子后仍可维持进展与保持,却会立即失去“所有良类型项都终止”的结论。

推论与应用

System F 是参数多态的标准核心演算,许多泛型语言的中间表示都可翻译到它或其扩展。关系参数性是关于良类型 System F 项保持任意关系的抽象定理,不反向成为演算语法的前置。存在类型可在 impredicative System F 中通过全称量化编码,并为抽象表示提供隐藏接口;原生 pack/unpack 的规则仍应与该编码区分。

其强正规化连接类型化正规化与二阶直觉主义逻辑;在Curry–Howard 对应下,System F 对应二阶命题逻辑。现代编译器常在更丰富的 System Fω、带类型类或带显式强制的核心语言上工作。

参考资料
  • Benjamin C. Pierce, Types and Programming Languages, MIT Press, 2002,Chs. 23–24, System F syntax, typing, and metatheory。
  • Robert Harper, Practical Foundations for Programming Languages, 2nd ed., Cambridge University Press, 2016,Chs. 10–11, polymorphic type abstraction。
关系图谱9 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

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

上位 / 更一般

暂未标注直接上位概念。

下位 / 直接特例