首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将无限制SAT (USAT)减少为3-SAT

将无限制SAT (USAT)减少为3-SAT
EN

Stack Overflow用户
提问于 2021-12-24 22:05:57
回答 1查看 49关注 0票数 0

我知道这个过程,只需将每个子句l1∨⋯∨ln转换为n−2子句的连词。

我试图用Z3显示满足原始公式和最终公式的值,以表明它们可以作为SMT文件满足。

为了澄清,你能给出任何关于这个程序的例子吗?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-24 22:30:28

等价检查是通过询问求解者是否有一个可以区分两个公式的赋值来完成的。如果没有这样的赋值,那么您可以得出公式是等价的,或者在SAT上下文中,可以满足。

下面是一个简单的例子:

代码语言:javascript
复制
from z3 import *

a, b, c = Bools('a b c')

fml1 = Or(And(a, b), And(a, c))
fml2 = And(a, Or(b, c))

s = Solver()
s.add(Distinct(fml1, fml2))
print(s.check())

现在,如果fml1是一个任意的SAT公式,而fml2是一个3-SAT转换版本(我不是说上面是SAT和3-SAT转换,而是替换这里算法的结果),那么我们就会认为SAT求解器无法区分它们,即公式Distinct(fml1, fml2)是不可满足的。事实上,我们得到:

代码语言:javascript
复制
unsat

确定他们是一样的。

如果您只使用SMTLib,那么要使用的模板是:

代码语言:javascript
复制
(declare-fun a () Bool)
(declare-fun b () Bool)
(declare-fun c () Bool)

(assert (distinct (or (and a b) (and a c))
                  (and a (or b c))))
(check-sat)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70476771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档