TacticsMain tactics defined in ML. This file is huge and should probably be split in more reasonable units at some point. Because of its size and age, the implementation features various styles and stages of the proof engine. This has to be uniformized someday.
val is_quantified_hypothesis : Names.Id.t -> Proofview.Goal.t -> boolval introduction : Names.Id.t -> unit Proofview.tacticval convert_concl : cast:bool -> check:bool -> EConstr.types -> Constr.cast_kind -> unit Proofview.tacticval convert_hyp : check:bool -> reorder:bool -> EConstr.named_declaration -> unit Proofview.tacticval mutual_fix : Names.Id.t -> int -> (Names.Id.t * int * EConstr.constr) list -> int -> unit Proofview.tacticval fix : Names.Id.t -> int -> unit Proofview.tacticval mutual_cofix : Names.Id.t -> (Names.Id.t * EConstr.constr) list -> int -> unit Proofview.tacticval cofix : Names.Id.t -> unit Proofview.tacticval convert : EConstr.constr -> EConstr.constr -> unit Proofview.tacticval convert_leq : EConstr.constr -> EConstr.constr -> unit Proofview.tacticval fresh_id_in_env : Names.Id.Set.t -> Names.Id.t -> Environ.env -> Names.Id.tval find_intro_names : Environ.env -> Evd.evar_map -> EConstr.rel_context -> Names.Id.t listval intro : unit Proofview.tacticval introf : unit Proofview.tacticval intro_move : Names.Id.t option -> Names.Id.t Logic.move_location -> unit Proofview.tacticval intro_move_avoid : Names.Id.t option -> Names.Id.Set.t -> Names.Id.t Logic.move_location -> unit Proofview.tacticval intros_move : (Names.Id.t * Names.Id.t Logic.move_location) list -> unit Proofview.tacticval intro_avoiding : Names.Id.Set.t -> unit Proofview.tacticintro_avoiding idl acts as intro but prevents the new Id.t to belong to idl
val intro_replacing : Names.Id.t -> unit Proofview.tacticval intro_using : Names.Id.t -> unit Proofview.tacticval intro_using_then : Names.Id.t -> (Names.Id.t -> unit Proofview.tactic) -> unit Proofview.tacticval intro_mustbe_force : Names.Id.t -> unit Proofview.tacticval intros_mustbe_force : Names.Id.t list -> unit Proofview.tacticval intro_then : (Names.Id.t -> unit Proofview.tactic) -> unit Proofview.tacticval intros_using : Names.Id.t list -> unit Proofview.tacticval intros_using_then : Names.Id.t list -> (Names.Id.t list -> unit Proofview.tactic) -> unit Proofview.tacticval intros_replacing : Names.Id.t list -> unit Proofview.tacticval intros_possibly_replacing : Names.Id.t list -> unit Proofview.tacticval auto_intros_tac : Names.Name.t list -> unit Proofview.tacticauto_intros_tac names handles Automatic Introduction of binders
val intros : unit Proofview.tacticval intros_until : Tactypes.quantified_hypothesis -> unit Proofview.tacticval intros_clearing : bool list -> unit Proofview.tacticAssuming a tactic tac depending on an hypothesis Id.t, try_intros_until tac arg first assumes that arg denotes a quantified hypothesis (denoted by name or by index) and try to introduce it in context before to apply tac, otherwise assume the hypothesis is already in context and directly apply tac
val try_intros_until : (Names.Id.t -> unit Proofview.tactic) -> Tactypes.quantified_hypothesis -> unit Proofview.tacticApply a tactic on a quantified hypothesis, an hypothesis in context or a term with bindings
type 'a core_destruction_arg = | ElimOnConstr of 'a |
| ElimOnIdent of Names.lident |
| ElimOnAnonHyp of int |
type 'a destruction_arg = clear_flag * 'a core_destruction_argval onInductionArg : (clear_flag -> EConstr.constr Tactypes.with_bindings -> unit Proofview.tactic) -> EConstr.constr Tactypes.with_bindings destruction_arg -> unit Proofview.tacticval force_destruction_arg : evars_flag -> Environ.env -> Evd.evar_map -> Tactypes.delayed_open_constr_with_bindings destruction_arg -> Evd.evar_map * EConstr.constr Tactypes.with_bindings destruction_argval finish_evar_resolution : ?flags:Pretyping.inference_flags -> Environ.env -> Evd.evar_map -> (Evd.evar_map option * EConstr.constr) -> Evd.evar_map * EConstr.constrTell if a used hypothesis should be cleared by default or not
val intro_patterns : evars_flag -> Tactypes.intro_patterns -> unit Proofview.tacticval intro_patterns_to : evars_flag -> Names.Id.t Logic.move_location -> Tactypes.intro_patterns -> unit Proofview.tacticval intro_patterns_bound_to : evars_flag -> int -> Names.Id.t Logic.move_location -> Tactypes.intro_patterns -> unit Proofview.tacticval intro_pattern_to : evars_flag -> Names.Id.t Logic.move_location -> Tactypes.delayed_open_constr Tactypes.intro_pattern_expr -> unit Proofview.tacticval intros_patterns : evars_flag -> Tactypes.intro_patterns -> unit Proofview.tacticImplements user-level "intros", with standing for "**"
val assumption : unit Proofview.tacticval exact_no_check : EConstr.constr -> unit Proofview.tacticval vm_cast_no_check : EConstr.constr -> unit Proofview.tacticval native_cast_no_check : EConstr.constr -> unit Proofview.tacticval exact_check : EConstr.constr -> unit Proofview.tacticval exact_proof : Constrexpr.constr_expr -> unit Proofview.tactictype tactic_reduction = Reductionops.reduction_functiontype e_tactic_reduction = Reductionops.e_reduction_functiontype change_arg = Ltac_pretype.patvar_map -> Environ.env -> Evd.evar_map -> Evd.evar_map * EConstr.constrval make_change_arg : EConstr.constr -> change_argval reduct_in_hyp : check:bool -> reorder:bool -> tactic_reduction -> Locus.hyp_location -> unit Proofview.tacticval reduct_option : check:bool -> (tactic_reduction * Constr.cast_kind) -> Locus.goal_location -> unit Proofview.tacticval reduct_in_concl : cast:bool -> check:bool -> (tactic_reduction * Constr.cast_kind) -> unit Proofview.tacticval e_reduct_in_concl : cast:bool -> check:bool -> (e_tactic_reduction * Constr.cast_kind) -> unit Proofview.tacticval change_in_concl : check:bool -> (Locus.occurrences * Pattern.constr_pattern) option -> change_arg -> unit Proofview.tacticval change_concl : EConstr.constr -> unit Proofview.tacticval change_in_hyp : check:bool -> (Locus.occurrences * Pattern.constr_pattern) option -> change_arg -> Locus.hyp_location -> unit Proofview.tacticval red_in_concl : unit Proofview.tacticval red_in_hyp : Locus.hyp_location -> unit Proofview.tacticval red_option : Locus.goal_location -> unit Proofview.tacticval hnf_in_concl : unit Proofview.tacticval hnf_in_hyp : Locus.hyp_location -> unit Proofview.tacticval hnf_option : Locus.goal_location -> unit Proofview.tacticval simpl_in_concl : unit Proofview.tacticval simpl_in_hyp : Locus.hyp_location -> unit Proofview.tacticval simpl_option : Locus.goal_location -> unit Proofview.tacticval normalise_in_concl : unit Proofview.tacticval normalise_in_hyp : Locus.hyp_location -> unit Proofview.tacticval normalise_option : Locus.goal_location -> unit Proofview.tacticval normalise_vm_in_concl : unit Proofview.tacticval unfold_in_concl : (Locus.occurrences * Evaluable.t) list -> unit Proofview.tacticval unfold_in_hyp : (Locus.occurrences * Evaluable.t) list -> Locus.hyp_location -> unit Proofview.tacticval unfold_option : (Locus.occurrences * Evaluable.t) list -> Locus.goal_location -> unit Proofview.tacticval change : check:bool -> Pattern.constr_pattern option -> change_arg -> Locus.clause -> unit Proofview.tacticval pattern_option : (Locus.occurrences * EConstr.constr) list -> Locus.goal_location -> unit Proofview.tacticval reduce : Redexpr.red_expr -> Locus.clause -> unit Proofview.tacticval unfold_constr : Names.GlobRef.t -> unit Proofview.tacticval clear : Names.Id.t list -> unit Proofview.tacticval clear_body : Names.Id.t list -> unit Proofview.tacticval unfold_body : Names.Id.t -> unit Proofview.tacticval keep : Names.Id.t list -> unit Proofview.tacticval apply_clear_request : clear_flag -> bool -> Names.Id.t option -> unit Proofview.tacticval specialize : EConstr.constr Tactypes.with_bindings -> Tactypes.intro_pattern option -> unit Proofview.tacticval move_hyp : Names.Id.t -> Names.Id.t Logic.move_location -> unit Proofview.tacticval rename_hyp : (Names.Id.t * Names.Id.t) list -> unit Proofview.tacticval apply_type : typecheck:bool -> EConstr.constr -> EConstr.constr list -> unit Proofview.tacticval apply : EConstr.constr -> unit Proofview.tacticval eapply : ?with_classes:bool -> EConstr.constr -> unit Proofview.tacticval apply_with_bindings_gen : ?with_classes:bool -> advanced_flag -> evars_flag -> (clear_flag * EConstr.constr Tactypes.with_bindings CAst.t) list -> unit Proofview.tacticval apply_with_delayed_bindings_gen : advanced_flag -> evars_flag -> (clear_flag * EConstr.constr Tactypes.with_bindings Proofview.tactic CAst.t) list -> unit Proofview.tacticval apply_with_bindings : EConstr.constr Tactypes.with_bindings -> unit Proofview.tacticval eapply_with_bindings : ?with_classes:bool -> EConstr.constr Tactypes.with_bindings -> unit Proofview.tacticval cut_and_apply : EConstr.constr -> unit Proofview.tacticval apply_in : advanced_flag -> evars_flag -> Names.Id.t -> (clear_flag * EConstr.constr Tactypes.with_bindings CAst.t) list -> Tactypes.intro_pattern option -> unit Proofview.tacticval apply_delayed_in : advanced_flag -> evars_flag -> Names.Id.t -> (clear_flag * EConstr.constr Tactypes.with_bindings Proofview.tactic CAst.t) list -> Tactypes.intro_pattern option -> unit Proofview.tactic -> unit Proofview.tacticval general_elim_clause : evars_flag -> Unification.unify_flags -> Names.Id.t option -> ((Constr.metavariable list * Unification.Meta.t) * EConstr.t * EConstr.types) -> Names.Constant.t -> unit Proofview.tacticval default_elim : evars_flag -> clear_flag -> EConstr.constr Tactypes.with_bindings -> unit Proofview.tacticval simplest_elim : EConstr.constr -> unit Proofview.tacticval elim : evars_flag -> clear_flag -> EConstr.constr Tactypes.with_bindings -> EConstr.constr Tactypes.with_bindings option -> unit Proofview.tacticval general_case_analysis : evars_flag -> clear_flag -> EConstr.constr Tactypes.with_bindings -> unit Proofview.tacticval simplest_case : EConstr.constr -> unit Proofview.tacticval exfalso : unit Proofview.tacticval constructor_tac : evars_flag -> int option -> int -> EConstr.constr Tactypes.bindings -> unit Proofview.tacticval any_constructor : evars_flag -> unit Proofview.tactic option -> unit Proofview.tacticval one_constructor : int -> EConstr.constr Tactypes.bindings -> unit Proofview.tacticval left : EConstr.constr Tactypes.bindings -> unit Proofview.tacticval right : EConstr.constr Tactypes.bindings -> unit Proofview.tacticval split : EConstr.constr Tactypes.bindings -> unit Proofview.tacticval left_with_bindings : evars_flag -> EConstr.constr Tactypes.bindings -> unit Proofview.tacticval right_with_bindings : evars_flag -> EConstr.constr Tactypes.bindings -> unit Proofview.tacticval split_with_bindings : evars_flag -> EConstr.constr Tactypes.bindings list -> unit Proofview.tacticval split_with_delayed_bindings : evars_flag -> EConstr.constr Tactypes.bindings Tactypes.delayed_open list -> unit Proofview.tacticval simplest_left : unit Proofview.tacticval simplest_right : unit Proofview.tacticval simplest_split : unit Proofview.tacticval setoid_reflexivity : unit Proofview.tactic Hook.tval reflexivity_red : bool -> unit Proofview.tacticval reflexivity : unit Proofview.tacticval intros_reflexivity : unit Proofview.tacticval setoid_symmetry : unit Proofview.tactic Hook.tval symmetry_red : bool -> unit Proofview.tacticval symmetry : unit Proofview.tacticval setoid_symmetry_in : (Names.Id.t -> unit Proofview.tactic) Hook.tval intros_symmetry : Locus.clause -> unit Proofview.tacticval setoid_transitivity : (EConstr.constr option -> unit Proofview.tactic) Hook.tval transitivity_red : bool -> EConstr.constr option -> unit Proofview.tacticval transitivity : EConstr.constr -> unit Proofview.tacticval etransitivity : unit Proofview.tacticval intros_transitivity : EConstr.constr option -> unit Proofview.tacticval assert_before_replacing : Names.Id.t -> EConstr.types -> unit Proofview.tacticval assert_after_replacing : Names.Id.t -> EConstr.types -> unit Proofview.tacticval assert_before : Names.Name.t -> EConstr.types -> unit Proofview.tacticval assert_after : Names.Name.t -> EConstr.types -> unit Proofview.tacticImplements the tactics assert, enough and pose proof; note that "by" applies on the first goal for both assert and enough
val assert_by : Names.Name.t -> EConstr.types -> unit Proofview.tactic -> unit Proofview.tacticval enough_by : Names.Name.t -> EConstr.types -> unit Proofview.tactic -> unit Proofview.tacticval pose_proof : Names.Name.t -> EConstr.constr -> unit Proofview.tacticCommon entry point for user-level "assert", "enough" and "pose proof"
val forward : bool -> unit Proofview.tactic option option -> Tactypes.intro_pattern option -> EConstr.constr -> unit Proofview.tacticImplements the tactic cut, actually a modus ponens rule
val cut : EConstr.types -> unit Proofview.tacticval pose_tac : Names.Name.t -> EConstr.constr -> unit Proofview.tacticval letin_tac : (bool * Tactypes.intro_pattern_naming) option -> Names.Name.t -> EConstr.constr -> EConstr.types option -> Locus.clause -> unit Proofview.tacticCommon entry point for user-level "set", "pose" and "remember"
val letin_pat_tac : evars_flag -> (bool * Tactypes.intro_pattern_naming) option -> Names.Name.t -> (Evd.evar_map option * EConstr.constr) -> Locus.clause -> unit Proofview.tacticval constr_eq : strict:bool -> EConstr.constr -> EConstr.constr -> unit Proofview.tacticSyntactic equality up to universes. With strict the universe constraints must be already true to succeed, without strict they are added to the evar map.
val unify : ?state:TransparentState.t -> EConstr.constr -> EConstr.constr -> unit Proofview.tacticval evarconv_unify : ?state:TransparentState.t -> ?with_ho:bool -> EConstr.constr -> EConstr.constr -> unit Proofview.tacticval specialize_eqs : Names.Id.t -> unit Proofview.tacticval general_rewrite_clause : (bool -> evars_flag -> EConstr.constr Tactypes.with_bindings -> Locus.clause -> unit Proofview.tactic) Hook.tval subst_one : (bool -> Names.Id.t -> (Names.Id.t * EConstr.constr * bool) -> unit Proofview.tactic) Hook.tval declare_intro_decomp_eq : ((int -> unit Proofview.tactic) -> (Rocqlib.rocq_eq_data * EConstr.types * (EConstr.types * EConstr.constr * EConstr.constr)) -> (EConstr.constr * EConstr.types) -> unit Proofview.tactic) -> unitval with_set_strategy : (Conv_oracle.level * Names.GlobRef.t list) list -> 'a Proofview.tactic -> 'a Proofview.tacticTactic analogous to the Strategy vernacular, but only applied locally to the tactic argument
module Simple : sig ... endSimplified version of some of the above tactics
val refine : typecheck:bool -> (Evd.evar_map -> Evd.evar_map * EConstr.constr) -> unit Proofview.tacticrefine ~typecheck c is Refine.refine ~typecheck c followed by beta-iota-reduction of the conclusion.
val reduce_after_refine : unit Proofview.tacticThe reducing tactic called after refine.
module Internal : sig ... end