# Loop spaces ```agda module synthetic-homotopy-theory.loop-spaces where ``` <details><summary>Imports</summary> ```agda open import foundation.dependent-pair-types open import foundation.equivalences open import foundation.identity-types open import foundation.universe-levels open import structured-types.h-spaces open import structured-types.magmas open import structured-types.pointed-equivalences open import structured-types.pointed-types open import structured-types.wild-quasigroups ``` </details> ## Idea The **loop space** of a [pointed type](structured-types.pointed-types.md) `A` is the pointed type of self-[identifications](foundation-core.identity-types.md) of the base point of `A`. The loop space comes equipped with a group-like structure induced by the groupoidal-like structure on identifications. ## Table of files directly related to loop spaces {{#include tables/loop-spaces-concepts.md}} ## Definitions ### The loop space of a pointed type ```agda module _ {l : Level} (A : Pointed-Type l) where type-Ω : UU l type-Ω = Id (point-Pointed-Type A) (point-Pointed-Type A) refl-Ω : type-Ω refl-Ω = refl Ω : Pointed-Type l Ω = pair type-Ω refl-Ω ``` ### The magma of loops on a pointed space ```agda module _ {l : Level} (A : Pointed-Type l) where mul-Ω : type-Ω A → type-Ω A → type-Ω A mul-Ω x y = x ∙ y Ω-Magma : Magma l pr1 Ω-Magma = type-Ω A pr2 Ω-Magma = mul-Ω ``` ### The H-space of loops on a pointed space ```agda module _ {l : Level} (A : Pointed-Type l) where left-unit-law-mul-Ω : (x : type-Ω A) → mul-Ω A (refl-Ω A) x = x left-unit-law-mul-Ω x = left-unit right-unit-law-mul-Ω : (x : type-Ω A) → mul-Ω A x (refl-Ω A) = x right-unit-law-mul-Ω x = right-unit coherence-unit-laws-mul-Ω : left-unit-law-mul-Ω refl = right-unit-law-mul-Ω refl coherence-unit-laws-mul-Ω = refl Ω-H-Space : H-Space l pr1 Ω-H-Space = Ω A pr1 (pr2 Ω-H-Space) = mul-Ω A pr1 (pr2 (pr2 Ω-H-Space)) = left-unit-law-mul-Ω pr1 (pr2 (pr2 (pr2 Ω-H-Space))) = right-unit-law-mul-Ω pr2 (pr2 (pr2 (pr2 Ω-H-Space))) = coherence-unit-laws-mul-Ω ``` ### The wild quasigroup of loops on a pointed space ```agda module _ {l : Level} (A : Pointed-Type l) where inv-Ω : type-Ω A → type-Ω A inv-Ω = inv left-inverse-law-mul-Ω : (x : type-Ω A) → Id (mul-Ω A (inv-Ω x) x) (refl-Ω A) left-inverse-law-mul-Ω x = left-inv x right-inverse-law-mul-Ω : (x : type-Ω A) → Id (mul-Ω A x (inv-Ω x)) (refl-Ω A) right-inverse-law-mul-Ω x = right-inv x Ω-Wild-Quasigroup : Wild-Quasigroup l pr1 Ω-Wild-Quasigroup = Ω-Magma A pr2 Ω-Wild-Quasigroup = is-binary-equiv-concat ``` ### Associativity of concatenation on loop spaces ```agda module _ {l : Level} (A : Pointed-Type l) where associative-mul-Ω : (x y z : type-Ω A) → Id (mul-Ω A (mul-Ω A x y) z) (mul-Ω A x (mul-Ω A y z)) associative-mul-Ω x y z = assoc x y z ``` We compute transport of `type-Ω`. ```agda module _ {l1 : Level} {A : UU l1} {x y : A} where equiv-tr-Ω : Id x y → Ω (pair A x) ≃∗ Ω (pair A y) equiv-tr-Ω refl = pair id-equiv refl equiv-tr-type-Ω : Id x y → type-Ω (pair A x) ≃ type-Ω (pair A y) equiv-tr-type-Ω p = equiv-pointed-equiv (equiv-tr-Ω p) tr-type-Ω : Id x y → type-Ω (pair A x) → type-Ω (pair A y) tr-type-Ω p = map-equiv (equiv-tr-type-Ω p) is-equiv-tr-type-Ω : (p : Id x y) → is-equiv (tr-type-Ω p) is-equiv-tr-type-Ω p = is-equiv-map-equiv (equiv-tr-type-Ω p) preserves-refl-tr-Ω : (p : Id x y) → Id (tr-type-Ω p refl) refl preserves-refl-tr-Ω refl = refl preserves-mul-tr-Ω : (p : Id x y) (u v : type-Ω (pair A x)) → Id ( tr-type-Ω p (mul-Ω (pair A x) u v)) ( mul-Ω (pair A y) (tr-type-Ω p u) (tr-type-Ω p v)) preserves-mul-tr-Ω refl u v = refl preserves-inv-tr-Ω : (p : Id x y) (u : type-Ω (pair A x)) → Id ( tr-type-Ω p (inv-Ω (pair A x) u)) ( inv-Ω (pair A y) (tr-type-Ω p u)) preserves-inv-tr-Ω refl u = refl eq-tr-type-Ω : (p : Id x y) (q : type-Ω (pair A x)) → Id (tr-type-Ω p q) (inv p ∙ (q ∙ p)) eq-tr-type-Ω refl q = inv right-unit ``` ## Properties ### Every pointed identity type is equivalent to a loop space ```agda module _ {l : Level} (A : Pointed-Type l) {x : type-Pointed-Type A} (p : point-Pointed-Type A = x) where pointed-equiv-loop-pointed-identity : ( pair (point-Pointed-Type A = x) p) ≃∗ Ω A pr1 pointed-equiv-loop-pointed-identity = equiv-concat' (point-Pointed-Type A) (inv p) pr2 pointed-equiv-loop-pointed-identity = right-inv p ```