1

有几篇关于在 z3 中将位向量转换为整数(反之亦然)的帖子。例如,请参见此处此处此处

文档说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失败?谢谢!

4

1 回答 1

2

这个问题现在已经解决了,因为事实证明 int2bv 和 bv2int 确实都被解释了。文档尚未更新,这可能会导致混乱(至少在我的情况下是这样)。所有详细信息都在此 GitHub/z3/issues 帖子中。

于 2018-02-13T11:22:41.217 回答