mirror of
https://github.com/Z3Prover/z3
synced 2025-04-13 20:38:43 +00:00
fix lookahead with ba extension
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
81ad69214c
commit
99b232a4c5
|
@ -1564,7 +1564,7 @@ namespace sat {
|
|||
init_watch(*c, true);
|
||||
}
|
||||
else {
|
||||
s().set_external(lit.var());
|
||||
if (m_solver) m_solver->set_external(lit.var());
|
||||
watch_literal(lit, *c);
|
||||
watch_literal(~lit, *c);
|
||||
}
|
||||
|
@ -3243,6 +3243,18 @@ namespace sat {
|
|||
extension* ba_solver::copy(solver* s) {
|
||||
ba_solver* result = alloc(ba_solver);
|
||||
result->set_solver(s);
|
||||
copy_core(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
extension* ba_solver::copy(lookahead* s) {
|
||||
ba_solver* result = alloc(ba_solver);
|
||||
result->set_lookahead(s);
|
||||
copy_core(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
void ba_solver::copy_core(ba_solver* result) {
|
||||
literal_vector lits;
|
||||
svector<wliteral> wlits;
|
||||
for (constraint* cp : m_constraints) {
|
||||
|
@ -3274,8 +3286,6 @@ namespace sat {
|
|||
UNREACHABLE();
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void ba_solver::init_use_list(ext_use_list& ul) {
|
||||
|
|
|
@ -369,7 +369,7 @@ namespace sat {
|
|||
inline watch_list const& get_wlist(literal l) const { return m_lookahead ? m_lookahead->get_wlist(l) : m_solver->get_wlist(l); }
|
||||
inline void assign(literal l, justification j) { if (m_lookahead) m_lookahead->assign(l); else m_solver->assign(l, j); }
|
||||
inline void set_conflict(justification j, literal l) { if (m_lookahead) m_lookahead->set_conflict(); else m_solver->set_conflict(j, l); }
|
||||
inline config const& get_config() const { return m_solver->get_config(); }
|
||||
inline config const& get_config() const { return m_lookahead ? m_lookahead->get_config() : m_solver->get_config(); }
|
||||
inline void drat_add(literal_vector const& c, svector<drat::premise> const& premises) { m_solver->m_drat.add(c, premises); }
|
||||
|
||||
|
||||
|
@ -428,6 +428,7 @@ namespace sat {
|
|||
constraint* add_pb_ge(literal l, svector<wliteral> const& wlits, unsigned k, bool learned);
|
||||
constraint* add_xor(literal l, literal_vector const& lits, bool learned);
|
||||
|
||||
void copy_core(ba_solver* result);
|
||||
public:
|
||||
ba_solver();
|
||||
virtual ~ba_solver();
|
||||
|
@ -453,6 +454,7 @@ namespace sat {
|
|||
virtual std::ostream& display_justification(std::ostream& out, ext_justification_idx idx) const;
|
||||
virtual void collect_statistics(statistics& st) const;
|
||||
virtual extension* copy(solver* s);
|
||||
virtual extension* copy(lookahead* s);
|
||||
virtual void find_mutexes(literal_vector& lits, vector<literal_vector> & mutexes);
|
||||
virtual void pop_reinit();
|
||||
virtual void gc();
|
||||
|
|
|
@ -71,6 +71,7 @@ namespace sat {
|
|||
virtual std::ostream& display_justification(std::ostream& out, ext_justification_idx idx) const = 0;
|
||||
virtual void collect_statistics(statistics& st) const = 0;
|
||||
virtual extension* copy(solver* s) = 0;
|
||||
virtual extension* copy(lookahead* s) = 0;
|
||||
virtual void find_mutexes(literal_vector& lits, vector<literal_vector> & mutexes) = 0;
|
||||
virtual void gc() = 0;
|
||||
virtual void pop_reinit() = 0;
|
||||
|
|
|
@ -988,6 +988,7 @@ namespace sat {
|
|||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
// copy externals:
|
||||
for (unsigned idx = 0; idx < m_s.m_watches.size(); ++idx) {
|
||||
watch_list const& wl = m_s.m_watches[idx];
|
||||
|
@ -997,6 +998,11 @@ namespace sat {
|
|||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
if (m_s.m_ext) {
|
||||
m_ext = m_s.m_ext->copy(this);
|
||||
}
|
||||
#endif
|
||||
propagate();
|
||||
m_qhead = m_trail.size();
|
||||
TRACE("sat", m_s.display(tout); display(tout););
|
||||
|
|
|
@ -233,6 +233,7 @@ namespace sat {
|
|||
stats m_stats;
|
||||
model m_model;
|
||||
cube_state m_cube_state;
|
||||
scoped_ptr<extension> m_ext;
|
||||
|
||||
// ---------------------------------------
|
||||
// truth values
|
||||
|
@ -605,6 +606,8 @@ namespace sat {
|
|||
|
||||
double literal_occs(literal l);
|
||||
double literal_big_occs(literal l);
|
||||
|
||||
sat::config const& get_config() const { return m_s.get_config(); }
|
||||
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue