Skip to content

单元传播

Unit propagation · Boolean constraint propagation · BCP

在部分赋值下反复满足单位子句,并记录传播原因直至达到不动点或发现冲突。

条目类型
算法

形式陈述

给定CNF-SAT实例 F 与不含互补文字的 trail M,若某子句在 M 下没有真文字、恰有一个未赋值文字 ,则其余文字都已为假,任何扩张模型都必须令 为真。单元传播把 追加到 trail,并把该子句记为 的 reason。算法维护待处理文字队列,重复这一规则,直到没有单位子句,或某个子句的全部文字均假而报告冲突。

若传播得到 M=M{1,,k} 且未冲突,则

FMi

对每个传播文字成立,因此 FMFM 具有相同的可满足性。若某子句 C 被全部证伪,则 FM 不可满足。reason 与 conflict clause 不是调试注释:冲突分析要靠它们重建每个推断的逻辑依据。

传播次序可以因队列实现而不同。只要每次都应用有效单位规则并继续到不动点,若某次次序导出冲突,就不存在另一个次序能得到一致扩张;在无冲突情形,反复应用单位规则得到的最小闭包与处理次序无关。这个闭包不等于 FM 的全部逻辑后果:公式可能蕴涵某个文字,却要经过分支或更强推理才能发现。实现仍需防止同一变量被重复排队,并在遇到互补赋值时报告冲突而非覆盖旧值。

直觉

一个单位子句像只剩一个未封闭出口的约束。选择这个出口不是启发式猜测,而是任何未来模型都必须接受的后果。传播新文字后,其他子句可能再失去倒数第二个出口,于是形成连锁反应。算法的力量来自把一次决定的后果追到不动点,使搜索只在真正尚有自由度的位置分支。

reason clause 给这条链装上可逆的因果标签。若只保存“b 被设为真”而不保存是哪条子句强制它,求解器仍可继续搜索,却无法可靠解释后来为何冲突,也不能从冲突中推导安全的新子句。逻辑后果与工程记录在这里恰好对齐。

例子与边界

考虑

F=(a)(¬ab)(¬bc)(¬cd)(¬d).

若队列先处理 (a),便追加 a;第二子句只剩 b,以它为 reason 追加 b;随后依次追加 c,d。最后子句 (¬d)d 证伪,成为 conflict clause。反向查看 reason 可得到清楚的蕴含链

abcd,

而输入又要求 ¬d。若队列先处理 (¬d),传播方向相反,最终仍会碰到 (a) 冲突;结论不依赖最初选择哪个单位子句。

单元传播并不完备。公式

(xy)(x¬y)(¬xy)(¬x¬y)

在空 trail 下没有单位子句,传播立即到达不动点,但分别检查 x=0x=1 都会产生矛盾。因而“没有新传播”只表示局部规则暂时沉默,不表示已有模型;同样,传播次数多也不能作为实例更难的稳定尺度。

不完备性也不只来自 UNSAT。公式 (xy)(x¬y) 在空 trail 下没有单位子句,单位闭包为空,却在语义上蕴涵 x:若 x=0,两个子句分别强制 y¬y。所以“所有传播文字都是逻辑后果”是可靠性结论,反方向“所有逻辑后果都会传播”并不成立。

推论与应用

单位传播是 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。
关系图谱11 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

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