Torsion-free monoids and groups #
This file proves lemmas about torsion-free monoids.
A monoid M is torsion-free if n • · : M → M is injective for all non-zero natural numbers n.
theorem AddCommute.eq_of_nsmul_eq_nsmul {M : Type u_1} [AddMonoid M] [IsAddTorsionFree M] {n : ℕ} {a b : M} (hab : AddCommute a b) (hn : n ≠ 0) (habn : n • a = n • b) :
theorem AddCommute.nsmul_right_inj {M : Type u_1} [AddMonoid M] [IsAddTorsionFree M] {n : ℕ} {a b : M} (hab : AddCommute a b) (hn : n ≠ 0) :
See sq_eq_one_iff for a version that holds in rings.
theorem IsMulTorsionFree.pow_right_injective {M : Type u_1} [CancelMonoid M] [IsMulTorsionFree M] {a : M} (ha : a ≠ 1) :
Function.Injective fun (n : ℕ) => a ^ n
theorem IsAddTorsionFree.nsmul_left_injective {M : Type u_1} [AddCancelMonoid M] [IsAddTorsionFree M] {a : M} (ha : a ≠ 0) :
Function.Injective fun (n : ℕ) => n • a
theorem IsMulTorsionFree.pow_right_injective_iff {M : Type u_1} [CancelMonoid M] [IsMulTorsionFree M] {a : M} :
theorem IsAddTorsionFree.nsmul_left_injective_iff {M : Type u_1} [AddCancelMonoid M] [IsAddTorsionFree M] {a : M} :
@[simp]
theorem IsMulTorsionFree.pow_right_inj {M : Type u_1} [CancelMonoid M] [IsMulTorsionFree M] {a : M} (ha : a ≠ 1) {n m : ℕ} :
@[simp]
theorem IsAddTorsionFree.nsmul_left_inj {M : Type u_1} [AddCancelMonoid M] [IsAddTorsionFree M] {a : M} (ha : a ≠ 0) {n m : ℕ} :
A commutative torsion-free monoid has unique roots.
This is not an instance, to avoid an expensive instance loop with
HasUniqueRoots M → IsMulTorsionFree M.
A commutative torsion-free additive monoid has unique divisibility.
This is not an instance, to avoid an expensive instance loop with
HasUniqueDiv M → IsAddTorsionFree M.
theorem AddCommute.eq_of_zsmul_eq_zsmul {G : Type u_2} [AddGroup G] {n : ℤ} {a b : G} [IsAddTorsionFree G] (hab : AddCommute a b) (hn : n ≠ 0) (habn : n • a = n • b) :
theorem AddCommute.zsmul_right_inj {G : Type u_2} [AddGroup G] {n : ℤ} {a b : G} [IsAddTorsionFree G] (hab : AddCommute a b) (hn : n ≠ 0) :
theorem IsMulTorsionFree.zpow_right_injective_iff {G : Type u_2} [Group G] {a : G} [IsMulTorsionFree G] :
theorem IsAddTorsionFree.zsmul_left_injective_iff {G : Type u_2} [AddGroup G] {a : G} [IsAddTorsionFree G] :
theorem IsMulTorsionFree.zpow_right_injective {G : Type u_2} [Group G] {a : G} [IsMulTorsionFree G] :
a ≠ 1 → Function.Injective fun (x : ℤ) => a ^ x
Alias of the reverse direction of IsMulTorsionFree.zpow_right_injective_iff.
theorem IsAddTorsionFree.zsmul_left_injective {G : Type u_2} [AddGroup G] {a : G} [IsAddTorsionFree G] :
a ≠ 0 → Function.Injective fun (x : ℤ) => x • a
Alias of the reverse direction of IsAddTorsionFree.zsmul_left_injective_iff.
theorem zpow_left_injective {G : Type u_2} [Group G] [HasUniqueRoots G] {n : ℤ} (hn : n ≠ 0) :
Function.Injective fun (a : G) => a ^ n
theorem zsmul_right_injective {G : Type u_2} [AddGroup G] [HasUniqueDiv G] {n : ℤ} (hn : n ≠ 0) :
Function.Injective fun (a : G) => n • a
@[deprecated zpow_left_inj (since := "2026-09-30")]
theorem zpow_eq_zpow_iff' {G : Type u_2} [Group G] [HasUniqueRoots G] {n : ℤ} {a b : G} (hn : n ≠ 0) :
Alias of zpow_left_inj.
@[deprecated zsmul_right_inj (since := "2026-09-30")]
theorem zsmul_eq_zsmul_iff' {G : Type u_2} [AddGroup G] [HasUniqueDiv G] {n : ℤ} {a b : G} (hn : n ≠ 0) :
Alias of zsmul_right_inj.