package coq-core
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha512=9a35311acec2a806730b94ac7dceabc88837f235c52a14c026827d9b89433bd7fa9555a9fc6829aa49edfedb24c8bbaf1411ebf463b74a50aeb17cba47745b6b
doc/coq-core.engine/EConstr/index.html
Module EConstrSource
Type of incomplete terms. Essentially a wrapper around Constr.t ensuring that Constr.kind does not observe defined evars.
Universe variables
Destructors
Same as Constr.kind except that it expands evars and normalizes universes on the fly.
val kind_upto :
Evd.evar_map ->
Constr.t ->
(Constr.t, Constr.t, Sorts.t, Univ.Instance.t) Constr.kind_of_termReturns the evar-normal form of the argument. Note that this function is supposed to be called when the original term has not more free-evars anymore. If you need compatibility with the old semantics, set abort_on_undefined_evars to false.
For getting the evar-normal form of a term with evars see Evarutil.nf_evar.
Same as to_constr, but returns None if some unresolved evars remain
type kind_of_type = | SortType of ESorts.t| CastType of types * t| ProdType of Names.Name.t Context.binder_annot * t * t| LetInType of Names.Name.t Context.binder_annot * t * t * t| AtomicType of t * t array
Constructors
Construct a term from a view.
Insensitive primitives
Evar-insensitive versions of the corresponding functions. See the Constr module for more information.
Constructors
Abstracting/generalizing over binders
it = iterated or_LetIn = turn a local definition into a LetIn wo_LetIn = inlines local definitions (i.e. substitute them in the body) Named = binding is by name and the combinators turn it into a binding by index (complexity is nb(binders) * size(term))
val mkNamedLambda :
Evd.evar_map ->
Names.Id.t Context.binder_annot ->
types ->
constr ->
constrval mkNamedLetIn :
Evd.evar_map ->
Names.Id.t Context.binder_annot ->
constr ->
types ->
constr ->
constrVariant of mkEvar that removes identity variable instances from its argument.
Simple case analysis
Pops lambda abstractions until there are no more, skipping casts.
Pops lambda abstractions and letins until there are no more, skipping casts.
Pops n lambda abstractions, and pop letins only if needed to expose enough lambdas, skipping casts.
Pops n lambda abstractions and letins, skipping casts.
Equality
val eq_constr_universes :
Environ.env ->
Evd.evar_map ->
?nargs:int ->
t ->
t ->
UnivProblem.Set.t optionval leq_constr_universes :
Environ.env ->
Evd.evar_map ->
?nargs:int ->
t ->
t ->
UnivProblem.Set.t optionval eq_constr_universes_proj :
Environ.env ->
Evd.evar_map ->
t ->
t ->
UnivProblem.Set.t optioneq_constr_universes_proj can equate projections and their eta-expanded constant form.
Iterators
val iter_with_full_binders :
Environ.env ->
Evd.evar_map ->
(rel_declaration -> 'a -> 'a) ->
('a -> t -> unit) ->
'a ->
t ->
unitval fold_with_binders :
Evd.evar_map ->
('a -> 'a) ->
('a -> 'b -> t -> 'b) ->
'a ->
'b ->
t ->
'bGather the universes transitively used in the term, including in the type of evars appearing in it.
Substitutions
Environment handling
val push_named_context_val :
named_declaration ->
Environ.named_context_val ->
Environ.named_context_valval map_rel_context_in_env :
(Environ.env -> constr -> constr) ->
Environ.env ->
rel_context ->
rel_contextval match_named_context_val :
Environ.named_context_val ->
(named_declaration * Environ.named_context_val) optionval fresh_global :
?loc:Loc.t ->
?rigid:Evd.rigid ->
?names:Univ.Instance.t ->
Environ.env ->
Evd.evar_map ->
Names.GlobRef.t ->
Evd.evar_map * tval expand_case :
Environ.env ->
Evd.evar_map ->
case ->
Constr.case_info * t * case_invert * t * t arrayval annotate_case :
Environ.env ->
Evd.evar_map ->
case ->
Constr.case_info
* EInstance.t
* t array
* (rel_context * t)
* case_invert
* t
* (rel_context * t) arraySame as above, but doesn't turn contexts into binders
val expand_branch :
Environ.env ->
Evd.evar_map ->
EInstance.t ->
t array ->
Names.constructor ->
case_branch ->
rel_contextGiven a universe instance and parameters for the inductive type, constructs the typed context in which the branch lives.
val contract_case :
Environ.env ->
Evd.evar_map ->
(Constr.case_info * t * case_invert * t * t array) ->
caseExtra
val of_named_decl :
(Constr.t, Constr.types) Context.Named.Declaration.pt ->
(t, types) Context.Named.Declaration.ptval of_rel_decl :
(Constr.t, Constr.types) Context.Rel.Declaration.pt ->
(t, types) Context.Rel.Declaration.ptval to_rel_decl :
Evd.evar_map ->
(t, types) Context.Rel.Declaration.pt ->
(Constr.t, Constr.types) Context.Rel.Declaration.pt