3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-05-07 07:45:46 +00:00

External constraints need to remember their sign

This commit is contained in:
Jakob Rath 2021-09-14 09:50:07 +02:00
parent 50a5e24c69
commit 43fef8e8ba
4 changed files with 35 additions and 26 deletions

View file

@ -64,15 +64,15 @@ namespace polysat {
return cl;
}
void constraint_manager::register_external(constraint* c) {
void constraint_manager::register_external(signed_constraint c) {
SASSERT(c);
SASSERT(!c->is_external());
if (c->unit_dep() && c->unit_dep()->is_leaf()) {
unsigned const dep = c->unit_dep()->leaf_value();
SASSERT(!m_external_constraints.contains(dep));
m_external_constraints.insert(dep, c);
m_external_constraints.insert(dep, c.get());
}
c->set_external();
c->set_external(c.is_negative());
++m_num_external;
}
@ -83,6 +83,14 @@ namespace polysat {
--m_num_external;
}
signed_constraint constraint_manager::lookup_external(unsigned dep) const {
constraint* c = m_external_constraints.get(dep, nullptr);
if (c)
return {c, !c->external_sign()};
else
return {};
}
// Release constraints at the given level and above.
void constraint_manager::release_level(unsigned lvl) {
for (unsigned l = m_clauses.size(); l-- > lvl; ) {