如何从SAT模型中仅获得“真实”变量?

时间:2012-10-24 02:57:02

标签: z3

考虑一下我有一个简单的SMT-lib公式:

(declare-const a Bool)
(declare-const b Bool)
(declare-const c Bool)
(declare-const d Bool)
(assert (or a b))
(assert (or d c))
(check-sat)
(get-model)

当SAT求解器给出模型时。它为所有变量提供了真/假值。但我只想要“True”值赋值变量。 Z3 ??

是可能的

1 个答案:

答案 0 :(得分:3)

这是一个完成此任务的z3py脚本。 http://rise4fun.com/Z3Py/fp5k

我认为与模型交互/遍历模型,您需要使用API​​。

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

s = Solver()

s.add( Or(a, b) )
s.add( Or(c, d) )

s.check()
m = s.model()
print m

for t in m.decls():
  if is_true(m[t]):
    print t
    print m[t]