在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
语句进行重写/简化会使得不可满足性的证据无法用于(或者至少:非常难以使用)。
答案 0 :(得分:1)
Z3 3.2应用了几个预处理步骤。使用(set-option :auto-config false)
将禁用大部分内容。您还应该包括以下两个选项:
(set-option:propagate-booleans false)
(set-option:propagate-values false)