diff --git a/src/ast/simplifiers/solve_context_eqs.cpp b/src/ast/simplifiers/solve_context_eqs.cpp index 37836db27..1ccab0f6c 100644 --- a/src/ast/simplifiers/solve_context_eqs.cpp +++ b/src/ast/simplifiers/solve_context_eqs.cpp @@ -154,10 +154,12 @@ namespace euf { return e1.var->get_id() < e2.var->get_id(); }); unsigned j = 0; expr* last_var = nullptr; + bool was_unsafe = false; for (auto const& eq : eqs) { SASSERT(!m.is_bool(eq.var)); + if (eq.var != last_var) { m_contains_v.reset(); @@ -167,8 +169,11 @@ namespace euf { mark_occurs(m_todo, eq.var, m_contains_v); SASSERT(m_todo.empty()); last_var = eq.var; - if (m_contains_v.is_marked(eq.term)) + was_unsafe = false; + if (m_contains_v.is_marked(eq.term)) { + was_unsafe = true; continue; + } // then mark occurrences for (unsigned i = 0; i < m_fmls.size(); ++i) @@ -178,7 +183,9 @@ namespace euf { } else if (m_contains_v.is_marked(eq.term)) continue; - + else if (was_unsafe) + continue; + // subject to occurrences, check if equality is safe if (is_safe_eq(eq.orig)) eqs[j++] = eq; diff --git a/src/ast/simplifiers/solve_eqs.cpp b/src/ast/simplifiers/solve_eqs.cpp index 18928dca8..0b6f12160 100644 --- a/src/ast/simplifiers/solve_eqs.cpp +++ b/src/ast/simplifiers/solve_eqs.cpp @@ -197,7 +197,7 @@ namespace euf { if (!m.inc()) return; - if (m_config.m_context_solve && false) { + if (m_config.m_context_solve) { old_fmls.reset(); m_subst_ids.reset(); eqs.reset();