File: Mathlib/GroupTheory/Torsion.lean

full_name: AddMonoid.IsTorsion
code: /-- A predicate on a monoid saying that all elements are of finite order. -/
@[to_additive "A predicate on an additive monoid saying that all elements are of finite order."]
def IsTorsion 
goal: Prop

full_name: Monoid.IsTorsion
code: /-- A predicate on a monoid saying that all elements are of finite order. -/
@[to_additive "A predicate on an additive monoid saying that all elements are of finite order."]
def IsTorsion 
goal: Prop

full_name: AddMonoid.not_isTorsion_iff
code: /-- A monoid is not a torsion monoid if it has an element of infinite order. -/
@[to_additive (attr := simp) "An additive monoid is not a torsion monoid if it
  has an element of infinite order."]
theorem not_isTorsion_iff : ¬IsTorsion G ↔ ∃ g : G, ¬IsOfFinOrder g 
goal: ¬AddMonoid.IsTorsion G ↔ ∃ g, ¬IsOfFinAddOrder g

full_name: Monoid.not_isTorsion_iff
code: /-- A monoid is not a torsion monoid if it has an element of infinite order. -/
@[to_additive (attr := simp) "An additive monoid is not a torsion monoid if it
  has an element of infinite order."]
theorem not_isTorsion_iff : ¬IsTorsion G ↔ ∃ g : G, ¬IsOfFinOrder g 
goal: ¬Monoid.IsTorsion G ↔ ∃ g, ¬IsOfFinOrder g

full_name: IsTorsion.addGroup
code: /-- Torsion monoids are really groups. -/
@[to_additive "Torsion additive monoids are really additive groups"]
noncomputable def IsTorsion.group [Monoid G] (tG : IsTorsion G) : Group G 
goal: AddGroup G

full_name: IsTorsion.group
code: /-- Torsion monoids are really groups. -/
@[to_additive "Torsion additive monoids are really additive groups"]
noncomputable def IsTorsion.group [Monoid G] (tG : IsTorsion G) : Group G 
goal: Group G

full_name: IsTorsion.subgroup
code: /-- Subgroups of torsion groups are torsion groups. -/
@[to_additive "Subgroups of additive torsion groups are additive torsion groups."]
theorem IsTorsion.subgroup (tG : IsTorsion G) (H : Subgroup G) : IsTorsion H 
goal: Monoid.IsTorsion ↥H

full_name: IsTorsion.addSubgroup
code: /-- Subgroups of torsion groups are torsion groups. -/
@[to_additive "Subgroups of additive torsion groups are additive torsion groups."]
theorem IsTorsion.subgroup (tG : IsTorsion G) (H : Subgroup G) : IsTorsion H 
goal: AddMonoid.IsTorsion ↥H

full_name: IsTorsion.of_surjective
code: /-- The image of a surjective torsion group homomorphism is torsion. -/
@[to_additive AddIsTorsion.of_surjective
      "The image of a surjective additive torsion group homomorphism is torsion."]
theorem IsTorsion.of_surjective {f : G →* H} (hf : Function.Surjective f) (tG : IsTorsion G) :
    IsTorsion H 
goal: Monoid.IsTorsion H

full_name: AddIsTorsion.of_surjective
code: /-- The image of a surjective torsion group homomorphism is torsion. -/
@[to_additive AddIsTorsion.of_surjective
      "The image of a surjective additive torsion group homomorphism is torsion."]
theorem IsTorsion.of_surjective {f : G →* H} (hf : Function.Surjective f) (tG : IsTorsion G) :
    IsTorsion H 
goal: AddMonoid.IsTorsion H

full_name: AddIsTorsion.extension_closed
code: /-- Torsion groups are closed under extensions. -/
@[to_additive AddIsTorsion.extension_closed "Additive torsion groups are closed under extensions."]
theorem IsTorsion.extension_closed {f : G →* H} (hN : N = f.ker) (tH : IsTorsion H)
    (tN : IsTorsion N) : IsTorsion G 
goal: AddMonoid.IsTorsion G

full_name: IsTorsion.extension_closed
code: /-- Torsion groups are closed under extensions. -/
@[to_additive AddIsTorsion.extension_closed "Additive torsion groups are closed under extensions."]
theorem IsTorsion.extension_closed {f : G →* H} (hN : N = f.ker) (tH : IsTorsion H)
    (tN : IsTorsion N) : IsTorsion G 
goal: Monoid.IsTorsion G

full_name: IsTorsion.quotient_iff
code: /-- The image of a quotient is torsion iff the group is torsion. -/
@[to_additive AddIsTorsion.quotient_iff
      "The image of a quotient is additively torsion iff the group is torsion."]
theorem IsTorsion.quotient_iff {f : G →* H} (hf : Function.Surjective f) (hN : N = f.ker)
    (tN : IsTorsion N) : IsTorsion H ↔ IsTorsion G 
goal: Monoid.IsTorsion H ↔ Monoid.IsTorsion G

full_name: AddIsTorsion.quotient_iff
code: /-- The image of a quotient is torsion iff the group is torsion. -/
@[to_additive AddIsTorsion.quotient_iff
      "The image of a quotient is additively torsion iff the group is torsion."]
theorem IsTorsion.quotient_iff {f : G →* H} (hf : Function.Surjective f) (hN : N = f.ker)
    (tN : IsTorsion N) : IsTorsion H ↔ IsTorsion G 
goal: AddMonoid.IsTorsion H ↔ AddMonoid.IsTorsion G

full_name: ExponentExists.isTorsion
code: /-- If a group exponent exists, the group is torsion. -/
@[to_additive ExponentExists.is_add_torsion
      "If a group exponent exists, the group is additively torsion."]
theorem ExponentExists.isTorsion (h : ExponentExists G) : IsTorsion G 
goal: Monoid.IsTorsion G

full_name: ExponentExists.is_add_torsion
code: /-- If a group exponent exists, the group is torsion. -/
@[to_additive ExponentExists.is_add_torsion
      "If a group exponent exists, the group is additively torsion."]
theorem ExponentExists.isTorsion (h : ExponentExists G) : IsTorsion G 
goal: AddMonoid.IsTorsion G

full_name: IsTorsion.exponentExists
code: /-- The group exponent exists for any bounded torsion group. -/
@[to_additive IsAddTorsion.exponentExists
      "The group exponent exists for any bounded additive torsion group."]
theorem IsTorsion.exponentExists (tG : IsTorsion G)
    (bounded : (Set.range fun g : G => orderOf g).Finite) : ExponentExists G 
goal: Monoid.ExponentExists G

full_name: IsAddTorsion.exponentExists
code: /-- The group exponent exists for any bounded torsion group. -/
@[to_additive IsAddTorsion.exponentExists
      "The group exponent exists for any bounded additive torsion group."]
theorem IsTorsion.exponentExists (tG : IsTorsion G)
    (bounded : (Set.range fun g : G => orderOf g).Finite) : ExponentExists G 
goal: AddMonoid.ExponentExists G

full_name: isTorsion_of_finite
code: /-- Finite groups are torsion groups. -/
@[to_additive is_add_torsion_of_finite "Finite additive groups are additive torsion groups."]
theorem isTorsion_of_finite [Finite G] : IsTorsion G 
goal: Monoid.IsTorsion G

full_name: is_add_torsion_of_finite
code: /-- Finite groups are torsion groups. -/
@[to_additive is_add_torsion_of_finite "Finite additive groups are additive torsion groups."]
theorem isTorsion_of_finite [Finite G] : IsTorsion G 
goal: AddMonoid.IsTorsion G

full_name: AddMonoid.IsTorsion.module_of_torsion
code: /-- A module whose scalars are additively torsion is additively torsion. -/
theorem IsTorsion.module_of_torsion [Semiring R] [Module R M] (tR : IsTorsion R) : IsTorsion M 
goal: AddMonoid.IsTorsion M

full_name: AddMonoid.IsTorsion.module_of_finite
code: /-- A module with a finite ring of scalars is additively torsion. -/
theorem IsTorsion.module_of_finite [Ring R] [Finite R] [Module R M] : IsTorsion M 
goal: AddMonoid.IsTorsion M

full_name: AddCommMonoid.addTorsion
code: /-- The torsion submonoid of a commutative monoid.

(Note that by `Monoid.IsTorsion.group` torsion monoids are truthfully groups.)
-/
@[to_additive addTorsion "The torsion submonoid of an additive commutative monoid."]
def torsion : Submonoid G 
goal: AddSubmonoid G

full_name: CommMonoid.torsion
code: /-- The torsion submonoid of a commutative monoid.

(Note that by `Monoid.IsTorsion.group` torsion monoids are truthfully groups.)
-/
@[to_additive addTorsion "The torsion submonoid of an additive commutative monoid."]
def torsion : Submonoid G 
goal: Submonoid G

full_name: CommMonoid.torsion.isTorsion
code: /-- Torsion submonoids are torsion. -/
@[to_additive "Additive torsion submonoids are additively torsion."]
theorem torsion.isTorsion : IsTorsion <| torsion G 
goal: Monoid.IsTorsion ↥(CommMonoid.torsion G)

full_name: AddCommMonoid.addTorsion.isTorsion
code: /-- Torsion submonoids are torsion. -/
@[to_additive "Additive torsion submonoids are additively torsion."]
theorem torsion.isTorsion : IsTorsion <| torsion G 
goal: AddMonoid.IsTorsion ↥(AddCommMonoid.addTorsion G)

full_name: CommMonoid.primaryComponent
code: /-- The `p`-primary component is the submonoid of elements with order prime-power of `p`. -/
@[to_additive (attr := simps)
      "The `p`-primary component is the submonoid of elements with additive
      order prime-power of `p`."]
def primaryComponent : Submonoid G 
goal: Submonoid G

full_name: CommMonoid.primaryComponent_coe
code: /-- The `p`-primary component is the submonoid of elements with order prime-power of `p`. -/
@[to_additive (attr := simps)
      "The `p`-primary component is the submonoid of elements with additive
      order prime-power of `p`."]
def primaryComponent : Submonoid G 
goal: ↑(CommMonoid.primaryComponent G p) = {g | ∃ n, orderOf g = p ^ n}

full_name: AddCommMonoid.primaryComponent
code: /-- The `p`-primary component is the submonoid of elements with order prime-power of `p`. -/
@[to_additive (attr := simps)
      "The `p`-primary component is the submonoid of elements with additive
      order prime-power of `p`."]
def primaryComponent : Submonoid G 
goal: AddSubmonoid G

full_name: AddCommMonoid.primaryComponent_coe
code: /-- The `p`-primary component is the submonoid of elements with order prime-power of `p`. -/
@[to_additive (attr := simps)
      "The `p`-primary component is the submonoid of elements with additive
      order prime-power of `p`."]
def primaryComponent : Submonoid G 
goal: ↑(AddCommMonoid.primaryComponent G p) = {g | ∃ n, addOrderOf g = p ^ n}

full_name: AddCommMonoid.primaryComponent.exists_orderOf_eq_prime_nsmul
code: /-- Elements of the `p`-primary component have order `p^n` for some `n`. -/
@[to_additive primaryComponent.exists_orderOf_eq_prime_nsmul
  "Elements of the `p`-primary component have additive order `p^n` for some `n`"]
theorem primaryComponent.exists_orderOf_eq_prime_pow (g : CommMonoid.primaryComponent G p) :
    ∃ n : ℕ, orderOf g = p ^ n 
goal: ∃ n, addOrderOf g = p ^ n

full_name: CommMonoid.primaryComponent.exists_orderOf_eq_prime_pow
code: /-- Elements of the `p`-primary component have order `p^n` for some `n`. -/
@[to_additive primaryComponent.exists_orderOf_eq_prime_nsmul
  "Elements of the `p`-primary component have additive order `p^n` for some `n`"]
theorem primaryComponent.exists_orderOf_eq_prime_pow (g : CommMonoid.primaryComponent G p) :
    ∃ n : ℕ, orderOf g = p ^ n 
goal: ∃ n, orderOf g = p ^ n

full_name: CommMonoid.primaryComponent.disjoint
code: /-- The `p`- and `q`-primary components are disjoint for `p ≠ q`. -/
@[to_additive "The `p`- and `q`-primary components are disjoint for `p ≠ q`."]
theorem primaryComponent.disjoint {p' : ℕ} [hp' : Fact p'.Prime] (hne : p ≠ p') :
    Disjoint (CommMonoid.primaryComponent G p) (CommMonoid.primaryComponent G p') 
goal: Disjoint (CommMonoid.primaryComponent G p) (CommMonoid.primaryComponent G p')

full_name: AddCommMonoid.primaryComponent.disjoint
code: /-- The `p`- and `q`-primary components are disjoint for `p ≠ q`. -/
@[to_additive "The `p`- and `q`-primary components are disjoint for `p ≠ q`."]
theorem primaryComponent.disjoint {p' : ℕ} [hp' : Fact p'.Prime] (hne : p ≠ p') :
    Disjoint (CommMonoid.primaryComponent G p) (CommMonoid.primaryComponent G p') 
goal: Disjoint (AddCommMonoid.primaryComponent G p) (AddCommMonoid.primaryComponent G p')

full_name: AddMonoid.IsTorsion.torsion_eq_top
code: /-- The torsion submonoid of a torsion monoid is `⊤`. -/
@[to_additive (attr := simp) "The additive torsion submonoid of an additive torsion monoid is `⊤`."]
theorem torsion_eq_top (tG : IsTorsion G) : torsion G = ⊤ 
goal: AddCommMonoid.addTorsion G = ⊤

full_name: Monoid.IsTorsion.torsion_eq_top
code: /-- The torsion submonoid of a torsion monoid is `⊤`. -/
@[to_additive (attr := simp) "The additive torsion submonoid of an additive torsion monoid is `⊤`."]
theorem torsion_eq_top (tG : IsTorsion G) : torsion G = ⊤ 
goal: CommMonoid.torsion G = ⊤

full_name: AddMonoid.IsTorsion.torsionAddEquiv
code: /-- A torsion monoid is isomorphic to its torsion submonoid. -/
@[to_additive "An additive torsion monoid is isomorphic to its torsion submonoid."]
def torsionMulEquiv (tG : IsTorsion G) : torsion G ≃* G 
goal: ↥(AddCommMonoid.addTorsion G) ≃+ G

full_name: Monoid.IsTorsion.torsionMulEquiv
code: /-- A torsion monoid is isomorphic to its torsion submonoid. -/
@[to_additive "An additive torsion monoid is isomorphic to its torsion submonoid."]
def torsionMulEquiv (tG : IsTorsion G) : torsion G ≃* G 
goal: ↥(CommMonoid.torsion G) ≃* G

full_name: AddMonoid.IsTorsion.torsionAddEquiv_apply
code: @[to_additive]
theorem torsionMulEquiv_apply (tG : IsTorsion G) (a : torsion G) :
    tG.torsionMulEquiv a = MulEquiv.submonoidCongr tG.torsion_eq_top a 
goal: tG.torsionAddEquiv a = ↑((AddEquiv.addSubmonoidCongr ⋯) a)

full_name: Monoid.IsTorsion.torsionMulEquiv_apply
code: @[to_additive]
theorem torsionMulEquiv_apply (tG : IsTorsion G) (a : torsion G) :
    tG.torsionMulEquiv a = MulEquiv.submonoidCongr tG.torsion_eq_top a 
goal: tG.torsionMulEquiv a = ↑((MulEquiv.submonoidCongr ⋯) a)

full_name: AddMonoid.IsTorsion.torsionAddEquiv_symm_apply_coe
code: @[to_additive]
theorem torsionMulEquiv_symm_apply_coe (tG : IsTorsion G) (a : G) :
    tG.torsionMulEquiv.symm a = ⟨Submonoid.topEquiv.symm a, tG _⟩ 
goal: tG.torsionAddEquiv.symm a = ⟨↑(AddSubmonoid.topEquiv.symm a), ⋯⟩

full_name: Monoid.IsTorsion.torsionMulEquiv_symm_apply_coe
code: @[to_additive]
theorem torsionMulEquiv_symm_apply_coe (tG : IsTorsion G) (a : G) :
    tG.torsionMulEquiv.symm a = ⟨Submonoid.topEquiv.symm a, tG _⟩ 
goal: tG.torsionMulEquiv.symm a = ⟨↑(Submonoid.topEquiv.symm a), ⋯⟩

full_name: AddCommMonoid.Torsion.ofTorsion
code: /-- Torsion submonoids of a torsion submonoid are isomorphic to the submonoid. -/
@[to_additive (attr := simp) AddCommMonoid.Torsion.ofTorsion
      "Additive torsion submonoids of an additive torsion submonoid are
      isomorphic to the submonoid."]
def Torsion.ofTorsion : torsion (torsion G) ≃* torsion G 
goal: ↥(AddCommMonoid.addTorsion ↥(AddCommMonoid.addTorsion G)) ≃+ ↥(AddCommMonoid.addTorsion G)

full_name: Torsion.ofTorsion
code: /-- Torsion submonoids of a torsion submonoid are isomorphic to the submonoid. -/
@[to_additive (attr := simp) AddCommMonoid.Torsion.ofTorsion
      "Additive torsion submonoids of an additive torsion submonoid are
      isomorphic to the submonoid."]
def Torsion.ofTorsion : torsion (torsion G) ≃* torsion G 
goal: ↥(CommMonoid.torsion ↥(CommMonoid.torsion G)) ≃* ↥(CommMonoid.torsion G)

full_name: CommGroup.torsion
code: /-- The torsion subgroup of an abelian group. -/
@[to_additive "The torsion subgroup of an additive abelian group."]
def torsion : Subgroup G 
goal: Subgroup G

full_name: AddCommGroup.torsion
code: /-- The torsion subgroup of an abelian group. -/
@[to_additive "The torsion subgroup of an additive abelian group."]
def torsion : Subgroup G 
goal: AddSubgroup G

full_name: CommGroup.torsion_eq_torsion_submonoid
code: /-- The torsion submonoid of an abelian group equals the torsion subgroup as a submonoid. -/
@[to_additive add_torsion_eq_add_torsion_submonoid
      "The additive torsion submonoid of an abelian group equals the torsion
      subgroup as a submonoid."]
theorem torsion_eq_torsion_submonoid : CommMonoid.torsion G = (torsion G).toSubmonoid 
goal: CommMonoid.torsion G = (CommGroup.torsion G).toSubmonoid

full_name: AddCommGroup.add_torsion_eq_add_torsion_submonoid
code: /-- The torsion submonoid of an abelian group equals the torsion subgroup as a submonoid. -/
@[to_additive add_torsion_eq_add_torsion_submonoid
      "The additive torsion submonoid of an abelian group equals the torsion
      subgroup as a submonoid."]
theorem torsion_eq_torsion_submonoid : CommMonoid.torsion G = (torsion G).toSubmonoid 
goal: AddCommMonoid.addTorsion G = (AddCommGroup.torsion G).toAddSubmonoid

full_name: AddCommGroup.mem_torsion
code: @[to_additive]
theorem mem_torsion (g : G) : g ∈ torsion G ↔ IsOfFinOrder g 
goal: g ∈ AddCommGroup.torsion G ↔ IsOfFinAddOrder g

full_name: CommGroup.mem_torsion
code: @[to_additive]
theorem mem_torsion (g : G) : g ∈ torsion G ↔ IsOfFinOrder g 
goal: g ∈ CommGroup.torsion G ↔ IsOfFinOrder g

full_name: AddCommGroup.primaryComponent
code: /-- The `p`-primary component is the subgroup of elements with order prime-power of `p`. -/
@[to_additive (attr := simps!)
      "The `p`-primary component is the subgroup of elements with additive order
      prime-power of `p`."]
def primaryComponent : Subgroup G 
goal: AddSubgroup G

full_name: AddCommGroup.primaryComponent_coe
code: /-- The `p`-primary component is the subgroup of elements with order prime-power of `p`. -/
@[to_additive (attr := simps!)
      "The `p`-primary component is the subgroup of elements with additive order
      prime-power of `p`."]
def primaryComponent : Subgroup G 
goal: ↑(AddCommGroup.primaryComponent G p) = {g | ∃ n, addOrderOf g = p ^ n}

full_name: CommGroup.primaryComponent
code: /-- The `p`-primary component is the subgroup of elements with order prime-power of `p`. -/
@[to_additive (attr := simps!)
      "The `p`-primary component is the subgroup of elements with additive order
      prime-power of `p`."]
def primaryComponent : Subgroup G 
goal: Subgroup G

full_name: CommGroup.primaryComponent_coe
code: /-- The `p`-primary component is the subgroup of elements with order prime-power of `p`. -/
@[to_additive (attr := simps!)
      "The `p`-primary component is the subgroup of elements with additive order
      prime-power of `p`."]
def primaryComponent : Subgroup G 
goal: ↑(CommGroup.primaryComponent G p) = {g | ∃ n, orderOf g = p ^ n}

full_name: CommGroup.primaryComponent.isPGroup
code: /-- The `p`-primary component is a `p` group. -/
theorem primaryComponent.isPGroup : IsPGroup p <| primaryComponent G p 
goal: IsPGroup p ↥(CommGroup.primaryComponent G p)

full_name: AddMonoid.IsTorsionFree
code: /-- A predicate on a monoid saying that only 1 is of finite order. -/
@[to_additive "A predicate on an additive monoid saying that only 0 is of finite order."]
def IsTorsionFree 
goal: Prop

full_name: Monoid.IsTorsionFree
code: /-- A predicate on a monoid saying that only 1 is of finite order. -/
@[to_additive "A predicate on an additive monoid saying that only 0 is of finite order."]
def IsTorsionFree 
goal: Prop

full_name: AddMonoid.not_isTorsionFree_iff
code: /-- A nontrivial monoid is not torsion-free if any nontrivial element has finite order. -/
@[to_additive (attr := simp) "An additive monoid is not torsion free if any
  nontrivial element has finite order."]
theorem not_isTorsionFree_iff : ¬IsTorsionFree G ↔ ∃ g : G, g ≠ 1 ∧ IsOfFinOrder g 
goal: ¬AddMonoid.IsTorsionFree G ↔ ∃ g, g ≠ 0 ∧ IsOfFinAddOrder g

full_name: Monoid.not_isTorsionFree_iff
code: /-- A nontrivial monoid is not torsion-free if any nontrivial element has finite order. -/
@[to_additive (attr := simp) "An additive monoid is not torsion free if any
  nontrivial element has finite order."]
theorem not_isTorsionFree_iff : ¬IsTorsionFree G ↔ ∃ g : G, g ≠ 1 ∧ IsOfFinOrder g 
goal: ¬Monoid.IsTorsionFree G ↔ ∃ g, g ≠ 1 ∧ IsOfFinOrder g

full_name: Monoid.isTorsionFree_of_subsingleton
code: @[to_additive (attr := simp)]
lemma isTorsionFree_of_subsingleton [Subsingleton G] : IsTorsionFree G 
goal: Monoid.IsTorsionFree G

full_name: AddMonoid.isTorsionFree_of_subsingleton
code: @[to_additive (attr := simp)]
lemma isTorsionFree_of_subsingleton [Subsingleton G] : IsTorsionFree G 
goal: AddMonoid.IsTorsionFree G

full_name: Monoid.isTorsionFree_iff_torsion_eq_bot
code: @[to_additive]
lemma isTorsionFree_iff_torsion_eq_bot {G} [CommGroup G] :
    IsTorsionFree G ↔ CommGroup.torsion G = ⊥ 
goal: Monoid.IsTorsionFree G ↔ CommGroup.torsion G = ⊥

full_name: AddMonoid.isTorsionFree_iff_torsion_eq_bot
code: @[to_additive]
lemma isTorsionFree_iff_torsion_eq_bot {G} [CommGroup G] :
    IsTorsionFree G ↔ CommGroup.torsion G = ⊥ 
goal: AddMonoid.IsTorsionFree G ↔ AddCommGroup.torsion G = ⊥

full_name: IsTorsion.not_torsion_free
code: /-- A nontrivial torsion group is not torsion-free. -/
@[to_additive AddMonoid.IsTorsion.not_torsion_free
      "A nontrivial additive torsion group is not torsion-free."]
theorem IsTorsion.not_torsion_free [hN : Nontrivial G] : IsTorsion G → ¬IsTorsionFree G 
goal: Monoid.IsTorsion G → ¬Monoid.IsTorsionFree G

full_name: AddMonoid.IsTorsion.not_torsion_free
code: /-- A nontrivial torsion group is not torsion-free. -/
@[to_additive AddMonoid.IsTorsion.not_torsion_free
      "A nontrivial additive torsion group is not torsion-free."]
theorem IsTorsion.not_torsion_free [hN : Nontrivial G] : IsTorsion G → ¬IsTorsionFree G 
goal: AddMonoid.IsTorsion G → ¬AddMonoid.IsTorsionFree G

full_name: AddMonoid.IsTorsionFree.not_torsion
code: /-- A nontrivial torsion-free group is not torsion. -/
@[to_additive AddMonoid.IsTorsionFree.not_torsion
      "A nontrivial torsion-free additive group is not torsion."]
theorem IsTorsionFree.not_torsion [hN : Nontrivial G] : IsTorsionFree G → ¬IsTorsion G 
goal: AddMonoid.IsTorsionFree G → ¬AddMonoid.IsTorsion G

full_name: IsTorsionFree.not_torsion
code: /-- A nontrivial torsion-free group is not torsion. -/
@[to_additive AddMonoid.IsTorsionFree.not_torsion
      "A nontrivial torsion-free additive group is not torsion."]
theorem IsTorsionFree.not_torsion [hN : Nontrivial G] : IsTorsionFree G → ¬IsTorsion G 
goal: Monoid.IsTorsionFree G → ¬Monoid.IsTorsion G

full_name: IsTorsionFree.subgroup
code: /-- Subgroups of torsion-free groups are torsion-free. -/
@[to_additive "Subgroups of additive torsion-free groups are additively torsion-free."]
theorem IsTorsionFree.subgroup (tG : IsTorsionFree G) (H : Subgroup G) : IsTorsionFree H 
goal: Monoid.IsTorsionFree ↥H

full_name: IsTorsionFree.addSubgroup
code: /-- Subgroups of torsion-free groups are torsion-free. -/
@[to_additive "Subgroups of additive torsion-free groups are additively torsion-free."]
theorem IsTorsionFree.subgroup (tG : IsTorsionFree G) (H : Subgroup G) : IsTorsionFree H 
goal: AddMonoid.IsTorsionFree ↥H

full_name: IsTorsionFree.prod
code: /-- Direct products of torsion free groups are torsion free. -/
@[to_additive AddMonoid.IsTorsionFree.prod
      "Direct products of additive torsion free groups are torsion free."]
theorem IsTorsionFree.prod {η : Type*} {Gs : η → Type*} [∀ i, Group (Gs i)]
    (tfGs : ∀ i, IsTorsionFree (Gs i)) : IsTorsionFree <| ∀ i, Gs i 
goal: Monoid.IsTorsionFree ((i : η) → Gs i)

full_name: AddMonoid.IsTorsionFree.prod
code: /-- Direct products of torsion free groups are torsion free. -/
@[to_additive AddMonoid.IsTorsionFree.prod
      "Direct products of additive torsion free groups are torsion free."]
theorem IsTorsionFree.prod {η : Type*} {Gs : η → Type*} [∀ i, Group (Gs i)]
    (tfGs : ∀ i, IsTorsionFree (Gs i)) : IsTorsionFree <| ∀ i, Gs i 
goal: AddMonoid.IsTorsionFree ((i : η) → Gs i)

full_name: AddIsTorsionFree.quotient_torsion
code: /-- Quotienting a group by its torsion subgroup yields a torsion free group. -/
@[to_additive AddIsTorsionFree.quotient_torsion
      "Quotienting a group by its additive torsion subgroup yields an additive torsion free group."]
theorem IsTorsionFree.quotient_torsion : IsTorsionFree <| G ⧸ torsion G 
goal: AddMonoid.IsTorsionFree (G ⧸ AddCommGroup.torsion G)

full_name: IsTorsionFree.quotient_torsion
code: /-- Quotienting a group by its torsion subgroup yields a torsion free group. -/
@[to_additive AddIsTorsionFree.quotient_torsion
      "Quotienting a group by its additive torsion subgroup yields an additive torsion free group."]
theorem IsTorsionFree.quotient_torsion : IsTorsionFree <| G ⧸ torsion G 
goal: Monoid.IsTorsionFree (G ⧸ CommGroup.torsion G)

full_name: isTorsionFree_iff_noZeroSMulDivisors_nat
code: lemma isTorsionFree_iff_noZeroSMulDivisors_nat {M : Type*} [AddMonoid M] :
    AddMonoid.IsTorsionFree M ↔ NoZeroSMulDivisors ℕ M 
goal: AddMonoid.IsTorsionFree M ↔ NoZeroSMulDivisors ℕ M

full_name: isTorsionFree_iff_noZeroSMulDivisors_int
code: lemma isTorsionFree_iff_noZeroSMulDivisors_int [AddGroup G] :
    AddMonoid.IsTorsionFree G ↔ NoZeroSMulDivisors ℤ G 
goal: AddMonoid.IsTorsionFree G ↔ NoZeroSMulDivisors ℤ G

full_name: IsTorsionFree.of_noZeroSMulDivisors
code: lemma IsTorsionFree.of_noZeroSMulDivisors {M : Type*} [AddMonoid M] [NoZeroSMulDivisors ℕ M] :
    AddMonoid.IsTorsionFree M 
goal: AddMonoid.IsTorsionFree M