从μZ3(喇叭求解器)获得一个反例

时间:2015-06-10 13:17:19

标签: z3

使用Z3的Horn子句求解器:

如果答案是SAT,那么可以得到令人满意的未知谓词赋值(在大多数应用程序中,它对应于某种过渡系统或过程调用系统的归纳不变量)。

如果答案是unsat,那么这意味着存在一个Horn条款的展开和Horn条款中普遍量化变量的赋值,这样至少有一个安全条件(带有a的条款) false头部)被违反。这构成了具体的见证为什么系统没有解决方案。

我怀疑如果Z3能够得出结论unsat,那么它内部会有某种形式的这种见证(如果我记得很清楚,这就是PDR的情况)。有没有办法打印出来?

也许我读错了文档,但我找不到办法。 (get-proof)打印出一些不可读的内容,此外,(set-option :produce-proofs true)会使一些问题难以处理。

1 个答案:

答案 0 :(得分:2)

Z3为HORN逻辑问题产生的反驳是以单元结果树的形式产生的。您正在寻找的反例隐藏在单位解析步骤的结论中。这些结论(规则的最后一个论点)是与反例中的程序状态(或程序摘要或其他)相对应的基本事实。产生这些事实的变量绑定可以在" quant-inst"规则。

显然,这不是人类可读的,实际上很难通过机器阅读。对于Boogie,我实现了一种更常规的格式,但它目前仅适用于二元引擎,并且仅适用于使用"规则"的定点格式。和"查询"。您可以使用以下命令获取此信息。

(查询:引擎二元性:print-certificate true)