如何在Z3中零/符号扩展位向量?

时间:2016-11-15 08:32:48

标签: z3 smt

我无法使用Z3 SMT接口在位向量上执行零扩展。从我通过阅读源学到的东西,有这方面的函数,它们可用于各种绑定(C,C ++,Python等),但SMT接口教程不知道如何调用它们。

使用SMT QF_BV逻辑标准中的zero_extend也没有帮助 - Z3说unsupported

1 个答案:

答案 0 :(得分:2)

事实证明,zero_extend和其他一些函数是参数,可能类似于C ++中的foo<T>。要调用这些函数,需要使用特殊语法:

(declare-const a (_ BitVec 1))
(declare-const b (_ BitVec 2))
(assert (= b ((_ zero_extend 1) a)))
(check-sat)
(get-model)

使用((_ zero_extend i) x)代替(zero_extend i x)会得到正确的结果:

sat
(model
  (define-fun a () (_ BitVec 1) #b0)
  (define-fun b () (_ BitVec 2) #b00)
)