{-# OPTIONS --without-K --rewriting #-}
open import HoTT
open import homotopy.elims.CofPushoutSection
module homotopy.CofiberComp {i j k} {X : Ptd i} {Y : Ptd j} {Z : Ptd k}
(f : X ⊙→ Z) (g : Y ⊙→ Z) where
module CofiberComp where
module H = ⊙WedgeRec f g
⊙h = H.⊙f; h = H.f
module IntoCod = CofiberRec {f = fst f} {C = de⊙ (⊙Cofiber ⊙h)}
cfbase
cfcod
(λ x → cfglue (winl x))
module Into = CofiberRec {f = fst (⊙cfcod' f ⊙∘ g)} {C = de⊙ (⊙Cofiber ⊙h)}
cfbase
IntoCod.f
(λ y → cfglue (winr y))
into = Into.f
out-glue : (w : X ∨ Y)
→ cfbase' (fst (⊙cfcod' f ⊙∘ g)) == cfcod (cfcod (h w))
out-glue = Wedge-elim
(λ x → (cfglue (pt Y)
∙ ! (ap (cfcod ∘ cfcod) (snd f ∙ ! (snd g)))
∙ ! (ap cfcod (cfglue (pt X))))
∙ ap cfcod (cfglue x))
cfglue
(↓-cst=app-from-square $
out-square-lemma
(cfglue (pt Y))
(ap (cfcod ∘ cfcod) (snd f ∙ ! (snd g)))
(ap cfcod (cfglue (pt X)))
⊡v∙ ! (ap-∘ (cfcod ∘ cfcod) h wglue
∙ ap (ap (cfcod ∘ cfcod)) H.glue-β))
where
out-square-lemma : ∀ {i} {A : Type i} {x y z w : A}
(p : x == y) (q : z == y) (r : w == z)
→ Square ((p ∙ ! q ∙ ! r) ∙ r) idp q p
out-square-lemma idp idp idp = ids
module Out = CofiberRec {C = de⊙ (⊙Cofiber (⊙cfcod' f ⊙∘ g))}
cfbase
(λ z → cfcod (cfcod z))
out-glue
out = Out.f
into-out : ∀ c → into (out c) == c
into-out = CofPushoutSection.elim {h = h} (λ _ → unit) (λ _ → idp)
idp
(λ _ → idp)
(↓-∘=idf-in' into out ∘ λ x →
ap (ap into) (Out.glue-β (winl x))
∙ lemma₁ into
(Into.glue-β (pt Y))
(ap-! into (ap (cfcod ∘ cfcod) (snd f ∙ ! (snd g)))
∙ ap ! (∘-ap into (cfcod ∘ cfcod) (snd f ∙ ! (snd g)))
∙ ap (! ∘ ap cfcod) (! H.glue-β)
∙ ap ! (∘-ap cfcod h wglue))
(ap-! into (ap cfcod (cfglue (pt X)))
∙ ap ! (∘-ap into cfcod (cfglue (pt X))
∙ IntoCod.glue-β (pt X)))
(∘-ap into cfcod (cfglue x) ∙ IntoCod.glue-β x)
∙ ap (λ w → w ∙ cfglue (winl x)) (lemma₂ cfglue wglue))
(↓-∘=idf-in' into out ∘ λ y →
ap (ap into) (Out.glue-β (winr y))
∙ Into.glue-β y)
where
lemma₁ : ∀ {i j} {A : Type i} {B : Type j} (f : A → B) {x y z u v : A}
{p : x == y} {q : y == z} {r : z == u} {s : u == v}
{p' : f x == f y} {q' : f y == f z} {r' : f z == f u} {s' : f u == f v}
(α : ap f p == p') (β : ap f q == q')
(γ : ap f r == r') (δ : ap f s == s')
→ ap f ((p ∙ q ∙ r) ∙ s) == (p' ∙ q' ∙ r') ∙ s'
lemma₁ f {p = idp} {q = idp} {r = idp} {s = idp} idp idp idp idp = idp
lemma₂ : ∀ {i j} {A : Type i} {B : Type j} {g : A → B} {b : B}
(p : ∀ a → b == g a) {x y : A} (q : x == y)
→ p y ∙ ! (ap g q) ∙ ! (p x) == idp
lemma₂ p {x} idp = !-inv-r (p x)
out-into : ∀ κ → out (into κ) == κ
out-into = Cofiber-elim
idp
out-into-cod
(↓-∘=idf-from-square out into ∘ vert-degen-square ∘ λ y →
ap (ap out) (Into.glue-β y)
∙ Out.glue-β (winr y))
where
lemma : ∀ {i} {A : Type i} {x y z : A} (p : x == y) (q : y == z)
→ Square p (p ∙ q) q idp
lemma idp idp = ids
out-into-cod : ∀ c → out (into (cfcod c)) == cfcod c
out-into-cod = Cofiber-elim
(cfglue (pt Y)
∙ ! (ap (cfcod ∘ cfcod) (snd f ∙ ! (snd g)))
∙ ! (ap cfcod (cfglue (pt X))))
(λ y → idp)
(↓-='-from-square ∘ λ x →
(ap-∘ out IntoCod.f (cfglue x)
∙ ap (ap out) (IntoCod.glue-β x)
∙ Out.glue-β (winl x))
∙v⊡ lemma _ _)
eq : de⊙ (⊙Cofiber (⊙cfcod' f ⊙∘ g)) ≃ de⊙ (⊙Cofiber ⊙h)
eq = equiv into out into-out out-into
⊙eq : ⊙Cofiber (⊙cfcod' f ⊙∘ g) ⊙≃ ⊙Cofiber ⊙h
⊙eq = ≃-to-⊙≃ eq idp