@@ -7,6 +7,7 @@ import Mathlib.Data.SetLike.Fintype
7
7
import Mathlib.Order.Filter.EventuallyConst
8
8
import Mathlib.RingTheory.Ideal.Prod
9
9
import Mathlib.RingTheory.Ideal.Quotient.Operations
10
+ import Mathlib.RingTheory.Jacobson.Semiprimary
10
11
import Mathlib.RingTheory.Nilpotent.Lemmas
11
12
import Mathlib.RingTheory.Noetherian.Defs
12
13
import Mathlib.RingTheory.Spectrum.Maximal.Basic
@@ -39,6 +40,11 @@ Let `R` be a ring and let `M` and `P` be `R`-modules. Let `N` be an `R`-submodul
39
40
product of fields (and therefore is a semisimple ring and a decomposition monoid; moreover
40
41
`R[X]` is also a decomposition monoid).
41
42
43
+ * `IsArtinian.isSemisimpleModule_iff_jacobson`: an Artinian module is semisimple
44
+ iff its Jacobson radical is zero.
45
+
46
+ * `instIsSemiprimaryRingOfIsArtinianRing`: an Artinian ring `R` is semiprimary, in particular
47
+ the Jacobson radical of `R` is a nilpotent ideal (`IsArtinianRing.isNilpotent_jacobson_bot`).
42
48
43
49
## References
44
50
@@ -68,6 +74,12 @@ variable {R M P N : Type*}
68
74
variable [Semiring R] [AddCommMonoid M] [AddCommMonoid P] [AddCommMonoid N]
69
75
variable [Module R M] [Module R P] [Module R N]
70
76
77
+ theorem LinearMap.isArtinian_iff_of_bijective {S P} [Ring S] [AddCommGroup P] [Module S P]
78
+ {σ : R →+* S} [RingHomSurjective σ] (l : M →ₛₗ[σ] P) (hl : Function.Bijective l) :
79
+ IsArtinian R M ↔ IsArtinian S P :=
80
+ let e := Submodule.orderIsoMapComapOfBijective l hl
81
+ ⟨fun _ ↦ e.symm.strictMono.wellFoundedLT, fun _ ↦ e.strictMono.wellFoundedLT⟩
82
+
71
83
theorem isArtinian_of_injective (f : M →ₗ[R] P) (h : Function.Injective f) [IsArtinian R P] :
72
84
IsArtinian R M :=
73
85
⟨Subrelation.wf
@@ -273,6 +285,18 @@ instance isArtinian_iSup :
273
285
· intros; rw [iSup_of_empty]; infer_instance
274
286
· intro _ _ ih _ _; rw [iSup_option]; infer_instance
275
287
288
+ variable (R M) in
289
+ theorem IsArtinian.isSemisimpleModule_iff_jacobson [IsArtinian R M] :
290
+ IsSemisimpleModule R M ↔ Module.jacobson R M = ⊥ :=
291
+ ⟨fun _ ↦ IsSemisimpleModule.jacobson_eq_bot R M, fun h ↦
292
+ have ⟨s, hs⟩ := Finset.exists_inf_le (Subtype.val (p := fun m : Submodule R M ↦ IsCoatom m))
293
+ have _ (m : s) : IsSimpleModule R (M ⧸ m.1 .1 ) := isSimpleModule_iff_isCoatom.mpr m.1 .2
294
+ let f : M →ₗ[R] ∀ m : s, M ⧸ m.1 .1 := LinearMap.pi fun m ↦ m.1 .1 .mkQ
295
+ .of_injective f <| LinearMap.ker_eq_bot.mp <| le_bot_iff.mp fun x hx ↦ by
296
+ rw [← h, Module.jacobson, Submodule.mem_sInf]
297
+ exact fun m hm ↦ hs ⟨m, hm⟩ <| Submodule.mem_finset_inf.mpr fun i hi ↦
298
+ (Submodule.Quotient.mk_eq_zero i.1 ).mp <| congr_fun hx ⟨i, hi⟩⟩
299
+
276
300
open Submodule Function
277
301
278
302
namespace LinearMap
@@ -380,34 +404,21 @@ theorem Ring.isArtinian_of_zero_eq_one {R} [Semiring R] (h01 : (0 : R) = 1) : Is
380
404
have := subsingleton_of_zero_eq_one h01
381
405
inferInstance
382
406
383
- instance (R) [CommRing R] [IsArtinianRing R] (I : Ideal R) : IsArtinianRing (R ⧸ I) :=
407
+ instance (R) [Ring R] [IsArtinianRing R] (I : Ideal R) [I.IsTwoSided] : IsArtinianRing (R ⧸ I) :=
384
408
isArtinian_of_tower R inferInstance
385
409
386
410
open Submodule Function
387
411
388
- theorem isArtinian_of_fg_of_artinian {R M} [Ring R] [AddCommGroup M] [Module R M]
389
- (N : Submodule R M) [IsArtinianRing R] (hN : N.FG) : IsArtinian R N := by
390
- let ⟨s, hs⟩ := hN
391
- haveI := Classical.decEq M
392
- haveI := Classical.decEq R
393
- have : ∀ x ∈ s, x ∈ N := fun x hx => hs ▸ Submodule.subset_span hx
394
- refine @isArtinian_of_surjective _ ((↑s : Set M) →₀ R) N _ _ _ _ _ ?_ ?_ isArtinian_finsupp
395
- · exact Finsupp.linearCombination R (fun i => ⟨i, hs ▸ subset_span i.2 ⟩)
396
- · rw [← LinearMap.range_eq_top, eq_top_iff,
397
- ← map_le_map_iff_of_injective (show Injective (Submodule.subtype N)
398
- from Subtype.val_injective), Submodule.map_top, range_subtype,
399
- ← Submodule.map_top, ← Submodule.map_comp, Submodule.map_top]
400
- subst N
401
- refine span_le.2 (fun i hi => ?_)
402
- use Finsupp.single ⟨i, hi⟩ 1
403
- simp
404
-
405
412
instance isArtinian_of_fg_of_artinian' {R M} [Ring R] [AddCommGroup M] [Module R M]
406
413
[IsArtinianRing R] [Module.Finite R M] : IsArtinian R M :=
407
- have : IsArtinian R (⊤ : Submodule R M) := isArtinian_of_fg_of_artinian _ Module.Finite.fg_top
408
- isArtinian_of_linearEquiv (LinearEquiv.ofTop (⊤ : Submodule R M) rfl)
414
+ have ⟨_, _, h⟩ := Module.Finite.exists_fin' R M
415
+ isArtinian_of_surjective _ _ h
416
+
417
+ theorem isArtinian_of_fg_of_artinian {R M} [Ring R] [AddCommGroup M] [Module R M]
418
+ (N : Submodule R M) [IsArtinianRing R] (hN : N.FG) : IsArtinian R N := by
419
+ rw [← Module.Finite.iff_fg] at hN; infer_instance
409
420
410
- theorem IsArtinianRing.of_finite (R S) [CommRing R] [Ring S] [Algebra R S]
421
+ theorem IsArtinianRing.of_finite (R S) [Ring R] [Ring S] [Module R S] [IsScalarTower R S S]
411
422
[IsArtinianRing R] [Module.Finite R S] : IsArtinianRing S :=
412
423
isArtinian_of_tower R isArtinian_of_fg_of_artinian'
413
424
@@ -454,13 +465,9 @@ variable (R : Type*) [CommSemiring R] [IsArtinianRing R]
454
465
455
466
@[stacks 00J7]
456
467
lemma setOf_isMaximal_finite : {I : Ideal R | I.IsMaximal}.Finite := by
457
- set Spec := {I : Ideal R | I.IsMaximal}
458
- obtain ⟨_, ⟨s, rfl⟩, H⟩ := IsArtinian.set_has_minimal
459
- (range (Finset.inf · Subtype.val : Finset Spec → Ideal R)) ⟨⊤, ∅, by simp⟩
468
+ have ⟨s, H⟩ := Finset.exists_inf_le (Subtype.val (p := fun I : Ideal R ↦ I.IsMaximal))
460
469
refine Set.finite_def.2 ⟨s, fun p ↦ ?_⟩
461
- classical
462
- obtain ⟨q, hq1, hq2⟩ := p.2 .isPrime.inf_le'.mp <| inf_eq_right.mp <|
463
- inf_le_right.eq_of_not_lt (H (p ⊓ s.inf Subtype.val) ⟨insert p s, by simp⟩)
470
+ have ⟨q, hq1, hq2⟩ := p.2 .isPrime.inf_le'.mp (H p)
464
471
rwa [← Subtype.ext <| q.2 .eq_of_le p.2 .ne_top hq2]
465
472
466
473
instance : Finite (MaximalSpectrum R) :=
@@ -469,6 +476,8 @@ instance : Finite (MaximalSpectrum R) :=
469
476
470
477
end CommSemiring
471
478
479
+ section CommRing
480
+
472
481
variable {R : Type *} [CommRing R] [IsArtinianRing R]
473
482
474
483
variable (R) in
@@ -546,4 +555,47 @@ noncomputable def equivPi [IsReduced R] : R ≃+* ∀ I : MaximalSpectrum R, R
546
555
.trans (.symm <| .quotientBot R) <| .trans
547
556
(Ideal.quotEquivOfEq (nilradical_eq_zero R).symm) (quotNilradicalEquivPi R)
548
557
558
+ theorem isSemisimpleRing_of_isReduced [IsReduced R] : IsSemisimpleRing R :=
559
+ (equivPi R).symm.isSemisimpleRing
560
+
561
+ end CommRing
562
+
563
+ section Ring
564
+
565
+ variable {R : Type *} [Ring R] [IsArtinianRing R]
566
+
567
+ theorem isSemisimpleRing_iff_jacobson : IsSemisimpleRing R ↔ Ring.jacobson R = ⊥ :=
568
+ IsArtinian.isSemisimpleModule_iff_jacobson R R
569
+
570
+ instance : IsSemiprimaryRing R where
571
+ isSemisimpleRing :=
572
+ IsArtinianRing.isSemisimpleRing_iff_jacobson.mpr (Ring.jacobson_quotient_jacobson R)
573
+ isNilpotent := by
574
+ let Jac := Ring.jacobson R
575
+ have ⟨n, hn⟩ := IsArtinian.monotone_stabilizes ⟨(Jac ^ ·), @Ideal.pow_le_pow_right _ _ _⟩
576
+ have hn : Jac * Jac ^ n = Jac ^ n := by
577
+ rw [← Ideal.IsTwoSided.pow_succ]; exact (hn _ n.le_succ).symm
578
+ use n; by_contra ne
579
+ have ⟨N, ⟨eq, ne⟩, min⟩ := wellFounded_lt.has_min {N | Jac * N = N ∧ N ≠ ⊥} ⟨_, hn, ne⟩
580
+ have : Jac ^ n * N = N := n.rec (by rw [Jac.pow_zero, N.one_mul])
581
+ fun n hn ↦ by rwa [Jac.pow_succ, mul_assoc, eq]
582
+ let I x := Submodule.map (LinearMap.toSpanSingleton R R x) (Jac ^ n)
583
+ have hI x : I x ≤ Ideal.span {x} := by
584
+ rw [Ideal.span, LinearMap.span_singleton_eq_range]; exact LinearMap.map_le_range
585
+ have ⟨x, hx⟩ : ∃ x ∈ N, I x ≠ ⊥ := by
586
+ contrapose! ne
587
+ rw [← this, ← le_bot_iff, Ideal.mul_le]
588
+ refine fun ri hi rn hn ↦ ?_
589
+ rw [← ne rn hn]
590
+ exact ⟨ri, hi, rfl⟩
591
+ rw [← Ideal.span_singleton_le_iff_mem] at hx
592
+ have : I x = N := by
593
+ refine ((hI x).trans hx.1 ).eq_of_not_lt (min _ ⟨?_, hx.2 ⟩)
594
+ rw [← smul_eq_mul, ← Submodule.map_smul'', smul_eq_mul, hn]
595
+ have : Ideal.span {x} = N := le_antisymm hx.1 (this.symm.trans_le <| hI x)
596
+ refine (this ▸ ne) ((Submodule.fg_span <| Set.finite_singleton x).eq_bot_of_le_jacobson_smul ?_)
597
+ rw [← Ideal.span, this, smul_eq_mul, eq]
598
+
599
+ end Ring
600
+
549
601
end IsArtinianRing
0 commit comments