z3位向量运算简化答案

时间:2018-07-23 14:38:47

标签: z3 bitvector

在执行位向量操作时,是否有更简单的方法来获得即时答案。 a = 1百万,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))

2 个答案:

答案 0 :(得分:1)

您可以使用该模型评估任意表达式,例如:

(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

答案 1 :(得分:0)

我没有测试,但是应该使用(apply (then propagate-values simplify))之类的方法