z3 - 为位向量(SMTLIB2,Z3)赋值?

标签 z3

我正在使用 Z3 3.0 版。我想为一个位向量变量赋值,如下所示。
但是 Z3 报告错误“无效的函数应用程序,对第 3 行中位置 2 的参数排序不匹配”。

我的常量#x0a 似乎有问题?我怎样才能解决这个问题?

谢谢

(set-logic QF_BV)
(declare-fun a () (_ BitVec 32))
(assert (= a #x0a))
(check-sat)

最佳答案

在 SMT-LIB 2.0 标准中,#x0a是大小为 8 的位向量。您会得到排序不匹配错误,因为常量 a是一个大小为 32 的位向量。
您可以通过将示例重写为以下内容来避免类型/排序错误消息:

(set-logic QF_BV)
(declare-fun a () (_ BitVec 32))
(assert (= a #x0000000a))
(check-sat)

SMT-LIB 还支持 (_ bv[num] [size]) 形式的位向量文字, 其中 [num]是十进制表示法,而 [size]是位向量的大小。
因此,您也可以编写位向量文字 #x0000000a(_ bv10 32) .

顺便说一句,SMT-LIB 还支持二进制表示法的位向量文字。例如,#b010是大小为 3 的位向量。

关于z3 - 为位向量(SMTLIB2,Z3)赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7165118/

相关文章:

python-3.x - 在 z3 中调整 BitVec 的大小 [Python]

Haskell:绑定(bind)到快速且简单的 SAT 求解器

z3 - Z3 的 Prove() 方法?

z3 - 增量求解有什么好处?

z3 - 创建一个固定大小的数组并对其进行初始化

c++ - 使用 Z3 的 C++ api 创建长析取?

z3 - 使用push命令在Z3中增量求解

z3 - Z3 中量词的交替?

z3 - z3 通过名称来区分变量吗?

arrays - 关于 Z3 中数组的约束