3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-05-14 03:04:44 +00:00

add value-propagate flag to patch regression

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2022-01-23 12:09:49 +01:00
parent 93410ccd81
commit cd11b70864
4 changed files with 15 additions and 8 deletions

View file

@ -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;