我是 Z3 的新手,并试图制作一个求解器,它将每个可满足的解决方案返回到一个布尔公式。从其他 SO-posts 中记笔记,我已经编写了我希望能工作的代码,但事实并非如此。问题似乎是通过添加以前的解决方案,我删除了一些变量,但是它们在以后的解决方案中返回?
目前我只是想解决a或b或c。
如果我解释得不好,请告诉我,我会尝试进一步解释。
提前感谢您的回复:)
我的代码:
from z3 import *
a, b, c = Bools('a b c')
s = Solver()
s.add(Or([a, b, c]))
while (s.check() == sat):
print(s.check())
print(s)
print(s.model())
print(s.model().decls())
print("\n")
s.add(Or([ f() != s.model()[f] for f in s.model().decls() if f.arity() == 0]))
我的输出:
sat
[Or(a, b, c)]
[c = False, b = False, a = True]
[c, b, a]
sat
[Or(a, b, c), Or(c != False, b != False, a != True)]
[b = True, a = False]
[b, a]
sat
[Or(a, b, c),
Or(c != False, b != False, a != True),
Or(b != True, a != False)]
[b = True, a = True]
[b, a]
sat
[Or(a, b, c),
Or(c != False, b != False, a != True),
Or(b != True, a != False),
Or(b != True, a != True)]
[b = False, c = True]
[b, c]