# Choice of representatives for an equivalence relation ```agda module foundation.choice-of-representatives-equivalence-relation where ``` <details><summary>Imports</summary> ```agda open import foundation.action-on-identifications-functions open import foundation.dependent-pair-types open import foundation.equivalence-classes open import foundation.fundamental-theorem-of-identity-types open import foundation.logical-equivalences open import foundation.propositional-truncations open import foundation.surjective-maps open import foundation.type-arithmetic-dependent-pair-types open import foundation.universe-levels open import foundation-core.cartesian-product-types open import foundation-core.contractible-types open import foundation-core.embeddings open import foundation-core.equivalence-relations open import foundation-core.equivalences open import foundation-core.fibers-of-maps open import foundation-core.functoriality-dependent-pair-types open import foundation-core.identity-types ``` </details> ## Idea If we can construct a choice of representatives for each equivalence class, then we can construct the set quotient as a retract of the original type. ```agda module _ {l1 l2 l3 : Level} {A : UU l1} (R : equivalence-relation l2 A) where is-choice-of-representatives : (A → UU l3) → UU (l1 ⊔ l2 ⊔ l3) is-choice-of-representatives P = (a : A) → is-contr (Σ A (λ x → P x × sim-equivalence-relation R a x)) representatives : {P : A → UU l3} → is-choice-of-representatives P → UU (l1 ⊔ l3) representatives {P} H = Σ A P class-representatives : {P : A → UU l3} (H : is-choice-of-representatives P) → representatives H → equivalence-class R class-representatives H a = class R (pr1 a) abstract is-surjective-class-representatives : {P : A → UU l3} (H : is-choice-of-representatives P) → is-surjective (class-representatives H) is-surjective-class-representatives H (pair Q K) = apply-universal-property-trunc-Prop K ( trunc-Prop ( fiber (class-representatives H) (pair Q K))) ( λ (pair a φ) → unit-trunc-Prop ( pair ( pair (pr1 (center (H a))) (pr1 (pr2 (center (H a))))) ( ( apply-effectiveness-class' R ( symmetric-equivalence-relation R _ _ ( pr2 (pr2 (center (H a)))))) ∙ ( eq-class-equivalence-class R ( pair Q K) ( backward-implication ( φ a) ( refl-equivalence-relation R _)))))) abstract is-emb-class-representatives : {P : A → UU l3} (H : is-choice-of-representatives P) → is-emb (class-representatives H) is-emb-class-representatives {P} H (pair a p) = fundamental-theorem-id ( is-contr-equiv ( Σ A (λ x → P x × sim-equivalence-relation R a x)) ( ( associative-Σ A P (λ z → sim-equivalence-relation R a (pr1 z))) ∘e ( equiv-tot ( λ t → is-effective-class R a (pr1 t)))) ( H a)) ( λ y → ap (class-representatives H) {pair a p} {y}) abstract is-equiv-class-representatives : {P : A → UU l3} (H : is-choice-of-representatives P) → is-equiv (class-representatives H) is-equiv-class-representatives H = is-equiv-is-emb-is-surjective ( is-surjective-class-representatives H) ( is-emb-class-representatives H) equiv-equivalence-class-representatives : {P : A → UU l3} (H : is-choice-of-representatives P) → representatives H ≃ equivalence-class R pr1 (equiv-equivalence-class-representatives H) = class-representatives H pr2 (equiv-equivalence-class-representatives H) = is-equiv-class-representatives H ```