3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-29 20:05:51 +00:00

#5417 - delay propagation from callbacks from mam

mam assumes the egraph isn't updated during callbacks.
This commit is contained in:
Nikolaj Bjorner 2021-07-19 11:10:48 -07:00
parent 776f270b64
commit 3156ca5e77
2 changed files with 34 additions and 5 deletions

View file

@ -49,6 +49,13 @@ namespace q {
}
};
struct prop {
bool is_conflict;
unsigned idx;
sat::ext_justification_idx j;
prop(bool is_conflict, unsigned idx, sat::ext_justification_idx j) : is_conflict(is_conflict), idx(idx), j(j) {}
};
struct remove_binding;
struct insert_binding;
struct pop_clause;
@ -65,6 +72,7 @@ namespace q {
scoped_ptr<binding> m_tmp_binding;
unsigned m_tmp_binding_capacity = 0;
queue m_inst_queue;
svector<prop> m_prop_queue;
pattern_inference_rw m_infer_patterns;
scoped_ptr<q::mam> m_mam, m_lazy_mam;
ptr_vector<clause> m_clauses;
@ -108,6 +116,9 @@ namespace q {
fingerprint* add_fingerprint(clause& c, binding& b, unsigned max_generation);
void set_tmp_binding(fingerprint& fp);
bool flush_prop_queue();
void propagate(bool is_conflict, unsigned idx, sat::ext_justification_idx j_idx);
public:
ematch(euf::solver& ctx, solver& s);