Skip to main content

Universe

Enum Universe 

Source
pub enum Universe {
    SProp,
    Prop,
    Type(u32),
    Var(String),
    Succ(Box<Universe>),
    Max(Box<Universe>, Box<Universe>),
    IMax(Box<Universe>, Box<Universe>),
}
Expand description

Universe levels in the type hierarchy — a level EXPRESSION, so the kernel can be universe-POLYMORPHIC (R3). The concrete hierarchy is Prop : Type 1 : Type 2 : … with Prop ≤ Type i; on top of it, a level may mention universe VARIABLES, so one definition (id.{u} : Π(A : Sort u). A → A) is reusable at every level instead of duplicated per level.

  • Prop is the universe of propositions (the impredicative bottom; Prop ≤ all)
  • Type(n) is the concrete universe at level n
  • Var(u) is a universe variable (ranges over Type levels, ≥ Type 0)
  • Succ(ℓ) is ℓ + 1
  • Max(ℓ₁, ℓ₂) is the least upper bound (used in Π-type formation)

The algebra (succ/max/equiv/is_subtype_of) is decided over a canonical normal form, NOT by the derived structural equality — max(u,u) ≡ u, max(succ u, u) ≡ succ u, etc.

Variants§

§

SProp

SProp — the DEFINITIONALLY-proof-irrelevant sort (S). The bottom of the hierarchy (SProp ≤ Prop ≤ Type n): any two terms of a type in SProp are definitionally equal, and it is impredicative (Π into SProp is SProp). It collapses out of max/imax/succ so the Prop=0 level encoding is never disturbed.

§

Prop

Prop - the universe of propositions

§

Type(u32)

Type n - the universe of types at level n

§

Var(String)

A universe variable (universe polymorphism).

§

Succ(Box<Universe>)

The successor level ℓ + 1.

§

Max(Box<Universe>, Box<Universe>)

The least upper bound of two levels.

§

IMax(Box<Universe>, Box<Universe>)

The IMPREDICATIVE maximum, imax(a, b) = b if b is Prop, else max(a, b). It is the sort of Π(x:A). B where A : Sort a, B : Sort b: a Π into a proposition is a proposition (Prop is impredicative), no matter the domain. When b is a variable this stays symbolic — the level may be Prop or not depending on the instantiation.

Implementations§

Source§

impl Universe

Source

pub fn succ(&self) -> Universe

Get the successor universe: Type n → Type (n+1), Prop → Type 1, and a symbolic Succ(ℓ) for a level that mentions variables.

Source

pub fn max(&self, other: &Universe) -> Universe

Get the maximum of two universes (for Pi type formation). Concrete operands collapse immediately; otherwise a symbolic Max(…) is formed (its algebra is resolved by normalize).

Source

pub fn imax(&self, other: &Universe) -> Universe

The impredicative maximum imax(a, b) — the sort of a Π whose codomain lives in b. Collapses when b’s Prop-ness is known: imax(a, Prop) = Prop, imax(a, Type n) = max(a, Type n); imax(a, a) = a. Otherwise (a variable or other symbolic b) it stays a symbolic IMax, whose algebra equiv/ is_subtype_of decide by case-splitting on whether b is Prop.

Source

pub fn is_subtype_of(&self, other: &Universe) -> bool

Cumulative subtyping self ≤ other, decided over the level normal form. Sound for variables: u ≤ u, Type 0 ≤ u, u ≤ succ u hold, but Type 1 ≤ u and u ≤ v do NOT (they fail for some instantiation).

Source

pub fn equiv(&self, other: &Universe) -> bool

Definitional equality of two level expressions, accounting for the algebra (max, imax, succ, variables) — NOT the derived structural equality. Decided as mutual subtyping over all variable instantiations.

Source

pub fn substitute(&self, subst: &HashMap<String, Universe>) -> Universe

Substitute universe variables (replacing each Var(v) by subst[v]) throughout this level expression — the heart of instantiating a universe-polymorphic global.

Trait Implementations§

Source§

impl Clone for Universe

Source§

fn clone(&self) -> Universe

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Universe

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for Universe

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for Universe

Source§

fn eq(&self, other: &Universe) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for Universe

Source§

impl StructuralPartialEq for Universe

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.