3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-04-26 22:03:34 +00:00

migrating interface

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2023-12-22 07:05:17 -08:00
parent 78aea59387
commit 1d1457f81a
12 changed files with 123 additions and 149 deletions

View file

@ -175,11 +175,11 @@ namespace polysat {
s.trail().push(mk_dqueue_var(m_var, *this));
switch (m_viable.find_viable(m_var, m_value)) {
case find_t::empty:
s.set_lemma(m_viable.get_core(), get_dependencies(m_viable.explain()));
s.set_conflict(m_viable.explain());
// propagate_unsat_core();
return sat::check_result::CR_CONTINUE;
case find_t::singleton:
s.propagate(m_constraints.eq(var2pdd(m_var), m_value), get_dependencies(m_viable.explain()));
s.propagate(m_constraints.eq(var2pdd(m_var), m_value), m_viable.explain());
return sat::check_result::CR_CONTINUE;
case find_t::multiple:
s.add_eq_literal(m_var, m_value);
@ -353,10 +353,10 @@ namespace polysat {
return;
switch (eval(sc)) {
case l_false:
s.propagate(d, true, get_dependencies(explain_eval(sc)));
s.propagate(d, true, explain_eval(sc));
break;
case l_true:
s.propagate(d, false, get_dependencies(explain_eval(sc)));
s.propagate(d, false, explain_eval(sc));
break;
default:
break;
@ -369,17 +369,10 @@ namespace polysat {
return value == l_false ? ~d : d;
}
dependency_vector core::get_dependencies(constraint_id_vector const& cc) {
dependency_vector core::get_dependencies(constraint_id_vector const& ids) const {
dependency_vector result;
for (auto idx : cc)
result.push_back(get_dependency(idx));
return result;
}
dependency_vector core::get_dependencies(std::initializer_list<constraint_id> const& cc) {
dependency_vector result;
for (auto idx : cc)
result.push_back(get_dependency(idx));
for (auto id : ids)
result.push_back(get_dependency(id));
return result;
}
@ -388,7 +381,7 @@ namespace polysat {
if (eval_value == l_undef)
sc.propagate(*this, value, d);
else if (value == l_undef)
s.propagate(d, eval_value != l_true, get_dependencies(explain_eval(sc)));
s.propagate(d, eval_value != l_true, explain_eval(sc));
else if (value != eval_value) {
m_unsat_core = explain_eval(sc);
m_unsat_core.push_back(id);
@ -411,8 +404,7 @@ namespace polysat {
void core::propagate_unsat_core() {
// default is to use unsat core:
// if core is based on viable, use s.set_lemma();
s.set_conflict(get_dependencies(m_unsat_core));
s.set_conflict(m_unsat_core);
}
void core::assign_eh(constraint_id index, bool sign, unsigned level) {
@ -451,6 +443,10 @@ namespace polysat {
return s.trail();
}
void core::add_axiom(char const* name, core_vector const& cs, bool is_redundant) {
s.add_axiom(name, cs, is_redundant);
}
std::ostream& core::display(std::ostream& out) const {
if (m_constraint_index.empty() && m_vars.empty())
return out;
@ -480,14 +476,6 @@ namespace polysat {
assign_eh(idx, false, 0);
}
bool core::add_clause(char const* name, core_vector const& cs, bool is_redundant) {
for (auto e : cs)
if (std::holds_alternative<signed_constraint>(e) && eval(*std::get_if<signed_constraint>(&e)) == l_true)
return false;
return s.add_polysat_clause(name, cs, is_redundant);
}
signed_constraint core::get_constraint(constraint_id idx) {
auto [sc, d, value] = m_constraint_index[idx.id];
SASSERT(value != l_undef);