[英]Z3: why this array theory usage returns Unsat?
我正在尝试使用数组理论对内存访问进行建模。 我有一个简单的代码如下(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”的原因吗?
如果是这样,如何使用数组理论对内存访问进行建模? 如何修复上面的脚本,使其返回“ Sat”?
非常感谢。
您为什么期望此查询返回Sat
?
您的查询归结为要求Z3查找Mem
和t
值,使得Mem[t] = Mem[t] - 1
,这显然不符合您能想到的任何Mem
和t
值; 所以Z3回应Unsat
。
如果您可以告诉我们您要满足的属性,我们可以帮助您正确地制定它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.