z3 从位向量转换为整数
z3 converting from bit vectors to integers
有几个帖子是关于位向量的转换的
到 z3 中的整数 (反之亦然)。参见示例 here,
here and here.
documentation 表示 Z3_mk_bv2int 未解释:
"...This function is essentially treated as uninterpreted.
So you cannot expect Z3 to precisely reflect the semantics of this
function when solving constraints with this function..."
但是,我找不到一个简单的例子 确实失败了
以反映预期的语义。
例如,每当我使用这样的查询时:
(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 and/or int2bv 失败??谢谢!
这个问题现已解决,因为事实证明 int2bv 和 bv2int 确实是 解释的。文档尚未更新,这可能导致了混乱(至少在我的情况下是这样)。所有细节都在 this GitHub/z3/issues post.
有几个帖子是关于位向量的转换的 到 z3 中的整数 (反之亦然)。参见示例 here, here and here.
documentation 表示 Z3_mk_bv2int 未解释:
"...This function is essentially treated as uninterpreted. So you cannot expect Z3 to precisely reflect the semantics of this function when solving constraints with this function..."
但是,我找不到一个简单的例子 确实失败了 以反映预期的语义。 例如,每当我使用这样的查询时:
(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 and/or int2bv 失败??谢谢!
这个问题现已解决,因为事实证明 int2bv 和 bv2int 确实是 解释的。文档尚未更新,这可能导致了混乱(至少在我的情况下是这样)。所有细节都在 this GitHub/z3/issues post.