File: Mathlib/CategoryTheory/Limits/Shapes/NormalMono/Equalizers.lean

full_name: CategoryTheory.NormalMonoCategory.pullback_of_mono
code: /-- The pullback of two monomorphisms exists. -/
@[irreducible, nolint defLemma] -- Porting note: changed to irreducible and a def
def pullback_of_mono {X Y Z : C} (a : X ⟶ Z) (b : Y ⟶ Z) [Mono a] [Mono b] :
    HasLimit (cospan a b) 
goal: CategoryTheory.Limits.HasLimit (CategoryTheory.Limits.cospan a b)

full_name: _private.Mathlib.CategoryTheory.Limits.Shapes.NormalMono.Equalizers.0.CategoryTheory.NormalMonoCategory.P
code: /-- The pullback of `(𝟙 X, f)` and `(𝟙 X, g)` -/
private abbrev P {X Y : C} (f g : X ⟶ Y) [Mono (prod.lift (𝟙 X) f)] [Mono (prod.lift (𝟙 X) g)] :
    C 
goal: C

full_name: CategoryTheory.NormalMonoCategory.hasLimit_parallelPair
code: /-- The equalizer of `f` and `g` exists. -/
 -- Porting note: changed to irreducible def since irreducible_def was breaking things
@[irreducible, nolint defLemma]
def hasLimit_parallelPair {X Y : C} (f g : X ⟶ Y) : HasLimit (parallelPair f g) 
goal: CategoryTheory.Limits.HasLimit (CategoryTheory.Limits.parallelPair f g)

full_name: CategoryTheory.NormalMonoCategory.hasEqualizers
code: /-- A `NormalMonoCategory` category with finite products and kernels has all equalizers. -/
instance (priority := 100) hasEqualizers : HasEqualizers C 
goal: CategoryTheory.Limits.HasEqualizers C

full_name: CategoryTheory.NormalMonoCategory.epi_of_zero_cokernel
code: /-- If a zero morphism is a cokernel of `f`, then `f` is an epimorphism. -/
theorem epi_of_zero_cokernel {X Y : C} (f : X ⟶ Y) (Z : C)
    (l : IsColimit (CokernelCofork.ofπ (0 : Y ⟶ Z) (show f ≫ 0 = 0 by simp))) : Epi f 
goal: CategoryTheory.Epi f

full_name: CategoryTheory.NormalMonoCategory.epi_of_zero_cancel
code: /-- If `f ≫ g = 0` implies `g = 0` for all `g`, then `g` is a monomorphism. -/
theorem epi_of_zero_cancel {X Y : C} (f : X ⟶ Y)
    (hf : ∀ (Z : C) (g : Y ⟶ Z) (_ : f ≫ g = 0), g = 0) : Epi f 
goal: CategoryTheory.Epi f

full_name: CategoryTheory.NormalEpiCategory.pushout_of_epi
code: /-- The pushout of two epimorphisms exists. -/
@[irreducible, nolint defLemma] -- Porting note: made a def and re-added irreducible
def pushout_of_epi {X Y Z : C} (a : X ⟶ Y) (b : X ⟶ Z) [Epi a] [Epi b] :
    HasColimit (span a b) 
goal: CategoryTheory.Limits.HasColimit (CategoryTheory.Limits.span a b)

full_name: _private.Mathlib.CategoryTheory.Limits.Shapes.NormalMono.Equalizers.0.CategoryTheory.NormalEpiCategory.Q
code: /-- The pushout of `(𝟙 Y, f)` and `(𝟙 Y, g)`. -/
private abbrev Q {X Y : C} (f g : X ⟶ Y) [Epi (coprod.desc (𝟙 Y) f)] [Epi (coprod.desc (𝟙 Y) g)] :
    C 
goal: C

full_name: CategoryTheory.NormalEpiCategory.hasColimit_parallelPair
code: /-- The coequalizer of `f` and `g` exists. -/
@[irreducible, nolint defLemma] -- Porting note: changed to def and restored irreducible
def hasColimit_parallelPair {X Y : C} (f g : X ⟶ Y) : HasColimit (parallelPair f g) 
goal: CategoryTheory.Limits.HasColimit (CategoryTheory.Limits.parallelPair f g)

full_name: CategoryTheory.NormalEpiCategory.hasCoequalizers
code: /-- A `NormalEpiCategory` category with finite coproducts and cokernels has all coequalizers. -/
instance (priority := 100) hasCoequalizers : HasCoequalizers C 
goal: CategoryTheory.Limits.HasCoequalizers C

full_name: CategoryTheory.NormalEpiCategory.mono_of_zero_kernel
code: /-- If a zero morphism is a kernel of `f`, then `f` is a monomorphism. -/
theorem mono_of_zero_kernel {X Y : C} (f : X ⟶ Y) (Z : C)
    (l : IsLimit (KernelFork.ofι (0 : Z ⟶ X) (show 0 ≫ f = 0 by simp))) : Mono f 
goal: CategoryTheory.Mono f

full_name: CategoryTheory.NormalEpiCategory.mono_of_cancel_zero
code: /-- If `g ≫ f = 0` implies `g = 0` for all `g`, then `f` is a monomorphism. -/
theorem mono_of_cancel_zero {X Y : C} (f : X ⟶ Y)
    (hf : ∀ (Z : C) (g : Z ⟶ X) (_ : g ≫ f = 0), g = 0) : Mono f 
goal: CategoryTheory.Mono f