如何 zero/sign 在 Z3 中扩展位向量?
How to zero/sign extend bitvectors in Z3?
我无法使用 Z3 SMT 接口对位向量执行零扩展。从我通过阅读资源了解到的情况来看,有一些函数可以用于各种绑定(C、C++、Python 等),但是 SMT 接口的教程没有给出如何调用的线索他们。
使用 SMT QF_BV 逻辑标准中的 zero_extend
也无济于事 - Z3 说 unsupported
.
原来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)
)
我无法使用 Z3 SMT 接口对位向量执行零扩展。从我通过阅读资源了解到的情况来看,有一些函数可以用于各种绑定(C、C++、Python 等),但是 SMT 接口的教程没有给出如何调用的线索他们。
使用 SMT QF_BV 逻辑标准中的 zero_extend
也无济于事 - Z3 说 unsupported
.
原来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)
)