Skip to content

DPLL 算法

DPLL algorithm · Davis–Putnam–Logemann–Loveland algorithm · DPLL

交替执行单元传播与布尔分支,并在冲突后回溯以完整判定 CNF 可满足性。

条目类型
算法

形式陈述

DPLL 接收 CNF F,维护一个按决策层组织的部分赋值。每轮先运行单元传播至不动点:若出现冲突且当前层为零,返回 UNSAT;若出现非根冲突,撤销最近决策及其传播后果,并尝试该决策的相反值;若全部子句已满足,补全任意无关变量后返回 SAT 模型;否则选择一个未赋值变量 x,进入新层探索 x 的一个极性。

算法的核心分解恒等式是

F 可满足(Fx) 可满足(F¬x) 可满足.

单位传播只加入 F 在当前分支下的必然后果;分支则把所有可能模型按 x 的真值不重不漏地分成两类。有限变量上,每条尚未结束的递归路径都会给至少一个新变量赋值,因此纯 DPLL 终止。可靠性来自返回前逐子句满足,完整性来自每次失败只剪掉已证明不可满足的分支。

这里的 DPLL 不等于早期 Davis–Putnam 消元法。后者按变量生成 resolvent 再删除含该变量的子句;DPLL 用决策树和回溯避免显式产生全部消元子句。两者有共同历史,却有不同的状态与空间行为。

直觉

DPLL 是带可靠剪枝的二叉搜索。一次决策提出临时假设,单位传播把这项假设的全部显然代价结清;若账目出现矛盾,就回到最近尚有另一选择的岔路。算法不是随意试值:每个被剪分支都有一条被全部证伪的子句作为局部证明,而最终 UNSAT 表示两种极性递归形成的整棵有限树都已关闭。

它是回溯法在命题约束上的具体化。撤销必须覆盖该决策层之后的所有传播赋值,却不能删除更早层的事实。变量选择与先试极性可以极大改变树大小,但只要两个分支最终都能被探索,它们不改变判定结果。

例子与边界

F=(xy)(x¬y)(¬xy)(¬x¬y).

根层没有单位子句。先决策 x=1:第三子句变成 (y),第四子句变成 (¬y),传播立即冲突。算法撤销这一层并尝试 x=0;此时第一子句要求 y=1,第二子句要求 y=0,再次冲突。x 的两个取值已经覆盖全部总赋值,故返回 UNSAT。若只尝试第一个极性便停止,“没找到模型”仍不是证明。

纯文字消去有时列入 DPLL:若变量只以 x 出现,可令 x=1 满足所有相关子句。它保持“是否存在模型”,但会丢掉另一极性下的部分模型,因此在模型计数或枚举中不能无条件使用。另一个边界是最坏树大小仍可指数级;聪明分支只改善实例表现,不把一般 SAT 变成已知多项式算法。

推论与应用

DPLL 的搜索树与树形归结有紧密对应:无学习回溯反复证明各分支冲突,不能跨分支复用已导出的子句。这一对应可把某些证明大小下界转成特定 DPLL 模型的运行时间下界,但不能约束拥有学习、预处理或专用理论推理的所有求解器。

CDCL保留 DPLL 的决策与传播骨架,却分析冲突、学习由原式蕴涵的子句并非时序回跳。工程上还会加入增量求解、assumption literals 和模型重构;这些机制都必须维持同一搜索不变量:任何被永久排除的赋值都已由输入及有效学习子句证明不可能。

参考资料
  • Martin Davis, George Logemann, and Donald Loveland, “A Machine Program for Theorem-Proving,” Communications of the ACM 5(7), 1962, pp. 394–397。
  • Martin Davis and Hilary Putnam, “A Computing Procedure for Quantification Theory,” Journal of the ACM 7(3), 1960, pp. 201–215。
  • Armin Biere, Marijn Heule, Hans van Maaren, and Toby Walsh, eds., Handbook of Satisfiability, 2nd ed., IOS Press, 2021, Chapters 3–4。
关系图谱9 个相邻概念 · 3 类关系

拖动节点调整位置。

显示关系

显示:依赖

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

使用的工具

实现的抽象