此脚本
from z3 import *
solver = z3.Solver()
x = Int('x')
def f(y):
return y+y
solver.add(x >= 0, x < 10, Exists(x, f(x) == 4) )
print solver.check()
print solver.model()
给了我
sat
[x = 0]
作为答案。这不是我想要或期望的。作为答案,我希望看到
sat
[x = 2]
我发现其他两个帖子的方向相似((Z3Py) declaring function和Quantifier in Z3),但有些事情没有成功。
在这种情况下,如何使用现有量词来获得足够的答案?
答案 0 :(得分:2)
存在主义绑定了一个不同的x
,其范围仅限于公式的主体。因此,您的约束实际上是(0≤x<10)∧(∃x'.f(x')== 4)。 x = 0 的模型满足两个合取;特别是,第二个合谋在这个模型中得到满足,因为 x'可能是 2 。
似乎您希望进一步限制 x ,而不仅仅是不平等。尝试以下(未测试)
solver.add(x >= 0, x < 10, f(x) == 4)
然后打印模型。