# Transposing identifications along retractions ```agda module foundation.transposition-identifications-along-retractions where ``` <details><summary> ```agda open import foundation.action-on-identifications-functions open import foundation.dependent-pair-types open import foundation.function-extensionality open import foundation.universe-levels open import foundation-core.equivalences open import foundation-core.function-types open import foundation-core.homotopies open import foundation-core.identity-types open import foundation-core.retractions ``` </details> ## Idea Consider a map `f : A → B` and a map `g : B → A` in the converse direction. Then there is an [equivalence](foundation-core.equivalences.md) ```text is-retraction f g ≃ ((x : A) (y : B) → (f x = y) ≃ (x = g y)) ``` In other words, any [retracting homotopy](foundation-core.retractions.md) `g ∘ f ~ id` induces a unique family of {{#concept "transposition" Disambiguation="identifications along retractions" Agda=eq-transpose-is-retraction}} maps ```text f x = y → x = g y ``` indexed by `x : A` and `y : B`. ## Definitions ### Transposing identifications along retractions ```agda module _ {l1 l2 : Level} {A : UU l1} {B : UU l2} (f : A → B) (g : B → A) where eq-transpose-is-retraction : is-retraction f g → {x : B} {y : A} → x = f y → g x = y eq-transpose-is-retraction H {x} {y} p = ap g p ∙ H y eq-transpose-is-retraction' : is-retraction f g → {x : A} {y : B} → f x = y → x = g y eq-transpose-is-retraction' H {x} refl = inv (H x) ``` ## Properties ### The map that assings to each retracting homotopy a family of transposition functions of identifications is an equivalence ```agda module _ {l1 l2 : Level} {A : UU l1} {B : UU l2} (f : A → B) (g : B → A) where is-retraction-eq-transpose : ({x : B} {y : A} → x = f y → g x = y) → is-retraction f g is-retraction-eq-transpose H x = H refl is-retraction-eq-transpose' : ({x : A} {y : B} → f x = y → x = g y) → is-retraction f g is-retraction-eq-transpose' H x = inv (H refl) is-retraction-is-retraction-eq-transpose : is-retraction-eq-transpose ∘ eq-transpose-is-retraction f g ~ id is-retraction-is-retraction-eq-transpose H = refl htpy-is-section-is-retraction-eq-transpose : (H : {x : B} {y : A} → x = f y → g x = y) (x : B) (y : A) → eq-transpose-is-retraction f g (is-retraction-eq-transpose H) {x} {y} ~ H {x} {y} htpy-is-section-is-retraction-eq-transpose H x y refl = refl abstract is-section-is-retraction-eq-transpose : eq-transpose-is-retraction f g ∘ is-retraction-eq-transpose ~ id is-section-is-retraction-eq-transpose H = eq-htpy-implicit ( λ x → eq-htpy-implicit ( λ y → eq-htpy (htpy-is-section-is-retraction-eq-transpose H x y))) is-equiv-eq-transpose-is-retraction : is-equiv (eq-transpose-is-retraction f g) is-equiv-eq-transpose-is-retraction = is-equiv-is-invertible ( is-retraction-eq-transpose) ( is-section-is-retraction-eq-transpose) ( is-retraction-is-retraction-eq-transpose) equiv-eq-transpose-is-retraction : is-retraction f g ≃ ({x : B} {y : A} → x = f y → g x = y) equiv-eq-transpose-is-retraction = ( eq-transpose-is-retraction f g , is-equiv-eq-transpose-is-retraction) ```