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.

      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.

        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
          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' := }
          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' := }
          @[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

          The additive submonoid M of the AddMonoid M.

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

          The trivial submonoid {1} of a monoid M.

          Equations

          The trivial AddSubmonoid {0} of an AddMonoid M.

          Equations
          @[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] :
          @[simp]
          @[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

          The inf of two AddSubmonoids is their intersection.

          Equations
          @[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'
          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' := }
          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' := }
          @[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
          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
          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
          @[simp]
          theorem SubmonoidClass.coe_subtype {M : Type u_1} {A : Type u_3} [MulOneClass M] [SetLike A M] [hA : SubmonoidClass A M] (S' : A) :
          @[simp]
          theorem AddSubmonoidClass.coe_subtype {M : Type u_1} {A : Type u_3} [AddZeroClass M] [SetLike A M] [hA : AddSubmonoidClass A M] (S' : A) :
          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
          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' := }
          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' := }
          @[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