@@ -14,8 +14,11 @@ a left Kan extension. It is shown that `L.lan` is the left adjoint to
14
14
the functor `(D ⥤ H) ⥤ (C ⥤ H)` given by the precomposition
15
15
with `L` (see `Functor.lanAdjunction`).
16
16
17
+ Similarly, we define the right Kan extension functor
18
+ `L.ran : (C ⥤ H) ⥤ (D ⥤ H)` which sends a functor `F : C ⥤ H` to its
19
+ right Kan extension along `L`.
20
+
17
21
## TODO
18
- - dualize the results for right Kan extensions
19
22
- refactor the file `CategoryTheory.Limits.KanExtension` so that
20
23
the definition of `Ran` in that file (which relies on the
21
24
existence of limits) is replaced by a definition
@@ -30,8 +33,13 @@ open Category
30
33
31
34
namespace Functor
32
35
33
- variable {C D : Type *} [Category C] [Category D] (L : C ⥤ D)
34
- {H : Type *} [Category H] [∀ (F : C ⥤ H), HasLeftKanExtension L F]
36
+ variable {C D : Type *} [Category C] [Category D] (L : C ⥤ D) {H : Type *} [Category H]
37
+
38
+ section lan
39
+
40
+ section
41
+
42
+ variable [∀ (F : C ⥤ H), HasLeftKanExtension L F]
35
43
36
44
/-- The left Kan extension functor `(C ⥤ H) ⥤ (D ⥤ H)` along a functor `C ⥤ D`. -/
37
45
noncomputable def lan : (C ⥤ H) ⥤ (D ⥤ H) where
@@ -62,7 +70,7 @@ noncomputable def lanAdjunction : L.lan ⊣ (whiskeringLeft C D H).obj L :=
62
70
Adjunction.mkOfHomEquiv
63
71
{ homEquiv := fun F G => homEquivOfIsLeftKanExtension _ (L.lanUnit.app F) G
64
72
homEquiv_naturality_left_symm := fun {F₁ F₂ G} f α =>
65
- hom_ext_of_isLeftKanExtension _ (L.lanUnit.app F₁) _ _ (by
73
+ hom_ext_of_isLeftKanExtension _ (L.lanUnit.app F₁) _ _ (by
66
74
ext X
67
75
dsimp [homEquivOfIsLeftKanExtension]
68
76
rw [descOfIsLeftKanExtension_fac_app, NatTrans.comp_app, ← assoc]
@@ -99,23 +107,28 @@ lemma isIso_lanAdjunction_counit_app_iff (G : D ⥤ H) :
99
107
IsIso ((L.lanAdjunction H).counit.app G) ↔ G.IsLeftKanExtension (𝟙 (L ⋙ G)) :=
100
108
(isLeftKanExtension_iff_isIso _ (L.lanUnit.app (L ⋙ G)) _ (by simp)).symm
101
109
110
+ end
111
+
102
112
section
103
113
104
114
variable [Full L] [Faithful L]
105
115
106
- instance (F : C ⥤ H) (X : C) [HasPointwiseLeftKanExtension L F] :
116
+ instance (F : C ⥤ H) (X : C) [HasPointwiseLeftKanExtension L F]
117
+ [∀ (F : C ⥤ H), HasLeftKanExtension L F] :
107
118
IsIso ((L.lanUnit.app F).app X) :=
108
119
(isPointwiseLeftKanExtensionLanUnit L F (L.obj X)).isIso_hom_app
109
120
110
- instance (F : C ⥤ H) [HasPointwiseLeftKanExtension L F] :
121
+ instance (F : C ⥤ H) [HasPointwiseLeftKanExtension L F]
122
+ [∀ (F : C ⥤ H), HasLeftKanExtension L F] :
111
123
IsIso (L.lanUnit.app F) :=
112
124
NatIso.isIso_of_isIso_app _
113
125
114
126
instance coreflective [∀ (F : C ⥤ H), HasPointwiseLeftKanExtension L F] :
115
127
IsIso (L.lanUnit (H := H)) := by
116
128
apply NatIso.isIso_of_isIso_app _
117
129
118
- instance (F : C ⥤ H) [HasPointwiseLeftKanExtension L F] :
130
+ instance (F : C ⥤ H) [HasPointwiseLeftKanExtension L F]
131
+ [∀ (F : C ⥤ H), HasLeftKanExtension L F] :
119
132
IsIso ((L.lanAdjunction H).unit.app F) := by
120
133
rw [lanAdjunction_unit]
121
134
infer_instance
@@ -126,6 +139,115 @@ instance coreflective' [∀ (F : C ⥤ H), HasPointwiseLeftKanExtension L F] :
126
139
127
140
end
128
141
142
+ end lan
143
+
144
+ section ran
145
+
146
+ section
147
+
148
+ variable [∀ (F : C ⥤ H), HasRightKanExtension L F]
149
+
150
+ /-- The right Kan extension functor `(C ⥤ H) ⥤ (D ⥤ H)` along a functor `C ⥤ D`. -/
151
+ noncomputable def ran : (C ⥤ H) ⥤ (D ⥤ H) where
152
+ obj F := rightKanExtension L F
153
+ map {F₁ F₂} φ := liftOfIsRightKanExtension _ (rightKanExtensionCounit L F₂) _
154
+ (rightKanExtensionCounit L F₁ ≫ φ)
155
+
156
+ /-- The natural transformation `L ⋙ (L.lan).obj G ⟶ L`. -/
157
+ noncomputable def ranCounit : L.ran ⋙ (whiskeringLeft C D H).obj L ⟶ (𝟭 (C ⥤ H)) where
158
+ app F := rightKanExtensionCounit L F
159
+ naturality {F₁ F₂} φ := by ext; simp [ran]
160
+
161
+ instance (F : C ⥤ H) : (L.ran.obj F).IsRightKanExtension (L.ranCounit.app F) := by
162
+ dsimp [ran, ranCounit]
163
+ infer_instance
164
+
165
+ /-- If there exists a pointwise right Kan extension of `F` along `L`,
166
+ then `L.ran.obj G` is a pointwise right Kan extension of `F`. -/
167
+ noncomputable def isPointwiseRightKanExtensionRanCounit
168
+ (F : C ⥤ H) [HasPointwiseRightKanExtension L F] :
169
+ (RightExtension.mk _ (L.ranCounit.app F)).IsPointwiseRightKanExtension :=
170
+ isPointwiseRightKanExtensionOfIsRightKanExtension (F := F) _ (L.ranCounit.app F)
171
+
172
+ variable (H) in
173
+ /-- The right Kan extension functor `L.ran` is right adjoint to the
174
+ precomposition by `L`. -/
175
+ noncomputable def ranAdjunction : (whiskeringLeft C D H).obj L ⊣ L.ran :=
176
+ Adjunction.mkOfHomEquiv
177
+ { homEquiv := fun F G =>
178
+ (homEquivOfIsRightKanExtension (α := L.ranCounit.app G) F).symm
179
+ homEquiv_naturality_right := fun {F G₁ G₂} β f ↦
180
+ hom_ext_of_isRightKanExtension _ (L.ranCounit.app G₂) _ _ (by
181
+ ext X
182
+ dsimp [homEquivOfIsRightKanExtension]
183
+ rw [liftOfIsRightKanExtension_fac_app, NatTrans.comp_app, assoc]
184
+ have h := congr_app (L.ranCounit.naturality f) X
185
+ dsimp at h ⊢
186
+ rw [h, liftOfIsRightKanExtension_fac_app_assoc])
187
+ homEquiv_naturality_left_symm := fun {F₁ F₂ G} β f ↦ by
188
+ dsimp [homEquivOfIsRightKanExtension]
189
+ rw [assoc] }
190
+
191
+ variable (H) in
192
+ @[simp]
193
+ lemma ranAdjunction_counit : (L.ranAdjunction H).counit = L.ranCounit := by
194
+ ext F : 2
195
+ dsimp [ranAdjunction, homEquivOfIsRightKanExtension]
196
+ simp
197
+
198
+ lemma ranAdjunction_unit_app (G : D ⥤ H) :
199
+ (L.ranAdjunction H).unit.app G =
200
+ liftOfIsRightKanExtension (L.ran.obj (L ⋙ G)) (L.ranCounit.app (L ⋙ G)) G (𝟙 (L ⋙ G)) :=
201
+ rfl
202
+
203
+ @[reassoc (attr := simp)]
204
+ lemma ranCounit_app_whiskerLeft_ranAdjunction_unit_app (G : D ⥤ H) :
205
+ whiskerLeft L ((L.ranAdjunction H).unit.app G) ≫ L.ranCounit.app (L ⋙ G) = 𝟙 (L ⋙ G) := by
206
+ simp [ranAdjunction_unit_app]
207
+
208
+ @[reassoc (attr := simp)]
209
+ lemma ranCounit_app_app_ranAdjunction_unit_app_app (G : D ⥤ H) (X : C) :
210
+ ((L.ranAdjunction H).unit.app G).app (L.obj X) ≫ (L.ranCounit.app (L ⋙ G)).app X = 𝟙 _ :=
211
+ congr_app (L.ranCounit_app_whiskerLeft_ranAdjunction_unit_app G) X
212
+
213
+ lemma isIso_ranAdjunction_unit_app_iff (G : D ⥤ H) :
214
+ IsIso ((L.ranAdjunction H).unit.app G) ↔ G.IsRightKanExtension (𝟙 (L ⋙ G)) :=
215
+ (isRightKanExtension_iff_isIso _ (L.ranCounit.app (L ⋙ G)) _ (by simp)).symm
216
+
217
+ end
218
+
219
+ section
220
+
221
+ variable [Full L] [Faithful L]
222
+
223
+ instance (F : C ⥤ H) (X : C) [HasPointwiseRightKanExtension L F]
224
+ [∀ (F : C ⥤ H), HasRightKanExtension L F] :
225
+ IsIso ((L.ranCounit.app F).app X) :=
226
+ (isPointwiseRightKanExtensionRanCounit L F (L.obj X)).isIso_hom_app
227
+
228
+ instance (F : C ⥤ H) [HasPointwiseRightKanExtension L F]
229
+ [∀ (F : C ⥤ H), HasRightKanExtension L F] :
230
+ IsIso (L.ranCounit.app F) :=
231
+ NatIso.isIso_of_isIso_app _
232
+
233
+ instance reflective [∀ (F : C ⥤ H), HasPointwiseRightKanExtension L F] :
234
+ IsIso (L.ranCounit (H := H)) := by
235
+ apply NatIso.isIso_of_isIso_app _
236
+
237
+ instance (F : C ⥤ H) [HasPointwiseRightKanExtension L F]
238
+ [∀ (F : C ⥤ H), HasRightKanExtension L F] :
239
+ IsIso ((L.ranAdjunction H).counit.app F) := by
240
+ rw [ranAdjunction_counit]
241
+ infer_instance
242
+
243
+ instance reflective' [∀ (F : C ⥤ H), HasPointwiseRightKanExtension L F] :
244
+ IsIso (L.ranAdjunction H).counit := by
245
+ apply NatIso.isIso_of_isIso_app _
246
+
247
+ end
248
+
249
+ end ran
250
+
129
251
end Functor
130
252
131
253
end CategoryTheory
0 commit comments