3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-02-28 19:01:29 +00:00

Polysat: conflict explanation prototype (#5353)

* display constraint's extra info in one place

* Add stub for conflict explainer

* Add helper functions to check whether constraint is active at base level

* Add helper class tmp_assign

* Add clause_builder; it skips unnecessary literals during clause creation

* some fixes

* Use clause_builder for forbidden intervals

* remove old comments

* fixes/comments in solver

* print redundant clauses

* First pass at conflict_explainer

* remove unused model class

* Choose value for k

* also print min/max k
This commit is contained in:
Jakob Rath 2021-06-17 17:35:32 +02:00 committed by GitHub
parent 1fe7dc40fe
commit 3e1cfcd538
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 449 additions and 60 deletions

View file

@ -47,6 +47,8 @@ namespace polysat {
friend class var_constraint;
friend class ule_constraint;
friend class clause;
friend class clause_builder;
friend class conflict_explainer;
friend class forbidden_intervals;
friend class linear_solver;
@ -244,9 +246,15 @@ namespace polysat {
p_dependency* mk_dep(unsigned dep) { return dep == null_dependency ? nullptr : m_dm.mk_leaf(dep); }
p_dependency_ref mk_dep_ref(unsigned dep) { return p_dependency_ref(mk_dep(dep), m_dm); }
/// Evaluate term under the current assignment.
bool try_eval(pdd const& p, rational& out_value) const;
bool is_conflict() const { return !m_conflict.empty(); }
bool at_base_level() const;
unsigned base_level() const;
bool active_at_base_level(sat::bool_var bvar) const;
bool active_at_base_level(sat::literal lit) const { return active_at_base_level(lit.var()); }
bool active_at_base_level(constraint& c) const { return active_at_base_level(c.bvar()); }
void resolve_conflict();
void backtrack(unsigned i, clause_ref lemma);