Module Hints
General functions.
val decompose_app_bound : Evd.evar_map -> EConstr.constr -> Names.GlobRef.t * EConstr.constr array
val secvars_of_hyps : ('c, 't) Context.Named.pt -> Names.Id.Pred.tval empty_hint_info : 'a Typeclasses.hint_info_gen
type hint_info_expr= Constrexpr.constr_pattern_expr Typeclasses.hint_info_gentype 'a hint_ast=|Res_pf of 'a|ERes_pf of 'a|Give_exact of 'a|Res_pf_THEN_trivial_fail of 'a|Unfold_nth of Names.evaluable_global_reference|Extern of Genarg.glob_generic_argumenttype hinttype raw_hint= EConstr.constr * EConstr.types * Univ.ContextSet.ttype 'a hints_path_atom_gen=|PathHints of 'a list|PathAnytype hints_path_atom= Names.GlobRef.t hints_path_atom_gentype hint_db_name= stringtype 'a with_metadata= private{pri : int;A number lower is higher priority
poly : bool;Is the hint polymorpic and hence should be refreshed at each application
pat : Pattern.constr_pattern option;A pattern for the concl of the Goal
name : hints_path_atom;A potential name to refer to the hint
db : string option;The database from which the hint comes
secvars : Names.Id.Pred.t;The set of section variables the hint depends on
code : 'a;the tactic to apply when the concl matches pat
}type full_hint= hint with_metadatatype search_entry
type hint_entrytype reference_or_constr=|HintsReference of Libnames.qualid|HintsConstr of Constrexpr.constr_exprtype hint_mode=|ModeInput|ModeNoHeadEvar|ModeOutputtype 'a hints_transparency_target=|HintsVariables|HintsConstants|HintsReferences of 'a listtype hints_expr=|HintsResolve of (hint_info_expr * bool * reference_or_constr) list|HintsResolveIFF of bool * Libnames.qualid list * int option|HintsImmediate of reference_or_constr list|HintsUnfold of Libnames.qualid list|HintsTransparency of Libnames.qualid hints_transparency_target * bool|HintsMode of Libnames.qualid * hint_mode list|HintsConstructors of Libnames.qualid list|HintsExtern of int * Constrexpr.constr_expr option * Genarg.raw_generic_argumenttype 'a hints_path_gen=|PathAtom of 'a hints_path_atom_gen|PathStar of 'a hints_path_gen|PathSeq of 'a hints_path_gen * 'a hints_path_gen|PathOr of 'a hints_path_gen * 'a hints_path_gen|PathEmpty|PathEpsilontype pre_hints_path= Libnames.qualid hints_path_gentype hints_path= Names.GlobRef.t hints_path_gen
val normalize_path : hints_path -> hints_pathval path_matches : hints_path -> hints_path_atom list -> boolval path_derivate : hints_path -> hints_path_atom -> hints_pathval pp_hints_path_gen : ('a -> Pp.t) -> 'a hints_path_gen -> Pp.tval pp_hints_path_atom : ('a -> Pp.t) -> 'a hints_path_atom_gen -> Pp.tval pp_hints_path : hints_path -> Pp.tval pp_hint_mode : hint_mode -> Pp.tval glob_hints_path_atom : Libnames.qualid hints_path_atom_gen -> Names.GlobRef.t hints_path_atom_genval glob_hints_path : Libnames.qualid hints_path_gen -> Names.GlobRef.t hints_path_gen
module Hint_db : sig ... endtype hint_db= Hint_db.ttype hnf= booltype hint_term=|IsGlobRef of Names.GlobRef.t|IsConstr of EConstr.constr * Univ.ContextSet.ttype hints_entry=|HintsResolveEntry of (Typeclasses.hint_info * bool * hnf * hints_path_atom * hint_term) list|HintsImmediateEntry of (hints_path_atom * bool * hint_term) list|HintsCutEntry of hints_path|HintsUnfoldEntry of Names.evaluable_global_reference list|HintsTransparencyEntry of Names.evaluable_global_reference hints_transparency_target * bool|HintsModeEntry of Names.GlobRef.t * hint_mode list|HintsExternEntry of Typeclasses.hint_info * Genarg.glob_generic_argument
val searchtable_map : hint_db_name -> hint_dbval searchtable_add : (hint_db_name * hint_db) -> unit
val create_hint_db : bool -> hint_db_name -> TransparentState.t -> bool -> unitval remove_hints : bool -> hint_db_name list -> Names.GlobRef.t list -> unitval current_db_names : unit -> Util.String.Set.tval current_pure_db : unit -> hint_db listval interp_hints : poly:bool -> hints_expr -> hints_entryval add_hints : local:bool -> hint_db_name list -> hints_entry -> unitval prepare_hint : bool -> (bool * bool) -> Environ.env -> Evd.evar_map -> (Evd.evar_map * EConstr.constr) -> hint_term
val make_exact_entry : Environ.env -> Evd.evar_map -> Typeclasses.hint_info -> poly:bool -> ?name:hints_path_atom -> (EConstr.constr * EConstr.types * Univ.ContextSet.t) -> hint_entry
val make_apply_entry : Environ.env -> Evd.evar_map -> (bool * bool * bool) -> Typeclasses.hint_info -> poly:bool -> ?name:hints_path_atom -> (EConstr.constr * EConstr.types * Univ.ContextSet.t) -> hint_entry
val make_resolves : Environ.env -> Evd.evar_map -> (bool * bool * bool) -> Typeclasses.hint_info -> poly:bool -> ?name:hints_path_atom -> hint_term -> hint_entry list
val make_resolve_hyp : Environ.env -> Evd.evar_map -> EConstr.named_declaration -> hint_entry list
val make_extern : int -> Pattern.constr_pattern option -> Genarg.glob_generic_argument -> hint_entryval run_hint : hint -> ((raw_hint * Clenv.clausenv) hint_ast -> 'r Proofview.tactic) -> 'r Proofview.tacticval repr_hint : hint -> (raw_hint * Clenv.clausenv) hint_astThis function is for backward compatibility only, not to use in newly written code.
val make_local_hint_db : Environ.env -> Evd.evar_map -> ?ts:TransparentState.t -> bool -> Tactypes.delayed_open_constr list -> hint_dbval make_db_list : hint_db_name list -> hint_db listval wrap_hint_warning : 'a Proofview.tactic -> 'a Proofview.tacticUse around toplevel calls to hint-using tactics, to enable the tracking of non-imported hints. Any tactic calling
run_hintmust be wrapped this way.
val wrap_hint_warning_fun : Environ.env -> Evd.evar_map -> (Evd.evar_map -> 'a * Evd.evar_map) -> 'a * Evd.evar_mapVariant of the above for non-tactics
val pr_searchtable : Environ.env -> Evd.evar_map -> Pp.tval pr_applicable_hint : Proof_global.t -> Pp.tval pr_hint_ref : Environ.env -> Evd.evar_map -> Names.GlobRef.t -> Pp.tval pr_hint_db_by_name : Environ.env -> Evd.evar_map -> hint_db_name -> Pp.tval pr_hint_db_env : Environ.env -> Evd.evar_map -> Hint_db.t -> Pp.tval pr_hint : Environ.env -> Evd.evar_map -> hint -> Pp.t