类型良构 、类型相等 、子类型 都是不同判断。上下文是否允许交换、弱化、收缩也取决于规则;在线性或其他子结构类型系统公理库子结构类型系统Substructural type system · Resource-sensitive type system通过限制弱化、收缩或交换等上下文结构规则,静态约束假设与程序资源的使用方式。中,这些结构性质不能默认成立。
声明式规则未必直接给出算法。带完整注解、语法导向的规则常可机械反推;子类型、隐式多态或依赖类型相等会引入搜索与约束求解。双向类型检查公理库双向类型检查Bidirectional type checking · Bidirectional typing把类型综合与给定类型下的检查分开,并用局部注解连接两种方向的算法化类型判断。通过区分综合与检查,重新组织相同或相近的声明式内容。
推论与应用
类型判断直接作用于语法项与上下文,不依赖某种编译器AST 表示公理库抽象语法树Abstract syntax tree · AST把抽象语法构造表示为有根有序树的常见编译器数据结构。。简单类型 λ 演算公理库简单类型 λ 演算Simply typed lambda calculus · STLC以基础类型和箭头类型约束 λ 项,获得类型安全与强正规化的最小函数演算。、System F 和依赖类型理论通过不同规则定义各自的合法项。
元理论通常对类型推导归纳。逆置引理从结论判断恢复最后规则可能提供的前提,替换引理处理 β-步骤,进展与保持定理公理库进展与保持定理Progress and preservation · Type safety在固定动态语义下,良类型闭项可继续或已是结果,且每一步都保持其类型。再把静态推导与动态执行连接起来。Hindley–Milner 推断从无注解项构造判断与主类型;证明助理中的类型检查器则验证证明项对应的判断。
参考资料
Benjamin C. Pierce, Types and Programming Languages, MIT Press, 2002, Chapters 8–11。
Robert Harper, Practical Foundations for Programming Languages, 2nd ed., Cambridge University Press, 2016, Chapters 4 and 10。
Andrew K. Wright and Matthias Felleisen, “A Syntactic Approach to Type Soundness,” Information and Computation 115(1), 1994, pp. 38–94。