繁体   English   中英

Z3:为什么这种数组理论用法返回Unsat?

[英]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查找Memt值,使得Mem[t] = Mem[t] - 1 ,这显然不符合您能想到的任何Memt值; 所以Z3回应Unsat

如果您可以告诉我们您要满足的属性,我们可以帮助您正确地制定它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM