Z3数组:为什么Select()不返回Store()保存的值?

时间:2012-11-21 09:30:49

标签: z3 smt

我有简单的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()存储的值?

感谢。

1 个答案:

答案 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))