# Pairs of distinct elements ```agda module foundation.pairs-of-distinct-elements where ``` <details><summary>Imports</summary> ```agda open import foundation.dependent-pair-types open import foundation.embeddings open import foundation.equivalences open import foundation.fundamental-theorem-of-identity-types open import foundation.negated-equality open import foundation.negation open import foundation.structure-identity-principle open import foundation.subtype-identity-principle open import foundation.universe-levels open import foundation-core.cartesian-product-types open import foundation-core.contractible-types open import foundation-core.identity-types open import foundation-core.injective-maps open import foundation-core.torsorial-type-families ``` </details> ## Idea Pairs of distinct elements in a type `A` consist of two elements `x` and `y` of `A` equipped with an element of type `x ≠ y`. ## Definition ```agda pair-of-distinct-elements : {l : Level} → UU l → UU l pair-of-distinct-elements A = Σ A (λ x → Σ A (λ y → x ≠ y)) module _ {l : Level} {A : UU l} (p : pair-of-distinct-elements A) where first-pair-of-distinct-elements : A first-pair-of-distinct-elements = pr1 p second-pair-of-distinct-elements : A second-pair-of-distinct-elements = pr1 (pr2 p) distinction-pair-of-distinct-elements : first-pair-of-distinct-elements ≠ second-pair-of-distinct-elements distinction-pair-of-distinct-elements = pr2 (pr2 p) ``` ## Properties ### Characterization of the identity type of the type of pairs of distinct elements ```agda module _ {l : Level} {A : UU l} where Eq-pair-of-distinct-elements : (p q : pair-of-distinct-elements A) → UU l Eq-pair-of-distinct-elements p q = (first-pair-of-distinct-elements p = first-pair-of-distinct-elements q) × (second-pair-of-distinct-elements p = second-pair-of-distinct-elements q) refl-Eq-pair-of-distinct-elements : (p : pair-of-distinct-elements A) → Eq-pair-of-distinct-elements p p pr1 (refl-Eq-pair-of-distinct-elements p) = refl pr2 (refl-Eq-pair-of-distinct-elements p) = refl Eq-eq-pair-of-distinct-elements : (p q : pair-of-distinct-elements A) → p = q → Eq-pair-of-distinct-elements p q Eq-eq-pair-of-distinct-elements p .p refl = refl-Eq-pair-of-distinct-elements p is-torsorial-Eq-pair-of-distinct-elements : (p : pair-of-distinct-elements A) → is-torsorial (Eq-pair-of-distinct-elements p) is-torsorial-Eq-pair-of-distinct-elements p = is-torsorial-Eq-structure ( is-torsorial-Id (first-pair-of-distinct-elements p)) ( pair (first-pair-of-distinct-elements p) refl) ( is-torsorial-Eq-subtype ( is-torsorial-Id (second-pair-of-distinct-elements p)) ( λ x → is-prop-neg) ( second-pair-of-distinct-elements p) ( refl) ( distinction-pair-of-distinct-elements p)) is-equiv-Eq-eq-pair-of-distinct-elements : (p q : pair-of-distinct-elements A) → is-equiv (Eq-eq-pair-of-distinct-elements p q) is-equiv-Eq-eq-pair-of-distinct-elements p = fundamental-theorem-id ( is-torsorial-Eq-pair-of-distinct-elements p) ( Eq-eq-pair-of-distinct-elements p) eq-Eq-pair-of-distinct-elements : {p q : pair-of-distinct-elements A} → first-pair-of-distinct-elements p = first-pair-of-distinct-elements q → second-pair-of-distinct-elements p = second-pair-of-distinct-elements q → p = q eq-Eq-pair-of-distinct-elements {p} {q} α β = map-inv-is-equiv (is-equiv-Eq-eq-pair-of-distinct-elements p q) (pair α β) ``` ### Equivalences map pairs of distinct elements to pairs of distinct elements ```agda module _ {l1 l2 : Level} {A : UU l1} {B : UU l2} (e : A ≃ B) where map-equiv-pair-of-distinct-elements : pair-of-distinct-elements A → pair-of-distinct-elements B pr1 (map-equiv-pair-of-distinct-elements p) = map-equiv e (first-pair-of-distinct-elements p) pr1 (pr2 (map-equiv-pair-of-distinct-elements p)) = map-equiv e (second-pair-of-distinct-elements p) pr2 (pr2 (map-equiv-pair-of-distinct-elements p)) q = distinction-pair-of-distinct-elements p ( is-injective-is-equiv (is-equiv-map-equiv e) q) map-inv-equiv-pair-of-distinct-elements : pair-of-distinct-elements B → pair-of-distinct-elements A pr1 (map-inv-equiv-pair-of-distinct-elements q) = map-inv-equiv e (first-pair-of-distinct-elements q) pr1 (pr2 (map-inv-equiv-pair-of-distinct-elements q)) = map-inv-equiv e (second-pair-of-distinct-elements q) pr2 (pr2 (map-inv-equiv-pair-of-distinct-elements q)) p = distinction-pair-of-distinct-elements q ( is-injective-is-equiv (is-equiv-map-inv-equiv e) p) is-section-map-inv-equiv-pair-of-distinct-elements : (q : pair-of-distinct-elements B) → ( map-equiv-pair-of-distinct-elements ( map-inv-equiv-pair-of-distinct-elements q)) = ( q) is-section-map-inv-equiv-pair-of-distinct-elements q = eq-Eq-pair-of-distinct-elements ( is-section-map-inv-equiv e (first-pair-of-distinct-elements q)) ( is-section-map-inv-equiv e (second-pair-of-distinct-elements q)) is-retraction-map-inv-equiv-pair-of-distinct-elements : (p : pair-of-distinct-elements A) → ( map-inv-equiv-pair-of-distinct-elements ( map-equiv-pair-of-distinct-elements p)) = ( p) is-retraction-map-inv-equiv-pair-of-distinct-elements p = eq-Eq-pair-of-distinct-elements ( is-retraction-map-inv-equiv e (first-pair-of-distinct-elements p)) ( is-retraction-map-inv-equiv e (second-pair-of-distinct-elements p)) is-equiv-map-equiv-pair-of-distinct-elements : is-equiv map-equiv-pair-of-distinct-elements is-equiv-map-equiv-pair-of-distinct-elements = is-equiv-is-invertible map-inv-equiv-pair-of-distinct-elements is-section-map-inv-equiv-pair-of-distinct-elements is-retraction-map-inv-equiv-pair-of-distinct-elements equiv-pair-of-distinct-elements : pair-of-distinct-elements A ≃ pair-of-distinct-elements B pr1 equiv-pair-of-distinct-elements = map-equiv-pair-of-distinct-elements pr2 equiv-pair-of-distinct-elements = is-equiv-map-equiv-pair-of-distinct-elements ``` ### Embeddings map pairs of distinct elements to pairs of distinct elements ```agda module _ {l1 l2 : Level} {A : UU l1} {B : UU l2} (e : A ↪ B) where emb-pair-of-distinct-elements : pair-of-distinct-elements A ↪ pair-of-distinct-elements B emb-pair-of-distinct-elements = emb-Σ ( λ x → Σ B (λ y → x ≠ y)) ( e) ( λ x → emb-Σ ( λ y → map-emb e x ≠ y) ( e) ( λ _ → emb-equiv (equiv-neg (equiv-ap-emb e)))) map-emb-pair-of-distinct-elements : pair-of-distinct-elements A → pair-of-distinct-elements B map-emb-pair-of-distinct-elements = map-emb emb-pair-of-distinct-elements is-emb-map-emb-pair-of-distinct-elements : is-emb map-emb-pair-of-distinct-elements is-emb-map-emb-pair-of-distinct-elements = is-emb-map-emb emb-pair-of-distinct-elements ```