我无法使用Z3 SMT接口在位向量上执行零扩展。从我通过阅读源学到的东西,有这方面的函数,它们可用于各种绑定(C,C ++,Python等),但SMT接口教程不知道如何调用它们。
使用SMT QF_BV逻辑标准中的zero_extend
也没有帮助 - Z3说unsupported
。
答案 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)
)