EvarutilThis module provides useful higher-level functions for evar manipulation.
val new_meta : unit -> Constr.metavariablenew_meta is a generator of unique meta variables
val next_evar_name :
Namegen.intro_pattern_naming_expr ->
(Names.Id.t * bool) optionval new_evar :
?src:Evar_kinds.t Loc.located ->
?filter:Evd.Filter.t ->
?relevance:EConstr.ERelevance.t ->
?abstract_arguments:Evd.Abstraction.t ->
?candidates:EConstr.constr list ->
?naming:Namegen.intro_pattern_naming_expr ->
?parent:Evar.t ->
?typeclass_candidate:bool ->
?rrpat:bool ->
Environ.env ->
Evd.evar_map ->
EConstr.types ->
Evd.evar_map * EConstr.tval new_pure_evar :
?src:Evar_kinds.t Loc.located ->
?filter:Evd.Filter.t ->
relevance:EConstr.ERelevance.t ->
?abstract_arguments:Evd.Abstraction.t ->
?candidates:EConstr.constr list ->
?name:(Names.Id.t * bool) ->
?parent:Evar.t ->
?typeclass_candidate:bool ->
?rrpat:bool ->
Environ.named_context_val ->
Evd.evar_map ->
EConstr.types ->
Evd.evar_map * Evar.tAlias of Evd.new_pure_evar
val new_type_evar :
?src:Evar_kinds.t Loc.located ->
?filter:Evd.Filter.t ->
?naming:Namegen.intro_pattern_naming_expr ->
Environ.env ->
Evd.evar_map ->
Evd.rigid ->
Evd.evar_map * (EConstr.constr * EConstr.ESorts.t)Create a new Type existential variable, as we keep track of them during type-checking and unification.
val new_Type :
?rigid:Evd.rigid ->
Evd.evar_map ->
Evd.evar_map * EConstr.constrval whd_head_evar : Evd.evar_map -> EConstr.constr -> EConstr.constrval has_undefined_evars : Evd.evar_map -> EConstr.constr -> boolval has_undefined_evars_or_metas : Evd.evar_map -> EConstr.constr -> boolval is_ground_term : Evd.evar_map -> EConstr.constr -> boolval is_ground_env : Evd.evar_map -> Environ.env -> boolval advance : Evd.evar_map -> Evar.t -> Evar.t optionadvance sigma g returns Some g' if g' is undefined and is the current avatar of g (for instance g was changed by clear into g'). It returns None if g has been (partially) solved.
val reachable_from_evars : Evd.evar_map -> Evar.Set.t -> Evar.Set.treachable_from_evars sigma seeds computes the descendents of evars in seeds by restriction or evar-evar unifications in sigma.
The following functions return the set of undefined evars contained in the object, the defined evars being traversed. This is roughly a combination of the previous functions and nf_evar.
val undefined_evars_of_term : Evd.evar_map -> EConstr.constr -> Evar.Set.tval undefined_evars_of_named_context :
Evd.evar_map ->
Constr.named_context ->
Evar.Set.tval create_undefined_evars_cache : unit -> undefined_evars_cacheval filtered_undefined_evars_of_evar_info :
?cache:undefined_evars_cache ->
Evd.evar_map ->
'a Evd.evar_info ->
Evar.Set.tval occur_evar_upto : Evd.evar_map -> Evar.t -> EConstr.constr -> booloccur_evar_upto sigma k c returns true if k appears in c. It looks up recursively in sigma for the value of existential variables.
val judge_of_new_Type : Evd.evar_map -> Evd.evar_map * EConstr.unsafe_judgmentval create_clos_infos :
Environ.env ->
Evd.evar_map ->
RedFlags.reds ->
CClosure.clos_infosval whd_evar : Evd.evar_map -> EConstr.constr -> EConstr.constrval nf_evar : Evd.evar_map -> EConstr.constr -> EConstr.constrval j_nf_evar :
Evd.evar_map ->
EConstr.unsafe_judgment ->
EConstr.unsafe_judgmentval jl_nf_evar :
Evd.evar_map ->
EConstr.unsafe_judgment list ->
EConstr.unsafe_judgment listval jv_nf_evar :
Evd.evar_map ->
EConstr.unsafe_judgment array ->
EConstr.unsafe_judgment arrayval tj_nf_evar :
Evd.evar_map ->
EConstr.unsafe_type_judgment ->
EConstr.unsafe_type_judgmentval nf_rel_context_evar :
Evd.evar_map ->
EConstr.rel_context ->
EConstr.rel_contextval nf_env_evar : Evd.evar_map -> Environ.env -> Environ.envval nf_evar_info : Evd.evar_map -> 'a Evd.evar_info -> 'a Evd.evar_infoval nf_evar_map : Evd.evar_map -> Evd.evar_mapval nf_evar_map_undefined : Evd.evar_map -> Evd.evar_mapval nf_relevance : Evd.evar_map -> Sorts.relevance -> Sorts.relevancePresenting terms without solved evars
val nf_evars_universes : Evd.evar_map -> Constr.constr -> Constr.constrval finalize :
?abort_on_undefined_evars:bool ->
?poly:PolyFlags.t ->
Evd.evar_map ->
((EConstr.t -> Constr.t) -> 'a) ->
Evd.evar_map * 'afinalize env sigma f combines universe minimisation, evar-and-universe normalisation and universe restriction.
It minimizes universes in sigma, calls f a normalisation function with respect to the updated sigma and restricts the local universes of sigma to those encountered while running f.
Note that the normalizer passed to f holds some imperative state in its closure.
val kind_of_term_upto :
Evd.evar_map ->
Constr.constr ->
(Constr.constr, Constr.types, Sorts.t, UVars.Instance.t, Sorts.relevance)
Constr.kind_of_termLike Constr.kind except that kind_of_term sigma t exposes t as an evar e only if e is uninstantiated in sigma. Otherwise the value of e in sigma is (recursively) used.
val eq_constr_univs_test :
evd:Evd.evar_map ->
extended_evd:Evd.evar_map ->
EConstr.constr ->
EConstr.constr ->
booleq_constr_univs_test ~evd ~extended_evd t u tests equality of t and u up to existential variable instantiation and equalisable universes. The term t is interpreted in evd while u is interpreted in extended_evd. The universe constraints in extended_evd are assumed to be an extension of those in evd.
val compare_cumulative_instances :
Conversion.conv_pb ->
UVars.Variance.t array ->
UVars.Instance.t ->
UVars.Instance.t ->
Evd.evar_map ->
(Evd.evar_map, UGraph.univ_inconsistency) Util.unioncompare_cumulative_instances cv_pb variance u1 u2 sigma Returns Inl sigma' where sigma' is sigma augmented with universe constraints such that u1 cv_pb? u2 according to variance. Additionally flexible universes in irrelevant positions are unified if possible. Returns Inr p when the former is impossible.
val compare_constructor_instances :
Evd.evar_map ->
UVars.Instance.t ->
UVars.Instance.t ->
(Evd.evar_map, UGraph.univ_inconsistency) Util.unionWe should only compare constructors at convertible types, so this is only an opportunity to unify universes.
But what about qualities?
type unification_pb =
Evd.conv_pb * Environ.env * EConstr.constr * EConstr.constrUnification problems
val add_unification_pb :
?tail:bool ->
unification_pb ->
Evd.evar_map ->
Evd.evar_mapadd_unification_pb ?tail pb sigma Add a unification problem pb to sigma, if not already present. Put it at the end of the list if tail is true, by default it is false.
val vars_of_global :
Environ.env ->
Evd.evar_map ->
Names.GlobRef.t ->
Names.Id.Set.traise OccurHypInSimpleClause if the removal breaks dependencies
type clear_dependency_error = | OccurHypInSimpleClause of Names.Id.t option| EvarTypingBreak of EConstr.existential| NoCandidatesLeft of Evar.texception ClearDependencyError of Names.Id.t
* clear_dependency_error
* Names.GlobRef.t optionRestrict an undefined evar according to a (sub)filter and candidates. The evar will be defined if there is only one candidate left,
val restrict_evar :
Evd.evar_map ->
Evar.t ->
Evd.Filter.t ->
EConstr.constr list option ->
Evd.evar_map * Evar.tval clear_hyps_in_evi :
Environ.env ->
Evd.evar_map ->
Environ.named_context_val ->
EConstr.types ->
Names.Id.Set.t ->
Evd.evar_map * Environ.named_context_val * EConstr.typesval clear_hyps2_in_evi :
Environ.env ->
Evd.evar_map ->
Environ.named_context_val ->
EConstr.types ->
EConstr.types ->
Names.Id.Set.t ->
Evd.evar_map * Environ.named_context_val * EConstr.types * EConstr.typesval check_and_clear_in_constr :
Environ.env ->
Evd.evar_map ->
clear_dependency_error ->
Names.Id.Set.t ->
EConstr.constr ->
Evd.evar_mapval empty_csubst : csubstval csubst_subst : Evd.evar_map -> csubst -> EConstr.constr -> EConstr.constrval ext_named_context_of_env : Environ.env -> Evd.evar_map -> ext_named_contextval ext_named_context_val : ext_named_context -> Environ.named_context_valval ext_csubst : ext_named_context -> csubstval default_ext_instance : ext_named_context -> EConstr.constr SList.tval ext_rev_subst : ext_named_context -> Names.Id.t -> EConstr.constrval push_rel_decl_to_named_context :
Environ.env ->
Evd.evar_map ->
EConstr.rel_declaration ->
ext_named_context ->
ext_named_contextval push_rel_context_to_named_context :
Environ.env ->
Evd.evar_map ->
EConstr.types ->
Environ.named_context_val * EConstr.types * EConstr.constr SList.t * csubstval generalize_evar_over_rels :
Evd.evar_map ->
EConstr.existential ->
EConstr.types * EConstr.constr listval subterm_source :
Evar.t ->
?where:Evar_kinds.subevar_kind ->
Evar_kinds.t Loc.located ->
Evar_kinds.t Loc.locatedval meta_counter_summary_tag : int Summary.Dyn.tag