有时,即使表达式明确具有具体值,在模型中计算布尔表达式也不会返回具体的布尔值。我已经能够将此减少到涉及数组表达式的案例,例如this test case:
from z3 import *
x = K(IntSort(), 0)
s = Solver()
s.check()
m = s.model()
print m.evaluate(x == Store(x, 0, 1), model_completion=True)
我希望这会打印False
,而是打印K(Int, 0) == Store(K(Int, 0), 0, 1)
。其他示例产生类似的结果。用x = Array('x', IntSort(), IntSort())
替换第一行会得到相同的结果(尽管直到默认解释)。有趣的是,用x = Store(K(IntSort(), 0), 0, 1)
替换第一行会导致示例打印True
。
有没有办法强制Z3将这些表达式评估为具体值?