Documentation

Mathlib.Algebra.Group.Subsemigroup.Basic

Subsemigroups: CompleteLattice structure #

This file defines a CompleteLattice structure on Subsemigroups, and define the closure of a set as the minimal subsemigroup that includes this set.

Main definitions #

For each of the following definitions in the Subsemigroup namespace, there is a corresponding definition in the AddSubsemigroup namespace.

Implementation notes #

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

Note that Subsemigroup M does not actually require Semigroup M, instead requiring only the weaker Mul M.

This file is designed to have very few dependencies. In particular, it should not use natural numbers.

Tags #

subsemigroup, subsemigroups

instance Subsemigroup.instInfSet {M : Type u_1} [Mul M] :
Equations
  • Subsemigroup.instInfSet = { sInf := fun (s : Set (Subsemigroup M)) => { carrier := ts, t, mul_mem' := } }
Equations
  • AddSubsemigroup.instInfSet = { sInf := fun (s : Set (AddSubsemigroup M)) => { carrier := ts, t, add_mem' := } }
@[simp]
theorem Subsemigroup.coe_sInf {M : Type u_1} [Mul M] (S : Set (Subsemigroup M)) :
(sInf S) = sS, s
@[simp]
theorem AddSubsemigroup.coe_sInf {M : Type u_1} [Add M] (S : Set (AddSubsemigroup M)) :
(sInf S) = sS, s
theorem Subsemigroup.mem_sInf {M : Type u_1} [Mul M] {S : Set (Subsemigroup M)} {x : M} :
x sInf S pS, x p
theorem AddSubsemigroup.mem_sInf {M : Type u_1} [Add M] {S : Set (AddSubsemigroup M)} {x : M} :
x sInf S pS, x p
theorem Subsemigroup.mem_iInf {M : Type u_1} [Mul M] {ι : Sort u_3} {S : ιSubsemigroup M} {x : M} :
x ⨅ (i : ι), S i ∀ (i : ι), x S i
theorem AddSubsemigroup.mem_iInf {M : Type u_1} [Add M] {ι : Sort u_3} {S : ιAddSubsemigroup M} {x : M} :
x ⨅ (i : ι), S i ∀ (i : ι), x S i
@[simp]
theorem Subsemigroup.coe_iInf {M : Type u_1} [Mul M] {ι : Sort u_3} {S : ιSubsemigroup M} :
(⨅ (i : ι), S i) = ⋂ (i : ι), (S i)
@[simp]
theorem AddSubsemigroup.coe_iInf {M : Type u_1} [Add M] {ι : Sort u_3} {S : ιAddSubsemigroup M} :
(⨅ (i : ι), S i) = ⋂ (i : ι), (S i)

subsemigroups of a monoid form a complete lattice.

Equations

The AddSubsemigroups of an AddMonoid form a complete lattice.

Equations
def Subsemigroup.closure {M : Type u_1} [Mul M] (s : Set M) :

The Subsemigroup generated by a set.

Equations
Instances For
    def AddSubsemigroup.closure {M : Type u_1} [Add M] (s : Set M) :

    The AddSubsemigroup generated by a set

    Equations
    Instances For
      theorem Subsemigroup.mem_closure {M : Type u_1} [Mul M] {s : Set M} {x : M} :
      x Subsemigroup.closure s ∀ (S : Subsemigroup M), s Sx S
      theorem AddSubsemigroup.mem_closure {M : Type u_1} [Add M] {s : Set M} {x : M} :
      x AddSubsemigroup.closure s ∀ (S : AddSubsemigroup M), s Sx S
      @[simp]
      theorem Subsemigroup.subset_closure {M : Type u_1} [Mul M] {s : Set M} :

      The subsemigroup generated by a set includes the set.

      @[simp]
      theorem AddSubsemigroup.subset_closure {M : Type u_1} [Add M] {s : Set M} :

      The AddSubsemigroup generated by a set includes the set.

      theorem Subsemigroup.not_mem_of_not_mem_closure {M : Type u_1} [Mul M] {s : Set M} {P : M} (hP : PSubsemigroup.closure s) :
      Ps
      theorem AddSubsemigroup.not_mem_of_not_mem_closure {M : Type u_1} [Add M] {s : Set M} {P : M} (hP : PAddSubsemigroup.closure s) :
      Ps
      @[simp]
      theorem Subsemigroup.closure_le {M : Type u_1} [Mul M] {s : Set M} {S : Subsemigroup M} :

      A subsemigroup S includes closure s if and only if it includes s.

      @[simp]
      theorem AddSubsemigroup.closure_le {M : Type u_1} [Add M] {s : Set M} {S : AddSubsemigroup M} :

      An additive subsemigroup S includes closure s if and only if it includes s

      theorem Subsemigroup.closure_mono {M : Type u_1} [Mul M] ⦃s t : Set M (h : s t) :

      subsemigroup closure of a set is monotone in its argument: if s ⊆ t, then closure s ≤ closure t.

      Additive subsemigroup closure of a set is monotone in its argument: if s ⊆ t, then closure s ≤ closure t

      theorem Subsemigroup.closure_eq_of_le {M : Type u_1} [Mul M] {s : Set M} {S : Subsemigroup M} (h₁ : s S) (h₂ : S Subsemigroup.closure s) :
      theorem AddSubsemigroup.closure_eq_of_le {M : Type u_1} [Add M] {s : Set M} {S : AddSubsemigroup M} (h₁ : s S) (h₂ : S AddSubsemigroup.closure s) :
      theorem Subsemigroup.closure_induction {M : Type u_1} [Mul M] {s : Set M} {p : (x : M) → x Subsemigroup.closure sProp} (mem : ∀ (x : M) (h : x s), p x ) (mul : ∀ (x y : M) (hx : x Subsemigroup.closure s) (hy : y Subsemigroup.closure s), p x hxp y hyp (x * y) ) {x : M} (hx : x Subsemigroup.closure s) :
      p x hx

      An induction principle for closure membership. If p holds for all elements of s, and is preserved under multiplication, then p holds for all elements of the closure of s.

      theorem AddSubsemigroup.closure_induction {M : Type u_1} [Add M] {s : Set M} {p : (x : M) → x AddSubsemigroup.closure sProp} (mem : ∀ (x : M) (h : x s), p x ) (mul : ∀ (x y : M) (hx : x AddSubsemigroup.closure s) (hy : y AddSubsemigroup.closure s), p x hxp y hyp (x + y) ) {x : M} (hx : x AddSubsemigroup.closure s) :
      p x hx

      An induction principle for additive closure membership. If p holds for all elements of s, and is preserved under addition, then p holds for all elements of the additive closure of s.

      @[deprecated Subsemigroup.closure_induction]
      theorem Subsemigroup.closure_induction' {M : Type u_1} [Mul M] {s : Set M} {p : (x : M) → x Subsemigroup.closure sProp} (mem : ∀ (x : M) (h : x s), p x ) (mul : ∀ (x y : M) (hx : x Subsemigroup.closure s) (hy : y Subsemigroup.closure s), p x hxp y hyp (x * y) ) {x : M} (hx : x Subsemigroup.closure s) :
      p x hx

      Alias of Subsemigroup.closure_induction.


      An induction principle for closure membership. If p holds for all elements of s, and is preserved under multiplication, then p holds for all elements of the closure of s.

      theorem Subsemigroup.closure_induction₂ {M : Type u_1} [Mul M] {s : Set M} {p : (x y : M) → x Subsemigroup.closure sy Subsemigroup.closure sProp} (mem : ∀ (x y : M) (hx : x s) (hy : y s), p x y ) (mul_left : ∀ (x y z : M) (hx : x Subsemigroup.closure s) (hy : y Subsemigroup.closure s) (hz : z Subsemigroup.closure s), p x z hx hzp y z hy hzp (x * y) z hz) (mul_right : ∀ (x y z : M) (hx : x Subsemigroup.closure s) (hy : y Subsemigroup.closure s) (hz : z Subsemigroup.closure s), p z x hz hxp z y hz hyp z (x * y) hz ) {x y : M} (hx : x Subsemigroup.closure s) (hy : y Subsemigroup.closure s) :
      p x y hx hy

      An induction principle for closure membership for predicates with two arguments.

      theorem AddSubsemigroup.closure_induction₂ {M : Type u_1} [Add M] {s : Set M} {p : (x y : M) → x AddSubsemigroup.closure sy AddSubsemigroup.closure sProp} (mem : ∀ (x y : M) (hx : x s) (hy : y s), p x y ) (mul_left : ∀ (x y z : M) (hx : x AddSubsemigroup.closure s) (hy : y AddSubsemigroup.closure s) (hz : z AddSubsemigroup.closure s), p x z hx hzp y z hy hzp (x + y) z hz) (mul_right : ∀ (x y z : M) (hx : x AddSubsemigroup.closure s) (hy : y AddSubsemigroup.closure s) (hz : z AddSubsemigroup.closure s), p z x hz hxp z y hz hyp z (x + y) hz ) {x y : M} (hx : x AddSubsemigroup.closure s) (hy : y AddSubsemigroup.closure s) :
      p x y hx hy

      An induction principle for additive closure membership for predicates with two arguments.

      theorem Subsemigroup.dense_induction {M : Type u_1} [Mul M] {p : MProp} (s : Set M) (closure : Subsemigroup.closure s = ) (mem : xs, p x) (mul : ∀ (x y : M), p xp yp (x * y)) (x : M) :
      p x

      If s is a dense set in a magma M, Subsemigroup.closure s = ⊤, then in order to prove that some predicate p holds for all x : M it suffices to verify p x for x ∈ s, and verify that p x and p y imply p (x * y).

      theorem AddSubsemigroup.dense_induction {M : Type u_1} [Add M] {p : MProp} (s : Set M) (closure : AddSubsemigroup.closure s = ) (mem : xs, p x) (mul : ∀ (x y : M), p xp yp (x + y)) (x : M) :
      p x

      If s is a dense set in an additive monoid M, AddSubsemigroup.closure s = ⊤, then in order to prove that some predicate p holds for all x : M it suffices to verify p x for x ∈ s, and verify that p x and p y imply p (x + y).

      def Subsemigroup.gi (M : Type u_1) [Mul M] :
      GaloisInsertion Subsemigroup.closure SetLike.coe

      closure forms a Galois insertion with the coercion to set.

      Equations
      Instances For
        def AddSubsemigroup.gi (M : Type u_1) [Add M] :
        GaloisInsertion AddSubsemigroup.closure SetLike.coe

        closure forms a Galois insertion with the coercion to set.

        Equations
        Instances For
          @[simp]
          theorem Subsemigroup.closure_eq {M : Type u_1} [Mul M] (S : Subsemigroup M) :

          Closure of a subsemigroup S equals S.

          @[simp]

          Additive closure of an additive subsemigroup S equals S

          @[simp]
          theorem Subsemigroup.closure_iUnion {M : Type u_1} [Mul M] {ι : Sort u_3} (s : ιSet M) :
          Subsemigroup.closure (⋃ (i : ι), s i) = ⨆ (i : ι), Subsemigroup.closure (s i)
          theorem AddSubsemigroup.closure_iUnion {M : Type u_1} [Add M] {ι : Sort u_3} (s : ιSet M) :
          AddSubsemigroup.closure (⋃ (i : ι), s i) = ⨆ (i : ι), AddSubsemigroup.closure (s i)
          theorem Subsemigroup.mem_iSup {M : Type u_1} [Mul M] {ι : Sort u_3} (p : ιSubsemigroup M) {m : M} :
          m ⨆ (i : ι), p i ∀ (N : Subsemigroup M), (∀ (i : ι), p i N)m N
          theorem AddSubsemigroup.mem_iSup {M : Type u_1} [Add M] {ι : Sort u_3} (p : ιAddSubsemigroup M) {m : M} :
          m ⨆ (i : ι), p i ∀ (N : AddSubsemigroup M), (∀ (i : ι), p i N)m N
          theorem Subsemigroup.iSup_eq_closure {M : Type u_1} [Mul M] {ι : Sort u_3} (p : ιSubsemigroup M) :
          ⨆ (i : ι), p i = Subsemigroup.closure (⋃ (i : ι), (p i))
          theorem AddSubsemigroup.iSup_eq_closure {M : Type u_1} [Add M] {ι : Sort u_3} (p : ιAddSubsemigroup M) :
          ⨆ (i : ι), p i = AddSubsemigroup.closure (⋃ (i : ι), (p i))
          theorem MulHom.eqOn_closure {M : Type u_1} {N : Type u_2} [Mul M] [Mul N] {f g : M →ₙ* N} {s : Set M} (h : Set.EqOn (⇑f) (⇑g) s) :

          If two mul homomorphisms are equal on a set, then they are equal on its subsemigroup closure.

          theorem AddHom.eqOn_closure {M : Type u_1} {N : Type u_2} [Add M] [Add N] {f g : M →ₙ+ N} {s : Set M} (h : Set.EqOn (⇑f) (⇑g) s) :

          If two add homomorphisms are equal on a set, then they are equal on its additive subsemigroup closure.

          theorem MulHom.eq_of_eqOn_dense {M : Type u_1} {N : Type u_2} [Mul M] [Mul N] {s : Set M} (hs : Subsemigroup.closure s = ) {f g : M →ₙ* N} (h : Set.EqOn (⇑f) (⇑g) s) :
          f = g
          theorem AddHom.eq_of_eqOn_dense {M : Type u_1} {N : Type u_2} [Add M] [Add N] {s : Set M} (hs : AddSubsemigroup.closure s = ) {f g : M →ₙ+ N} (h : Set.EqOn (⇑f) (⇑g) s) :
          f = g
          def MulHom.ofDense {M : Type u_3} {N : Type u_4} [Semigroup M] [Semigroup N] {s : Set M} (f : MN) (hs : Subsemigroup.closure s = ) (hmul : ∀ (x y : M), y sf (x * y) = f x * f y) :

          Let s be a subset of a semigroup M such that the closure of s is the whole semigroup. Then MulHom.ofDense defines a mul homomorphism from M asking for a proof of f (x * y) = f x * f y only for y ∈ s.

          Equations
          Instances For
            def AddHom.ofDense {M : Type u_3} {N : Type u_4} [AddSemigroup M] [AddSemigroup N] {s : Set M} (f : MN) (hs : AddSubsemigroup.closure s = ) (hmul : ∀ (x y : M), y sf (x + y) = f x + f y) :

            Let s be a subset of an additive semigroup M such that the closure of s is the whole semigroup. Then AddHom.ofDense defines an additive homomorphism from M asking for a proof of f (x + y) = f x + f y only for y ∈ s.

            Equations
            Instances For
              @[simp]
              theorem MulHom.coe_ofDense {M : Type u_1} {N : Type u_2} [Semigroup M] [Semigroup N] {s : Set M} (f : MN) (hs : Subsemigroup.closure s = ) (hmul : ∀ (x y : M), y sf (x * y) = f x * f y) :
              (MulHom.ofDense f hs hmul) = f
              @[simp]
              theorem AddHom.coe_ofDense {M : Type u_1} {N : Type u_2} [AddSemigroup M] [AddSemigroup N] {s : Set M} (f : MN) (hs : AddSubsemigroup.closure s = ) (hmul : ∀ (x y : M), y sf (x + y) = f x + f y) :
              (AddHom.ofDense f hs hmul) = f