propositional formulas (disjunctions) can appear as literals. This
makes it tricky to recognize whether a formula is a unit clause when
re-building unit resolution.
Added work-around that identifies whether a formula is a literal based
on its appearance in previous unit resolution step.
This is a new version that conceptually addresses the bugs in
all previous version. However, it had a hard-to-debug memory
corruption. The bug appeared only in optimized compilation under
Linux with GCC.
This code is suspect and should be reviewed and further tested
- compute_marks didn't find all units
- call to m.mk_unit_resolution expects that there is at least one unit
- hyp-reduced proof wasn't used
- bug in early termination
- any hypothesis was replaced with the old derivation of the literal
- handle the case of a single literal premise under hypothesis that is
replaced by an empty clause under hypothesis
The algorithms implemented in the engine are described in the following papers
Anvesh Komuravelli, Nikolaj Bjørner, Arie Gurfinkel, Kenneth L. McMillan:
Compositional Verification of Procedural Programs using Horn Clauses over Integers and Arrays. FMCAD 2015: 89-96
Nikolaj Bjørner, Arie Gurfinkel:
Property Directed Polyhedral Abstraction. VMCAI 2015: 263-281
Anvesh Komuravelli, Arie Gurfinkel, Sagar Chaki:
SMT-Based Model Checking for Recursive Programs. CAV 2014: 17-34