z3py:存在量词的用法

时间:2017-08-24 08:37:12

标签: z3 z3py quantifiers

此脚本

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 functionQuantifier in Z3),但有些事情没有成功。

在这种情况下,如何使用现有量词来获得足够的答案?

1 个答案:

答案 0 :(得分:2)

存在主义绑定了一个不同的x,其范围仅限于公式的主体。因此,您的约束实际上是(0≤x<10)∧(∃x'.f(x')== 4) x = 0 的模型满足两个合取;特别是,第二个合谋在这个模型中得到满足,因为 x'可能是 2

似乎您希望进一步限制 x ,而不仅仅是不平等。尝试以下(未测试)

solver.add(x >= 0, x < 10, f(x) == 4)

然后打印模型。