mirror of
https://github.com/Z3Prover/z3
synced 2025-04-08 18:31:49 +00:00
#5429 again
This commit is contained in:
parent
50f5cafb50
commit
924ea6ab31
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in a new issue