我试图在python中使用Z3 SMT求解器来解决约束。约束涉及整数和位向量。我正在使用Z3_mk_bv2int将BitVec转换为Int。我相信以下限制是不可满足的,但我从Z3求解器得到了SAT。我不确定我是否正确转换它。但是,如果我用受约束的整数变量替换BitVecs变量,那么不需要转换,我得到预期的结果。
示例:
def get_int(var):
ctx = var.ctx
return ArithRef(Z3_mk_bv2int(ctx.ref(), var.as_ast(), 0), ctx)
def main():
var1 = BitVec('var1', 6)
var2 = Int('var2')
solve(var2 == get_int(var1)- var2, var2 > 32)
if __name__ == "__main__": main()
结果: [var1 = 0,var2 = 33]
我是SMT解决方案的新手。请帮我弄清楚错误或替代解决方案。
答案 0 :(得分:1)
请看一下这个问题: https://z3.codeplex.com/workitem/187
基本上,问题是默认情况下不导入Z3_mk_bv2int。尝试添加
来自z3 import *
在课程开始时。