DPLL 算法解决 SAT 问题

DPLL 算法解决 SAT 问题

DPLL 算法
Davis-Putnam-Logemann-Lovelace 算法解决 SAT 问题

它以 CNF 公式 φ 作为输入
如果 JφKv = 1 对于某些分配 v,它会输出“是”, 否则输出“否”
我们提出声明性变体
一些 SAT 求解器会返回令人满意的作业(如果存在), CNF 算法在必要时对公式进行预处理

步骤 1:删除所有重言式子句 {p, ¬p, . . . }
第 2 步:对于每个单元子句 {l},删除所有包含 l 的子句, 从所有子句中删除 ¬l
第三步:删除所有包含纯文字的子句(如果集合中没有子句包含它的否定,则字面量是纯子句集中的)
第4步:
如果产生了□(输入集矛盾),返回“No”
如果生成了∅(输入集可满足),则返回“是”(也许是令人满意的任务)
第 5 步:否则,选择文字 l 并对 Γ 进行大小写拆分 Γ[⊤/l] 和 Γ[⊥/l],这相当于以下简化:
case ⊤:删除所有包含 l 的子句,从所有子句中删除 ¬l
case ⊥:删除所有包含 ¬l 的子句,从所有子句中删除 l
然后将步骤 1-4 递归地应用于两个结果子句集
我们在所有步骤中默认将 ¬¬l 简化为 l

DPLL 算法
案例拆分由以下属性证明:
如果 Γ[⊤/l] 和 Γ[⊥/l] 不可满足,则子句集 Γ 不可满足
因此 Γ 是可满足的,当且仅当 Γ[⊤/l] 或 Γ[⊥/l] 是可满足的

DPLL 算法健全且完整(并终止)
健全:如果它给出了答案,那就是正确的
完整:如果存在正确答案,它会给出一个
终止:没有输入使它永远运行
校样草图
健全性:所有规则至少保持(不)可满足性
完整性:最坏情况通过案例拆分扩展完整的真值表
终止:每一步产生较小的子句集或具有较少文字的子句集

问题:证明 p ∧ q → q ∧ r 不是重言式。
解:我们证明 ¬(p ∧ q → q ∧ r) 是可满足的。 根据 CNF算法,这有子句集表示 {{p}, {q}, {¬q, ¬r}}

DPLL 算法和真值表
二叉决策树中的分支对应于真值表的行
DPLL 效率更高,因为它可以根据需要扩展分支case splits 扩展得相当大(因此被懒惰地应用)
选择最好的文字可以提高性能,但计算困难,因此启发式很重要

另一种技术:命题解析
解析可用于命题演算和谓词演算。 在这里我们看
在命题版本。
再次考虑 CNF 中的命题公式。 我们会写
C、C’ 子句,l 用于文字,C ∨ l 而不是 C ∪ {l}
命题解析使用一种特定的推导规则:解析规则

反驳定理证明
分辨率用于反驳定理证明
证明一个 φ 是重言式
¬φ 转换为 CNF 公式 ψ,分辨率用于从 ψ 推导出 □
为什么这种方法有效
□ 是⊥ 的别称。 如果你可以从 ¬φ 导出 □,这意味着 ¬φ 不能是满足,因此 φ 必须是重言式。查看 CNF 的详细信息

实现以不同方式执行证明搜索
从 Γ0 = Γ,他们构造集合 Γ1,添加 Γ0 的所有分解子
Γ1 = Γ0 ∪ {{p}, {q}, {p, ¬p}, {q, ¬q}, {¬q}, {¬p}}
然后他们构造集合 Γ2,为 Γ1 添加所有解析子
Γ2 = Γ1 ∪ {。 . . , □, . . . }生成 □ 时停止证明搜索
添加解决方案保留可满足性、不可满足性、有效性
如果 C 是子句集 Γ 中两个子句的分解子,则Γ ≡ Γ ∪ {C}

饱和
我们给出了解析算法的抽象说明性规范,让 res(X) = X ∪ {C | C 是 X 中子句的解析}

健全性(分辨率给出正确答案)
如果它的饱和度包含 □,则子句集是不可满足的。
证明
通过先前的事实和对 n 的归纳,Γ ≡ Γ
1 ≡ · · · ≡ Γ
n ≡ · · · ≡ Γ*
因此如果 □ ∈ Γ*, 然后 Γ∗ 不可满足,Γ 也是如此。

证明(反驳完整性):
这意味着分辨率从任何不可满足的 Γ 推导出来
如果 Γ 不可满足,那么一些有限 Γ0 ⊆ Γ 也是如此(通过紧凑性)
所以 Γ0 包含 n 个命题变量 p1, 。 . . , pn 对于一些 n ∈ N
我们通过对 n 的归纳证明声明,在基本情况下,不可满足意味着 Γ0 = {□}对于归纳步骤(Γ0 具有 n + 1 个变量)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值