# The universal property of truncations ```agda module foundation-core.universal-property-truncation where ``` <details><summary>Imports</summary> ```agda open import foundation.dependent-pair-types open import foundation.function-extensionality open import foundation.universal-property-equivalences open import foundation.universe-levels open import foundation-core.contractible-maps open import foundation-core.contractible-types open import foundation-core.equivalences open import foundation-core.function-types open import foundation-core.functoriality-dependent-pair-types open import foundation-core.homotopies open import foundation-core.identity-types open import foundation-core.precomposition-functions open import foundation-core.sections open import foundation-core.truncated-types open import foundation-core.truncation-levels open import foundation-core.type-theoretic-principle-of-choice ``` </details> ## Idea We say that a map `f : A ā B` into a `k`-truncated type `B` is a **`k`-truncation** of `A` -- or that it **satisfies the universal property of the `k`-truncation** of `A` -- if any map `g : A ā C` into a `k`-truncated type `C` extends uniquely along `f` to a map `B ā C`. ## Definition ### The condition on a map to be a truncation ```agda precomp-Trunc : {l1 l2 l3 : Level} {k : š} {A : UU l1} {B : UU l2} (f : A ā B) (C : Truncated-Type l3 k) ā (B ā type-Truncated-Type C) ā (A ā type-Truncated-Type C) precomp-Trunc f C = precomp f (type-Truncated-Type C) module _ {l1 l2 : Level} {k : š} {A : UU l1} (B : Truncated-Type l2 k) (f : A ā type-Truncated-Type B) where is-truncation : UUĻ is-truncation = {l : Level} (C : Truncated-Type l k) ā is-equiv (precomp-Trunc f C) equiv-is-truncation : {l3 : Level} (H : is-truncation) (C : Truncated-Type l3 k) ā ( type-Truncated-Type B ā type-Truncated-Type C) ā ( A ā type-Truncated-Type C) pr1 (equiv-is-truncation H C) = precomp-Trunc f C pr2 (equiv-is-truncation H C) = H C ``` ### The universal property of truncations ```agda module _ {l1 l2 : Level} {k : š} {A : UU l1} (B : Truncated-Type l2 k) (f : A ā type-Truncated-Type B) where universal-property-truncation : UUĻ universal-property-truncation = {l : Level} (C : Truncated-Type l k) (g : A ā type-Truncated-Type C) ā is-contr (Ī£ (type-hom-Truncated-Type k B C) (Ī» h ā h ā f ~ g)) ``` ### The dependent universal property of truncations ```agda precomp-Ī -Truncated-Type : {l1 l2 l3 : Level} {k : š} {A : UU l1} {B : UU l2} (f : A ā B) (C : B ā Truncated-Type l3 k) ā ((b : B) ā type-Truncated-Type (C b)) ā ((a : A) ā type-Truncated-Type (C (f a))) precomp-Ī -Truncated-Type f C h a = h (f a) module _ {l1 l2 : Level} {k : š} {A : UU l1} (B : Truncated-Type l2 k) (f : A ā type-Truncated-Type B) where dependent-universal-property-truncation : UUĻ dependent-universal-property-truncation = {l : Level} (X : type-Truncated-Type B ā Truncated-Type l k) ā is-equiv (precomp-Ī -Truncated-Type f X) ``` ## Properties ### Equivalences into `k`-truncated types are truncations ```agda abstract is-truncation-id : {l1 : Level} {k : š} {A : UU l1} (H : is-trunc k A) ā is-truncation (A , H) id is-truncation-id H B = is-equiv-precomp-is-equiv id is-equiv-id (type-Truncated-Type B) abstract is-truncation-equiv : {l1 l2 : Level} {k : š} {A : UU l1} (B : Truncated-Type l2 k) (e : A ā type-Truncated-Type B) ā is-truncation B (map-equiv e) is-truncation-equiv B e C = is-equiv-precomp-is-equiv ( map-equiv e) ( is-equiv-map-equiv e) ( type-Truncated-Type C) ``` ### A map into a truncated type is a truncation if and only if it satisfies the universal property of the truncation ```agda module _ {l1 l2 : Level} {k : š} {A : UU l1} (B : Truncated-Type l2 k) (f : A ā type-Truncated-Type B) where abstract is-truncation-universal-property-truncation : universal-property-truncation B f ā is-truncation B f is-truncation-universal-property-truncation H C = is-equiv-is-contr-map ( Ī» g ā is-contr-equiv ( Ī£ (type-hom-Truncated-Type k B C) (Ī» h ā (h ā f) ~ g)) ( equiv-tot (Ī» h ā equiv-funext)) ( H C g)) abstract universal-property-truncation-is-truncation : is-truncation B f ā universal-property-truncation B f universal-property-truncation-is-truncation H C g = is-contr-equiv' ( Ī£ (type-hom-Truncated-Type k B C) (Ī» h ā (h ā f) ļ¼ g)) ( equiv-tot (Ī» h ā equiv-funext)) ( is-contr-map-is-equiv (H C) g) map-is-truncation : is-truncation B f ā {l : Level} (C : Truncated-Type l k) (g : A ā type-Truncated-Type C) ā type-hom-Truncated-Type k B C map-is-truncation H C g = pr1 (center (universal-property-truncation-is-truncation H C g)) triangle-is-truncation : (H : is-truncation B f) ā {l : Level} (C : Truncated-Type l k) (g : A ā type-Truncated-Type C) ā map-is-truncation H C g ā f ~ g triangle-is-truncation H C g = pr2 (center (universal-property-truncation-is-truncation H C g)) ``` ### A map into a truncated type is a truncation if and only if it satisfies the dependent universal property of the truncation ```agda module _ {l1 l2 : Level} {k : š} {A : UU l1} (B : Truncated-Type l2 k) (f : A ā type-Truncated-Type B) where abstract dependent-universal-property-truncation-is-truncation : is-truncation B f ā dependent-universal-property-truncation B f dependent-universal-property-truncation-is-truncation H X = is-fiberwise-equiv-is-equiv-map-Ī£ ( Ī» (h : A ā type-Truncated-Type B) ā (a : A) ā type-Truncated-Type (X (h a))) ( Ī» (g : type-Truncated-Type B ā type-Truncated-Type B) ā g ā f) ( Ī» g (s : (b : type-Truncated-Type B) ā type-Truncated-Type (X (g b))) (a : A) ā s (f a)) ( H B) ( is-equiv-equiv ( inv-distributive-Ī -Ī£) ( inv-distributive-Ī -Ī£) ( ind-Ī£ (Ī» g s ā refl)) ( H (Ī£-Truncated-Type B X))) ( id) abstract is-truncation-dependent-universal-property-truncation : dependent-universal-property-truncation B f ā is-truncation B f is-truncation-dependent-universal-property-truncation H X = H (Ī» _ ā X) section-is-truncation : is-truncation B f ā {l3 : Level} (C : Truncated-Type l3 k) (h : A ā type-Truncated-Type C) (g : type-hom-Truncated-Type k C B) ā f ~ g ā h ā section g section-is-truncation H C h g K = map-distributive-Ī -Ī£ ( map-inv-is-equiv ( dependent-universal-property-truncation-is-truncation H ( fiber-Truncated-Type C B g)) ( Ī» a ā (h a , inv (K a)))) ```