vm_obj tactic_get_spec_prefix_size(vm_obj const & fn, vm_obj const & n, vm_obj const & m, vm_obj const & s) { TRY; type_context ctx = mk_type_context_for(s, m); return tactic::mk_success(mk_vm_nat(get_specialization_prefix_size(ctx, to_expr(fn), force_to_unsigned(n, 0))), tactic::to_state(s)); CATCH; }
expr revert(environment const & env, options const & opts, metavar_context & mctx, expr const & mvar, buffer<expr> & locals) { optional<metavar_decl> g = mctx.get_metavar_decl(mvar); lean_assert(g); type_context ctx = mk_type_context_for(env, opts, mctx, g->get_context(), transparency_mode::All); expr val = ctx.revert(locals, mvar); expr new_g = get_app_fn(val); mctx = ctx.mctx(); return new_g; }
vm_obj tactic_get_subsingleton_info(vm_obj const & fn, vm_obj const & n, vm_obj const & m, vm_obj const & s) { TRY; type_context ctx = mk_type_context_for(s, m); if (is_none(n)) { return mk_result(get_subsingleton_info(ctx, to_expr(fn)), s); } else { return mk_result(get_subsingleton_info(ctx, to_expr(fn), force_to_unsigned(get_some_value(n), 0)), s); } CATCH; }
bool is_cases_applicable(expr const & mvar, expr const & H) { type_context ctx = mk_type_context_for(mvar); expr t = whnf_inductive(ctx, ctx.infer(H)); buffer<expr> args; expr const & fn = get_app_args(t, args); if (!is_constant(fn)) return false; if (!is_ginductive(m_env, const_name(fn))) return false; if (!m_env.find(name{const_name(fn), "cases_on"}) || !m_env.find(get_eq_name())) return false; if (!m_env.find(get_heq_name())) return false; init_inductive_info(const_name(fn)); if (args.size() != m_nindices + m_nparams) return false; lean_cases_trace(mvar, tout() << "inductive type: " << const_name(fn) << ", num. params: " << m_nparams << ", num. indices: " << m_nindices << "\n";);
vm_obj tactic_get_spec_subsingleton_info(vm_obj const & app, vm_obj const & m, vm_obj const & s) { TRY; type_context ctx = mk_type_context_for(s, m); return mk_result(get_specialized_subsingleton_info(ctx, to_expr(app)), s); CATCH; }
void hole_info_data::report(io_state_stream const & ios, json & record) const { type_context_old ctx = mk_type_context_for(m_state); interactive_report_type(ios.get_environment(), ios.get_options(), ctx.infer(m_state.main()), record); }