コード例 #1
0
ファイル: fun_info_tactics.cpp プロジェクト: avigad/lean
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;
}
コード例 #2
0
ファイル: revert_tactic.cpp プロジェクト: sakas--/lean
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;
}
コード例 #3
0
ファイル: fun_info_tactics.cpp プロジェクト: avigad/lean
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;
}
コード例 #4
0
ファイル: cases_tactic.cpp プロジェクト: avigad/lean
 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";);
コード例 #5
0
ファイル: fun_info_tactics.cpp プロジェクト: avigad/lean
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;
}
コード例 #6
0
ファイル: info_manager.cpp プロジェクト: fpvandoorn/lean
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);
}