package coq
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=3cbfc1e1a72b16d4744f5b64ede59586071e31d9c11c811a0372060727bfd9c3
doc/coq-core.tactics/Tactics/index.html
Module Tactics
Source
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_hyp :
check:bool ->
reorder:bool ->
EConstr.named_declaration ->
unit Proofview.tactic
val mutual_fix :
Names.Id.t ->
int ->
(Names.Id.t * int * EConstr.constr) list ->
int ->
unit Proofview.tactic
val mutual_cofix :
Names.Id.t ->
(Names.Id.t * EConstr.constr) list ->
int ->
unit Proofview.tactic
Introduction tactics.
val intro_move_avoid :
Names.Id.t option ->
Names.Id.Set.t ->
Names.Id.t Logic.move_location ->
unit Proofview.tactic
intro_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.tactic
val intros_using_then :
Names.Id.t list ->
(Names.Id.t list -> unit Proofview.tactic) ->
unit Proofview.tactic
auto_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.tactic
Apply 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.tactic
val 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_arg
Tell 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.tactic
val intro_patterns_bound_to :
evars_flag ->
int ->
Names.Id.t Logic.move_location ->
Tactypes.intro_patterns ->
unit Proofview.tactic
val intro_pattern_to :
evars_flag ->
Names.Id.t Logic.move_location ->
Tactypes.delayed_open_constr Tactypes.intro_pattern_expr ->
unit Proofview.tactic
Implements 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.constr
val reduct_in_hyp :
check:bool ->
reorder:bool ->
tactic_reduction ->
Locus.hyp_location ->
unit Proofview.tactic
val reduct_option :
check:bool ->
(tactic_reduction * Constr.cast_kind) ->
Locus.goal_location ->
unit Proofview.tactic
val reduct_in_concl :
check:bool ->
(tactic_reduction * Constr.cast_kind) ->
unit Proofview.tactic
val e_reduct_in_concl :
check:bool ->
(e_tactic_reduction * Constr.cast_kind) ->
unit Proofview.tactic
val change_in_concl :
check:bool ->
(Locus.occurrences * Pattern.constr_pattern) option ->
change_arg ->
unit Proofview.tactic
val change_in_hyp :
check:bool ->
(Locus.occurrences * Pattern.constr_pattern) option ->
change_arg ->
Locus.hyp_location ->
unit Proofview.tactic
val unfold_in_concl :
(Locus.occurrences * Tacred.evaluable_global_reference) list ->
unit Proofview.tactic
val unfold_in_hyp :
(Locus.occurrences * Tacred.evaluable_global_reference) list ->
Locus.hyp_location ->
unit Proofview.tactic
val unfold_option :
(Locus.occurrences * Tacred.evaluable_global_reference) list ->
Locus.goal_location ->
unit Proofview.tactic
val change :
check:bool ->
Pattern.constr_pattern option ->
change_arg ->
Locus.clause ->
unit Proofview.tactic
val pattern_option :
(Locus.occurrences * EConstr.constr) list ->
Locus.goal_location ->
unit Proofview.tactic
Modification of the local context.
val specialize :
EConstr.constr Tactypes.with_bindings ->
Tactypes.intro_pattern option ->
unit Proofview.tactic
Resolution tactics.
val apply_type :
typecheck:bool ->
EConstr.constr ->
EConstr.constr list ->
unit Proofview.tactic
val apply_with_bindings_gen :
advanced_flag ->
evars_flag ->
(clear_flag * EConstr.constr Tactypes.with_bindings CAst.t) list ->
unit Proofview.tactic
val apply_with_delayed_bindings_gen :
advanced_flag ->
evars_flag ->
(clear_flag * Tactypes.delayed_open_constr_with_bindings CAst.t) list ->
unit Proofview.tactic
val 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.tactic
val 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.tactic
Elimination 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.tactic
val general_elim_clause :
evars_flag ->
Unification.unify_flags ->
Names.Id.t option ->
Clenv.clausenv ->
eliminator ->
unit Proofview.tactic
val default_elim :
evars_flag ->
clear_flag ->
EConstr.constr Tactypes.with_bindings ->
unit Proofview.tactic
val elim :
evars_flag ->
clear_flag ->
EConstr.constr Tactypes.with_bindings ->
EConstr.constr Tactypes.with_bindings option ->
unit Proofview.tactic
val induction :
evars_flag ->
clear_flag ->
EConstr.constr ->
Tactypes.or_and_intro_pattern option ->
EConstr.constr Tactypes.with_bindings option ->
unit Proofview.tactic
Case analysis tactics.
val general_case_analysis :
evars_flag ->
clear_flag ->
EConstr.constr Tactypes.with_bindings ->
unit Proofview.tactic
val destruct :
evars_flag ->
clear_flag ->
EConstr.constr ->
Tactypes.or_and_intro_pattern option ->
EConstr.constr Tactypes.with_bindings option ->
unit Proofview.tactic
Generic 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.tactic
Eliminations giving the type instead of the proof.
Constructor tactics.
val constructor_tac :
evars_flag ->
int option ->
int ->
EConstr.constr Tactypes.bindings ->
unit Proofview.tactic
val left_with_bindings :
evars_flag ->
EConstr.constr Tactypes.bindings ->
unit Proofview.tactic
val right_with_bindings :
evars_flag ->
EConstr.constr Tactypes.bindings ->
unit Proofview.tactic
val split_with_bindings :
evars_flag ->
EConstr.constr Tactypes.bindings list ->
unit Proofview.tactic
val split_with_delayed_bindings :
evars_flag ->
EConstr.constr Tactypes.bindings Tactypes.delayed_open list ->
unit Proofview.tactic
Equality tactics.
Cut tactics.
val assert_as :
bool ->
Names.Id.t option ->
Tactypes.intro_pattern option ->
EConstr.constr ->
unit Proofview.tactic
Implements 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.tactic
val enough_by :
Names.Name.t ->
EConstr.types ->
unit Proofview.tactic ->
unit Proofview.tactic
Common 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.tactic
Implements 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.tactic
Common 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.tactic
Generalize tactics.
val generalize_gen :
(EConstr.constr Locus.with_occurrences * Names.Name.t) list ->
unit Proofview.tactic
val new_generalize_gen :
((Locus.occurrences * EConstr.constr) * Names.Name.t) list ->
unit Proofview.tactic
Other 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.tactic
val abstract_generalize :
?generalize_vars:bool ->
?force_dep:bool ->
Names.Id.t ->
unit Proofview.tactic
val general_rewrite_clause :
(bool ->
evars_flag ->
EConstr.constr Tactypes.with_bindings ->
Locus.clause ->
unit Proofview.tactic)
Hook.t
val subst_one :
(bool ->
Names.Id.t ->
(Names.Id.t * EConstr.constr * bool) ->
unit Proofview.tactic)
Hook.t
val 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) ->
unit
val with_set_strategy :
(Conv_oracle.level * Names.GlobRef.t list) list ->
'a Proofview.tactic ->
'a Proofview.tactic
Tactic 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