@@ -5,12 +5,10 @@ Authors: Kim Morrison, Bhavik Mehta
55-/
66module
77
8+ public import Mathlib.CategoryTheory.EffectiveEpi.Basic
89public import Mathlib.CategoryTheory.Limits.Shapes.Pullback.HasPullback
9- public import Mathlib.CategoryTheory.Limits.Shapes.StrongEpi
1010public import Mathlib.CategoryTheory.Limits.Shapes.Equalizers
11- public import Mathlib.CategoryTheory.MorphismProperty.Basic
1211public import Mathlib.CategoryTheory.MorphismProperty.Composition
13- public import Mathlib.Lean.Expr.Basic
1412
1513/-!
1614# Definitions and basic properties of regular monomorphisms and epimorphisms.
@@ -27,8 +25,12 @@ and constructions
2725* `RegularMono f → Mono f`
2826 as well as the dual definitions/constructions for regular epimorphisms.
2927
30- Additionally, we give the construction
31- * `RegularEpi f ⟶ StrongEpi f`.
28+ Additionally, we give the constructions
29+ * `RegularEpi f → EffectiveEpi f`, from which it can be deduced that regular epimorphisms are
30+ strong.
31+ * `regularEpiOfEffectiveEpi`: constructs a `RegularEpi f` instance from `EffectiveEpi f` and
32+ `HasPullback f f`.
33+
3234
3335 We also define classes `IsRegularMonoCategory` and `IsRegularEpiCategory` for categories in which
3436every monomorphism or epimorphism is regular, and deduce that these categories are
@@ -311,6 +313,49 @@ noncomputable def regularEpiOfKernelPair {B X : C} (f : X ⟶ B) [HasPullback f
311313 w := pullback.condition
312314 isColimit := hc
313315
316+ /-- The data of an `EffectiveEpi` structure on a `RegularEpi`. -/
317+ def effectiveEpiStructOfRegularEpi {B X : C} (f : X ⟶ B) [RegularEpi f] :
318+ EffectiveEpiStruct f where
319+ desc _ h := Cofork.IsColimit.desc RegularEpi.isColimit _ (h _ _ RegularEpi.w)
320+ fac _ _ := Cofork.IsColimit.π_desc' RegularEpi.isColimit _ _
321+ uniq _ _ _ hg := Cofork.IsColimit.hom_ext RegularEpi.isColimit (hg.trans
322+ (Cofork.IsColimit.π_desc' _ _ _).symm)
323+
324+ instance {B X : C} (f : X ⟶ B) [RegularEpi f] : EffectiveEpi f :=
325+ ⟨⟨effectiveEpiStructOfRegularEpi f⟩⟩
326+
327+ /-- A morphism which is a coequalizer for its kernel pair is an effective epi. -/
328+ theorem effectiveEpi_of_kernelPair {B X : C} (f : X ⟶ B) [HasPullback f f]
329+ (hc : IsColimit (Cofork.ofπ f pullback.condition)) : EffectiveEpi f :=
330+ let _ := regularEpiOfKernelPair f hc
331+ inferInstance
332+
333+ @[deprecated (since := "2025-11-20")] alias effectiveEpiOfKernelPair := effectiveEpi_of_kernelPair
334+
335+ /-- An effective epi which has a kernel pair is a regular epi. -/
336+ noncomputable instance regularEpiOfEffectiveEpi {B X : C} (f : X ⟶ B) [HasPullback f f]
337+ [EffectiveEpi f] : RegularEpi f where
338+ W := pullback f f
339+ left := pullback.fst f f
340+ right := pullback.snd f f
341+ w := pullback.condition
342+ isColimit := {
343+ desc := fun s ↦ EffectiveEpi.desc f (s.ι.app WalkingParallelPair.one) fun g₁ g₂ hg ↦ (by
344+ simp only [Cofork.app_one_eq_π]
345+ rw [← pullback.lift_snd g₁ g₂ hg, Category.assoc, ← Cofork.app_zero_eq_comp_π_right]
346+ simp)
347+ fac := by
348+ intro s j
349+ have := EffectiveEpi.fac f (s.ι.app WalkingParallelPair.one) fun g₁ g₂ hg ↦ (by
350+ simp only [Cofork.app_one_eq_π]
351+ rw [← pullback.lift_snd g₁ g₂ hg, Category.assoc, ← Cofork.app_zero_eq_comp_π_right]
352+ simp)
353+ simp only [Functor.const_obj_obj, Cofork.app_one_eq_π] at this
354+ cases j with
355+ | zero => simp [this]
356+ | one => simp [this]
357+ uniq := fun _ _ h ↦ EffectiveEpi.uniq f _ _ _ (h WalkingParallelPair.one) }
358+
314359/-- Every split epimorphism is a regular epimorphism. -/
315360instance (priority := 100 ) RegularEpi.ofSplitEpi (f : X ⟶ Y) [IsSplitEpi f] : RegularEpi f where
316361 W := X
@@ -364,19 +409,9 @@ def regularOfIsPushoutFstOfRegular {P Q R S : C} {f : P ⟶ Q} {g : P ⟶ R} {h
364409 RegularEpi k :=
365410 regularOfIsPushoutSndOfRegular comm.symm (PushoutCocone.flipIsColimit t)
366411
412+ @[deprecated "No replacement" (since := "2025-11-20")]
367413instance (priority := 100 ) strongEpi_of_regularEpi (f : X ⟶ Y) [RegularEpi f] : StrongEpi f :=
368- StrongEpi.mk'
369- (by
370- intro A B z hz u v sq
371- have : (RegularEpi.left : RegularEpi.W f ⟶ X) ≫ u = RegularEpi.right ≫ u := by
372- apply (cancel_mono z).1
373- simp only [Category.assoc, sq.w, RegularEpi.w_assoc]
374- obtain ⟨t, ht⟩ := RegularEpi.desc' f u this
375- exact
376- CommSq.HasLift.mk'
377- ⟨t, ht,
378- (cancel_epi f).1
379- (by simp only [← Category.assoc, ht, ← sq.w])⟩)
414+ inferInstance
380415
381416/-- A regular epimorphism is an isomorphism if it is a monomorphism. -/
382417theorem isIso_of_regularEpi_of_mono (f : X ⟶ Y) [RegularEpi f] [Mono f] : IsIso f :=
0 commit comments