Powers of loops

module synthetic-homotopy-theory.powers-of-loops where
Imports
open import elementary-number-theory.addition-natural-numbers
open import elementary-number-theory.integers
open import elementary-number-theory.multiplication-natural-numbers
open import elementary-number-theory.natural-numbers

open import foundation.equivalences
open import foundation.identity-types
open import foundation.iterating-automorphisms
open import foundation.iterating-functions
open import foundation.universe-levels

open import structured-types.pointed-maps
open import structured-types.pointed-types

open import synthetic-homotopy-theory.functoriality-loop-spaces
open import synthetic-homotopy-theory.loop-spaces

Idea

The n-th power of a loop ω in a type A is defined by iterated concatenation of ω with itself.

Definitions

Powers of loops by natural numbers

power-nat-Ω :
  {l : Level}    (A : Pointed-Type l)  type-Ω A  type-Ω A
power-nat-Ω n A ω = iterate n (concat' (point-Pointed-Type A) ω) refl

Powers of loops by integers

equiv-power-int-Ω :
  {l : Level}    (A : Pointed-Type l)  type-Ω A  type-Ω A  type-Ω A
equiv-power-int-Ω k A ω =
  iterate-automorphism-ℤ k (equiv-concat' (point-Pointed-Type A) ω)

power-int-Ω :
  {l : Level}    (A : Pointed-Type l)  type-Ω A  type-Ω A
power-int-Ω k A ω = map-equiv (equiv-power-int-Ω k A ω) refl

Properties

reflⁿ = refl

power-nat-refl-Ω :
  {l : Level} (n : ) (A : Pointed-Type l) 
  power-nat-Ω n A refl  refl
power-nat-refl-Ω zero-ℕ A = refl
power-nat-refl-Ω (succ-ℕ n) A =
  ap (concat' (point-Pointed-Type A) refl) (power-nat-refl-Ω n A)

ωⁿ⁺¹ = ωⁿ ∙ ω

power-nat-succ-Ω :
  {l : Level} (n : ) (A : Pointed-Type l) (ω : type-Ω A) 
  power-nat-Ω (succ-ℕ n) A ω  (power-nat-Ω n A ω  ω)
power-nat-succ-Ω n A ω = refl

power-nat-succ-Ω' :
  {l : Level} (n : ) (A : Pointed-Type l) (ω : type-Ω A) 
  power-nat-Ω (succ-ℕ n) A ω  (ω  power-nat-Ω n A ω)
power-nat-succ-Ω' zero-ℕ A ω = inv right-unit
power-nat-succ-Ω' (succ-ℕ n) A ω =
  ( ap (concat' (point-Pointed-Type A) ω) (power-nat-succ-Ω' n A ω)) 
  ( assoc ω (power-nat-Ω n A ω) ω)

ωᵐ⁺ⁿ = ωᵐ ∙ ωⁿ

power-nat-add-Ω :
  {l : Level} (m n : ) (A : Pointed-Type l) (ω : type-Ω A) 
  power-nat-Ω (m +ℕ n) A ω  (power-nat-Ω m A ω  power-nat-Ω n A ω)
power-nat-add-Ω m zero-ℕ A ω = inv right-unit
power-nat-add-Ω m (succ-ℕ n) A ω =
  ( ap (concat' (point-Pointed-Type A) ω) (power-nat-add-Ω m n A ω)) 
  ( assoc (power-nat-Ω m A ω) (power-nat-Ω n A ω) ω)

ωᵐⁿ = (ωᵐ)ⁿ

power-nat-mul-Ω :
  {l : Level} (m n : ) (A : Pointed-Type l) (ω : type-Ω A) 
  power-nat-Ω (m *ℕ n) A ω  power-nat-Ω m A (power-nat-Ω n A ω)
power-nat-mul-Ω zero-ℕ n A ω = refl
power-nat-mul-Ω (succ-ℕ m) n A ω =
  ( power-nat-add-Ω (m *ℕ n) n A ω) 
  ( ( ap
      ( concat' (point-Pointed-Type A) (power-nat-Ω n A ω))
      ( power-nat-mul-Ω m n A ω)))

power-nat-mul-Ω' :
  {l : Level} (m n : ) (A : Pointed-Type l) (ω : type-Ω A) 
  power-nat-Ω (m *ℕ n) A ω  power-nat-Ω n A (power-nat-Ω m A ω)
power-nat-mul-Ω' m n A ω =
  ( ap  u  power-nat-Ω u A ω) (commutative-mul-ℕ m n)) 
  ( power-nat-mul-Ω n m A ω)

The action on identifications of a function preserves powers

map-power-nat-Ω :
  {l1 l2 : Level} (n : ) (A : Pointed-Type l1) (B : Pointed-Type l2)
  (f : A →∗ B) (ω : type-Ω A) 
  map-Ω A B f (power-nat-Ω n A ω)  power-nat-Ω n B (map-Ω A B f ω)
map-power-nat-Ω zero-ℕ A B f ω = preserves-refl-map-Ω A B f
map-power-nat-Ω (succ-ℕ n) A B f ω =
  ( preserves-mul-map-Ω A B f (power-nat-Ω n A ω) ω) 
  ( ap
    ( concat' (point-Pointed-Type B) (map-Ω A B f ω))
    ( map-power-nat-Ω n A B f ω))