“参数多态是一种类型系统能力;关系参数性是关于该语言全部良类型项的元定理。重载或 ad hoc polymorphism 可以按类型选择不同实现,不满足上述“任意关系都保持”的前提,不能只因语…”
形式陈述 ​
参数多态允许项对类型变量抽象,并对任意类型统一实例化。相应的类型判断可使用全称类型
这两条规则定义的是显式 System F 风格多态:程序写出类型抽象和类型应用,并可表达高阶、高秩乃至 impredicative 多态。Hindley–Milner 是不同的秩一接口:它在 let 处对类型方案做隐式泛化,并换取可判定的主类型推断。工程语言还可用单态化、字典传递或类型擦除实现泛型;这些是实现策略,而不是 System F 的类型规则。
“参数”表示程序只按类型变量在接口中的位置统一工作,而不能凭空使用未知类型的专属操作。把这种 uniformity 形式化为“保持任意关系”是关系参数性定理;进一步选择图关系并导出程序等式属于free theorem。二者是关于语言的元理论与应用,不是全称类型引入、消去规则本身。
直觉
参数多态把类型当作接口占位符:程序知道某些值类型相同,却不知道它们究竟是整数、字符串还是树。正因为缺少类型专有操作,代码被迫保持统一行为;一个纯函数若类型是
例子与边界
多态恒等函数为 map : ∀A.∀B.(A→B)→List A→List B 不能凭空制造
边界是 printType : ∀A.A→String 一类能反射类型参数的原语:它可按
推论与应用
参数多态是泛型库、集合算法和类型安全复用的基础。System F提供显式的高阶多态核心,Hindley–Milner 则以秩一类型方案和 let 泛化提供可推断的隐式版本。
关系参数性可证明程序等价,表示独立性再把相关实现提升为客户端不可区分;在Curry–Howard 对应下,全称类型对应二阶全称量化。
参考资料
- Benjamin C. Pierce, Types and Programming Languages, MIT Press, 2002,Ch. 23, universal types and parametricity。
- Robert Harper, Practical Foundations for Programming Languages, 2nd ed., Cambridge University Press, 2016,Chs. 10–11, polymorphism and abstraction。