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:
parent
50a5e24c69
commit
43fef8e8ba
4 changed files with 35 additions and 26 deletions
|
@ -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; ) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue