UStateThis file defines universe unification states which are part of evarmaps. Most of the API below is reexported in Evd. Consider using higher-level primitives when needed.
type universes_entry = | Monomorphic_entry of Univ.ContextSet.t |
| Polymorphic_entry of UVars.UContext.t |
Type of universe unification states. They allow the incremental building of universe constraints during an interactive proof.
Different ways to create a new universe state
val empty : tval make : lbound:UGraph.Bound.t -> UGraph.t -> tval make_with_initial_binders : lbound:UGraph.Bound.t -> UGraph.t -> Names.lident list -> tval from_env : ?binders:Names.lident list -> Environ.env -> tMain entry point at the beginning of a declaration declaring the binding names as rigid universes.
val of_names : (UnivNames.universe_binders * UnivNames.rev_binders) -> tMain entry point when only names matter, e.g. for printing.
val of_context_set : UnivGen.sort_context_set -> tMain entry point when starting from the instance of a global reference, e.g. when building a scheme.
Misc
val is_empty : t -> boolval context_set : t -> Univ.ContextSet.tThe local context of the state, i.e. a set of bound variables together with their associated constraints.
val sort_context_set : t -> UnivGen.sort_context_settype universe_opt_subst = UnivFlex.tval subst : t -> UnivFlex.tThe local universes that are unification variables
val is_algebraic : Univ.Level.t -> t -> boolCan this universe be instantiated with an algebraic universe (ie it appears in inferred types only).
val constraints : t -> Univ.Constraints.tShorthand for context_set composed with ContextSet.constraints.
val context : t -> UVars.UContext.tShorthand for context_set with Context_set.to_context.
type named_universes_entry = universes_entry * UnivNames.universe_bindersval univ_entry : poly:bool -> t -> named_universes_entryPick from context or context_set based on poly.
val universe_binders : t -> UnivNames.universe_bindersReturn local names of universes.
val nf_qvar : t -> Sorts.QVar.t -> Sorts.Quality.tReturns the normal form of the sort variable.
val nf_quality : t -> Sorts.Quality.t -> Sorts.Quality.tval nf_instance : t -> UVars.Instance.t -> UVars.Instance.tval nf_level : t -> Univ.Level.t -> Univ.Level.tMust not be allowed to be algebraic
val nf_universe : t -> Univ.Universe.t -> Univ.Universe.tval nf_relevance : t -> Sorts.relevance -> Sorts.relevanceReturns the normal form of the relevance.
val add_constraints : t -> Univ.Constraints.t -> tval add_universe_constraints : t -> UnivProblem.Set.t -> tval check_qconstraints : t -> Sorts.QConstraints.t -> boolval check_universe_constraints : t -> UnivProblem.Set.t -> boolval add_quconstraints : t -> Sorts.QUConstraints.t -> tval quality_of_name : t -> Names.Id.t -> Sorts.QVar.tval universe_of_name : t -> Names.Id.t -> Univ.Level.tRetrieve the universe associated to the name.
val name_level : Univ.Level.t -> Names.Id.t -> t -> tGives a name to the level (making it a binder). Asserts the name is not already used by a level
val restrict_universe_context : ?lbound:UGraph.Bound.t -> Univ.ContextSet.t -> Univ.Level.Set.t -> Univ.ContextSet.trestrict_universe_context lbound (univs,csts) keep restricts univs to the universes in keep. The constraints csts are adjusted so that transitive constraints between remaining universes (those in keep and those not in univs) are preserved.
val restrict : ?lbound:UGraph.Bound.t -> t -> Univ.Level.Set.t -> trestrict uctx ctx restricts the local universes of uctx to ctx extended by local named universes and side effect universes (from demote_seff_univs). Transitive constraints between retained universes are preserved.
val restrict_even_binders : ?lbound:UGraph.Bound.t -> t -> Univ.Level.Set.t -> trestrict_even_binders uctx ctx restricts the local universes of uctx to ctx extended by side effect universes (from demote_seff_univs). Transitive constraints between retained universes are preserved.
val univ_rigid : rigidval univ_flexible : rigidval univ_flexible_alg : rigidval merge : ?loc:Loc.t -> sideff:bool -> rigid -> t -> Univ.ContextSet.t -> tval merge_sort_variables : ?loc:Loc.t -> sideff:bool -> t -> Sorts.QVar.Set.t -> tval merge_sort_context : ?loc:Loc.t -> sideff:bool -> rigid -> t -> UnivGen.sort_context_set -> tval demote_global_univs : Univ.ContextSet.t -> t -> tAfter declaring global universes, call this if you want to keep using the UState.
Removes from the uctx_local part of the UState the universes that are present in the input constraint set (supposedly the global ones), and adds any new universes and constraints to the UGraph part of the UState.
val demote_global_univ_entry : universes_entry -> t -> tAfter declaring a global, call this with its universe entry if you want to keep using the ustate instead of restarting it with from_env (Global.env()) or using the slow update_sigma_univs _ (Environ.universes (Global/env())).
Equivalently:
demote_global_univs on the contextset.val emit_side_effects : Safe_typing.private_constants -> t -> tCalls demote_global_univs for the private constant universes.
val new_sort_variable : ?loc:Loc.t -> ?name:Names.Id.t -> t -> t * Sorts.QVar.tDeclare a new local sort.
val new_univ_variable : ?loc:Loc.t -> rigid -> Names.Id.t option -> t -> t * Univ.Level.tDeclare a new local universe; use rigid if a global or bound universe; use flexible for a universe existential variable; use univ_flexible_alg for a universe existential variable allowed to be instantiated with an algebraic universe
val add_forgotten_univ : t -> Univ.Level.t -> tDon't use this, it only exists for funind
val make_nonalgebraic_variable : t -> Univ.Level.t -> tcf UnivFlex
val constrain_variables : Univ.Level.Set.t -> t -> tval minimize : ?lbound:UGraph.Bound.t -> t -> tUniverse minimization
type universe_decl = (Sorts.QVar.t list, Univ.Level.t list, Univ.Constraints.t) gen_universe_declval default_univ_decl : universe_declval check_univ_decl : poly:bool -> t -> universe_decl -> named_universes_entrycheck_univ_decl ctx decl
If non extensible in decl, check that the local universes (resp. universe constraints) in ctx are implied by decl.
Return a universes_entry containing the local universes of ctx and their constraints.
When polymorphic, the universes corresponding to decl.univdecl_instance come first in the order defined by that list.
val check_univ_decl_rev : t -> universe_decl -> t * UVars.UContext.tval check_mono_univ_decl : t -> universe_decl -> Univ.ContextSet.tval pr_uctx_level : t -> Univ.Level.t -> Pp.tval pr_uctx_qvar : t -> Sorts.QVar.t -> Pp.tval qualid_of_level : t -> Univ.Level.t -> Libnames.qualid optionval id_of_level : t -> Univ.Level.t -> Names.Id.t optionOnly looks in the local names, not in the nametab.
val id_of_qvar : t -> Sorts.QVar.t -> Names.Id.t optionval pr_weak : (Univ.Level.t -> Pp.t) -> t -> Pp.tmodule Internal : sig ... end