3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-29 11:55:51 +00:00

updates to poly

This commit is contained in:
Nikolaj Bjorner 2023-12-15 13:50:26 -08:00
parent cecaf25c6f
commit d48247c5f2
7 changed files with 55 additions and 38 deletions

View file

@ -61,25 +61,36 @@ namespace polysat {
return sat::check_result::CR_DONE;
case sat::check_result::CR_CONTINUE:
return sat::check_result::CR_CONTINUE;
case sat::check_result::CR_GIVEUP: {
if (!m.inc())
return sat::check_result::CR_GIVEUP;
switch (m_intblast.check_solver_state()) {
case l_true:
trail().push(value_trail(m_use_intblast_model));
m_use_intblast_model = true;
return sat::check_result::CR_DONE;
case l_false: {
auto core = m_intblast.unsat_core();
for (auto& lit : core)
lit.neg();
s().add_clause(core.size(), core.data(), sat::status::th(true, get_id(), nullptr));
return sat::check_result::CR_CONTINUE;
}
case l_undef:
return sat::check_result::CR_GIVEUP;
}
case sat::check_result::CR_GIVEUP:
return intblast();
}
UNREACHABLE();
return sat::check_result::CR_GIVEUP;
}
sat::check_result solver::intblast() {
if (!m.inc())
return sat::check_result::CR_GIVEUP;
switch (m_intblast.check_solver_state()) {
case l_true: {
pvar pv = m_core.next_var();
auto v = m_pddvar2var[pv];
auto n = var2expr(v);
auto val = m_intblast.get_value(n);
sat::literal lit = eq_internalize(n, bv.mk_numeral(val, get_bv_size(v)));
s().set_phase(lit);
return sat::check_result::CR_CONTINUE;
}
case l_false: {
IF_VERBOSE(2, verbose_stream() << "unsat core: " << m_intblast.unsat_core() << "\n");
auto core = m_intblast.unsat_core();
for (auto& lit : core)
lit.neg();
s().add_clause(core.size(), core.data(), sat::status::th(true, get_id(), nullptr));
return sat::check_result::CR_CONTINUE;
}
case l_undef:
return sat::check_result::CR_GIVEUP;
}
UNREACHABLE();
return sat::check_result::CR_GIVEUP;