重写公式

时间:2012-04-24 15:39:13

标签: z3

this paper(第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语句进行重写/简化会使得不可满足性的证据无法用于(或者至少:非常难以使用)。

1 个答案:

答案 0 :(得分:1)

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

  

(set-option:propagate-booleans false)

     

(set-option:propagate-values false)