Skip to content

Commit 50818a5

Browse files
alreadydoneerdOne
andcommitted
feat(RingTheory): a semiprimary ring is Noetherian/Artinian iff its Jacobson radical is fg (#22151)
A key fact used is `Module.FG.smul`: if `I` is a two-sided ideal of `R` that is f.g. as a left ideal and `N` is a f.g. `R`-module, then `I • M` is also a f.g. `R`-module. Many lemmas about coprimality of ideals are also generalized to the noncommutative, two-sided setting. Co-authored-by: Andrew Yang <the.erd.one@gmail.com>
1 parent ed54e09 commit 50818a5

File tree

9 files changed

+233
-166
lines changed

9 files changed

+233
-166
lines changed

Mathlib/Algebra/Algebra/Operations.lean

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,9 @@ theorem one_eq_span_one_set : (1 : Submodule R A) = span R 1 :=
9595
theorem one_le {P : Submodule R A} : (1 : Submodule R A) ≤ P ↔ (1 : A) ∈ P := by
9696
simp [one_eq_span]
9797

98+
instance : AddCommMonoidWithOne (Submodule R A) where
99+
add_comm := sup_comm
100+
98101
variable {M : Type*} [AddCommMonoid M] [Module R M] [Module A M] [IsScalarTower R A M]
99102

100103
instance : SMul (Submodule R A) (Submodule R M) where

Mathlib/AlgebraicGeometry/EllipticCurve/Affine/Point.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,7 @@ lemma XYIdeal_neg_mul {x y : F} (h : W.Nonsingular x y) :
303303
AdjoinRoot.mk_eq_mk.mpr ⟨1, Y_rw⟩, map_mul, span_insert, ← span_singleton_mul_span_singleton,
304304
← Ideal.mul_sup, ← span_insert]
305305
convert mul_top (_ : Ideal W.CoordinateRing) using 2
306+
on_goal 2 => infer_instance
306307
simp_rw [← Set.image_singleton (f := mk W), ← Set.image_insert_eq, ← map_span]
307308
convert map_top (R := F[X][Y]) (mk W) using 1
308309
apply congr_arg

Mathlib/NumberTheory/RamificationInertia/Basic.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -242,8 +242,7 @@ lemma ramificationIdx_eq_one_iff
242242
(hp : P ≠ ⊥) (hpP : p.map (algebraMap R S) ≤ P) :
243243
ramificationIdx (algebraMap R S) p P = 1
244244
p.map (algebraMap R (Localization.AtPrime P)) = maximalIdeal (Localization.AtPrime P) := by
245-
refine ⟨?_, ramificationIdx_eq_one_of_map_localization hpP hp
246-
(primeCompl_le_nonZeroDivisors _)⟩
245+
refine ⟨?_, ramificationIdx_eq_one_of_map_localization hpP hp (primeCompl_le_nonZeroDivisors _)⟩
247246
let Sₚ := Localization.AtPrime P
248247
rw [← not_ne_iff (b := 1), ramificationIdx_ne_one_iff hpP, pow_two]
249248
intro H₁
@@ -252,6 +251,7 @@ lemma ramificationIdx_eq_one_iff
252251
rw [IsScalarTower.algebraMap_eq _ S, ← Ideal.map_map, ha, Ideal.map_mul,
253252
Localization.AtPrime.map_eq_maximalIdeal]
254253
convert Ideal.mul_top _
254+
on_goal 2 => infer_instance
255255
rw [← not_ne_iff, IsLocalization.map_algebraMap_ne_top_iff_disjoint P.primeCompl]
256256
simpa [primeCompl, Set.disjoint_compl_left_iff_subset]
257257

Mathlib/RingTheory/Extension/Basic.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@ lemma Cotangent.finite (hP : P.ker.FG) :
420420
refine ⟨.of_restrictScalars (R := P.Ring) _ ?_⟩
421421
rw [Submodule.restrictScalars_top, ← LinearMap.range_eq_top.mpr Extension.Cotangent.mk_surjective,
422422
← Submodule.map_top]
423-
exact (P.ker.fg_top.mpr hP).map _
423+
exact ((Submodule.fg_top P.ker).mpr hP).map _
424424

425425
end Cotangent
426426

Mathlib/RingTheory/Finiteness/Basic.lean

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -264,8 +264,10 @@ theorem pi_iff {ι : Type*} {M : ι → Type*} [_root_.Finite ι] [∀ i, AddCom
264264

265265
variable (R)
266266

267-
instance self : Module.Finite R R :=
268-
⟨⟨{1}, by simpa only [Finset.coe_singleton] using Ideal.span_singleton_one⟩⟩
267+
theorem _root_.Ideal.fg_top : (⊤ : Ideal R).FG :=
268+
⟨{1}, by simpa only [Finset.coe_singleton] using Ideal.span_singleton_one⟩
269+
270+
instance self : Module.Finite R R := ⟨Ideal.fg_top R⟩
269271

270272
variable (M)
271273

Mathlib/RingTheory/Finiteness/Ideal.lean

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ Copyright (c) 2020 Johan Commelin. All rights reserved.
33
Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Johan Commelin
55
-/
6+
import Mathlib.Algebra.Group.Pointwise.Finset.Scalar
67
import Mathlib.RingTheory.Finiteness.Finsupp
78
import Mathlib.RingTheory.Ideal.Maps
89

@@ -86,4 +87,18 @@ lemma exists_pow_le_of_le_radical_of_fg {R : Type*} [CommSemiring R] {I J : Idea
8687
use n₁ + n₂
8788
exact Ideal.sup_pow_add_le_pow_sup_pow.trans (sup_le hn₁ hn₂)
8889

90+
theorem _root_.Submodule.FG.smul {I : Ideal R} [I.IsTwoSided] {N : Submodule R M}
91+
(hI : I.FG) (hN : N.FG) : (I • N).FG := by
92+
obtain ⟨s, rfl⟩ := hI
93+
obtain ⟨t, rfl⟩ := hN
94+
classical rw [Submodule.span_smul_span, ← s.coe_smul]
95+
exact ⟨_, rfl⟩
96+
97+
theorem FG.mul {I J : Ideal R} [I.IsTwoSided] (hI : I.FG) (hJ : J.FG) : (I * J).FG :=
98+
Submodule.FG.smul hI hJ
99+
100+
theorem FG.pow {I : Ideal R} [I.IsTwoSided] {n : ℕ} (hI : I.FG) : (I ^ n).FG :=
101+
n.rec (by rw [I.pow_zero, one_eq_top]; exact fg_top R) fun n ih ↦ by
102+
rw [IsTwoSided.pow_succ]; exact hI.mul ih
103+
89104
end Ideal

Mathlib/RingTheory/HopkinsLevitzki.lean

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,18 @@ theorem isNoetherian_iff_isArtinian : IsNoetherian R M ↔ IsArtinian R M :=
103103
fun M _ _ _ _ h h' ↦ let N : Submodule R M := Ring.jacobson R • ⊤; by
104104
simp_rw [isNoetherian_iff_submodule_quotient N, isArtinian_iff_submodule_quotient N, N, h, h']
105105

106+
theorem isNoetherian_iff_finite_of_jacobson_fg (fg : (Ring.jacobson R).FG) :
107+
IsNoetherian R M ↔ Module.Finite R M :=
108+
fun _ ↦ inferInstance, IsSemiprimaryRing.induction R R M
109+
(P := fun M ↦ Module.Finite R M → IsNoetherian R M)
110+
(fun M _ _ _ _ _ _ ↦ (IsSemisimpleModule.finite_tfae.out 0 1).mp)
111+
fun M _ _ _ _ hs hq fin ↦ (isNoetherian_iff_submodule_quotient (Ring.jacobson R • ⊤)).mpr
112+
⟨hs (Module.Finite.iff_fg.mpr (.smul fg fin.1)), hq inferInstance⟩⟩
113+
114+
theorem isNoetherianRing_iff_jacobson_fg : IsNoetherianRing R ↔ (Ring.jacobson R).FG :=
115+
fun _ ↦ IsNoetherian.noetherian .., fun fg ↦
116+
(IsSemiprimaryRing.isNoetherian_iff_finite_of_jacobson_fg fg).mpr inferInstance⟩
117+
106118
end IsSemiprimaryRing
107119

108120
theorem IsArtinianRing.tfae [IsArtinianRing R] :

Mathlib/RingTheory/Ideal/Maps.lean

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -608,11 +608,9 @@ protected theorem map_mul {R} [Semiring R] [FunLike F R S] [RingHomClass F R S]
608608
mul_le.2 fun r hri s hsj =>
609609
show (f (r * s)) ∈ map f I * map f J by
610610
rw [map_mul]; exact mul_mem_mul (mem_map_of_mem f hri) (mem_map_of_mem f hsj))
611-
(span_mul_span (↑f '' ↑I) (↑f '' ↑J) ▸ (span_le.2 <|
612-
Set.iUnion₂_subset fun _ ⟨r, hri, hfri⟩ =>
613-
Set.iUnion₂_subset fun _ ⟨s, hsj, hfsj⟩ =>
614-
Set.singleton_subset_iff.2 <|
615-
hfri ▸ hfsj ▸ by rw [← map_mul]; exact mem_map_of_mem f (mul_mem_mul hri hsj)))
611+
(span_mul_span (↑f '' ↑I) (↑f '' ↑J) ▸ (span_le.2 <| by
612+
rintro _ ⟨_, ⟨r, hri, rfl⟩, _, ⟨s, hsj, rfl⟩, rfl⟩
613+
simp_rw [← map_mul]; exact mem_map_of_mem f (mul_mem_mul hri hsj)))
616614

617615
/-- The pushforward `Ideal.map` as a (semi)ring homomorphism. -/
618616
@[simps]

0 commit comments

Comments
 (0)