3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-23 09:05:31 +00:00

pending files

This commit is contained in:
Nikolaj Bjorner 2023-12-02 19:43:51 -08:00
parent b22daa9816
commit 1de25ed09c
3 changed files with 50 additions and 40 deletions

View file

@ -962,6 +962,8 @@ namespace sat {
// -----------------------
bool solver::propagate_core(bool update) {
if (m_ext && (!is_probing() || at_base_lvl()))
m_ext->unit_propagate();
while (m_qhead < m_trail.size() && !m_inconsistent) {
do {
checkpoint();
@ -1783,7 +1785,7 @@ namespace sat {
}
bool solver::should_propagate() const {
return !inconsistent() && m_qhead < m_trail.size();
return !inconsistent() && (m_qhead < m_trail.size() || (m_ext && m_ext->should_propagate()));
}
lbool solver::final_check() {
@ -2533,17 +2535,8 @@ namespace sat {
case justification::EXT_JUSTIFICATION: {
fill_ext_antecedents(consequent, js, false);
TRACE("sat", tout << "ext antecedents: " << m_ext_antecedents << "\n";);
for (literal l : m_ext_antecedents)
process_antecedent(l, num_marks);
#if 0
if (m_ext_antecedents.size() <= 1) {
for (literal& l : m_ext_antecedents)
l.neg();
m_ext_antecedents.push_back(consequent);
mk_clause(m_ext_antecedents.size(), m_ext_antecedents.c_ptr(), sat::status::redundant());
}
#endif
for (literal l : m_ext_antecedents)
process_antecedent(l, num_marks);
break;
}
default:
@ -2822,25 +2815,27 @@ namespace sat {
switch (js.get_kind()) {
case justification::NONE:
level = std::max(level, js.level());
return level;
break;
case justification::BINARY:
level = update_max_level(js.get_literal(), level, unique_max);
return level;
break;
case justification::CLAUSE:
for (literal l : get_clause(js))
level = update_max_level(l, level, unique_max);
return level;
break;
case justification::EXT_JUSTIFICATION:
if (not_l != null_literal)
not_l.neg();
fill_ext_antecedents(not_l, js, true);
for (literal l : m_ext_antecedents)
level = update_max_level(l, level, unique_max);
return level;
break;
default:
UNREACHABLE();
return 0;
break;
}
TRACE("sat", tout << "max-level " << level << " " << unique_max << "\n");
return level;
}
/**
@ -3493,6 +3488,8 @@ namespace sat {
SASSERT(!inconsistent());
TRACE("sat_verbose", tout << "q:" << m_qhead << " trail: " << m_trail.size() << "\n";);
SASSERT(m_qhead == m_trail.size());
if (m_ext)
m_ext->unit_propagate();
m_scopes.push_back(scope());
scope & s = m_scopes.back();
m_scope_lvl++;

View file

@ -435,6 +435,9 @@ namespace euf {
}
bool solver::should_propagate() {
return m_egraph.can_propagate();
}
bool solver::unit_propagate() {
bool propagated = false;
@ -477,6 +480,7 @@ namespace euf {
SASSERT(m.is_bool(e));
size_t cnstr;
literal lit;
if (!ante) {
VERIFY(m.is_eq(e, a, b));
cnstr = eq_constraint().to_index();
@ -494,7 +498,7 @@ namespace euf {
if (val == l_undef) {
SASSERT(m.is_value(ante->get_expr()));
val = m.is_true(ante->get_expr()) ? l_true : l_false;
}
}
auto& c = lit_constraint(ante);
cnstr = c.to_index();
lit = literal(v, val == l_false);
@ -1012,8 +1016,10 @@ namespace euf {
return out << "euf conflict";
case constraint::kind_t::eq:
return out << "euf equality propagation";
case constraint::kind_t::lit:
return out << "euf literal propagation " << m_egraph.bpp(c.node()) ;
case constraint::kind_t::lit: {
euf::enode* n = c.node();
return out << "euf literal propagation " << (sat::literal(n->bool_var(), n->value() == l_false)) << " " << m_egraph.bpp(n);
}
default:
UNREACHABLE();
return out;