@@ -10,9 +10,11 @@ import category_theory.limits.preserves.basic
1010import category_theory.adjunction.limits
1111import category_theory.monoidal.functor_category
1212import category_theory.monoidal.transport
13+ import category_theory.monoidal.linear
1314import category_theory.monoidal.braided
1415import category_theory.abelian.functor_category
1516import category_theory.abelian.transfer
17+ import category_theory.linear.functor_category
1618
1719/-!
1820# `Action V G`, the category of actions of a monoid `G` inside some category `V`.
@@ -25,7 +27,7 @@ and construct the restriction functors `res {G H : Mon} (f : G ⟶ H) : Action V
2527
2628* When `V` has (co)limits so does `Action V G`.
2729* When `V` is monoidal, braided, or symmetric, so is `Action V G`.
28- * When `V` is preadditive or abelian so is `Action V G`.
30+ * When `V` is preadditive, linear, or abelian so is `Action V G`.
2931 -/
3032
3133universes u
@@ -272,8 +274,33 @@ instance : preadditive (Action V G) :=
272274
273275instance : functor.additive (functor_category_equivalence V G).functor := {}
274276
277+ @[simp] lemma zero_hom {X Y : Action V G} : (0 : X ⟶ Y).hom = 0 := rfl
278+ @[simp] lemma neg_hom {X Y : Action V G} (f : X ⟶ Y) : (-f).hom = -f.hom := rfl
279+ @[simp] lemma add_hom {X Y : Action V G} (f g : X ⟶ Y) : (f + g).hom = f.hom + g.hom := rfl
280+
275281end preadditive
276282
283+ section linear
284+ variables [preadditive V] {R : Type *} [semiring R] [linear R V]
285+
286+ instance : linear R (Action V G) :=
287+ { hom_module := λ X Y,
288+ { smul := λ r f, ⟨r • f.hom, by simp [f.comm]⟩,
289+ one_smul := by { intros, ext, exact one_smul _ _, },
290+ smul_zero := by { intros, ext, exact smul_zero _, },
291+ zero_smul := by { intros, ext, exact zero_smul _ _, },
292+ add_smul := by { intros, ext, exact add_smul _ _ _, },
293+ smul_add := by { intros, ext, exact smul_add _ _ _, },
294+ mul_smul := by { intros, ext, exact mul_smul _ _ _, }, },
295+ smul_comp' := by { intros, ext, exact linear.smul_comp _ _ _ _ _ _, },
296+ comp_smul' := by { intros, ext, exact linear.comp_smul _ _ _ _ _ _, }, }
297+
298+ instance : functor.linear R (functor_category_equivalence V G).functor := {}
299+
300+ @[simp] lemma smul_hom {X Y : Action V G} (r : R) (f : X ⟶ Y) : (r • f).hom = r • f.hom := rfl
301+
302+ end linear
303+
277304section abelian
278305/-- Auxilliary construction for the `abelian (Action V G)` instance. -/
279306def abelian_aux : Action V G ≌ (ulift.{u} (single_obj G) ⥤ V) :=
@@ -290,6 +317,47 @@ variables [monoidal_category V]
290317instance : monoidal_category (Action V G) :=
291318monoidal.transport (Action.functor_category_equivalence _ _).symm
292319
320+ @[simp] lemma tensor_V {X Y : Action V G} : (X ⊗ Y).V = X.V ⊗ Y.V := rfl
321+ @[simp] lemma tensor_rho {X Y : Action V G} {g : G} : (X ⊗ Y).ρ g = X.ρ g ⊗ Y.ρ g := rfl
322+ @[simp] lemma tensor_hom {W X Y Z : Action V G} (f : W ⟶ X) (g : Y ⟶ Z) :
323+ (f ⊗ g).hom = f.hom ⊗ g.hom := rfl
324+ @[simp] lemma associator_hom_hom {X Y Z : Action V G} :
325+ hom.hom (α_ X Y Z).hom = (α_ X.V Y.V Z.V).hom :=
326+ begin
327+ dsimp [monoidal.transport_associator],
328+ simp,
329+ end
330+ @[simp] lemma associator_inv_hom {X Y Z : Action V G} :
331+ hom.hom (α_ X Y Z).inv = (α_ X.V Y.V Z.V).inv :=
332+ begin
333+ dsimp [monoidal.transport_associator],
334+ simp,
335+ end
336+ @[simp] lemma left_unitor_hom_hom {X : Action V G} :
337+ hom.hom (λ_ X).hom = (λ_ X.V).hom :=
338+ begin
339+ dsimp [monoidal.transport_left_unitor],
340+ simp,
341+ end
342+ @[simp] lemma left_unitor_inv_hom {X : Action V G} :
343+ hom.hom (λ_ X).inv = (λ_ X.V).inv :=
344+ begin
345+ dsimp [monoidal.transport_left_unitor],
346+ simp,
347+ end
348+ @[simp] lemma right_unitor_hom_hom {X : Action V G} :
349+ hom.hom (ρ_ X).hom = (ρ_ X.V).hom :=
350+ begin
351+ dsimp [monoidal.transport_right_unitor],
352+ simp,
353+ end
354+ @[simp] lemma right_unitor_inv_hom {X : Action V G} :
355+ hom.hom (ρ_ X).inv = (ρ_ X.V).inv :=
356+ begin
357+ dsimp [monoidal.transport_right_unitor],
358+ simp,
359+ end
360+
293361variables (V G)
294362
295363/-- When `V` is monoidal the forgetful functor `Action V G` to `V` is monoidal. -/
@@ -302,20 +370,35 @@ def forget_monoidal : monoidal_functor (Action V G) V :=
302370instance forget_monoidal_faithful : faithful (forget_monoidal V G).to_functor :=
303371by { change faithful (forget V G), apply_instance, }
304372
305- instance [braided_category V] : braided_category (Action V G) :=
373+ section
374+ variables [braided_category V]
375+
376+ instance : braided_category (Action V G) :=
306377braided_category_of_faithful (forget_monoidal V G) (λ X Y, mk_iso (β_ _ _) (by tidy)) (by tidy)
307378
308379/-- When `V` is braided the forgetful functor `Action V G` to `V` is braided. -/
309380@[simps]
310- def forget_braided [braided_category V] : braided_functor (Action V G) V :=
381+ def forget_braided : braided_functor (Action V G) V :=
311382{ ..forget_monoidal _ _, }
312383
313- instance forget_braided_faithful [braided_category V] : faithful (forget_braided V G).to_functor :=
384+ instance forget_braided_faithful : faithful (forget_braided V G).to_functor :=
314385by { change faithful (forget V G), apply_instance, }
315386
387+ end
388+
316389instance [symmetric_category V] : symmetric_category (Action V G) :=
317390symmetric_category_of_faithful (forget_braided V G)
318391
392+ variables [preadditive V] [monoidal_preadditive V]
393+
394+ local attribute [simp] monoidal_preadditive.tensor_add monoidal_preadditive.add_tensor
395+
396+ instance : monoidal_preadditive (Action V G) := {}
397+
398+ variables {R : Type *} [semiring R] [linear R V] [monoidal_linear R V]
399+
400+ instance : monoidal_linear R (Action V G) := {}
401+
319402end monoidal
320403
321404/-- Actions/representations of the trivial group are just objects in the ambient category. -/
@@ -365,6 +448,14 @@ attribute [simps] res_comp
365448-- TODO promote `res` to a pseudofunctor from
366449-- the locally discrete bicategory constructed from `Monᵒᵖ` to `Cat`, sending `G` to `Action V G`.
367450
451+ variables {G} {H : Mon.{u}} (f : G ⟶ H)
452+
453+ instance res_additive [preadditive V] : (res V f).additive := {}
454+
455+ variables {R : Type *} [semiring R]
456+
457+ instance res_linear [preadditive V] [linear R V] : (res V f).linear R := {}
458+
368459end Action
369460
370461namespace category_theory.functor
@@ -387,4 +478,12 @@ def map_Action (F : V ⥤ W) (G : Mon.{u}) : Action V G ⥤ Action W G :=
387478 map_id' := λ M, by { ext, simp only [Action.id_hom, F.map_id], },
388479 map_comp' := λ M N P f g, by { ext, simp only [Action.comp_hom, F.map_comp], }, }
389480
481+ variables (F : V ⥤ W) (G : Mon.{u}) [preadditive V] [preadditive W]
482+
483+ instance map_Action_preadditive [F.additive] : (F.map_Action G).additive := {}
484+
485+ variables {R : Type *} [semiring R] [category_theory.linear R V] [category_theory.linear R W]
486+
487+ instance map_Action_linear [F.additive] [F.linear R] : (F.map_Action G).linear R := {}
488+
390489end category_theory.functor
0 commit comments