module Homotopy.Space.Sphere.Degree where

Degrees of maps of spheres🔗

Piecing together our characterisation of the homotopy groups of higher spheres as the group of integers with the equivalence between the loop space and the space of pointed maps we obtain a function which associates to every pointed map an integer; we call this number the degree of

degree∙ :  n  (Sⁿ (suc n) →∙ Sⁿ (suc n))  Int
degree∙ n f = πₙSⁿ≃Int n · inc (Ωⁿ≃Sⁿ-map (suc n) · f)

Intuitively, the degree of a map is a generalisation of the winding number of a loop in it measures how many times “wraps around” the In particular, the degree of the identity map is and the degree of the zero∙ map is To prove this, we first establish a useful property of the degrees of maps of spheres.

The fact that the isomorphisms are compatible with suspension implies that the maps and have the same degree; indeed, the functorial action of and the map fit together in the following diagram over

opaque
  unfolding Ωⁿ≃∙Sⁿ-map

  Ωⁿ-suspend-is-Susp-map∙
    :  {} (A : Type∙ ) n (f : Sⁿ (suc n) →∙ A)
     Ωⁿ≃Sⁿ-map (2 + n) · Susp-map∙ f
     Ωⁿ-suspend (suc n) _ · (Ωⁿ≃Sⁿ-map (suc n) · f)
  Ωⁿ-suspend-is-Susp-map∙ A n f =
    Equiv∙.from∙ (Ωⁿ-suc (Σ¹ A) (suc n)) · (Ωⁿ≃Sⁿ-map (suc n) ·  Σ-map∙≃∙map∙-Ω · Susp-map∙ f )
      ≡⟨ ap! (Equiv.adjunctr Σ-map∙≃map∙-Ω (sym (suspend∙-is-unit f))) 
    Equiv∙.from∙ (Ωⁿ-suc (Σ¹ A) (suc n)) ·  Ωⁿ≃Sⁿ-map (suc n) · (suspend∙ A ∘∙ f) 
      ≡˘⟨ ap¡ (Ωⁿ≃Sⁿ-map-natural (suc n) (suspend∙ A) f) ≡˘
    Equiv∙.from∙ (Ωⁿ-suc (Σ¹ A) (suc n)) · (Ωⁿ-map (suc n) (suspend∙ A) · (Ωⁿ≃Sⁿ-map (suc n) · f))
      

degree∙-Susp-map∙
  :  n (f : Sⁿ (suc n) →∙ Sⁿ (suc n))
   degree∙ (suc n) (Susp-map∙ f)  degree∙ n f
degree∙-Susp-map∙ n f =
  πₙSⁿ≃Int (suc n) · ∥_∥₀.inc  Ωⁿ≃Sⁿ-map (2 + n) · Susp-map∙ f 
    ≡⟨ ap! (Ωⁿ-suspend-is-Susp-map∙ (Sⁿ (suc n)) n f) 
  πₙSⁿ≃Int (suc n) · inc (Ωⁿ-suspend (suc n) (Sⁿ (suc n)) · (Ωⁿ≃Sⁿ-map (suc n) · f))
    ≡⟨ πₙSⁿ≃Int-suspend n _ 
  degree∙ n f
    

This lets us characterise the degrees of the identity and zero maps by induction: in both cases, the base case computes, and the induction step uses the fact that preserves those maps.

opaque
  unfolding conj Ω¹-map Ωⁿ≃∙Sⁿ-map

  degree∙-id∙ :  n  degree∙ n id∙  1
  degree∙-id∙ zero = refl
  degree∙-id∙ (suc n) =
    degree∙ (suc n)  id∙                            ≡˘⟨ ap¡ (Susp-map∙-id {A∙ = Sⁿ (suc n)}) ≡˘
    degree∙ (suc n) (Susp-map∙ {A∙ = Sⁿ (suc n)} id∙) ≡⟨ degree∙-Susp-map∙ n id∙ 
    degree∙ n id∙                                     ≡⟨ degree∙-id∙ n 
    1                                                 

  degree∙-zero∙ :  n  degree∙ n zero∙  0
  degree∙-zero∙ zero = refl
  degree∙-zero∙ (suc n) =
    degree∙ (suc n)  zero∙                            ≡˘⟨ ap¡ (Susp-map∙-zero {A∙ = Sⁿ (suc n)}) ≡˘
    degree∙ (suc n) (Susp-map∙ {A∙ = Sⁿ (suc n)} zero∙) ≡⟨ degree∙-Susp-map∙ n zero∙ 
    degree∙ n zero∙                                     ≡⟨ degree∙-zero∙ n 
    0                                                   

Degrees of unpointed maps of spheres🔗

We extend the definition of degrees above to unpointed maps by showing that the set of pointed homotopy classes of maps is equivalent to the set of homotopy classes of unpointed maps

We start by showing that the map which forgets the pointing is injective; in other words, that for any two paths the pointed maps and are merely equal.

Sⁿ-unpoint
  :  n
    (Sⁿ (suc n) →∙ Sⁿ (suc n)) ∥₀
    ( Sⁿ (suc n)    Sⁿ (suc n) ) ∥₀
Sⁿ-unpoint n = ∥-∥₀-rec (hlevel 2) λ (f , _)  inc f

Sⁿ-unpoint-injective
  :  n f (p q : f north  north)
    Path (Sⁿ (suc n) →∙ Sⁿ (suc n)) (f , p) (f , q) 

There are two cases: when is a concrete abelian group, and some abstract nonsense about first abelian group cohomology tells us that the set of unpointed maps is equivalent to the set of concrete group automorphisms of which is just the set of pointed maps

Sⁿ-unpoint-injective zero f p q = inc (S¹-cohomology.injective refl)
  where
    Sⁿ⁼¹-concrete : ConcreteGroup lzero
    Sⁿ⁼¹-concrete .B = Sⁿ 1
    Sⁿ⁼¹-concrete .has-is-connected = connected∙
    Sⁿ⁼¹-concrete .has-is-groupoid = Equiv→is-hlevel 3 SuspS⁰≃S¹ S¹-is-groupoid

    Sⁿ⁼¹≡S¹ : Sⁿ⁼¹-concrete  S¹-concrete
    Sⁿ⁼¹≡S¹ = ConcreteGroup-path (ua∙ SuspS⁰≃∙S¹)

    Sⁿ⁼¹-ab : is-concrete-abelian Sⁿ⁼¹-concrete
    Sⁿ⁼¹-ab = subst is-concrete-abelian (sym Sⁿ⁼¹≡S¹) S¹-concrete-abelian

    module S¹-cohomology = Equiv
      (first-concrete-abelian-group-cohomology Sⁿ⁼¹-concrete Sⁿ⁼¹-concrete Sⁿ⁼¹-ab)

The case is a lot more down-to-earth: in that case, is simply connected, so the paths and are themselves merely equal.

Sⁿ-unpoint-injective (suc n) f p q = ap (f ,_) <$> simply-connected p q

Since the is connected, every map is merely pointed, so the map Sⁿ-unpoint is also surjective, hence an equivalence of sets.

Sⁿ-pointed≃unpointed
  :  n
    (Sⁿ (suc n) →∙ Sⁿ (suc n)) ∥₀
    ( Sⁿ (suc n)    Sⁿ (suc n) ) ∥₀
Sⁿ-pointed≃unpointed n .fst = Sⁿ-unpoint n
Sⁿ-pointed≃unpointed n .snd = injective-surjective→is-equiv! (inj _ _) surj
  where
    inj :  f g  Sⁿ-unpoint n f  Sⁿ-unpoint n g  f  g
    inj = elim! λ f ptf g ptg f≡g 
      ∥-∥₀-path.from do
        f≡g  ∥-∥₀-path.to f≡g
        J  g _   ptg   (f , ptf)  (g , ptg) )
          (Sⁿ-unpoint-injective n f ptf)
          f≡g ptg

    surj : is-surjective (Sⁿ-unpoint n)
    surj = ∥-∥₀-elim  _  hlevel 2) λ f  do
      pointed  connected (f north) north
      pure (inc (f , pointed) , refl)

Since is a set, we can therefore define the degree of an unpointed map by set-truncation recursion on the corresponding class of pointed maps, and show that the degree of a pointed map is the degree of its underlying unpointed map.

degree :  n  ( Sⁿ (suc n)    Sⁿ (suc n) )  Int
degree n f = ∥-∥₀-rec (hlevel 2) (degree∙ n)
  (Equiv.from (Sⁿ-pointed≃unpointed n) (inc f))

degree≡degree∙ :  n f∙  degree n (f∙ .fst)  degree∙ n f∙
degree≡degree∙ n f∙ = ap (∥-∥₀-rec _ _)
  (Equiv.η (Sⁿ-pointed≃unpointed n) (inc f∙))