我正在尝试使用z3py。我遇到了一个奇怪的问题。我读到操作/
被视为z3py中位向量的有符号除法。我试图提供以下命令:
a = z3.BitVec('a',2)
b = z3.BitVec('b',2)
solver = z3.Solver()
solver.add((a + b)/ 2 == 3)
solver.check()
结果z3给出的是unsat
在我的观看中,这是不正确的,因为它有一个解决方案a = 2, b = 0
,{2}补充中的a = 2
表示a = -2
,因此(a+b)/2
必须等于-1
} 3
通过签名代表。
有人可以帮我解决这里有什么问题吗?
答案 0 :(得分:2)
我终于找到了解决方案!
问题在于表达式(a+b)/2
。这里a
和b
是大小为2的位向量。因此,表达式的分母2
也被z3视为2位位向量。因此分母中的2
实际上是-2
。因此,我试图解决的约束是(a+b)/(-2) == -1
这实际上是unsat
。