Z3 如何用位向量对有符号整数建模?

Z3 如何用位向量对有符号整数建模?,z3,z3py,Z3,Z3py,假设a是一个8位值的整数254。如果a是一个有符号整数,它实际上被认为是-2。相反,如果a是无符号的,它将保持254 我试图用Z3的位向量理论来模拟这个有符号/无符号整数问题,但位向量似乎不允许这样做。这是真的吗?那么你知道如何在Z3py中建模吗 非常感谢。您观察到位向量值不带符号是正确的。 另一方面,有符号版本的位向量运算和关系。 因此,通过将同一位向量实体传递给有符号或无符号比较(无符号/无符号比较)或有符号或无符号运算(有符号除法/无符号除法),可以将其视为有符号或无符号数。其他算术运算对

假设
a
是一个8位值的整数
254
。如果
a
是一个有符号整数,它实际上被认为是
-2
。相反,如果
a
是无符号的,它将保持
254

我试图用Z3的位向量理论来模拟这个有符号/无符号整数问题,但位向量似乎不允许这样做。这是真的吗?那么你知道如何在Z3py中建模吗


非常感谢。

您观察到位向量值不带符号是正确的。 另一方面,有符号版本的位向量运算和关系。 因此,通过将同一位向量实体传递给有符号或无符号比较(无符号/无符号比较)或有符号或无符号运算(有符号除法/无符号除法),可以将其视为有符号或无符号数。其他算术运算对有符号和无符号实体的作用相同。例如,无论您想将位解释为有符号还是无符号,加法都以相同的方式移动位


Z3遵循SMT-LIB2理论的惯例,您可以在上找到关于这些理论的大量文档:

Z3有用于有符号和无符号解释的API。
例如,在C API中,
Z3_mk_bvslt
创建的有符号小于,而
Z3_mk_bvult
创建的无符号。在Z3Py中,我们一如既往地重载了
优秀的答案!谢谢你,利奥!