“W 把类型方案、一阶统一和HM 推断组合成可实现算法。编译器可据此补全省略的类型、生成错误信息,并在中间表示中插入显式类型信息。”
“Algorithm W 是 Hindley–Milner 系统的语法导向类型推断算法。输入类型环境 $\Gamma$ 与项 $t$,成功时返回替换 $S$ 和单态类型 $\tau$,满足 $…”
First-order unification · Syntactic unification
寻找使若干一阶项在替换后相等的最一般替换。
给定一阶项方程集合
标准统一算法反复执行分解、删除、变量消去与冲突检查:
统一不是给每个变量随便猜一个值,而是在保留尽可能多自由度的前提下让两棵项树结构一致。根函数符号必须相同,随后问题递归下降到对应子树;变量则像洞,可以被一棵不含自身的项填入。MGU 只记录被方程强迫的等式,任何更具体解都由继续实例化它得到。occurs check 是有限项世界的边界:允许
方程
一阶统一是Hindley–Milner 类型推断的约束求解核心:类型构造器扮演函数符号,类型变量扮演一阶变量。Algorithm W在应用处统一函数类型与实参类型,并把得到的替换传播到环境。
逻辑编程、项重写、定理证明和模式匹配也依赖统一;算法正确性需要同时证明返回替换确为统一子、最一般,并在不可统一时可靠失败。