You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

3-SAT与CNF的区别及Z3求解3-SAT的SMT-LIB示例咨询

Z3 求解3-SAT问题的SMT-LIB实现示例

我们以下面这个3-SAT问题为例进行演示:
待求解的CNF公式包含3个布尔变量p、q、r,共4个子句,具体形式为:

(p ∨ ¬q ∨ r) ∧ (¬p ∨ q ∨ ¬r) ∧ (p ∨ q ∨ r) ∧ (¬p ∨ ¬q ∨ ¬r)

完整SMT-LIB代码

(set-logic QF_BOOL)
; 声明三个布尔变量
(declare-fun p () Bool)
(declare-fun q () Bool)
(declare-fun r () Bool)
; 断言所有子句成立
(assert (or p (not q) r))
(assert (or (not p) q (not r)))
(assert (or p q r))
(assert (or (not p) (not q) (not r)))
; 求解可满足性
(check-sat)
; 输出可满足赋值
(get-model)

运行结果说明

将上述代码输入Z3求解器执行,会首先返回sat表示该公式可满足,随后输出对应的赋值模型,示例输出如下:

sat
(
  (define-fun r () Bool
    false)
  (define-fun q () Bool
    false)
  (define-fun p () Bool
    true)
)

该结果表示p=true、q=false、r=false是一组有效解,代入原公式验证可知所有子句均成立。
如果输入的3-SAT公式本身不可满足,求解器会直接返回unsat,表示不存在能满足所有子句的赋值。


内容的提问来源于stack exchange,提问作者Promise89

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 15:18:03