Z3 BitVector错误?

时间:2016-01-07 00:26:12

标签: z3 ml

Z3的bitvector理论似乎存在一个错误。使用ML接口中的Expr.mk_numeral_string创建一个位向量常量,然后使用BitVector.get_string或BitVector.get_int读取表达式会导致amismatch。

以下是详细信息:

let create_bv_const ctx bv_str width = let bv_sort = BitVector.mk_sort ctx width in Expr.mk_numeral_string ctx bv_str bv_sort

现在

let bv1 = create_bv_const ctx "1111" 4.

使用Expr.to_string读取bv1时应返回“7”,应为“15”。

使用Expr.to_int时会发生类似的错误。如果

let bv1 = create_bv_const ctx "0010" 4

读取bv1应该给出“2”,但Z3返回“10”。当它应为“3”时,“0011”给出“11”。我尝试使用宽度为5,8位的向量,并且存在类似的问题。但是宽度<= 3位向量它可以正常工作。

我尝试了旧版本的Z3(第4版),也有类似的问题。

希望我不会错过任何东西。我想用bitvector变量和consts创建公式,并读出位向量值。

由于

1 个答案:

答案 0 :(得分:1)

1111 mod 16 = 7,所以这是正确的。请注意,参数1111读取为十进制数,而不是二进制数。