Reputation: 283
In this paper (Section 3.2), it says that z3 applies rewriting/simplification of formulas before it does any other steps.
Suppose I have a formula in QF_UF
, that consists of multiple assert
statements. Is there any rewriting rule that would somehow "break the barrier" between different assert statements? Or, asking the other way round: Can I be sure that rewrite rules are only applied locally, "within" one assert statement?
For example, consider the following formula:
(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)
Can I be sure that the proof will contain a resolution step to prove False
, or is it possible that False
will be concluded by a rewrite/simplification step?
The reason I am asking is that for my application, every assert
statement has a special semantics. Rewriting/Simplification across several assert
statements would render the resulting proof of unsatisfiability unusable (or at least: very hard to use) for me.
Upvotes: 2
Views: 353
Reputation: 21475
Z3 3.2 applies several preprocessing steps. Using (set-option :auto-config false)
will disable most of them. You should also include the following two options:
(set-option :propagate-booleans false)
(set-option :propagate-values false)
Upvotes: 1