package coq
- General functions.
- Primitive tactics.
- Introduction tactics.
- Introduction tactics with eliminations.
- Exact tactics.
- Reduction tactics.
- Modification of the local context.
- Resolution tactics.
- Elimination tactics.
- Case analysis tactics.
- Generic case analysis / induction tactics.
- Eliminations giving the type instead of the proof.
- Constructor tactics.
- Equality tactics.
- Cut tactics.
- Tactics for adding local definitions.
- Generalize tactics.
- Other tactics.
- Simple form of basic tactics.
- Tacticals defined directly in term of Proofview
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha256=583471c8ed4f227cb374ee8a13a769c46579313d407db67a82d202ee48300e4b
doc/coq-core.tactics/Tactics/index.html
Module TacticsSource
Main 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.
General functions.
Primitive tactics.
val 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 mutual_cofix :
Names.Id.t ->
(Names.Id.t * EConstr.constr) list ->
int ->
unit Proofview.tacticIntroduction tactics.
val intro_move_avoid :
Names.Id.t option ->
Names.Id.Set.t ->
Names.Id.t Logic.move_location ->
unit Proofview.tacticintro_avoiding idl acts as intro but prevents the new Id.t to belong to idl
val intro_using_then :
Names.Id.t ->
(Names.Id.t -> unit Proofview.tactic) ->
unit Proofview.tacticval intros_using_then :
Names.Id.t list ->
(Names.Id.t list -> unit Proofview.tactic) ->
unit Proofview.tacticauto_intros_tac names handles Automatic Introduction of binders
Assuming 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
val 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 * EConstr.constr) ->
Evd.evar_map * EConstr.constrTell if a used hypothesis should be cleared by default or not
Introduction tactics with eliminations.
val 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.tacticImplements user-level "intros", with standing for "**"
Exact tactics.
Reduction tactics.
type change_arg =
Ltac_pretype.patvar_map ->
Environ.env ->
Evd.evar_map ->
Evd.evar_map * EConstr.constrval 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_in_hyp :
check:bool ->
(Locus.occurrences * Pattern.constr_pattern) option ->
change_arg ->
Locus.hyp_location ->
unit Proofview.tacticval unfold_in_concl :
(Locus.occurrences * Tacred.evaluable_global_reference) list ->
unit Proofview.tacticval unfold_in_hyp :
(Locus.occurrences * Tacred.evaluable_global_reference) list ->
Locus.hyp_location ->
unit Proofview.tacticval unfold_option :
(Locus.occurrences * Tacred.evaluable_global_reference) 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.tacticModification of the local context.
val specialize :
EConstr.constr Tactypes.with_bindings ->
Tactypes.intro_pattern option ->
unit Proofview.tacticResolution tactics.
val apply_type :
typecheck:bool ->
EConstr.constr ->
EConstr.constr list ->
unit Proofview.tacticval apply_with_bindings_gen :
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 * Tactypes.delayed_open_constr_with_bindings CAst.t) list ->
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 * Tactypes.delayed_open_constr_with_bindings CAst.t) list ->
Tactypes.intro_pattern option ->
unit Proofview.tactic ->
unit Proofview.tacticElimination tactics.
type elim_scheme = {elimt : EConstr.types;indref : Names.GlobRef.t option;params : EConstr.rel_context;(*(prm1,tprm1);(prm2,tprm2)...(prmp,tprmp)
*)nparams : int;(*number of parameters
*)predicates : EConstr.rel_context;(*(Qq, (Tq_1 -> Tq_2 ->...-> Tq_nq)), (Q1,...)
*)npredicates : int;(*Number of predicates
*)branches : EConstr.rel_context;(*branchr,...,branch1
*)nbranches : int;(*Number of branches
*)args : EConstr.rel_context;(*(xni, Ti_ni) ... (x1, Ti_1)
*)nargs : int;(*number of arguments
*)indarg : EConstr.rel_declaration option;(*Some (H,I prm1..prmp x1...xni) if HI is in premisses, None otherwise
*)concl : EConstr.types;(*Qi x1...xni HI (f...), HI and (f...) are optional and mutually exclusive
*)indarg_in_concl : bool;(*true if HI appears at the end of conclusion
*)farg_in_concl : bool;(*true if (f...) appears at the end of conclusion
*)
}rel_contexts and rel_declaration actually contain triples, and lists are actually in reverse order to fit compose_prod.
type eliminator = | ElimTerm of EConstr.constr| ElimClause of EConstr.constr Tactypes.with_bindings
val general_elim :
evars_flag ->
clear_flag ->
EConstr.constr Tactypes.with_bindings ->
eliminator ->
unit Proofview.tacticval general_elim_clause :
evars_flag ->
Unification.unify_flags ->
Names.Id.t option ->
(EConstr.t * EConstr.t) ->
eliminator ->
unit Proofview.tacticval default_elim :
evars_flag ->
clear_flag ->
EConstr.constr Tactypes.with_bindings ->
unit Proofview.tacticval elim :
evars_flag ->
clear_flag ->
EConstr.constr Tactypes.with_bindings ->
EConstr.constr Tactypes.with_bindings option ->
unit Proofview.tacticval induction :
evars_flag ->
clear_flag ->
EConstr.constr ->
Tactypes.or_and_intro_pattern option ->
EConstr.constr Tactypes.with_bindings option ->
unit Proofview.tacticCase analysis tactics.
val general_case_analysis :
evars_flag ->
clear_flag ->
EConstr.constr Tactypes.with_bindings ->
unit Proofview.tacticval destruct :
evars_flag ->
clear_flag ->
EConstr.constr ->
Tactypes.or_and_intro_pattern option ->
EConstr.constr Tactypes.with_bindings option ->
unit Proofview.tacticGeneric case analysis / induction tactics.
Implements user-level "destruct" and "induction"
val induction_destruct :
rec_flag ->
evars_flag ->
((Tactypes.delayed_open_constr_with_bindings destruction_arg
* (Tactypes.intro_pattern_naming option
* Tactypes.or_and_intro_pattern option)
* Locus.clause option)
list
* EConstr.constr Tactypes.with_bindings option) ->
unit Proofview.tacticEliminations giving the type instead of the proof.
Constructor tactics.
val constructor_tac :
evars_flag ->
int option ->
int ->
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.tacticEquality tactics.
Cut tactics.
val assert_as :
bool ->
Names.Id.t option ->
Tactypes.intro_pattern option ->
EConstr.constr ->
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.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
Tactics for adding local definitions.
val 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 * EConstr.constr) ->
Locus.clause ->
unit Proofview.tacticGeneralize tactics.
val generalize_gen :
(EConstr.constr Locus.with_occurrences * Names.Name.t) list ->
unit Proofview.tacticval new_generalize_gen :
((Locus.occurrences * EConstr.constr) * Names.Name.t) list ->
unit Proofview.tacticOther tactics.
Syntactic 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 abstract_generalize :
?generalize_vars:bool ->
?force_dep:bool ->
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) ->
(Coqlib.coq_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
Simple form of basic tactics.
Tacticals defined directly in term of Proofview
- General functions.
- Primitive tactics.
- Introduction tactics.
- Introduction tactics with eliminations.
- Exact tactics.
- Reduction tactics.
- Modification of the local context.
- Resolution tactics.
- Elimination tactics.
- Case analysis tactics.
- Generic case analysis / induction tactics.
- Eliminations giving the type instead of the proof.
- Constructor tactics.
- Equality tactics.
- Cut tactics.
- Tactics for adding local definitions.
- Generalize tactics.
- Other tactics.
- Simple form of basic tactics.
- Tacticals defined directly in term of Proofview