The concrete (co)kernels in the category of modules are (co)kernels in the categorical sense. #
The kernel cone induced by the concrete kernel.
Equations
- ModuleCat.kernelCone f = CategoryTheory.Limits.KernelFork.ofι (ModuleCat.asHom (LinearMap.ker f).subtype) ⋯
Instances For
The kernel of a linear map is a kernel in the categorical sense.
Equations
- ModuleCat.kernelIsLimit f = CategoryTheory.Limits.Fork.IsLimit.mk (ModuleCat.kernelCone f) (fun (s : CategoryTheory.Limits.Fork f 0) => LinearMap.codRestrict (LinearMap.ker f) s.ι ⋯) ⋯ ⋯
Instances For
def
ModuleCat.cokernelIsColimit
{R : Type u}
[Ring R]
{M : ModuleCat R}
{N : ModuleCat R}
(f : M ⟶ N)
:
The projection onto the quotient is a cokernel in the categorical sense.
Equations
- ModuleCat.cokernelIsColimit f = CategoryTheory.Limits.Cofork.IsColimit.mk (ModuleCat.cokernelCocone f) (fun (s : CategoryTheory.Limits.Cofork f 0) => (LinearMap.range f).liftQ s.π ⋯) ⋯ ⋯
Instances For
The category of R-modules has kernels, given by the inclusion of the kernel submodule.
The category of R-modules has cokernels, given by the projection onto the quotient.
noncomputable def
ModuleCat.kernelIsoKer
{R : Type u}
[Ring R]
{G : ModuleCat R}
{H : ModuleCat R}
(f : G ⟶ H)
:
The categorical kernel of a morphism in ModuleCat
agrees with the usual module-theoretical kernel.
Equations
- ModuleCat.kernelIsoKer f = CategoryTheory.Limits.limit.isoLimitCone { cone := ModuleCat.kernelCone f, isLimit := ModuleCat.kernelIsLimit f }
Instances For
theorem
ModuleCat.kernelIsoKer_inv_kernel_ι_apply
{R : Type u}
[Ring R]
{G : ModuleCat R}
{H : ModuleCat R}
(f : G ⟶ H)
(x : (CategoryTheory.forget (ModuleCat R)).obj (ModuleCat.of R ↥(LinearMap.ker f)))
:
(CategoryTheory.Limits.kernel.ι f) ((ModuleCat.kernelIsoKer f).inv x) = (LinearMap.ker f).subtype x
@[simp]
theorem
ModuleCat.kernelIsoKer_inv_kernel_ι
{R : Type u}
[Ring R]
{G : ModuleCat R}
{H : ModuleCat R}
(f : G ⟶ H)
:
CategoryTheory.CategoryStruct.comp (ModuleCat.kernelIsoKer f).inv (CategoryTheory.Limits.kernel.ι f) = (LinearMap.ker f).subtype
theorem
ModuleCat.kernelIsoKer_hom_ker_subtype_apply
{R : Type u}
[Ring R]
{G : ModuleCat R}
{H : ModuleCat R}
(f : G ⟶ H)
(x : (CategoryTheory.forget (ModuleCat R)).obj (CategoryTheory.Limits.kernel f))
:
(LinearMap.ker f).subtype ((ModuleCat.kernelIsoKer f).hom x) = (CategoryTheory.Limits.kernel.ι f) x
@[simp]
theorem
ModuleCat.kernelIsoKer_hom_ker_subtype
{R : Type u}
[Ring R]
{G : ModuleCat R}
{H : ModuleCat R}
(f : G ⟶ H)
:
CategoryTheory.CategoryStruct.comp (ModuleCat.kernelIsoKer f).hom (LinearMap.ker f).subtype = CategoryTheory.Limits.kernel.ι f
noncomputable def
ModuleCat.cokernelIsoRangeQuotient
{R : Type u}
[Ring R]
{G : ModuleCat R}
{H : ModuleCat R}
(f : G ⟶ H)
:
CategoryTheory.Limits.cokernel f ≅ ModuleCat.of R (↑H ⧸ LinearMap.range f)
The categorical cokernel of a morphism in ModuleCat
agrees with the usual module-theoretical quotient.
Equations
- ModuleCat.cokernelIsoRangeQuotient f = CategoryTheory.Limits.colimit.isoColimitCocone { cocone := ModuleCat.cokernelCocone f, isColimit := ModuleCat.cokernelIsColimit f }
Instances For
theorem
ModuleCat.cokernel_π_cokernelIsoRangeQuotient_hom_apply
{R : Type u}
[Ring R]
{G : ModuleCat R}
{H : ModuleCat R}
(f : G ⟶ H)
(x : (CategoryTheory.forget (ModuleCat R)).obj H)
:
(ModuleCat.cokernelIsoRangeQuotient f).hom ((CategoryTheory.Limits.cokernel.π f) x) = (LinearMap.range f).mkQ x
theorem
ModuleCat.range_mkQ_cokernelIsoRangeQuotient_inv_apply
{R : Type u}
[Ring R]
{G : ModuleCat R}
{H : ModuleCat R}
(f : G ⟶ H)
(x : (CategoryTheory.forget (ModuleCat R)).obj H)
:
(ModuleCat.cokernelIsoRangeQuotient f).inv ((ModuleCat.asHomLeft (LinearMap.range f).mkQ) x) = (CategoryTheory.Limits.cokernel.π f) x