“CDCL保留 DPLL 的决策与传播骨架,却分析冲突、学习由原式蕴涵的子句并非时序回跳。工程上还会加入增量求解、assumption literals 和模型重构;这些机制都必须维持同一搜索…”
形式陈述 ​
CDCL 延续DPLL 的 trail 与单位传播,却在冲突后不只翻转最近决策。Trail 中每个文字带决策层;传播文字还带 reason clause。若子句
学习
一套完整状态机还需规定决策、传播、冲突分析、子句删除与 restart 的调度。可靠性只要求每个传播理由和学习子句有效;终止或完备性还要求搜索取得进展。例如,若保留新学习子句且不重复无限学习同一信息,有限变量上可用有限子句空间证明终止。实际允许删除和重启时,则需无界搜索预算、公平分支或等价的进展条件;“任何 restart 都保持完备”并不成立。
直觉
DPLL 只记得“这条路失败”,CDCL 试图回答“哪些较早选择共同造成失败”。冲突子句是终点,reason clauses 是可追溯的因果边;把当前层的中间后果逐个消去后,剩下的学习子句直接描述一组不能再次同时成立的边界条件。回跳由这条子句的层级结构决定,而不是固定退回一层。
学习的价值在复用。一个冲突可能发生在很深的位置,但导出的子句可在另一条搜索路径上提前传播。它把原本树形重复的局部证明保存成 DAG 中可共享的引理。子句越短不必越好:推导成本、传播频率、活动决策层数和数据库占用共同影响效益,而逻辑有效性只是不可让步的底线。
例子与边界
考虑子句
决策
再与
边界之一是预处理和理论推理。若 reason 来自变量消去、异或模块或 SMT theory lemma,最终证书必须包含相应可检查依据;“求解器内部说它有效”不能替代蕴涵证明。子句删除不会损害可靠性,因为删除已学引理只减弱数据库,但可能破坏某个依赖保留全部学习信息的终止论证。
推论与应用
高性能实现常用双监视文字维护传播队列,用VSIDS选择下一决策变量,并按SAT 重启策略周期性清空非根 trail。这三者分别改变索引、搜索顺序和搜索阶段,不参与学习子句可靠性的证明;换掉其中任何一个,CDCL 的逻辑内核仍可成立。
CDCL 是增量验证的重要后端。assumption literals 允许多次查询共享一份子句数据库,同时把某次查询的临时前提限制在可撤销层;unsat core 可从依赖这些 assumptions 的冲突证明中提取。共享必须遵守作用域:含已撤销局部定义的子句若未正确提升,可能污染下一次查询。证明日志与独立 checker 把“学习均有效”的巨大信任面压缩成逐步验证。
参考资料
- João P. Marques-Silva and Karem A. Sakallah, “GRASP: A Search Algorithm for Propositional Satisfiability,” IEEE Transactions on Computers 48(5), 1999, pp. 506–521。
- Jasmin Christian Blanchette, Mathias Fleury, Peter Lammich, and Christoph Weidenbach, “A Verified SAT Solver Framework with Learn, Forget, Restart, and Incrementality,” Journal of Automated Reasoning 61, 2018, pp. 333–365。
- Armin Biere, Marijn Heule, Hans van Maaren, and Toby Walsh, eds., Handbook of Satisfiability, 2nd ed., IOS Press, 2021, Chapters 4–5。