File: Mathlib/GroupTheory/EckmannHilton.lean

full_name: EckmannHilton.«_aux_Mathlib_GroupTheory_EckmannHilton___macroRules_EckmannHilton_term_<_>__1»
code: /-- Local notation for `m a b`. -/
local notation a " <" m:51 "> " b => m a b
goal: Lean.Macro

full_name: EckmannHilton.IsUnital
code: /-- `IsUnital m e` expresses that `e : X` is a left and right unit
for the binary operation `m : X → X → X`. -/
structure IsUnital (m : X → X → X) (e : X) extends Std.LawfulIdentity m e : Prop
goal: Prop

full_name: EckmannHilton.MulOneClass.isUnital
code: @[to_additive EckmannHilton.AddZeroClass.IsUnital]
theorem MulOneClass.isUnital [_G : MulOneClass X] : IsUnital (· * ·) (1 : X) 
goal: EckmannHilton.IsUnital (fun x x_1 => x * x_1) 1

full_name: EckmannHilton.AddZeroClass.IsUnital
code: @[to_additive EckmannHilton.AddZeroClass.IsUnital]
theorem MulOneClass.isUnital [_G : MulOneClass X] : IsUnital (· * ·) (1 : X) 
goal: EckmannHilton.IsUnital (fun x x_1 => x + x_1) 0

full_name: EckmannHilton.one
code: /-- 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 : e₁ = e₂ 
goal: e₁ = e₂

full_name: EckmannHilton.mul
code: /-- 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 mul : m₁ = m₂ 
goal: m₁ = m₂

full_name: EckmannHilton.mul_comm
code: /-- 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 mul_comm : Std.Commutative m₂ 
goal: Std.Commutative m₂

full_name: EckmannHilton.mul_assoc
code: /-- 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 mul_assoc : Std.Associative m₂ 
goal: Std.Associative m₂

full_name: EckmannHilton.addCommMonoid
code: /-- 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 (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 [h : MulOneClass X]
    (distrib : ∀ a b c d, ((a * b) <m₁> c * d) = (a <m₁> c) * b <m₁> d) : CommMonoid X 
goal: AddCommMonoid X

full_name: EckmannHilton.commMonoid
code: /-- 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 (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 [h : MulOneClass X]
    (distrib : ∀ a b c d, ((a * b) <m₁> c * d) = (a <m₁> c) * b <m₁> d) : CommMonoid X 
goal: CommMonoid X

full_name: EckmannHilton.addCommGroup
code: /-- If a type carries a group structure that distributes over a unital binary operation,
then the group is commutative. -/
@[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 [G : Group X]
    (distrib : ∀ a b c d, ((a * b) <m₁> c * d) = (a <m₁> c) * b <m₁> d) : CommGroup X 
goal: AddCommGroup X

full_name: EckmannHilton.commGroup
code: /-- If a type carries a group structure that distributes over a unital binary operation,
then the group is commutative. -/
@[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 [G : Group X]
    (distrib : ∀ a b c d, ((a * b) <m₁> c * d) = (a <m₁> c) * b <m₁> d) : CommGroup X 
goal: CommGroup X