我尝试使用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)
答案 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