z3位向量运算简化答案

z3位向量运算简化答案,z3,bitvector,Z3,Bitvector,在进行位向量运算时,是否有更简单的方法可以立即得到答案,例如a=100万,b=0,a&b是什么(答案: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 (= a

在进行位向量运算时,是否有更简单的方法可以立即得到答案,例如a=100万,b=0,a&b是什么(答案: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))

我没有进行测试,但类似于
(应用(然后传播值简化))
的功能应该可以实现

您可以使用模型计算任意表达式,例如:

(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