{-# OPTIONS --without-K --rewriting #-} open import HoTT open import homotopy.elims.Lemmas open import homotopy.elims.CofPushoutSection module homotopy.elims.SuspSmash {i j k} {X : Ptd i} {Y : Ptd j} {P : Susp (X ∧ Y) → Type k} (north* : P north) (south* : P south) (cod* : (s : de⊙ X × de⊙ Y) → north* == south* [ P ↓ merid (cfcod s) ]) where private base* = transport (λ κ → north* == south* [ P ↓ merid κ ]) (! (cfglue (winl (pt X)))) (cod* (pt X , pt Y)) coh* : (s : X ∧ Y) → north* == south* [ P ↓ merid s ] coh* = CofPushoutSection.elim (λ _ → tt) (λ _ → idp) base* (λ {(x , y) → (fst (fillX x) ∙ fst (fillY y)) ◃ fst fill0 ◃ cod* (x , y)}) (↓↓-from-squareover ∘ λ x → snd (fillX x) ↓⊡h∙ ap (λ p → p ◃ fst fill0 ◃ cod* (x , pt Y)) (! (ap (λ q → fst (fillX x) ∙ q) fillY-lemma ∙ ∙-unit-r _))) (↓↓-from-squareover ∘ λ y → snd (fillY y) ↓⊡h∙ ap (λ p → p ◃ fst fill0 ◃ cod* (pt X , y)) (! (ap (λ q → q ∙ fst (fillY y)) fillX-lemma))) where fill-lemma : (w : X ∨ Y) (α : north* == south* [ P ↓ merid (cfcod (∨-in-× X Y w)) ]) → Σ (north* == north*) (λ p → SquareOver P (natural-square merid (cfglue w)) base* (↓-ap-in _ _ (apd (λ _ → north*) (cfglue w))) (↓-ap-in _ _ (apd (λ _ → south*) (cfglue w))) (p ◃ α)) fill-lemma w α = fill-upper-right _ _ _ _ _ fill0 = fill-lemma (winl (pt X)) (cod* (pt X , pt Y)) fillX = λ x → fill-lemma (winl x) (fst fill0 ◃ cod* (x , pt Y)) fillY = λ y → fill-lemma (winr y) (fst fill0 ◃ cod* (pt X , y)) fillX-lemma : fst (fillX (pt X)) == idp fillX-lemma = ! $ fill-upper-right-unique _ _ _ _ _ idp (snd fill0 ↓⊡h∙ ! (idp◃ _)) fillY-lemma : fst (fillY (pt Y)) == idp fillY-lemma = ! $ fill-upper-right-unique _ _ _ _ _ idp (snd fill0 ↓⊡h∙ ! (idp◃ _)) ∙ ap (λ w → fst (fill-lemma w (fst fill0 ◃ cod* (∨-in-× X Y w)))) wglue susp-smash-elim : Π (Susp (X ∧ Y)) P susp-smash-elim = Susp-elim north* south* coh*