# Operations on span diagrams ```agda module foundation.operations-span-diagrams where open import foundation-core.operations-span-diagrams public ``` <details><summary>Imports</summary> ```agda open import foundation.dependent-pair-types open import foundation.equivalences-arrows open import foundation.operations-spans open import foundation.span-diagrams open import foundation.spans open import foundation.universe-levels ``` </details> ## Idea This file contains some further operations on [span diagrams](foundation.span-diagrams.md) that produce new span diagrams from given span diagrams and possibly other data. Previous operations on span diagrams were defined in [`foundation-core.operations-span-diagrams`](foundation-core.operations-span-diagrams.md). ## Definitions ### Concatenating span diagrams and equivalences of arrows on the left Consider a span diagram `𝒮` given by ```text f g A <----- S -----> B ``` and an [equivalence of arrows](foundation.equivalences-arrows.md) `h : equiv-arrow f' f` as indicated in the diagram ```text f' A' <---- S' | | h₀ | ≃ ≃ | h₁ ∨ ∨ A <----- S -----> B. f g ``` Then we obtain a span diagram `A' <- S' -> B`. ```agda module _ {l1 l2 l3 l4 l5 : Level} (𝒮 : span-diagram l1 l2 l3) {S' : UU l4} {A' : UU l5} (f' : S' → A') (h : equiv-arrow f' (left-map-span-diagram 𝒮)) where domain-left-concat-equiv-arrow-span-diagram : UU l5 domain-left-concat-equiv-arrow-span-diagram = A' codomain-left-concat-equiv-arrow-span-diagram : UU l2 codomain-left-concat-equiv-arrow-span-diagram = codomain-span-diagram 𝒮 span-left-concat-equiv-arrow-span-diagram : span l4 ( domain-left-concat-equiv-arrow-span-diagram) ( codomain-left-concat-equiv-arrow-span-diagram) span-left-concat-equiv-arrow-span-diagram = left-concat-equiv-arrow-span (span-span-diagram 𝒮) f' h left-concat-equiv-arrow-span-diagram : span-diagram l5 l2 l4 pr1 left-concat-equiv-arrow-span-diagram = domain-left-concat-equiv-arrow-span-diagram pr1 (pr2 left-concat-equiv-arrow-span-diagram) = codomain-left-concat-equiv-arrow-span-diagram pr2 (pr2 left-concat-equiv-arrow-span-diagram) = span-left-concat-equiv-arrow-span-diagram spanning-type-left-concat-equiv-arrow-span-diagram : UU l4 spanning-type-left-concat-equiv-arrow-span-diagram = spanning-type-span-diagram left-concat-equiv-arrow-span-diagram left-map-left-concat-equiv-arrow-span-diagram : spanning-type-left-concat-equiv-arrow-span-diagram → domain-left-concat-equiv-arrow-span-diagram left-map-left-concat-equiv-arrow-span-diagram = left-map-span-diagram left-concat-equiv-arrow-span-diagram right-map-left-concat-equiv-arrow-span-diagram : spanning-type-left-concat-equiv-arrow-span-diagram → codomain-left-concat-equiv-arrow-span-diagram right-map-left-concat-equiv-arrow-span-diagram = right-map-span-diagram left-concat-equiv-arrow-span-diagram ``` ### Concatenating span diagrams and equivalences of arrows on the right Consider a span diagram `𝒮` given by ```text f g A <----- S -----> B ``` and a [equivalence of arrows](foundation.equivalences-arrows.md) `h : equiv-arrow g' g` as indicated in the diagram ```text g' S' ----> B' | | h₀ | ≃ ≃ | h₁ ∨ ∨ A <----- S -----> B. f g ``` Then we obtain a span diagram `A <- S' -> B'`. ```agda module _ {l1 l2 l3 l4 l5 : Level} (𝒮 : span-diagram l1 l2 l3) {S' : UU l4} {B' : UU l5} (g' : S' → B') (h : equiv-arrow g' (right-map-span-diagram 𝒮)) where domain-right-concat-equiv-arrow-span-diagram : UU l1 domain-right-concat-equiv-arrow-span-diagram = domain-span-diagram 𝒮 codomain-right-concat-equiv-arrow-span-diagram : UU l5 codomain-right-concat-equiv-arrow-span-diagram = B' span-right-concat-equiv-arrow-span-diagram : span l4 ( domain-right-concat-equiv-arrow-span-diagram) ( codomain-right-concat-equiv-arrow-span-diagram) span-right-concat-equiv-arrow-span-diagram = right-concat-equiv-arrow-span (span-span-diagram 𝒮) g' h right-concat-equiv-arrow-span-diagram : span-diagram l1 l5 l4 pr1 right-concat-equiv-arrow-span-diagram = domain-right-concat-equiv-arrow-span-diagram pr1 (pr2 right-concat-equiv-arrow-span-diagram) = codomain-right-concat-equiv-arrow-span-diagram pr2 (pr2 right-concat-equiv-arrow-span-diagram) = span-right-concat-equiv-arrow-span-diagram spanning-type-right-concat-equiv-arrow-span-diagram : UU l4 spanning-type-right-concat-equiv-arrow-span-diagram = spanning-type-span-diagram right-concat-equiv-arrow-span-diagram left-map-right-concat-equiv-arrow-span-diagram : spanning-type-right-concat-equiv-arrow-span-diagram → domain-right-concat-equiv-arrow-span-diagram left-map-right-concat-equiv-arrow-span-diagram = left-map-span-diagram right-concat-equiv-arrow-span-diagram right-map-right-concat-equiv-arrow-span-diagram : spanning-type-right-concat-equiv-arrow-span-diagram → codomain-right-concat-equiv-arrow-span-diagram right-map-right-concat-equiv-arrow-span-diagram = right-map-span-diagram right-concat-equiv-arrow-span-diagram ```