# Uniqueness of set truncations
```agda
module foundation.uniqueness-set-truncations where
```
<details><summary>Imports</summary>
```agda
open import foundation.dependent-pair-types
open import foundation.mere-equality
open import foundation.sets
open import foundation.uniqueness-set-quotients
open import foundation.universal-property-set-truncation
open import foundation.universe-levels
open import foundation-core.contractible-types
open import foundation-core.equivalences
open import foundation-core.function-types
open import foundation-core.homotopies
```
</details>
## Idea
The universal property of set truncation implies that set truncations are
uniquely unique.
## Properties
### A 3-for-2 property for 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 : hom-Set B C}
(H : (h ∘ f) ~ g)
where
abstract
is-equiv-is-set-truncation-is-set-truncation :
is-set-truncation B f → is-set-truncation 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)
( is-set-quotient-is-set-truncation B f Sf)
( is-set-quotient-is-set-truncation C g Sg)
abstract
is-set-truncation-is-equiv-is-set-truncation :
is-set-truncation C g → is-equiv h → is-set-truncation 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 → is-set-truncation B f → is-set-truncation 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))
```
### The unique 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)
(Sf : is-set-truncation B f)
(Sg : is-set-truncation 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)
```