将 int 转换为 bitvec 时出现 z3py 错误

z3py error when converting int to bitvec

从 (Z3: Is it possible to sum up a BitVec and a Real?) 开始,我尝试使用

将 int 转换为 bitvec
x = Int('x')
reg = BitVecRef(Z3_mk_int2bv(BitVecVal(x.ctx_ref(), 16, x)), x.ctx)

但是我总是得到一个错误说“'Ast' object has no attribute 'ref'”,似乎这个函数只能将整数转换为 bitvec,有没有其他方法可以将 Int 转换为 bitvec ?

另外我知道这个函数目前被视为未解释,我需要从 (bv-enable-int2bv-propagation option) 重新编译我的本地版本吗?

提前致谢!

您建议的代码首先尝试将 x 转换为位向量值 (BitVecVal),即实际数字,但 x 不是值(数字)。正确的表达式可以构造如下:

x = Int('x')
raw = Z3_mk_int2bv(x.ctx_ref(), 16, x.as_ast())
reg = BitVecRef(raw, x.ctx)
print reg

int2bv-propagation 修复早在上次 Z3 发布之前就已添加,因此如果您使用的版本不到一年,则无需重新编译任何内容。