“在DPLL(T) 中,设 $M$ 是当前带符号理论文字集合且与背景理论 $T$ 一致,$\ell$ 是 Boolean abstraction 中尚未赋值的理论文字。若 theory sol…”
形式陈述 ​
DPLL(T) 为SMT公式 check(M) 判定当前集合是否 explain 为冲突返回
布尔层据此学习 theory lemma
若 Boolean assignment 已满足
Theory solver 还可提前返回由
直觉
Boolean 层善于处理大量析取选择,理论层善于处理一组合取原子之间的数学约束。DPLL(T) 不让任一方独自承担全部公式:SAT 引擎先提出候选组合,理论求解器发现其中不可实现的局部核心,再把这个核心翻译成 SAT 能记住的子句。后续所有 Boolean 搜索都会避开同一理论矛盾。
这种惰性分工避免预先枚举理论的全部公理实例。Theory solver 可以增量保留等价类、tableau 或数组约束,随 trail push/pop 更新;布尔引擎则把理论解释当作普通 reason。接口越小,越容易证明协作可靠,但模型构造、组合理论与证书仍不能被省略。
例子与边界
在线性实数算术中取
令
每条 theory lemma 都可独立核验;若第一次解释错误地只含
量词、非凸理论和多理论组合会扩大接口责任。一个 solver 对自身文字集返回“consistent”,不必然保证几个 solver 的局部模型能合成共同模型;组合过程还要交换共享等式或安排。超时与不完整实例化应返回 unknown,不能伪装成 SAT 或 UNSAT。
推论与应用
DPLL(T) 允许复用成熟 CDCL 的 watched literals、学习和 assumptions,同时为 EUF、LRA、数组等理论插入专用状态。Theory lemma 一旦加入布尔数据库可跨 restart 复用;若它依赖临时 assumption,必须让条件文字留在子句中,以免下一次增量查询错误继承无条件结论。
Proof-producing SMT 会把 Boolean resolution 与理论证明拼接。检查器需要验证每个 theory lemma 的理论有效性,再验证布尔归结最终导出空子句。模型端则需把 Boolean 原子值、理论赋值和未解释函数解释合成一个结构;只打印部分数值而不验证所有原子,不能算完整 SAT 证书。
参考资料
- Robert Nieuwenhuis, Albert Oliveras, and Cesare Tinelli, “Solving SAT and SAT Modulo Theories: From an Abstract DPLL Procedure to DPLL(T),” Journal of the ACM 53(6), 2006, pp. 937–977。
- Harald Ganzinger, George Hagen, Robert Nieuwenhuis, Albert Oliveras, and Cesare Tinelli, “DPLL(T): Fast Decision Procedures,” CAV, LNCS 3114, Springer, 2004, pp. 175–188。
- Clark Barrett, Roberto Sebastiani, Sanjit A. Seshia, and Cesare Tinelli, “Satisfiability Modulo Theories,” in Handbook of Satisfiability, 2nd ed., IOS Press, 2021。