3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-08 18:31:49 +00:00
This commit is contained in:
Nikolaj Bjorner 2021-08-01 12:00:22 -07:00
parent 50f5cafb50
commit 924ea6ab31
3 changed files with 9 additions and 10 deletions

View file

@ -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);

View file

@ -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);

View file

@ -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) {