File: Mathlib/RingTheory/SimpleModule.lean

full_name: IsSimpleModule
code: /-- A module is simple when it has only two submodules, `⊥` and `⊤`. -/
abbrev IsSimpleModule 
goal: Prop

full_name: IsSemisimpleModule
code: /-- A module is semisimple when every submodule has a complement, or equivalently, the module
  is a direct sum of simple modules. -/
abbrev IsSemisimpleModule 
goal: Prop

full_name: IsSemisimpleRing
code: /-- A ring is semisimple if it is semisimple as a module over itself. -/
abbrev IsSemisimpleRing 
goal: Prop

full_name: RingEquiv.isSemisimpleRing
code: theorem RingEquiv.isSemisimpleRing (e : R ≃+* S) [IsSemisimpleRing R] : IsSemisimpleRing S 
goal: IsSemisimpleRing S

full_name: IsSimpleModule.nontrivial
code: theorem IsSimpleModule.nontrivial [IsSimpleModule R M] : Nontrivial M 
goal: Nontrivial M

full_name: LinearMap.isSimpleModule_iff_of_bijective
code: theorem LinearMap.isSimpleModule_iff_of_bijective [Module S N] {σ : R →+* S} [RingHomSurjective σ]
    (l : M →ₛₗ[σ] N) (hl : Function.Bijective l) : IsSimpleModule R M ↔ IsSimpleModule S N 
goal: IsSimpleModule R M ↔ IsSimpleModule S N

full_name: IsSimpleModule.congr
code: theorem IsSimpleModule.congr (l : M ≃ₗ[R] N) [IsSimpleModule R N] : IsSimpleModule R M 
goal: IsSimpleModule R M

full_name: isSimpleModule_iff_isAtom
code: theorem isSimpleModule_iff_isAtom : IsSimpleModule R m ↔ IsAtom m 
goal: IsSimpleModule R ↥m ↔ IsAtom m

full_name: isSimpleModule_iff_isCoatom
code: theorem isSimpleModule_iff_isCoatom : IsSimpleModule R (M ⧸ m) ↔ IsCoatom m 
goal: IsSimpleModule R (M ⧸ m) ↔ IsCoatom m

full_name: covBy_iff_quot_is_simple
code: theorem covBy_iff_quot_is_simple {A B : Submodule R M} (hAB : A ≤ B) :
    A ⋖ B ↔ IsSimpleModule R (B ⧸ Submodule.comap B.subtype A) 
goal: A ⋖ B ↔ IsSimpleModule R (↥B ⧸ Submodule.comap B.subtype A)

full_name: IsSimpleModule.isAtom
code: @[simp]
theorem isAtom [IsSimpleModule R m] : IsAtom m 
goal: IsAtom m

full_name: IsSimpleModule.span_singleton_eq_top
code: theorem span_singleton_eq_top {m : M} (hm : m ≠ 0) : Submodule.span R {m} = ⊤ 
goal: Submodule.span R {m} = ⊤

full_name: IsSimpleModule.instIsPrincipal
code: instance (S : Submodule R M) : S.IsPrincipal 
goal: S.IsPrincipal

full_name: IsSimpleModule.toSpanSingleton_surjective
code: theorem toSpanSingleton_surjective {m : M} (hm : m ≠ 0) :
    Function.Surjective (toSpanSingleton R M m) 
goal: Function.Surjective ⇑(LinearMap.toSpanSingleton R M m)

full_name: IsSimpleModule.ker_toSpanSingleton_isMaximal
code: theorem ker_toSpanSingleton_isMaximal {m : M} (hm : m ≠ 0) :
    Ideal.IsMaximal (ker (toSpanSingleton R M m)) 
goal: Ideal.IsMaximal (LinearMap.ker (LinearMap.toSpanSingleton R M m))

full_name: isSimpleModule_iff_quot_maximal
code: /-- A module is simple iff it's isomorphic to the quotient of the ring by a maximal left ideal
(not necessarily unique if the ring is not commutative). -/
theorem isSimpleModule_iff_quot_maximal :
    IsSimpleModule R M ↔ ∃ I : Ideal R, I.IsMaximal ∧ Nonempty (M ≃ₗ[R] R ⧸ I) 
goal: IsSimpleModule R M ↔ ∃ I, I.IsMaximal ∧ Nonempty (M ≃ₗ[R] R ⧸ I)

full_name: IsSimpleModule.annihilator_isMaximal
code: /-- In general, the annihilator of a simple module is called a primitive ideal, and it is
always a two-sided prime ideal, but mathlib's `Ideal.IsPrime` is not the correct definition
for noncommutative rings. -/
theorem IsSimpleModule.annihilator_isMaximal {R} [CommRing R] [Module R M]
    [simple : IsSimpleModule R M] : (Module.annihilator R M).IsMaximal 
goal: (Module.annihilator R M).IsMaximal

full_name: isSimpleModule_iff_toSpanSingleton_surjective
code: theorem isSimpleModule_iff_toSpanSingleton_surjective : IsSimpleModule R M ↔
    Nontrivial M ∧ ∀ x : M, x ≠ 0 → Function.Surjective (LinearMap.toSpanSingleton R M x) 
goal: IsSimpleModule R M ↔ Nontrivial M ∧ ∀ (x : M), x ≠ 0 → Function.Surjective ⇑(LinearMap.toSpanSingleton R M x)

full_name: isSimpleModule_self_iff_isUnit
code: /-- A ring is a simple module over itself iff it is a division ring. -/
theorem isSimpleModule_self_iff_isUnit :
    IsSimpleModule R R ↔ Nontrivial R ∧ ∀ x : R, x ≠ 0 → IsUnit x 
goal: IsSimpleModule R R ↔ Nontrivial R ∧ ∀ (x : R), x ≠ 0 → IsUnit x

full_name: isSimpleModule_iff_finrank_eq_one
code: theorem isSimpleModule_iff_finrank_eq_one {R} [DivisionRing R] [Module R M] :
    IsSimpleModule R M ↔ FiniteDimensional.finrank R M = 1 
goal: IsSimpleModule R M ↔ FiniteDimensional.finrank R M = 1

full_name: IsSemisimpleModule.of_sSup_simples_eq_top
code: theorem IsSemisimpleModule.of_sSup_simples_eq_top
    (h : sSup { m : Submodule R M | IsSimpleModule R m } = ⊤) : IsSemisimpleModule R M 
goal: IsSemisimpleModule R M

full_name: IsSemisimpleModule.eq_bot_or_exists_simple_le
code: theorem eq_bot_or_exists_simple_le (N : Submodule R M) : N = ⊥ ∨ ∃ m ≤ N, IsSimpleModule R m 
goal: N = ⊥ ∨ ∃ m ≤ N, IsSimpleModule R ↥m

full_name: IsSemisimpleModule.sSup_simples_le
code: theorem sSup_simples_le (N : Submodule R M) :
    sSup { m : Submodule R M | IsSimpleModule R m ∧ m ≤ N } = N 
goal: sSup {m | IsSimpleModule R ↥m ∧ m ≤ N} = N

full_name: IsSemisimpleModule.exists_simple_submodule
code: theorem exists_simple_submodule [Nontrivial M] : ∃ m : Submodule R M, IsSimpleModule R m 
goal: ∃ m, IsSimpleModule R ↥m

full_name: IsSemisimpleModule.sSup_simples_eq_top
code: theorem sSup_simples_eq_top : sSup { m : Submodule R M | IsSimpleModule R m } = ⊤ 
goal: sSup {m | IsSimpleModule R ↥m} = ⊤

full_name: IsSemisimpleModule.annihilator_isRadical
code: /-- The annihilator of a semisimple module over a commutative ring is a radical ideal. -/
theorem annihilator_isRadical (R) [CommRing R] [Module R M] [IsSemisimpleModule R M] :
    (Module.annihilator R M).IsRadical 
goal: (Module.annihilator R M).IsRadical

full_name: IsSemisimpleModule.submodule
code: instance submodule {m : Submodule R M} : IsSemisimpleModule R m 
goal: IsSemisimpleModule R ↥m

full_name: IsSemisimpleModule.congr
code: theorem congr [IsSemisimpleModule R N] (e : M ≃ₗ[R] N) : IsSemisimpleModule R M 
goal: IsSemisimpleModule R M

full_name: IsSemisimpleModule.quotient
code: instance quotient : IsSemisimpleModule R (M ⧸ m) 
goal: IsSemisimpleModule R (M ⧸ m)

full_name: IsSemisimpleModule.range
code: protected theorem range (f : M →ₗ[R] N) : IsSemisimpleModule R (range f) 
goal: IsSemisimpleModule R ↥(LinearMap.range f)

full_name: LinearMap.isSemisimpleModule_iff_of_bijective
code: theorem _root_.LinearMap.isSemisimpleModule_iff_of_bijective (hl : Function.Bijective l) :
    IsSemisimpleModule R M ↔ IsSemisimpleModule S N 
goal: IsSemisimpleModule R M ↔ IsSemisimpleModule S N

full_name: sSup_simples_eq_top_iff_isSemisimpleModule
code: /-- A module is semisimple iff it is generated by its simple submodules. -/
theorem sSup_simples_eq_top_iff_isSemisimpleModule :
    sSup { m : Submodule R M | IsSimpleModule R m } = ⊤ ↔ IsSemisimpleModule R M 
goal: sSup {m | IsSimpleModule R ↥m} = ⊤ ↔ IsSemisimpleModule R M

full_name: isSemisimpleModule_of_isSemisimpleModule_submodule
code: /-- A module generated by semisimple submodules is itself semisimple. -/
lemma isSemisimpleModule_of_isSemisimpleModule_submodule {s : Set ι} {p : ι → Submodule R M}
    (hp : ∀ i ∈ s, IsSemisimpleModule R (p i)) (hp' : ⨆ i ∈ s, p i = ⊤) :
    IsSemisimpleModule R M 
goal: IsSemisimpleModule R M

full_name: isSemisimpleModule_biSup_of_isSemisimpleModule_submodule
code: lemma isSemisimpleModule_biSup_of_isSemisimpleModule_submodule {s : Set ι} {p : ι → Submodule R M}
    (hp : ∀ i ∈ s, IsSemisimpleModule R (p i)) :
    IsSemisimpleModule R ↥(⨆ i ∈ s, p i) 
goal: IsSemisimpleModule R ↥(⨆ i ∈ s, p i)

full_name: isSemisimpleModule_of_isSemisimpleModule_submodule'
code: lemma isSemisimpleModule_of_isSemisimpleModule_submodule' {p : ι → Submodule R M}
    (hp : ∀ i, IsSemisimpleModule R (p i)) (hp' : ⨆ i, p i = ⊤) :
    IsSemisimpleModule R M 
goal: IsSemisimpleModule R M

full_name: IsSemisimpleModule.sup
code: theorem IsSemisimpleModule.sup {p q : Submodule R M}
    (_ : IsSemisimpleModule R p) (_ : IsSemisimpleModule R q) :
    IsSemisimpleModule R ↥(p ⊔ q) 
goal: IsSemisimpleModule R ↥p → IsSemisimpleModule R ↥q → IsSemisimpleModule R ↥(p ⊔ q)

full_name: IsSemisimpleRing.isSemisimpleModule
code: instance IsSemisimpleRing.isSemisimpleModule [IsSemisimpleRing R] : IsSemisimpleModule R M 
goal: IsSemisimpleModule R M

full_name: IsSemisimpleRing.isCoatomic_submodule
code: instance IsSemisimpleRing.isCoatomic_submodule [IsSemisimpleRing R] : IsCoatomic (Submodule R M) 
goal: IsCoatomic (Submodule R M)

full_name: instIsSemisimpleRingForallOfFinite
code: /-- A finite product of semisimple rings is semisimple. -/
instance {ι} [Finite ι] (R : ι → Type*) [∀ i, Ring (R i)] [∀ i, IsSemisimpleRing (R i)] :
    IsSemisimpleRing (∀ i, R i) 
goal: IsSemisimpleRing ((i : ι) → R i)

full_name: instIsSemisimpleRingProd
code: /-- A binary product of semisimple rings is semisimple. -/
instance [hR : IsSemisimpleRing R] [hS : IsSemisimpleRing S] : IsSemisimpleRing (R × S) 
goal: IsSemisimpleRing (R × S)

full_name: RingHom.isSemisimpleRing_of_surjective
code: theorem RingHom.isSemisimpleRing_of_surjective (f : R →+* S) (hf : Function.Surjective f)
    [IsSemisimpleRing R] : IsSemisimpleRing S 
goal: IsSemisimpleRing S

full_name: IsSemisimpleRing.ideal_eq_span_idempotent
code: theorem IsSemisimpleRing.ideal_eq_span_idempotent [IsSemisimpleRing R] (I : Ideal R) :
    ∃ e : R, IsIdempotentElem e ∧ I = .span {e} 
goal: ∃ e, IsIdempotentElem e ∧ I = Ideal.span {e}

full_name: instIsPrincipalIdealRingOfIsSemisimpleRing
code: instance [IsSemisimpleRing R] : IsPrincipalIdealRing R 
goal: IsPrincipalIdealRing R

full_name: LinearMap.injective_or_eq_zero
code: theorem injective_or_eq_zero [IsSimpleModule R M] (f : M →ₗ[R] N) :
    Function.Injective f ∨ f = 0 
goal: Function.Injective ⇑f ∨ f = 0

full_name: LinearMap.injective_of_ne_zero
code: theorem injective_of_ne_zero [IsSimpleModule R M] {f : M →ₗ[R] N} (h : f ≠ 0) :
    Function.Injective f 
goal: Function.Injective ⇑f

full_name: LinearMap.surjective_or_eq_zero
code: theorem surjective_or_eq_zero [IsSimpleModule R N] (f : M →ₗ[R] N) :
    Function.Surjective f ∨ f = 0 
goal: Function.Surjective ⇑f ∨ f = 0

full_name: LinearMap.surjective_of_ne_zero
code: theorem surjective_of_ne_zero [IsSimpleModule R N] {f : M →ₗ[R] N} (h : f ≠ 0) :
    Function.Surjective f 
goal: Function.Surjective ⇑f

full_name: LinearMap.bijective_or_eq_zero
code: /-- **Schur's Lemma** for linear maps between (possibly distinct) simple modules -/
theorem bijective_or_eq_zero [IsSimpleModule R M] [IsSimpleModule R N] (f : M →ₗ[R] N) :
    Function.Bijective f ∨ f = 0 
goal: Function.Bijective ⇑f ∨ f = 0

full_name: LinearMap.bijective_of_ne_zero
code: theorem bijective_of_ne_zero [IsSimpleModule R M] [IsSimpleModule R N] {f : M →ₗ[R] N} (h : f ≠ 0) :
    Function.Bijective f 
goal: Function.Bijective ⇑f

full_name: LinearMap.isCoatom_ker_of_surjective
code: theorem isCoatom_ker_of_surjective [IsSimpleModule R N] {f : M →ₗ[R] N}
    (hf : Function.Surjective f) : IsCoatom (LinearMap.ker f) 
goal: IsCoatom (LinearMap.ker f)

full_name: Module.End.divisionRing
code: /-- Schur's Lemma makes the endomorphism ring of a simple module a division ring. -/
noncomputable instance _root_.Module.End.divisionRing
    [DecidableEq (Module.End R M)] [IsSimpleModule R M] : DivisionRing (Module.End R M) 
goal: DivisionRing (Module.End R M)

full_name: JordanHolderModule.Iso
code: /-- An isomorphism `X₂ / X₁ ∩ X₂ ≅ Y₂ / Y₁ ∩ Y₂` of modules for pairs
`(X₁,X₂) (Y₁,Y₂) : Submodule R M` -/
def Iso (X Y : Submodule R M × Submodule R M) : Prop 
goal: Prop

full_name: JordanHolderModule.iso_symm
code: theorem iso_symm {X Y : Submodule R M × Submodule R M} : Iso X Y → Iso Y X 
goal: JordanHolderModule.Iso X Y → JordanHolderModule.Iso Y X

full_name: JordanHolderModule.iso_trans
code: theorem iso_trans {X Y Z : Submodule R M × Submodule R M} : Iso X Y → Iso Y Z → Iso X Z 
goal: JordanHolderModule.Iso X Y → JordanHolderModule.Iso Y Z → JordanHolderModule.Iso X Z

full_name: JordanHolderModule.second_iso
code: @[nolint unusedArguments]
theorem second_iso {X Y : Submodule R M} (_ : X ⋖ X ⊔ Y) :
    Iso (X,X ⊔ Y) (X ⊓ Y,Y) 
goal: X ⋖ X ⊔ Y → JordanHolderModule.Iso (X, X ⊔ Y) (X ⊓ Y, Y)

full_name: JordanHolderModule.instJordanHolderLattice
code: instance instJordanHolderLattice : JordanHolderLattice (Submodule R M) 
goal: JordanHolderLattice (Submodule R M)