/-- Schur's lemma: a non-zero map between simple modules is bijective.
Hint: `IsSimpleOrder.eq_bot_or_eq_top (LinearMap.ker f)` splits into two cases; use
`LinearMap.ker_eq_bot` and `LinearMap.ker_eq_top`. Do the same for `LinearMap.range f` with
`LinearMap.range_eq_bot` and `LinearMap.range_eq_top`. -/
theorem schur {R M N : Type*} [Ring R] [AddCommGroup M] [Module R M] [AddCommGroup N]
[Module R N] [IsSimpleModule R M] [IsSimpleModule R N] (f : M →ₗ[R] N) (hf : f ≠ 0) :
Function.Bijective f := by
sorryShow the compiled solution
/-- **Schur's lemma.** A non-zero homomorphism between simple modules is bijective. (For
representations of `G` over `k`, take modules over the group algebra `k[G]`.) Human proof: the
kernel of `f` is a submodule of the simple module `M`, so it is `0` or `M`; it is not `M` because
`f ≠ 0`; so `f` is injective. The image is a submodule of the simple module `N`, so it is `0` or
`N`; it is not `0`; so `f` is surjective. -/
theorem schur {R M N : Type*} [Ring R] [AddCommGroup M] [Module R M] [AddCommGroup N]
[Module R N] [IsSimpleModule R M] [IsSimpleModule R N] (f : M →ₗ[R] N) (hf : f ≠ 0) :
Function.Bijective f := by
constructor
· rcases IsSimpleOrder.eq_bot_or_eq_top (LinearMap.ker f) with h | h
· exact LinearMap.ker_eq_bot.mp h
· exact absurd (LinearMap.ker_eq_top.mp h) hf
· rcases IsSimpleOrder.eq_bot_or_eq_top (LinearMap.range f) with h | h
· exact absurd (LinearMap.range_eq_bot.mp h) hf
· exact LinearMap.range_eq_top.mp hAxioms used: propext, Classical.choice, Quot.soundformal/Lumenary/RepresentationTheory.leanTry it in the Lean web editor