Z3上的Bitvector算术

时间:2015-12-19 11:00:09

标签: z3 bitvector

我尝试使用Z3来使用位向量算法求解算术方程。我想知道是否有办法处理真实数字。例如,如果我可以指定与#x1不同的常量并改为使用实数。

(set-option :pp.bv-literals false)
(declare-const x (_ BitVec 4))
(declare-const y (_ BitVec 4))
(assert (= (bvadd x y) #x1))
(check-sat)
(get-model)

1 个答案:

答案 0 :(得分:0)

是的,SMT-Lib(和Z3)都完全支持实数:http://smtlib.cs.uiowa.edu/theories-Reals.shtml

您可以按如下方式编写示例:

(declare-const x Real)
(declare-const y Real)
(assert (= (+ x y) 1))
(check-sat)
(get-model)

您也可以混合/匹配Int / Real / Bitvector,只要输入的内容都是正确的。这是一个展示如何一起使用Ints和Reals的例子:

(declare-const a Int)
(declare-const b Int)
(declare-const c Int)
(declare-const d Real)
(declare-const e Real)
(assert (> e (+ (to_real (+ a b)) 2.0)))
(assert (= d (+ (to_real c) 0.5)))
(assert (> a b))
(check-sat)
(get-model)

但是,请注意,从位向量到整数的转换通常是未解释的。请参阅此处进行讨论:Z3 int2bv operation