# Codiagonals of maps
```agda
module synthetic-homotopy-theory.codiagonals-of-maps where
```
<details><summary>Imports</summary>
```agda
open import foundation.contractible-types
open import foundation.dependent-pair-types
open import foundation.equivalences
open import foundation.fibers-of-maps
open import foundation.function-types
open import foundation.homotopies
open import foundation.torsorial-type-families
open import foundation.unit-type
open import foundation.universe-levels
open import synthetic-homotopy-theory.cocones-under-spans
open import synthetic-homotopy-theory.pushouts
open import synthetic-homotopy-theory.suspension-structures
open import synthetic-homotopy-theory.suspensions-of-types
open import synthetic-homotopy-theory.universal-property-pushouts
```
</details>
## Idea
The **codiagonal** of a map `f : A → B` is the unique map `∇ f : B ⊔_A B → B`
equipped with [homotopies](foundation-core.homotopies.md)
```text
H : ∇ f ∘ inl ~ id
K : ∇ f ∘ inr ~ id
L : (H ·r f) ~ (∇ f ·l glue) ∙h (K ·r f)
```
The [fibers](foundation-core.fibers-of-maps.md) of the codiagonal are equivalent
to the [suspensions](synthetic-homotopy-theory.suspensions-of-types.md) of the
fibers of `f`.
## Definitions
### The codiagonal of a map
```agda
module _
{l1 l2 : Level} {A : UU l1} {B : UU l2} (f : A → B)
where
cocone-codiagonal-map : cocone f f B
pr1 cocone-codiagonal-map = id
pr1 (pr2 cocone-codiagonal-map) = id
pr2 (pr2 cocone-codiagonal-map) = refl-htpy
codiagonal-map : pushout f f → B
codiagonal-map = cogap f f cocone-codiagonal-map
compute-inl-codiagonal-map :
codiagonal-map ∘ inl-pushout f f ~ id
compute-inl-codiagonal-map =
compute-inl-cogap f f cocone-codiagonal-map
compute-inr-codiagonal-map :
codiagonal-map ∘ inr-pushout f f ~ id
compute-inr-codiagonal-map =
compute-inr-cogap f f cocone-codiagonal-map
compute-glue-codiagonal-map :
statement-coherence-htpy-cocone f f
( cocone-map f f (cocone-pushout f f) codiagonal-map)
( cocone-codiagonal-map)
( compute-inl-codiagonal-map)
( compute-inr-codiagonal-map)
compute-glue-codiagonal-map =
compute-glue-cogap f f cocone-codiagonal-map
```
## Properties
### The codiagonal is the fiberwise suspension
```agda
module _
{l1 l2 : Level} {A : UU l1} {B : UU l2} (f : A → B) (b : B)
where
universal-property-suspension-cocone-fiber :
{l : Level} →
Σ ( cocone
( terminal-map (fiber f b))
( terminal-map (fiber f b))
( fiber (codiagonal-map f) b))
( universal-property-pushout-Level l
( terminal-map (fiber f b))
( terminal-map (fiber f b)))
universal-property-suspension-cocone-fiber =
universal-property-pushout-cogap-fiber-up-to-equiv f f
( cocone-codiagonal-map f)
( b)
( fiber f b)
( unit)
( unit)
( inv-equiv
( terminal-map (fiber id b) ,
( is-equiv-terminal-map-is-contr (is-torsorial-Id' b))))
( inv-equiv
( terminal-map (fiber id b) ,
( is-equiv-terminal-map-is-contr (is-torsorial-Id' b))))
( id-equiv)
( terminal-map (fiber f b))
( terminal-map (fiber f b))
( λ _ → eq-is-contr (is-torsorial-Id' b))
( λ _ → eq-is-contr (is-torsorial-Id' b))
suspension-cocone-fiber :
suspension-cocone (fiber f b) (fiber (codiagonal-map f) b)
suspension-cocone-fiber =
pr1 (universal-property-suspension-cocone-fiber {lzero})
universal-property-suspension-fiber :
universal-property-pushout
( terminal-map (fiber f b))
( terminal-map (fiber f b))
( suspension-cocone-fiber)
universal-property-suspension-fiber =
pr2 universal-property-suspension-cocone-fiber
fiber-codiagonal-map-suspension-fiber :
suspension (fiber f b) → fiber (codiagonal-map f) b
fiber-codiagonal-map-suspension-fiber =
cogap-suspension' suspension-cocone-fiber
is-equiv-fiber-codiagonal-map-suspension-fiber :
is-equiv fiber-codiagonal-map-suspension-fiber
is-equiv-fiber-codiagonal-map-suspension-fiber =
is-equiv-up-pushout-up-pushout
( terminal-map (fiber f b))
( terminal-map (fiber f b))
( cocone-suspension (fiber f b))
( suspension-cocone-fiber)
( cogap-suspension' (suspension-cocone-fiber))
( htpy-cocone-map-universal-property-pushout
( terminal-map (fiber f b))
( terminal-map (fiber f b))
( cocone-suspension (fiber f b))
( up-suspension' (fiber f b))
( suspension-cocone-fiber))
( up-suspension' (fiber f b))
( universal-property-suspension-fiber)
equiv-fiber-codiagonal-map-suspension-fiber :
suspension (fiber f b) ≃ fiber (codiagonal-map f) b
pr1 equiv-fiber-codiagonal-map-suspension-fiber =
fiber-codiagonal-map-suspension-fiber
pr2 equiv-fiber-codiagonal-map-suspension-fiber =
is-equiv-fiber-codiagonal-map-suspension-fiber
```