Skip to content

Commit 7a8ea2b

Browse files
committed
feat: commutative monoids are internal monoids (#29765)
From Toric
1 parent 5f38c9e commit 7a8ea2b

File tree

3 files changed

+76
-8
lines changed

3 files changed

+76
-8
lines changed

Mathlib/CategoryTheory/Monoidal/Cartesian/Grp_.lean

Lines changed: 49 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Andrew Yang
55
-/
66
import Mathlib.Algebra.Category.Grp.Limits
7+
import Mathlib.CategoryTheory.Monoidal.Cartesian.Mon_
78
import 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

195198
attribute [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

201247
scoped[CategoryTheory.MonObj] attribute [instance] Hom.commGroup
202248

Mathlib/CategoryTheory/Monoidal/Cartesian/Mon_.lean

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,7 @@ end MonObj
6464
namespace Mon
6565
variable [BraidedCategory C]
6666

67-
attribute [local simp] tensorObj.one_def tensorObj.mul_def
68-
67+
attribute [local simp] tensorObj.one_def tensorObj.mul_def in
6968
instance : CartesianMonoidalCategory (Mon C) where
7069
isTerminalTensorUnit := .ofUniqueHom (fun M ↦ ⟨toUnit _⟩) fun M f ↦ by ext; exact toUnit_unique ..
7170
fst M N := .mk (fst M.X N.X)
@@ -76,12 +75,25 @@ instance : CartesianMonoidalCategory (Mon C) where
7675
fst_def M N := by ext; simp [fst_def]; congr
7776
snd_def M N := by ext; simp [snd_def]; congr
7877

79-
variable {M N₁ N₂ : Mon C}
78+
variable {M N N₁ N₂ : Mon C}
8079

8180
@[simp] lemma lift_hom (f : M ⟶ N₁) (g : M ⟶ N₂) : (lift f g).hom = lift f.hom g.hom := rfl
8281
@[simp] lemma fst_hom (M N : Mon C) : (fst M N).hom = fst M.X N.X := rfl
8382
@[simp] lemma snd_hom (M N : Mon C) : (snd M N).hom = snd M.X N.X := rfl
8483

84+
/-! ### Comm monoid objects are internal monoid objects -/
85+
86+
/-- A commutative monoid object is a monoid object in the category of monoid objects. -/
87+
instance [IsCommMonObj M.X] : MonObj M where
88+
one := .mk η[M.X]
89+
mul := .mk μ[M.X]
90+
91+
@[simp] lemma hom_one (M : Mon C) [IsCommMonObj M.X] : η[M].hom = η[M.X] := rfl
92+
@[simp] lemma hom_mul (M : Mon C) [IsCommMonObj M.X] : μ[M].hom = μ[M.X] := rfl
93+
94+
/-- A commutative monoid object is a commutative monoid object in the category of monoid objects. -/
95+
instance [IsCommMonObj M.X] : IsCommMonObj M where
96+
8597
end Mon
8698

8799
variable (X) in
@@ -188,6 +200,16 @@ variable [BraidedCategory C]
188200
abbrev Hom.commMonoid [IsCommMonObj M] : CommMonoid (X ⟶ M) where
189201
mul_comm f g := by simpa [-IsCommMonObj.mul_comm] using lift g f ≫= IsCommMonObj.mul_comm M
190202

203+
namespace Mon.Hom
204+
variable {M N : Mon C} [IsCommMonObj N.X]
205+
206+
@[simp] lemma hom_one : (1 : M ⟶ N).hom = 1 := rfl
207+
@[simp] lemma hom_mul (f g : M ⟶ N) : (f * g).hom = f.hom * g.hom := rfl
208+
@[simp] lemma hom_pow (f : M ⟶ N) (n : ℕ) : (f ^ n).hom = f.hom ^ n := by
209+
induction n <;> simp [pow_succ, *]
210+
211+
end Mon.Hom
212+
191213
scoped[CategoryTheory.MonObj] attribute [instance] Hom.commMonoid
192214

193215
end BraidedCategory

Mathlib/CategoryTheory/Monoidal/Grp_.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ attribute [instance] Grp.grp
6565
namespace Grp
6666

6767
/-- A group object is a monoid object. -/
68-
@[simps X]
69-
def toMon (A : Grp C) : Mon C := ⟨A.X⟩
68+
@[simps -isSimp X]
69+
abbrev toMon (A : Grp C) : Mon C := ⟨A.X⟩
7070

7171
@[deprecated (since := "2025-09-15")] alias toMon_ := toMon
7272

0 commit comments

Comments
 (0)