mirror of
https://github.com/Z3Prover/z3
synced 2025-04-15 13:28:47 +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);
|
init_watch(*c, true);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
s().set_external(lit.var());
|
if (m_solver) m_solver->set_external(lit.var());
|
||||||
watch_literal(lit, *c);
|
watch_literal(lit, *c);
|
||||||
watch_literal(~lit, *c);
|
watch_literal(~lit, *c);
|
||||||
}
|
}
|
||||||
|
@ -3243,6 +3243,18 @@ namespace sat {
|
||||||
extension* ba_solver::copy(solver* s) {
|
extension* ba_solver::copy(solver* s) {
|
||||||
ba_solver* result = alloc(ba_solver);
|
ba_solver* result = alloc(ba_solver);
|
||||||
result->set_solver(s);
|
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;
|
literal_vector lits;
|
||||||
svector<wliteral> wlits;
|
svector<wliteral> wlits;
|
||||||
for (constraint* cp : m_constraints) {
|
for (constraint* cp : m_constraints) {
|
||||||
|
@ -3274,8 +3286,6 @@ namespace sat {
|
||||||
UNREACHABLE();
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ba_solver::init_use_list(ext_use_list& ul) {
|
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 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 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 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); }
|
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_pb_ge(literal l, svector<wliteral> const& wlits, unsigned k, bool learned);
|
||||||
constraint* add_xor(literal l, literal_vector const& lits, bool learned);
|
constraint* add_xor(literal l, literal_vector const& lits, bool learned);
|
||||||
|
|
||||||
|
void copy_core(ba_solver* result);
|
||||||
public:
|
public:
|
||||||
ba_solver();
|
ba_solver();
|
||||||
virtual ~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 std::ostream& display_justification(std::ostream& out, ext_justification_idx idx) const;
|
||||||
virtual void collect_statistics(statistics& st) const;
|
virtual void collect_statistics(statistics& st) const;
|
||||||
virtual extension* copy(solver* s);
|
virtual extension* copy(solver* s);
|
||||||
|
virtual extension* copy(lookahead* s);
|
||||||
virtual void find_mutexes(literal_vector& lits, vector<literal_vector> & mutexes);
|
virtual void find_mutexes(literal_vector& lits, vector<literal_vector> & mutexes);
|
||||||
virtual void pop_reinit();
|
virtual void pop_reinit();
|
||||||
virtual void gc();
|
virtual void gc();
|
||||||
|
|
|
@ -71,6 +71,7 @@ namespace sat {
|
||||||
virtual std::ostream& display_justification(std::ostream& out, ext_justification_idx idx) const = 0;
|
virtual std::ostream& display_justification(std::ostream& out, ext_justification_idx idx) const = 0;
|
||||||
virtual void collect_statistics(statistics& st) const = 0;
|
virtual void collect_statistics(statistics& st) const = 0;
|
||||||
virtual extension* copy(solver* s) = 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 find_mutexes(literal_vector& lits, vector<literal_vector> & mutexes) = 0;
|
||||||
virtual void gc() = 0;
|
virtual void gc() = 0;
|
||||||
virtual void pop_reinit() = 0;
|
virtual void pop_reinit() = 0;
|
||||||
|
|
|
@ -988,6 +988,7 @@ namespace sat {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
// copy externals:
|
// copy externals:
|
||||||
for (unsigned idx = 0; idx < m_s.m_watches.size(); ++idx) {
|
for (unsigned idx = 0; idx < m_s.m_watches.size(); ++idx) {
|
||||||
watch_list const& wl = m_s.m_watches[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();
|
propagate();
|
||||||
m_qhead = m_trail.size();
|
m_qhead = m_trail.size();
|
||||||
TRACE("sat", m_s.display(tout); display(tout););
|
TRACE("sat", m_s.display(tout); display(tout););
|
||||||
|
|
|
@ -233,6 +233,7 @@ namespace sat {
|
||||||
stats m_stats;
|
stats m_stats;
|
||||||
model m_model;
|
model m_model;
|
||||||
cube_state m_cube_state;
|
cube_state m_cube_state;
|
||||||
|
scoped_ptr<extension> m_ext;
|
||||||
|
|
||||||
// ---------------------------------------
|
// ---------------------------------------
|
||||||
// truth values
|
// truth values
|
||||||
|
@ -605,6 +606,8 @@ namespace sat {
|
||||||
|
|
||||||
double literal_occs(literal l);
|
double literal_occs(literal l);
|
||||||
double literal_big_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