我有简单的Z3 python代码,如下所示。我希望“print”行会返回“y”,它存储在它上面的行中。相反,我得到了“A [x]”作为结果。
I = IntSort()
A = Array('A', I, I)
x = Int('x')
y = Int('y')
Store(A, x, y)
print Select(A,x)
为什么Select()
没有返回Store()
存储的值?
感谢。
答案 0 :(得分:2)
有两点需要注意:
第一: 当你写
Store(A, x, y)
使用三个参数A,x和y创建术语。 A没有副作用。 您可以通过编写
为该术语创建名称B = Store(A,x,y)
第二: 除非您需要,否则Z3不会简化术语。 python API公开了一个名为simplify的简化函数。 您可以通过调用简化器来获得缩减的术语。 例子是:
I = IntSort()
A = Array('A', I, I)
x = Int('x')
y = Int('y')
B = Store(A, x, y)
print Select(B,x)
print simplify (Select(B,x))