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

#5417 - revise q_eval based on bug based on non-chronological dependencies with post-hoc explain function

This commit is contained in:
Nikolaj Bjorner 2021-07-19 07:40:46 -07:00
parent e8bc9f3469
commit 7d915eb295
7 changed files with 99 additions and 145 deletions

View file

@ -63,7 +63,7 @@ namespace q {
quantifier_stat_gen m_qstat_gen;
fingerprints m_fingerprints;
scoped_ptr<binding> m_tmp_binding;
unsigned m_tmp_binding_capacity { 0 };
unsigned m_tmp_binding_capacity = 0;
queue m_inst_queue;
pattern_inference_rw m_infer_patterns;
scoped_ptr<q::mam> m_mam, m_lazy_mam;
@ -72,13 +72,14 @@ namespace q {
vector<unsigned_vector> m_watch; // expr_id -> clause-index*
stats m_stats;
expr_fast_mark1 m_mark;
unsigned m_generation_propagation_threshold{ 3 };
unsigned m_generation_propagation_threshold = 3;
ptr_vector<app> m_ground;
bool m_in_queue_set{ false };
bool m_in_queue_set = false;
nat_set m_node_in_queue;
nat_set m_clause_in_queue;
unsigned m_qhead { 0 };
unsigned m_qhead = 0;
unsigned_vector m_clause_queue;
euf::enode_pair_vector m_evidence;
binding* alloc_binding(unsigned n, app* pat, unsigned max_generation, unsigned min_top, unsigned max_top);
euf::enode* const* alloc_binding(clause& c, euf::enode* const* _binding);
@ -115,7 +116,7 @@ namespace q {
bool propagate(bool flush);
void init_search();
// void init_search();
void add(quantifier* q);
@ -127,7 +128,7 @@ namespace q {
void on_binding(quantifier* q, app* pat, euf::enode* const* binding, unsigned max_generation, unsigned min_gen, unsigned max_gen);
// callbacks from queue
lbool evaluate(euf::enode* const* binding, clause& c) { return m_eval(binding, c); }
lbool evaluate(euf::enode* const* binding, clause& c) { m_evidence.reset(); return m_eval(binding, c, m_evidence); }
void add_instantiation(clause& c, binding& b, sat::literal lit);