mirror of
https://github.com/Z3Prover/z3
synced 2025-06-06 14:13:23 +00:00
fix hidden tautology bug on non-learned clauses
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
ece5ad90e0
commit
3b1810d893
7 changed files with 22 additions and 13 deletions
|
@ -399,13 +399,11 @@ namespace sat {
|
||||||
bool asymm_branch::process_sampled(big& big, clause & c) {
|
bool asymm_branch::process_sampled(big& big, clause & c) {
|
||||||
scoped_detach scoped_d(s, c);
|
scoped_detach scoped_d(s, c);
|
||||||
sort(big, c);
|
sort(big, c);
|
||||||
#if 1
|
if (c.is_learned() && uhte(big, c)) {
|
||||||
if (uhte(big, c)) {
|
|
||||||
++m_hidden_tautologies;
|
++m_hidden_tautologies;
|
||||||
scoped_d.del_clause();
|
scoped_d.del_clause();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
return uhle(scoped_d, big, c);
|
return uhle(scoped_d, big, c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -88,6 +88,7 @@ namespace sat{
|
||||||
simp.collect_clauses(pos_l, simp.m_pos_cls);
|
simp.collect_clauses(pos_l, simp.m_pos_cls);
|
||||||
simp.collect_clauses(neg_l, simp.m_neg_cls);
|
simp.collect_clauses(neg_l, simp.m_neg_cls);
|
||||||
VERIFY(!simp.is_external(v));
|
VERIFY(!simp.is_external(v));
|
||||||
|
|
||||||
model_converter::entry & mc_entry = s.m_mc.mk(model_converter::ELIM_VAR, v);
|
model_converter::entry & mc_entry = s.m_mc.mk(model_converter::ELIM_VAR, v);
|
||||||
simp.save_clauses(mc_entry, simp.m_pos_cls);
|
simp.save_clauses(mc_entry, simp.m_pos_cls);
|
||||||
simp.save_clauses(mc_entry, simp.m_neg_cls);
|
simp.save_clauses(mc_entry, simp.m_neg_cls);
|
||||||
|
|
|
@ -275,14 +275,7 @@ namespace sat {
|
||||||
}
|
}
|
||||||
|
|
||||||
std::ostream& model_converter::display(std::ostream& out, entry const& entry) const {
|
std::ostream& model_converter::display(std::ostream& out, entry const& entry) const {
|
||||||
out << " (";
|
out << " (" << entry.get_kind() << " " << entry.var();
|
||||||
switch (entry.get_kind()) {
|
|
||||||
case ELIM_VAR: out << "elim"; break;
|
|
||||||
case BLOCK_LIT: out << "blocked"; break;
|
|
||||||
case CCE: out << "cce"; break;
|
|
||||||
case ACCE: out << "acce"; break;
|
|
||||||
}
|
|
||||||
out << " " << entry.var();
|
|
||||||
bool start = true;
|
bool start = true;
|
||||||
unsigned index = 0;
|
unsigned index = 0;
|
||||||
for (literal l : entry.m_clauses) {
|
for (literal l : entry.m_clauses) {
|
||||||
|
|
|
@ -134,6 +134,16 @@ namespace sat {
|
||||||
void expand(literal_vector& update_stack);
|
void expand(literal_vector& update_stack);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
inline std::ostream& operator<<(std::ostream& out, model_converter::kind k) {
|
||||||
|
switch (k) {
|
||||||
|
case model_converter::ELIM_VAR: out << "elim"; break;
|
||||||
|
case model_converter::BLOCK_LIT: out << "blocked"; break;
|
||||||
|
case model_converter::CCE: out << "cce"; break;
|
||||||
|
case model_converter::ACCE: out << "acce"; break;
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1818,6 +1818,7 @@ namespace sat {
|
||||||
|
|
||||||
if (s.m_config.m_drat) s.m_drat.add(*new_c, true);
|
if (s.m_config.m_drat) s.m_drat.add(*new_c, true);
|
||||||
s.m_clauses.push_back(new_c);
|
s.m_clauses.push_back(new_c);
|
||||||
|
|
||||||
m_use_list.insert(*new_c);
|
m_use_list.insert(*new_c);
|
||||||
if (m_sub_counter > 0)
|
if (m_sub_counter > 0)
|
||||||
back_subsumption1(*new_c);
|
back_subsumption1(*new_c);
|
||||||
|
@ -1829,6 +1830,7 @@ namespace sat {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3225,7 +3225,9 @@ namespace sat {
|
||||||
literal l2 = w.get_literal();
|
literal l2 = w.get_literal();
|
||||||
if (l.index() > l2.index())
|
if (l.index() > l2.index())
|
||||||
continue;
|
continue;
|
||||||
out << "(" << l << " " << l2 << ")\n";
|
out << "(" << l << " " << l2 << ")";
|
||||||
|
if (w.is_learned()) out << "*";
|
||||||
|
out << "\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -142,6 +142,7 @@ struct goal2sat::imp {
|
||||||
sat::bool_var v = m_solver.mk_var(ext);
|
sat::bool_var v = m_solver.mk_var(ext);
|
||||||
m_map.insert(t, v);
|
m_map.insert(t, v);
|
||||||
l = sat::literal(v, sign);
|
l = sat::literal(v, sign);
|
||||||
|
// if (to_app(t)->get_decl()->get_name() == "XX") IF_VERBOSE(0, verbose_stream() << mk_ismt2_pp(t, m) << ": " << "v" << v << "\n";);
|
||||||
TRACE("sat", tout << "new_var: " << v << ": " << mk_ismt2_pp(t, m) << "\n";);
|
TRACE("sat", tout << "new_var: " << v << ": " << mk_ismt2_pp(t, m) << "\n";);
|
||||||
if (ext && !is_uninterp_const(t)) {
|
if (ext && !is_uninterp_const(t)) {
|
||||||
m_interpreted_atoms.push_back(t);
|
m_interpreted_atoms.push_back(t);
|
||||||
|
@ -1025,6 +1026,7 @@ void sat2goal::mc::insert(sat::bool_var v, app * atom, bool aux) {
|
||||||
expr_ref sat2goal::mc::lit2expr(sat::literal l) {
|
expr_ref sat2goal::mc::lit2expr(sat::literal l) {
|
||||||
if (!m_var2expr.get(l.var())) {
|
if (!m_var2expr.get(l.var())) {
|
||||||
app* aux = m.mk_fresh_const(0, m.mk_bool_sort());
|
app* aux = m.mk_fresh_const(0, m.mk_bool_sort());
|
||||||
|
// if (aux->get_decl()->get_name() == "k!81740") IF_VERBOSE(0, verbose_stream() << mk_ismt2_pp(aux, m) << ": " << "v" << l.var() << "\n";);
|
||||||
m_var2expr.set(l.var(), aux);
|
m_var2expr.set(l.var(), aux);
|
||||||
}
|
}
|
||||||
VERIFY(m_var2expr.get(l.var()));
|
VERIFY(m_var2expr.get(l.var()));
|
||||||
|
@ -1067,6 +1069,7 @@ struct sat2goal::imp {
|
||||||
app* aux = mc ? mc->var2expr(l.var()) : nullptr;
|
app* aux = mc ? mc->var2expr(l.var()) : nullptr;
|
||||||
if (!aux) {
|
if (!aux) {
|
||||||
aux = m.mk_fresh_const(0, m.mk_bool_sort());
|
aux = m.mk_fresh_const(0, m.mk_bool_sort());
|
||||||
|
// if (aux->get_decl()->get_name() == "k!81740") IF_VERBOSE(0, verbose_stream() << mk_ismt2_pp(aux, m) << ": " << "v" << l.var() << "\n";);
|
||||||
if (mc)
|
if (mc)
|
||||||
mc->insert(l.var(), aux, true);
|
mc->insert(l.var(), aux, true);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue