Documentation

Mathlib.Algebra.Group.Submonoid.Membership

Submonoids: membership criteria #

In this file we prove various facts about membership in a submonoid:

We also define Submonoid.powers and AddSubmonoid.multiples, the submonoids generated by a single element.

Tags #

submonoid, submonoids

theorem Submonoid.mem_biSup_of_directedOn {M : Type u_1} [MulOneClass M] {ฮน : Type u_4} {p : ฮน โ†’ Prop} {K : ฮน โ†’ Submonoid M} {i : ฮน} (hp : p i) (hK : DirectedOn (Function.onFun (fun (x1 x2 : Submonoid M) => x1 โ‰ค x2) K) {i : ฮน | p i}) {x : M} :
x โˆˆ โจ† (i : ฮน), โจ† (_ : p i), K i โ†” โˆƒ (i : ฮน), p i โˆง x โˆˆ K i
theorem AddSubmonoid.mem_biSup_of_directedOn {M : Type u_1} [AddZeroClass M] {ฮน : Type u_4} {p : ฮน โ†’ Prop} {K : ฮน โ†’ AddSubmonoid M} {i : ฮน} (hp : p i) (hK : DirectedOn (Function.onFun (fun (x1 x2 : AddSubmonoid M) => x1 โ‰ค x2) K) {i : ฮน | p i}) {x : M} :
x โˆˆ โจ† (i : ฮน), โจ† (_ : p i), K i โ†” โˆƒ (i : ฮน), p i โˆง x โˆˆ K i
theorem Submonoid.mem_iSup_of_directed {M : Type u_1} [MulOneClass M] {ฮน : Sort u_4} [hฮน : Nonempty ฮน] {S : ฮน โ†’ Submonoid M} (hS : Directed (fun (x1 x2 : Submonoid M) => x1 โ‰ค x2) S) {x : M} :
x โˆˆ โจ† (i : ฮน), S i โ†” โˆƒ (i : ฮน), x โˆˆ S i
theorem AddSubmonoid.mem_iSup_of_directed {M : Type u_1} [AddZeroClass M] {ฮน : Sort u_4} [hฮน : Nonempty ฮน] {S : ฮน โ†’ AddSubmonoid M} (hS : Directed (fun (x1 x2 : AddSubmonoid M) => x1 โ‰ค x2) S) {x : M} :
x โˆˆ โจ† (i : ฮน), S i โ†” โˆƒ (i : ฮน), x โˆˆ S i
@[simp]
theorem Submonoid.mem_iSup_prop {M : Type u_1} [MulOneClass M] {p : Prop} {S : p โ†’ Submonoid M} {x : M} :
x โˆˆ โจ† (h : p), S h โ†” x = 1 โˆจ โˆƒ (h : p), x โˆˆ S h
@[simp]
theorem AddSubmonoid.mem_iSup_prop {M : Type u_1} [AddZeroClass M] {p : Prop} {S : p โ†’ AddSubmonoid M} {x : M} :
x โˆˆ โจ† (h : p), S h โ†” x = 0 โˆจ โˆƒ (h : p), x โˆˆ S h
theorem Submonoid.coe_iSup_of_directed {M : Type u_1} [MulOneClass M] {ฮน : Sort u_4} [Nonempty ฮน] {S : ฮน โ†’ Submonoid M} (hS : Directed (fun (x1 x2 : Submonoid M) => x1 โ‰ค x2) S) :
โ†‘(โจ† (i : ฮน), S i) = โ‹ƒ (i : ฮน), โ†‘(S i)
theorem AddSubmonoid.coe_iSup_of_directed {M : Type u_1} [AddZeroClass M] {ฮน : Sort u_4} [Nonempty ฮน] {S : ฮน โ†’ AddSubmonoid M} (hS : Directed (fun (x1 x2 : AddSubmonoid M) => x1 โ‰ค x2) S) :
โ†‘(โจ† (i : ฮน), S i) = โ‹ƒ (i : ฮน), โ†‘(S i)
theorem Submonoid.mem_sSup_of_directedOn {M : Type u_1} [MulOneClass M] {S : Set (Submonoid M)} (Sne : S.Nonempty) (hS : DirectedOn (fun (x1 x2 : Submonoid M) => x1 โ‰ค x2) S) {x : M} :
x โˆˆ sSup S โ†” โˆƒ s โˆˆ S, x โˆˆ s
theorem AddSubmonoid.mem_sSup_of_directedOn {M : Type u_1} [AddZeroClass M] {S : Set (AddSubmonoid M)} (Sne : S.Nonempty) (hS : DirectedOn (fun (x1 x2 : AddSubmonoid M) => x1 โ‰ค x2) S) {x : M} :
x โˆˆ sSup S โ†” โˆƒ s โˆˆ S, x โˆˆ s
theorem Submonoid.coe_sSup_of_directedOn {M : Type u_1} [MulOneClass M] {S : Set (Submonoid M)} (Sne : S.Nonempty) (hS : DirectedOn (fun (x1 x2 : Submonoid M) => x1 โ‰ค x2) S) :
โ†‘(sSup S) = โ‹ƒ s โˆˆ S, โ†‘s
theorem AddSubmonoid.coe_sSup_of_directedOn {M : Type u_1} [AddZeroClass M] {S : Set (AddSubmonoid M)} (Sne : S.Nonempty) (hS : DirectedOn (fun (x1 x2 : AddSubmonoid M) => x1 โ‰ค x2) S) :
โ†‘(sSup S) = โ‹ƒ s โˆˆ S, โ†‘s
theorem Submonoid.mem_sup_left {M : Type u_1} [MulOneClass M] {S T : Submonoid M} {x : M} :
x โˆˆ S โ†’ x โˆˆ S โŠ” T
theorem AddSubmonoid.mem_sup_left {M : Type u_1} [AddZeroClass M] {S T : AddSubmonoid M} {x : M} :
x โˆˆ S โ†’ x โˆˆ S โŠ” T
theorem Submonoid.mem_sup_right {M : Type u_1} [MulOneClass M] {S T : Submonoid M} {x : M} :
x โˆˆ T โ†’ x โˆˆ S โŠ” T
theorem AddSubmonoid.mem_sup_right {M : Type u_1} [AddZeroClass M] {S T : AddSubmonoid M} {x : M} :
x โˆˆ T โ†’ x โˆˆ S โŠ” T
theorem Submonoid.mul_mem_sup {M : Type u_1} [MulOneClass M] {S T : Submonoid M} {x y : M} (hx : x โˆˆ S) (hy : y โˆˆ T) :
x * y โˆˆ S โŠ” T
theorem AddSubmonoid.add_mem_sup {M : Type u_1} [AddZeroClass M] {S T : AddSubmonoid M} {x y : M} (hx : x โˆˆ S) (hy : y โˆˆ T) :
x + y โˆˆ S โŠ” T
theorem Submonoid.mem_iSup_of_mem {M : Type u_1} [MulOneClass M] {ฮน : Sort u_4} {S : ฮน โ†’ Submonoid M} (i : ฮน) {x : M} :
x โˆˆ S i โ†’ x โˆˆ iSup S
theorem AddSubmonoid.mem_iSup_of_mem {M : Type u_1} [AddZeroClass M] {ฮน : Sort u_4} {S : ฮน โ†’ AddSubmonoid M} (i : ฮน) {x : M} :
x โˆˆ S i โ†’ x โˆˆ iSup S
theorem Submonoid.mem_sSup_of_mem {M : Type u_1} [MulOneClass M] {S : Set (Submonoid M)} {s : Submonoid M} (hs : s โˆˆ S) {x : M} :
x โˆˆ s โ†’ x โˆˆ sSup S
theorem AddSubmonoid.mem_sSup_of_mem {M : Type u_1} [AddZeroClass M] {S : Set (AddSubmonoid M)} {s : AddSubmonoid M} (hs : s โˆˆ S) {x : M} :
x โˆˆ s โ†’ x โˆˆ sSup S
theorem Submonoid.iSup_induction {M : Type u_1} [MulOneClass M] {ฮน : Sort u_4} (S : ฮน โ†’ Submonoid M) {motive : M โ†’ Prop} {x : M} (hx : x โˆˆ โจ† (i : ฮน), S i) (mem : โˆ€ (i : ฮน), โˆ€ x โˆˆ S i, motive x) (one : motive 1) (mul : โˆ€ (x y : M), motive x โ†’ motive y โ†’ motive (x * y)) :
motive x

An induction principle for elements of โจ† i, S i. If C holds for 1 and all elements of S i for all i, and is preserved under multiplication, then it holds for all elements of the supremum of S.

theorem AddSubmonoid.iSup_induction {M : Type u_1} [AddZeroClass M] {ฮน : Sort u_4} (S : ฮน โ†’ AddSubmonoid M) {motive : M โ†’ Prop} {x : M} (hx : x โˆˆ โจ† (i : ฮน), S i) (mem : โˆ€ (i : ฮน), โˆ€ x โˆˆ S i, motive x) (zero : motive 0) (add : โˆ€ (x y : M), motive x โ†’ motive y โ†’ motive (x + y)) :
motive x

An induction principle for elements of โจ† i, S i. If C holds for 0 and all elements of S i for all i, and is preserved under addition, then it holds for all elements of the supremum of S.

theorem Submonoid.iSup_induction' {M : Type u_1} [MulOneClass M] {ฮน : Sort u_4} (S : ฮน โ†’ Submonoid M) {motive : (x : M) โ†’ x โˆˆ โจ† (i : ฮน), S i โ†’ Prop} (mem : โˆ€ (i : ฮน) (x : M) (hxS : x โˆˆ S i), motive x โ‹ฏ) (one : motive 1 โ‹ฏ) (mul : โˆ€ (x y : M) (hx : x โˆˆ โจ† (i : ฮน), S i) (hy : y โˆˆ โจ† (i : ฮน), S i), motive x hx โ†’ motive y hy โ†’ motive (x * y) โ‹ฏ) {x : M} (hx : x โˆˆ โจ† (i : ฮน), S i) :
motive x hx

A dependent version of Submonoid.iSup_induction.

theorem AddSubmonoid.iSup_induction' {M : Type u_1} [AddZeroClass M] {ฮน : Sort u_4} (S : ฮน โ†’ AddSubmonoid M) {motive : (x : M) โ†’ x โˆˆ โจ† (i : ฮน), S i โ†’ Prop} (mem : โˆ€ (i : ฮน) (x : M) (hxS : x โˆˆ S i), motive x โ‹ฏ) (zero : motive 0 โ‹ฏ) (add : โˆ€ (x y : M) (hx : x โˆˆ โจ† (i : ฮน), S i) (hy : y โˆˆ โจ† (i : ฮน), S i), motive x hx โ†’ motive y hy โ†’ motive (x + y) โ‹ฏ) {x : M} (hx : x โˆˆ โจ† (i : ฮน), S i) :
motive x hx

A dependent version of AddSubmonoid.iSup_induction.

theorem Submonoid.mem_closure_singleton {M : Type u_1} [Monoid M] {x y : M} :
y โˆˆ closure {x} โ†” โˆƒ (n : โ„•), x ^ n = y

The submonoid generated by an element of a monoid equals the set of natural number powers of the element.

theorem Submonoid.card_bot {M : Type u_1} [Monoid M] {xโœ : Fintype โ†ฅโŠฅ} :
theorem AddSubmonoid.card_bot {M : Type u_1} [AddMonoid M] {xโœ : Fintype โ†ฅโŠฅ} :
theorem Submonoid.eq_bot_of_card_le {M : Type u_1} [Monoid M] {S : Submonoid M} [Fintype โ†ฅS] (h : Fintype.card โ†ฅS โ‰ค 1) :
theorem Submonoid.eq_bot_of_card_eq {M : Type u_1} [Monoid M] {S : Submonoid M} [Fintype โ†ฅS] (h : Fintype.card โ†ฅS = 1) :
theorem AddSubmonoid.eq_bot_of_card_eq {M : Type u_1} [AddMonoid M] {S : AddSubmonoid M} [Fintype โ†ฅS] (h : Fintype.card โ†ฅS = 1) :
theorem FreeMonoid.mrange_lift {M : Type u_1} [Monoid M] {ฮฑ : Type u_4} (f : ฮฑ โ†’ M) :
theorem Submonoid.closure_eq_image_prod {M : Type u_1} [Monoid M] (s : Set M) :
โ†‘(closure s) = List.prod '' {l : List M | โˆ€ x โˆˆ l, x โˆˆ s}
theorem AddSubmonoid.closure_eq_image_sum {M : Type u_1} [AddMonoid M] (s : Set M) :
โ†‘(closure s) = List.sum '' {l : List M | โˆ€ x โˆˆ l, x โˆˆ s}
theorem Submonoid.exists_list_of_mem_closure {M : Type u_1} [Monoid M] {s : Set M} {x : M} (hx : x โˆˆ closure s) :
โˆƒ (l : List M), (โˆ€ y โˆˆ l, y โˆˆ s) โˆง l.prod = x
theorem AddSubmonoid.exists_list_of_mem_closure {M : Type u_1} [AddMonoid M] {s : Set M} {x : M} (hx : x โˆˆ closure s) :
โˆƒ (l : List M), (โˆ€ y โˆˆ l, y โˆˆ s) โˆง l.sum = x
theorem Submonoid.exists_multiset_of_mem_closure {M : Type u_4} [CommMonoid M] {s : Set M} {x : M} (hx : x โˆˆ closure s) :
โˆƒ (l : Multiset M), (โˆ€ y โˆˆ l, y โˆˆ s) โˆง l.prod = x
theorem AddSubmonoid.exists_multiset_of_mem_closure {M : Type u_4} [AddCommMonoid M] {s : Set M} {x : M} (hx : x โˆˆ closure s) :
โˆƒ (l : Multiset M), (โˆ€ y โˆˆ l, y โˆˆ s) โˆง l.sum = x
theorem Submonoid.closure_induction_left {M : Type u_1} [Monoid M] {s : Set M} {motive : (m : M) โ†’ m โˆˆ closure s โ†’ Prop} (one : motive 1 โ‹ฏ) (mul_left : โˆ€ (x : M) (hx : x โˆˆ s) (y : M) (hy : y โˆˆ closure s), motive y hy โ†’ motive (x * y) โ‹ฏ) {x : M} (h : x โˆˆ closure s) :
motive x h
theorem AddSubmonoid.closure_induction_left {M : Type u_1} [AddMonoid M] {s : Set M} {motive : (m : M) โ†’ m โˆˆ closure s โ†’ Prop} (zero : motive 0 โ‹ฏ) (add_left : โˆ€ (x : M) (hx : x โˆˆ s) (y : M) (hy : y โˆˆ closure s), motive y hy โ†’ motive (x + y) โ‹ฏ) {x : M} (h : x โˆˆ closure s) :
motive x h
theorem Submonoid.induction_of_closure_eq_top_left {M : Type u_1} [Monoid M] {s : Set M} {motive : M โ†’ Prop} (hs : closure s = โŠค) (x : M) (one : motive 1) (mul_left : โˆ€ x โˆˆ s, โˆ€ (y : M), motive y โ†’ motive (x * y)) :
motive x
theorem AddSubmonoid.induction_of_closure_eq_top_left {M : Type u_1} [AddMonoid M] {s : Set M} {motive : M โ†’ Prop} (hs : closure s = โŠค) (x : M) (zero : motive 0) (add_left : โˆ€ x โˆˆ s, โˆ€ (y : M), motive y โ†’ motive (x + y)) :
motive x
theorem Submonoid.closure_induction_right {M : Type u_1} [Monoid M] {s : Set M} {motive : (m : M) โ†’ m โˆˆ closure s โ†’ Prop} (one : motive 1 โ‹ฏ) (mul_right : โˆ€ (x : M) (hx : x โˆˆ closure s) (y : M) (hy : y โˆˆ s), motive x hx โ†’ motive (x * y) โ‹ฏ) {x : M} (h : x โˆˆ closure s) :
motive x h
theorem AddSubmonoid.closure_induction_right {M : Type u_1} [AddMonoid M] {s : Set M} {motive : (m : M) โ†’ m โˆˆ closure s โ†’ Prop} (zero : motive 0 โ‹ฏ) (add_right : โˆ€ (x : M) (hx : x โˆˆ closure s) (y : M) (hy : y โˆˆ s), motive x hx โ†’ motive (x + y) โ‹ฏ) {x : M} (h : x โˆˆ closure s) :
motive x h
theorem Submonoid.induction_of_closure_eq_top_right {M : Type u_1} [Monoid M] {s : Set M} {motive : M โ†’ Prop} (hs : closure s = โŠค) (x : M) (one : motive 1) (mul_right : โˆ€ (x y : M), y โˆˆ s โ†’ motive x โ†’ motive (x * y)) :
motive x
theorem AddSubmonoid.induction_of_closure_eq_top_right {M : Type u_1} [AddMonoid M] {s : Set M} {motive : M โ†’ Prop} (hs : closure s = โŠค) (x : M) (zero : motive 0) (add_right : โˆ€ (x y : M), y โˆˆ s โ†’ motive x โ†’ motive (x + y)) :
motive x
def Submonoid.powers {M : Type u_1} [Monoid M] (n : M) :

The submonoid generated by an element.

Equations
    Instances For
      @[simp]
      theorem Submonoid.mem_powers {M : Type u_1} [Monoid M] (n : M) :
      theorem Submonoid.coe_powers {M : Type u_1} [Monoid M] (x : M) :
      โ†‘(powers x) = Set.range fun (n : โ„•) => x ^ n
      theorem Submonoid.mem_powers_iff {M : Type u_1} [Monoid M] (x z : M) :
      x โˆˆ powers z โ†” โˆƒ (n : โ„•), z ^ n = x
      noncomputable instance Submonoid.decidableMemPowers {M : Type u_1} [Monoid M] {a : M} :
      DecidablePred fun (x : M) => x โˆˆ powers a
      Equations
        noncomputable instance Submonoid.fintypePowers {M : Type u_1} [Monoid M] {a : M} [Fintype M] :
        Fintype โ†ฅ(powers a)
        Equations
          @[reducible, inline]
          abbrev Submonoid.groupPowers {M : Type u_1} [Monoid M] {x : M} {n : โ„•} (hpos : 0 < n) (hx : x ^ n = 1) :
          Group โ†ฅ(powers x)

          The submonoid generated by an element is a group if that element has finite order.

          Equations
            Instances For
              def Submonoid.pow {M : Type u_1} [Monoid M] (n : M) (m : โ„•) :
              โ†ฅ(powers n)

              Exponentiation map from natural numbers to powers.

              Equations
                Instances For
                  @[simp]
                  theorem Submonoid.pow_coe {M : Type u_1} [Monoid M] (n : M) (m : โ„•) :
                  โ†‘(pow n m) = n ^ m
                  theorem Submonoid.pow_apply {M : Type u_1} [Monoid M] (n : M) (m : โ„•) :
                  pow n m = โŸจn ^ m, โ‹ฏโŸฉ
                  def Submonoid.log {M : Type u_1} [Monoid M] [DecidableEq M] {n : M} (p : โ†ฅ(powers n)) :

                  Logarithms from powers to natural numbers.

                  Equations
                    Instances For
                      @[simp]
                      theorem Submonoid.pow_log_eq_self {M : Type u_1} [Monoid M] [DecidableEq M] {n : M} (p : โ†ฅ(powers n)) :
                      pow n (log p) = p
                      @[simp]
                      theorem Submonoid.log_pow_eq_self {M : Type u_1} [Monoid M] [DecidableEq M] {n : M} (h : Function.Injective fun (m : โ„•) => n ^ m) (m : โ„•) :
                      log (pow n m) = m
                      def Submonoid.powLogEquiv {M : Type u_1} [Monoid M] [DecidableEq M] {n : M} (h : Function.Injective fun (m : โ„•) => n ^ m) :

                      The exponentiation map is an isomorphism from the additive monoid on natural numbers to powers when it is injective. The inverse is given by the logarithms.

                      Equations
                        Instances For
                          @[simp]
                          theorem Submonoid.powLogEquiv_symm_apply {M : Type u_1} [Monoid M] [DecidableEq M] {n : M} (h : Function.Injective fun (m : โ„•) => n ^ m) (m : โ†ฅ(powers n)) :
                          theorem Submonoid.log_mul {M : Type u_1} [Monoid M] [DecidableEq M] {n : M} (h : Function.Injective fun (m : โ„•) => n ^ m) (x y : โ†ฅ(powers n)) :
                          log (x * y) = log x + log y
                          @[simp]
                          theorem Submonoid.map_powers {M : Type u_1} [Monoid M] {N : Type u_4} {F : Type u_5} [Monoid N] [FunLike F M N] [MonoidHomClass F M N] (f : F) (m : M) :
                          map f (powers m) = powers (f m)
                          theorem IsScalarTower.of_mclosure_eq_top {M : Type u_1} {N : Type u_4} {ฮฑ : Type u_5} [Monoid M] [MulAction M N] [SMul N ฮฑ] [MulAction M ฮฑ] {s : Set M} (htop : Submonoid.closure s = โŠค) (hs : โˆ€ x โˆˆ s, โˆ€ (y : N) (z : ฮฑ), (x โ€ข y) โ€ข z = x โ€ข y โ€ข z) :
                          IsScalarTower M N ฮฑ
                          theorem VAddAssocClass.of_mclosure_eq_top {M : Type u_1} {N : Type u_4} {ฮฑ : Type u_5} [AddMonoid M] [AddAction M N] [VAdd N ฮฑ] [AddAction M ฮฑ] {s : Set M} (htop : AddSubmonoid.closure s = โŠค) (hs : โˆ€ x โˆˆ s, โˆ€ (y : N) (z : ฮฑ), (x +แตฅ y) +แตฅ z = x +แตฅ y +แตฅ z) :
                          VAddAssocClass M N ฮฑ
                          theorem SMulCommClass.of_mclosure_eq_top {M : Type u_1} {N : Type u_4} {ฮฑ : Type u_5} [Monoid M] [SMul N ฮฑ] [MulAction M ฮฑ] {s : Set M} (htop : Submonoid.closure s = โŠค) (hs : โˆ€ x โˆˆ s, โˆ€ (y : N) (z : ฮฑ), x โ€ข y โ€ข z = y โ€ข x โ€ข z) :
                          SMulCommClass M N ฮฑ
                          theorem VAddCommClass.of_mclosure_eq_top {M : Type u_1} {N : Type u_4} {ฮฑ : Type u_5} [AddMonoid M] [VAdd N ฮฑ] [AddAction M ฮฑ] {s : Set M} (htop : AddSubmonoid.closure s = โŠค) (hs : โˆ€ x โˆˆ s, โˆ€ (y : N) (z : ฮฑ), x +แตฅ y +แตฅ z = y +แตฅ x +แตฅ z) :
                          VAddCommClass M N ฮฑ
                          theorem Submonoid.mem_sup {N : Type u_4} [CommMonoid N] {s t : Submonoid N} {x : N} :
                          x โˆˆ s โŠ” t โ†” โˆƒ y โˆˆ s, โˆƒ z โˆˆ t, y * z = x
                          theorem AddSubmonoid.mem_sup {N : Type u_4} [AddCommMonoid N] {s t : AddSubmonoid N} {x : N} :
                          x โˆˆ s โŠ” t โ†” โˆƒ y โˆˆ s, โˆƒ z โˆˆ t, y + z = x
                          @[simp]
                          theorem Submonoid.forall_mem_sup {N : Type u_4} [CommMonoid N] {P : N โ†’ Prop} {s t : Submonoid N} :
                          (โˆ€ x โˆˆ s โŠ” t, P x) โ†” โˆ€ xโ‚ โˆˆ s, โˆ€ xโ‚‚ โˆˆ t, P (xโ‚ * xโ‚‚)
                          theorem AddSubmonoid.forall_mem_sup {N : Type u_4} [AddCommMonoid N] {P : N โ†’ Prop} {s t : AddSubmonoid N} :
                          (โˆ€ x โˆˆ s โŠ” t, P x) โ†” โˆ€ xโ‚ โˆˆ s, โˆ€ xโ‚‚ โˆˆ t, P (xโ‚ + xโ‚‚)
                          @[simp]
                          theorem Submonoid.exists_mem_sup {N : Type u_4} [CommMonoid N] {P : N โ†’ Prop} {s t : Submonoid N} :
                          (โˆƒ x โˆˆ s โŠ” t, P x) โ†” โˆƒ xโ‚ โˆˆ s, โˆƒ xโ‚‚ โˆˆ t, P (xโ‚ * xโ‚‚)
                          theorem AddSubmonoid.exists_mem_sup {N : Type u_4} [AddCommMonoid N] {P : N โ†’ Prop} {s t : AddSubmonoid N} :
                          (โˆƒ x โˆˆ s โŠ” t, P x) โ†” โˆƒ xโ‚ โˆˆ s, โˆƒ xโ‚‚ โˆˆ t, P (xโ‚ + xโ‚‚)
                          theorem AddSubmonoid.mem_closure_singleton {A : Type u_2} [AddMonoid A] {x y : A} :
                          y โˆˆ closure {x} โ†” โˆƒ (n : โ„•), n โ€ข x = y

                          The AddSubmonoid generated by an element of an AddMonoid equals the set of natural number multiples of the element.

                          def AddSubmonoid.multiples {A : Type u_2} [AddMonoid A] (x : A) :

                          The additive submonoid generated by an element.

                          Equations
                            Instances For
                              theorem AddSubmonoid.coe_multiples {M : Type u_1} [AddMonoid M] (x : M) :
                              โ†‘(multiples x) = Set.range fun (n : โ„•) => n โ€ข x
                              noncomputable instance AddSubmonoid.decidableMemMultiples {M : Type u_1} [AddMonoid M] {a : M} :
                              DecidablePred fun (x : M) => x โˆˆ multiples a
                              Equations
                                noncomputable instance AddSubmonoid.fintypeMultiples {M : Type u_1} [AddMonoid M] {a : M} [Fintype M] :
                                Fintype โ†ฅ(multiples a)
                                Equations
                                  @[reducible, inline]
                                  abbrev AddSubmonoid.addGroupMultiples {M : Type u_1} [AddMonoid M] {x : M} {n : โ„•} (hpos : 0 < n) (hx : n โ€ข x = 0) :
                                  AddGroup โ†ฅ(multiples x)

                                  The additive submonoid generated by an element is an additive group if that element has finite order.

                                  Equations
                                    Instances For
                                      theorem Submonoid.mem_closure_pair {A : Type u_4} [CommMonoid A] (a b c : A) :
                                      c โˆˆ closure {a, b} โ†” โˆƒ (m : โ„•) (n : โ„•), a ^ m * b ^ n = c

                                      An element is in the closure of a two-element set if it is a linear combination of those two elements.

                                      theorem AddSubmonoid.mem_closure_pair {A : Type u_4} [AddCommMonoid A] (a b c : A) :
                                      c โˆˆ closure {a, b} โ†” โˆƒ (m : โ„•) (n : โ„•), m โ€ข a + n โ€ข b = c

                                      An element is in the closure of a two-element set if it is a linear combination of those two elements.