Skip to content

Commit c6943c2

Browse files
tb65536Bergschaf
authored andcommitted
feat(GroupTheory/Torsion): the torsion subgroup is preserved by isomorphisms (leanprover-community#38721)
This PR proves that the torsion subgroup is preserved by isomorphisms. Co-authored-by: tb65536 <thomas.l.browning@gmail.com>
1 parent 28a84ee commit c6943c2

4 files changed

Lines changed: 21 additions & 3 deletions

File tree

Mathlib/GroupTheory/Torsion.lean

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,8 @@ subgroup as a submonoid. -/]
313313
theorem torsion_eq_torsion_submonoid : CommMonoid.torsion G = (torsion G).toSubmonoid :=
314314
rfl
315315

316+
variable {G}
317+
316318
@[to_additive]
317319
theorem mem_torsion (g : G) : g ∈ torsion G ↔ IsOfFinOrder g := Iff.rfl
318320

@@ -325,10 +327,26 @@ lemma isMulTorsionFree_iff_torsion_eq_bot : IsMulTorsionFree G ↔ CommGroup.tor
325327
rw [isMulTorsionFree_iff_not_isOfFinOrder, eq_bot_iff, SetLike.le_def]
326328
simp [not_imp_not, CommGroup.mem_torsion]
327329

330+
@[to_additive]
331+
lemma comap_torsion_of_injective {f : G →* H} (hf : Function.Injective f) :
332+
(torsion H).comap f = torsion G := by
333+
ext x
334+
exact hf.isOfFinOrder_iff
335+
336+
@[to_additive]
337+
lemma _root_.MulEquiv.comap_torsion (e : G ≃* H) : (torsion H).comap e = torsion G :=
338+
comap_torsion_of_injective e.injective
339+
340+
@[to_additive]
341+
lemma _root_.MulEquiv.map_torsion (e : G ≃* H) : (torsion G).map e = torsion H := by
342+
rw [Subgroup.map_equiv_eq_comap_symm, e.symm.comap_torsion]
343+
328344
@[to_additive]
329345
lemma torsion_prod : torsion (G × H) = (torsion G).prod (torsion H) := by
330346
simp [Subgroup.ext_iff, Subgroup.mem_prod, mem_torsion, IsOfFinOrder.prod_iff]
331347

348+
variable (G)
349+
332350
@[to_additive]
333351
lemma isTorsion_quotient_range_powMonoidHom {n : ℕ} (hn : n ≠ 0) :
334352
Monoid.IsTorsion (G ⧸ (powMonoidHom (α := G) n).range) := by

Mathlib/NumberTheory/NumberField/Cyclotomic/Basic.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -906,7 +906,7 @@ theorem NumberField.Units.dvd_torsionOrder_of_isPrimitiveRoot [NeZero n] [Number
906906
convert! orderOf_dvd_natCard (⟨(hζ.isUnit (NeZero.ne n)).unit, ?_⟩ : torsion K)
907907
· rw [Subgroup.orderOf_mk]
908908
exact hζ.eq_orderOf
909-
· refine (CommGroup.mem_torsion _ _).mpr ⟨n, NeZero.pos n, ?_⟩
909+
· refine (CommGroup.mem_torsion _).mpr ⟨n, NeZero.pos n, ?_⟩
910910
rw [isPeriodicPt_mul_iff_pow_eq_one]
911911
exact hζ.pow_eq_one
912912

Mathlib/NumberTheory/NumberField/Cyclotomic/Three.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ theorem Units.mem [NumberField K] [IsCyclotomicExtension {3} ℚ K] :
6262
congr
6363
rw [Finset.univ_eq_empty_iff, hrank]
6464
infer_instance
65-
obtain ⟨n, hnpos, hn⟩ := isOfFinOrder_iff_pow_eq_one.1 <| (CommGroup.mem_torsion _ _).1 x.2
65+
obtain ⟨n, hnpos, hn⟩ := isOfFinOrder_iff_pow_eq_one.1 <| (CommGroup.mem_torsion _).1 x.2
6666
replace hn : (↑u : K) ^ ((⟨n, hnpos⟩ : ℕ+) : ℕ) = 1 := by
6767
rw [← map_pow]
6868
convert! map_one (algebraMap (𝓞 K) K)

Mathlib/NumberTheory/NumberField/Units/Basic.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ theorem torsion_eq_one_or_neg_one_of_odd_finrank
238238
linarith [IsPrimitiveRoot.nrRealPlaces_eq_zero_of_two_lt hc (IsPrimitiveRoot.orderOf (x.1 : K)),
239239
NumberField.InfinitePlace.nrRealPlaces_pos_of_odd_finrank h]
240240
· interval_cases hi : orderOf (x : (𝓞 K)ˣ)
241-
· linarith [orderOf_pos_iff.2 ((CommGroup.mem_torsion _ x.1).1 x.2)]
241+
· linarith [orderOf_pos_iff.2 ((CommGroup.mem_torsion x.1).1 x.2)]
242242
· exact Or.intro_left _ (orderOf_eq_one_iff.1 hi)
243243
· rw [← orderOf_units, CharP.orderOf_eq_two_iff 0 (by decide)] at hi
244244
simp [← Units.val_inj, ← Units.val_inj, Units.val_neg, Units.val_one, hi]

0 commit comments

Comments
 (0)