diff --git a/src/api/api_seq.cpp b/src/api/api_seq.cpp index 6b48360a3..19e298ee8 100644 --- a/src/api/api_seq.cpp +++ b/src/api/api_seq.cpp @@ -106,8 +106,8 @@ extern "C" { SET_ERROR_CODE(Z3_INVALID_ARG, "expression is not a string literal"); return ""; } - std::string result = str.encode(); - return mk_c(c)->mk_external_string(result); + std::string s = str.encode(); + return mk_c(c)->mk_external_string(s); Z3_CATCH_RETURN(""); } diff --git a/src/api/python/z3/z3.py b/src/api/python/z3/z3.py index ffd9c27a1..4e515b433 100644 --- a/src/api/python/z3/z3.py +++ b/src/api/python/z3/z3.py @@ -9914,6 +9914,8 @@ class SeqRef(ExprRef): def as_string(self): """Return a string representation of sequence expression.""" + if self.is_string_value(): + return Z3_get_string(self.ctx_ref(), self.as_ast()) return Z3_ast_to_string(self.ctx_ref(), self.as_ast()) diff --git a/src/ast/rewriter/seq_rewriter.cpp b/src/ast/rewriter/seq_rewriter.cpp index 25fc5c119..d46f234e2 100644 --- a/src/ast/rewriter/seq_rewriter.cpp +++ b/src/ast/rewriter/seq_rewriter.cpp @@ -386,7 +386,6 @@ eautomaton* re2automaton::seq2aut(expr* e) { br_status seq_rewriter::mk_app_core(func_decl * f, unsigned num_args, expr * const * args, expr_ref & result) { SASSERT(f->get_family_id() == get_fid()); - TRACE("seq", tout << f->get_name() << "\n";); br_status st = BR_FAILED; switch(f->get_decl_kind()) { diff --git a/src/smt/asserted_formulas.cpp b/src/smt/asserted_formulas.cpp index d364404da..164d36ae2 100644 --- a/src/smt/asserted_formulas.cpp +++ b/src/smt/asserted_formulas.cpp @@ -449,7 +449,7 @@ void asserted_formulas::propagate_values() { m_expr2depth.reset(); m_scoped_substitution.push(); unsigned prop = num_prop; - TRACE("propagate_values", tout << "before:\n"; display(tout);); + TRACE("propagate_values", display(tout << "before:\n");); unsigned i = m_qhead; unsigned sz = m_formulas.size(); for (; i < sz; i++) { @@ -482,15 +482,13 @@ unsigned asserted_formulas::propagate_values(unsigned i) { expr_ref new_n(m); proof_ref new_pr(m); m_rewriter(n, new_n, new_pr); + TRACE("propagate_values", tout << n << "\n" << new_n << "\n";); if (m.proofs_enabled()) { proof * pr = m_formulas[i].get_proof(); new_pr = m.mk_modus_ponens(pr, new_pr); } justified_expr j(m, new_n, new_pr); m_formulas[i] = j; - if (m_formulas[i].get_fml() != new_n) { - std::cout << "NOT updated\n"; - } if (m.is_false(j.get_fml())) { m_inconsistent = true; }