3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-08-08 04:01:22 +00:00

Add some fi info

This commit is contained in:
Jakob Rath 2022-04-13 09:34:59 +02:00
parent d59c32261f
commit be488f75ab
5 changed files with 25 additions and 14 deletions

View file

@ -92,13 +92,15 @@ namespace polysat {
out().flush(); out().flush();
} }
void log_gamma(search_state const& m_search) { void end_conflict(search_state const& search, viable const& v) {
out() << "\n" << hline() << "\n\n"; out() << "\n" << hline() << "\n\n";
out() << "Search state (part):\n"; out() << "Search state (part):\n";
for (auto const& item : m_search) for (auto const& item : search)
if (is_relevant(item)) if (is_relevant(item))
out_indent() << search_item_pp(m_search, item, true) << "\n"; out_indent() << search_item_pp(search, item, true) << "\n";
// TODO: log viable out() << hline() << "\nViable (part):\n";
for (pvar var : m_used_vars)
out_indent() << "v" << std::setw(3) << std::left << var << ": " << viable::var_pp(v, var) << "\n";
out().flush(); out().flush();
} }
@ -139,9 +141,9 @@ namespace polysat {
m_logger->log_inference(*this, &inf); m_logger->log_inference(*this, &inf);
} }
void conflict::log_gamma() { void conflict::end_conflict() {
if (m_logger) if (m_logger)
m_logger->log_gamma(s.m_search); m_logger->end_conflict(s.m_search, s.m_viable);
} }
constraint_manager& conflict::cm() const { return s.m_constraints; } constraint_manager& conflict::cm() const { return s.m_constraints; }

View file

@ -136,8 +136,8 @@ namespace polysat {
/// Log inference at the current state. /// Log inference at the current state.
void log_inference(inference const& inf); void log_inference(inference const& inf);
void log_inference(char const* name) { log_inference(inference_named(name)); } void log_inference(char const* name) { log_inference(inference_named(name)); }
/// Log relevant part of search state. /// Log relevant part of search state and viable.
void log_gamma(); void end_conflict();
pvar conflict_var() const { return m_conflict_var; } pvar conflict_var() const { return m_conflict_var; }

View file

@ -602,7 +602,7 @@ namespace polysat {
inc_activity(v); inc_activity(v);
justification& j = m_justification[v]; justification& j = m_justification[v];
if (j.level() > base_level() && !m_conflict.resolve_value(v) && j.is_decision()) { if (j.level() > base_level() && !m_conflict.resolve_value(v) && j.is_decision()) {
m_conflict.log_gamma(); m_conflict.end_conflict();
revert_decision(v); revert_decision(v);
return; return;
} }
@ -623,7 +623,7 @@ namespace polysat {
if (m_bvars.is_assumption(var)) if (m_bvars.is_assumption(var))
continue; continue;
else if (m_bvars.is_decision(var)) { else if (m_bvars.is_decision(var)) {
m_conflict.log_gamma(); m_conflict.end_conflict();
revert_bool_decision(lit); revert_bool_decision(lit);
return; return;
} }
@ -635,7 +635,7 @@ namespace polysat {
} }
} }
} }
m_conflict.log_gamma(); m_conflict.end_conflict();
report_unsat(); report_unsat();
} }

View file

@ -615,6 +615,15 @@ namespace polysat {
return dd::find_t::multiple; return dd::find_t::multiple;
} }
struct inference_fi : public inference {
viable& v;
pvar var;
inference_fi(viable& v, pvar var) : v(v), var(var) {}
std::ostream& display(std::ostream& out) const override {
return out << "Forbidden intervals for v" << var << ": " << viable::var_pp(v, var);
}
};
bool viable::resolve(pvar v, conflict& core) { bool viable::resolve(pvar v, conflict& core) {
if (has_viable(v)) if (has_viable(v))
return false; return false;
@ -649,7 +658,7 @@ namespace polysat {
break; break;
} }
} }
core.log_inference("forbidden intervals"); core.log_inference(inference_fi(*this, v));
return true; return true;
} }

View file

@ -171,9 +171,9 @@ namespace polysat {
std::ostream& display(std::ostream& out, pvar v) const; std::ostream& display(std::ostream& out, pvar v) const;
struct var_pp { struct var_pp {
viable& v; viable const& v;
pvar var; pvar var;
var_pp(viable& v, pvar var) : v(v), var(var) {} var_pp(viable const& v, pvar var) : v(v), var(var) {}
}; };
}; };