# Uniqueness of the truncations ```agda module foundation.uniqueness-truncation where ``` <details><summary>Imports</summary> ```agda open import foundation.universe-levels open import foundation-core.function-types open import foundation-core.homotopies open import foundation-core.truncated-types open import foundation-core.truncation-levels ``` </details> ## Idea The universal property of `n`-truncations implies that `n`-truncations are determined uniquely up to a unique equivalence. ```agda module _ {l1 l2 l3 : Level} (k : 𝕋) {A : UU l1} (B : Truncated-Type l2 k) (f : A → type-Truncated-Type B) (C : Truncated-Type l3 k) (g : A → type-Truncated-Type C) {h : type-hom-Truncated-Type k B C} (H : (h ∘ f) ~ g) where {- abstract is-equiv-is-truncation-is-truncation : is-truncation B f → is-truncation C g → is-equiv h is-equiv-is-truncation-is-truncation K L = is-equiv-is-invertible ( map-inv-is-equiv (L B) f) ( {!!}) {!!} is-equiv-is-invertible ( pr1 (center K)) ( htpy-eq ( is-injective-is-equiv ( Ug C) { h ∘ k} { id} ( ( precomp-comp-Set-Quotient R C g B k C h) ∙ ( ( ap (λ t → precomp-Set-Quotient R B t C h) α) ∙ ( ( eq-htpy-reflecting-map-equivalence-relation R C ( precomp-Set-Quotient R B f C h) g H) ∙ ( inv (precomp-id-Set-Quotient R C g))))))) ( htpy-eq ( is-injective-is-equiv ( Uf B) { k ∘ h} { id} ( ( precomp-comp-Set-Quotient R B f C h B k) ∙ ( ( ap ( λ t → precomp-Set-Quotient R C t B k) ( eq-htpy-reflecting-map-equivalence-relation R C ( precomp-Set-Quotient R B f C h) g H)) ∙ ( ( α) ∙ ( inv (precomp-id-Set-Quotient R B f))))))) where K : is-contr ( Σ ( type-hom-Set C B) ( λ h → ( h ∘ map-reflecting-map-equivalence-relation R g) ~ ( map-reflecting-map-equivalence-relation R f))) K = universal-property-set-quotient-is-set-quotient R C g Ug B f k : type-Set C → type-Set B k = pr1 (center K) α : Id (precomp-Set-Quotient R C g B k) f α = eq-htpy-reflecting-map-equivalence-relation R B ( precomp-Set-Quotient R C g B k) ( f) ( pr2 (center K)) -} ``` ### Uniqueness of set truncations ```agda {- module _ {l1 l2 l3 : Level} {A : UU l1} (B : Set l2) (f : A → type-Set B) (C : Set l3) (g : A → type-Set C) {h : type-hom-Set B C} (H : (h ∘ f) ~ g) where abstract is-equiv-is-set-truncation-is-set-truncation : ({l : Level} → is-set-truncation l B f) → ({l : Level} → is-set-truncation l C g) → is-equiv h is-equiv-is-set-truncation-is-set-truncation Sf Sg = is-equiv-is-set-quotient-is-set-quotient ( mere-eq-equivalence-relation A) ( B) ( reflecting-map-mere-eq B f) ( C) ( reflecting-map-mere-eq C g) ( H) ( λ {l} → is-set-quotient-is-set-truncation B f Sf) ( λ {l} → is-set-quotient-is-set-truncation C g Sg) abstract is-set-truncation-is-equiv-is-set-truncation : ({l : Level} → is-set-truncation l C g) → is-equiv h → {l : Level} → is-set-truncation l B f is-set-truncation-is-equiv-is-set-truncation Sg Eh = is-set-truncation-is-set-quotient B f ( is-set-quotient-is-equiv-is-set-quotient ( mere-eq-equivalence-relation A) ( B) ( reflecting-map-mere-eq B f) ( C) ( reflecting-map-mere-eq C g) ( H) ( is-set-quotient-is-set-truncation C g Sg) ( Eh)) abstract is-set-truncation-is-set-truncation-is-equiv : is-equiv h → ({l : Level} → is-set-truncation l B f) → {l : Level} → is-set-truncation l C g is-set-truncation-is-set-truncation-is-equiv Eh Sf = is-set-truncation-is-set-quotient C g ( is-set-quotient-is-set-quotient-is-equiv ( mere-eq-equivalence-relation A) ( B) ( reflecting-map-mere-eq B f) ( C) ( reflecting-map-mere-eq C g) ( H) ( Eh) ( is-set-quotient-is-set-truncation B f Sf)) module _ {l1 l2 l3 : Level} {A : UU l1} (B : Set l2) (f : A → type-Set B) (C : Set l3) (g : A → type-Set C) (Sf : {l : Level} → is-set-truncation l B f) (Sg : {l : Level} → is-set-truncation l C g) where abstract uniqueness-set-truncation : is-contr (Σ (type-Set B ≃ type-Set C) (λ e → (map-equiv e ∘ f) ~ g)) uniqueness-set-truncation = uniqueness-set-quotient ( mere-eq-equivalence-relation A) ( B) ( reflecting-map-mere-eq B f) ( is-set-quotient-is-set-truncation B f Sf) ( C) ( reflecting-map-mere-eq C g) ( is-set-quotient-is-set-truncation C g Sg) equiv-uniqueness-set-truncation : type-Set B ≃ type-Set C equiv-uniqueness-set-truncation = pr1 (center uniqueness-set-truncation) map-equiv-uniqueness-set-truncation : type-Set B → type-Set C map-equiv-uniqueness-set-truncation = map-equiv equiv-uniqueness-set-truncation triangle-uniqueness-set-truncation : (map-equiv-uniqueness-set-truncation ∘ f) ~ g triangle-uniqueness-set-truncation = pr2 (center uniqueness-set-truncation) -} ```