# 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)
-}
```