3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-07-19 10:52:02 +00:00

enable proof production with difference logic, integrate with PDR engine

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2012-10-20 04:25:58 -07:00
parent 28a4f51ea5
commit 2e73957f97
10 changed files with 500 additions and 385 deletions

View file

@ -16,30 +16,6 @@ Author:
Revision History:
TODO:
- check regressions with smt::solver.
- what should be done properly (during internalization) for reflect()
- fix theory propagation:
- x <= y + 2, then x <= y + 3
- x = y, then x <= y + 2
- x = y, x <= z <= y, then x = z
- fix/add equality propagation
- add relaxation (somewhat easy)
- Currently stored explanation in edges is stored at creation time
(not at propagation time).
Is this flexible enough for processing equalities?
- eq_justification present in smt::context when calling new_eq_eh.
pass such to the edge?
- context::assume_eq is absent.
- context::add_eq and context::push_eq are protected. Cannot propagate equalities back to core.
-
--*/
@ -76,13 +52,7 @@ namespace smt {
unsigned m_num_core2th_diseqs;
unsigned m_num_core2th_new_diseqs;
void reset() {
m_num_conflicts = 0;
m_num_assertions = 0;
m_num_th2core_prop = 0;
m_num_th2core_eqs = 0;
m_num_core2th_eqs = 0;
m_num_core2th_diseqs = 0;
m_num_core2th_new_diseqs = 0;
memset(this, 0, sizeof(*this));
}
theory_diff_logic_statistics() {
reset();
@ -93,17 +63,12 @@ namespace smt {
public:
dl_conflict(region & r, unsigned nls, literal const * lits): simple_justification(r, nls, lits) { }
virtual proof * mk_proof(conflict_resolution & cr) { NOT_IMPLEMENTED_YET(); return 0; }
virtual proof * mk_proof(conflict_resolution & cr) {
NOT_IMPLEMENTED_YET();
return 0;
}
};
class dl_propagate : public simple_justification {
public:
dl_propagate(region & r, unsigned nls, literal const * lits): simple_justification(r, nls, lits) { }
virtual proof * mk_proof(conflict_resolution & cr) { NOT_IMPLEMENTED_YET(); return 0; }
};
template<typename Ext>
class theory_diff_logic : public theory, private Ext {