Built with doc-gen4, running Lean4.
Bubbles () indicate interactive fragments: hover for details, tap to reveal contents.
Use Ctrl+โCtrl+โto navigate, Ctrl+๐ฑ๏ธto focus.
On Mac, use Cmdinstead of Ctrl.
/-
Copyright (c) 2018 Kenny Lau. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johan Commelin, Kenny Lau, Robert Y. Lewis
! This file was ported from Lean 3 source module group_theory.eckmann_hilton
! leanprover-community/mathlib commit 41cf0cc2f528dd40a8f2db167ea4fb37b8fde7f3
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathlib.Algebra.Group.Defs
/-!
# 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
* `EckmannHilton.commMonoid`: If a type carries a unital magma structure that distributes
over a unital binary operation, then the magma is a commutative monoid.
* `EckmannHilton.commGroup`: If a type carries a group structure that distributes
over a unital binary operation, then the group is commutative.
-/
universe u
namespace EckmannHilton
variable {
IsUnital: {X : Type ?u.2389} โ (X โ X โ X) โ X โ Prop
IsUnital
mโ: X โ X โ X
mโ
eโ: X
eโ)
variable (
distrib: โ (a b c d : X), mโ (mโab) (mโcd)=mโ (mโac) (mโbd)
distrib : โ
a: ?m.2400
a
b: ?m.3268
b
c: ?m.2461
c
d: ?m.2464
d, ((
a: ?m.2455
a <
mโ: X โ X โ X
mโ>
b: ?m.2458
b) <
mโ: X โ X โ X
mโ>
c: ?m.2461
c <
mโ: X โ X โ X
mโ>
d: ?m.2464
d) = (
a: ?m.2400
a <
mโ: X โ X โ X
mโ>
c: ?m.2461
c) <
mโ: X โ X โ X
mโ>
b: ?m.2458
b <
mโ: X โ X โ X
mโ>
d: ?m.2409
d)
/-- 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.CommMonoid`. -/
theorem
one: โ {X : Type u} {mโ mโ : X โ X โ X} {eโ eโ : X},
IsUnitalmโeโ โ IsUnitalmโeโ โ (โ (a b c d : X), mโ (mโab) (mโcd)=mโ (mโac) (mโbd)) โ eโ=eโ
one :
eโ: X
eโ =
eโ: X
eโ :=
Goals accomplished! ๐
X: Type u mโ, mโ: X โ X โ X eโ, eโ: X hโ: IsUnitalmโeโ hโ: IsUnitalmโeโ distrib: โ (a b c d : X), mโ (mโab) (mโcd)=mโ (mโac) (mโbd)
EckmannHilton.one: โ {X : Type u} {mโ mโ : X โ X โ X} {eโ eโ : X},
IsUnitalmโeโ โ IsUnitalmโeโ โ (โ (a b c d : X), mโ (mโab) (mโcd)=mโ (mโac) (mโbd)) โ eโ=eโ
EckmannHilton.one
/-- 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.CommMonoid`. -/
theorem
X: Type u mโ, mโ: X โ X โ X eโ, eโ: X hโ: IsUnitalmโeโ hโ: IsUnitalmโeโ distrib: โ (a b c d : X), mโ (mโab) (mโcd)=mโ (mโac) (mโbd)
X: Type u mโ, mโ: X โ X โ X eโ, eโ: X hโ: IsUnitalmโeโ hโ: IsUnitalmโeโ distrib: โ (a b c d : X), mโ (mโab) (mโcd)=mโ (mโac) (mโbd) a, b: X
X: Type u mโ, mโ: X โ X โ X eโ, eโ: X hโ: IsUnitalmโeโ hโ: IsUnitalmโeโ distrib: โ (a b c d : X), mโ (mโab) (mโcd)=mโ (mโac) (mโbd)
X: Type u mโ, mโ: X โ X โ X eโ, eโ: X hโ: IsUnitalmโeโ hโ: IsUnitalmโeโ distrib: โ (a b c d : X), mโ (mโab) (mโcd)=mโ (mโac) (mโbd) a, b: X
X: Type u mโ, mโ: X โ X โ X eโ, eโ: X hโ: IsUnitalmโeโ hโ: IsUnitalmโeโ distrib: โ (a b c d : X), mโ (mโab) (mโcd)=mโ (mโac) (mโbd) a, b: X
X: Type u mโ, mโ: X โ X โ X eโ, eโ: X hโ: IsUnitalmโeโ hโ: IsUnitalmโeโ distrib: โ (a b c d : X), mโ (mโab) (mโcd)=mโ (mโac) (mโbd) a, b: X
X: Type u mโ, mโ: X โ X โ X eโ, eโ: X hโ: IsUnitalmโeโ hโ: IsUnitalmโeโ distrib: โ (a b c d : X), mโ (mโab) (mโcd)=mโ (mโac) (mโbd) a, b: X
X: Type u mโ, mโ: X โ X โ X eโ, eโ: X hโ: IsUnitalmโeโ hโ: IsUnitalmโeโ distrib: โ (a b c d : X), mโ (mโab) (mโcd)=mโ (mโac) (mโbd) a, b: X
X: Type u mโ, mโ: X โ X โ X eโ, eโ: X hโ: IsUnitalmโeโ hโ: IsUnitalmโeโ distrib: โ (a b c d : X), mโ (mโab) (mโcd)=mโ (mโac) (mโbd) a, b: X
EckmannHilton.mul: โ {X : Type u} {mโ mโ : X โ X โ X} {eโ eโ : X},
IsUnitalmโeโ โ IsUnitalmโeโ โ (โ (a b c d : X), mโ (mโab) (mโcd)=mโ (mโac) (mโbd)) โ mโ=mโ
EckmannHilton.mul
/-- 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.CommMonoid`. -/
theorem
X: Type u mโ, mโ: X โ X โ X eโ, eโ: X hโ: IsUnitalmโeโ hโ: IsUnitalmโeโ distrib: โ (a b c d : X), mโ (mโab) (mโcd)=mโ (mโac) (mโbd) a, b: X
EckmannHilton.mul_comm: โ {X : Type u} {mโ mโ : X โ X โ X} {eโ eโ : X},
IsUnitalmโeโ โ IsUnitalmโeโ โ (โ (a b c d : X), mโ (mโab) (mโcd)=mโ (mโac) (mโbd)) โ IsCommutativeXmโ
EckmannHilton.mul_comm
/-- 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.CommMonoid`. -/
theorem
X: Type u mโ, mโ: X โ X โ X eโ, eโ: X hโ: IsUnitalmโeโ hโ: IsUnitalmโeโ distrib: โ (a b c d : X), mโ (mโab) (mโcd)=mโ (mโac) (mโbd) a, b, c: X
EckmannHilton.mul_assoc: โ {X : Type u} {mโ mโ : X โ X โ X} {eโ eโ : X},
IsUnitalmโeโ โ IsUnitalmโeโ โ (โ (a b c d : X), mโ (mโab) (mโcd)=mโ (mโac) (mโbd)) โ IsAssociativeXmโ
EckmannHilton.mul_assoc
/-- If a type carries a unital magma structure that distributes over a unital binary
operation, then the magma structure is a commutative monoid. -/
@[
to_additive: {X : Type u} โ
{mโ : X โ X โ X} โ
{eโ : X} โ
IsUnitalmโeโ โ [h : AddZeroClassX] โ (โ (a b c d : X), mโ (a+b) (c+d)=mโac+mโbd) โ AddCommMonoidX
to_additive (attr := reducible)
"If a type carries a unital additive magma structure that distributes over a unital binary
operation, then the additive magma structure is a commutative additive monoid."]
def
commMonoid: {X : Type u} โ
{mโ : X โ X โ X} โ
{eโ : X} โ
IsUnitalmโeโ โ [h : MulOneClassX] โ (โ (a b c d : X), mโ (a*b) (c*d)=mโac*mโbd) โ CommMonoidX
EckmannHilton.addCommMonoid: {X : Type u} โ
{mโ : X โ X โ X} โ
{eโ : X} โ
IsUnitalmโeโ โ [h : AddZeroClassX] โ (โ (a b c d : X), mโ (a+b) (c+d)=mโac+mโbd) โ AddCommMonoidX
EckmannHilton.addCommMonoid
/-- If a type carries a group structure that distributes over a unital binary operation,
then the group is commutative. -/
@[
to_additive: {X : Type u} โ
{mโ : X โ X โ X} โ
{eโ : X} โ
IsUnitalmโeโ โ [G : AddGroupX] โ (โ (a b c d : X), mโ (a+b) (c+d)=mโac+mโbd) โ AddCommGroupX
to_additive (attr := reducible)
"If a type carries an additive group structure that distributes over a unital binary
operation, then the additive group is commutative."]
def
commGroup: {X : Type u} โ
{mโ : X โ X โ X} โ
{eโ : X} โ IsUnitalmโeโ โ [G : GroupX] โ (โ (a b c d : X), mโ (a*b) (c*d)=mโac*mโbd) โ CommGroupX