# Equivalences of spans ```agda module foundation.equivalences-spans where ``` <details><summary>Imports</summary> ```agda open import foundation.cartesian-product-types open import foundation.commuting-squares-of-maps open import foundation.dependent-pair-types open import foundation.functoriality-dependent-pair-types open import foundation.fundamental-theorem-of-identity-types open import foundation.homotopy-induction open import foundation.morphisms-spans open import foundation.spans open import foundation.structure-identity-principle open import foundation.type-arithmetic-dependent-pair-types open import foundation.univalence open import foundation.universe-levels open import foundation-core.commuting-triangles-of-maps 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.operations-spans open import foundation-core.torsorial-type-families ``` </details> ## Idea A {{#concept "equivalence of spans" Agda=equiv-span}} from a [span](foundation.spans.md) `A <-f- S -g-> B` to a span `A <-h- T -k-> B` consists of an [equivalence](foundation-core.equivalences.md) `w : S ≃ T` [equipped](foundation.structure.md) with two [homotopies](foundation-core.homotopies.md) witnessing that the diagram ```text S / | \ f / | \ h ∨ | ∨ A |w B ∧ | ∧ h \ | / k \ ∨ / T ``` [commutes](foundation.commuting-triangles-of-maps.md). ## Definitions ### The predicate of being an equivalence of spans ```agda module _ {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} (s : span l3 A B) (t : span l4 A B) where is-equiv-hom-span : hom-span s t → UU (l3 ⊔ l4) is-equiv-hom-span f = is-equiv (map-hom-span s t f) ``` ### Equivalences of spans ```agda module _ {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} (s : span l3 A B) (t : span l4 A B) where left-coherence-equiv-span : (spanning-type-span s ≃ spanning-type-span t) → UU (l1 ⊔ l3) left-coherence-equiv-span e = left-coherence-hom-span s t (map-equiv e) right-coherence-equiv-span : (spanning-type-span s ≃ spanning-type-span t) → UU (l2 ⊔ l3) right-coherence-equiv-span e = right-coherence-hom-span s t (map-equiv e) coherence-equiv-span : (spanning-type-span s ≃ spanning-type-span t) → UU (l1 ⊔ l2 ⊔ l3) coherence-equiv-span e = coherence-hom-span s t (map-equiv e) equiv-span : UU (l1 ⊔ l2 ⊔ l3 ⊔ l4) equiv-span = Σ ( spanning-type-span s ≃ spanning-type-span t) coherence-equiv-span equiv-equiv-span : equiv-span → spanning-type-span s ≃ spanning-type-span t equiv-equiv-span = pr1 map-equiv-span : equiv-span → spanning-type-span s → spanning-type-span t map-equiv-span e = map-equiv (equiv-equiv-span e) left-triangle-equiv-span : (e : equiv-span) → left-coherence-hom-span s t (map-equiv-span e) left-triangle-equiv-span e = pr1 (pr2 e) right-triangle-equiv-span : (e : equiv-span) → right-coherence-hom-span s t (map-equiv-span e) right-triangle-equiv-span e = pr2 (pr2 e) hom-equiv-span : equiv-span → hom-span s t pr1 (hom-equiv-span e) = map-equiv-span e pr1 (pr2 (hom-equiv-span e)) = left-triangle-equiv-span e pr2 (pr2 (hom-equiv-span e)) = right-triangle-equiv-span e is-equiv-equiv-span : (e : equiv-span) → is-equiv-hom-span s t (hom-equiv-span e) is-equiv-equiv-span e = is-equiv-map-equiv (equiv-equiv-span e) compute-equiv-span : Σ (hom-span s t) (is-equiv-hom-span s t) ≃ equiv-span compute-equiv-span = equiv-right-swap-Σ ``` ### The identity equivalence on a span ```agda module _ {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} where id-equiv-span : (s : span l3 A B) → equiv-span s s pr1 (id-equiv-span s) = id-equiv pr1 (pr2 (id-equiv-span s)) = refl-htpy pr2 (pr2 (id-equiv-span s)) = refl-htpy ``` ## Properties ### Extensionality of spans Equality of spans is equivalent to equivalences of spans. ```agda module _ {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} where equiv-eq-span : (s t : span l3 A B) → s = t → equiv-span s t equiv-eq-span s .s refl = id-equiv-span s is-torsorial-equiv-span : (s : span l3 A B) → is-torsorial (equiv-span s) is-torsorial-equiv-span s = is-torsorial-Eq-structure ( is-torsorial-equiv (spanning-type-span s)) ( spanning-type-span s , id-equiv) ( is-torsorial-Eq-structure ( is-torsorial-htpy (left-map-span s)) ( left-map-span s , refl-htpy) ( is-torsorial-htpy (right-map-span s))) is-equiv-equiv-eq-span : (c d : span l3 A B) → is-equiv (equiv-eq-span c d) is-equiv-equiv-eq-span c = fundamental-theorem-id (is-torsorial-equiv-span c) (equiv-eq-span c) extensionality-span : (c d : span l3 A B) → (c = d) ≃ (equiv-span c d) pr1 (extensionality-span c d) = equiv-eq-span c d pr2 (extensionality-span c d) = is-equiv-equiv-eq-span c d eq-equiv-span : (c d : span l3 A B) → equiv-span c d → c = d eq-equiv-span c d = map-inv-equiv (extensionality-span c d) ```