# Suspension Structures ```agda module synthetic-homotopy-theory.suspension-structures where ``` <details><summary>Imports</summary> ```agda open import foundation.action-on-identifications-functions open import foundation.commuting-squares-of-identifications open import foundation.constant-maps open import foundation.contractible-types open import foundation.dependent-pair-types open import foundation.equivalences open import foundation.function-extensionality open import foundation.function-types open import foundation.functoriality-dependent-pair-types open import foundation.homotopies open import foundation.identity-systems open import foundation.identity-types open import foundation.injective-maps open import foundation.structure-identity-principle open import foundation.torsorial-type-families open import foundation.unit-type open import foundation.universal-property-unit-type open import foundation.universe-levels open import foundation.whiskering-identifications-concatenation open import synthetic-homotopy-theory.cocones-under-spans ``` </details> ## Idea The suspension of `X` is the [pushout](synthetic-homotopy-theory.pushouts.md) of the span `unit <-- X --> unit`. A [cocone under such a span](synthetic-homotopy-theory.dependent-cocones-under-spans.md) is called a `suspension-cocone`. Explicitly, a suspension cocone with nadir `Y` consists of functions ```text f : unit → Y g : unit → Y ``` and a homotopy ```text h : (x : X) → (f ∘ (terminal-map X)) x = (g ∘ (terminal-map X)) x ``` Using the [universal property of the unit type](foundation.universal-property-unit-type.md), we can characterize suspension cocones as equivalent to a selection of "north" and "south" poles ```text north , south : Y ``` and a meridian function ```text meridian : X → north = south ``` We call this type of structure `suspension-structure`. ## Definition ### Suspension cocones on a type ```agda suspension-cocone : {l1 l2 : Level} (X : UU l1) (Y : UU l2) → UU (l1 ⊔ l2) suspension-cocone X Y = cocone (terminal-map X) (terminal-map X) Y ``` ### Suspension structures on a type ```agda module _ {l1 l2 : Level} (X : UU l1) (Y : UU l2) where suspension-structure : UU (l1 ⊔ l2) suspension-structure = Σ Y (λ N → Σ Y (λ S → (x : X) → N = S)) module _ {l1 l2 : Level} {X : UU l1} {Y : UU l2} where north-suspension-structure : suspension-structure X Y → Y north-suspension-structure c = pr1 c south-suspension-structure : suspension-structure X Y → Y south-suspension-structure c = (pr1 ∘ pr2) c meridian-suspension-structure : (c : suspension-structure X Y) → X → north-suspension-structure c = south-suspension-structure c meridian-suspension-structure c = (pr2 ∘ pr2) c ``` ## Properties ### Equivalence between suspension structures and suspension cocones ```agda module _ {l1 l2 : Level} {X : UU l1} {Y : UU l2} where suspension-cocone-suspension-structure : suspension-structure X Y → suspension-cocone X Y pr1 (suspension-cocone-suspension-structure (N , S , merid)) = point N pr1 (pr2 (suspension-cocone-suspension-structure (N , S , merid))) = point S pr2 (pr2 (suspension-cocone-suspension-structure (N , S , merid))) = merid suspension-structure-suspension-cocone : suspension-cocone X Y → suspension-structure X Y pr1 (suspension-structure-suspension-cocone (N , S , merid)) = N star pr1 (pr2 (suspension-structure-suspension-cocone (N , S , merid))) = S star pr2 (pr2 (suspension-structure-suspension-cocone (N , S , merid))) = merid is-equiv-suspension-cocone-suspension-structure : is-equiv suspension-cocone-suspension-structure is-equiv-suspension-cocone-suspension-structure = is-equiv-is-invertible ( suspension-structure-suspension-cocone) ( refl-htpy) ( refl-htpy) is-equiv-suspension-structure-suspension-cocone : is-equiv suspension-structure-suspension-cocone is-equiv-suspension-structure-suspension-cocone = is-equiv-is-invertible ( suspension-cocone-suspension-structure) ( refl-htpy) ( refl-htpy) equiv-suspension-structure-suspension-cocone : suspension-structure X Y ≃ suspension-cocone X Y pr1 equiv-suspension-structure-suspension-cocone = suspension-cocone-suspension-structure pr2 equiv-suspension-structure-suspension-cocone = is-equiv-suspension-cocone-suspension-structure equiv-suspension-cocone-suspension-structure : suspension-cocone X Y ≃ suspension-structure X Y pr1 equiv-suspension-cocone-suspension-structure = suspension-structure-suspension-cocone pr2 equiv-suspension-cocone-suspension-structure = is-equiv-suspension-structure-suspension-cocone ``` #### Characterization of equalities in `suspension-structure` ```agda module _ {l1 l2 : Level} {X : UU l1} {Z : UU l2} where htpy-suspension-structure : (c c' : suspension-structure X Z) → UU (l1 ⊔ l2) htpy-suspension-structure c c' = Σ ( north-suspension-structure c = north-suspension-structure c') ( λ p → Σ ( south-suspension-structure c = south-suspension-structure c') ( λ q → ( x : X) → ( meridian-suspension-structure c x ∙ q) = ( p ∙ meridian-suspension-structure c' x))) north-htpy-suspension-structure : {c c' : suspension-structure X Z} → htpy-suspension-structure c c' → north-suspension-structure c = north-suspension-structure c' north-htpy-suspension-structure = pr1 south-htpy-suspension-structure : {c c' : suspension-structure X Z} → htpy-suspension-structure c c' → south-suspension-structure c = south-suspension-structure c' south-htpy-suspension-structure = pr1 ∘ pr2 meridian-htpy-suspension-structure : {c c' : suspension-structure X Z} → (h : htpy-suspension-structure c c') → ( x : X) → coherence-square-identifications ( north-htpy-suspension-structure h) ( meridian-suspension-structure c x) ( meridian-suspension-structure c' x) ( south-htpy-suspension-structure h) meridian-htpy-suspension-structure = pr2 ∘ pr2 extensionality-suspension-structure : (c c' : suspension-structure X Z) → (c = c') ≃ (htpy-suspension-structure c c') extensionality-suspension-structure (N , S , merid) = extensionality-Σ ( λ y p → Σ (S = pr1 y) (λ q → (x : X) → (merid x ∙ q) = (p ∙ pr2 y x))) ( refl) ( refl , right-unit-htpy) ( λ z → id-equiv) ( extensionality-Σ ( λ H q → (x : X) → (merid x ∙ q) = H x) ( refl) ( right-unit-htpy) ( λ z → id-equiv) ( λ H → equiv-concat-htpy right-unit-htpy H ∘e equiv-funext)) module _ {l1 l2 : Level} {X : UU l1} {Z : UU l2} {c c' : suspension-structure X Z} where htpy-eq-suspension-structure : (c = c') → htpy-suspension-structure c c' htpy-eq-suspension-structure = map-equiv (extensionality-suspension-structure c c') eq-htpy-suspension-structure : htpy-suspension-structure c c' → (c = c') eq-htpy-suspension-structure = map-inv-equiv (extensionality-suspension-structure c c') module _ {l1 l2 : Level} {X : UU l1} {Z : UU l2} {c : suspension-structure X Z} where refl-htpy-suspension-structure : htpy-suspension-structure c c pr1 refl-htpy-suspension-structure = refl pr1 (pr2 refl-htpy-suspension-structure) = refl pr2 (pr2 refl-htpy-suspension-structure) = right-unit-htpy is-refl-refl-htpy-suspension-structure : refl-htpy-suspension-structure = htpy-eq-suspension-structure refl is-refl-refl-htpy-suspension-structure = refl extensionality-suspension-structure-refl-htpy-suspension-structure : eq-htpy-suspension-structure refl-htpy-suspension-structure = refl extensionality-suspension-structure-refl-htpy-suspension-structure = is-injective-equiv ( extensionality-suspension-structure c c) ( is-section-map-inv-equiv ( extensionality-suspension-structure c c) ( refl-htpy-suspension-structure)) module _ {l1 l2 : Level} {X : UU l1} {Z : UU l2} {c : suspension-structure X Z} where ind-htpy-suspension-structure : { l : Level} ( P : (c' : suspension-structure X Z) → htpy-suspension-structure c c' → UU l) → ( P c refl-htpy-suspension-structure) → ( c' : suspension-structure X Z) ( H : htpy-suspension-structure c c') → P c' H ind-htpy-suspension-structure P = pr1 ( is-identity-system-is-torsorial ( c) ( refl-htpy-suspension-structure) ( is-contr-equiv ( Σ (suspension-structure X Z) (λ c' → c = c')) ( inv-equiv ( equiv-tot (extensionality-suspension-structure c))) ( is-torsorial-Id c)) ( P)) ``` #### The action of paths of the projections have the expected effect ```agda module _ {l1 l2 : Level} {X : UU l1} {Z : UU l2} (c : suspension-structure X Z) where ap-pr1-eq-htpy-suspension-structure : (c' : suspension-structure X Z) (H : htpy-suspension-structure c c') → (ap (pr1) (eq-htpy-suspension-structure H)) = (pr1 H) ap-pr1-eq-htpy-suspension-structure = ind-htpy-suspension-structure ( λ c' H → (ap (pr1) (eq-htpy-suspension-structure H)) = (pr1 H)) ( ap ( ap pr1) ( is-retraction-map-inv-equiv ( extensionality-suspension-structure c c) ( refl))) ap-pr1∘pr2-eq-htpy-suspension-structure : (c' : suspension-structure X Z) (H : htpy-suspension-structure c c') → (ap (pr1 ∘ pr2) (eq-htpy-suspension-structure H)) = ((pr1 ∘ pr2) H) ap-pr1∘pr2-eq-htpy-suspension-structure = ind-htpy-suspension-structure ( λ c' H → ap (pr1 ∘ pr2) (eq-htpy-suspension-structure H) = (pr1 ∘ pr2) H) ( ap ( ap (pr1 ∘ pr2)) ( is-retraction-map-inv-equiv ( extensionality-suspension-structure c c) ( refl))) ``` ### Characterization of equalities in `htpy-suspension-structure` ```agda module _ {l1 l2 : Level} {X : UU l1} {Z : UU l2} {c c' : suspension-structure X Z} where htpy-in-htpy-suspension-structure : htpy-suspension-structure c c' → htpy-suspension-structure c c' → UU (l1 ⊔ l2) htpy-in-htpy-suspension-structure (n , s , h) (n' , s' , h') = Σ ( n = n') ( λ p → Σ ( s = s') ( λ q → (x : X) → coherence-square-identifications ( h x) ( left-whisker-concat ( meridian-suspension-structure c x) ( q)) ( right-whisker-concat ( p) ( meridian-suspension-structure c' x)) ( h' x))) extensionality-htpy-suspension-structure : (h h' : htpy-suspension-structure c c') → (h = h') ≃ htpy-in-htpy-suspension-structure h h' extensionality-htpy-suspension-structure (n , s , h) = extensionality-Σ ( λ y p → Σ ( s = pr1 y) ( λ q → (x : X) → coherence-square-identifications ( h x) ( left-whisker-concat ( meridian-suspension-structure c x) ( q)) ( right-whisker-concat ( p) ( meridian-suspension-structure c' x)) ( pr2 y x))) ( refl) ( refl , inv-htpy right-unit-htpy) ( λ n' → id-equiv) ( extensionality-Σ ( λ h' q → (x : X) → coherence-square-identifications ( h x) ( left-whisker-concat (meridian-suspension-structure c x) q) ( right-whisker-concat ( refl) ( meridian-suspension-structure c' x)) ( h' x)) ( refl) ( inv-htpy right-unit-htpy) ( λ q → id-equiv) ( λ h' → ( inv-equiv (equiv-concat-htpy' h' (right-unit-htpy))) ∘e ( equiv-inv-htpy h h') ∘e ( equiv-funext {f = h} {g = h'}))) north-htpy-in-htpy-suspension-structure : {h h' : htpy-suspension-structure c c'} → htpy-in-htpy-suspension-structure h h' → ( north-htpy-suspension-structure h) = ( north-htpy-suspension-structure h') north-htpy-in-htpy-suspension-structure = pr1 south-htpy-in-htpy-suspension-structure : {h h' : htpy-suspension-structure c c'} → htpy-in-htpy-suspension-structure h h' → ( south-htpy-suspension-structure h) = ( south-htpy-suspension-structure h') south-htpy-in-htpy-suspension-structure = pr1 ∘ pr2 meridian-htpy-in-htpy-suspension-structure : {h h' : htpy-suspension-structure c c'} → (H : htpy-in-htpy-suspension-structure h h') → (x : X) → coherence-square-identifications ( meridian-htpy-suspension-structure h x) ( left-whisker-concat ( meridian-suspension-structure c x) ( south-htpy-in-htpy-suspension-structure H)) ( right-whisker-concat ( north-htpy-in-htpy-suspension-structure H) ( meridian-suspension-structure c' x)) ( meridian-htpy-suspension-structure h' x) meridian-htpy-in-htpy-suspension-structure = pr2 ∘ pr2 module _ {l1 l2 : Level} {X : UU l1} {Z : UU l2} {c c' : suspension-structure X Z} {h h' : htpy-suspension-structure c c'} where htpy-eq-htpy-suspension-structure : h = h' → htpy-in-htpy-suspension-structure h h' htpy-eq-htpy-suspension-structure = map-equiv (extensionality-htpy-suspension-structure h h') eq-htpy-in-htpy-suspension-structure : htpy-in-htpy-suspension-structure h h' → h = h' eq-htpy-in-htpy-suspension-structure = map-inv-equiv (extensionality-htpy-suspension-structure h h') ```