Pushouts of pointed types

module synthetic-homotopy-theory.pushouts-of-pointed-types where
Imports
open import foundation.dependent-pair-types
open import foundation.identity-types
open import foundation.universe-levels

open import structured-types.pointed-maps
open import structured-types.pointed-types

open import synthetic-homotopy-theory.cocones-under-spans-of-pointed-types
open import synthetic-homotopy-theory.pushouts

Idea

Given a span of pointed maps, then the pushout is in fact a pushout diagram in the category of pointed types.

Definition

module _
  {l1 l2 l3 : Level}
  {S : Pointed-Type l1} {A : Pointed-Type l2} {B : Pointed-Type l3}
  where

  pushout-Pointed-Type :
    (f : S →∗ A) (g : S →∗ B)  Pointed-Type (l1  l2  l3)
  pr1 (pushout-Pointed-Type f g) =
    pushout (map-pointed-map S A f) (map-pointed-map S B g)
  pr2 (pushout-Pointed-Type f g) =
    inl-pushout
      ( map-pointed-map S A f)
      ( map-pointed-map S B g)
      ( point-Pointed-Type A)

Properties

The pushout of a pointed map along a pointed map is pointed

module _
  {l1 l2 l3 : Level}
  {S : Pointed-Type l1} {A : Pointed-Type l2} {B : Pointed-Type l3}
  where

  inl-pushout-Pointed-Type :
      (f : S →∗ A) (g : S →∗ B)  A →∗ pushout-Pointed-Type f g
  pr1 (inl-pushout-Pointed-Type f g) =
    inl-pushout (map-pointed-map S A f) (map-pointed-map S B g)
  pr2 (inl-pushout-Pointed-Type f g) = refl

  inr-pushout-Pointed-Type :
      (f : S →∗ A) (g : S →∗ B)  B →∗ pushout-Pointed-Type f g
  pr1 (inr-pushout-Pointed-Type f g) =
    inr-pushout (map-pointed-map S A f) (map-pointed-map S B g)
  pr2 (inr-pushout-Pointed-Type f g) =
      ( ( ap
          ( inr-pushout (map-pointed-map S A f) (map-pointed-map S B g))
          ( inv (preserves-point-pointed-map S B g))) 
        ( inv
          ( glue-pushout
            ( map-pointed-map S A f)
            ( map-pointed-map S B g)
            ( point-Pointed-Type S)))) 
      ( ap
        ( inl-pushout (map-pointed-map S A f) (map-pointed-map S B g))
        ( preserves-point-pointed-map S A f))

The cogap map for pushouts of pointed types

module _
  {l1 l2 l3 : Level}
  {S : Pointed-Type l1} {A : Pointed-Type l2} {B : Pointed-Type l3}
  where

  map-cogap-Pointed-Type :
    {l4 : Level}
    (f : S →∗ A) (g : S →∗ B) 
    {X : Pointed-Type l4} 
    type-cocone-Pointed-Type f g X 
    type-Pointed-Type (pushout-Pointed-Type f g)  type-Pointed-Type X
  map-cogap-Pointed-Type f g c =
    cogap
      ( map-pointed-map S A f)
      ( map-pointed-map S B g)
      ( cocone-type-cocone-Pointed-Type f g c)

  cogap-Pointed-Type :
    {l4 : Level}
    (f : S →∗ A) (g : S →∗ B) 
    {X : Pointed-Type l4} 
    type-cocone-Pointed-Type f g X  pushout-Pointed-Type f g →∗ X
  pr1 (cogap-Pointed-Type f g c) = map-cogap-Pointed-Type f g c
  pr2 (cogap-Pointed-Type f g {X} c) =
    ( compute-inl-cogap
      ( map-pointed-map S A f)
      ( map-pointed-map S B g)
      ( cocone-type-cocone-Pointed-Type f g c)
      ( point-Pointed-Type A)) 
    ( preserves-point-pointed-map A X
      ( horizontal-pointed-map-cocone-Pointed-Type f g c))