diff --git a/src/sat/smt/euf_internalize.cpp b/src/sat/smt/euf_internalize.cpp index 5576cb8d2..f44967885 100644 --- a/src/sat/smt/euf_internalize.cpp +++ b/src/sat/smt/euf_internalize.cpp @@ -34,7 +34,8 @@ namespace euf { sat::literal solver::mk_literal(expr* e) { expr_ref _e(e, m); - return internalize(e, false, false, m_is_redundant); + bool is_not = m.is_not(e, e); + return internalize(e, is_not, false, m_is_redundant); } sat::literal solver::internalize(expr* e, bool sign, bool root, bool redundant) { @@ -129,8 +130,7 @@ namespace euf { sat::literal solver::attach_lit(literal lit, expr* e) { sat::bool_var v = lit.var(); s().set_external(v); - s().set_eliminated(v, false); - + s().set_eliminated(v, false); if (lit.sign()) { v = si.add_bool_var(e); diff --git a/src/sat/smt/euf_solver.cpp b/src/sat/smt/euf_solver.cpp index cbdc44743..9c652ac10 100644 --- a/src/sat/smt/euf_solver.cpp +++ b/src/sat/smt/euf_solver.cpp @@ -236,7 +236,7 @@ namespace euf { sat::bool_var v = get_egraph().explain_diseq(m_explain, a, b); SASSERT(v == sat::null_bool_var || s().value(v) == l_false); if (v != sat::null_bool_var) - m_explain.push_back(to_ptr(sat::literal(v, false))); + m_explain.push_back(to_ptr(sat::literal(v, true))); } bool solver::propagate(enode* a, enode* b, ext_justification_idx idx) { @@ -286,13 +286,14 @@ namespace euf { void solver::asserted(literal l) { expr* e = m_bool_var2expr.get(l.var(), nullptr); - TRACE("euf", tout << "asserted: " << l << "@" << s().scope_lvl() << " := " << mk_bounded_pp(e, m) << "\n";); + TRACE("euf", tout << "asserted: " << l << "@" << s().scope_lvl() << " := " << mk_bounded_pp(e, m) << "\n";); if (!e) return; + euf::enode* n = m_egraph.find(e); if (!n) return; - bool sign = l.sign(); + bool sign = l.sign(); m_egraph.set_value(n, sign ? l_false : l_true); for (auto th : enode_th_vars(n)) m_id2solver[th.get_id()]->asserted(l); diff --git a/src/sat/tactic/goal2sat.cpp b/src/sat/tactic/goal2sat.cpp index c809ba0f8..a5c60d3db 100644 --- a/src/sat/tactic/goal2sat.cpp +++ b/src/sat/tactic/goal2sat.cpp @@ -290,14 +290,12 @@ struct goal2sat::imp : public sat::sat_internalizer { if (v == sat::null_bool_var) { if (m.is_true(t)) { sat::literal tt = sat::literal(add_var(false, m.mk_true()), false); - mk_clause(tt); - add_dual_root(1, &tt); + mk_root_clause(tt); l = sign ? ~tt : tt; } else if (m.is_false(t)) { sat::literal tt = sat::literal(add_var(false, m.mk_false()), true); - mk_clause(tt); - add_dual_root(1, &tt); + mk_root_clause(tt); l = sign ? tt : ~tt; } else if (m_euf) {