Documentation

Mathlib.Algebra.Group.Defs

Groups #

This file defines additive and multiplicative group structures. Division monoid structures are defined in Mathlib.Algebra.Group.DivInvMonoid.

class Group (G : Type u_2) extends DivInvMonoid G :
Type u_2

A Group is a Monoid with an operation ⁻¹ satisfying a⁻¹ * a = 1.

There is also a division operation / such that a / b = a * b⁻¹, with a default so that a / b = a * b⁻¹ holds by definition.

Use Group.ofLeftAxioms or Group.ofRightAxioms to define a group structure on a type with the minimum proof obligations.

Wikidata Q83478

Instances
    class AddGroup (A : Type u_2) extends SubNegMonoid A :
    Type u_2

    An AddGroup is an AddMonoid with a unary - satisfying -a + a = 0.

    There is also a binary operation - such that a - b = a + -b, with a default so that a - b = a + -b holds by definition.

    Use AddGroup.ofLeftAxioms or AddGroup.ofRightAxioms to define an additive group structure on a type with the minimum proof obligations.

    Wikidata Q83478

    Instances
      @[simp]
      theorem inv_mul_cancel {G : Type u_1} [Group G] (a : G) :
      a⁻¹ * a = 1
      @[simp]
      theorem neg_add_cancel {G : Type u_1} [AddGroup G] (a : G) :
      -a + a = 0
      @[simp]
      theorem mul_inv_cancel {G : Type u_1} [Group G] (a : G) :
      a * a⁻¹ = 1
      @[simp]
      theorem add_neg_cancel {G : Type u_1} [AddGroup G] (a : G) :
      a + -a = 0
      @[simp]
      theorem div_self' {G : Type u_1} [Group G] (a : G) :
      a / a = 1
      @[simp]
      theorem sub_self {G : Type u_1} [AddGroup G] (a : G) :
      a - a = 0
      @[simp]
      theorem inv_mul_cancel_left {G : Type u_1} [Group G] (a b : G) :
      a⁻¹ * (a * b) = b
      @[simp]
      theorem neg_add_cancel_left {G : Type u_1} [AddGroup G] (a b : G) :
      -a + (a + b) = b
      @[simp]
      theorem mul_inv_cancel_left {G : Type u_1} [Group G] (a b : G) :
      a * (a⁻¹ * b) = b
      @[simp]
      theorem add_neg_cancel_left {G : Type u_1} [AddGroup G] (a b : G) :
      a + (-a + b) = b
      @[simp]
      theorem mul_inv_cancel_right {G : Type u_1} [Group G] (a b : G) :
      a * b * b⁻¹ = a
      @[simp]
      theorem add_neg_cancel_right {G : Type u_1} [AddGroup G] (a b : G) :
      a + b + -b = a
      @[simp]
      theorem mul_div_cancel_right {G : Type u_1} [Group G] (a b : G) :
      a * b / b = a
      @[simp]
      theorem add_sub_cancel_right {G : Type u_1} [AddGroup G] (a b : G) :
      a + b - b = a
      @[simp]
      theorem inv_mul_cancel_right {G : Type u_1} [Group G] (a b : G) :
      a * b⁻¹ * b = a
      @[simp]
      theorem neg_add_cancel_right {G : Type u_1} [AddGroup G] (a b : G) :
      a + -b + b = a
      @[simp]
      theorem div_mul_cancel {G : Type u_1} [Group G] (a b : G) :
      a / b * b = a
      @[simp]
      theorem sub_add_cancel {G : Type u_1} [AddGroup G] (a b : G) :
      a - b + b = a
      @[instance_reducible, instance 100]
      Equations
      @[instance_reducible, instance 100]
      Equations
      @[instance_reducible, instance 100]
      instance Group.toCancelMonoid {G : Type u_1} [Group G] :
      Equations
      @[instance_reducible, instance 100]
      Equations
      class AddCommGroup (G : Type u_2) extends AddGroup G, AddCommMonoid G :
      Type u_2

      An additive commutative group is an additive group with commutative (+).

      Wikidata Q181296

      Instances
        class CommGroup (G : Type u_2) extends Group G, CommMonoid G :
        Type u_2

        A commutative group is a group with commutative (*).

        Wikidata Q181296

        Instances
          @[instance_reducible, instance 100]
          Equations
          @[instance_reducible, instance 100]
          Equations
          @[instance_reducible, instance 100]
          Equations
          @[instance_reducible, instance 100]
          Equations
          @[simp]
          theorem inv_mul_cancel_comm {G : Type u_1} [CommGroup G] (a b : G) :
          a⁻¹ * b * a = b
          @[simp]
          theorem neg_add_cancel_comm {G : Type u_1} [AddCommGroup G] (a b : G) :
          -a + b + a = b
          @[simp]
          theorem mul_inv_cancel_comm {G : Type u_1} [CommGroup G] (a b : G) :
          a * b * a⁻¹ = b
          @[simp]
          theorem add_neg_cancel_comm {G : Type u_1} [AddCommGroup G] (a b : G) :
          a + b + -a = b
          @[simp]
          theorem inv_mul_cancel_comm_assoc {G : Type u_1} [CommGroup G] (a b : G) :
          a⁻¹ * (b * a) = b
          @[simp]
          theorem neg_add_cancel_comm_assoc {G : Type u_1} [AddCommGroup G] (a b : G) :
          -a + (b + a) = b
          @[simp]
          theorem mul_inv_cancel_comm_assoc {G : Type u_1} [CommGroup G] (a b : G) :
          a * (b * a⁻¹) = b
          @[simp]
          theorem add_neg_cancel_comm_assoc {G : Type u_1} [AddCommGroup G] (a b : G) :
          a + (b + -a) = b

          We initialize the projections for the group structures for @[simps] here.

          The lemmas generated for the npow/zpow projections will not apply to x ^ y, since the argument order of these projections does not match the argument order of ^. The nsmul/zsmul lemmas are correct.