“证明按类型推导作归纳。三个核心分支说明环境条件为何不可省略:”
形式陈述
类型判断是形式系统中的判断形状,典型写作
读作“在上下文
上下文通常写成有限声明序列
抽象规则把
类型良构
直觉
上下文记录当前可用的静态假设,推导树给出类型结论的证据。判断中的冒号连接“项”与“类型”,横杠连接“前提判断”与“结论判断”;二者不是程序里的赋值。尤其是
类型检查可以看成受约束的证明搜索:若目标项是应用
这项证明只使用静态可见信息,不运行所有可能输入。类型系统因而通常是保守近似:可推导项获得保证,一些实际运行安全却无法在当前规则中证明的项仍会被拒绝。
信息流类型系统把上下文具体化为公开/秘密标签,并用pc记录控制选择。秘密条件中写公开常量也可能泄漏,因此赋值规则同时检查右端和pc;两支恰好写同一常量却仍被拒绝,则展示这种语法证明的保守性。
例子与边界
在
对闭项
同一上下文不能推出 true 还是 false;那需要函数的实现与动态语义。
“在某上下文中良类型”不保证可独立运行。
声明式规则未必直接给出算法。带完整注解、语法导向的规则常可机械反推;子类型、隐式多态或依赖类型相等会引入搜索与约束求解。双向类型检查通过区分综合与检查,重新组织相同或相近的声明式内容。
推论与应用
类型判断直接作用于语法项与上下文,不依赖某种编译器AST 表示。简单类型 λ 演算、System F 和依赖类型理论通过不同规则定义各自的合法项。
元理论通常对类型推导归纳。逆置引理从结论判断恢复最后规则可能提供的前提,替换引理处理 β-步骤,进展与保持定理再把静态推导与动态执行连接起来。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。