“DPLL 接收 CNF $F$,维护一个按决策层组织的部分赋值。每轮先运行单元传播至不动点:若出现冲突且当前层为零,返回 UNSAT;若出现非根冲突,撤销最近决策及其传播后果,并尝试该决策的…”
形式陈述 ​
给定CNF-SAT实例
若传播得到
对每个传播文字成立,因此
传播次序可以因队列实现而不同。只要每次都应用有效单位规则并继续到不动点,若某次次序导出冲突,就不存在另一个次序能得到一致扩张;在无冲突情形,反复应用单位规则得到的最小闭包与处理次序无关。这个闭包不等于
直觉
一个单位子句像只剩一个未封闭出口的约束。选择这个出口不是启发式猜测,而是任何未来模型都必须接受的后果。传播新文字后,其他子句可能再失去倒数第二个出口,于是形成连锁反应。算法的力量来自把一次决定的后果追到不动点,使搜索只在真正尚有自由度的位置分支。
reason clause 给这条链装上可逆的因果标签。若只保存“
例子与边界
考虑
若队列先处理
而输入又要求
单元传播并不完备。公式
在空 trail 下没有单位子句,传播立即到达不动点,但分别检查
不完备性也不只来自 UNSAT。公式
推论与应用
单位传播是 DPLL 与 CDCL 每个决策层的固定点计算。一个分支是否能尽早失败,很大程度上取决于编码在部分赋值下能暴露多少单位后果;这也是 SAT 编码会比较 propagation completeness,而不只比较子句数量的原因。
朴素实现会在每次赋值后扫描全部子句。双监视文字用每个子句的两个观察点实现同一推理接口,只访问监视刚变假的文字的子句;它改变索引与扫描成本,不改变哪些单位后果有效。Horn 公式等受限类别上,反复单位传播还能承担完整判定的核心,但这个结论依赖语法限制,不能推广到一般 CNF。
参考资料
- Martin Davis, George Logemann, and Donald Loveland, “A Machine Program for Theorem-Proving,” Communications of the ACM 5(7), 1962, pp. 394–397。
- Armin Biere, Marijn Heule, Hans van Maaren, and Toby Walsh, eds., Handbook of Satisfiability, 2nd ed., IOS Press, 2021, Chapters 3–4。
- Donald E. Knuth, The Art of Computer Programming, Vol. 4, Fascicle 6: Satisfiability, Addison-Wesley, 2015, §7.2.2.2。