Pushouts
module synthetic-homotopy-theory.pushouts where
Imports
open import foundation.dependent-pair-types open import foundation.equivalences open import foundation.functions open import foundation.homotopies open import foundation.identity-types open import foundation.universe-levels open import synthetic-homotopy-theory.cocones-under-spans open import synthetic-homotopy-theory.universal-property-pushouts
Postulates
postulate pushout : {l1 l2 l3 : Level} {S : UU l1} {A : UU l2} {B : UU l3} (f : S → A) (g : S → B) → UU (l1 ⊔ l2 ⊔ l3) postulate inl-pushout : {l1 l2 l3 : Level} {S : UU l1} {A : UU l2} {B : UU l3} (f : S → A) (g : S → B) → A → pushout f g postulate inr-pushout : {l1 l2 l3 : Level} {S : UU l1} {A : UU l2} {B : UU l3} (f : S → A) (g : S → B) → B → pushout f g postulate glue-pushout : {l1 l2 l3 : Level} {S : UU l1} {A : UU l2} {B : UU l3} (f : S → A) (g : S → B) → ((inl-pushout f g) ∘ f) ~ ((inr-pushout f g) ∘ g) cocone-pushout : {l1 l2 l3 : Level} {S : UU l1} {A : UU l2} {B : UU l3} (f : S → A) (g : S → B) → cocone f g (pushout f g) pr1 (cocone-pushout f g) = inl-pushout f g pr1 (pr2 (cocone-pushout f g)) = inr-pushout f g pr2 (pr2 (cocone-pushout f g)) = glue-pushout f g postulate up-pushout : {l1 l2 l3 l4 : Level} {S : UU l1} {A : UU l2} {B : UU l3} (f : S → A) (g : S → B) → universal-property-pushout l4 f g (cocone-pushout f g) equiv-up-pushout : {l1 l2 l3 l4 : Level} {S : UU l1} {A : UU l2} {B : UU l3} (f : S → A) (g : S → B) (X : UU l4) → (pushout f g → X) ≃ (cocone f g X) pr1 (equiv-up-pushout f g X) = cocone-map f g (cocone-pushout f g) pr2 (equiv-up-pushout f g X) = up-pushout f g X
Definitions
The cogap map
cogap : { l1 l2 l3 l4 : Level} {S : UU l1} {A : UU l2} {B : UU l3} ( f : S → A) (g : S → B) → { X : UU l4} → cocone f g X → pushout f g → X cogap f g {X} = map-inv-equiv (equiv-up-pushout f g X)
The is-pushout
predicate
is-pushout : { l1 l2 l3 l4 : Level} {S : UU l1} {A : UU l2} {B : UU l3} ( f : S → A) (g : S → B) {X : UU l4} (c : cocone f g X) → UU (l1 ⊔ l2 ⊔ l3 ⊔ l4) is-pushout f g c = is-equiv (cogap f g c)
Properties
Computation with the cogap map
compute-inl-cogap : { l1 l2 l3 l4 : Level} {S : UU l1} {A : UU l2} {B : UU l3} ( f : S → A) (g : S → B) → { X : UU l4} (c : cocone f g X) ( a : A) → cogap f g c (inl-pushout f g a) = horizontal-map-cocone f g c a compute-inl-cogap f g c = pr1 ( htpy-cocone-map-universal-property-pushout ( f) ( g) ( cocone-pushout f g) ( up-pushout f g) ( c)) compute-inr-cogap : { l1 l2 l3 l4 : Level} {S : UU l1} {A : UU l2} {B : UU l3} ( f : S → A) (g : S → B) → { X : UU l4} (c : cocone f g X) ( b : B) → cogap f g c (inr-pushout f g b) = vertical-map-cocone f g c b compute-inr-cogap f g c = pr1 ( pr2 ( htpy-cocone-map-universal-property-pushout ( f) ( g) ( cocone-pushout f g) ( up-pushout f g) ( c))) compute-glue-cogap : { l1 l2 l3 l4 : Level} {S : UU l1} {A : UU l2} {B : UU l3} ( f : S → A) (g : S → B) → { X : UU l4} (c : cocone f g X) ( s : S) → ( ap (cogap f g c) (glue-pushout f g s)) = ( ( compute-inl-cogap f g c (f s) ∙ coherence-square-cocone f g c s) ∙ ( inv (compute-inr-cogap f g c (g s)))) compute-glue-cogap f g c s = con-inv ( ap (cogap f g c) (glue-pushout f g s)) ( compute-inr-cogap f g c (g s)) ( compute-inl-cogap f g c (f s) ∙ coherence-square-cocone f g c s) ( pr2 ( pr2 ( htpy-cocone-map-universal-property-pushout ( f) ( g) ( cocone-pushout f g) ( up-pushout f g) ( c))) ( s))