【发布时间】:2011-08-24 17:33:05
【问题描述】:
我正在使用 Z3 的 QBVF 求解器,想知道是否可以从存在断言中提取值。也就是说,假设我有以下内容:
(assert (exists ((x (_ BitVec 16))) (forall ((y (_ BitVec 16))) (bvuge y x))))
这基本上是说有一个“最少”的 16 位无符号值。那么,我可以说:
(check-sat)
(get-model)
Z3-3.0 愉快地回应:
sat
(model (define-fun x!0 () (_ BitVec 16)
#x0000)
)
这真的很酷。但我想做的是能够通过 get-value 提取该模型的各个部分。不出所料,以下方法似乎都不起作用
(get-value (x))
(get-value (x!0))
在每种情况下,Z3 都正确地抱怨没有这样的常数。显然 Z3 拥有该信息,正如对 (check-sat) 呼叫的响应所证明的那样。有没有办法通过get-value 或其他机制自动访问存在值?
谢谢..
【问题讨论】:
标签: z3 smt theorem-proving