Documentation

Mathlib.Algebra.Group.Submonoid.Defs

Submonoids: definition #

This file defines bundled multiplicative and additive submonoids. We also define a CompleteLattice structure on Submonoids, define the closure of a set as the minimal submonoid that includes this set, and prove a few results about extending properties from a dense set (i.e. a set with closure s = ⊤) to the whole monoid, see Submonoid.dense_induction and MonoidHom.ofClosureEqTopLeft/MonoidHom.ofClosureEqTopRight.

Main definitions #

For each of the following definitions in the Submonoid namespace, there is a corresponding definition in the AddSubmonoid namespace.

Implementation notes #

Submonoid inclusion is denoted rather than , although is defined as membership of a submonoid's underlying set.

Note that Submonoid M does not actually require Monoid M, instead requiring only the weaker MulOneClass M.

This file is designed to have very few dependencies. In particular, it should not use natural numbers. Submonoid is implemented by extending Subsemigroup requiring one_mem'.

Tags #

submonoid, submonoids

class OneMemClass (S : Type u_3) (M : outParam (Type u_4)) [One M] [SetLike S M] :

OneMemClass S M says S is a type of subsets s ≤ M, such that 1 ∈ s for all s.

  • one_mem : ∀ (s : S), 1 s

    By definition, if we have OneMemClass S M, we have 1 ∈ s for all s : S.

Instances
    class ZeroMemClass (S : Type u_3) (M : outParam (Type u_4)) [Zero M] [SetLike S M] :

    ZeroMemClass S M says S is a type of subsets s ≤ M, such that 0 ∈ s for all s.

    • zero_mem : ∀ (s : S), 0 s

      By definition, if we have ZeroMemClass S M, we have 0 ∈ s for all s : S.

    Instances
      structure Submonoid (M : Type u_3) [MulOneClass M] extends Subsemigroup M :
      Type u_3

      A submonoid of a monoid M is a subset containing 1 and closed under multiplication.

      • mul_mem' : ∀ {a b : M}, a self.carrierb self.carriera * b self.carrier
      • one_mem' : 1 self.carrier

        A submonoid contains 1.

      Instances For
        class SubmonoidClass (S : Type u_3) (M : outParam (Type u_4)) [MulOneClass M] [SetLike S M] extends MulMemClass S M, OneMemClass S M :

        SubmonoidClass S M says S is a type of subsets s ≤ M that contain 1 and are closed under (*)

        Instances
          structure AddSubmonoid (M : Type u_3) [AddZeroClass M] extends AddSubsemigroup M :
          Type u_3

          An additive submonoid of an additive monoid M is a subset containing 0 and closed under addition.

          • add_mem' : ∀ {a b : M}, a self.carrierb self.carriera + b self.carrier
          • zero_mem' : 0 self.carrier

            An additive submonoid contains 0.

          Instances For
            class AddSubmonoidClass (S : Type u_3) (M : outParam (Type u_4)) [AddZeroClass M] [SetLike S M] extends AddMemClass S M, ZeroMemClass S M :

            AddSubmonoidClass S M says S is a type of subsets s ≤ M that contain 0 and are closed under (+)

            Instances
              theorem pow_mem {M : Type u_3} {A : Type u_4} [Monoid M] [SetLike A M] [SubmonoidClass A M] {S : A} {x : M} (hx : x S) (n : ) :
              x ^ n S
              theorem nsmul_mem {M : Type u_3} {A : Type u_4} [AddMonoid M] [SetLike A M] [AddSubmonoidClass A M] {S : A} {x : M} (hx : x S) (n : ) :
              n x S
              Equations
              • Submonoid.instSetLike = { coe := fun (s : Submonoid M) => s.carrier, coe_injective' := }
              Equations
              • AddSubmonoid.instSetLike = { coe := fun (s : AddSubmonoid M) => s.carrier, coe_injective' := }
              Equations
              • =
              @[simp]
              theorem Submonoid.mem_toSubsemigroup {M : Type u_1} [MulOneClass M] {s : Submonoid M} {x : M} :
              x s.toSubsemigroup x s
              @[simp]
              theorem AddSubmonoid.mem_toSubsemigroup {M : Type u_1} [AddZeroClass M] {s : AddSubmonoid M} {x : M} :
              x s.toAddSubsemigroup x s
              theorem Submonoid.mem_carrier {M : Type u_1} [MulOneClass M] {s : Submonoid M} {x : M} :
              x s.carrier x s
              theorem AddSubmonoid.mem_carrier {M : Type u_1} [AddZeroClass M] {s : AddSubmonoid M} {x : M} :
              x s.carrier x s
              @[simp]
              theorem Submonoid.mem_mk {M : Type u_1} [MulOneClass M] {s : Subsemigroup M} {x : M} (h_one : 1 s.carrier) :
              x { toSubsemigroup := s, one_mem' := h_one } x s
              @[simp]
              theorem AddSubmonoid.mem_mk {M : Type u_1} [AddZeroClass M] {s : AddSubsemigroup M} {x : M} (h_one : 0 s.carrier) :
              x { toAddSubsemigroup := s, zero_mem' := h_one } x s
              @[simp]
              theorem Submonoid.coe_set_mk {M : Type u_1} [MulOneClass M] {s : Subsemigroup M} (h_one : 1 s.carrier) :
              { toSubsemigroup := s, one_mem' := h_one } = s
              @[simp]
              theorem AddSubmonoid.coe_set_mk {M : Type u_1} [AddZeroClass M] {s : AddSubsemigroup M} (h_one : 0 s.carrier) :
              { toAddSubsemigroup := s, zero_mem' := h_one } = s
              @[simp]
              theorem Submonoid.mk_le_mk {M : Type u_1} [MulOneClass M] {s t : Subsemigroup M} (h_one : 1 s.carrier) (h_one' : 1 t.carrier) :
              { toSubsemigroup := s, one_mem' := h_one } { toSubsemigroup := t, one_mem' := h_one' } s t
              @[simp]
              theorem AddSubmonoid.mk_le_mk {M : Type u_1} [AddZeroClass M] {s t : AddSubsemigroup M} (h_one : 0 s.carrier) (h_one' : 0 t.carrier) :
              { toAddSubsemigroup := s, zero_mem' := h_one } { toAddSubsemigroup := t, zero_mem' := h_one' } s t
              theorem AddSubmonoid.ext {M : Type u_1} [AddZeroClass M] {S T : AddSubmonoid M} (h : ∀ (x : M), x S x T) :
              S = T

              Two AddSubmonoids are equal if they have the same elements.

              theorem Submonoid.ext {M : Type u_1} [MulOneClass M] {S T : Submonoid M} (h : ∀ (x : M), x S x T) :
              S = T

              Two submonoids are equal if they have the same elements.

              def Submonoid.copy {M : Type u_1} [MulOneClass M] (S : Submonoid M) (s : Set M) (hs : s = S) :

              Copy a submonoid replacing carrier with a set that is equal to it.

              Equations
              • S.copy s hs = { carrier := s, mul_mem' := , one_mem' := }
              Instances For
                def AddSubmonoid.copy {M : Type u_1} [AddZeroClass M] (S : AddSubmonoid M) (s : Set M) (hs : s = S) :

                Copy an additive submonoid replacing carrier with a set that is equal to it.

                Equations
                • S.copy s hs = { carrier := s, add_mem' := , zero_mem' := }
                Instances For
                  @[simp]
                  theorem Submonoid.coe_copy {M : Type u_1} [MulOneClass M] {S : Submonoid M} {s : Set M} (hs : s = S) :
                  (S.copy s hs) = s
                  @[simp]
                  theorem AddSubmonoid.coe_copy {M : Type u_1} [AddZeroClass M] {S : AddSubmonoid M} {s : Set M} (hs : s = S) :
                  (S.copy s hs) = s
                  theorem Submonoid.copy_eq {M : Type u_1} [MulOneClass M] {S : Submonoid M} {s : Set M} (hs : s = S) :
                  S.copy s hs = S
                  theorem AddSubmonoid.copy_eq {M : Type u_1} [AddZeroClass M] {S : AddSubmonoid M} {s : Set M} (hs : s = S) :
                  S.copy s hs = S
                  theorem Submonoid.one_mem {M : Type u_1} [MulOneClass M] (S : Submonoid M) :
                  1 S

                  A submonoid contains the monoid's 1.

                  theorem AddSubmonoid.zero_mem {M : Type u_1} [AddZeroClass M] (S : AddSubmonoid M) :
                  0 S

                  An AddSubmonoid contains the monoid's 0.

                  theorem Submonoid.mul_mem {M : Type u_1} [MulOneClass M] (S : Submonoid M) {x y : M} :
                  x Sy Sx * y S

                  A submonoid is closed under multiplication.

                  theorem AddSubmonoid.add_mem {M : Type u_1} [AddZeroClass M] (S : AddSubmonoid M) {x y : M} :
                  x Sy Sx + y S

                  An AddSubmonoid is closed under addition.

                  instance Submonoid.instTop {M : Type u_1} [MulOneClass M] :

                  The submonoid M of the monoid M.

                  Equations
                  • Submonoid.instTop = { top := { carrier := Set.univ, mul_mem' := , one_mem' := } }

                  The additive submonoid M of the AddMonoid M.

                  Equations
                  • AddSubmonoid.instTop = { top := { carrier := Set.univ, add_mem' := , zero_mem' := } }
                  instance Submonoid.instBot {M : Type u_1} [MulOneClass M] :

                  The trivial submonoid {1} of a monoid M.

                  Equations
                  • Submonoid.instBot = { bot := { carrier := {1}, mul_mem' := , one_mem' := } }

                  The trivial AddSubmonoid {0} of an AddMonoid M.

                  Equations
                  • AddSubmonoid.instBot = { bot := { carrier := {0}, add_mem' := , zero_mem' := } }
                  Equations
                  • Submonoid.instInhabited = { default := }
                  Equations
                  • AddSubmonoid.instInhabited = { default := }
                  @[simp]
                  theorem Submonoid.mem_bot {M : Type u_1} [MulOneClass M] {x : M} :
                  x x = 1
                  @[simp]
                  theorem AddSubmonoid.mem_bot {M : Type u_1} [AddZeroClass M] {x : M} :
                  x x = 0
                  @[simp]
                  theorem Submonoid.mem_top {M : Type u_1} [MulOneClass M] (x : M) :
                  @[simp]
                  theorem AddSubmonoid.mem_top {M : Type u_1} [AddZeroClass M] (x : M) :
                  @[simp]
                  theorem Submonoid.coe_top {M : Type u_1} [MulOneClass M] :
                  = Set.univ
                  @[simp]
                  theorem AddSubmonoid.coe_top {M : Type u_1} [AddZeroClass M] :
                  = Set.univ
                  @[simp]
                  theorem Submonoid.coe_bot {M : Type u_1} [MulOneClass M] :
                  = {1}
                  @[simp]
                  theorem AddSubmonoid.coe_bot {M : Type u_1} [AddZeroClass M] :
                  = {0}
                  instance Submonoid.instMin {M : Type u_1} [MulOneClass M] :

                  The inf of two submonoids is their intersection.

                  Equations
                  • Submonoid.instMin = { min := fun (S₁ S₂ : Submonoid M) => { carrier := S₁ S₂, mul_mem' := , one_mem' := } }

                  The inf of two AddSubmonoids is their intersection.

                  Equations
                  • AddSubmonoid.instMin = { min := fun (S₁ S₂ : AddSubmonoid M) => { carrier := S₁ S₂, add_mem' := , zero_mem' := } }
                  @[simp]
                  theorem Submonoid.coe_inf {M : Type u_1} [MulOneClass M] (p p' : Submonoid M) :
                  (p p') = p p'
                  @[simp]
                  theorem AddSubmonoid.coe_inf {M : Type u_1} [AddZeroClass M] (p p' : AddSubmonoid M) :
                  (p p') = p p'
                  @[simp]
                  theorem Submonoid.mem_inf {M : Type u_1} [MulOneClass M] {p p' : Submonoid M} {x : M} :
                  x p p' x p x p'
                  @[simp]
                  theorem AddSubmonoid.mem_inf {M : Type u_1} [AddZeroClass M] {p p' : AddSubmonoid M} {x : M} :
                  x p p' x p x p'
                  Equations
                  • Submonoid.instUniqueOfSubsingleton = { default := , uniq := }
                  Equations
                  • AddSubmonoid.instUniqueOfSubsingleton = { default := , uniq := }
                  Equations
                  • =
                  def MonoidHom.eqLocusM {M : Type u_1} {N : Type u_2} [MulOneClass M] [MulOneClass N] (f g : M →* N) :

                  The submonoid of elements x : M such that f x = g x

                  Equations
                  • f.eqLocusM g = { carrier := {x : M | f x = g x}, mul_mem' := , one_mem' := }
                  Instances For
                    def AddMonoidHom.eqLocusM {M : Type u_1} {N : Type u_2} [AddZeroClass M] [AddZeroClass N] (f g : M →+ N) :

                    The additive submonoid of elements x : M such that f x = g x

                    Equations
                    • f.eqLocusM g = { carrier := {x : M | f x = g x}, add_mem' := , zero_mem' := }
                    Instances For
                      @[simp]
                      theorem MonoidHom.eqLocusM_same {M : Type u_1} {N : Type u_2} [MulOneClass M] [MulOneClass N] (f : M →* N) :
                      f.eqLocusM f =
                      @[simp]
                      theorem AddMonoidHom.eqLocusM_same {M : Type u_1} {N : Type u_2} [AddZeroClass M] [AddZeroClass N] (f : M →+ N) :
                      f.eqLocusM f =
                      theorem MonoidHom.eq_of_eqOn_topM {M : Type u_1} {N : Type u_2} [MulOneClass M] [MulOneClass N] {f g : M →* N} (h : Set.EqOn f g ) :
                      f = g
                      theorem AddMonoidHom.eq_of_eqOn_topM {M : Type u_1} {N : Type u_2} [AddZeroClass M] [AddZeroClass N] {f g : M →+ N} (h : Set.EqOn f g ) :
                      f = g
                      instance OneMemClass.one {A : Type u_3} {M₁ : Type u_4} [SetLike A M₁] [One M₁] [hA : OneMemClass A M₁] (S' : A) :
                      One S'

                      A submonoid of a monoid inherits a 1.

                      Equations
                      instance ZeroMemClass.zero {A : Type u_3} {M₁ : Type u_4} [SetLike A M₁] [Zero M₁] [hA : ZeroMemClass A M₁] (S' : A) :
                      Zero S'

                      An AddSubmonoid of an AddMonoid inherits a zero.

                      Equations
                      @[simp]
                      theorem OneMemClass.coe_one {A : Type u_3} {M₁ : Type u_4} [SetLike A M₁] [One M₁] [hA : OneMemClass A M₁] (S' : A) :
                      1 = 1
                      @[simp]
                      theorem ZeroMemClass.coe_zero {A : Type u_3} {M₁ : Type u_4} [SetLike A M₁] [Zero M₁] [hA : ZeroMemClass A M₁] (S' : A) :
                      0 = 0
                      @[simp]
                      theorem OneMemClass.coe_eq_one {A : Type u_3} {M₁ : Type u_4} [SetLike A M₁] [One M₁] [hA : OneMemClass A M₁] {S' : A} {x : S'} :
                      x = 1 x = 1
                      @[simp]
                      theorem ZeroMemClass.coe_eq_zero {A : Type u_3} {M₁ : Type u_4} [SetLike A M₁] [Zero M₁] [hA : ZeroMemClass A M₁] {S' : A} {x : S'} :
                      x = 0 x = 0
                      theorem OneMemClass.one_def {A : Type u_3} {M₁ : Type u_4} [SetLike A M₁] [One M₁] [hA : OneMemClass A M₁] (S' : A) :
                      1 = 1,
                      theorem ZeroMemClass.zero_def {A : Type u_3} {M₁ : Type u_4} [SetLike A M₁] [Zero M₁] [hA : ZeroMemClass A M₁] (S' : A) :
                      0 = 0,
                      instance AddSubmonoidClass.nSMul {M : Type u_5} [AddMonoid M] {A : Type u_4} [SetLike A M] [AddSubmonoidClass A M] (S : A) :
                      SMul S

                      An AddSubmonoid of an AddMonoid inherits a scalar multiplication.

                      Equations
                      instance SubmonoidClass.nPow {M : Type u_5} [Monoid M] {A : Type u_4} [SetLike A M] [SubmonoidClass A M] (S : A) :
                      Pow S

                      A submonoid of a monoid inherits a power operator.

                      Equations
                      @[simp]
                      theorem SubmonoidClass.coe_pow {M : Type u_5} [Monoid M] {A : Type u_4} [SetLike A M] [SubmonoidClass A M] {S : A} (x : S) (n : ) :
                      (x ^ n) = x ^ n
                      @[simp]
                      theorem AddSubmonoidClass.coe_nsmul {M : Type u_5} [AddMonoid M] {A : Type u_4} [SetLike A M] [AddSubmonoidClass A M] {S : A} (x : S) (n : ) :
                      (n x) = n x
                      @[simp]
                      theorem SubmonoidClass.mk_pow {M : Type u_5} [Monoid M] {A : Type u_4} [SetLike A M] [SubmonoidClass A M] {S : A} (x : M) (hx : x S) (n : ) :
                      x, hx ^ n = x ^ n,
                      @[simp]
                      theorem AddSubmonoidClass.mk_nsmul {M : Type u_5} [AddMonoid M] {A : Type u_4} [SetLike A M] [AddSubmonoidClass A M] {S : A} (x : M) (hx : x S) (n : ) :
                      n x, hx = n x,
                      @[instance 75]
                      instance SubmonoidClass.toMulOneClass {M : Type u_4} [MulOneClass M] {A : Type u_5} [SetLike A M] [SubmonoidClass A M] (S : A) :

                      A submonoid of a unital magma inherits a unital magma structure.

                      Equations
                      @[instance 75]
                      instance AddSubmonoidClass.toAddZeroClass {M : Type u_4} [AddZeroClass M] {A : Type u_5} [SetLike A M] [AddSubmonoidClass A M] (S : A) :

                      An AddSubmonoid of a unital additive magma inherits a unital additive magma structure.

                      Equations
                      @[instance 75]
                      instance SubmonoidClass.toMonoid {M : Type u_4} [Monoid M] {A : Type u_5} [SetLike A M] [SubmonoidClass A M] (S : A) :
                      Monoid S

                      A submonoid of a monoid inherits a monoid structure.

                      Equations
                      @[instance 75]
                      instance AddSubmonoidClass.toAddMonoid {M : Type u_4} [AddMonoid M] {A : Type u_5} [SetLike A M] [AddSubmonoidClass A M] (S : A) :

                      An AddSubmonoid of an AddMonoid inherits an AddMonoid structure.

                      Equations
                      @[instance 75]
                      instance SubmonoidClass.toCommMonoid {M : Type u_5} [CommMonoid M] {A : Type u_4} [SetLike A M] [SubmonoidClass A M] (S : A) :

                      A submonoid of a CommMonoid is a CommMonoid.

                      Equations
                      @[instance 75]
                      instance AddSubmonoidClass.toAddCommMonoid {M : Type u_5} [AddCommMonoid M] {A : Type u_4} [SetLike A M] [AddSubmonoidClass A M] (S : A) :

                      An AddSubmonoid of an AddCommMonoid is an AddCommMonoid.

                      Equations
                      def SubmonoidClass.subtype {M : Type u_1} {A : Type u_3} [MulOneClass M] [SetLike A M] [hA : SubmonoidClass A M] (S' : A) :
                      S' →* M

                      The natural monoid hom from a submonoid of monoid M to M.

                      Equations
                      Instances For
                        def AddSubmonoidClass.subtype {M : Type u_1} {A : Type u_3} [AddZeroClass M] [SetLike A M] [hA : AddSubmonoidClass A M] (S' : A) :
                        S' →+ M

                        The natural monoid hom from an AddSubmonoid of AddMonoid M to M.

                        Equations
                        Instances For
                          @[simp]
                          theorem SubmonoidClass.coe_subtype {M : Type u_1} {A : Type u_3} [MulOneClass M] [SetLike A M] [hA : SubmonoidClass A M] (S' : A) :
                          (SubmonoidClass.subtype S') = Subtype.val
                          @[simp]
                          theorem AddSubmonoidClass.coe_subtype {M : Type u_1} {A : Type u_3} [AddZeroClass M] [SetLike A M] [hA : AddSubmonoidClass A M] (S' : A) :
                          (AddSubmonoidClass.subtype S') = Subtype.val
                          instance Submonoid.mul {M : Type u_4} [MulOneClass M] (S : Submonoid M) :
                          Mul S

                          A submonoid of a monoid inherits a multiplication.

                          Equations
                          • S.mul = { mul := fun (a b : S) => a * b, }
                          instance AddSubmonoid.add {M : Type u_4} [AddZeroClass M] (S : AddSubmonoid M) :
                          Add S

                          An AddSubmonoid of an AddMonoid inherits an addition.

                          Equations
                          • S.add = { add := fun (a b : S) => a + b, }
                          instance Submonoid.one {M : Type u_4} [MulOneClass M] (S : Submonoid M) :
                          One S

                          A submonoid of a monoid inherits a 1.

                          Equations
                          • S.one = { one := 1, }
                          instance AddSubmonoid.zero {M : Type u_4} [AddZeroClass M] (S : AddSubmonoid M) :
                          Zero S

                          An AddSubmonoid of an AddMonoid inherits a zero.

                          Equations
                          • S.zero = { zero := 0, }
                          @[simp]
                          theorem Submonoid.coe_mul {M : Type u_4} [MulOneClass M] (S : Submonoid M) (x y : S) :
                          (x * y) = x * y
                          @[simp]
                          theorem AddSubmonoid.coe_add {M : Type u_4} [AddZeroClass M] (S : AddSubmonoid M) (x y : S) :
                          (x + y) = x + y
                          @[simp]
                          theorem Submonoid.coe_one {M : Type u_4} [MulOneClass M] (S : Submonoid M) :
                          1 = 1
                          @[simp]
                          theorem AddSubmonoid.coe_zero {M : Type u_4} [AddZeroClass M] (S : AddSubmonoid M) :
                          0 = 0
                          @[simp]
                          theorem Submonoid.mk_eq_one {M : Type u_4} [MulOneClass M] (S : Submonoid M) {a : M} {ha : a S} :
                          a, ha = 1 a = 1
                          @[simp]
                          theorem AddSubmonoid.mk_eq_zero {M : Type u_4} [AddZeroClass M] (S : AddSubmonoid M) {a : M} {ha : a S} :
                          a, ha = 0 a = 0
                          @[simp]
                          theorem Submonoid.mk_mul_mk {M : Type u_4} [MulOneClass M] (S : Submonoid M) (x y : M) (hx : x S) (hy : y S) :
                          x, hx * y, hy = x * y,
                          @[simp]
                          theorem AddSubmonoid.mk_add_mk {M : Type u_4} [AddZeroClass M] (S : AddSubmonoid M) (x y : M) (hx : x S) (hy : y S) :
                          x, hx + y, hy = x + y,
                          theorem Submonoid.mul_def {M : Type u_4} [MulOneClass M] (S : Submonoid M) (x y : S) :
                          x * y = x * y,
                          theorem AddSubmonoid.add_def {M : Type u_4} [AddZeroClass M] (S : AddSubmonoid M) (x y : S) :
                          x + y = x + y,
                          theorem Submonoid.one_def {M : Type u_4} [MulOneClass M] (S : Submonoid M) :
                          1 = 1,
                          theorem AddSubmonoid.zero_def {M : Type u_4} [AddZeroClass M] (S : AddSubmonoid M) :
                          0 = 0,
                          instance Submonoid.toMulOneClass {M : Type u_5} [MulOneClass M] (S : Submonoid M) :

                          A submonoid of a unital magma inherits a unital magma structure.

                          Equations

                          An AddSubmonoid of a unital additive magma inherits a unital additive magma structure.

                          Equations
                          theorem Submonoid.pow_mem {M : Type u_5} [Monoid M] (S : Submonoid M) {x : M} (hx : x S) (n : ) :
                          x ^ n S
                          theorem AddSubmonoid.nsmul_mem {M : Type u_5} [AddMonoid M] (S : AddSubmonoid M) {x : M} (hx : x S) (n : ) :
                          n x S
                          instance Submonoid.toMonoid {M : Type u_5} [Monoid M] (S : Submonoid M) :
                          Monoid S

                          A submonoid of a monoid inherits a monoid structure.

                          Equations
                          instance AddSubmonoid.toAddMonoid {M : Type u_5} [AddMonoid M] (S : AddSubmonoid M) :

                          An AddSubmonoid of an AddMonoid inherits an AddMonoid structure.

                          Equations
                          instance Submonoid.toCommMonoid {M : Type u_5} [CommMonoid M] (S : Submonoid M) :

                          A submonoid of a CommMonoid is a CommMonoid.

                          Equations

                          An AddSubmonoid of an AddCommMonoid is an AddCommMonoid.

                          Equations
                          def Submonoid.subtype {M : Type u_4} [MulOneClass M] (S : Submonoid M) :
                          S →* M

                          The natural monoid hom from a submonoid of monoid M to M.

                          Equations
                          • S.subtype = { toFun := Subtype.val, map_one' := , map_mul' := }
                          Instances For
                            def AddSubmonoid.subtype {M : Type u_4} [AddZeroClass M] (S : AddSubmonoid M) :
                            S →+ M

                            The natural monoid hom from an AddSubmonoid of AddMonoid M to M.

                            Equations
                            • S.subtype = { toFun := Subtype.val, map_zero' := , map_add' := }
                            Instances For
                              @[simp]
                              theorem Submonoid.coe_subtype {M : Type u_4} [MulOneClass M] (S : Submonoid M) :
                              S.subtype = Subtype.val
                              @[simp]
                              theorem AddSubmonoid.coe_subtype {M : Type u_4} [AddZeroClass M] (S : AddSubmonoid M) :
                              S.subtype = Subtype.val