@@ -29,6 +29,21 @@ section SemiCartesianMonoidalCategory
2929
3030variable {D : Type *} [Category* D] [SemiCartesianMonoidalCategory D]
3131
32+ namespace MonObj
33+
34+ @[to_additive]
35+ instance (M : D) [MonObj M] : IsMonHom (toUnit M) where
36+
37+ @[to_additive]
38+ instance (M : D) [MonObj M] : IsMonHom η[M] where
39+ mul_hom := by simp [toUnit_unique (ρ_ (𝟙_ D)).hom (λ_ (𝟙_ D)).hom]
40+
41+ -- The general `(f : 𝟙_ C ⟶ X) : Mono f` instance has a bad discrimination tree key.
42+ @[to_additive]
43+ instance (M : D) [MonObj M] : Mono η[M] := Limits.IsTerminal.mono_from isTerminalTensorUnit _
44+
45+ end MonObj
46+
3247set_option backward.defeqAttrib.useBackward true in
3348@ [to_additive (attr := simps)]
3449instance Mon.uniqueHomToTrivial (A : Mon D) : Unique (A ⟶ Mon.trivial D) where
@@ -278,6 +293,24 @@ scoped[CategoryTheory.MonObj] attribute [instance] Hom.commMonoid Hom.addCommMon
278293
279294end BraidedCategory
280295
296+ /-- A monoid morphism `f : M ⟶ N` induces a monoid homomorphism `M(X) →* N(X)` for every `X`. -/
297+ @ [to_additive (attr := simps!)
298+ /-- An additive monoid morphism `f : M ⟶ N` induces an additive monoid homomorphism
299+ `M(X) →+ N(X)` for every `X`. -/ ]
300+ def IsMonHom.monoidHom (f : M ⟶ N) [IsMonHom f] (X : C) : (X ⟶ M) →* (X ⟶ N) where
301+ toFun := (· ≫ f)
302+ map_one' := by simp [Hom.one_def]
303+ map_mul' := by simp [Hom.mul_def]
304+
305+ @ [to_additive (attr := simp)]
306+ lemma IsMonHom.monoidHom_id : IsMonHom.monoidHom (𝟙 M) X = MonoidHom.id _ := by
307+ cat_disch
308+
309+ @ [to_additive (attr := simp)]
310+ lemma IsMonHom.monoidHom_comp (f : M ⟶ N) (g : N ⟶ O) [IsMonHom f] [IsMonHom g] :
311+ IsMonHom.monoidHom (f ≫ g) X = MonoidHom.comp (monoidHom g X) (monoidHom f X) := by
312+ cat_disch
313+
281314variable (M) in
282315/-- If `M` is a monoid object, then `Hom(-, M)` is a presheaf of monoids. -/
283316@ [to_additive (attr := simps)
@@ -321,15 +354,11 @@ def yonedaMonObjIsoOfRepresentableBy
321354/-- The yoneda embedding of `AddMon C` into presheaves of additive monoids. -/ ]
322355def yonedaMon : Mon C ⥤ Cᵒᵖ ⥤ MonCat.{v} where
323356 obj M := yonedaMonObj M.X
324- map {M N} ψ :=
325- { app Y := MonCat.ofHom
326- { toFun := (· ≫ ψ.hom)
327- map_one' := by simp [Hom.one_def, Hom.one_def]
328- map_mul' φ₁ φ₂ := by simp [Hom.mul_def] }
329- naturality {M N} φ := MonCat.hom_ext <| MonoidHom.ext fun f ↦ Category.assoc φ.unop f ψ.hom }
330- map_id M := NatTrans.ext <| funext fun _ ↦ MonCat.hom_ext <| MonoidHom.ext Category.comp_id
331- map_comp _ _ :=
332- NatTrans.ext <| funext fun _ ↦ MonCat.hom_ext <| MonoidHom.ext (.symm <| Category.assoc · _ _)
357+ map ψ :=
358+ { app _ := MonCat.ofHom <| IsMonHom.monoidHom _ _
359+ naturality {_ _} φ := MonCat.hom_ext <| MonoidHom.ext fun f ↦ Category.assoc φ.unop f ψ.hom }
360+ map_id _ := NatTrans.ext <| funext fun _ ↦ MonCat.hom_ext <| IsMonHom.monoidHom_id
361+ map_comp _ _ := NatTrans.ext <| funext fun _ ↦ MonCat.hom_ext <| IsMonHom.monoidHom_comp _ _
333362
334363@ [to_additive (attr := reassoc)]
335364lemma yonedaMon_naturality (α : yonedaMonObj M ⟶ yonedaMonObj N) (f : X ⟶ Y) (g : Y ⟶ M) :
@@ -372,9 +401,7 @@ def yonedaMonFullyFaithful : yonedaMon (C := C).FullyFaithful where
372401 ← yonedaMon_naturality, Category.comp_id] }
373402 map_preimage {M N} α := by
374403 ext Y f
375- dsimp only [yonedaMon_obj, yonedaMon_map_app, MonCat.hom_ofHom]
376- simp_rw [← yonedaMon_naturality]
377- simp
404+ simp [← dsimp% yonedaMon_naturality]
378405 preimage_map φ := Mon.Hom.ext (Category.id_comp φ.hom)
379406
380407@[to_additive]
0 commit comments