z3py:使用具体值简化嵌套存储

时间:2016-10-17 17:02:41

标签: python z3 z3py

我使用的是Z3 [版本4.4.2 - 64位]的python API,我试图理解为什么z3在这种情况下简化了表达式:

>>> a = Array('a', IntSort(), IntSort())
>>> a = Store(a, 0, 1)
>>> a = Store(a, 0, 3)
>>> simplify(a)
Store(a, 0, 3)

但在这种情况下它不是:

>>> a = Array('a', IntSort(), IntSort())
>>> a = Store(a, 0, 1)
>>> a = Store(a, 1, 2)
>>> a = Store(a, 0, 3)
>>> simplify(a) 
Store(Store(Store(a, 0, 1), 1, 2), 0, 3)

1 个答案:

答案 0 :(得分:0)

简化器仅对阵列应用最便宜的重写。 因此,如果它找到相同密钥的两个相邻商店,它就知道要压缩最内层的密钥。 寻找重叠键的成本通常很高,而且键可能是无法确定它们是否重叠的变量。