The recursion principle of pushouts

Content created by Fredrik Bakke.

Created on 2024-04-19.

module synthetic-homotopy-theory.recursion-principle-pushouts where

Imports
open import foundation.dependent-pair-types
open import foundation.identity-types
open import foundation.sections
open import foundation.universe-levels

open import synthetic-homotopy-theory.cocones-under-spans
open import synthetic-homotopy-theory.dependent-cocones-under-spans


Idea

The recursion principle of pushouts asserts that for every type Y and cocone on a type X, the cocone map

  cocone-map f g c Y : (X → Y) → cocone f g Y


has a section.

Definition

The recursion principle of pushouts

recursion-principle-pushout :
{ l1 l2 l3 l4 : Level} →
{ S : UU l1} {A : UU l2} {B : UU l3} {X : UU l4} →
( f : S → A) (g : S → B) (c : cocone f g X) →
UUω
recursion-principle-pushout f g c =
{l : Level} {Y : UU l} → section (cocone-map f g {Y = Y} c)

module _
{ l1 l2 l3 l4 l : Level} {S : UU l1} {A : UU l2} {B : UU l3} {X : UU l4}
( f : S → A) (g : S → B) (c : cocone f g X)
( rec-c : recursion-principle-pushout f g c)
( Y : UU l)
where

rec-recursion-principle-pushout : cocone f g Y → X → Y
rec-recursion-principle-pushout = pr1 rec-c

compute-rec-recursion-principle-pushout :
(h : cocone f g Y) →
htpy-cocone f g
( cocone-map f g c (rec-recursion-principle-pushout h))
( h)
compute-rec-recursion-principle-pushout h =
htpy-eq-cocone f g
( cocone-map f g c (rec-recursion-principle-pushout h))
( h)
( pr2 rec-c h)

compute-horizontal-map-rec-recursion-principle-pushout :
( h : cocone f g Y) (a : A) →
rec-recursion-principle-pushout h (horizontal-map-cocone f g c a) ＝
horizontal-map-cocone f g h a
compute-horizontal-map-rec-recursion-principle-pushout h =
pr1 (compute-rec-recursion-principle-pushout h)

compute-vertical-map-rec-recursion-principle-pushout :
( h : cocone f g Y) (b : B) →
rec-recursion-principle-pushout h (vertical-map-cocone f g c b) ＝
vertical-map-cocone f g h b
compute-vertical-map-rec-recursion-principle-pushout h =
pr1 (pr2 (compute-rec-recursion-principle-pushout h))

compute-glue-rec-recursion-principle-pushout :
(h : cocone f g Y) →
statement-coherence-htpy-cocone f g
( cocone-map f g c (rec-recursion-principle-pushout h))
( h)
( compute-horizontal-map-rec-recursion-principle-pushout h)
( compute-vertical-map-rec-recursion-principle-pushout h)
compute-glue-rec-recursion-principle-pushout h =
pr2 (pr2 (compute-rec-recursion-principle-pushout h))