H-spaces #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
This file defines H-spaces mainly following the approach proposed by Serre in his paper
Homologie singulière des espaces fibrés. The idea beaneath H-spaces
is that they are topological
spaces with a binary operation ⋀ : X → X → X
that is a homotopic-theoretic weakening of an
operation what would make X
into a topological monoid. In particular, there exists a "neutral
element" e : X
such that λ x, e ⋀ x
and λ x, x ⋀ e
are homotopic to the identity on X
, see
the Wikipedia page of H-spaces.
Some notable properties of H-spaces
are
- Their fundamental group is always abelian (by the same argument for topological groups);
- Their cohomology ring comes equipped with a structure of a Hopf-algebra;
- The loop space based at every
x : X
carries a structure of anH-spaces
.
Main Results #
- Every topological group
G
is anH-space
using its operation* : G → G → G
(this is already true ifG
has an instance of amul_one_class
andcontinuous_mul
); - Given two
H-spaces
X
andY
, their product is again anH
-space. We show in an example that starting with two topological groupsG, G'
, theH
-space structure onG × G'
is definitionally equal to the product ofH-space
structures onG
andG'
. - The loop space based at every
x : X
carries a structure of anH-spaces
.
To Do #
- Prove that for every
normed_add_torsor Z
and everyz : Z
, the operationλ x y, midpoint x y
defines aH-space
structure withz
as a "neutral element". - Prove that
S^0
,S^1
,S^3
andS^7
are the unique spheres that areH-spaces
, where the first three inherit the structure because they are topological groups (they are Lie groups, actually), isomorphic to the invertible elements inℤ
, inℂ
and in the quaternion; and the fourth from the fact thatS^7
coincides with the octonions of norm 1 (it is not a group, in particular, only has an instance ofmul_one_class
).
References #
- Hmul : C(X × X, X)
- e : X
- Hmul_e_e : ⇑H_space.Hmul (H_space.e self, H_space.e self) = H_space.e
- e_Hmul : (H_space.Hmul.comp ((continuous_map.const X H_space.e).prod_mk (continuous_map.id X))).homotopy_rel (continuous_map.id X) {H_space.e}
- Hmul_e : (H_space.Hmul.comp ((continuous_map.id X).prod_mk (continuous_map.const X H_space.e))).homotopy_rel (continuous_map.id X) {H_space.e}
A topological space X
is an H-space if it behaves like a (potentially non-associative)
topological group, but where the axioms for a group only hold up to homotopy.
Instances of this typeclass
Instances of other typeclasses for H_space
- H_space.has_sizeof_inst
Equations
- H_space.prod X Y = {Hmul := {to_fun := λ (p : (X × Y) × X × Y), (⇑H_space.Hmul (p.fst.fst, p.snd.fst), ⇑H_space.Hmul (p.fst.snd, p.snd.snd)), continuous_to_fun := _}, e := (H_space.e _inst_3, H_space.e _inst_4), Hmul_e_e := _, e_Hmul := let G : ↥unit_interval × X × Y → X × Y := λ (p : ↥unit_interval × X × Y), (⇑H_space.e_Hmul (p.fst, p.snd.fst), ⇑H_space.e_Hmul (p.fst, p.snd.snd)) in {to_homotopy := {to_continuous_map := {to_fun := G, continuous_to_fun := _}, map_zero_left' := _, map_one_left' := _}, prop' := _}, Hmul_e := let G : ↥unit_interval × X × Y → X × Y := λ (p : ↥unit_interval × X × Y), (⇑H_space.Hmul_e (p.fst, p.snd.fst), ⇑H_space.Hmul_e (p.fst, p.snd.snd)) in {to_homotopy := {to_continuous_map := {to_fun := G, continuous_to_fun := _}, map_zero_left' := _, map_one_left' := _}, prop' := _}}
The definition to_H_space
is not an instance because its @additive
version would
lead to a diamond since a topological field would inherit two H_space
structures, one from the
mul_one_class
and one from the add_zero_class
. In the case of a group, we make
topological_group.H_space
an instance."
Equations
- topological_group.to_H_space M = {Hmul := {to_fun := function.uncurry has_mul.mul, continuous_to_fun := _}, e := 1, Hmul_e_e := _, e_Hmul := (continuous_map.homotopy_rel.refl ({to_fun := function.uncurry has_mul.mul, continuous_to_fun := _}.comp ((continuous_map.const M 1).prod_mk (continuous_map.id M))) {1}).cast _ _, Hmul_e := (continuous_map.homotopy_rel.refl ({to_fun := function.uncurry has_mul.mul, continuous_to_fun := _}.comp ((continuous_map.id M).prod_mk (continuous_map.const M 1))) {1}).cast _ _}
The definition to_H_space
is not an instance because it comes together with a
multiplicative version which would lead to a diamond since a topological field would inherit two
H_space
structures, one from the mul_one_class
and one from the add_zero_class
. In the case
of an additive group, we make topological_group.H_space
an instance.
Equations
- topological_add_group.to_H_space M = {Hmul := {to_fun := function.uncurry has_add.add, continuous_to_fun := _}, e := 0, Hmul_e_e := _, e_Hmul := (continuous_map.homotopy_rel.refl ({to_fun := function.uncurry has_add.add, continuous_to_fun := _}.comp ((continuous_map.const M 0).prod_mk (continuous_map.id M))) {0}).cast _ _, Hmul_e := (continuous_map.homotopy_rel.refl ({to_fun := function.uncurry has_add.add, continuous_to_fun := _}.comp ((continuous_map.id M).prod_mk (continuous_map.const M 0))) {0}).cast _ _}
Equations
Equations
This is the function analogous to the one on p. 475 of [Ser51], defining a homotopy from
the product path γ ∧ e
to γ
.
Equations
- path.delay_refl_right θ γ = {to_continuous_map := {to_fun := λ (t : ↥unit_interval), ⇑γ (unit_interval.Q_right (t, θ)), continuous_to_fun := _}, source' := _, target' := _}
This is the function on p. 475 of [Ser51], defining a homotopy from a path γ
to the
product path e ∧ γ
.
Equations
- path.delay_refl_left θ γ = (path.delay_refl_right θ γ.symm).symm
The loop space at x carries a structure of a H-space
. Note that the field e_Hmul
(resp. Hmul_e
) neither implies nor is implied by path.homotopy.refl_trans
(resp. path.homotopy.trans_refl
).
Equations
- path.H_space x = {Hmul := {to_fun := λ (ρ : path x x × path x x), ρ.fst.trans ρ.snd, continuous_to_fun := _}, e := path.refl x, Hmul_e_e := _, e_Hmul := {to_homotopy := {to_continuous_map := {to_fun := λ (p : ↥unit_interval × path x x), path.delay_refl_left p.fst p.snd, continuous_to_fun := _}, map_zero_left' := _, map_one_left' := _}, prop' := _}, Hmul_e := {to_homotopy := {to_continuous_map := {to_fun := λ (p : ↥unit_interval × path x x), path.delay_refl_right p.fst p.snd, continuous_to_fun := _}, map_zero_left' := _, map_one_left' := _}, prop' := _}}