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

Commit 7af0885

Browse files
committed
feat(category_theory/epi_mono): preserves/reflects properties for epi/split_epi (#15857)
This PR shows that split epi/mono are preserved by any functor, and reflected by fully faithful functors. Moreover, `iff` lemmas are obtained for functors which both preserve and reflect epimorphisms (resp. monomorphisms). Co-authored-by: Joël Riou <37772949+joelriou@users.noreply.github.com>
1 parent dd6b84e commit 7af0885

File tree

2 files changed

+62
-0
lines changed

2 files changed

+62
-0
lines changed

src/category_theory/epi_mono.lean

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ such that `f ≫ retraction f = 𝟙 X`.
3838
3939
Every split monomorphism is a monomorphism.
4040
-/
41+
@[ext]
4142
class split_mono {X Y : C} (f : X ⟶ Y) :=
4243
(retraction : Y ⟶ X)
4344
(id' : f ≫ retraction = 𝟙 X . obviously)
@@ -49,6 +50,7 @@ such that `section_ f ≫ f = 𝟙 Y`.
4950
5051
Every split epimorphism is an epimorphism.
5152
-/
53+
@[ext]
5254
class split_epi {X Y : C} (f : X ⟶ Y) :=
5355
(section_ : Y ⟶ X)
5456
(id' : section_ ≫ f = 𝟙 Y . obviously)

src/category_theory/functor/epi_mono.lean

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,4 +167,64 @@ instance reflects_epimorphisms_of_faithful (F : C ⥤ D) [faithful F] : reflects
167167
{ reflects := λ X Y f hf, ⟨λ Z g h hgh, by exactI F.map_injective ((cancel_epi (F.map f)).1
168168
(by rw [← F.map_comp, hgh, F.map_comp]))⟩ }
169169

170+
section
171+
172+
variables (F : C ⥤ D) {X Y : C} (f : X ⟶ Y)
173+
174+
/-- Split epimorphisms are preserved by the application of any functor. -/
175+
@[simps]
176+
def map_split_epi (s : split_epi f) : split_epi (F.map f) :=
177+
⟨F.map s.section_, by { rw [← F.map_comp, ← F.map_id], congr' 1, apply split_epi.id, }⟩
178+
179+
/-- Split monomorphisms are preserved by the application of any functor. -/
180+
@[simps]
181+
def map_split_mono (s : split_mono f) : split_mono (F.map f) :=
182+
⟨F.map s.retraction, by { rw [← F.map_comp, ← F.map_id], congr' 1, apply split_mono.id, }⟩
183+
184+
/-- If `F` is a fully faithful functor, split epimorphisms are preserved and reflected by `F`. -/
185+
def split_epi_equiv [full F] [faithful F] : split_epi f ≃ split_epi (F.map f) :=
186+
{ to_fun := F.map_split_epi f,
187+
inv_fun := λ s, begin
188+
refine ⟨F.preimage s.section_, _⟩,
189+
apply F.map_injective,
190+
simp only [map_comp, image_preimage, map_id],
191+
apply split_epi.id,
192+
end,
193+
left_inv := by tidy,
194+
right_inv := by tidy, }
195+
196+
/-- If `F` is a fully faithful functor, split monomorphisms are preserved and reflected by `F`. -/
197+
def split_mono_equiv [full F] [faithful F] : split_mono f ≃ split_mono (F.map f) :=
198+
{ to_fun := F.map_split_mono f,
199+
inv_fun := λ s, begin
200+
refine ⟨F.preimage s.retraction, _⟩,
201+
apply F.map_injective,
202+
simp only [map_comp, image_preimage, map_id],
203+
apply split_mono.id,
204+
end,
205+
left_inv := by tidy,
206+
right_inv := by tidy, }
207+
208+
@[simp]
209+
lemma epi_map_iff_epi [hF₁ : preserves_epimorphisms F] [hF₂ : reflects_epimorphisms F] :
210+
epi (F.map f) ↔ epi f :=
211+
begin
212+
split,
213+
{ exact F.epi_of_epi_map, },
214+
{ introI h,
215+
exact F.map_epi f, },
216+
end
217+
218+
@[simp]
219+
lemma mono_map_iff_mono [hF₁ : preserves_monomorphisms F] [hF₂ : reflects_monomorphisms F] :
220+
mono (F.map f) ↔ mono f :=
221+
begin
222+
split,
223+
{ exact F.mono_of_mono_map, },
224+
{ introI h,
225+
exact F.map_mono f, },
226+
end
227+
228+
end
229+
170230
end category_theory.functor

0 commit comments

Comments
 (0)