@@ -47,7 +47,7 @@ Finitely generated module, principal ideal domain, classification, structure the
47
47
-/
48
48
49
49
universes u v
50
- open_locale big_operators
50
+ open_locale big_operators classical
51
51
52
52
variables {R : Type u} [comm_ring R] [is_domain R] [is_principal_ideal_ring R]
53
53
variables {M : Type v} [add_comm_group M] [module R M]
@@ -56,21 +56,36 @@ variables {N : Type (max u v)} [add_comm_group N] [module R N]
56
56
open_locale direct_sum
57
57
open submodule
58
58
59
+ open unique_factorization_monoid
60
+
59
61
/--A finitely generated torsion module over a PID is an internal direct sum of its
60
62
`p i ^ e i`-torsion submodules for some primes `p i` and numbers `e i`.-/
61
63
theorem submodule.is_internal_prime_power_torsion_of_pid
64
+ [module.finite R M] (hM : module.is_torsion R M) :
65
+ direct_sum.is_internal (λ p : (factors (⊤ : submodule R M).annihilator).to_finset,
66
+ torsion_by R M
67
+ (is_principal.generator (p : ideal R)
68
+ ^ (factors (⊤ : submodule R M).annihilator).count p)) :=
69
+ begin
70
+ convert is_internal_prime_power_torsion hM,
71
+ ext p : 1 ,
72
+ rw [← torsion_by_span_singleton_eq, ideal.submodule_span_eq, ← ideal.span_singleton_pow,
73
+ ideal.span_singleton_generator],
74
+ end
75
+
76
+ /--A finitely generated torsion module over a PID is an internal direct sum of its
77
+ `p i ^ e i`-torsion submodules for some primes `p i` and numbers `e i`.-/
78
+ theorem submodule.exists_is_internal_prime_power_torsion_of_pid
62
79
[module.finite R M] (hM : module.is_torsion R M) :
63
80
∃ (ι : Type u) [fintype ι] [decidable_eq ι] (p : ι → R) (h : ∀ i, irreducible $ p i) (e : ι → ℕ),
64
81
by exactI direct_sum.is_internal (λ i, torsion_by R M $ p i ^ e i) :=
65
82
begin
66
- obtain ⟨P, dec, hP, e, this ⟩ := is_internal_prime_power_torsion hM,
67
- refine ⟨P, infer_instance, dec, λ p, is_principal.generator (p : ideal R), _, e, _⟩ ,
83
+ refine ⟨_, _, _, _, _, _, submodule.is_internal_prime_power_torsion_of_pid hM⟩ ,
84
+ exact finset.fintype_coe_sort _ ,
68
85
{ rintro ⟨p, hp⟩,
69
- haveI := ideal.is_prime_of_prime (hP p hp),
70
- exact (is_principal.prime_generator_of_is_prime p (hP p hp).ne_zero).irreducible },
71
- { convert this , ext p : 1 ,
72
- rw [← torsion_by_span_singleton_eq, ideal.submodule_span_eq, ← ideal.span_singleton_pow,
73
- ideal.span_singleton_generator] }
86
+ have hP := prime_of_factor p (multiset.mem_to_finset.mp hp),
87
+ haveI := ideal.is_prime_of_prime hP,
88
+ exact (is_principal.prime_generator_of_is_prime p hP.ne_zero).irreducible },
74
89
end
75
90
76
91
namespace module
@@ -205,7 +220,7 @@ theorem equiv_direct_sum_of_is_torsion [h' : module.finite R N] (hN : module.is_
205
220
∃ (ι : Type u) [fintype ι] (p : ι → R) (h : ∀ i, irreducible $ p i) (e : ι → ℕ),
206
221
nonempty $ N ≃ₗ[R] ⨁ (i : ι), R ⧸ R ∙ (p i ^ e i) :=
207
222
begin
208
- obtain ⟨I, fI, _, p, hp, e, h⟩ := submodule.is_internal_prime_power_torsion_of_pid hN,
223
+ obtain ⟨I, fI, _, p, hp, e, h⟩ := submodule.exists_is_internal_prime_power_torsion_of_pid hN,
209
224
haveI := fI,
210
225
have : ∀ i, ∃ (d : ℕ) (k : fin d → ℕ),
211
226
nonempty $ torsion_by R N (p i ^ e i) ≃ₗ[R] ⨁ j, R ⧸ R ∙ (p i ^ k j),
0 commit comments