2

本文(第 3.2 节)中,它说 z3 在执行任何其他步骤之前应用了公式的重写/简化。

假设我有一个公式QF_UF,它由多个assert语句组成。是否有任何重写规则会以某种方式“打破”不同断言语句之间的障碍?或者,反过来问:我可以确定重写规则只在本地应用,“在”一个断言语句中?

例如,考虑以下公式:

(set-logic QF_UF)
(set-option :auto-config false)
(set-option :PROOF_MODE  2)

(declare-fun a () Bool)
(assert a)
(assert (not a))

(check-sat)
(get-proof)

我可以确定证明将包含一个解决步骤来证明False,或者是否有可能False通过重写/简化步骤来结束?

我问的原因是对于我的应用程序,每个assert语句都有一个特殊的语义。对多个assert语句进行重写/简化将使最终的不可满足性证明对我来说无法使用(或至少:非常难以使用)。

4

1 回答 1

1

Z3 3.2 应用了几个预处理步骤。使用(set-option :auto-config false)将禁用其中的大多数。您还应该包括以下两个选项:

(设置选项:传播布尔假)

(设置选项:传播值假)

于 2012-04-25T18:12:27.973 回答