# Equivalences of span diagrams

```agda
module foundation.equivalences-span-diagrams where
```

<details><summary>Imports</summary>

```agda
open import foundation.cartesian-product-types
open import foundation.dependent-pair-types
open import foundation.equivalences
open import foundation.equivalences-arrows
open import foundation.equivalences-spans
open import foundation.fundamental-theorem-of-identity-types
open import foundation.morphisms-span-diagrams
open import foundation.morphisms-spans
open import foundation.operations-spans
open import foundation.propositions
open import foundation.span-diagrams
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-squares-of-maps
open import foundation-core.functoriality-dependent-pair-types
open import foundation-core.identity-types
open import foundation-core.torsorial-type-families
```

</details>

## Idea

An {{#concept "equivalence of span diagrams" Agda=equiv-span-diagram}} from a
[span diagram](foundation.span-diagrams.md) `A <-f- S -g-> B` to a span diagram
`C <-h- T -k-> D` consists of [equivalences](foundation-core.equivalences.md)
`u : A ≃ C`, `v : B ≃ D`, and `w : S ≃ T` [equipped](foundation.structure.md)
with two [homotopies](foundation-core.homotopies.md) witnessing that the diagram

```text
         f       g
    A <----- S -----> B
    |        |        |
  u |        | w      | v
    ∨        ∨        ∨
    C <----- T -----> D
         h       k
```

[commutes](foundation-core.commuting-squares-of-maps.md).

## Definitions

### The predicate of being an equivalence of span diagrams

```agda
module _
  {l1 l2 l3 l4 l5 l6 : Level}
  (𝒮 : span-diagram l1 l2 l3) (𝒯 : span-diagram l4 l5 l6)
  (f : hom-span-diagram 𝒮 𝒯)
  where

  is-equiv-prop-hom-span-diagram : Prop (l1  l2  l3  l4  l5  l6)
  is-equiv-prop-hom-span-diagram =
    product-Prop
      ( is-equiv-Prop (map-domain-hom-span-diagram 𝒮 𝒯 f))
      ( product-Prop
        ( is-equiv-Prop (map-codomain-hom-span-diagram 𝒮 𝒯 f))
        ( is-equiv-Prop (spanning-map-hom-span-diagram 𝒮 𝒯 f)))

  is-equiv-hom-span-diagram : UU (l1  l2  l3  l4  l5  l6)
  is-equiv-hom-span-diagram = type-Prop is-equiv-prop-hom-span-diagram

  is-prop-is-equiv-hom-span-diagram : is-prop is-equiv-hom-span-diagram
  is-prop-is-equiv-hom-span-diagram =
    is-prop-type-Prop is-equiv-prop-hom-span-diagram
```

### Equivalences of span diagrams

```agda
module _
  {l1 l2 l3 l4 l5 l6 : Level}
  (𝒮 : span-diagram l1 l2 l3) (𝒯 : span-diagram l4 l5 l6)
  where

  equiv-span-diagram : UU (l1  l2  l3  l4  l5  l6)
  equiv-span-diagram =
    Σ ( domain-span-diagram 𝒮  domain-span-diagram 𝒯)
      ( λ e 
        Σ ( codomain-span-diagram 𝒮  codomain-span-diagram 𝒯)
          ( λ f 
            equiv-span
              ( concat-span (span-span-diagram 𝒮) (map-equiv e) (map-equiv f))
              ( span-span-diagram 𝒯)))

  module _
    (e : equiv-span-diagram)
    where

    equiv-domain-equiv-span-diagram :
      domain-span-diagram 𝒮  domain-span-diagram 𝒯
    equiv-domain-equiv-span-diagram = pr1 e

    map-domain-equiv-span-diagram :
      domain-span-diagram 𝒮  domain-span-diagram 𝒯
    map-domain-equiv-span-diagram = map-equiv equiv-domain-equiv-span-diagram

    is-equiv-map-domain-equiv-span-diagram :
      is-equiv map-domain-equiv-span-diagram
    is-equiv-map-domain-equiv-span-diagram =
      is-equiv-map-equiv equiv-domain-equiv-span-diagram

    equiv-codomain-equiv-span-diagram :
      codomain-span-diagram 𝒮  codomain-span-diagram 𝒯
    equiv-codomain-equiv-span-diagram = pr1 (pr2 e)

    map-codomain-equiv-span-diagram :
      codomain-span-diagram 𝒮  codomain-span-diagram 𝒯
    map-codomain-equiv-span-diagram =
      map-equiv equiv-codomain-equiv-span-diagram

    is-equiv-map-codomain-equiv-span-diagram :
      is-equiv map-codomain-equiv-span-diagram
    is-equiv-map-codomain-equiv-span-diagram =
      is-equiv-map-equiv equiv-codomain-equiv-span-diagram

    equiv-span-equiv-span-diagram :
      equiv-span
        ( concat-span
          ( span-span-diagram 𝒮)
          ( map-domain-equiv-span-diagram)
          ( map-codomain-equiv-span-diagram))
        ( span-span-diagram 𝒯)
    equiv-span-equiv-span-diagram =
      pr2 (pr2 e)

    spanning-equiv-equiv-span-diagram :
      spanning-type-span-diagram 𝒮  spanning-type-span-diagram 𝒯
    spanning-equiv-equiv-span-diagram =
      equiv-equiv-span
        ( concat-span
          ( span-span-diagram 𝒮)
          ( map-domain-equiv-span-diagram)
          ( map-codomain-equiv-span-diagram))
        ( span-span-diagram 𝒯)
        ( equiv-span-equiv-span-diagram)

    spanning-map-equiv-span-diagram :
      spanning-type-span-diagram 𝒮  spanning-type-span-diagram 𝒯
    spanning-map-equiv-span-diagram =
      map-equiv-span
        ( concat-span
          ( span-span-diagram 𝒮)
          ( map-domain-equiv-span-diagram)
          ( map-codomain-equiv-span-diagram))
        ( span-span-diagram 𝒯)
        ( equiv-span-equiv-span-diagram)

    is-equiv-spanning-map-equiv-span-diagram :
      is-equiv spanning-map-equiv-span-diagram
    is-equiv-spanning-map-equiv-span-diagram =
      is-equiv-equiv-span
        ( concat-span
          ( span-span-diagram 𝒮)
          ( map-domain-equiv-span-diagram)
          ( map-codomain-equiv-span-diagram))
        ( span-span-diagram 𝒯)
        ( equiv-span-equiv-span-diagram)

    left-square-equiv-span-diagram :
      coherence-square-maps
        ( spanning-map-equiv-span-diagram)
        ( left-map-span-diagram 𝒮)
        ( left-map-span-diagram 𝒯)
        ( map-domain-equiv-span-diagram)
    left-square-equiv-span-diagram =
      left-triangle-equiv-span
        ( concat-span
          ( span-span-diagram 𝒮)
          ( map-domain-equiv-span-diagram)
          ( map-codomain-equiv-span-diagram))
        ( span-span-diagram 𝒯)
        ( equiv-span-equiv-span-diagram)

    equiv-left-arrow-equiv-span-diagram :
      equiv-arrow (left-map-span-diagram 𝒮) (left-map-span-diagram 𝒯)
    pr1 equiv-left-arrow-equiv-span-diagram =
      spanning-equiv-equiv-span-diagram
    pr1 (pr2 equiv-left-arrow-equiv-span-diagram) =
      equiv-domain-equiv-span-diagram
    pr2 (pr2 equiv-left-arrow-equiv-span-diagram) =
      left-square-equiv-span-diagram

    right-square-equiv-span-diagram :
      coherence-square-maps
        ( spanning-map-equiv-span-diagram)
        ( right-map-span-diagram 𝒮)
        ( right-map-span-diagram 𝒯)
        ( map-codomain-equiv-span-diagram)
    right-square-equiv-span-diagram =
      right-triangle-equiv-span
        ( concat-span
          ( span-span-diagram 𝒮)
          ( map-domain-equiv-span-diagram)
          ( map-codomain-equiv-span-diagram))
        ( span-span-diagram 𝒯)
        ( equiv-span-equiv-span-diagram)

    equiv-right-arrow-equiv-span-diagram :
      equiv-arrow (right-map-span-diagram 𝒮) (right-map-span-diagram 𝒯)
    pr1 equiv-right-arrow-equiv-span-diagram =
      spanning-equiv-equiv-span-diagram
    pr1 (pr2 equiv-right-arrow-equiv-span-diagram) =
      equiv-codomain-equiv-span-diagram
    pr2 (pr2 equiv-right-arrow-equiv-span-diagram) =
      right-square-equiv-span-diagram

    hom-span-equiv-span-diagram :
      hom-span
        ( concat-span
          ( span-span-diagram 𝒮)
          ( map-domain-equiv-span-diagram)
          ( map-codomain-equiv-span-diagram))
        ( span-span-diagram 𝒯)
    hom-span-equiv-span-diagram =
      hom-equiv-span
        ( concat-span
          ( span-span-diagram 𝒮)
          ( map-domain-equiv-span-diagram)
          ( map-codomain-equiv-span-diagram))
        ( span-span-diagram 𝒯)
        ( equiv-span-equiv-span-diagram)

    hom-equiv-span-diagram : hom-span-diagram 𝒮 𝒯
    pr1 hom-equiv-span-diagram = map-domain-equiv-span-diagram
    pr1 (pr2 hom-equiv-span-diagram) = map-codomain-equiv-span-diagram
    pr2 (pr2 hom-equiv-span-diagram) = hom-span-equiv-span-diagram

    is-equiv-equiv-span-diagram :
      is-equiv-hom-span-diagram 𝒮 𝒯 hom-equiv-span-diagram
    pr1 is-equiv-equiv-span-diagram =
      is-equiv-map-domain-equiv-span-diagram
    pr1 (pr2 is-equiv-equiv-span-diagram) =
      is-equiv-map-codomain-equiv-span-diagram
    pr2 (pr2 is-equiv-equiv-span-diagram) =
      is-equiv-spanning-map-equiv-span-diagram

    compute-equiv-span-diagram :
      Σ (hom-span-diagram 𝒮 𝒯) (is-equiv-hom-span-diagram 𝒮 𝒯) 
      equiv-span-diagram
    compute-equiv-span-diagram =
      ( equiv-tot
        ( λ e 
          ( equiv-tot
            ( λ f 
              compute-equiv-span
                ( concat-span
                  ( span-span-diagram 𝒮)
                  ( map-equiv e)
                  ( map-equiv f))
                ( span-span-diagram 𝒯))) ∘e
          ( interchange-Σ-Σ _))) ∘e
      ( interchange-Σ-Σ _)
```

### The identity equivalence of span diagrams

```agda
module _
  {l1 l2 l3 : Level} (𝒮 : span-diagram l1 l2 l3)
  where

  id-equiv-span-diagram : equiv-span-diagram 𝒮 𝒮
  pr1 id-equiv-span-diagram = id-equiv
  pr1 (pr2 id-equiv-span-diagram) = id-equiv
  pr2 (pr2 id-equiv-span-diagram) = id-equiv-span (span-span-diagram 𝒮)
```

## Properties

### Extensionality of span diagrams

Equality of span diagrams is equivalent to equivalences of span diagrams.

```agda
module _
  {l1 l2 l3 : Level} (𝒮 : span-diagram l1 l2 l3)
  where

  equiv-eq-span-diagram :
    (𝒯 : span-diagram l1 l2 l3)  𝒮  𝒯  equiv-span-diagram 𝒮 𝒯
  equiv-eq-span-diagram 𝒯 refl = id-equiv-span-diagram 𝒮

  is-torsorial-equiv-span-diagram :
    is-torsorial (equiv-span-diagram 𝒮)
  is-torsorial-equiv-span-diagram =
    is-torsorial-Eq-structure
      ( is-torsorial-equiv (domain-span-diagram 𝒮))
      ( domain-span-diagram 𝒮 , id-equiv)
      ( is-torsorial-Eq-structure
        ( is-torsorial-equiv (codomain-span-diagram 𝒮))
        ( codomain-span-diagram 𝒮 , id-equiv)
        ( is-torsorial-equiv-span (span-span-diagram 𝒮)))

  is-equiv-equiv-eq-span-diagram :
    (𝒯 : span-diagram l1 l2 l3)  is-equiv (equiv-eq-span-diagram 𝒯)
  is-equiv-equiv-eq-span-diagram =
    fundamental-theorem-id is-torsorial-equiv-span-diagram equiv-eq-span-diagram

  extensionality-span-diagram :
    (𝒯 : span-diagram l1 l2 l3)  (𝒮  𝒯)  equiv-span-diagram 𝒮 𝒯
  pr1 (extensionality-span-diagram 𝒯) = equiv-eq-span-diagram 𝒯
  pr2 (extensionality-span-diagram 𝒯) = is-equiv-equiv-eq-span-diagram 𝒯

  eq-equiv-span-diagram :
    (𝒯 : span-diagram l1 l2 l3)  equiv-span-diagram 𝒮 𝒯  𝒮  𝒯
  eq-equiv-span-diagram 𝒯 = map-inv-equiv (extensionality-span-diagram 𝒯)
```