@@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
44Authors: Andrew Yang
55-/
66import Mathlib.Algebra.Category.Grp.Limits
7+ import Mathlib.CategoryTheory.Monoidal.Cartesian.Mon_
78import Mathlib.CategoryTheory.Monoidal.Grp_
89
910/-!
@@ -188,15 +189,60 @@ lemma GrpObj.one_inv : η[G] ≫ ι = η := by simp [GrpObj.inv_eq_inv, GrpObj.c
188189
189190@[deprecated (since := "2025-09-13")] alias Grp_Class.inv_eq_inv := GrpObj.inv_eq_inv
190191
191- instance [BraidedCategory C] [IsCommMonObj G] : IsMonHom ι[G] where
192+ variable [BraidedCategory C]
193+
194+ instance [IsCommMonObj G] : IsMonHom ι[G] where
192195 one_hom := by simp [one_eq_one, ← Hom.inv_def]
193196 mul_hom := by simp [GrpObj.mul_inv_rev]
194197
195198attribute [local simp] Hom.inv_def in
196- instance [BraidedCategory C] [IsCommMonObj G] {f : M ⟶ G} [IsMonHom f] : IsMonHom f⁻¹ where
199+ instance [IsCommMonObj G] {f : M ⟶ G} [IsMonHom f] : IsMonHom f⁻¹ where
200+
201+ namespace Grp
202+ variable {G H : Grp C} [IsCommMonObj H.X]
203+
204+ instance : MonObj H where
205+ one := η[H.toMon]
206+ mul := μ[H.toMon]
207+ one_mul := MonObj.one_mul H.toMon
208+ mul_one := MonObj.mul_one H.toMon
209+ mul_assoc := MonObj.mul_assoc H.toMon
210+
211+ @[simp] lemma hom_one (H : Grp C) [IsCommMonObj H.X] : η[H].hom = η[H.X] := rfl
212+ @[simp] lemma hom_mul (H : Grp C) [IsCommMonObj H.X] : μ[H].hom = μ[H.X] := rfl
213+
214+ namespace Hom
215+
216+ @[simp] lemma hom_one : (1 : G ⟶ H).hom = 1 := rfl
217+ @[simp] lemma hom_mul (f g : G ⟶ H) : (f * g).hom = f.hom * g.hom := rfl
218+ @[simp] lemma hom_pow (f : G ⟶ H) (n : ℕ) : (f ^ n).hom = f.hom ^ n := Mon.Hom.hom_pow ..
219+
220+ end Hom
221+
222+ attribute [local simp] mul_eq_mul GrpObj.inv_eq_inv comp_mul in
223+ /-- A commutative group object is a group object in the category of group objects. -/
224+ instance : GrpObj H where inv := .mk ι[H.X]
225+
226+ namespace Hom
227+
228+ @[simp] lemma hom_inv (f : G ⟶ H) : f⁻¹.hom = f.hom⁻¹ := rfl
229+ @[simp] lemma hom_div (f g : G ⟶ H) : (f / g).hom = f.hom / g.hom := rfl
230+ @[simp] lemma hom_zpow (f : G ⟶ H) (n : ℤ) : (f ^ n).hom = f.hom ^ n := by cases n <;> simp
231+
232+ end Hom
233+
234+ attribute [local simp] mul_eq_mul comp_mul mul_comm mul_div_mul_comm in
235+ /-- A commutative group object is a commutative group object in the category of group objects. -/
236+ instance : IsCommMonObj H where
237+
238+ instance [IsCommMonObj G.X] (f : G ⟶ H) : IsMonHom f where
239+ one_hom := by ext; simp [Grp.instMonObj]
240+ mul_hom := by ext; simp [Grp.instMonObj]
241+
242+ end Grp
197243
198244/-- If `G` is a commutative group object, then `Hom(X, G)` has a commutative group structure. -/
199- abbrev Hom.commGroup [BraidedCategory C] [ IsCommMonObj G] : CommGroup (X ⟶ G) where
245+ abbrev Hom.commGroup [IsCommMonObj G] : CommGroup (X ⟶ G) where
200246
201247scoped [CategoryTheory.MonObj] attribute [instance] Hom.commGroup
202248
0 commit comments