mirror of
https://github.com/Z3Prover/z3
synced 2025-08-22 02:57:50 +00:00
Update hints to carry premises
This commit is contained in:
parent
f328ddf88e
commit
32825a26cb
5 changed files with 127 additions and 37 deletions
|
@ -245,7 +245,7 @@ namespace polysat {
|
|||
}
|
||||
|
||||
// If no saturation propagation was possible, explain the conflict using the variable assignment.
|
||||
m_unsat_core = explain_eval(get_constraint(conflict_idx));
|
||||
m_unsat_core = explain_eval_unfold(get_constraint(conflict_idx));
|
||||
m_unsat_core.push_back(get_dependency(conflict_idx));
|
||||
s.set_conflict(m_unsat_core, "polysat-bail-out-conflict");
|
||||
decay_activity();
|
||||
|
@ -456,9 +456,9 @@ namespace polysat {
|
|||
s.trail().push(unassign(*this, index.id));
|
||||
}
|
||||
|
||||
dependency_vector core::explain_eval(signed_constraint const& sc) {
|
||||
dependency_vector core::explain_eval(unsigned_vector const& vars) {
|
||||
dependency_vector deps;
|
||||
for (auto v : sc.vars()) {
|
||||
for (auto v : vars) {
|
||||
if (is_assigned(v)) {
|
||||
inc_activity(v);
|
||||
deps.push_back(m_justification[v]);
|
||||
|
@ -467,6 +467,14 @@ namespace polysat {
|
|||
return deps;
|
||||
}
|
||||
|
||||
dependency_vector core::explain_eval(signed_constraint const& sc) {
|
||||
return explain_eval(sc.vars());
|
||||
}
|
||||
|
||||
dependency_vector core::explain_eval_unfold(signed_constraint const& sc) {
|
||||
return explain_eval(sc.unfold_vars());
|
||||
}
|
||||
|
||||
lbool core::eval(signed_constraint const& sc) {
|
||||
return sc.eval(m_assignment);
|
||||
}
|
||||
|
|
|
@ -86,6 +86,7 @@ namespace polysat {
|
|||
void propagate_assignment(pvar v, rational const& value, dependency dep);
|
||||
void propagate_activation(constraint_id idx, signed_constraint& sc, dependency dep);
|
||||
void propagate(constraint_id id, signed_constraint& sc, lbool value, dependency const& d);
|
||||
dependency_vector explain_eval(unsigned_vector const& vars);
|
||||
|
||||
void add_watch(unsigned idx, unsigned var);
|
||||
|
||||
|
@ -173,6 +174,7 @@ namespace polysat {
|
|||
lbool eval(signed_constraint const& sc);
|
||||
lbool eval_unfold(signed_constraint const& sc);
|
||||
dependency_vector explain_eval(signed_constraint const& sc);
|
||||
dependency_vector explain_eval_unfold(signed_constraint const& sc);
|
||||
bool inconsistent() const;
|
||||
|
||||
/*
|
||||
|
|
|
@ -107,8 +107,7 @@ namespace polysat {
|
|||
m_num_bits = c.size(v);
|
||||
m_fixed_bits.reset(v);
|
||||
init_overlaps(v);
|
||||
bool start_at0 = val1 == 0;
|
||||
|
||||
bool start_at0 = val1 == 0;
|
||||
|
||||
lbool r = next_viable(val1);
|
||||
TRACE("bv", display_state(tout); display(tout << "next viable v" << v << " " << val1 << " " << r << "\n"));
|
||||
|
@ -132,6 +131,15 @@ namespace polysat {
|
|||
|
||||
r = next_viable(val2);
|
||||
|
||||
if (r != l_false)
|
||||
return r;
|
||||
|
||||
if (!start_at0 && val1 == c.var2pdd(v).max_value())
|
||||
return l_false;
|
||||
|
||||
val2 = 0;
|
||||
r = next_viable(val2);
|
||||
|
||||
if (r != l_false)
|
||||
return r;
|
||||
val2 = val1;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue