@@ -3,9 +3,11 @@ Copyright (c) 2025 Junyan Xu. All rights reserved.
33Released under Apache 2.0 license as described in the file LICENSE.
44Authors: Junyan Xu
55-/
6+ import Mathlib.LinearAlgebra.FreeModule.Finite.Basic
67import Mathlib.RingTheory.FiniteLength
78import Mathlib.RingTheory.SimpleModule.Isotypic
89import Mathlib.RingTheory.SimpleRing.Congr
10+ import Mathlib.RingTheory.SimpleRing.Matrix
911
1012/-!
1113# Wedderburn–Artin Theorem
@@ -70,18 +72,18 @@ namespace IsSimpleRing
7072
7173variable (R) [IsSimpleRing R] [IsArtinianRing R]
7274
73- theorem isIsotypic : IsIsotypic R R :=
74- (isSimpleRing_isArtinianRing_iff.mp ⟨‹_›, ‹_›⟩).2 .1
75-
7675instance (priority := low) : IsSemisimpleRing R :=
7776 (isSimpleRing_isArtinianRing_iff.mp ⟨‹_›, ‹_›⟩).1
7877
78+ theorem isIsotypic (M) [AddCommGroup M] [Module R M] : IsIsotypic R M :=
79+ (isSimpleRing_isArtinianRing_iff.mp ⟨‹_›, ‹_›⟩).2 .1 .of_self M
80+
7981/-- The **Wedderburn–Artin Theorem** : an Artinian simple ring is isomorphic to a matrix
8082ring over the opposite of the endomorphism ring of its simple module. -/
8183theorem exists_ringEquiv_matrix_end_mulOpposite :
8284 ∃ (n : ℕ) (_ : NeZero n) (I : Ideal R) (_ : IsSimpleModule R I),
8385 Nonempty (R ≃+* Matrix (Fin n) (Fin n) (Module.End R I)ᵐᵒᵖ) := by
84- have ⟨n, hn, S, hS, ⟨e⟩⟩ := (isIsotypic R).linearEquiv_fun
86+ have ⟨n, hn, S, hS, ⟨e⟩⟩ := (isIsotypic R R ).linearEquiv_fun
8587 refine ⟨n, hn, S, hS, ⟨.trans (.opOp R) <| .trans (.op ?_) (.symm .mopMatrix)⟩⟩
8688 exact .trans (.moduleEndSelf R) <| .trans e.conjRingEquiv (endVecRingEquivMatrixEnd ..)
8789
@@ -98,7 +100,7 @@ to a matrix algebra over the opposite of the endomorphism algebra of its simple
98100theorem exists_algEquiv_matrix_end_mulOpposite :
99101 ∃ (n : ℕ) (_ : NeZero n) (I : Ideal R) (_ : IsSimpleModule R I),
100102 Nonempty (R ≃ₐ[R₀] Matrix (Fin n) (Fin n) (Module.End R I)ᵐᵒᵖ) := by
101- have ⟨n, hn, S, hS, ⟨e⟩⟩ := (isIsotypic R).linearEquiv_fun
103+ have ⟨n, hn, S, hS, ⟨e⟩⟩ := (isIsotypic R R ).linearEquiv_fun
102104 refine ⟨n, hn, S, hS, ⟨.trans (.opOp R₀ R) <| .trans (.op ?_) (.symm .mopMatrix)⟩⟩
103105 exact .trans (.moduleEndSelf R₀) <| .trans (e.algConj R₀) (endVecAlgEquivMatrixEnd ..)
104106
@@ -126,10 +128,11 @@ namespace IsSemisimpleModule
126128
127129open Module (End)
128130
129- variable (R) (M : Type *) [AddCommGroup M] [Module R₀ M] [Module R M] [IsScalarTower R₀ R M]
131+ universe v
132+ variable (R) (M : Type v) [AddCommGroup M] [Module R₀ M] [Module R M] [IsScalarTower R₀ R M]
130133 [IsSemisimpleModule R M] [Module.Finite R M]
131134
132- theorem exists_end_algEquiv :
135+ theorem exists_end_algEquiv_pi_matrix_end :
133136 ∃ (n : ℕ) (S : Fin n → Submodule R M) (d : Fin n → ℕ),
134137 (∀ i, IsSimpleModule R (S i)) ∧ (∀ i, NeZero (d i)) ∧
135138 Nonempty (End R M ≃ₐ[R₀] Π i, Matrix (Fin (d i)) (Fin (d i)) (End R (S i))) := by
@@ -139,11 +142,33 @@ theorem exists_end_algEquiv :
139142 (.piCongrRight fun c ↦ ((e c).some.algConj R₀).trans (endVecAlgEquivMatrixEnd ..)) <|
140143 (.piCongrLeft' R₀ _ (Finite.equivFin _))⟩⟩
141144
142- theorem exists_end_ringEquiv :
145+ theorem exists_end_ringEquiv_pi_matrix_end :
143146 ∃ (n : ℕ) (S : Fin n → Submodule R M) (d : Fin n → ℕ),
144147 (∀ i, IsSimpleModule R (S i)) ∧ (∀ i, NeZero (d i)) ∧
145148 Nonempty (End R M ≃+* Π i, Matrix (Fin (d i)) (Fin (d i)) (End R (S i))) :=
146- have ⟨n, S, d, hS, hd, ⟨e⟩⟩ := exists_end_algEquiv ℕ R M; ⟨n, S, d, hS, hd, ⟨e⟩⟩
149+ have ⟨n, S, d, hS, hd, ⟨e⟩⟩ := exists_end_algEquiv_pi_matrix_end ℕ R M; ⟨n, S, d, hS, hd, ⟨e⟩⟩
150+
151+ @[deprecated (since := "2025-11-16")] alias exists_end_algEquiv := exists_end_algEquiv_pi_matrix_end
152+ @[deprecated (since := "2025-11-16")]
153+ alias exists_end_ringEquiv := exists_end_ringEquiv_pi_matrix_end
154+
155+ -- TODO: can also require D be in `Type u`, since every simple module is the quotient by an ideal.
156+ theorem exists_end_algEquiv_pi_matrix_divisionRing :
157+ ∃ (n : ℕ) (D : Fin n → Type v) (d : Fin n → ℕ) (_ : ∀ i, DivisionRing (D i))
158+ (_ : ∀ i, Algebra R₀ (D i)), (∀ i, NeZero (d i)) ∧
159+ Nonempty (End R M ≃ₐ[R₀] Π i, Matrix (Fin (d i)) (Fin (d i)) (D i)) := by
160+ have ⟨n, S, d, _, hd, ⟨e⟩⟩ := exists_end_algEquiv_pi_matrix_end R₀ R M
161+ classical exact ⟨n, _, d, inferInstance, inferInstance, hd, ⟨e⟩⟩
162+
163+ theorem exists_end_ringEquiv_pi_matrix_divisionRing :
164+ ∃ (n : ℕ) (D : Fin n → Type v) (d : Fin n → ℕ) (_ : ∀ i, DivisionRing (D i)),
165+ (∀ i, NeZero (d i)) ∧ Nonempty (End R M ≃+* Π i, Matrix (Fin (d i)) (Fin (d i)) (D i)) :=
166+ have ⟨n, D, d, _, _, hd, ⟨e⟩⟩ := exists_end_algEquiv_pi_matrix_divisionRing ℕ R M
167+ ⟨n, D, d, _, hd, ⟨e⟩⟩
168+
169+ theorem _root_.IsSemisimpleRing.moduleEnd : IsSemisimpleRing (Module.End R M) :=
170+ have ⟨_, _, _, _, _, ⟨e⟩⟩ := exists_end_ringEquiv_pi_matrix_divisionRing R M
171+ e.symm.isSemisimpleRing
147172
148173end IsSemisimpleModule
149174
@@ -157,7 +182,7 @@ theorem exists_algEquiv_pi_matrix_end_mulOpposite :
157182 ∃ (n : ℕ) (S : Fin n → Ideal R) (d : Fin n → ℕ),
158183 (∀ i, IsSimpleModule R (S i)) ∧ (∀ i, NeZero (d i)) ∧
159184 Nonempty (R ≃ₐ[R₀] Π i, Matrix (Fin (d i)) (Fin (d i)) (Module.End R (S i))ᵐᵒᵖ) :=
160- have ⟨n, S, d, hS, hd, ⟨e⟩⟩ := IsSemisimpleModule.exists_end_algEquiv R₀ R R
185+ have ⟨n, S, d, hS, hd, ⟨e⟩⟩ := IsSemisimpleModule.exists_end_algEquiv_pi_matrix_end R₀ R R
161186 ⟨n, S, d, hS, hd, ⟨.trans (.opOp R₀ R) <| .trans (.op <| .trans (.moduleEndSelf R₀) e) <|
162187 .trans (.piMulOpposite _ _) (.piCongrRight fun _ ↦ .symm .mopMatrix)⟩⟩
163188
@@ -200,4 +225,34 @@ theorem exists_ringEquiv_pi_matrix_divisionRing :
200225 have ⟨n, D, d, _, _, hd, ⟨e⟩⟩ := exists_algEquiv_pi_matrix_divisionRing ℕ R
201226 ⟨n, D, d, _, hd, ⟨e⟩⟩
202227
228+ instance (n) [Fintype n] [DecidableEq n] : IsSemisimpleRing (Matrix n n R) :=
229+ (isEmpty_or_nonempty n).elim (fun _ ↦ inferInstance) fun _ ↦
230+ have ⟨_, _, _, _, _, ⟨e⟩⟩ := exists_ringEquiv_pi_matrix_divisionRing R
231+ (e.mapMatrix (m := n).trans Matrix.piRingEquiv).symm.isSemisimpleRing
232+
233+ instance [IsSemisimpleRing R] : IsSemisimpleRing Rᵐᵒᵖ :=
234+ have ⟨_, _, _, _, _, ⟨e⟩⟩ := exists_ringEquiv_pi_matrix_divisionRing R
235+ ((e.op.trans (.piMulOpposite _)).trans (.piCongrRight fun _ ↦ .symm .mopMatrix)).symm
236+ |>.isSemisimpleRing
237+
203238end IsSemisimpleRing
239+
240+ theorem isSemisimpleRing_mulOpposite_iff : IsSemisimpleRing Rᵐᵒᵖ ↔ IsSemisimpleRing R :=
241+ ⟨fun _ ↦ (RingEquiv.opOp R).symm.isSemisimpleRing, fun _ ↦ inferInstance⟩
242+
243+ /-- The existence part of the Artin–Wedderburn theorem. -/
244+ theorem isSemisimpleRing_iff_pi_matrix_divisionRing : IsSemisimpleRing R ↔
245+ ∃ (n : ℕ) (D : Fin n → Type u) (d : Fin n → ℕ) (_ : Π i, DivisionRing (D i)),
246+ Nonempty (R ≃+* Π i, Matrix (Fin (d i)) (Fin (d i)) (D i)) where
247+ mp _ := have ⟨n, D, d, _, _, e⟩ := IsSemisimpleRing.exists_ringEquiv_pi_matrix_divisionRing R
248+ ⟨n, D, d, _, e⟩
249+ mpr := fun ⟨_, _, _, _, ⟨e⟩⟩ ↦ e.symm.isSemisimpleRing
250+
251+ -- Need left-right symmetry of Jacobson radical
252+ proof_wanted IsSemiprimaryRing.mulOpposite [IsSemiprimaryRing R] : IsSemiprimaryRing Rᵐᵒᵖ
253+
254+ proof_wanted isSemiprimaryRing_mulOpposite_iff : IsSemiprimaryRing Rᵐᵒᵖ ↔ IsSemiprimaryRing R
255+
256+ -- A left Artinian ring is right Noetherian iff it is right Artinian. To be left as an `example`.
257+ proof_wanted IsArtinianRing.isNoetherianRing_iff_isArtinianRing_mulOpposite
258+ [IsArtinianRing R] : IsNoetherianRing Rᵐᵒᵖ ↔ IsArtinianRing Rᵐᵒᵖ
0 commit comments