Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 1d67b07

Browse files
committed
feat(category_theory): cases in which (co)equalizers are split monos (epis) (#12498)
1 parent b4572d1 commit 1d67b07

File tree

1 file changed

+58
-1
lines changed

1 file changed

+58
-1
lines changed

src/category_theory/limits/shapes/equalizers.lean

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,14 @@ lemma cofork.is_colimit.hom_ext {s : cofork f g} (hs : is_colimit s) {W : C} {k
303303
(h : cofork.π s ≫ k = cofork.π s ≫ l) : k = l :=
304304
hs.hom_ext $ cofork.coequalizer_ext _ h
305305

306+
@[simp] lemma fork.is_limit.lift_of_ι_ι {s : fork f g} (hs : is_limit s) {W : C}
307+
{k : W ⟶ X} (hk : k ≫ f = k ≫ g) : hs.lift (fork.of_ι k hk) ≫ s.ι = k :=
308+
hs.fac _ _
309+
310+
@[simp] lemma cofork.is_colimit.π_desc_of_π {s : cofork f g} (hs : is_colimit s) {W : C}
311+
{k : Y ⟶ W} (hk : f ≫ k = g ≫ k) : s.π ≫ hs.desc (cofork.of_π k hk) = k :=
312+
hs.fac _ _
313+
306314
/-- If `s` is a limit fork over `f` and `g`, then a morphism `k : W ⟶ X` satisfying
307315
`k ≫ f = k ≫ g` induces a morphism `l : W ⟶ s.X` such that `l ≫ fork.ι s = k`. -/
308316
def fork.is_limit.lift' {s : fork f g} (hs : is_limit s) {W : C} (k : W ⟶ X) (h : k ≫ f = k ≫ g) :
@@ -894,7 +902,6 @@ Here we build the cone, and show in `split_mono_equalizes` that it is a limit co
894902
def cone_of_split_mono : cone (parallel_pair (𝟙 Y) (retraction f ≫ f)) :=
895903
fork.of_ι f (by simp)
896904

897-
898905
/--
899906
A split mono `f` equalizes `(retraction f ≫ f)` and `(𝟙 Y)`.
900907
-/
@@ -906,6 +913,31 @@ fork.is_limit.mk' _ $ λ s,
906913

907914
end
908915

916+
/-- We show that the converse to `split_mono_equalizes` is true:
917+
Whenever `f` equalizes `(r ≫ f)` and `(𝟙 Y)`, then `r` is a retraction of `f`. -/
918+
def split_mono_of_equalizer {X Y : C} {f : X ⟶ Y} {r : Y ⟶ X} (hr : f ≫ r ≫ f = f)
919+
(h : is_limit (fork.of_ι f (hr.trans (category.comp_id _).symm : f ≫ r ≫ f = f ≫ 𝟙 Y))) :
920+
split_mono f :=
921+
{ retraction := r,
922+
id' := fork.is_limit.hom_ext h
923+
((category.assoc _ _ _).trans $ hr.trans (category.id_comp _).symm) }
924+
925+
/-- An equalizer of an idempotent morphism and the identity is split mono. -/
926+
def split_mono_of_idempotent_of_is_limit_fork {X : C} {f : X ⟶ X} (hf : f ≫ f = f)
927+
{c : fork f (𝟙 X)} (i : is_limit c) : split_mono c.ι :=
928+
{ retraction := i.lift (fork.of_ι f (by simp [hf])),
929+
id' :=
930+
begin
931+
letI := mono_of_is_limit_parallel_pair i,
932+
rw [← cancel_mono_id c.ι, category.assoc, fork.is_limit.lift_of_ι_ι, c.condition],
933+
exact category.comp_id c.ι
934+
end }
935+
936+
/-- The equalizer of an idempotent morphism and the identity is split mono. -/
937+
def split_mono_of_idempotent_equalizer {X : C} {f : X ⟶ X} (hf : f ≫ f = f)
938+
[has_equalizer f (𝟙 X)] : split_mono (equalizer.ι f (𝟙 X)) :=
939+
split_mono_of_idempotent_of_is_limit_fork _ hf (limit.is_limit _)
940+
909941
section
910942
-- In this section we show that a split epi `f` coequalizes `(f ≫ section_ f)` and `(𝟙 X)`.
911943
variables {C} [split_epi f]
@@ -930,4 +962,29 @@ cofork.is_colimit.mk' _ $ λ s,
930962

931963
end
932964

965+
/-- We show that the converse to `split_epi_equalizes` is true:
966+
Whenever `f` coequalizes `(f ≫ s)` and `(𝟙 X)`, then `s` is a section of `f`. -/
967+
def split_epi_of_coequalizer {X Y : C} {f : X ⟶ Y} {s : Y ⟶ X} (hs : f ≫ s ≫ f = f)
968+
(h : is_colimit (cofork.of_π f ((category.assoc _ _ _).trans $
969+
hs.trans (category.id_comp f).symm : (f ≫ s) ≫ f = 𝟙 X ≫ f))) :
970+
split_epi f :=
971+
{ section_ := s,
972+
id' := cofork.is_colimit.hom_ext h (hs.trans (category.comp_id _).symm) }
973+
974+
/-- A coequalizer of an idempotent morphism and the identity is split epi. -/
975+
def split_epi_of_idempotent_of_is_colimit_cofork {X : C} {f : X ⟶ X} (hf : f ≫ f = f)
976+
{c : cofork f (𝟙 X)} (i : is_colimit c) : split_epi c.π :=
977+
{ section_ := i.desc (cofork.of_π f (by simp [hf])),
978+
id' :=
979+
begin
980+
letI := epi_of_is_colimit_parallel_pair i,
981+
rw [← cancel_epi_id c.π, ← category.assoc, cofork.is_colimit.π_desc_of_π, c.condition],
982+
exact category.id_comp _,
983+
end }
984+
985+
/-- The coequalizer of an idempotent morphism and the identity is split epi. -/
986+
def split_epi_of_idempotent_coequalizer {X : C} {f : X ⟶ X} (hf : f ≫ f = f)
987+
[has_coequalizer f (𝟙 X)] : split_epi (coequalizer.π f (𝟙 X)) :=
988+
split_epi_of_idempotent_of_is_colimit_cofork _ hf (colimit.is_colimit _)
989+
933990
end category_theory.limits

0 commit comments

Comments
 (0)