我使用的是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)
答案 0 :(得分:0)
简化器仅对阵列应用最便宜的重写。 因此,如果它找到相同密钥的两个相邻商店,它就知道要压缩最内层的密钥。 寻找重叠键的成本通常很高,而且键可能是无法确定它们是否重叠的变量。