|
| 1 | +/- |
| 2 | +Copyright (c) 2026 Justus Springer. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Justus Springer |
| 5 | +-/ |
| 6 | +module |
| 7 | + |
| 8 | +public import Mathlib.CategoryTheory.ObjectProperty.FiniteProducts |
| 9 | +public import Mathlib.CategoryTheory.ObjectProperty.Kernels |
| 10 | + |
| 11 | +/-! |
| 12 | +# Subcategories of abelian categories |
| 13 | +
|
| 14 | +Let `C` be an abelian category. Given `P : ObjectProperty C` which contains |
| 15 | +zero, is closed under kernels, cokernels and finite products, we show that the |
| 16 | +full subcategory defined by `P` is abelian. |
| 17 | +
|
| 18 | +-/ |
| 19 | + |
| 20 | +@[expose] public section |
| 21 | + |
| 22 | +namespace CategoryTheory.ObjectProperty |
| 23 | + |
| 24 | +open Limits |
| 25 | + |
| 26 | +variable {C : Type*} [Category* C] (P : ObjectProperty C) |
| 27 | + |
| 28 | +lemma preservesMonomorphisms_ι_of_isNormalEpiCategory [HasZeroMorphisms C] [HasFiniteCoproducts C] |
| 29 | + [HasKernels C] [HasCokernels C] [IsNormalEpiCategory C] [HasZeroObject C] [P.ContainsZero] |
| 30 | + [P.IsClosedUnderKernels] : P.ι.PreservesMonomorphisms := |
| 31 | + have := P.preservesKernels_ι |
| 32 | + NormalEpiCategory.preservesMonomorphisms_of_preservesKernels P.ι |
| 33 | + |
| 34 | +instance [Abelian C] [P.ContainsZero] [P.IsClosedUnderKernels] [P.IsClosedUnderCokernels] : |
| 35 | + IsNormalMonoCategory P.FullSubcategory where |
| 36 | + normalMonoOfMono {X Y} f := |
| 37 | + have := P.preservesMonomorphisms_ι_of_isNormalEpiCategory |
| 38 | + ⟨{Z := .mk _ (P.prop_cokernel f.hom X.property Y.property) |
| 39 | + g := P.homMk (cokernel.π f.hom) |
| 40 | + w := by cat_disch |
| 41 | + isLimit := isLimitOfReflects P.ι ((KernelFork.isLimitMapConeEquiv _ _).symm |
| 42 | + (Abelian.monoIsKernelOfCokernel _ (cokernelIsCokernel (P.ι.map f)) :))}⟩ |
| 43 | + |
| 44 | +lemma preservesEpimorphisms_ι_of_isNormalMonoCategory [HasZeroMorphisms C] [HasFiniteProducts C] |
| 45 | + [HasKernels C] [HasCokernels C] [IsNormalMonoCategory C] [HasZeroObject C] [P.ContainsZero] |
| 46 | + [P.IsClosedUnderCokernels] : P.ι.PreservesEpimorphisms := |
| 47 | + have := P.preservesCokernels_ι |
| 48 | + NormalMonoCategory.preservesEpimorphisms_of_preservesCokernels P.ι |
| 49 | + |
| 50 | +instance [Abelian C] [P.ContainsZero] [P.IsClosedUnderKernels] [P.IsClosedUnderCokernels] : |
| 51 | + IsNormalEpiCategory P.FullSubcategory where |
| 52 | + normalEpiOfEpi {X Y} f := |
| 53 | + have := P.preservesEpimorphisms_ι_of_isNormalMonoCategory |
| 54 | + ⟨{W := .mk _ (P.prop_kernel f.hom X.property Y.property) |
| 55 | + g := P.homMk (kernel.ι f.hom) |
| 56 | + w := by cat_disch |
| 57 | + isColimit := isColimitOfReflects P.ι ((CokernelCofork.isColimitMapCoconeEquiv _ _).symm |
| 58 | + (Abelian.epiIsCokernelOfKernel _ (kernelIsKernel (P.ι.map f)) :))}⟩ |
| 59 | + |
| 60 | +instance [Abelian C] [P.ContainsZero] [P.IsClosedUnderKernels] [P.IsClosedUnderCokernels] |
| 61 | + [P.IsClosedUnderFiniteProducts] : Abelian P.FullSubcategory where |
| 62 | + |
| 63 | +end CategoryTheory.ObjectProperty |
0 commit comments