Zulip Chat Archive
Stream: Is there code for X?
Topic: Wedderburn-Artin theorem
Stepan Nesterov (Jan 12 2026 at 16:13):
The following is the mathlib proof of the Wedderburn-Artin theorem in mathlib:
/-- The **Wedderburn–Artin Theorem**: an Artinian simple ring is isomorphic to a matrix
ring over the opposite of the endomorphism ring of its simple module. -/
theorem exists_ringEquiv_matrix_end_mulOpposite :
∃ (n : ℕ) (_ : NeZero n) (I : Ideal R) (_ : IsSimpleModule R I),
Nonempty (R ≃+* Matrix (Fin n) (Fin n) (Module.End R I)ᵐᵒᵖ) := by
have ⟨n, hn, S, hS, ⟨e⟩⟩ := (isIsotypic R R).linearEquiv_fun
refine ⟨n, hn, S, hS, ⟨.trans (.opOp R) <| .trans (.op ?_) (.symm .mopMatrix)⟩⟩
exact .trans (.moduleEndSelf R) <| .trans e.conjRingEquiv (endVecRingEquivMatrixEnd ..)
Is there a way to extract the fact that specifically the map , which sends to , is an isomorphism? The reason I need this is to prove that a group representation is absolutely irreducible iff its base change to the algebraic closure is absolutely irreducible. The informal proof runs as follows: if is an irreducible representation of over , then by Schur's lemma we have . Then the natural map is surjective by the claim above. Hence for any field extension of , the map is surjective, hence is irreducible.
Junyan Xu (Jan 12 2026 at 17:11):
Your outline seems to be missing the MulOpposite.
I think absolute irreducibility is equivalent to being bijective?
Stepan Nesterov (Jan 12 2026 at 17:12):
Junyan Xu said:
Your outline seems to be missing the MulOpposite.
I think absolute irreducibility is equivalent to being bijective?
Yes and the harder direction boils down to exactly this explicit form of Artin-Wedderburn
Stepan Nesterov (Jan 12 2026 at 17:17):
Oh wait I think I see what you're saying.
An alternative proof could be "If endomorphisms of the representation are more than , then after base change to , there is an idempotent endomorphism, hence, a subrepresentation"
Junyan Xu (Jan 12 2026 at 17:20):
Lorenz invokes the Jacobson density theorem (should be easy from mathlib):
image.png
image.png
Kevin Buzzard (Jan 12 2026 at 17:20):
You can't extract the fact that you state from the theorem/proof as it stands (the proof is forgotten), but the proof is giving you an explicit isomorphism so you could rewrite everything as a def and get some kind of map, e.g.
noncomputable def AW_n : ℕ := (isIsotypic R R).linearEquiv_fun.choose
instance AW_n_neZero : NeZero (AW_n R) := (isIsotypic R R).linearEquiv_fun.choose_spec.1
etc etc; you'll finish with
def AW_map : R ≃+* Matrix (Fin (AW_n R)) (Fin (AW_n R) (Module.End R (AW_I R)ᵐᵒᵖ := <what it says in the proof>
Junyan Xu (Jan 12 2026 at 17:22):
The proof of Wedderburn Artin goes like: is isomorphic to as -modules, so as rings.
Stepan Nesterov (Jan 12 2026 at 17:23):
Junyan Xu said:
Lorenz invokes the Jacobson density theorem (should be easy from mathlib):
image.png
image.png
If is a semisimple -module this implies the map is surjective -- that's exactly my question
Stepan Nesterov (Jan 12 2026 at 17:24):
I tried searching "Jacobson density" on leansearch.net, but didn't find anything
Junyan Xu (Jan 12 2026 at 17:26):
You just need to formalize this:
image.png
Stepan Nesterov (Jan 12 2026 at 17:28):
Junyan Xu said:
The proof of Wedderburn Artin goes like: is isomorphic to as -modules, so as rings.
Are you saying that in the mathlib proof of Artin-Wedderburn, the isomorphism constructed is not to ?
Kevin Buzzard (Jan 12 2026 at 17:30):
For sure it's .trans (.opOp R) <| .trans (.op (.trans (.moduleEndSelf R) <| .trans e.conjRingEquiv (endVecRingEquivMatrixEnd ..))) (.symm .mopMatrix)
Kevin Buzzard (Jan 12 2026 at 17:35):
and that seems to be what Junyan wrote. Note that the isomorphism is unspecified; it's coming from (isIsotypic R R).linearEquiv_fun which again is just an existence statement.
Junyan Xu (Jan 12 2026 at 17:35):
(deleted)
Junyan Xu (Jan 12 2026 at 17:44):
Stepan Nesterov said:
Are you saying that in the mathlib proof of Artin-Wedderburn, the isomorphism constructed is not to ?
acts on by right multiplication (the first ring isomorphism), and this action doesn't fix the copies of s.
There is no map in general if is noncommutative, since wouldn't be -linear.
Stepan Nesterov (Jan 12 2026 at 17:45):
Sorry I'm saying nonsense
I think I mean
Stepan Nesterov (Jan 12 2026 at 17:45):
Where is a right -module
Junyan Xu (Jan 12 2026 at 17:52):
So this is the setting of Jacobson density instead; the proof of Wedderburn Artin doesn't involve such nested End.
Stepan Nesterov (Jan 12 2026 at 17:52):
And is Jacobson density not in mathlib?
Junyan Xu (Jan 12 2026 at 17:54):
Junyan Xu (Jan 12 2026 at 17:55):
Would you like me to do it? I'm probably more familiar with the IsSemisimpleModule API.
Stepan Nesterov (Jan 12 2026 at 17:57):
Can you give me an idiomatic statement and I can try to prove what I want with sorried Jacobson density?
Stepan Nesterov (Jan 12 2026 at 17:59):
(I might even say that the proof of Jacobson density is knownin1980s if I'm inside FLT :thinking: )
Junyan Xu (Jan 12 2026 at 18:16):
import Mathlib.RingTheory.SimpleModule.Basic
open Module (End)
variable {A M : Type*} [Ring A] [AddCommGroup M] [Module A M] [IsSemisimpleModule A M]
theorem jacobson_density (f : End (End A M) M) (s : Finset M) :
∃ a : A, ∀ m ∈ s, f m = a • m := by
sorry
theorem Module.Finite.jacobson_density [Module.Finite (End A M) M] :
Function.Surjective (Module.toModuleEnd A (S := End A M) M) := by
sorry
Stepan Nesterov (Jan 12 2026 at 18:17):
Junyan Xu said:
import Mathlib.RingTheory.SimpleModule.Basic open Module (End) variable {A M : Type*} [Ring A] [AddCommGroup M] [Module A M] [IsSemisimpleModule A M] theorem jacobson_density (s : Finset M) : letI C := End A M ∀ f : End C M, ∃ a : A, ∀ m ∈ s, f m = a • m := by sorry theorem Module.Finite.jacobson_density [Module.Finite (End A M) M] : Function.Surjective (Module.toModuleEnd A (S := End A M) M) := by sorry
Ok thank you so much!
Junyan Xu (Jan 12 2026 at 18:19):
changed the statement a bit; it's wasteful to introduce a name for C if it's only used once :)
Junyan Xu (Jan 13 2026 at 01:12):
Junyan Xu (Jan 13 2026 at 01:12):
Correction: Module.toModuleEnd A (S := End A M) M above should be Module.toModuleEnd (End A M) (S := A) M (the original statement is solved by id_surjective)
Last updated: Feb 28 2026 at 14:05 UTC