Skip to content

同余闭包算法

Congruence closure algorithm · EUF congruence closure

计算地面项等式生成的最小函数同余,并以此判定 EUF 等式与不等式合取是否一致。

条目类型
算法

形式陈述

等式与未解释函数理论 EUF 的地面输入由等式 s=t 和不等式 st 的合取组成;函数符号除相等输入必须产生相等输出外没有额外语义。对输入中出现的有限项集合 S,同余关系 是一个等价关系,并满足

siti (1ik)f(s1,,sk)f(t1,,tk).

同余闭包是包含全部输入等式的最小此类关系。地面 EUF 合取可满足,当且仅当每个输入不等式 st 的两端在闭包中属于不同等价类。这是SMT中 EUF theory solver 的基本判定接口。

算法先把所有子项建成 term DAG;常元视作零元函数。输入等式触发类合并。对函数应用项维护 signature

sig(f(t1,,tk))=(f,[t1],,[tk]),

其中 [ti] 是当前代表元。具有相同 signature 的应用必须合并;一次合并又可能令其父应用取得相同 signature,因此通过 use-lists 或工作队列反复处理至不动点。最后检查所有 disequalities。为了向 DPLL(T) 提供 explanation,实现还要记录每次合并来自输入等式还是哪对同 signature 应用,并能回溯一条等式理由链。

直觉

普通等式闭包只做自反、对称和传递;函数同余还要求“相等参数可代入同一函数”。若先知道 a=b,那么即便输入没有写 f(a)=f(b),任何函数解释都必须让二者相等。参数类合并像改变了函数应用的地址:原本不同的两个 signature 可能突然重合,于是父节点也要合并,并继续向更外层传播。

函数是 uninterpreted,表示求解器不能使用单调性、线性或可逆性。它只保留所有函数都必须满足的确定性与同余性。这种克制使算法适用于程序中的抽象库调用,也明确标出它无法证明的领域性质。

例子与边界

考虑

a=b,b=c,f(a)=d,f(c)d.

前两个等式先得到类 [a]=[b]=[c]。因此

sig(f(a))=(f,[a])=(f,[c])=sig(f(c)),

同余规则合并 f(a),f(c);输入 f(a)=d 又把 d 并入该类,最终得到 f(c)d,与最后一个 disequality 冲突。一个可检查 explanation 恰可引用 a=b,b=c,f(a)=d 与函数同余,说明不等式为何不可能成立。

边界也可在反方向看清。f(a)=f(b) 不推出 a=b,因为未解释函数可以不是单射;没有写 ab 时,两个不同常元符号也允许解释成同一元素,EUF 没有默认 unique-name assumption。输入 abf(a)=f(b) 完全可满足,例如取常值函数。量词公式、函数外延性或代数公理都超出纯地面 congruence closure。

并查集适合维护不断合并的等价类,但它本身不知道 term DAG 和函数 signature。把 DSU 的 O(α(n)) 摊还界直接写成完整同余闭包复杂度会漏掉父应用重检、哈希表与 explanation 维护;精确界必须指定 Nelson–Oppen、Downey–Sethi–Tarjan 或后续哪一种实现。

推论与应用

在 SMT 中,当前 trail 新增等式会增量触发合并;新增 disequality 若落在同一类中就产生 theory conflict。若 Boolean 层已登记原子 f(a)=f(b),参数类合并还可把它作为 theory propagation 返回。回溯要求撤销合并或使用分层持久状态,普通路径压缩 DSU 不能直接无日志回滚。

EUF 常用于把复杂函数暂时抽象为纯函数符号。若验证目标依赖库函数的单调性、内存副作用或异常行为,必须另加公理或更精确模型;否则 SAT 模型可能选择任意符合同余性的函数。Nelson–Oppen 组合可让 EUF 与算术 theory solver 通过共享等式协作,但组合正确性还需要签名互不相交和稳定无限等额外条件。

参考资料
  • Greg Nelson and Derek C. Oppen, “Fast Decision Procedures Based on Congruence Closure,” Journal of the ACM 27(2), 1980, pp. 356–364。
  • Peter J. Downey, Ravi Sethi, and Robert E. Tarjan, “Variations on the Common Subexpression Problem,” Journal of the ACM 27(4), 1980, pp. 758–771。
  • Daniel Kroening and Ofer Strichman, Decision Procedures: An Algorithmic Point of View, 2nd ed., Springer, 2016, Chapter 4。
关系图谱7 个相邻概念 · 3 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系

使用的工具

被这些条目使用

实现的抽象