z3从位向量转换为整数

时间:2018-01-18 09:33:27

标签: z3 smt bitvector

关于位向量的转换有几个帖子 z3中的整数(反之亦然)参见例如hereherehere

documentation表示 Z3_mk_bv2int 未被解释:

  

“......此功能基本上被视为未解释。     所以你不能指望Z3能够准确地反映出它的语义     使用此函数解决约束时的函数...“

然而,我找不到一个简单的例子 确实失败 反映预期的语义。 例如,每当我使用这样的查询时:

(declare-const s String)
(declare-const someBitVec10 (_ BitVec 10))

(assert (= s "74g\x00!!#2#$$"))

(assert (str.in.re (str.at s (bv2int someBitVec10)) (re.range "1" "3")))

(check-sat)
(get-value (s someBitVec10))

我得到正确的答案(索引应该是7,而且是)

sat
((s "74g\x00!!#2#$$")
 (someBitVec10 #b0000000111))

有人可以提供z3的简单示例 bv2int 和/或 int2bv 失败?谢谢!

1 个答案:

答案 0 :(得分:1)

此问题现已解决,因为事实证明int2bv和bv2int确实是解释。文档尚未更新,这可能导致混淆(至少在我的情况下确实如此)。所有细节都在this GitHub/z3/issues post