mirror of
https://github.com/Z3Prover/z3
synced 2025-05-13 02:34:43 +00:00
fixing up missing dependencies during resolution
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
1264fe462d
commit
0677eb1c05
6 changed files with 67 additions and 35 deletions
|
@ -22,7 +22,8 @@ namespace polysat {
|
|||
|
||||
enum class kind_t {
|
||||
unassigned,
|
||||
propagation,
|
||||
bool_propagation,
|
||||
value_propagation,
|
||||
decision,
|
||||
};
|
||||
|
||||
|
@ -56,15 +57,17 @@ namespace polysat {
|
|||
bool is_assigned(sat::literal lit) const { return value(lit) != l_undef; }
|
||||
bool is_decision(sat::bool_var var) const { return is_assigned(var) && m_kind[var] == kind_t::decision; }
|
||||
bool is_decision(sat::literal lit) const { return is_decision(lit.var()); }
|
||||
bool is_propagation(sat::bool_var var) const { return is_assigned(var) && m_kind[var] == kind_t::propagation; }
|
||||
bool is_propagation(sat::literal lit) const { return is_propagation(lit.var()); }
|
||||
bool is_bool_propagation(sat::bool_var var) const { return is_assigned(var) && m_kind[var] == kind_t::bool_propagation; }
|
||||
bool is_bool_propagation(sat::literal lit) const { return is_bool_propagation(lit.var()); }
|
||||
bool is_value_propagation(sat::bool_var var) const { return is_assigned(var) && m_kind[var] == kind_t::value_propagation; }
|
||||
bool is_value_propagation(sat::literal lit) const { return is_value_propagation(lit.var()); }
|
||||
lbool value(sat::bool_var var) const { return value(sat::literal(var)); }
|
||||
lbool value(sat::literal lit) const { return m_value[lit.index()]; }
|
||||
bool is_true(sat::literal lit) const { return value(lit) == l_true; }
|
||||
bool is_false(sat::literal lit) const { return value(lit) == l_false; }
|
||||
unsigned level(sat::bool_var var) const { SASSERT(is_assigned(var)); return m_level[var]; }
|
||||
unsigned level(sat::literal lit) const { return level(lit.var()); }
|
||||
clause* reason(sat::bool_var var) const { SASSERT(is_assigned(var)); return is_propagation(var) ? m_clause[var] : nullptr; }
|
||||
clause* reason(sat::bool_var var) const { SASSERT(is_assigned(var)); return is_bool_propagation(var) ? m_clause[var] : nullptr; }
|
||||
clause* reason(sat::literal lit) const { return reason(lit.var()); }
|
||||
dependency dep(sat::literal lit) const { return lit == sat::null_literal ? null_dependency : m_deps[lit.var()]; }
|
||||
|
||||
|
@ -84,7 +87,6 @@ namespace polysat {
|
|||
void propagate(sat::literal lit, unsigned lvl, clause& reason);
|
||||
void decide(sat::literal lit, unsigned lvl, clause& lemma);
|
||||
void decide(sat::literal lit, unsigned lvl);
|
||||
|
||||
void eval(sat::literal lit, unsigned lvl);
|
||||
void asserted(sat::literal lit, unsigned lvl, dependency dep);
|
||||
void unassign(sat::literal lit);
|
||||
|
@ -94,7 +96,8 @@ namespace polysat {
|
|||
friend std::ostream& operator<<(std::ostream& out, kind_t const& k) {
|
||||
switch (k) {
|
||||
case kind_t::unassigned: return out << "unassigned";
|
||||
case kind_t::propagation: return out << "propagation";
|
||||
case kind_t::bool_propagation: return out << "bool propagation";
|
||||
case kind_t::value_propagation: return out << "value propagation";
|
||||
case kind_t::decision: return out << "decision";
|
||||
default: UNREACHABLE(); return out;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue