Module Univ.Universe

type t

Type of universes. A universe is defined as a set of level expressions. A level expression is built from levels and successors of level expressions, i.e.: le ::= l + n, n \in N.

A universe is said atomic if it consists of a single level expression with no increment, and algebraic otherwise (think the least upper bound of a set of level expressions).

val compare : t -> t -> int

Comparison function

val equal : t -> t -> bool

Equality function on formal universes

val hash : t -> int

Hash function

val hcons : t -> t
val make : Level.t -> t

Create a universe representing the given level.

val pr : (Level.t -> Pp.t) -> t -> Pp.t

Pretty-printing

val raw_pr : t -> Pp.t
val is_level : t -> bool

Test if the universe is a level or an algebraic universe.

val is_levels : t -> bool

Test if the universe is a lub of levels or contains +n's.

val level : t -> Level.t option

Try to get a level out of a universe, returns None if it is an algebraic universe.

val levels : ?init:Level.Set.t -> t -> Level.Set.t

Get the levels inside the universe, forgetting about increments, and add them to init (default empty)

val super : t -> t

The universe strictly above

val sup : t -> t -> t

The l.u.b. of 2 universes

val type0 : t

image of Set in the universes hierarchy

val type1 : t

the universe of the type of Prop/Set

val is_type0 : t -> bool
val exists : ((Level.t * int) -> bool) -> t -> bool
val for_all : ((Level.t * int) -> bool) -> t -> bool
val repr : t -> (Level.t * int) list
val unrepr : (Level.t * int) list -> t
module Set : CSet.ExtS with type elt = t
module Map : CMap.ExtS with type key = t and module Set := Set