如何使用 "Int" 数据类型的参数从位向量中提取?
How to extract from a bit-vector using parameters with "Int" datatype?
有什么有效的方法可以从位向量中提取位数 i
,而 i
具有 Int
数据类型?换句话说,是否有任何高效的smt脚本可以完成以下脚本的功能?
(declare-fun int-index () Int)
(assert (and (>= int-index 0) (<= int-index 21)))
(declare-fun bv1 () (_ BitVec 22))
(define-fun getbit ((x (_ BitVec 22)) (bv-index (_ BitVec 22))) (_ BitVec 1)
((_ extract 0 0) (bvlshr x bv-index)))
(assert (= #b1 (getbit bv1 ((_ int2bv 22) int-index))))
(check-sat-using (! smt :bv.enable_int2bv true) :print_model true)
提前致谢。
不一定,您需要创建一个 "big" if-then-else 术语,对 bv-index 进行案例分析,然后使用 (_ extract index index) 函数,其中
"index" 必须是常数。
有什么有效的方法可以从位向量中提取位数 i
,而 i
具有 Int
数据类型?换句话说,是否有任何高效的smt脚本可以完成以下脚本的功能?
(declare-fun int-index () Int)
(assert (and (>= int-index 0) (<= int-index 21)))
(declare-fun bv1 () (_ BitVec 22))
(define-fun getbit ((x (_ BitVec 22)) (bv-index (_ BitVec 22))) (_ BitVec 1)
((_ extract 0 0) (bvlshr x bv-index)))
(assert (= #b1 (getbit bv1 ((_ int2bv 22) int-index))))
(check-sat-using (! smt :bv.enable_int2bv true) :print_model true)
提前致谢。
不一定,您需要创建一个 "big" if-then-else 术语,对 bv-index 进行案例分析,然后使用 (_ extract index index) 函数,其中 "index" 必须是常数。