# Documentation

Mathlib.GroupTheory.Torsion

# Torsion groups #

This file defines torsion groups, i.e. groups where all elements have finite order.

## Main definitions #

• Monoid.IsTorsion a predicate asserting G is torsion, i.e. that all elements are of finite order.
• CommGroup.torsion G, the torsion subgroup of an abelian group G
• CommMonoid.torsion G, the above stated for commutative monoids
• Monoid.IsTorsionFree, asserting no nontrivial elements have finite order in G
• AddMonoid.IsTorsion and AddMonoid.IsTorsionFree the additive versions of the above

## Implementation #

All torsion monoids are really groups (which is proven here as Monoid.IsTorsion.group), but since the definition can be stated on monoids it is implemented on monoid to match other declarations in the group theory library.

## Tags #

periodic group, aperiodic group, torsion subgroup, torsion abelian group

## Future work #

• generalize to π-torsion(-free) groups for a set of primes π
• free, free solvable and free abelian groups are torsion free
• complete direct and free products of torsion free groups are torsion free
• groups which are residually finite p-groups with respect to 2 distinct primes are torsion free
def AddMonoid.IsTorsion (G : Type u_1) [] :

A predicate on an additive monoid saying that all elements are of finite order.

Instances For
def Monoid.IsTorsion (G : Type u_1) [] :

A predicate on a monoid saying that all elements are of finite order.

Instances For
@[simp]
theorem AddMonoid.not_isTorsion_iff (G : Type u_1) [] :

An additive monoid is not a torsion monoid if it has an element of infinite order.

@[simp]
theorem Monoid.not_isTorsion_iff (G : Type u_1) [] :
g,

A monoid is not a torsion monoid if it has an element of infinite order.

theorem IsTorsion.addGroup.proof_2 {G : Type u_1} [] (a : G) :
a + 0 = a
theorem IsTorsion.addGroup.proof_8 {G : Type u_1} [] :
∀ (n : ) (a : G), zsmulRec () a = zsmulRec () a
theorem IsTorsion.addGroup.proof_9 {G : Type u_1} [] (tG : ) (g : G) :
-g + g = 0
noncomputable def IsTorsion.addGroup {G : Type u_1} [] (tG : ) :

Instances For
theorem IsTorsion.addGroup.proof_6 {G : Type u_1} [] :
∀ (a : G), zsmulRec 0 a = zsmulRec 0 a
theorem IsTorsion.addGroup.proof_5 {G : Type u_1} [] :
∀ (a b : G), a - b = a - b
theorem IsTorsion.addGroup.proof_4 {G : Type u_1} [] (n : ) (x : G) :
inst✝.5 (n + 1) x = x + inst✝.5 n x
theorem IsTorsion.addGroup.proof_1 {G : Type u_1} [] (a : G) :
0 + a = a
theorem IsTorsion.addGroup.proof_7 {G : Type u_1} [] :
∀ (n : ) (a : G), zsmulRec () a = zsmulRec () a
theorem IsTorsion.addGroup.proof_3 {G : Type u_1} [] (x : G) :
inst✝.5 0 x = 0
noncomputable def IsTorsion.group {G : Type u_1} [] (tG : ) :

Torsion monoids are really groups.

Instances For
theorem IsTorsion.addSubgroup {G : Type u_1} [] (tG : ) (H : ) :

theorem IsTorsion.subgroup {G : Type u_1} [] (tG : ) (H : ) :
Monoid.IsTorsion { x // x H }

Subgroups of torsion groups are torsion groups.

theorem AddIsTorsion.of_surjective {G : Type u_1} {H : Type u_2} [] [] {f : G →+ H} (hf : ) (tG : ) :

The image of a surjective additive torsion group homomorphism is torsion.

theorem IsTorsion.of_surjective {G : Type u_1} {H : Type u_2} [] [] {f : G →* H} (hf : ) (tG : ) :

The image of a surjective torsion group homomorphism is torsion.

theorem AddIsTorsion.extension_closed {G : Type u_1} {H : Type u_2} [] {N : } [] {f : G →+ H} (hN : ) (tH : ) (tN : AddMonoid.IsTorsion { x // x N }) :

Additive torsion groups are closed under extensions.

theorem IsTorsion.extension_closed {G : Type u_1} {H : Type u_2} [] {N : } [] {f : G →* H} (hN : ) (tH : ) (tN : Monoid.IsTorsion { x // x N }) :

Torsion groups are closed under extensions.

theorem AddIsTorsion.quotient_iff {G : Type u_1} {H : Type u_2} [] {N : } [] {f : G →+ H} (hf : ) (hN : ) (tN : AddMonoid.IsTorsion { x // x N }) :

The image of a quotient is additively torsion iff the group is torsion.

theorem IsTorsion.quotient_iff {G : Type u_1} {H : Type u_2} [] {N : } [] {f : G →* H} (hf : ) (hN : ) (tN : Monoid.IsTorsion { x // x N }) :

The image of a quotient is torsion iff the group is torsion.

theorem ExponentExists.is_add_torsion {G : Type u_1} [] (h : ) :

If a group exponent exists, the group is additively torsion.

theorem ExponentExists.isTorsion {G : Type u_1} [] (h : ) :

If a group exponent exists, the group is torsion.

theorem IsAddTorsion.exponentExists {G : Type u_1} [] (tG : ) (bounded : Set.Finite (Set.range fun g => )) :

The group exponent exists for any bounded additive torsion group.

theorem IsTorsion.exponentExists {G : Type u_1} [] (tG : ) (bounded : Set.Finite (Set.range fun g => )) :

The group exponent exists for any bounded torsion group.

theorem is_add_torsion_of_finite {G : Type u_1} [] [] :

theorem isTorsion_of_finite {G : Type u_1} [] [] :

Finite groups are torsion groups.

theorem AddMonoid.IsTorsion.module_of_torsion (R : Type u_3) (M : Type u_4) [] [] [Module R M] (tR : ) :

theorem AddMonoid.IsTorsion.module_of_finite (R : Type u_3) (M : Type u_4) [] [Ring R] [] [Module R M] :

A module with a finite ring of scalars is additively torsion.

The torsion submonoid of an additive commutative monoid.

Instances For
def CommMonoid.torsion (G : Type u_1) [] :

The torsion submonoid of a commutative monoid.

(Note that by Monoid.IsTorsion.group torsion monoids are truthfully groups.)

Instances For
abbrev AddCommMonoid.addTorsion.isTorsion.match_1 {G : Type u_1} [] (motive : { x // }Prop) :
(x : { x // }) → ((x : G) → (n : ) → (npos : n > 0) → (hn : Function.IsPeriodicPt ((fun x x_1 => x + x_1) x) n 0) → motive { val := x, property := (_ : n, n > 0 Function.IsPeriodicPt ((fun x x_1 => x + x_1) x) n 0) }) → motive x
Instances For

theorem CommMonoid.torsion.isTorsion {G : Type u_1} [] :

Torsion submonoids are torsion.

def AddCommMonoid.primaryComponent (G : Type u_1) [] (p : ) [hp : Fact ()] :

The p-primary component is the submonoid of elements with additive order prime-power of p.

Instances For
theorem AddCommMonoid.primaryComponent.proof_1 (G : Type u_1) [] (p : ) [hp : Fact ()] :
∀ {a b : G}, a {g | n, = p ^ n}b {g | n, = p ^ n}k, addOrderOf (a + b) = p ^ k
theorem AddCommMonoid.primaryComponent.proof_2 (G : Type u_1) [] (p : ) :
n, = p ^ n
@[simp]
theorem AddCommMonoid.primaryComponent_coe (G : Type u_1) [] (p : ) [hp : Fact ()] :
= {g | n, = p ^ n}
@[simp]
theorem CommMonoid.primaryComponent_coe (G : Type u_1) [] (p : ) [hp : Fact ()] :
↑() = {g | n, = p ^ n}
def CommMonoid.primaryComponent (G : Type u_1) [] (p : ) [hp : Fact ()] :

The p-primary component is the submonoid of elements with order prime-power of p.

Instances For
theorem AddCommMonoid.primaryComponent.exists_orderOf_eq_prime_nsmul {G : Type u_1} [] {p : } [hp : Fact ()] (g : { x // }) :
n, = p ^ n

Elements of the p-primary component have additive order p^n for some n

theorem CommMonoid.primaryComponent.exists_orderOf_eq_prime_pow {G : Type u_1} [] {p : } [hp : Fact ()] (g : { x // }) :
n, = p ^ n

Elements of the p-primary component have order p^n for some n.

theorem AddCommMonoid.primaryComponent.disjoint {G : Type u_1} [] {p : } [hp : Fact ()] {p' : } [hp' : Fact ()] (hne : p p') :

The p- and q-primary components are disjoint for p ≠ q.

theorem CommMonoid.primaryComponent.disjoint {G : Type u_1} [] {p : } [hp : Fact ()] {p' : } [hp' : Fact ()] (hne : p p') :

The p- and q-primary components are disjoint for p ≠ q.

@[simp]
theorem AddMonoid.IsTorsion.torsion_eq_top {G : Type u_1} [] (tG : ) :

The additive torsion submonoid of an additive torsion monoid is ⊤.

@[simp]
theorem Monoid.IsTorsion.torsion_eq_top {G : Type u_1} [] (tG : ) :

The torsion submonoid of a torsion monoid is ⊤.

{ x // } ≃+ G

An additive torsion monoid is isomorphic to its torsion submonoid.

Instances For
def Monoid.IsTorsion.torsionMulEquiv {G : Type u_1} [] (tG : ) :
{ x // } ≃* G

A torsion monoid is isomorphic to its torsion submonoid.

Instances For
theorem AddMonoid.IsTorsion.torsionAddEquiv_apply {G : Type u_1} [] (tG : ) (a : { x // }) :
= ↑(↑() a)
theorem Monoid.IsTorsion.torsionMulEquiv_apply {G : Type u_1} [] (tG : ) (a : { x // }) :
= ↑(↑() a)
theorem AddMonoid.IsTorsion.torsionAddEquiv_symm_apply_coe {G : Type u_1} [] (tG : ) (a : G) :
theorem Monoid.IsTorsion.torsionMulEquiv_symm_apply_coe {G : Type u_1} [] (tG : ) (a : G) :
= { val := ↑(↑(MulEquiv.symm Submonoid.topEquiv) a), property := tG ↑(↑(MulEquiv.symm Submonoid.topEquiv) a) }
def AddCommMonoid.Torsion.ofTorsion (G : Type u_1) [] :
{ x // x AddCommMonoid.addTorsion { x // } } ≃+ { x // }

Additive torsion submonoids of an additive torsion submonoid are isomorphic to the submonoid.

Instances For
def Torsion.ofTorsion (G : Type u_1) [] :
{ x // x CommMonoid.torsion { x // } } ≃* { x // }

Torsion submonoids of a torsion submonoid are isomorphic to the submonoid.

Instances For
theorem AddCommGroup.torsion.proof_1 (G : Type u_1) [] :
def AddCommGroup.torsion (G : Type u_1) [] :

The torsion subgroup of an additive abelian group.

Instances For
theorem AddCommGroup.torsion.proof_2 (G : Type u_1) [] :
def CommGroup.torsion (G : Type u_1) [] :

The torsion subgroup of an abelian group.

Instances For

The additive torsion submonoid of an abelian group equals the torsion subgroup as a submonoid.

theorem CommGroup.torsion_eq_torsion_submonoid (G : Type u_1) [] :
= ().toSubmonoid

The torsion submonoid of an abelian group equals the torsion subgroup as a submonoid.

theorem AddCommGroup.mem_torsion (G : Type u_1) [] (g : G) :
theorem CommGroup.mem_torsion (G : Type u_1) [] (g : G) :
abbrev AddCommGroup.primaryComponent.match_1 (G : Type u_1) [] (p : ) [hp : Fact ()] {g : G} :
let src := ; ∀ (motive : g { toAddSubsemigroup := src.toAddSubsemigroup, zero_mem' := (_ : 0 src.carrier) }.toAddSubsemigroup.carrierProp) (x : g { toAddSubsemigroup := src.toAddSubsemigroup, zero_mem' := (_ : 0 src.carrier) }.toAddSubsemigroup.carrier), (∀ (n : ) (hn : = p ^ n), motive (_ : n, = p ^ n)) → motive x
Instances For
theorem AddCommGroup.primaryComponent.proof_2 (G : Type u_1) [] (p : ) [hp : Fact ()] {g : G} :
def AddCommGroup.primaryComponent (G : Type u_1) [] (p : ) [hp : Fact ()] :

The p-primary component is the subgroup of elements with additive order prime-power of p.

Instances For
theorem AddCommGroup.primaryComponent.proof_1 (G : Type u_1) [] (p : ) [hp : Fact ()] :
@[simp]
theorem AddCommGroup.primaryComponent_coe (G : Type u_1) [] (p : ) [hp : Fact ()] :
= {g | n, = p ^ n}
@[simp]
theorem CommGroup.primaryComponent_coe (G : Type u_1) [] (p : ) [hp : Fact ()] :
↑() = {g | n, = p ^ n}
def CommGroup.primaryComponent (G : Type u_1) [] (p : ) [hp : Fact ()] :

The p-primary component is the subgroup of elements with order prime-power of p.

Instances For
theorem CommGroup.primaryComponent.isPGroup {G : Type u_1} [] {p : } [hp : Fact ()] :
IsPGroup p { x // }

The p-primary component is a p group.

A predicate on an additive monoid saying that only 0 is of finite order.

Instances For
def Monoid.IsTorsionFree (G : Type u_1) [] :

A predicate on a monoid saying that only 1 is of finite order.

Instances For
@[simp]
theorem AddMonoid.not_isTorsionFree_iff (G : Type u_1) [] :
g, g 0

An additive monoid is not torsion free if any nontrivial element has finite order.

@[simp]
theorem Monoid.not_isTorsionFree_iff (G : Type u_1) [] :
g, g 1

A nontrivial monoid is not torsion-free if any nontrivial element has finite order.

theorem AddMonoid.IsTorsion.not_torsion_free {G : Type u_1} [] [hN : ] :

A nontrivial additive torsion group is not torsion-free.

theorem IsTorsion.not_torsion_free {G : Type u_1} [] [hN : ] :

A nontrivial torsion group is not torsion-free.

theorem AddMonoid.IsTorsionFree.not_torsion {G : Type u_1} [] [hN : ] :

A nontrivial torsion-free additive group is not torsion.

theorem IsTorsionFree.not_torsion {G : Type u_1} [] [hN : ] :

A nontrivial torsion-free group is not torsion.

theorem IsTorsionFree.addSubgroup {G : Type u_1} [] (tG : ) (H : ) :

theorem IsTorsionFree.subgroup {G : Type u_1} [] (tG : ) (H : ) :

Subgroups of torsion-free groups are torsion-free.

theorem AddMonoid.IsTorsionFree.prod {η : Type u_3} {Gs : ηType u_4} [(i : η) → AddGroup (Gs i)] (tfGs : ∀ (i : η), AddMonoid.IsTorsionFree (Gs i)) :
AddMonoid.IsTorsionFree ((i : η) → Gs i)

Direct products of additive torsion free groups are torsion free.

theorem IsTorsionFree.prod {η : Type u_3} {Gs : ηType u_4} [(i : η) → Group (Gs i)] (tfGs : ∀ (i : η), Monoid.IsTorsionFree (Gs i)) :
Monoid.IsTorsionFree ((i : η) → Gs i)

Direct products of torsion free groups are torsion free.

Quotienting a group by its additive torsion subgroup yields an additive torsion free group.

theorem IsTorsionFree.quotient_torsion (G : Type u_1) [] :

Quotienting a group by its torsion subgroup yields a torsion free group.