module Homotopy.HSpace where
H-Spacesš
An H-space structure on a pointed type consists of a binary operation equipped with paths and witnessing left- and right- unitality of respectively, together with a coherence datum connecting
record HSpace {ā} (A* : Typeā ā) : Type ā where open Ī£ A* renaming (fst to A ; snd to aā) field μ : A ā A ā A idl : ā x ā μ aā x ā” x idr : ā x ā μ x aā ā” x id-coh : idl aā ā” idr aā
Here, weāre interested in the case where each and is an equivalence, so weāre really discussing invertible h-spaces. We note that if is connected then any of its H-space structures is automatically both left- and right-invertible. This is because, since ābeing an equivalenceā is a proposition, it would suffice to check invertibility when is the basepoint, but in this case is the identity.
μ-invl : ā y ā is-equiv (μ y) μ-invr : ā y ā is-equiv (flip μ y)
module _ (a b : ā A* ā) where open Ī£ (μ-invl a .is-eqv b .centre) renaming (fst to _\\_) public open Ī£ (μ-invr a .is-eqv b .centre) renaming (fst to _//_) public μ-\\-l : ā a b ā μ a (a \\ b) ā” b μ-\\-l a b = Equiv.ε (_ , μ-invl a) b μ-\\-r : ā a b ā a \\ μ a b ā” b μ-\\-r a b = Equiv.Ī· (_ , μ-invl a) b μ-zig : ā a b ā ap (μ a) (μ-\\-r a b) ┠μ-\\-l a (μ a b) μ-zig a b = Equiv.zig (_ , μ-invl a) b μ-//-l : ā a b ā μ (a // b) a ā” b μ-//-l a b = Equiv.ε (_ , μ-invr a) b μ-//-r : ā a b ā a // μ b a ā” b μ-//-r a b = Equiv.Ī· (_ , μ-invr a) b
Using either unit law (we choose we can show that extends to a secondary ācompositionā operation on the loop space This operation is also unital on both the left and the right, with the side we didnāt choose having a slightly more complicated argument that involves the coherence
_ā_ : aā ā” aā ā aā ā” aā ā aā ā” aā p ā q = conj (idl aā) (apā μ p q) ā-idl : ā p ā refl ā p ā” p ā-idl p = squareāconj (ap (Ī» e ā ap e p) (funext idl)) ā-idr : ā p ā p ā refl ā” p ā-idr p = conj (idl aā) (apā μ p refl) ā”⨠ap (Ī» e ā conj e (apā μ p refl)) id-coh ā©ā” conj (idr aā) (apā μ p refl) ā”⨠squareāconj (ap (Ī» e ā ap e p) (funext idr)) ā©ā” p ā
Moreover, this new operation satisfies an āinterchangeā law, in that it preserves path composition in both variables. By an incoherent version of the Eckmann-Hilton argument, this means that composition of loops in is commutative. This implies that the only connected groupoids with H-space structures are the deloopings of abelian groups.
ā-interchange : ā a b c d ā (a ā b) ā (c ā d) ā” (a ā c) ā (b ā d) ā-interchange a b c d = conj (idl aā) (apā μ (a ā b) (c ā d)) ā”⨠ap (conj (idl aā)) (apā-ā μ a b c d) ā©ā” conj (idl aā) (apā μ a c ā apā μ b d) ā”⨠conj-of-ā (idl aā) _ _ ā©ā” (a ā c) ā (b ā d) ā
We omit the proof here because itās the same algebra as in the case for set-level magmas.
private ā-is-flip-ā : (p q : aā ā” aā) ā p ā q ā” q ā p ā-is-flip-ā p q = p ā q ā”Ė⨠apā _ā_ (ā-idl p) (ā-idr q) ā©ā”Ė (refl ā p) ā (q ā refl) ā”⨠sym (ā-interchange refl q p refl) ā©ā” (refl ā q) ā (p ā refl) ā”⨠apā _ā_ (ā-idl q) (ā-idr p) ā©ā” q ā p ā ā-is-ā : (p q : aā ā” aā) ā p ā q ā” p ā q ā-is-ā p q = p ā q ā”Ė⨠apā _ā_ (ā-idr p) (ā-idl q) ā©ā”Ė (p ā refl) ā (refl ā q) ā”⨠sym (ā-interchange p refl refl q) ā©ā” (p ā refl) ā (refl ā q) ā”⨠apā _ā_ (ā-idr p) (ā-idl q) ā©ā” (p ā q) ā ā-comm : (p q : aā ā” aā) ā p ā q ā” q ā p ā-comm p q = ā-is-flip-ā p q ā sym (ā-is-ā q p)
open HSpace module _ {ā} (G : Group ā) (ab : is-commutative-group G) where open Group-on (G .snd) private
H-Space structures on deloopingsš
We can define an H-space structure on the delooping of an abelian group by recursion. First, we fix an element and define the āpathā case, by elimination into sets ā so it suffices to turn a into a and to show that this is commutative.
mulā : (x : ā G ā) (y : Deloop G) ā y ā” y mulā g = Deloop-elim-set G _ (Ī» d ā hlevel 2) (path g) (Ī» z ā commutesāsquare (Deloop-ab.ā-comm G ab _ _))
Now we extend this to when
is an arbitrary element of
At the basepoint, we can simply return the other operand; this ensures
identity on the left is definitional. For the generating paths, we can
use the helper defined above. To show that this respects multiplication,
we can lift the generating triangle pathįµ
to mulā
by elimination into
propositions. The truncation case is handled automatically.
coh : (x y : ā G ā) (z : Deloop G) ā Square refl (mulā x z) (mulā (x ā y) z) (mulā y z) coh x y = Deloop-elim-prop G _ (Ī» _ ā hlevel 1) Ī» i j ā pathįµ x y i j mul : Deloop G ā Deloop G ā Deloop G mul base x = x mul (path x i) y = mulā x y i mul (pathįµ x y i j) z = coh x y z i j mul (squash x y p q α β i j k) z = squash (mul x z) (mul y z) (Ī» i ā mul (p i) z) (Ī» i ā mul (q i) z) (Ī» i j ā mul (α i j) z) (Ī» i j ā mul (β i j) z) i j k
By elimination into sets we can prove that mul
is also unital on the
right. For the base case this is once again definitional, and for the
path
case weāre left with
filling a degenerate square which is path
in one direction.
mul-idr : ā x ā mul x base ā” x mul-idr = Deloop-elim-set G _ (Ī» _ ā hlevel 2) refl (Ī» z i j ā path z i)
Finally, for invertibility, it suffices to check mul
is an equivalence at
the basepoint, in which case our proof above reduces this to showing the
identity function is an equivalence.
HSpace-BG : HSpace (Deloopā G) HSpace-BG .μ = mul HSpace-BG .idl x = refl HSpace-BG .idr = mul-idr HSpace-BG .id-coh = refl HSpace-BG .μ-invl = Deloop-elim-prop _ _ (Ī» _ ā hlevel 1) id-equiv HSpace-BG .μ-invr = Deloop-elim-prop _ _ (Ī» _ ā hlevel 1) (subst is-equiv (ext (sym ā mul-idr)) id-equiv)
On the circleš
We can specialise the discussion above to the circle, in which case we already have many
of the components ready. All that remains is to parametrise always-loop
by an extra argument of
circle type, promoting it to a āmultiplicationā; and to define the
āinverseā map on
mulS¹ : S¹ ā S¹ ā S¹ mulS¹ base y = y mulS¹ (loop i) base = loop i mulS¹ (loop i) (loop j) = double-connection loop loop i j invS¹ : S¹ ā S¹ invS¹ base = base invS¹ (loop i) = loop (~ i)
mulS¹-idr : ā x ā mulS¹ x base ā” x mulS¹-idr = S¹-elim refl (Ī» i j ā loop i) mulS¹-comm : ā x y ā mulS¹ x y ā” mulS¹ y x mulS¹-comm = S¹-elim (Ī» y ā sym (mulS¹-idr y)) (funextP (S¹-elim (Ī» i j ā loop i) prop!)) mulS¹-invl : ā x ā mulS¹ (invS¹ x) x ā” base mulS¹-invl = S¹-elim refl Ī» i j ā hcomp {A = S¹} (ā i ⨠ā j) Ī» where k (k = i0) ā base k (i = i0) ā base k (i = i1) ā base k (j = i0) ā hfill (ā i) k (Ī» { k (k = i0) ā base ; k (i = i0) ā loop (~ i ⨠k) ; k (i = i1) ā loop (~ i ā§ k) }) k (j = i1) ā base mulS¹-invr : ā x ā mulS¹ x (invS¹ x) ā” base mulS¹-invr x = mulS¹-comm x (invS¹ x) ā mulS¹-invl x mulS¹-assoc : ā x y z ā mulS¹ x (mulS¹ y z) ā” mulS¹ (mulS¹ x y) z mulS¹-assoc = S¹-elim (Ī» y z ā refl) (funextP (S¹-elim (funextP (S¹-elim (Ī» i j ā loop i) prop!)) prop!)) HSpace-S¹ : HSpace (S¹ , base) HSpace-S¹ .μ = mulS¹ HSpace-S¹ .idl x = refl HSpace-S¹ .idr = mulS¹-idr HSpace-S¹ .id-coh = refl HSpace-S¹ .μ-invr x = is-isoāis-equiv Ī» where .is-iso.from y ā mulS¹ (invS¹ x) y .is-iso.rinv y ā apā mulS¹ (mulS¹-comm (invS¹ x) y) refl ā sym (mulS¹-assoc y (invS¹ x) x) ā ap (mulS¹ y) (mulS¹-invl x) ā mulS¹-idr y .is-iso.linv y ā ap (mulS¹ (invS¹ x)) (mulS¹-comm y x) ā mulS¹-assoc (invS¹ x) x y ā ap (flip mulS¹ y) (mulS¹-invl x) HSpace-S¹ .μ-invl x = is-isoāis-equiv Ī» where .is-iso.from y ā mulS¹ (invS¹ x) y .is-iso.rinv y ā mulS¹-assoc x (invS¹ x) y ā ap (flip mulS¹ y) (mulS¹-invr x) .is-iso.linv y ā mulS¹-assoc (invS¹ x) x y ā ap (flip mulS¹ y) (mulS¹-invl x)