我正在尝试用数组理论对内存访问进行建模。我有一个像下面这样的简单代码(Z3 python)
Mem = Array('Mem', BitVecSort(32), BitVecSort(32))
F = True
tmp = BitVec('tmp', 32)
tmp3 = BitVec('tmp3', 32)
F = And(F, tmp3 == Select(Mem, tmp))
tmp4 = BitVec('tmp4', 32)
F = And(F, tmp4 == (tmp3 - 1))
F = And(F, Mem == Store(Mem, tmp, tmp4))
s = Solver()
s.add(F)
print s.check()
我想要 'Sat' 结果,但这个脚本返回 'Unsat'。
我认为这是因为我从 Mem 中读出,然后向它写入不同的值。这真的是我得到“Unsat”的原因吗?
如果是这样,我如何使用数组理论对内存访问进行建模?如何修复上述脚本,使其返回“星期六”?
非常感谢。