mirror of
https://github.com/Z3Prover/z3
synced 2025-04-22 00:26:38 +00:00
add value-propagate flag to patch regression
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
93410ccd81
commit
cd11b70864
4 changed files with 15 additions and 8 deletions
|
@ -162,7 +162,7 @@ namespace polysat {
|
|||
c_lemma.push(c.blit());
|
||||
clause_ref lemma = c_lemma.build();
|
||||
SASSERT(lemma);
|
||||
cm().store(lemma.get(), s);
|
||||
cm().store(lemma.get(), s, false);
|
||||
if (c.bvalue(s) == l_undef)
|
||||
s.assign_propagate(c.blit(), *lemma);
|
||||
}
|
||||
|
|
|
@ -57,11 +57,16 @@ namespace polysat {
|
|||
m_constraints.push_back(c);
|
||||
}
|
||||
|
||||
void constraint_manager::store(clause* cl, solver& s) {
|
||||
|
||||
void constraint_manager::register_clause(clause* cl, solver& s) {
|
||||
while (m_clauses.size() <= s.base_level())
|
||||
m_clauses.push_back({});
|
||||
m_clauses[s.base_level()].push_back(cl);
|
||||
watch(*cl, s);
|
||||
}
|
||||
|
||||
void constraint_manager::store(clause* cl, solver& s, bool value_propagate) {
|
||||
register_clause(cl, s);
|
||||
watch(*cl, s, value_propagate);
|
||||
}
|
||||
|
||||
// Release constraints at the given level and above.
|
||||
|
@ -79,7 +84,7 @@ namespace polysat {
|
|||
// if clause is unsat then assign arbitrary
|
||||
// solver handles unsat clauses by creating a conflict.
|
||||
// solver also can propagate, but need to check that it does indeed.
|
||||
void constraint_manager::watch(clause& cl, solver& s) {
|
||||
void constraint_manager::watch(clause& cl, solver& s, bool value_propagate) {
|
||||
if (cl.empty())
|
||||
return;
|
||||
|
||||
|
@ -88,7 +93,7 @@ namespace polysat {
|
|||
if (m_bvars.is_false(cl[i]))
|
||||
continue;
|
||||
signed_constraint sc = s.lit2cnstr(cl[i]);
|
||||
if (sc.is_currently_false(s)) {
|
||||
if (value_propagate && sc.is_currently_false(s)) {
|
||||
if (m_bvars.is_true(cl[i])) {
|
||||
s.set_conflict(sc);
|
||||
return;
|
||||
|
|
|
@ -67,9 +67,11 @@ namespace polysat {
|
|||
void gc_constraints(solver& s);
|
||||
void gc_clauses(solver& s);
|
||||
|
||||
void watch(clause& cl, solver& s);
|
||||
void watch(clause& cl, solver& s, bool value_propagate);
|
||||
void unwatch(clause& cl);
|
||||
|
||||
void register_clause(clause* cl, solver& s);
|
||||
|
||||
public:
|
||||
constraint_manager(bool_var_manager& bvars): m_bvars(bvars) {}
|
||||
~constraint_manager();
|
||||
|
@ -78,7 +80,7 @@ namespace polysat {
|
|||
void erase_bvar(constraint* c);
|
||||
// sat::literal get_or_assign_blit(signed_constraint& c);
|
||||
|
||||
void store(clause* cl, solver& s);
|
||||
void store(clause* cl, solver& s, bool value_propagate);
|
||||
|
||||
/// Release clauses at the given level and above.
|
||||
void release_level(unsigned lvl);
|
||||
|
|
|
@ -838,7 +838,7 @@ namespace polysat {
|
|||
// SASSERT(m_bvars.value(lit) != l_true);
|
||||
}
|
||||
SASSERT(!clause.empty());
|
||||
m_constraints.store(&clause, *this);
|
||||
m_constraints.store(&clause, *this, true);
|
||||
}
|
||||
|
||||
void solver::add_clause(unsigned n, signed_constraint* cs, bool is_redundant) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue