3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-08-05 02:40:24 +00:00

elaborate on clause reinitialization code path

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2023-03-28 12:57:34 -07:00
parent 67efd6531b
commit d0e016c35d
2 changed files with 17 additions and 0 deletions

View file

@ -322,6 +322,14 @@ namespace polysat {
return any_of(c, [&](sat::literal lit) { return m_bvars.scope(lit) > 0; }); return any_of(c, [&](sat::literal lit) { return m_bvars.scope(lit) > 0; });
} }
void solver::push_reinit_stack(clause& c) {
if (c.on_reinit_stack())
return;
c.set_on_reinit_stack(true);
m_clauses_to_reinit.push_back(&c);
}
// TODO // TODO
// pop_levels is called from pop and backjump // pop_levels is called from pop and backjump
// backjump invoked a few places. // backjump invoked a few places.
@ -339,6 +347,7 @@ namespace polysat {
unsigned j = old_sz; unsigned j = old_sz;
for (unsigned i = old_sz; i < sz; i++) { for (unsigned i = old_sz; i < sz; i++) {
clause& c = *m_clauses_to_reinit[i]; clause& c = *m_clauses_to_reinit[i];
SASSERT(c.on_reinit_stack());
bool reinit = false; bool reinit = false;
#if 0 #if 0
// todo, private methods to constraint_manager // todo, private methods to constraint_manager
@ -702,6 +711,7 @@ namespace polysat {
void solver::push_level() { void solver::push_level() {
++m_level; ++m_level;
m_reinit_heads.push_back(m_clauses_to_reinit.size());
m_trail.push_back(trail_instr_t::inc_level_i); m_trail.push_back(trail_instr_t::inc_level_i);
} }
@ -746,6 +756,8 @@ namespace polysat {
case trail_instr_t::inc_level_i: { case trail_instr_t::inc_level_i: {
--m_level; --m_level;
--num_levels; --num_levels;
m_reinit_head = m_reinit_heads.back();
m_reinit_heads.pop_back();
break; break;
} }
case trail_instr_t::viable_add_i: { case trail_instr_t::viable_add_i: {
@ -795,6 +807,9 @@ namespace polysat {
} }
m_constraints.release_level(m_level + 1); m_constraints.release_level(m_level + 1);
// todo:
// reinit_clauses(m_reinit_head);
SASSERT(m_level == target_level); SASSERT(m_level == target_level);
} }

View file

@ -348,6 +348,8 @@ namespace polysat {
// clause reinitialization // clause reinitialization
ptr_vector<clause> m_clauses_to_reinit; ptr_vector<clause> m_clauses_to_reinit;
unsigned_vector m_reinit_heads;
unsigned m_reinit_head = 0;
void push_reinit_stack(clause& c); void push_reinit_stack(clause& c);
void reinit_clauses(unsigned old_sz); void reinit_clauses(unsigned old_sz);
bool has_variables_to_reinit(clause const& c) const; bool has_variables_to_reinit(clause const& c) const;