@@ -7,13 +7,13 @@ import category_theory.limits.shapes.equalizers
7
7
import category_theory.limits.preserves.basic
8
8
9
9
/-!
10
- # Preserving equalizers
10
+ # Preserving (co) equalizers
11
11
12
- Constructions to relate the notions of preserving equalizers and reflecting equalizers
13
- to concrete forks.
12
+ Constructions to relate the notions of preserving (co) equalizers and reflecting (co) equalizers
13
+ to concrete (co) forks.
14
14
15
15
In particular, we show that `equalizer_comparison G f` is an isomorphism iff `G` preserves
16
- the limit of `f`.
16
+ the limit of `f` as well as the dual .
17
17
-/
18
18
19
19
noncomputable theory
@@ -28,6 +28,7 @@ variables (G : C ⥤ D)
28
28
29
29
namespace category_theory.limits
30
30
31
+ section equalizers
31
32
variables {X Y Z : C} {f g : X ⟶ Y} {h : Z ⟶ X} (w : h ≫ f = h ≫ g)
32
33
33
34
/--
@@ -38,7 +39,7 @@ def is_limit_map_cone_fork_equiv :
38
39
is_limit (G.map_cone (fork.of_ι h w)) ≃
39
40
is_limit (fork.of_ι (G.map h) (by simp only [←G.map_comp, w]) : fork (G.map f) (G.map g)) :=
40
41
(is_limit.postcompose_hom_equiv (diagram_iso_parallel_pair _) _).symm.trans
41
- (is_limit.equiv_iso_limit (fork.ext (iso.refl _) (by simp [fork.ι_eq_app_zero] )))
42
+ (is_limit.equiv_iso_limit (fork.ext (iso.refl _) (by simp)))
42
43
43
44
/-- The property of preserving equalizers expressed in terms of forks. -/
44
45
def is_limit_fork_map_of_is_limit [preserves_limit (parallel_pair f g) G]
80
81
end
81
82
82
83
variables [preserves_limit (parallel_pair f g) G]
83
-
84
84
/--
85
85
If `G` preserves the equalizer of `(f,g)`, then the equalizer comparison map for `G` at `(f,g)` is
86
86
an isomorphism.
@@ -102,4 +102,83 @@ begin
102
102
apply_instance
103
103
end
104
104
105
+ end equalizers
106
+
107
+ section coequalizers
108
+
109
+ variables {X Y Z : C} {f g : X ⟶ Y} {h : Y ⟶ Z} (w : f ≫ h = g ≫ h)
110
+
111
+ /--
112
+ The map of a cofork is a colimit iff the cofork consisting of the mapped morphisms is a colimit.
113
+ This essentially lets us commute `cofork.of_π` with `functor.map_cocone`.
114
+ -/
115
+ def is_colimit_map_cocone_cofork_equiv :
116
+ is_colimit (G.map_cocone (cofork.of_π h w)) ≃
117
+ is_colimit (cofork.of_π (G.map h) (by simp only [←G.map_comp, w]) : cofork (G.map f) (G.map g)) :=
118
+ (is_colimit.precompose_inv_equiv (diagram_iso_parallel_pair _) _).symm.trans
119
+ (is_colimit.equiv_iso_colimit (cofork.ext (iso.refl _) (by { dsimp, simp })))
120
+
121
+ /-- The property of preserving coequalizers expressed in terms of coforks. -/
122
+ def is_colimit_cofork_map_of_is_colimit [preserves_colimit (parallel_pair f g) G]
123
+ (l : is_colimit (cofork.of_π h w)) :
124
+ is_colimit (cofork.of_π (G.map h) (by simp only [←G.map_comp, w]) : cofork (G.map f) (G.map g)) :=
125
+ is_colimit_map_cocone_cofork_equiv G w (preserves_colimit.preserves l)
126
+
127
+ /-- The property of reflecting coequalizers expressed in terms of coforks. -/
128
+ def is_colimit_of_is_colimit_cofork_map [reflects_colimit (parallel_pair f g) G]
129
+ (l : is_colimit (cofork.of_π (G.map h) (by simp only [←G.map_comp, w])
130
+ : cofork (G.map f) (G.map g))) :
131
+ is_colimit (cofork.of_π h w) :=
132
+ reflects_colimit.reflects ((is_colimit_map_cocone_cofork_equiv G w).symm l)
133
+
134
+ variables (f g) [has_coequalizer f g]
135
+
136
+ /--
137
+ If `G` preserves coequalizers and `C` has them, then the cofork constructed of the mapped morphisms
138
+ of a cofork is a colimit.
139
+ -/
140
+ def is_colimit_of_has_coequalizer_of_preserves_colimit
141
+ [preserves_colimit (parallel_pair f g) G] :
142
+ is_colimit (cofork.of_π (G.map (coequalizer.π f g)) _) :=
143
+ is_colimit_cofork_map_of_is_colimit G _ (coequalizer_is_coequalizer f g)
144
+
145
+ variables [has_coequalizer (G.map f) (G.map g)]
146
+
147
+ /--
148
+ If the coequalizer comparison map for `G` at `(f,g)` is an isomorphism, then `G` preserves the
149
+ coequalizer of `(f,g)`.
150
+ -/
151
+ def of_iso_comparison [i : is_iso (coequalizer_comparison f g G)] :
152
+ preserves_colimit (parallel_pair f g) G :=
153
+ begin
154
+ apply preserves_colimit_of_preserves_colimit_cocone (coequalizer_is_coequalizer f g),
155
+ apply (is_colimit_map_cocone_cofork_equiv _ _).symm _,
156
+ apply is_colimit.of_point_iso (colimit.is_colimit (parallel_pair (G.map f) (G.map g))),
157
+ apply i,
158
+ end
159
+
160
+ variables [preserves_colimit (parallel_pair f g) G]
161
+ /--
162
+ If `G` preserves the coequalizer of `(f,g)`, then the coequalizer comparison map for `G` at `(f,g)`
163
+ is an isomorphism.
164
+ -/
165
+ def preserves_coequalizer.iso :
166
+ coequalizer (G.map f) (G.map g) ≅ G.obj (coequalizer f g) :=
167
+ is_colimit.cocone_point_unique_up_to_iso
168
+ (colimit.is_colimit _)
169
+ (is_colimit_of_has_coequalizer_of_preserves_colimit G f g)
170
+
171
+ @[simp]
172
+ lemma preserves_coequalizer.iso_hom :
173
+ (preserves_coequalizer.iso G f g).hom = coequalizer_comparison f g G :=
174
+ rfl
175
+
176
+ instance : is_iso (coequalizer_comparison f g G) :=
177
+ begin
178
+ rw ← preserves_coequalizer.iso_hom,
179
+ apply_instance
180
+ end
181
+
182
+ end coequalizers
183
+
105
184
end category_theory.limits
0 commit comments