@@ -3,8 +3,8 @@ Copyright (c) 2022 Pierre-Alexandre Bazin. All rights reserved.
3
3
Released under Apache 2.0 license as described in the file LICENSE.
4
4
Authors: Pierre-Alexandre Bazin
5
5
-/
6
- import data.zmod.quotient
7
6
import algebra.module.pid
7
+ import data.zmod.quotient
8
8
9
9
/-!
10
10
# Structure of finite(ly generated) abelian groups
@@ -17,15 +17,39 @@ import algebra.module.pid
17
17
18
18
-/
19
19
20
-
21
20
open_locale direct_sum
22
21
22
+ universe u
23
+
24
+ namespace module
25
+
26
+ variables (M : Type u)
27
+
28
+ lemma finite_of_fg_torsion [add_comm_group M] [module ℤ M] [module.finite ℤ M]
29
+ (hM : module.is_torsion ℤ M) : _root_.finite M :=
30
+ begin
31
+ rcases module.equiv_direct_sum_of_is_torsion hM with ⟨ι, _, p, h, e, ⟨l⟩⟩,
32
+ haveI : ∀ i : ι, fact $ 0 < (p i ^ e i).nat_abs :=
33
+ λ i, fact.mk $ int.nat_abs_pos_of_ne_zero $ pow_ne_zero (e i) (h i).ne_zero,
34
+ haveI : ∀ i : ι, _root_.finite $ ℤ ⧸ submodule.span ℤ {p i ^ e i} :=
35
+ λ i, finite.of_equiv _ (p i ^ e i).quotient_span_equiv_zmod.symm.to_equiv,
36
+ haveI : _root_.finite ⨁ i, ℤ ⧸ (submodule.span ℤ {p i ^ e i} : submodule ℤ ℤ) :=
37
+ finite.of_equiv _ dfinsupp.equiv_fun_on_fintype.symm,
38
+ exact finite.of_equiv _ l.symm.to_equiv
39
+ end
40
+
41
+ end module
42
+
43
+ variables (G : Type u)
44
+
23
45
namespace add_comm_group
24
46
47
+ variable [add_comm_group G]
48
+
25
49
/-- **Structure theorem of finitely generated abelian groups** : Any finitely generated abelian
26
50
group is the product of a power of `ℤ` and a direct sum of some `zmod (p i ^ e i)` for some
27
- prime powers `p i ^ e i`.-/
28
- theorem equiv_free_prod_direct_sum_zmod (G : Type *) [add_comm_group G] [hG : add_group.fg G] :
51
+ prime powers `p i ^ e i`. -/
52
+ theorem equiv_free_prod_direct_sum_zmod [hG : add_group.fg G] :
29
53
∃ (n : ℕ) (ι : Type ) [fintype ι] (p : ι → ℕ) [∀ i, nat.prime $ p i] (e : ι → ℕ),
30
54
nonempty $ G ≃+ (fin n →₀ ℤ) × ⨁ (i : ι), zmod (p i ^ e i) :=
31
55
begin
39
63
end
40
64
41
65
/-- **Structure theorem of finite abelian groups** : Any finite abelian group is a direct sum of
42
- some `zmod (p i ^ e i)` for some prime powers `p i ^ e i`.-/
43
- theorem equiv_direct_sum_zmod_of_fintype (G : Type *) [add_comm_group G] [fintype G] :
66
+ some `zmod (p i ^ e i)` for some prime powers `p i ^ e i`. -/
67
+ theorem equiv_direct_sum_zmod_of_fintype [fintype G] :
44
68
∃ (ι : Type ) [fintype ι] (p : ι → ℕ) [∀ i, nat.prime $ p i] (e : ι → ℕ),
45
69
nonempty $ G ≃+ ⨁ (i : ι), zmod (p i ^ e i) :=
46
70
begin
52
76
λ a, ⟨finsupp.single 0 a, finsupp.single_eq_same⟩).false.elim }
53
77
end
54
78
79
+ lemma finite_of_fg_torsion [hG' : add_group.fg G] (hG : add_monoid.is_torsion G) : finite G :=
80
+ @module.finite_of_fg_torsion _ _ _ (module.finite.iff_add_group_fg.mpr hG') $
81
+ add_monoid.is_torsion_iff_is_torsion_int.mp hG
82
+
55
83
end add_comm_group
84
+
85
+ namespace comm_group
86
+
87
+ lemma finite_of_fg_torsion [comm_group G] [group.fg G] (hG : monoid.is_torsion G) : finite G :=
88
+ @finite.of_equiv _ _ (add_comm_group.finite_of_fg_torsion (additive G) hG) multiplicative.of_add
89
+
90
+ end comm_group
0 commit comments