mathlib documentation

group_theory.eckmann_hilton

Eckmann-Hilton argument

The Eckmann-Hilton argument says that if a type carries two monoid structures that distribute over one another, then they are equal, and in addition commutative. The main application lies in proving that higher homotopy groups (πₙ for n ≥ 2) are commutative.

Main declarations

@[class]
structure eckmann_hilton.is_unital {X : Type u} :
(X → X → X)X → Prop
  • one_mul : ∀ (x : X), m e x = x
  • mul_one : ∀ (x : X), m x e = x

is_unital m e expresses that e : X is a left and right unit for the binary operation m : X → X → X.

theorem eckmann_hilton.one {X : Type u} {m₁ m₂ : X → X → X} {e₁ e₂ : X} :
eckmann_hilton.is_unital m₁ e₁eckmann_hilton.is_unital m₂ e₂(∀ (a b c d : X), m₁ (m₂ a b) (m₂ c d) = m₂ (m₁ a c) (m₁ b d))e₁ = e₂

If a type carries two unital binary operations that distribute over each other, then they have the same unit elements.

In fact, the two operations are the same, and give a commutative monoid structure, see eckmann_hilton.comm_monoid.

theorem eckmann_hilton.mul {X : Type u} {m₁ m₂ : X → X → X} {e₁ e₂ : X} :
eckmann_hilton.is_unital m₁ e₁eckmann_hilton.is_unital m₂ e₂(∀ (a b c d : X), m₁ (m₂ a b) (m₂ c d) = m₂ (m₁ a c) (m₁ b d))m₁ = m₂

If a type carries two unital binary operations that distribute over each other, then these operations are equal.

In fact, they give a commutative monoid structure, see eckmann_hilton.comm_monoid.

theorem eckmann_hilton.mul_comm {X : Type u} {m₁ m₂ : X → X → X} {e₁ e₂ : X} :
eckmann_hilton.is_unital m₁ e₁eckmann_hilton.is_unital m₂ e₂(∀ (a b c d : X), m₁ (m₂ a b) (m₂ c d) = m₂ (m₁ a c) (m₁ b d))is_commutative X m₂

If a type carries two unital binary operations that distribute over each other, then these operations are commutative.

In fact, they give a commutative monoid structure, see eckmann_hilton.comm_monoid.

theorem eckmann_hilton.mul_assoc {X : Type u} {m₁ m₂ : X → X → X} {e₁ e₂ : X} :
eckmann_hilton.is_unital m₁ e₁eckmann_hilton.is_unital m₂ e₂(∀ (a b c d : X), m₁ (m₂ a b) (m₂ c d) = m₂ (m₁ a c) (m₁ b d))is_associative X m₂

If a type carries two unital binary operations that distribute over each other, then these operations are associative.

In fact, they give a commutative monoid structure, see eckmann_hilton.comm_monoid.

def eckmann_hilton.add_comm_monoid {X : Type u} {m₁ m₂ : X → X → X} {e₁ e₂ : X} :
eckmann_hilton.is_unital m₁ e₁eckmann_hilton.is_unital m₂ e₂(∀ (a b c d : X), m₁ (m₂ a b) (m₂ c d) = m₂ (m₁ a c) (m₁ b d))add_comm_monoid X

If a type carries two unital binary operations that distribute over each other, then these operations are equal, and form a additive commutative monoid structure.

def eckmann_hilton.comm_monoid {X : Type u} {m₁ m₂ : X → X → X} {e₁ e₂ : X} :
eckmann_hilton.is_unital m₁ e₁eckmann_hilton.is_unital m₂ e₂(∀ (a b c d : X), m₁ (m₂ a b) (m₂ c d) = m₂ (m₁ a c) (m₁ b d))comm_monoid X

If a type carries two unital binary operations that distribute over each other, then these operations are equal, and form a commutative monoid structure.

Equations
def eckmann_hilton.comm_group {X : Type u} {m₁ : X → X → X} {e₁ : X} (h₁ : eckmann_hilton.is_unital m₁ e₁) [G : group X] :
(∀ (a b c d : X), m₁ (a * b) (c * d) = (m₁ a c) * m₁ b d)comm_group X

If a type carries a group structure that distributes over a unital binary operation, then the group is commutative.

Equations
def eckmann_hilton.add_comm_group {X : Type u} {m₁ : X → X → X} {e₁ : X} (h₁ : eckmann_hilton.is_unital m₁ e₁) [G : add_group X] :
(∀ (a b c d : X), m₁ (a + b) (c + d) = m₁ a c + m₁ b d)add_comm_group X

If a type carries an additive group structure that distributes over a unital binary operation, then the additive group is commutative.