File: Mathlib/CategoryTheory/Preadditive/Schur.lean

full_name: CategoryTheory.mono_of_nonzero_from_simple
code: theorem mono_of_nonzero_from_simple [HasKernels C] {X Y : C} [Simple X] {f : X ⟶ Y} (w : f ≠ 0) :
    Mono f 
goal: CategoryTheory.Mono f

full_name: CategoryTheory.isIso_of_hom_simple
code: /-- The part of **Schur's lemma** that holds in any preadditive category with kernels:
that a nonzero morphism between simple objects is an isomorphism.
-/
theorem isIso_of_hom_simple
    [HasKernels C] {X Y : C} [Simple X] [Simple Y] {f : X ⟶ Y} (w : f ≠ 0) : IsIso f 
goal: CategoryTheory.IsIso f

full_name: CategoryTheory.isIso_iff_nonzero
code: /-- As a corollary of Schur's lemma for preadditive categories,
any morphism between simple objects is (exclusively) either an isomorphism or zero.
-/
theorem isIso_iff_nonzero [HasKernels C] {X Y : C} [Simple X] [Simple Y] (f : X ⟶ Y) :
    IsIso f ↔ f ≠ 0 
goal: CategoryTheory.IsIso f ↔ f ≠ 0

full_name: CategoryTheory.instDivisionRingEndOfHasKernelsOfSimple
code: /-- In any preadditive category with kernels,
the endomorphisms of a simple object form a division ring. -/
noncomputable instance [HasKernels C] {X : C} [Simple X] : DivisionRing (End X) 
goal: DivisionRing (CategoryTheory.End X)

full_name: CategoryTheory.finrank_hom_simple_simple_eq_zero_of_not_iso
code: /-- Part of **Schur's lemma** for `𝕜`-linear categories:
the hom space between two non-isomorphic simple objects is 0-dimensional.
-/
theorem finrank_hom_simple_simple_eq_zero_of_not_iso [HasKernels C] [Linear 𝕜 C] {X Y : C}
    [Simple X] [Simple Y] (h : (X ≅ Y) → False) : finrank 𝕜 (X ⟶ Y) = 0 
goal: FiniteDimensional.finrank 𝕜 (X ⟶ Y) = 0

full_name: CategoryTheory.finrank_endomorphism_eq_one
code: /-- An auxiliary lemma for Schur's lemma.

If `X ⟶ X` is finite dimensional, and every nonzero endomorphism is invertible,
then `X ⟶ X` is 1-dimensional.
-/
theorem finrank_endomorphism_eq_one {X : C} (isIso_iff_nonzero : ∀ f : X ⟶ X, IsIso f ↔ f ≠ 0)
    [I : FiniteDimensional 𝕜 (X ⟶ X)] : finrank 𝕜 (X ⟶ X) = 1 
goal: FiniteDimensional.finrank 𝕜 (X ⟶ X) = 1

full_name: CategoryTheory.finrank_endomorphism_simple_eq_one
code: /-- **Schur's lemma** for endomorphisms in `𝕜`-linear categories.
-/
theorem finrank_endomorphism_simple_eq_one (X : C) [Simple X] [FiniteDimensional 𝕜 (X ⟶ X)] :
    finrank 𝕜 (X ⟶ X) = 1 
goal: FiniteDimensional.finrank 𝕜 (X ⟶ X) = 1

full_name: CategoryTheory.endomorphism_simple_eq_smul_id
code: theorem endomorphism_simple_eq_smul_id {X : C} [Simple X] [FiniteDimensional 𝕜 (X ⟶ X)]
    (f : X ⟶ X) : ∃ c : 𝕜, c • 𝟙 X = f 
goal: ∃ c, c • CategoryTheory.CategoryStruct.id X = f

full_name: CategoryTheory.fieldEndOfFiniteDimensional
code: /-- Endomorphisms of a simple object form a field if they are finite dimensional.
This can't be an instance as `𝕜` would be undetermined.
-/
noncomputable def fieldEndOfFiniteDimensional (X : C) [Simple X] [I : FiniteDimensional 𝕜 (X ⟶ X)] :
    Field (End X) 
goal: Field (CategoryTheory.End X)

full_name: CategoryTheory.finrank_hom_simple_simple_le_one
code: /-- **Schur's lemma** for `𝕜`-linear categories:
if hom spaces are finite dimensional, then the hom space between simples is at most 1-dimensional.

See `finrank_hom_simple_simple_eq_one_iff` and `finrank_hom_simple_simple_eq_zero_iff` below
for the refinements when we know whether or not the simples are isomorphic.
-/
theorem finrank_hom_simple_simple_le_one (X Y : C) [FiniteDimensional 𝕜 (X ⟶ X)] [Simple X]
    [Simple Y] : finrank 𝕜 (X ⟶ Y) ≤ 1 
goal: FiniteDimensional.finrank 𝕜 (X ⟶ Y) ≤ 1

full_name: CategoryTheory.finrank_hom_simple_simple_eq_one_iff
code: theorem finrank_hom_simple_simple_eq_one_iff (X Y : C) [FiniteDimensional 𝕜 (X ⟶ X)]
    [FiniteDimensional 𝕜 (X ⟶ Y)] [Simple X] [Simple Y] :
    finrank 𝕜 (X ⟶ Y) = 1 ↔ Nonempty (X ≅ Y) 
goal: FiniteDimensional.finrank 𝕜 (X ⟶ Y) = 1 ↔ Nonempty (X ≅ Y)

full_name: CategoryTheory.finrank_hom_simple_simple_eq_zero_iff
code: theorem finrank_hom_simple_simple_eq_zero_iff (X Y : C) [FiniteDimensional 𝕜 (X ⟶ X)]
    [FiniteDimensional 𝕜 (X ⟶ Y)] [Simple X] [Simple Y] :
    finrank 𝕜 (X ⟶ Y) = 0 ↔ IsEmpty (X ≅ Y) 
goal: FiniteDimensional.finrank 𝕜 (X ⟶ Y) = 0 ↔ IsEmpty (X ≅ Y)

full_name: CategoryTheory.finrank_hom_simple_simple
code: theorem finrank_hom_simple_simple (X Y : C) [∀ X Y : C, FiniteDimensional 𝕜 (X ⟶ Y)] [Simple X]
    [Simple Y] : finrank 𝕜 (X ⟶ Y) = if Nonempty (X ≅ Y) then 1 else 0 
goal: FiniteDimensional.finrank 𝕜 (X ⟶ Y) = if Nonempty (X ≅ Y) then 1 else 0