virtual expr visit_app(expr const & e) { buffer<expr> args; expr const & f = get_app_rev_args(e, args); if (is_metavar(f)) { if (auto p1 = m_subst.get_expr_assignment(mlocal_name(f))) { if (m_use_jst) save_jst(p1->second); expr new_app = apply_beta(p1->first, args.size(), args.data()); return visit(new_app); } } expr new_f = visit(f); buffer<expr> new_args; bool modified = !is_eqp(new_f, f); for (expr const & arg : args) { expr new_arg = visit(arg); if (!is_eqp(arg, new_arg)) modified = true; new_args.push_back(new_arg); } if (!modified) return e; else return mk_rev_app(new_f, new_args); }
expr normalize_app(expr const & e) { buffer<expr> args; expr f = get_app_rev_args(e, args); for (expr & a : args) a = normalize(a); return mk_rev_app(f, args); }
list<expr> goal::to_context() const { buffer<expr> locals; get_app_rev_args(m_meta, locals); return to_list(locals.begin(), locals.end()); }
name get_unused_name(name const & prefix, expr const & meta) { buffer<expr> locals; get_app_rev_args(meta, locals); return get_unused_name(prefix, locals); }