“设不可满足 CNF $F$ 使用 $n$ 个变量,初始最大宽度为 $w 0(F)$,最小归结宽度为 $W(F)$,最小一般归结规模为 $S(F)$。把规模计作证明中的子句行数、对数取自然对数…”
形式陈述 ​
DAG 形归结把一份归结反驳表示成有限有向无环图:源节点标记输入 CNF 的初始子句;每个非源节点有两个入边,标记为其父子句在某个 pivot 上的 resolvent;唯一需要到达的汇节点标记空子句。一个节点可以有任意多个出边,表示该子句作为已证引理被后续多次引用。按拓扑序列出节点,就得到通常教科书中的“逐行一般归结证明”。
若大小按不同子句推导节点计,重复引用只增加边或父行编号,而不复制子证明。编码大小仍要包含每个子句的文字和引用,因此在高出度情况下,节点数、边数与总比特数必须注明。DAG 形系统与树形归结使用完全相同的局部 resolution 规则,差别只在是否允许共享;把这种结构差别描述成新逻辑规则会掩盖真正的资源来源。
直觉
DAG 形证明相当于给递归论证加入缓存。第一次推出引理
共享只压缩重复结构,不会让错误推理变真。每个非源节点仍需由两个已出现子句和一个 pivot 局部验证;拓扑序排除了循环论证。若允许节点引用自己或未来节点,验证者就不能用简单归纳保证每行都是初始 CNF 的逻辑后果,因此“有向无环”不是绘图偏好,而是可靠性证明的一部分。
例子与边界
对公式
建立节点序列
若按上述编号计,证明有五个初始节点、五个导出节点和十条父引用边;若只计推理步则大小为五。两种数值都正确,但必须随定义报告。把同一子句
允许共享也不等于允许 extension variable。DAG 节点只能保存由归结推出的子句,不能随意为一个大公式命名。若加入新变量及定义子句,得到的是扩展归结等更强模型,输入编码与可靠性条件随之改变。另一个边界是 clause deletion:从静态证书中删去不再使用的节点不会改变可证性,但在线求解时删除过早会影响未来搜索,空间复杂度需另行计量。
推论与应用
一般所说的 resolution size 下界通常针对 DAG 形归结,因为它允许最充分的子句复用;这样的下界自动适用于受限的树形系统。归结宽度与规模—宽度权衡也以一般归结为主要口径:即使 DAG 可以共享,若任何反驳都必须经过很宽的“瓶颈子句”,证明仍会被迫拥有很多不同节点。
从算法角度,DAG 证书可用父行索引流式检查,并通过引用计数释放不再需要的子句;这区分了证明大小与 proof space。一个证明可能节点总数很大但任一时刻只保留少量子句,也可能很短却需要同时保存多个宽引理。共享解决的是时间式重复,不自动解决内存、宽度或寻找下一条引理的难题。
参考资料
- Armin Haken, “The Intractability of Resolution,” Theoretical Computer Science 39, 1985, pp. 297–308, general resolution model.
- Eli Ben-Sasson, Russell Impagliazzo, and Avi Wigderson, “Near Optimal Separation of Tree-Like and General Resolution,” Combinatorica 24(4), 2004, pp. 585–603.
- Jan Krajíček, Proof Complexity, Cambridge University Press, 2019, Chapter 4, general resolution and proof DAGs.