|
| 1 | +{-# OPTIONS --safe #-} |
| 2 | + |
| 3 | +{- |
| 4 | + The stable version of the James splitting: |
| 5 | + ΣΩΣX ≃ ΣX ⋁ Σ(X ⋀ ΩΣX) |
| 6 | +-} |
| 7 | + |
| 8 | +open import Cubical.Foundations.Prelude |
| 9 | +open import Cubical.Foundations.Path |
| 10 | +open import Cubical.Foundations.Equiv |
| 11 | +open import Cubical.Foundations.Pointed |
| 12 | +open import Cubical.Foundations.Transport |
| 13 | +open import Cubical.Foundations.Univalence |
| 14 | +open import Cubical.Foundations.HLevels |
| 15 | +open import Cubical.Foundations.Function |
| 16 | + |
| 17 | +open import Cubical.Data.Sigma |
| 18 | +open import Cubical.Data.Unit |
| 19 | + |
| 20 | +open import Cubical.HITs.Susp |
| 21 | +open import Cubical.HITs.Susp.SuspProduct |
| 22 | +open import Cubical.HITs.Pushout |
| 23 | +open import Cubical.HITs.Pushout.Flattening |
| 24 | +open import Cubical.HITs.Wedge |
| 25 | +open import Cubical.HITs.SmashProduct |
| 26 | + |
| 27 | +open import Cubical.Homotopy.Loopspace |
| 28 | + |
| 29 | +module Cubical.HITs.James.Stable {ℓ} (X∙@(X , x₀) : Pointed ℓ) where |
| 30 | + |
| 31 | +module ContrPushout where |
| 32 | + Code : Pushout (terminal X) (terminal X) → Type ℓ |
| 33 | + Code x = inl _ ≡ x |
| 34 | + |
| 35 | + ΩΣX = Code (inl _) |
| 36 | + ΩΣX∙ : Pointed _ |
| 37 | + ΩΣX∙ = ΩΣX , refl |
| 38 | + |
| 39 | + α : X × ΩΣX → ΩΣX |
| 40 | + α (x , p) = (p ∙ push x) ∙ sym (push x₀) |
| 41 | + |
| 42 | + open FlatteningLemma |
| 43 | + (terminal X) (terminal X) |
| 44 | + (Code ∘ inl) (Code ∘ inr) |
| 45 | + (pathToEquiv ∘ cong (inl tt ≡_) ∘ push) |
| 46 | + |
| 47 | + pushoutEq : Pushout Σf Σg ≃ Pushout snd α |
| 48 | + pushoutEq = pushoutEquiv _ _ _ _ |
| 49 | + (idEquiv (X × ΩΣX)) (ΣUnit _) |
| 50 | + (ΣUnit _ ∙ₑ compPathrEquiv (sym (push x₀))) |
| 51 | + refl (funExt λ (x , p) |
| 52 | + → cong (_∙ sym (push x₀)) (substInPathsL (push x) p)) |
| 53 | + |
| 54 | + Code≡E : ∀ x → Code x ≡ E x |
| 55 | + Code≡E (inl _) = refl |
| 56 | + Code≡E (inr _) = refl |
| 57 | + Code≡E (push a i) j = uaη (cong Code (push a)) (~ j) i |
| 58 | + |
| 59 | + isContrΣE : isContr (Σ _ E) |
| 60 | + isContrΣE = subst isContr (Σ-cong-snd Code≡E) (isContrSingl (inl tt)) |
| 61 | + |
| 62 | + isContrPushout : isContr (Pushout snd α) |
| 63 | + isContrPushout = isOfHLevelRespectEquiv _ (flatten ∙ₑ pushoutEq) isContrΣE |
| 64 | + |
| 65 | +open ContrPushout |
| 66 | + |
| 67 | +LoopSuspSquare : commSquare |
| 68 | +LoopSuspSquare = record |
| 69 | + { sp = 3span snd α |
| 70 | + ; P = Unit* {ℓ} |
| 71 | + ; comm = refl } |
| 72 | + |
| 73 | +LoopSuspPushoutSquare : PushoutSquare |
| 74 | +LoopSuspPushoutSquare = (LoopSuspSquare , isContr→≃Unit* isContrPushout .snd) |
| 75 | + |
| 76 | +open PushoutPasteLeft LoopSuspPushoutSquare |
| 77 | + (λ _ → lift {j = ℓ} tt) _ _ (funExt merid) |
| 78 | + |
| 79 | +cofib-snd-James : cofib (λ (r : X × ΩΣX) → snd r) ≃ Susp ΩΣX |
| 80 | +cofib-snd-James = pushoutSwitchEquiv |
| 81 | + ∙ₑ pushoutEquiv snd _ snd _ |
| 82 | + (idEquiv _) (idEquiv _) Unit≃Unit* refl refl |
| 83 | + ∙ₑ (_ , isPushoutRightSquare→isPushoutTotSquare |
| 84 | + (SuspPushoutSquare _ _ ΩΣX)) |
| 85 | + |
| 86 | +StableJames : Susp ΩΣX ≃ Susp∙ X ⋁ Susp∙ (X∙ ⋀ ΩΣX∙) |
| 87 | +StableJames = invEquiv cofib-snd-James ∙ₑ cofib-snd X∙ (ΩΣX , refl) |
0 commit comments