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); }
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())); }); }
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; }); }