程序验证(二):SAT问题

本文探讨了SAT问题的概念,介绍了CNF形式,并详细阐述了归结法和基于搜索的SAT求解策略,包括DPLL和CDCL算法。通过实例解析了归结规则和搜索规则,展示了如何通过算法解决SAT问题。
摘要由CSDN通过智能技术生成

程序验证(二):SAT问题

概念:Satisfiability Problem

SAT问题:给定一个命题公式 F F F,决定是否存在一个解释 I I I使得 I ⊨ F I\models F IF.
3SAT问题是首个被确定的NP完全问题。
大多数重要逻辑问题可以归约为SAT:

  • 永真性
  • 蕴含
  • 等价性

SAT求解能力的发展:
关键:将搜索与推理结合以提高效率

CNF详解

SAT求解器的输入一般是CNF,这里为便于讨论,引入关于CNF的集合表示。

集合表示

一个公式(formula)可以视为子句(clause)的集合:
C 1 ∧ . . . ∧ C n C_1\wedge ... \wedge C_n C1...Cn
可以表示为:
{ C 1 , . . . , C n } \{C_1 , ... , C_n \} { C1,...,Cn}
同样,子句可以视为文字(literal)的集合:
( P ∨ Q ) ∧ ( Q → ¬ P ) (P\vee Q)\wedge (Q\to \neg P) (PQ)(Q¬P)
可以表示为:
{ { P , Q } , { ¬ Q , ¬ P } } \{\{P,Q\},\{\neg Q,\neg P\}\} { { P,Q},{ ¬Q,¬P}}
一些通用的表示方法:

  • 公式 formula: F F F
  • 子句 clause: C C C
  • 变量 variable: P , Q , R , . . . P, Q, R, ... P,Q,R,...

一些方便的表达方式:

  • C i { P ↦ F } C_i\{P\mapsto F\} Ci{ PF}: 在子句 C i C_i Ci中使用 F F F替代 P P P
  • C i [ P ] C_i[P] Ci[P]: 变量 P P P在子句 C i C_i Ci中是不取非的,也就是 C i = { . . . , P , . . . } C_i = \{... , P , ...\} Ci={ ...,P,...}
  • C i [ ¬ P ] C_i[\neg P] Ci[¬P]: 变量 P P P C i C_i Ci中是取非的,也就是 C i = { . . . , ¬ P , . . . } C_i = \{... , \neg P , ...\} Ci={ ...,¬P,...}

在这种符号体系下,会有以下命题成立(有点绕,需要多看几遍):
F F F表示公式, C C C表示子句,基于CNF公式的集合表示,有:

  • C i ∨ C j C_i\vee C_j CiCj: union of C i C_i Ci and C j C_j Cj, C i ∪ C j C_i\cup C_j CiCj
  • F i ∧ F j F_i\wedge F_j FiFj: union of F i F_i Fi and F j F_j Fj, F i ∪ F j F_i\cup F_j FiFj

归结(resolution)

只有一条规则:
C 1 [ P ]   C 2 [ ¬ P ] C 1 { P ↦ ⊥ } ∨ C 2 { ¬ P ↦ ⊥ } \frac{C_1[P]~C_2[\neg P]}{C_1\{P\mapsto \bot\}\vee C_2\{\neg P\mapsto \bot\}} C1{ P

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值