@@ -5,15 +5,15 @@ Authors: Dagur Asgeirsson, Jack McKoen, Joël Riou
55-/
66module
77
8- public import Mathlib.Algebra.Category.ModuleCat.Presheaf.Colimits
8+ public import Mathlib.Algebra.Category.ModuleCat.Presheaf.OfCommRing
99public import Mathlib.Algebra.Category.ModuleCat.Monoidal.Closed
1010
1111/-!
1212# The monoidal category structure on presheaves of modules
1313
1414Given a presheaf of commutative rings `R : Cᵒᵖ ⥤ CommRingCat`, we construct
1515the monoidal category structure on the category of presheaves of modules
16- `PresheafOfModules (R ⋙ forget₂ _ _) `. The tensor product `M₁ ⊗ M₂` is defined
16+ `PresheafOfModulesOfCommRing R `. The tensor product `M₁ ⊗ M₂` is defined
1717as the presheaf of modules which sends `X : Cᵒᵖ` to `M₁.obj X ⊗ M₂.obj X`.
1818
1919## Notes
@@ -31,14 +31,11 @@ universe v u v₁ u₁
3131
3232variable {C : Type *} [Category* C] {R : Cᵒᵖ ⥤ CommRingCat.{u}}
3333
34- instance (X : Cᵒᵖ) : CommRing ((R ⋙ forget₂ _ RingCat).obj X) :=
35- inferInstanceAs (CommRing (R.obj X))
36-
37- namespace PresheafOfModules
34+ namespace PresheafOfModulesOfCommRing
3835
3936namespace Monoidal
4037
41- variable (M₁ M₂ M₃ M₄ : PresheafOfModules .{u} (R ⋙ forget₂ _ _) )
38+ variable (M₁ M₂ M₃ M₄ : PresheafOfModulesOfCommRing .{u} R )
4239
4340set_option backward.isDefEq.respectTransparency false in
4441/-- Auxiliary definition for `tensorObj`. -/
@@ -47,62 +44,57 @@ noncomputable def tensorObjMap {X Y : Cᵒᵖ} (f : X ⟶ Y) : M₁.obj X ⊗ M
4744 ModuleCat.MonoidalCategory.tensorLift (fun m₁ m₂ ↦ M₁.map f m₁ ⊗ₜ M₂.map f m₂)
4845 (by
4946 intro m₁ m₁' m₂
50- dsimp +instances
47+ dsimp
5148 rw [map_add, TensorProduct.add_tmul])
5249 (by intro a m₁ m₂; dsimp; erw [M₁.map_smul]; rfl)
5350 (by
5451 intro m₁ m₂ m₂'
55- dsimp +instances
52+ dsimp
5653 rw [map_add, TensorProduct.tmul_add])
5754 (by intro a m₁ m₂; dsimp; erw [M₂.map_smul, TensorProduct.tmul_smul (r := R.map f a)]; rfl)
5855
59- set_option backward.defeqAttrib.useBackward true in
6056set_option backward.isDefEq.respectTransparency false in
6157/-- The tensor product of two presheaves of modules. -/
6258@ [simps obj]
63- noncomputable def tensorObj : PresheafOfModules (R ⋙ forget₂ _ _) where
64- obj X := M₁.obj X ⊗ M₂.obj X
65- map f := tensorObjMap M₁ M₂ f
66- map_id X := ModuleCat.MonoidalCategory.tensor_ext (by
67- intro m₁ m₂
68- dsimp [tensorObjMap]
69- simp
70- rfl) -- `ModuleCat.restrictScalarsId'App_inv_apply` doesn't get picked up due to type mismatch
71- map_comp f g := ModuleCat.MonoidalCategory.tensor_ext (by
72- intro m₁ m₂
73- dsimp [tensorObjMap]
74- simp +instances)
59+ noncomputable def tensorObj : PresheafOfModulesOfCommRing R :=
60+ mk (fun X ↦ M₁.obj X ⊗ M₂.obj X)
61+ (fun f ↦ tensorObjMap M₁ M₂ f)
62+ (fun X ↦ ModuleCat.MonoidalCategory.tensor_ext (by
63+ intro m₁ m₂
64+ dsimp [tensorObjMap]
65+ simp))
66+ (fun f g ↦ ModuleCat.MonoidalCategory.tensor_ext (by
67+ intro m₁ m₂
68+ dsimp [tensorObjMap]
69+ simp +instances))
7570
7671variable {M₁ M₂ M₃ M₄}
7772
7873@[simp]
7974lemma tensorObj_map_tmul {X Y : Cᵒᵖ} (f : X ⟶ Y) (m₁ : M₁.obj X) (m₂ : M₂.obj X) :
8075 DFunLike.coe (α := (M₁.obj X ⊗ M₂.obj X :))
8176 (β := fun _ ↦ (ModuleCat.restrictScalars (R.map f).hom).obj (M₁.obj Y ⊗ M₂.obj Y))
82- (ModuleCat.Hom.hom (R := ↑(R.obj X)) ( (tensorObj M₁ M₂).map f)) (m₁ ⊗ₜ[R.obj X] m₂) =
77+ (ModuleCat.Hom.hom ((tensorObj M₁ M₂).map f)) (m₁ ⊗ₜ[R.obj X] m₂) =
8378 M₁.map f m₁ ⊗ₜ[R.obj Y] M₂.map f m₂ := rfl
8479
8580set_option backward.defeqAttrib.useBackward true in
8681set_option backward.isDefEq.respectTransparency false in
8782/-- The tensor product of two morphisms of presheaves of modules. -/
8883@[simps]
89- noncomputable def tensorHom (f : M₁ ⟶ M₂) (g : M₃ ⟶ M₄) : tensorObj M₁ M₃ ⟶ tensorObj M₂ M₄ where
90- app X := f.app X ⊗ₘ g.app X
91- naturality {X Y} φ := ModuleCat.MonoidalCategory.tensor_ext (fun m₁ m₃ ↦ by
92- dsimp
93- rw [tensorObj_map_tmul]
94- -- Need `erw` because of the type mismatch in `map` and the tensor product.
95- erw [ModuleCat.MonoidalCategory.tensorHom_tmul, tensorObj_map_tmul]
96- rw [naturality_apply, naturality_apply]
97- simp)
84+ noncomputable def tensorHom (f : M₁ ⟶ M₂) (g : M₃ ⟶ M₄) :
85+ tensorObj M₁ M₃ ⟶ tensorObj M₂ M₄ :=
86+ homMk (fun X ↦ f.app' X ⊗ₘ g.app' X)
87+ (fun φ ↦ ModuleCat.MonoidalCategory.tensor_ext (fun m₁ m₃ ↦ by
88+ dsimp
89+ rw [tensorObj_map_tmul, ModuleCat.MonoidalCategory.tensorHom_tmul, tensorObj_map_tmul,
90+ naturality_apply, naturality_apply]))
9891
9992end Monoidal
10093
10194open Monoidal
10295
103- open ModuleCat.MonoidalCategory in
10496noncomputable instance monoidalCategoryStruct :
105- MonoidalCategoryStruct (PresheafOfModules .{u} (R ⋙ forget₂ _ _) ) where
97+ MonoidalCategoryStruct (PresheafOfModulesOfCommRing .{u} R ) where
10698 tensorObj := tensorObj
10799 whiskerLeft _ _ _ g := tensorHom (𝟙 _) g
108100 whiskerRight f _ := tensorHom f (𝟙 _)
@@ -113,16 +105,18 @@ noncomputable instance monoidalCategoryStruct :
113105 leftUnitor M := Iso.symm (isoMk (fun _ ↦ (λ_ _).symm) (fun X Y f ↦ by
114106 ext m
115107 dsimp [CommRingCat.forgetToRingCat_obj]
116- erw [leftUnitor_inv_apply, leftUnitor_inv_apply, tensorObj_map_tmul, (R.map f).hom.map_one]
108+ erw [ModuleCat.MonoidalCategory.leftUnitor_inv_apply,
109+ ModuleCat.MonoidalCategory.leftUnitor_inv_apply, tensorObj_map_tmul, (R.map f).hom.map_one]
117110 rfl))
118111 rightUnitor M := Iso.symm (isoMk (fun _ ↦ (ρ_ _).symm) (fun X Y f ↦ by
119112 ext m
120113 dsimp [CommRingCat.forgetToRingCat_obj]
121- erw [rightUnitor_inv_apply, rightUnitor_inv_apply, tensorObj_map_tmul, (R.map f).hom.map_one]
114+ erw [ModuleCat.MonoidalCategory.rightUnitor_inv_apply,
115+ ModuleCat.MonoidalCategory.rightUnitor_inv_apply, tensorObj_map_tmul, (R.map f).hom.map_one]
122116 rfl))
123117
124118noncomputable instance monoidalCategory :
125- MonoidalCategory (PresheafOfModules .{u} (R ⋙ forget₂ _ _) ) where
119+ MonoidalCategory (PresheafOfModulesOfCommRing .{u} R ) where
126120 tensorHom_def _ _ := by ext1; apply tensorHom_def
127121 id_tensorHom_id _ _ := by ext1; apply id_tensorHom_id
128122 tensorHom_comp_tensorHom _ _ _ _ := by ext1; apply tensorHom_comp_tensorHom
@@ -141,9 +135,9 @@ noncomputable instance monoidalCategory :
141135open BraidedCategory
142136
143137noncomputable instance symmetricCategory :
144- SymmetricCategory (PresheafOfModules .{u} (R ⋙ forget₂ _ _) ) where
138+ SymmetricCategory (PresheafOfModulesOfCommRing .{u} R ) where
145139 braiding M₁ M₂ :=
146- isoMk (fun X ↦ braiding (C := ModuleCat (R.obj X)) ( M₁.obj X) (M₂.obj X))
140+ isoMk (fun X ↦ braiding (M₁.obj X) (M₂.obj X))
147141 (fun _ _ f ↦ ModuleCat.MonoidalCategory.tensor_ext (fun _ _ ↦ rfl))
148142 braiding_naturality_right _ _ _ _ := by
149143 ext : 1
@@ -163,84 +157,83 @@ noncomputable instance symmetricCategory :
163157
164158section
165159
166- variable (M₁ M₂ M₃ M₄ : PresheafOfModules .{u} (R ⋙ forget₂ _ _) )
160+ variable (M₁ M₂ M₃ M₄ : PresheafOfModulesOfCommRing .{u} R )
167161
168162lemma tensorObj_obj (X : Cᵒᵖ) :
169- (M₁ ⊗ M₂).obj X =
170- MonoidalCategory.tensorObj (C := ModuleCat (R.obj X)) (M₁.obj X) (M₂.obj X) := rfl
163+ (M₁ ⊗ M₂).obj X = MonoidalCategory.tensorObj (M₁.obj X) (M₂.obj X) := rfl
171164
172165attribute [local simp] tensorObj_obj
173166
174167variable {M₂ M₃} in
175168@[simp]
176169lemma whiskerLeft_app (f : M₂ ⟶ M₃) (X : Cᵒᵖ) :
177- dsimp% (M₁ ◁ f).app X = whiskerLeft (C := ModuleCat (R.obj X)) (M₁.obj X) (f.app X) :=
178- rfl
170+ dsimp% (M₁ ◁ f).app' X = whiskerLeft (M₁.obj X) (f.app' X) := rfl
179171
180172variable {M₁ M₂} in
181173@[simp]
182- lemma whiskerRight_app (f : M₁ ⟶ M₂) (M₃ : PresheafOfModules.{u} (R ⋙ forget₂ _ _)) (X : Cᵒᵖ) :
183- dsimp% (f ▷ M₃).app X = whiskerRight (C := ModuleCat (R.obj X)) (f.app X) (M₃.obj X) := rfl
174+ lemma whiskerRight_app (f : M₁ ⟶ M₂) (M₃ : PresheafOfModulesOfCommRing.{u} R)
175+ (X : Cᵒᵖ) :
176+ dsimp% (f ▷ M₃).app' X = whiskerRight (f.app' X) (M₃.obj X) := rfl
184177
185178variable {M₁ M₂ M₃ M₄} in
186179@[simp]
187180lemma tensorHom_app (f : M₁ ⟶ M₂) (g : M₃ ⟶ M₄) (X : Cᵒᵖ) :
188- dsimp% (f ⊗ₘ g).app X =
189- MonoidalCategory.tensorHom (C := ModuleCat (R.obj X)) ( f.app X) (g.app X) := rfl
181+ dsimp% (f ⊗ₘ g).app' X =
182+ MonoidalCategory.tensorHom (f.app' X) (g.app' X) := rfl
190183
191184@[simp]
192185lemma leftUnitor_hom_app (X : Cᵒᵖ) :
193- dsimp% (λ_ M₁).hom.app X = (leftUnitor (C := ModuleCat (R.obj X)) (M₁.obj X)).hom :=
186+ dsimp% (λ_ M₁).hom.app' X = (leftUnitor (M₁.obj X)).hom :=
194187 rfl
195188
196189@[simp]
197190lemma leftUnitor_inv_app (X : Cᵒᵖ) :
198- dsimp% (λ_ M₁).inv.app X = (leftUnitor (C := ModuleCat (R.obj X)) (M₁.obj X)).inv := by
191+ dsimp% (λ_ M₁).inv.app' X = (leftUnitor (M₁.obj X)).inv := by
199192 rfl
200193
201194@[simp]
202195lemma rightUnitor_hom_app (X : Cᵒᵖ) :
203- dsimp% (ρ_ M₁).hom.app X = (rightUnitor (C := ModuleCat (R.obj X)) (M₁.obj X)).hom :=
196+ dsimp% (ρ_ M₁).hom.app' X = (rightUnitor (M₁.obj X)).hom :=
204197 rfl
205198
206199@[simp]
207200lemma rightUnitor_inv_app (X : Cᵒᵖ) :
208- dsimp% (ρ_ M₁).inv.app X = (rightUnitor (C := ModuleCat (R.obj X)) (M₁.obj X)).inv :=
201+ dsimp% (ρ_ M₁).inv.app' X = (rightUnitor (M₁.obj X)).inv :=
209202 rfl
210203
211204@[simp]
212205lemma associator_hom_app (X : Cᵒᵖ) :
213- (α_ M₁ M₂ M₃).hom.app X =
214- (associator (C := ModuleCat (R.obj X)) ( M₁.obj X) (M₂.obj X) (M₃.obj X)).hom :=
206+ (α_ M₁ M₂ M₃).hom.app' X =
207+ (associator (M₁.obj X) (M₂.obj X) (M₃.obj X)).hom :=
215208 rfl
216209
217210@[simp]
218211lemma associator_inv_app (X : Cᵒᵖ) :
219- (α_ M₁ M₂ M₃).inv.app X =
220- (associator (C := ModuleCat (R.obj X)) ( M₁.obj X) (M₂.obj X) (M₃.obj X)).inv :=
212+ (α_ M₁ M₂ M₃).inv.app' X =
213+ (associator (M₁.obj X) (M₂.obj X) (M₃.obj X)).inv :=
221214 rfl
222215
223216@[simp]
224217lemma braiding_hom_app (X : Cᵒᵖ) :
225- dsimp% (braiding M₁ M₂).hom.app X =
226- (braiding (C := ModuleCat (R.obj X)) ( M₁.obj X) (M₂.obj X)).hom := by
218+ dsimp% (braiding M₁ M₂).hom.app' X =
219+ (braiding (M₁.obj X) (M₂.obj X)).hom := by
227220 rfl
228221
229222@[simp]
230223lemma braiding_inv_app (X : Cᵒᵖ) :
231- dsimp% (braiding M₁ M₂).inv.app X =
232- (braiding (C := ModuleCat (R.obj X)) ( M₁.obj X) (M₂.obj X)).inv := rfl
224+ dsimp% (braiding M₁ M₂).inv.app' X =
225+ (braiding (M₁.obj X) (M₂.obj X)).inv := rfl
233226
234227end
235228
236- instance (F : PresheafOfModules .{u} (R ⋙ forget₂ _ _) ) :
229+ instance (F : PresheafOfModulesOfCommRing .{u} R ) :
237230 PreservesColimitsOfSize.{u, u} (tensorLeft F) where
238- preservesColimitsOfShape := ⟨⟨fun hc ↦ ⟨evaluationJointlyReflectsColimits _ _
231+ preservesColimitsOfShape := ⟨⟨fun hc ↦ ⟨PresheafOfModules. evaluationJointlyReflectsColimits _ _
239232 (fun X ↦ isColimitOfPreserves (tensorLeft (show ModuleCat (R.obj X) from F.obj X))
240- (isColimitOfPreserves (evaluation _ X) hc))⟩⟩⟩
233+ (isColimitOfPreserves (PresheafOfModules. evaluation _ X) hc))⟩⟩⟩
241234
242- instance (F : PresheafOfModules .{u} (R ⋙ forget₂ _ _) ) :
235+ instance (F : PresheafOfModulesOfCommRing .{u} R ) :
243236 PreservesColimitsOfSize.{u, u} (tensorRight F) :=
244237 preservesColimits_of_natIso (tensorLeftIsoTensorRight F)
245238
246- end PresheafOfModules
239+ end PresheafOfModulesOfCommRing
0 commit comments