在Z3Py中,证明不会返回反例

时间:2018-06-11 09:50:07

标签: math z3 smt z3py theorem

Z3如何返回有效的反例? 以下代码

from z3 import *
set_param(proof=True)
x = Real('x')
f = ForAll(x, x * x > 0)
prove(f)

输出counterexample []

我不必使用prove,但我希望在示例中找到类似f的公式的有效反例。我该怎么办?

1 个答案:

答案 0 :(得分:1)

要获得模型,您应该使用check,并在求解器上下文中断言您的公式:

from z3 import *

s = Solver()
x = Real('x')
f = x * x > 0

# Add negation of our formula
# So, if it's not valid, we'll get a model
s.add(Not(f))

print s.check()
print s.model()

这会产生:

sat
[x = 0]