z3 bitvector 操作简化答案
z3 bitvector operation simplified answer
在执行位向量操作时,是否有更简单的方法来立即获得答案,例如。 a = 100万, b = 0, 什么是a & b (answer: 0)
此方法有效但必须引入虚拟变量来存储答案:
(declare-const a (_ BitVec 64))
(declare-const b (_ BitVec 64))
(declare-const ans (_ BitVec 64))
(assert (= a (_ bv1000000 64)))
(assert (= b (_ bv0000000 64)))
(assert (= ans (bvand a b)))
(check-sat)
(get-model)
我想要这种方法,但我的代码给出了一个 demorgan 身份:
(declare-const a (_ BitVec 64))
(declare-const b (_ BitVec 64))
(simplify (bvand a b))
我没有测试,但是像 (apply (then propagate-values simplify))
这样的东西应该可以解决问题
您可以使用该模型来评估任意表达式,例如:
(declare-const a (_ BitVec 64))
(declare-const b (_ BitVec 64))
(assert (= a (_ bv1000000 64)))
(assert (= b (_ bv0000000 64)))
(check-sat)
(eval (bvand a b))
说
sat
#x0000000000000000
在执行位向量操作时,是否有更简单的方法来立即获得答案,例如。 a = 100万, b = 0, 什么是a & b (answer: 0)
此方法有效但必须引入虚拟变量来存储答案:
(declare-const a (_ BitVec 64))
(declare-const b (_ BitVec 64))
(declare-const ans (_ BitVec 64))
(assert (= a (_ bv1000000 64)))
(assert (= b (_ bv0000000 64)))
(assert (= ans (bvand a b)))
(check-sat)
(get-model)
我想要这种方法,但我的代码给出了一个 demorgan 身份:
(declare-const a (_ BitVec 64))
(declare-const b (_ BitVec 64))
(simplify (bvand a b))
我没有测试,但是像 (apply (then propagate-values simplify))
这样的东西应该可以解决问题
您可以使用该模型来评估任意表达式,例如:
(declare-const a (_ BitVec 64))
(declare-const b (_ BitVec 64))
(assert (= a (_ bv1000000 64)))
(assert (= b (_ bv0000000 64)))
(check-sat)
(eval (bvand a b))
说
sat
#x0000000000000000