Example #1
0
void initialize_revert_tactic() {
    auto fn = [](type_checker &, elaborate_fn const &, expr const & e, pos_info_provider const *) {
        buffer<name> ns;
        get_tactic_id_list_elements(app_arg(e), ns, "invalid 'reverts' tactic, list of identifiers expected");
        tactic r = revert_tactic(ns[0]);
        for (unsigned i = 1; i < ns.size(); i++)
            r = then(revert_tactic(ns[i]), r);
        return r;
    };
    register_tac(get_tactic_revert_name(), fn);
    register_tac(get_tactic_reverts_name(), fn);
}
Example #2
0
void initialize_intros_tactic() {
    register_tac(get_tactic_intro_name(),
                 [](type_checker &, elaborate_fn const &, expr const & e, pos_info_provider const *) {
                     name const & id = tactic_expr_to_id(app_arg(e), "invalid 'intro' tactic, argument must be an identifier");
                     return intros_tactic(to_list(id));
                 });
    register_tac(get_tactic_intros_name(),
                 [](type_checker &, elaborate_fn const &, expr const & e, pos_info_provider const *) {
                     buffer<name> ns;
                     get_tactic_id_list_elements(app_arg(e), ns, "invalid 'intros' tactic, arguments must be identifiers");
                     return intros_tactic(to_list(ns.begin(), ns.end()));
                 });
}
Example #3
0
void initialize_contradiction_tactic() {
    register_tac(name{"tactic", "contradiction"},
                 [](type_checker &, elaborate_fn const &, expr const &, pos_info_provider const *) {
                     list<name> empty;
                     return then(orelse(intros_tactic(empty), id_tactic()), contradiction_tactic());
                 });
}
void initialize_change_tactic() {
    register_tac(get_tactic_change_name(),
                 [](type_checker &, elaborate_fn const & fn, expr const & e, pos_info_provider const *) {
                     check_tactic_expr(app_arg(e), "invalid 'change' tactic, invalid argument");
                     return change_goal_tactic(fn, get_tactic_expr_expr(app_arg(e)));
                 });
}
Example #5
0
void initialize_clear_tactic() {
    register_tac(get_tactic_clear_name(),
                 [](type_checker &, elaborate_fn const &, expr const & e, pos_info_provider const *) {
                     name n = tactic_expr_to_id(app_arg(e), "invalid 'clear' tactic, argument must be an identifier");
                     return clear_tactic(n);
                 });
    register_tac(get_tactic_clears_name(),
                 [](type_checker &, elaborate_fn const &, expr const & e, pos_info_provider const *) {
                     buffer<name> ns;
                     get_tactic_id_list_elements(app_arg(e), ns, "invalid 'clears' tactic, list of identifiers expected");
                     tactic r = clear_tactic(ns.back());
                     ns.pop_back();
                     while (!ns.empty()) {
                         r = then(clear_tactic(ns.back()), r);
                         ns.pop_back();
                     }
                     return r;
                 });
}
Example #6
0
void initialize_check_expr_tactic() {
    register_tac(get_tactic_check_expr_name(),
                 [](type_checker &, elaborate_fn const & fn, expr const & e, pos_info_provider const * p) {
                     check_tactic_expr(app_arg(e), "invalid 'check_expr' tactic, invalid argument");
                     expr arg = get_tactic_expr_expr(app_arg(e));
                     if (p) {
                         if (auto it = p->get_pos_info(e))
                             return check_expr_tactic(fn, arg, std::string(p->get_file_name()), *it);
                     }
                     return check_expr_tactic(fn, arg, "<unknown file>", mk_pair(0, 0));
                 });
}
Example #7
0
void initialize_apply_tactic() {
    g_apply_class_instance = new name{"apply", "class_instance"};
    register_bool_option(*g_apply_class_instance, LEAN_DEFAULT_APPLY_CLASS_INSTANCE,
                         "(apply tactic) if true apply tactic uses class-instances "
                         "resolution for instance implicit arguments");

    register_tac(get_tactic_apply_name(),
                 [](type_checker &, elaborate_fn const & fn, expr const & e, pos_info_provider const *) {
                     check_tactic_expr(app_arg(e), "invalid 'apply' tactic, invalid argument");
                     return apply_tactic(fn, get_tactic_expr_expr(app_arg(e)));
                 });

    register_tac(get_tactic_eapply_name(),
                 [](type_checker &, elaborate_fn const & fn, expr const & e, pos_info_provider const *) {
                     check_tactic_expr(app_arg(e), "invalid 'eapply' tactic, invalid argument");
                     return eapply_tactic(fn, get_tactic_expr_expr(app_arg(e)));
                 });

    register_tac(get_tactic_fapply_name(),
                 [](type_checker &, elaborate_fn const & fn, expr const & e, pos_info_provider const *) {
                     check_tactic_expr(app_arg(e), "invalid 'fapply' tactic, invalid argument");
                     return fapply_tactic(fn, get_tactic_expr_expr(app_arg(e)));
                 });
}
Example #8
0
void initialize_whnf_tactic() {
    register_tac(name({"tactic", "whnf"}),
                 [](type_checker &, elaborate_fn const &, expr const &, pos_info_provider const *) {
                     return whnf_tactic();
                 });
}