diff --git a/src/smt/asserted_formulas.cpp b/src/smt/asserted_formulas.cpp index 7d0baf1e1bb..45ff5cb97fb 100644 --- a/src/smt/asserted_formulas.cpp +++ b/src/smt/asserted_formulas.cpp @@ -137,6 +137,8 @@ void asserted_formulas::set_eliminate_and(bool flag) { m_params.set_bool("expand_select_store", true); //m_params.set_bool("expand_nested_stores", true); m_params.set_bool("bv_sort_ac", true); + // seq theory solver keeps terms in normal form and has to interact with side-effect of rewriting + // m_params.set_bool("coalesce_chars", m_smt_params.m_string_solver != symbol("seq")); m_params.set_bool("som", true); m_rewriter.updt_params(m_params); flush_cache(); diff --git a/src/smt/theory_seq.cpp b/src/smt/theory_seq.cpp index 99dc19fe9d6..d9e2577d4d7 100644 --- a/src/smt/theory_seq.cpp +++ b/src/smt/theory_seq.cpp @@ -1049,6 +1049,9 @@ bool theory_seq::add_solution(expr* l, expr* r, dependency* deps) { } m_new_solution = true; m_rep.update(l, r, deps); + expr_ref sl(l, m); + m_rewrite(sl); + m_rep.update(sl, r, deps); enode* n1 = ensure_enode(l); enode* n2 = ensure_enode(r); TRACE("seq", tout << mk_bounded_pp(l, m, 2) << " ==> " << mk_bounded_pp(r, m, 2) << "\n"; display_deps(tout, deps);