是否可以使用具有位向量和连接的量词?为了说明,在最新的Z3中运行以下代码:
a = BitVec('a', 8)
b = Concat(BitVec('b', 4), BitVec('c', 4))
prove(ForAll(a, Exists(b, a == b)))
产生以下错误:
BitVecRef instance has no attribute '__len__'
我尝试在__len__
中添加一个简单的BitVecRef
方法,但却出现了更多问题。
没有Concat
,代码按预期工作。例如:
a = BitVec('a', 8)
b = BitVec('b', 8)
prove(ForAll(a, Exists(b, a == b)))
输出正确的:proved
答案 0 :(得分:3)
您的示例将值b定义为串联的简写。 它作为绑定变量传递给量词Exists(b,a == b)。 Quantifiers需要一个基本常量列表,例如下面的a,b,c,但不是复合 表达式,例如d。以下是您处理的拼图版本:
a = BitVec('a', 8)
b = BitVec('b', 4)
c = BitVec('c', 4)
d = Concat(b, c)
prove(ForAll(a, Exists(b, a == d)))