Skip to content

hlevel

def isTrunc (n : Nat) (A : Type) : Type

The truncation level predicate: level 0 is contractibility, and level n+1 means every path space is of level n.

def isTruncMap (n : Nat) (A : Type) (B : Type) (f : A -> B) : Type

A map is n-truncated when every one of its fibers is of truncation level n.

def isTrunc0_is_isContr (A : Type) (h : isTrunc zero A) : isContr A

A type of truncation level 0 is contractible (the two notions agree definitionally).

def isContr_is_isTrunc0 (A : Type) (h : isContr A) : isTrunc zero A

A contractible type has truncation level 0 (the two notions agree definitionally).

def isProp_to_isTrunc1 (A : Type) (h : isProp A) : isTrunc (succ zero) A

A proposition has truncation level 1: all its path spaces are contractible.

def isTrunc1_to_isProp (A : Type) (h : isTrunc (succ zero) A) : isProp A

A type of truncation level 1 is a proposition, taking the center of each path space.

def isSet_to_isTrunc2 (A : Type) (h : isSet A) : isTrunc (succ (succ zero)) A

A set has truncation level 2: its path spaces are propositions.

def isTrunc2_to_isSet (A : Type) (h : isTrunc (succ (succ zero)) A) : isSet A

A type of truncation level 2 is a set.

def isContr_to_isTrunc1 (A : Type) (h : isContr A) : isTrunc (succ zero) A

A contractible type has truncation level 1.

def isSetUnit : isSet Unit

Unit is a set.

def constPath {A : Type} {x : A} {y : A} (d : Dec (x ≡ y)) (r : x ≡ y) : x ≡ y

Turns a decision on x ≡ y into an endofunction on x ≡ y that returns the decided path whenever one exists.

def constPathConst {A : Type} {x : A} {y : A} (d : Dec (x ≡ y)) (p : x ≡ y) (q : x ≡ y) : constPath d p ≡ constPath d q

The endofunction constPath is constant: it sends any two paths to the same path.

def decPathFn {A : Type} (dec : isDiscrete A) (x : A) (z : A) (r : x ≡ z) : x ≡ z

For a discrete type, the constant endofunction on paths from x to z obtained from deciding x ≡ z.

def hedbergMotive {A : Type} (dec : isDiscrete A) (x : A) (z : A) (r : x ≡ z) : Type

Motive for Hedberg’s theorem: a path r equals its image under decPathFn, corrected by the image of refl.

def hedbergKey {A : Type} (dec : isDiscrete A) (x : A) {y : A} (p : x ≡ y) : hedbergMotive dec x y p

Every path from x is recovered from its decPathFn image, the key step of Hedberg’s theorem.

def hedberg {A : Type} (dec : isDiscrete A) : isSet A

Hedberg’s theorem: a type with decidable path equality is a set.

def DecEq.toDiscrete {A : Type} (d : DecEq A) : isDiscrete A

Turns decidable core equality into decidable paths, so Hedberg’s theorem applies.

def DecEq.uip {A : Type} (d : DecEq A) (x : A) (y : A) (a : x = y) (b : x = y) : a = b

Uniqueness of identity proofs for a type with decidable equality: any two proofs of x = y are equal.

def isSetBool : isSet Bool

Bool is a set, proved by Hedberg’s theorem from decidable equality.

def isPropFunToProp (A : Type) (B : Type) (hb : isProp B) : isProp (A -> B)

Functions into a proposition form a proposition.

def isPropProdProp (A : Type) (B : Type) (ha : isProp A) (hb : isProp B) : isProp (A × B)

The product of two propositions is a proposition.

def isContrProd2 (A : Type) (B : Type) (ha : isContr A) (hb : isContr B) : isContr (A × B)

The product of two contractible types is contractible.

def isPropPathIsContr (A : Type) (h : isProp A) (x : A) (y : A) : isContr (x ≡ y)

In a proposition every path space is contractible.

def isContrCumulative {A : Type} (h : isContr A) : isSet A

A contractible type is a set.

def isPropNatToUnit : isProp (Nat -> Unit)

Functions from Nat to Unit form a proposition.

def isPropBoolToUnit : isProp (Bool -> Unit)

Functions from Bool to Unit form a proposition.

def isPropUnitToUnit : isProp (Unit -> Unit)

Functions from Unit to Unit form a proposition.

def isPropUnitUnit : isProp (Unit × Unit)

Unit × Unit is a proposition.

def isSetUnitUnit : isSet (Unit × Unit)

Unit × Unit is a set.

def isPropEmptyToAny (A : Type) : isProp (Empty -> A)

Functions out of Empty form a proposition.

def isPropNotNat : isProp (Nat -> Empty)

The negation Nat -> Empty is a proposition.

def isPropNotBool : isProp (Bool -> Empty)

The negation Bool -> Empty is a proposition.

def isContrAToUnit (A : Type) : isContr (A -> Unit)

Functions from any type into Unit form a contractible type.

def isContr_to_isTrunc0 (A : Type) (h : isContr A) : isTrunc zero A

A contractible type has truncation level 0.

def isContr_to_isProp (A : Type) (h : isContr A) : isProp A

A contractible type is a proposition.

def isContr_to_isSet (A : Type) (h : isContr A) : isSet A

A contractible type is a set.

def unit_isContr : isContr Unit

Unit is contractible.

def unit_isProp : isProp Unit

Unit is a proposition.

def unit_isSet : isSet Unit

Unit is a set.

def isOfHLevel (n : Nat) (A : Type) : Type

The h-level predicate, an alias for isTrunc.

def isPropImpliesIsSet (A : Type) (h : isProp A) : isSet A

Every proposition is a set.

def isSetToIsGroupoid (A : Type) (h : isSet A) : isGroupoid A

Every set is a groupoid.

def isGroupoidUnit : isGroupoid Unit

Unit is a groupoid.

def isGroupoidBool : isGroupoid Bool

Bool is a groupoid.

def isTrunc1_to_isTrunc2 (A : Type) (h : isTrunc (succ zero) A) : isTrunc (succ (succ zero)) A

Truncation level 1 implies truncation level 2.

def isPropPiType (A : Type) (B : A -> Type) (h : (x : A) -> isProp (B x)) : isProp ((x : A) -> B x)

A dependent function type into a family of propositions is a proposition.

def isSetPiType (A : Type) (B : A -> Type) (h : (x : A) -> isSet (B x)) : isSet ((x : A) -> B x)

A dependent function type into a family of sets is a set.

def isPropProdType (A : Type) (B : Type) (ha : isProp A) (hb : isProp B) : isProp (A × B)

The product of two propositions is a proposition.

def isSetProdType (A : Type) (B : Type) (ha : isSet A) (hb : isSet B) : isSet (A × B)

The product of two sets is a set.

def isPropUnitUnit_v3 : isProp (Unit × Unit)

Unit × Unit is a proposition, via the product lemma.

def isSetBoolBool : isSet (Bool × Bool)

Bool × Bool is a set.

def isSetUnitBool : isSet (Unit × Bool)

Unit × Bool is a set.

def retractIsProp (A : Type) (B : Type) (r : B -> A) (s : A -> B) (ret : (a : A) -> r (s a) ≡ a) (hB : isProp B) : isProp A

A retract of a proposition is a proposition.

def retractIsProp_Unit : isProp Unit

Unit is a proposition, as a retract of itself.

def retractIsContr (A : Type) (B : Type) (r : B -> A) (s : A -> B) (ret : (a : A) -> r (s a) ≡ a) (hB : isContr B) : isContr A

A retract of a contractible type is contractible.

def retractIsContr_Unit : isContr Unit

Unit is contractible, as a retract of itself.

def isSetArrow (A : Type) (B : Type) (hB : isSet B) : isSet (A -> B)

Functions into a set form a set.

def isPropArrow2 (A : Type) (B : Type) (C : Type) (hC : isProp C) : isProp (A -> B -> C)

Two-argument functions into a proposition form a proposition.

def isPropArrow3 (A : Type) (B : Type) (C : Type) (D : Type) (hD : isProp D) : isProp (A -> B -> C -> D)

Three-argument functions into a proposition form a proposition.

def isContr_isProp_isSet_chain (A : Type) (h : isContr A) : isSet A

A contractible type is a set, going through propositions.

def isContr_isProp_isSet_isGroupoid_chain (A : Type) (h : isContr A) : isGroupoid A

A contractible type is a groupoid, going through propositions and sets.

def isTrunc0_to_isTrunc2 (A : Type) (h : isTrunc zero A) : isTrunc (succ (succ zero)) A

Truncation level 0 implies truncation level 2.

def isGroupoidBoolBool : isGroupoid (Bool × Bool)

Bool × Bool is a groupoid.

def isSetBool3 : isSet ((Bool × Bool) × Bool)

(Bool × Bool) × Bool is a set.

def isSetUnit3 : isSet ((Unit × Unit) × Unit)

(Unit × Unit) × Unit is a set.

def isPropUnit3 : isProp ((Unit × Unit) × Unit)

(Unit × Unit) × Unit is a proposition.

def isContrUnit3 : isContr ((Unit × Unit) × Unit)

(Unit × Unit) × Unit is contractible.

def isSetArrow2 (A : Type) (B : Type) (C : Type) (hC : isSet C) : isSet (A -> B -> C)

Two-argument functions into a set form a set.

def hProp : Type 1

The type of propositions: a type together with a proof that it is a proposition.

def isPropPathBool (a : Bool) (b : Bool) : isProp (a ≡ b)

Paths between two booleans form a proposition.

def bool_path_hProp (a : Bool) (b : Bool) : hProp

The path type between two booleans, packaged as an hProp.

def isOfHLevel2Def (A : Type) : isOfHLevel (succ (succ zero)) A ≡ ((x : A) -> (y : A) -> (x0 : x ≡ y) -> (x1 : x ≡ y) -> isContr (x0 ≡ x1))

Unfolds h-level 2: any two parallel paths have a contractible space of paths between them.

def isTrunc0_Unit : isTrunc zero Unit

Unit has truncation level 0.

def isTrunc1_Unit : isTrunc (succ zero) Unit

Unit has truncation level 1.

def isTrunc2_Unit : isTrunc (succ (succ zero)) Unit

Unit has truncation level 2.

def isTrunc2_Bool : isTrunc (succ (succ zero)) Bool

Bool has truncation level 2.

def isTrunc2_UnitUnit : isTrunc (succ (succ zero)) (Unit × Unit)

Unit × Unit has truncation level 2.

def unit_isTrunc0 : isTrunc zero Unit

Unit has truncation level 0.

def unit_isTrunc1 : isTrunc (succ zero) Unit

Unit has truncation level 1.

def unit_isTrunc2 : isTrunc (succ (succ zero)) Unit

Unit has truncation level 2.

def bool_isTrunc2 : isTrunc (succ (succ zero)) Bool

Bool has truncation level 2.

def isOfHLevel_0_Unit : isOfHLevel zero Unit

Unit has h-level 0.

def isTrunc2_BoolBool : isTrunc (succ (succ zero)) (Bool × Bool)

Bool × Bool has truncation level 2.

def isTrunc1_UnitUnit : isTrunc (succ zero) (Unit × Unit)

Unit × Unit has truncation level 1.

def isOfHLevel_2_BoolBool : isOfHLevel (succ (succ zero)) (Bool × Bool)

Bool × Bool has h-level 2.

def isSetNatToBool : isSet (Nat -> Bool)

Functions from Nat to Bool form a set.

def isSetBoolToBool : isSet (Bool -> Bool)

Functions from Bool to Bool form a set.

def isSetUnitToUnit : isSet (Unit -> Unit)

Functions from Unit to Unit form a set.

def isSetBoolToUnit : isSet (Bool -> Unit)

Functions from Bool to Unit form a set.

def isSetNatNatToBool : isSet (Nat -> Nat -> Bool)

Two-argument functions from Nat to Bool form a set.