3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-08-03 18:00:23 +00:00

Fixed decision-level (again)

This commit is contained in:
Clemens Eisenhofer 2022-12-05 07:52:56 +01:00
parent e4d3b4dcc5
commit 662019ee17
3 changed files with 13 additions and 13 deletions

View file

@ -598,7 +598,7 @@ bool EGaussian::find_truths(
<< "mat[" << matrix_no << "] find_truths\n" << "mat[" << matrix_no << "] find_truths\n"
<< "-> row: " << row_n << "\n" << "-> row: " << row_n << "\n"
<< "-> var: " << var+1 << "\n" << "-> var: " << var+1 << "\n"
<< "-> dec lev:" << m_solver.s().search_lvl()); << "-> dec lev:" << m_solver.s().scope_lvl());
SASSERT(row_n < m_num_rows); SASSERT(row_n < m_num_rows);
SASSERT(satisfied_xors.size() > row_n); SASSERT(satisfied_xors.size() > row_n);
@ -641,7 +641,7 @@ bool EGaussian::find_truths(
xor_reasons[row_n].m_must_recalc = true; xor_reasons[row_n].m_must_recalc = true;
xor_reasons[row_n].m_propagated = sat::null_literal; xor_reasons[row_n].m_propagated = sat::null_literal;
gqd.conflict = m_solver.mk_justification(m_solver.s().search_lvl(), matrix_no, row_n); gqd.conflict = m_solver.mk_justification(m_solver.s().scope_lvl(), matrix_no, row_n);
gqd.status = gauss_res::confl; gqd.status = gauss_res::confl;
TRACE("xor", tout << "--> conflict";); TRACE("xor", tout << "--> conflict";);
@ -788,7 +788,7 @@ void EGaussian::update_cols_vals_set(bool force) {
void EGaussian::prop_lit(const gauss_data& gqd, unsigned row_i, literal ret_lit_prop) { void EGaussian::prop_lit(const gauss_data& gqd, unsigned row_i, literal ret_lit_prop) {
unsigned level; unsigned level;
if (gqd.currLevel == m_solver.s().search_lvl()) if (gqd.currLevel == m_solver.s().scope_lvl())
level = gqd.currLevel; level = gqd.currLevel;
else else
level = get_max_level(gqd, row_i); level = get_max_level(gqd, row_i);
@ -870,7 +870,7 @@ void EGaussian::eliminate_column(unsigned p, gauss_data& gqd) {
xor_reasons[row_i].m_must_recalc = true; xor_reasons[row_i].m_must_recalc = true;
xor_reasons[row_i].m_propagated = sat::null_literal; xor_reasons[row_i].m_propagated = sat::null_literal;
gqd.conflict = m_solver.mk_justification(m_solver.s().search_lvl(), matrix_no, row_i); gqd.conflict = m_solver.mk_justification(m_solver.s().scope_lvl(), matrix_no, row_i);
gqd.status = gauss_res::confl; gqd.status = gauss_res::confl;
break; break;
@ -982,7 +982,7 @@ void EGaussian::check_no_prop_or_unsat_rows() {
tout << " matrix no: " << matrix_no << "\n" tout << " matrix no: " << matrix_no << "\n"
<< " row: " << row << "\n" << " row: " << row << "\n"
<< " non-resp var: " << row_to_var_non_resp[row] + 1 << "\n" << " non-resp var: " << row_to_var_non_resp[row] + 1 << "\n"
<< " dec level: " << m_solver.s().search_lvl() << "\n"; << " dec level: " << m_solver.s().scope_lvl() << "\n";
for (unsigned var = 0; var < m_solver.s().num_vars(); var++) for (unsigned var = 0; var < m_solver.s().num_vars(); var++)
for (const auto& w : m_solver.m_gwatches[var]) for (const auto& w : m_solver.m_gwatches[var])
if (w.matrix_num == matrix_no && w.row_n == row) if (w.matrix_num == matrix_no && w.row_n == row)
@ -1042,7 +1042,7 @@ void EGaussian::check_invariants() {
if (!initialized) return; if (!initialized) return;
check_tracked_cols_only_one_set(); check_tracked_cols_only_one_set();
check_no_prop_or_unsat_rows(); check_no_prop_or_unsat_rows();
TRACE("xor", tout << "mat[" << matrix_no << "] " << "Checked invariants. Dec level: " << m_solver.s().search_lvl() << "\n";); TRACE("xor", tout << "mat[" << matrix_no << "] " << "Checked invariants. Dec level: " << m_solver.s().scope_lvl() << "\n";);
} }
bool EGaussian::check_row_satisfied(unsigned row) { bool EGaussian::check_row_satisfied(unsigned row) {

View file

@ -82,7 +82,7 @@ namespace xr {
} }
} }
void solver::add_xor_clause(const sat::literal_vector& lits, bool rhs, const bool attach) { void solver::add_xor_clause(const literal_vector& lits, bool rhs, const bool attach) {
// TODO: make overload in which "lits" ==> svector<sat::bool_var>; however, first implement missing function "add_xor_clause_inter_cleaned_cut" // TODO: make overload in which "lits" ==> svector<sat::bool_var>; however, first implement missing function "add_xor_clause_inter_cleaned_cut"
if (s().inconsistent()) if (s().inconsistent())
return; return;
@ -90,8 +90,8 @@ namespace xr {
SASSERT(!attach || m_prop_queue_head == m_prop_queue.size()); SASSERT(!attach || m_prop_queue_head == m_prop_queue.size());
SASSERT(s().at_search_lvl()); SASSERT(s().at_search_lvl());
sat::literal_vector ps(lits); literal_vector ps(lits);
for (sat::literal& lit: ps) { for (literal& lit: ps) {
if (lit.sign()) { if (lit.sign()) {
rhs ^= true; rhs ^= true;
lit.neg(); lit.neg();
@ -559,9 +559,9 @@ namespace xr {
} }
// sort xors, eliminate duplicates, and eliminate negations by flipping rhs // sort xors, eliminate duplicates, and eliminate negations by flipping rhs
void solver::clean_xor_no_prop(sat::literal_vector & ps, bool & rhs) { void solver::clean_xor_no_prop(literal_vector & ps, bool & rhs) {
std::sort(ps.begin(), ps.end()); std::sort(ps.begin(), ps.end());
sat::literal p_last = sat::null_literal; literal p_last = sat::null_literal;
unsigned j = 0; unsigned j = 0;
for (auto p : ps) { for (auto p : ps) {
SASSERT(!p.sign()); SASSERT(!p.sign());

View file

@ -68,10 +68,10 @@ namespace xr {
bool xor_has_interesting_var(const xor_clause& x); bool xor_has_interesting_var(const xor_clause& x);
void clean_xor_no_prop(sat::literal_vector& ps, bool& rhs); void clean_xor_no_prop(literal_vector& ps, bool& rhs);
void add_every_combination_xor(const sat::literal_vector& lits, const bool attach); void add_every_combination_xor(const sat::literal_vector& lits, const bool attach);
void add_xor_clause(const sat::literal_vector& lits, bool rhs, const bool attach); void add_xor_clause(const literal_vector& lits, bool rhs, const bool attach);
void clean_occur_from_idx(const literal l); void clean_occur_from_idx(const literal l);
void clean_xors_from_empty(vector<xor_clause>& thisxors); void clean_xors_from_empty(vector<xor_clause>& thisxors);