“语句 使 $T x$ 与 $L x$ 合并,从而出现形如 $L x=\operatorname{ref}(L x)$ 的循环形状。运行时自指针完全合法,分析应以有限循环图表示它,不能照搬有限…”
形式陈述
给定有限的一阶项方程集合
标准统一算法反复执行分解、删除、变量消去与冲突检查:
直觉
统一不是给每个变量随便猜一个值,而是在保留尽可能多自由度的前提下让两棵项树结构一致。根函数符号必须相同,随后问题递归下降到对应子树;变量则像洞,可以被一棵不含自身的项填入。MGU 只记录被方程强迫的等式,任何更具体解都由继续实例化它得到。occurs check 是有限项世界的边界:允许
例子与边界
方程
推论与应用
一阶统一是Hindley–Milner 类型推断的约束求解核心:类型构造器扮演函数符号,类型变量扮演一阶变量。Algorithm W在应用处统一函数类型与实参类型,并把得到的替换传播到环境。
逻辑编程、项重写、定理证明和模式匹配也依赖统一;算法正确性需要同时证明返回替换确为统一子、最一般,并在不可统一时可靠失败。
W中的完整统一器不变量把“最一般”展开为原方程全部解与残余解的因子分解等式,并证明变量消去、构造器冲突与occurs-check的两向正确性;变量个数与类型树大小的字典序解释替换膨胀时为何仍终止。
参考资料
- Benjamin C. Pierce, Types and Programming Languages (2002), unification and type reconstruction.
- Philip Wadler et al., Programming Language Foundations in Agda (2026), substitution and typing infrastructure.