mirror of
https://github.com/Z3Prover/z3
synced 2025-04-23 17:15:31 +00:00
na
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
e0effa3775
commit
c663d28201
4 changed files with 13 additions and 7 deletions
|
@ -149,13 +149,14 @@ namespace polysat {
|
|||
m_var = m_var_queue.next_var();
|
||||
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(), 0, m_viable.explain());
|
||||
// propagate_unsat_core();
|
||||
case find_t::empty:
|
||||
s.set_lemma(m_viable.get_core(), m_viable.explain());
|
||||
// propagate_unsat_core();
|
||||
return sat::check_result::CR_CONTINUE;
|
||||
case find_t::singleton:
|
||||
case find_t::singleton: {
|
||||
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);
|
||||
return sat::check_result::CR_CONTINUE;
|
||||
|
|
|
@ -107,7 +107,7 @@ namespace polysat {
|
|||
virtual ~solver_interface() {}
|
||||
virtual void add_eq_literal(pvar v, rational const& val) = 0;
|
||||
virtual void set_conflict(dependency_vector const& core) = 0;
|
||||
virtual void set_lemma(core_vector const& aux_core, unsigned level, dependency_vector const& core) = 0;
|
||||
virtual void set_lemma(core_vector const& aux_core, dependency_vector const& core) = 0;
|
||||
virtual void add_polysat_clause(char const* name, core_vector cs, bool redundant) = 0;
|
||||
virtual dependency propagate(signed_constraint sc, dependency_vector const& deps) = 0;
|
||||
virtual void propagate(dependency const& d, bool sign, dependency_vector const& deps) = 0;
|
||||
|
|
|
@ -130,8 +130,13 @@ namespace polysat {
|
|||
return { core, eqs };
|
||||
}
|
||||
|
||||
void solver::set_lemma(core_vector const& aux_core, unsigned level, dependency_vector const& core) {
|
||||
void solver::set_lemma(core_vector const& aux_core, dependency_vector const& core) {
|
||||
auto [lits, eqs] = explain_deps(core);
|
||||
unsigned level = 0;
|
||||
for (auto const& [n1, n2] : eqs)
|
||||
ctx.get_eq_antecedents(n1, n2, lits);
|
||||
for (auto lit : lits)
|
||||
level = std::max(level, s().lvl(lit));
|
||||
auto ex = euf::th_explain::conflict(*this, lits, eqs, nullptr);
|
||||
ctx.push(value_trail<bool>(m_has_lemma));
|
||||
m_has_lemma = true;
|
||||
|
|
|
@ -144,7 +144,7 @@ namespace polysat {
|
|||
// callbacks from core
|
||||
void add_eq_literal(pvar v, rational const& val) override;
|
||||
void set_conflict(dependency_vector const& core) override;
|
||||
void set_lemma(core_vector const& aux_core, unsigned level, dependency_vector const& core) override;
|
||||
void set_lemma(core_vector const& aux_core, dependency_vector const& core) override;
|
||||
dependency propagate(signed_constraint sc, dependency_vector const& deps) override;
|
||||
void propagate(dependency const& d, bool sign, dependency_vector const& deps) override;
|
||||
trail_stack& trail() override;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue