Z3py:用约束中的整数和位向量求解

时间:2015-03-10 00:30:28

标签: python smt z3py

我试图在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解决方案的新手。请帮我弄清楚错误或替代解决方案。

1 个答案:

答案 0 :(得分:1)

请看一下这个问题: https://z3.codeplex.com/workitem/187

基本上,问题是默认情况下不导入Z3_mk_bv2int。尝试添加
来自z3 import *

在课程开始时。