mirror of
https://github.com/Z3Prover/z3
synced 2025-07-02 02:48:47 +00:00
update set/unset mark for propagation
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
bb227c0d6e
commit
73b4e7f2a8
4 changed files with 11 additions and 11 deletions
|
@ -66,7 +66,7 @@ namespace polysat {
|
||||||
|
|
||||||
void conflict_core::reset() {
|
void conflict_core::reset() {
|
||||||
for (auto c : *this)
|
for (auto c : *this)
|
||||||
unset_mark(c.get());
|
unset_mark(c);
|
||||||
m_constraints.reset();
|
m_constraints.reset();
|
||||||
m_literals.reset();
|
m_literals.reset();
|
||||||
m_vars.reset();
|
m_vars.reset();
|
||||||
|
@ -113,7 +113,7 @@ namespace polysat {
|
||||||
SASSERT(!c.is_always_false());
|
SASSERT(!c.is_always_false());
|
||||||
if (c->is_marked())
|
if (c->is_marked())
|
||||||
return;
|
return;
|
||||||
set_mark(c.get());
|
set_mark(c);
|
||||||
if (c->has_bvar())
|
if (c->has_bvar())
|
||||||
insert_literal(c.blit());
|
insert_literal(c.blit());
|
||||||
else
|
else
|
||||||
|
@ -126,7 +126,7 @@ namespace polysat {
|
||||||
}
|
}
|
||||||
|
|
||||||
void conflict_core::remove(signed_constraint c) {
|
void conflict_core::remove(signed_constraint c) {
|
||||||
unset_mark(c.get());
|
unset_mark(c);
|
||||||
if (c->has_bvar()) {
|
if (c->has_bvar()) {
|
||||||
SASSERT(std::count(m_constraints.begin(), m_constraints.end(), c) == 0);
|
SASSERT(std::count(m_constraints.begin(), m_constraints.end(), c) == 0);
|
||||||
remove_literal(c.blit());
|
remove_literal(c.blit());
|
||||||
|
@ -144,7 +144,7 @@ namespace polysat {
|
||||||
unsigned j = 0;
|
unsigned j = 0;
|
||||||
for (unsigned i = 0; i < m_constraints.size(); ++i)
|
for (unsigned i = 0; i < m_constraints.size(); ++i)
|
||||||
if (m_constraints[i]->contains_var(v))
|
if (m_constraints[i]->contains_var(v))
|
||||||
unset_mark(m_constraints[i].get());
|
unset_mark(m_constraints[i]);
|
||||||
else
|
else
|
||||||
m_constraints[j++] = m_constraints[i];
|
m_constraints[j++] = m_constraints[i];
|
||||||
|
|
||||||
|
@ -172,7 +172,7 @@ namespace polysat {
|
||||||
if (c->bvar() != var)
|
if (c->bvar() != var)
|
||||||
m_constraints[j++] = c;
|
m_constraints[j++] = c;
|
||||||
else
|
else
|
||||||
unset_mark(c.get());
|
unset_mark(c);
|
||||||
}
|
}
|
||||||
m_constraints.shrink(j);
|
m_constraints.shrink(j);
|
||||||
|
|
||||||
|
@ -333,10 +333,10 @@ namespace polysat {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void conflict_core::set_mark(constraint* c) {
|
void conflict_core::set_mark(signed_constraint c) {
|
||||||
if (c->is_marked())
|
if (c->is_marked())
|
||||||
return;
|
return;
|
||||||
bool bool_propagated = c->has_bvar() && s().m_bvars.is_assigned(c->bvar());
|
bool bool_propagated = c->has_bvar() && s().m_bvars.value(c.blit()) == l_true;
|
||||||
c->set_mark();
|
c->set_mark();
|
||||||
if (c->has_bvar())
|
if (c->has_bvar())
|
||||||
set_bmark(c->bvar());
|
set_bmark(c->bvar());
|
||||||
|
@ -347,7 +347,7 @@ namespace polysat {
|
||||||
inc_pref(v);
|
inc_pref(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
void conflict_core::unset_mark(constraint* c) {
|
void conflict_core::unset_mark(signed_constraint c) {
|
||||||
if (!c->is_marked())
|
if (!c->is_marked())
|
||||||
return;
|
return;
|
||||||
c->unset_mark();
|
c->unset_mark();
|
||||||
|
|
|
@ -42,8 +42,8 @@ namespace polysat {
|
||||||
void set_bmark(sat::bool_var b);
|
void set_bmark(sat::bool_var b);
|
||||||
void unset_bmark(sat::bool_var b);
|
void unset_bmark(sat::bool_var b);
|
||||||
|
|
||||||
void set_mark(constraint* c);
|
void set_mark(signed_constraint c);
|
||||||
void unset_mark(constraint* c);
|
void unset_mark(signed_constraint c);
|
||||||
|
|
||||||
void insert_literal(sat::literal lit);
|
void insert_literal(sat::literal lit);
|
||||||
void remove_literal(sat::literal lit);
|
void remove_literal(sat::literal lit);
|
||||||
|
|
|
@ -99,7 +99,6 @@ namespace polysat {
|
||||||
return sz2pdd(sz).mk_val(v);
|
return sz2pdd(sz).mk_val(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void solver::del_var() {
|
void solver::del_var() {
|
||||||
// TODO also remove v from all learned constraints.
|
// TODO also remove v from all learned constraints.
|
||||||
pvar v = m_value.size() - 1;
|
pvar v = m_value.size() - 1;
|
||||||
|
|
|
@ -282,6 +282,7 @@ namespace polysat {
|
||||||
|
|
||||||
unsigned get_level(pvar v) const { SASSERT(is_assigned(v)); return m_justification[v].level(); }
|
unsigned get_level(pvar v) const { SASSERT(is_assigned(v)); return m_justification[v].level(); }
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create polynomial constraints (but do not activate them).
|
* Create polynomial constraints (but do not activate them).
|
||||||
* Each constraint is tracked by a dependency.
|
* Each constraint is tracked by a dependency.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue