@@ -18,11 +18,12 @@ a shift by `A`, and the localization functor is compatible with the shift.
18
18
19
19
--/
20
20
21
- universe v₁ v₂ u₁ u₂ w
21
+ universe v₁ v₂ v₃ u₁ u₂ u₃ w
22
22
23
23
namespace CategoryTheory
24
24
25
25
variable {C : Type u₁} {D : Type u₂} [Category.{v₁} C] [Category.{v₂} D]
26
+ {E : Type u₃} [Category.{v₃} E]
26
27
(L : C ⥤ D) (W : MorphismProperty C) [L.IsLocalization W]
27
28
(A : Type w) [AddMonoid A] [HasShift C A]
28
29
@@ -110,4 +111,128 @@ noncomputable instance MorphismProperty.commShift_Q' :
110
111
111
112
attribute [irreducible] HasShift.localization' MorphismProperty.commShift_Q'
112
113
114
+ section
115
+
116
+ open Localization
117
+
118
+ variable (F : C ⥤ E) (F' : D ⥤ E) [Lifting L W F F']
119
+ [HasShift D A] [HasShift E A] [L.CommShift A] [F.CommShift A]
120
+
121
+ namespace Functor
122
+
123
+ namespace commShiftOfLocalization
124
+
125
+ variable {A}
126
+
127
+ /-- Auxiliary definition for `Functor.commShiftOfLocalization`. -/
128
+ noncomputable def iso (a : A) :
129
+ shiftFunctor D a ⋙ F' ≅ F' ⋙ shiftFunctor E a :=
130
+ Localization.liftNatIso L W (L ⋙ shiftFunctor D a ⋙ F')
131
+ (L ⋙ F' ⋙ shiftFunctor E a) _ _
132
+ ((Functor.associator _ _ _).symm ≪≫
133
+ isoWhiskerRight (L.commShiftIso a).symm F' ≪≫
134
+ Functor.associator _ _ _ ≪≫
135
+ isoWhiskerLeft _ (Lifting.iso L W F F') ≪≫
136
+ F.commShiftIso a ≪≫
137
+ isoWhiskerRight (Lifting.iso L W F F').symm _ ≪≫ Functor.associator _ _ _)
138
+
139
+ @[simp, reassoc]
140
+ lemma iso_hom_app (a : A) (X : C) :
141
+ (commShiftOfLocalization.iso L W F F' a).hom.app (L.obj X) =
142
+ F'.map ((L.commShiftIso a).inv.app X) ≫
143
+ (Lifting.iso L W F F').hom.app (X⟦a⟧) ≫
144
+ (F.commShiftIso a).hom.app X ≫
145
+ (shiftFunctor E a).map ((Lifting.iso L W F F').inv.app X) := by
146
+ simp [commShiftOfLocalization.iso]
147
+
148
+ @[simp, reassoc]
149
+ lemma iso_inv_app (a : A) (X : C) :
150
+ (commShiftOfLocalization.iso L W F F' a).inv.app (L.obj X) =
151
+ (shiftFunctor E a).map ((Lifting.iso L W F F').hom.app X) ≫
152
+ (F.commShiftIso a).inv.app X ≫
153
+ (Lifting.iso L W F F').inv.app (X⟦a⟧) ≫
154
+ F'.map ((L.commShiftIso a).hom.app X) := by
155
+ simp [commShiftOfLocalization.iso]
156
+
157
+ end commShiftOfLocalization
158
+
159
+ /-- In the context of localization of categories, if a functor
160
+ is induced by a functor which commutes with the shift, then
161
+ this functor commutes with the shift. -/
162
+ noncomputable def commShiftOfLocalization : F'.CommShift A where
163
+ iso := commShiftOfLocalization.iso L W F F'
164
+ zero := by
165
+ ext1
166
+ apply natTrans_ext L W
167
+ intro X
168
+ dsimp
169
+ simp only [commShiftOfLocalization.iso_hom_app, comp_obj, commShiftIso_zero,
170
+ CommShift.isoZero_inv_app, map_comp, CommShift.isoZero_hom_app, Category.assoc,
171
+ ← NatTrans.naturality_assoc, ← NatTrans.naturality]
172
+ dsimp
173
+ simp only [← Functor.map_comp_assoc, ← Functor.map_comp,
174
+ Iso.inv_hom_id_app, id_obj, map_id, Category.id_comp, Iso.hom_inv_id_app_assoc]
175
+ add a b := by
176
+ ext1
177
+ apply natTrans_ext L W
178
+ intro X
179
+ dsimp
180
+ simp only [commShiftOfLocalization.iso_hom_app, comp_obj, commShiftIso_add,
181
+ CommShift.isoAdd_inv_app, map_comp, CommShift.isoAdd_hom_app, Category.assoc]
182
+ congr 1
183
+ rw [← cancel_epi (F'.map ((shiftFunctor D b).map ((L.commShiftIso a).hom.app X))),
184
+ ← F'.map_comp_assoc, ← map_comp, Iso.hom_inv_id_app, map_id, map_id, Category.id_comp]
185
+ conv_lhs =>
186
+ erw [← NatTrans.naturality_assoc]
187
+ dsimp
188
+ rw [← Functor.map_comp_assoc, ← map_comp_assoc, Category.assoc,
189
+ ← map_comp, Iso.inv_hom_id_app]
190
+ dsimp
191
+ rw [map_id, Category.comp_id, ← NatTrans.naturality]
192
+ dsimp
193
+ conv_rhs =>
194
+ erw [← NatTrans.naturality_assoc]
195
+ dsimp
196
+ rw [← Functor.map_comp_assoc, ← map_comp, Iso.hom_inv_id_app]
197
+ dsimp
198
+ rw [map_id, map_id, Category.id_comp, commShiftOfLocalization.iso_hom_app,
199
+ Category.assoc, Category.assoc, Category.assoc, ← map_comp_assoc,
200
+ Iso.inv_hom_id_app, map_id, Category.id_comp]
201
+
202
+ variable {A}
203
+
204
+ lemma commShiftOfLocalization_iso_hom_app (a : A) (X : C) :
205
+ letI := Functor.commShiftOfLocalization L W A F F'
206
+ (F'.commShiftIso a).hom.app (L.obj X) =
207
+ F'.map ((L.commShiftIso a).inv.app X) ≫ (Lifting.iso L W F F').hom.app (X⟦a⟧) ≫
208
+ (F.commShiftIso a).hom.app X ≫
209
+ (shiftFunctor E a).map ((Lifting.iso L W F F').inv.app X) := by
210
+ apply commShiftOfLocalization.iso_hom_app
211
+
212
+ lemma commShiftOfLocalization_iso_inv_app (a : A) (X : C) :
213
+ letI := Functor.commShiftOfLocalization L W A F F'
214
+ (F'.commShiftIso a).inv.app (L.obj X) =
215
+ (shiftFunctor E a).map ((Lifting.iso L W F F').hom.app X) ≫
216
+ (F.commShiftIso a).inv.app X ≫ (Lifting.iso L W F F').inv.app (X⟦a⟧) ≫
217
+ F'.map ((L.commShiftIso a).hom.app X) := by
218
+ apply commShiftOfLocalization.iso_inv_app
219
+
220
+ end Functor
221
+
222
+ instance NatTrans.commShift_iso_hom_of_localization :
223
+ letI := Functor.commShiftOfLocalization L W A F F'
224
+ NatTrans.CommShift (Lifting.iso L W F F').hom A := by
225
+ letI := Functor.commShiftOfLocalization L W A F F'
226
+ constructor
227
+ intro a
228
+ ext X
229
+ simp only [comp_app, whiskerRight_app, whiskerLeft_app,
230
+ Functor.commShiftIso_comp_hom_app,
231
+ Functor.commShiftOfLocalization_iso_hom_app,
232
+ Category.assoc, ← Functor.map_comp, ← Functor.map_comp_assoc,
233
+ Iso.hom_inv_id_app, Functor.map_id, Iso.inv_hom_id_app,
234
+ Category.comp_id, Category.id_comp, Functor.comp_obj]
235
+
236
+ end
237
+
113
238
end CategoryTheory
0 commit comments