@@ -5,8 +5,11 @@ Authors: Andrew Yang
55-/
66module
77
8- public import Mathlib.CategoryTheory.Monoidal.Cartesian.Basic
8+ public import Mathlib.CategoryTheory.Adjunction.Limits
9+ public import Mathlib.CategoryTheory.Comma.Over.Pullback
910public import Mathlib.CategoryTheory.Limits.Constructions.Over.Products
11+ public import Mathlib.CategoryTheory.Monoidal.CommMon_
12+ public import Mathlib.CategoryTheory.Monoidal.Grp_
1013
1114/-!
1215
@@ -17,28 +20,29 @@ for the induced `MonoidalCategory (Over X)` instance.
1720
1821-/
1922
20- @[expose] public section
23+ public noncomputable section
2124
2225namespace CategoryTheory.Over
2326
24- open Limits CartesianMonoidalCategory
27+ open Functor Limits CartesianMonoidalCategory
2528
2629variable {C : Type *} [Category C] [HasPullbacks C]
2730
2831/-- A choice of finite products of `Over X` given by `Limits.pullback`. -/
29- noncomputable abbrev cartesianMonoidalCategory (X : C) : CartesianMonoidalCategory (Over X) :=
32+ abbrev cartesianMonoidalCategory (X : C) : CartesianMonoidalCategory (Over X) :=
3033 .ofChosenFiniteProducts
3134 ⟨asEmptyCone (Over.mk (𝟙 X)), IsTerminal.ofUniqueHom (fun Y ↦ Over.homMk Y.hom)
3235 fun Y m ↦ Over.OverMorphism.ext (by simpa using m.w)⟩
3336 fun Y Z ↦ ⟨pullbackConeEquivBinaryFan.functor.obj (pullback.cone Y.hom Z.hom),
3437 (pullback.isLimit _ _).pullbackConeEquivBinaryFanFunctor⟩
3538
36- @[deprecated (since := "2025-05-15")] alias chosenFiniteProducts := cartesianMonoidalCategory
39+ @[deprecated (since := "2025-05-15")]
40+ noncomputable alias chosenFiniteProducts := cartesianMonoidalCategory
3741
3842attribute [local instance] cartesianMonoidalCategory
3943
4044/-- `Over X` is braided w.r.t. the Cartesian monoidal structure given by `Limits.pullback`. -/
41- noncomputable abbrev braidedCategory (X : C) : BraidedCategory (Over X) :=
45+ abbrev braidedCategory (X : C) : BraidedCategory (Over X) :=
4246 .ofCartesianMonoidalCategory
4347
4448attribute [local instance] braidedCategory
@@ -54,7 +58,7 @@ lemma tensorObj_ext {R : C} {S T : Over X} (f₁ f₂ : R ⟶ (S ⊗ T).left)
5458 pullback.hom_ext e₁ e₂
5559
5660@[simp]
57- lemma tensorObj_left (R S : Over X) : (R ⊗ S).left = pullback R.hom S.hom := rfl
61+ lemma tensorObj_left (R S : Over X) : (R ⊗ S).left = Limits. pullback R.hom S.hom := rfl
5862
5963@[simp]
6064lemma tensorObj_hom (R S : Over X) : (R ⊗ S).hom = pullback.fst R.hom S.hom ≫ R.hom := rfl
@@ -185,4 +189,127 @@ lemma braiding_hom_left {R S : Over X} :
185189lemma braiding_inv_left {R S : Over X} :
186190 (β_ R S).inv.left = (pullbackSymmetry _ _).hom := rfl
187191
192+ variable {A B R S Y Z : C} {f : R ⟶ X} {g : S ⟶ X}
193+
194+ instance : (Over.pullback f).Braided := .ofChosenFiniteProducts _
195+
196+ @[simp]
197+ lemma η_pullback_left : (OplaxMonoidal.η (Over.pullback f)).left = (pullback.snd (𝟙 _) f) := rfl
198+
199+ @[simp]
200+ lemma ε_pullback_left : (LaxMonoidal.ε (Over.pullback f)).left = inv (pullback.snd (𝟙 _) f) := by
201+ apply IsIso.eq_inv_of_hom_inv_id
202+ rw [← η_pullback_left, ← Over.comp_left, Monoidal.η_ε, Over.id_left]
203+
204+ lemma μ_pullback_left_fst_fst (R S : Over X) :
205+ (LaxMonoidal.μ (Over.pullback f) R S).left ≫
206+ pullback.fst _ _ ≫ pullback.fst _ _ = pullback.fst _ _ ≫ pullback.fst _ _ := by
207+ rw [Monoidal.μ_of_cartesianMonoidalCategory,
208+ ← cancel_epi (prodComparisonIso (Over.pullback f) R S).hom.left, ← Over.comp_left_assoc,
209+ Iso.hom_inv_id]
210+ simp [CartesianMonoidalCategory.prodComparison, fst]
211+
212+ lemma μ_pullback_left_fst_snd (R S : Over X) :
213+ (LaxMonoidal.μ (Over.pullback f) R S).left ≫
214+ pullback.fst _ _ ≫ pullback.snd _ _ = pullback.snd _ _ ≫ pullback.fst _ _ := by
215+ rw [Monoidal.μ_of_cartesianMonoidalCategory,
216+ ← cancel_epi (prodComparisonIso (Over.pullback f) R S).hom.left,
217+ ← Over.comp_left_assoc, Iso.hom_inv_id]
218+ simp [CartesianMonoidalCategory.prodComparison, snd]
219+
220+ lemma μ_pullback_left_snd (R S : Over X) :
221+ (LaxMonoidal.μ (Over.pullback f) R S).left ≫ pullback.snd _ _ =
222+ pullback.snd _ _ ≫ pullback.snd _ _ := by
223+ rw [Monoidal.μ_of_cartesianMonoidalCategory,
224+ ← cancel_epi (prodComparisonIso (Over.pullback f) R S).hom.left,
225+ ← Over.comp_left_assoc, Iso.hom_inv_id]
226+ simp [CartesianMonoidalCategory.prodComparison]
227+
228+ @[simp]
229+ lemma μ_pullback_left_fst_fst' (g₁ : Y ⟶ X) (g₂ : Z ⟶ X) :
230+ (LaxMonoidal.μ (Over.pullback f) (.mk g₁) (.mk g₂)).left ≫
231+ pullback.fst (pullback.fst g₁ g₂ ≫ g₁) f ≫ pullback.fst g₁ g₂ =
232+ pullback.fst _ _ ≫ pullback.fst _ _ :=
233+ μ_pullback_left_fst_fst ..
234+
235+ @[simp]
236+ lemma μ_pullback_left_fst_snd' (g₁ : Y ⟶ X) (g₂ : Z ⟶ X) :
237+ (LaxMonoidal.μ (Over.pullback f) (.mk g₁) (.mk g₂)).left ≫
238+ pullback.fst (pullback.fst g₁ g₂ ≫ g₁) f ≫ pullback.snd g₁ g₂ =
239+ pullback.snd _ _ ≫ pullback.fst _ _ :=
240+ μ_pullback_left_fst_snd ..
241+
242+ @[simp]
243+ lemma μ_pullback_left_snd' (g₁ : Y ⟶ X) (g₂ : Z ⟶ X) :
244+ (LaxMonoidal.μ (Over.pullback f) (.mk g₁) (.mk g₂)).left ≫
245+ pullback.snd (pullback.fst g₁ g₂ ≫ g₁) f =
246+ pullback.snd _ _ ≫ pullback.snd _ _ := μ_pullback_left_snd ..
247+
248+ @[simp]
249+ lemma preservesTerminalIso_pullback (f : R ⟶ S) :
250+ preservesTerminalIso (Over.pullback f) =
251+ Over.isoMk (asIso (pullback.snd (𝟙 _) f)) (by simp) := by
252+ ext1; exact toUnit_unique _ _
253+
254+ @[simp]
255+ lemma prodComparisonIso_pullback_inv_left_fst_fst (f : X ⟶ Y) (A B : Over Y) :
256+ (prodComparisonIso (Over.pullback f) A B).inv.left ≫
257+ pullback.fst (pullback.fst A.hom B.hom ≫ A.hom) f ≫ pullback.fst _ _ =
258+ pullback.fst (pullback.snd A.hom f) (pullback.snd B.hom f) ≫ pullback.fst _ _ := by
259+ rw [← cancel_epi (prodComparisonIso (Over.pullback f) A B).hom.left,
260+ Over.hom_left_inv_left_assoc]
261+ simp [CartesianMonoidalCategory.prodComparison, fst]
262+
263+ @[simp]
264+ lemma prodComparisonIso_pullback_Spec_inv_left_fst_fst' (f : X ⟶ Y) (gA : A ⟶ Y) (gB : B ⟶ Y) :
265+ (prodComparisonIso (Over.pullback f) (.mk gA) (.mk gB)).inv.left ≫
266+ pullback.fst (pullback.fst gA gB ≫ gA) f ≫ pullback.fst _ _ =
267+ pullback.fst (pullback.snd gA f) (pullback.snd gB f) ≫ pullback.fst _ _ :=
268+ prodComparisonIso_pullback_inv_left_fst_fst ..
269+
270+ @[simp]
271+ lemma prodComparisonIso_pullback_inv_left_fst_snd' (f : X ⟶ Y) (gA : A ⟶ Y) (gB : B ⟶ Y) :
272+ (prodComparisonIso (Over.pullback f) (.mk gA) (.mk gB)).inv.left ≫
273+ pullback.fst (pullback.fst gA gB ≫ gA) f ≫ pullback.snd _ _ =
274+ pullback.snd _ _ ≫ pullback.fst _ _ := by
275+ rw [← cancel_epi (prodComparisonIso (Over.pullback f) _ _).hom.left,
276+ Over.hom_left_inv_left_assoc]
277+ simp [CartesianMonoidalCategory.prodComparison, snd]
278+
279+ @[simp]
280+ lemma prodComparisonIso_pullback_inv_left_snd' (f : X ⟶ Y) (gA : A ⟶ Y) (gB : B ⟶ Y) :
281+ (prodComparisonIso (Over.pullback f) (.mk gA) (.mk gB)).inv.left ≫
282+ pullback.snd (pullback.fst gA gB ≫ gA) f = pullback.snd _ _ ≫ pullback.snd _ _ := by
283+ rw [← cancel_epi (prodComparisonIso (Over.pullback f) _ _).hom.left,
284+ Over.hom_left_inv_left_assoc]
285+ simp [CartesianMonoidalCategory.prodComparison]
286+
287+ /-- The pullback of a monoid object is a monoid object. -/
288+ @[simps! -isSimp mul one]
289+ abbrev monObjMkPullbackSnd [MonObj (Over.mk f)] : MonObj (Over.mk <| pullback.snd f g) :=
290+ ((Over.pullback g).mapMon.obj <| .mk <| .mk f).mon
291+
292+ attribute [local instance] monObjMkPullbackSnd
293+
294+ instance isCommMonObj_mk_pullbackSnd [MonObj (Over.mk f)] [IsCommMonObj (Over.mk f)] :
295+ IsCommMonObj (Over.mk <| pullback.snd f g) :=
296+ ((Over.pullback g).mapCommMon.obj <| .mk <| .mk f).comm
297+
298+ /-- The pullback of a monoid object is a monoid object. -/
299+ @[simps! -isSimp mul one]
300+ abbrev grpObjMkPullbackSnd [GrpObj (Over.mk f)] : GrpObj (Over.mk (pullback.snd f g)) :=
301+ ((Over.pullback g).mapGrp.obj <| .mk <| .mk f).grp
302+
303+ attribute [local simp] monObjMkPullbackSnd_one in
304+ instance isMonHom_pullbackFst_id_right [MonObj (Over.mk f)] :
305+ IsMonHom <| Over.homMk (U := Over.mk <| pullback.snd f (𝟙 X)) (V := Over.mk f)
306+ (pullback.fst f (𝟙 X)) (pullback.condition.trans <| by simp) where
307+ mul_hom := by
308+ ext
309+ dsimp [monObjMkPullbackSnd_mul]
310+ simp only [Category.assoc, limit.lift_π, PullbackCone.mk_pt, PullbackCone.mk_π_app]
311+ simp only [← Category.assoc]
312+ congr 1
313+ ext <;> simp
314+
188315end CategoryTheory.Over
0 commit comments