# Free loops ```agda module synthetic-homotopy-theory.free-loops where ``` <details><summary>Imports</summary> ```agda open import foundation.action-on-identifications-functions open import foundation.constant-type-families open import foundation.contractible-types open import foundation.dependent-pair-types open import foundation.equivalences open import foundation.functoriality-dependent-pair-types open import foundation.fundamental-theorem-of-identity-types open import foundation.identity-types open import foundation.structure-identity-principle open import foundation.torsorial-type-families open import foundation.transport-along-identifications open import foundation.universe-levels ``` </details> ## Idea A **free loop** in a type `X` consists of a point `x : X` and an [identification](foundation.identity-types.md) `x = x`. The type of free loops in `X` is [equivalent](foundation-core.equivalences.md) to the type of maps `𝕊¹ → X`. ## Definitions ### Free loops ```agda free-loop : {l1 : Level} (X : UU l1) → UU l1 free-loop X = Σ X (λ x → x = x) module _ {l1 : Level} {X : UU l1} where base-free-loop : free-loop X → X base-free-loop = pr1 loop-free-loop : (α : free-loop X) → base-free-loop α = base-free-loop α loop-free-loop = pr2 ``` ### Free dependent loops ```agda module _ {l1 l2 : Level} {X : UU l1} (α : free-loop X) (P : X → UU l2) where free-dependent-loop : UU l2 free-dependent-loop = Σ ( P (base-free-loop α)) (λ p₀ → tr P (loop-free-loop α) p₀ = p₀) base-free-dependent-loop : free-dependent-loop → P (base-free-loop α) base-free-dependent-loop = pr1 loop-free-dependent-loop : (β : free-dependent-loop) → ( tr P (loop-free-loop α) (base-free-dependent-loop β)) = ( base-free-dependent-loop β) loop-free-dependent-loop = pr2 ``` ## Properties ### Characterization of the identity type of the type of free loops ```agda module _ {l1 : Level} {X : UU l1} where Eq-free-loop : (α α' : free-loop X) → UU l1 Eq-free-loop (pair x α) α' = Σ (Id x (base-free-loop α')) (λ p → Id (α ∙ p) (p ∙ (loop-free-loop α'))) refl-Eq-free-loop : (α : free-loop X) → Eq-free-loop α α pr1 (refl-Eq-free-loop (pair x α)) = refl pr2 (refl-Eq-free-loop (pair x α)) = right-unit Eq-eq-free-loop : (α α' : free-loop X) → Id α α' → Eq-free-loop α α' Eq-eq-free-loop α .α refl = refl-Eq-free-loop α abstract is-torsorial-Eq-free-loop : (α : free-loop X) → is-torsorial (Eq-free-loop α) is-torsorial-Eq-free-loop (pair x α) = is-torsorial-Eq-structure ( is-torsorial-Id x) ( pair x refl) ( is-contr-is-equiv' ( Σ (Id x x) (λ α' → Id α α')) ( tot (λ α' α → right-unit ∙ α)) ( is-equiv-tot-is-fiberwise-equiv ( λ α' → is-equiv-concat right-unit α')) ( is-torsorial-Id α)) abstract is-equiv-Eq-eq-free-loop : (α α' : free-loop X) → is-equiv (Eq-eq-free-loop α α') is-equiv-Eq-eq-free-loop α = fundamental-theorem-id ( is-torsorial-Eq-free-loop α) ( Eq-eq-free-loop α) ``` ### Characterization of the identity type of free dependent loops ```agda module _ {l1 l2 : Level} {X : UU l1} (α : free-loop X) (P : X → UU l2) where Eq-free-dependent-loop : (p p' : free-dependent-loop α P) → UU l2 Eq-free-dependent-loop (pair y p) p' = Σ ( Id y (base-free-dependent-loop α P p')) ( λ q → ( p ∙ q) = ( ( ap (tr P (loop-free-loop α)) q) ∙ ( loop-free-dependent-loop α P p'))) refl-Eq-free-dependent-loop : (p : free-dependent-loop α P) → Eq-free-dependent-loop p p pr1 (refl-Eq-free-dependent-loop (pair y p)) = refl pr2 (refl-Eq-free-dependent-loop (pair y p)) = right-unit Eq-free-dependent-loop-eq : ( p p' : free-dependent-loop α P) → Id p p' → Eq-free-dependent-loop p p' Eq-free-dependent-loop-eq p .p refl = refl-Eq-free-dependent-loop p abstract is-torsorial-Eq-free-dependent-loop : ( p : free-dependent-loop α P) → is-torsorial (Eq-free-dependent-loop p) is-torsorial-Eq-free-dependent-loop (pair y p) = is-torsorial-Eq-structure ( is-torsorial-Id y) ( pair y refl) ( is-contr-is-equiv' ( Σ (Id (tr P (loop-free-loop α) y) y) (λ p' → Id p p')) ( tot (λ p' α → right-unit ∙ α)) ( is-equiv-tot-is-fiberwise-equiv ( λ p' → is-equiv-concat right-unit p')) ( is-torsorial-Id p)) abstract is-equiv-Eq-free-dependent-loop-eq : (p p' : free-dependent-loop α P) → is-equiv (Eq-free-dependent-loop-eq p p') is-equiv-Eq-free-dependent-loop-eq p = fundamental-theorem-id ( is-torsorial-Eq-free-dependent-loop p) ( Eq-free-dependent-loop-eq p) eq-Eq-free-dependent-loop : (p p' : free-dependent-loop α P) → Eq-free-dependent-loop p p' → Id p p' eq-Eq-free-dependent-loop p p' = map-inv-is-equiv (is-equiv-Eq-free-dependent-loop-eq p p') ``` ### The type of free dependent loops in a constant family of types is equivalent to the type of ordinary free loops ```agda module _ {l1 l2 : Level} {X : UU l1} (α : free-loop X) (Y : UU l2) where compute-free-dependent-loop-constant-type-family : free-loop Y ≃ free-dependent-loop α (λ x → Y) compute-free-dependent-loop-constant-type-family = equiv-tot ( λ y → equiv-concat (tr-constant-type-family (loop-free-loop α) y) y) map-compute-free-dependent-loop-constant-type-family : free-loop Y → free-dependent-loop α (λ x → Y) map-compute-free-dependent-loop-constant-type-family = map-equiv compute-free-dependent-loop-constant-type-family ```