3
0
Fork 0
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:
Nikolaj Bjorner 2017-10-11 17:30:21 -07:00
parent 81ad69214c
commit 99b232a4c5
5 changed files with 26 additions and 4 deletions

View file

@ -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) {

View file

@ -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();

View file

@ -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;

View file

@ -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););

View file

@ -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(); }
};
}