关于位向量的转换有几个帖子 z3中的整数(反之亦然)参见例如here, here和here。
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 失败?谢谢!
答案 0 :(得分:1)
此问题现已解决,因为事实证明int2bv和bv2int确实是解释。文档尚未更新,这可能导致混淆(至少在我的情况下确实如此)。所有细节都在this GitHub/z3/issues post。