static void display_uninterp_sorts(std::ostream & out, model_core const & md) { ast_manager & m = md.get_manager(); unsigned sz = md.get_num_uninterpreted_sorts(); for (unsigned i = 0; i < sz; i++) { sort * s = md.get_uninterpreted_sort(i); out << "(define-sort " << mk_pp(s, m); ptr_vector<expr> const & univ = md.get_universe(s); ptr_vector<expr>::const_iterator it = univ.begin(); ptr_vector<expr>::const_iterator end = univ.end(); for (; it != end; ++it) { out << " " << mk_ismt2_pp(*it, m); } out << ")\n"; } }
static void pp_uninterp_sorts(std::ostream & out, ast_printer_context & ctx, model_core const & md, unsigned indent) { ast_manager & m = ctx.get_ast_manager(); ptr_buffer<format> f_conds; unsigned num = md.get_num_uninterpreted_sorts(); for (unsigned i = 0; i < num; i++) { sort * s = md.get_uninterpreted_sort(i); ptr_vector<expr> const & u = md.get_universe(s); std::ostringstream buffer; buffer << "universe for "; ctx.display(buffer, s, 13); buffer << ":\n"; pp_indent(buffer, TAB_SZ); ptr_vector<expr>::const_iterator it = u.begin(); ptr_vector<expr>::const_iterator end = u.end(); for (; it != end; ++it) { SASSERT(is_app(*it)); app * c = to_app(*it); pp_symbol(buffer, c->get_decl()->get_name()); buffer << " "; } buffer << "\n-----------"; std::string buffer_str = buffer.str(); unsigned len = static_cast<unsigned>(buffer_str.length()); pp_indent(out, indent); out << ";; "; for (unsigned i = 0; i < len; i++) { char c = buffer_str[i]; if (c == '\n') { out << "\n"; pp_indent(out, indent); out << ";; "; } else { out << c; } } out << "\n"; pp_indent(out, indent); out << ";; definitions for universe elements:\n"; it = u.begin(); for (; it != end; ++it) { app * c = to_app(*it); pp_indent(out, indent); out << "(declare-fun "; unsigned len = pp_symbol(out, c->get_decl()->get_name()); out << " () "; ctx.display(out, c->get_decl()->get_range(), indent + len + 16); out << ")\n"; } pp_indent(out, indent); out << ";; cardinality constraint:\n"; f_conds.reset(); format * var = mk_string(m, "x"); it = u.begin(); for (; it != end; ++it) { app * c = to_app(*it); symbol csym = c->get_decl()->get_name(); std::string cname; if (is_smt2_quoted_symbol(csym)) cname = mk_smt2_quoted_symbol(csym); else cname = csym.str(); format * c_args[2] = { var, mk_string(m, cname.c_str()) }; f_conds.push_back(mk_seq1<format**, f2f>(m, c_args, c_args+2, f2f(), "=")); } SASSERT(!f_conds.empty()); format * f_cond; if (f_conds.size() > 1) f_cond = mk_seq1(m, f_conds.begin(), f_conds.end(), f2f(), "or"); else f_cond = f_conds[0]; format_ref f_s(fm(m)); ctx.pp(s, f_s); format * f_args[2] = { mk_compose(m, mk_string(m, "((x "), mk_indent(m, 4, mk_compose(m, f_s.get(), mk_string(m, "))")))), f_cond }; format_ref f_card(fm(m)); f_card = mk_indent(m, indent, mk_seq1<format**, f2f>(m, f_args, f_args+2, f2f(), "forall")); pp_indent(out, indent); pp(out, f_card, m); out << "\n"; pp_indent(out, indent); out << ";; -----------\n"; } }