程序验证(七):可满足性模理论(Satisfiability Modulo Theories)
SMT
Satisfiability Modulo Theories(SMT)是以下情况的公式的判定问题:
- 一些一阶理论的复合
- 具有任意的布尔结构
DPLL( T T T): DPLL Modulo Theories
这是现代SMT求解器的基础技术
将SMT问题分解为我呢吧可以高效求解的子问题:
- 使用SAT求解技术来处理布尔结构(宏观)
- 使用专门的理论求解器(theory solver)来判定背景理论的可满足性(微观)
布尔结构
布尔结构
通过 T T T-公式的语义,我们递归定义公式 F F F的布尔结构:
原式 | 布尔结构定义 |
---|---|
B ( ℓ T ) B(\ell_T) B(ℓT) | P i P_i Pi |
B ( ¬ F ) B(\neg F) B(¬F) | ¬ B ( F ) \neg B(F) ¬B(F) |
B ( F 1 ∧ F 2 ) B(F_1\wedge F_2) B(F1∧F2) | B ( F 1 ) ∧ B ( F 2 ) B(F_1)\wedge B(F_2) B(F1)∧B(F2) |
B ( F 1 ∨ F 2 ) B(F_1\vee F_2) B(F1∨F2) | B ( F 1 ) ∨ B ( F 2 ) B(F_1)\vee B(F_2) B(F1)∨B(F2) |
B ( F 1 → F 2 ) B(F_1 \to F_2) B(F1→F2) | B ( F 1 ) → B ( F 2 ) B(F_1)\to B(F_2) B(F1)→B(F2) |
B ( F 1 ↔ F 2 ) B(F_1\leftrightarrow F_2) B(F1↔F2) | B ( F 1 ) ↔ B ( F 2 ) B(F_1) \leftrightarrow B(F_2) B(F1)↔B(F2) |
这里 P i P_i Pi是布尔变量
举例:
考虑以下公式:
F : g ( a ) = c ∧ ( f ( g ( a ) ) ≠ f ( c ) ∨ g ( a ) = d ) ∧ c ≠ d F:g(a)=c\wedge (f(g(a))\ne f(c)\vee g(a)=d)\wedge c\ne d F:g(a)=c∧(f(g(a))=f(c)∨g(a)=d)∧c=d
F F F的布尔抽象:
B ( F ) = B ( g ( a ) = c ) ∧ ( B ( f ( g ( a ) ) ≠ f ( c ) ) ∨ B ( g ( a ) = d ) ) ∧ B ( c ≠ d ) = P 1 ∧ ( ¬ P 2 ∨ P 3 ) ∧ ¬ P 4 B(F)=B(g(a)=c)\wedge (B(f(g(a))\ne f(c))\vee B(g(a)=d))\wedge B(c\ne d)=P_1 \wedge (\neg P_2\vee P_3)\wedge \neg P_4 B(F)=B(g(a)=c)∧(B(f(g(a))=f(c))∨B(g(a)=d))∧B(c=d)=P1∧(¬P2∨P3)∧¬P4
我们也可以定义 B − 1 B^{-1} B−1,比如 B − 1 ( P 1 ∧ P 3 ∧ P 4 ) B^{-1}(P_1 \wedge P_3 \wedge P_4) B−1(P