@@ -35,19 +35,27 @@ lemma pow_left_injective (hn : n ≠ 0) : Injective fun a : M ↦ a ^ n :=
3535@[to_additive nsmul_right_inj]
3636lemma pow_left_inj (hn : n ≠ 0 ) : a ^ n = b ^ n ↔ a = b := (pow_left_injective hn).eq_iff
3737
38- @[to_additive]
39- lemma IsMulTorsionFree.pow_eq_one_iff (hn : n ≠ 0 ) : a ^ n = 1 ↔ a = 1 :=
40- ⟨ fun h ↦ by rwa [← pow_left_inj hn, one_pow], fun h ↦ by rw [h , one_pow]⟩
38+ @[to_additive IsAddTorsionFree.nsmul_eq_zero_iff_right ]
39+ lemma IsMulTorsionFree.pow_eq_one_iff_left (hn : n ≠ 0 ) : a ^ n = 1 ↔ a = 1 := by
40+ rw [← pow_left_inj (a := a) hn , one_pow]
4141
42- @[to_additive]
43- lemma IsMulTorsionFree.pow_eq_one_iff' (ha : a ≠ 1 ) : a ^ n = 1 ↔ n = 0 := by
44- refine ⟨fun h ↦ ?_, fun h ↦ by rw [h, pow_zero]⟩
45- by_contra h'
46- simpa [h] using (pow_left_injective h').ne ha
42+ -- We want to use `IsAddTorsion.nsmul_eq_zero_iff` earlier than `smul_eq_zero`.
43+ @[to_additive (attr := simp high)]
44+ lemma IsMulTorsionFree.pow_eq_one_iff : a ^ n = 1 ↔ a = 1 ∨ n = 0 := by
45+ obtain rfl | hn := eq_or_ne n 0 <;> simp [pow_eq_one_iff_left, *]
46+
47+ @[to_additive IsAddTorsionFree.nsmul_eq_zero_iff_left]
48+ lemma IsMulTorsionFree.pow_eq_one_iff_right (ha : a ≠ 1 ) : a ^ n = 1 ↔ n = 0 := by simp [*]
49+
50+ @[deprecated (since := "2025-10-19")]
51+ alias IsAddTorsionFree.nsmul_eq_zero_iff' := IsAddTorsionFree.nsmul_eq_zero_iff_left
52+
53+ @[deprecated (since := "2025-10-19")]
54+ alias IsMulTorsionFree.pow_eq_one_iff' := IsMulTorsionFree.pow_eq_one_iff_right
4755
4856/-- See `sq_eq_one_iff` for a version that holds in rings. -/
4957@[to_additive two_nsmul_eq_zero]
50- lemma sq_eq_one : a ^ 2 = 1 ↔ a = 1 := IsMulTorsionFree.pow_eq_one_iff (by cutsat)
58+ lemma sq_eq_one : a ^ 2 = 1 ↔ a = 1 := IsMulTorsionFree.pow_eq_one_iff_left (by cutsat)
5159
5260end Monoid
5361
@@ -69,6 +77,18 @@ lemma zpow_left_inj (hn : n ≠ 0) : a ^ n = b ^ n ↔ a = b := (zpow_left_injec
6977and `zsmul_lt_zsmul_iff'`. -/ ]
7078lemma zpow_eq_zpow_iff' (hn : n ≠ 0 ) : a ^ n = b ^ n ↔ a = b := zpow_left_inj hn
7179
80+ @[to_additive IsAddTorsionFree.zsmul_eq_zero_iff_right]
81+ lemma IsMulTorsionFree.zpow_eq_one_iff_left (hn : n ≠ 0 ) : a ^ n = 1 ↔ a = 1 := by
82+ rw [← zpow_left_inj (a := a) hn, one_zpow]
83+
84+ -- We want to use `IsAddTorsion.zsmul_eq_zero_iff` earlier than `smul_eq_zero`.
85+ @[to_additive (attr := simp high)]
86+ lemma IsMulTorsionFree.zpow_eq_one_iff : a ^ n = 1 ↔ a = 1 ∨ n = 0 := by
87+ obtain rfl | hn := eq_or_ne n 0 <;> simp [zpow_eq_one_iff_left, *]
88+
89+ @[to_additive IsAddTorsionFree.zsmul_eq_zero_iff_left]
90+ lemma IsMulTorsionFree.zpow_eq_one_iff_right (ha : a ≠ 1 ) : a ^ n = 1 ↔ n = 0 := by simp [*]
91+
7292@[to_additive] lemma self_eq_inv : a = a⁻¹ ↔ a = 1 := by rw [← sq_eq_one, sq, mul_eq_one_iff_eq_inv]
7393@[to_additive] lemma inv_eq_self : a⁻¹ = a ↔ a = 1 := by rw [eq_comm, self_eq_inv]
7494@[to_additive] lemma self_ne_inv : a ≠ a⁻¹ ↔ a ≠ 1 := self_eq_inv.ne
0 commit comments