File: Mathlib/CategoryTheory/Monoidal/CommMon_.lean

full_name: CommMon_.mul_comm
code: /-- A commutative monoid object internal to a monoidal category.
-/
structure CommMon_ extends Mon_ C where
  mul_comm : (β_ _ _).hom ≫ mul = mul := by aesop_cat
goal: (β_ self.X self.X).hom ≫ self.mul = self.mul

full_name: CommMon_
code: /-- A commutative monoid object internal to a monoidal category.
-/
structure CommMon_ extends Mon_ C where
  mul_comm : (β_ _ _).hom ≫ mul = mul := by aesop_cat
goal: Type (max u₁ v₁)

full_name: CommMon_.trivial
code: /-- The trivial commutative monoid object. We later show this is initial in `CommMon_ C`.
-/
@[simps!]
def trivial : CommMon_ C 
goal: CommMon_ C

full_name: CommMon_.trivial_X
code: /-- The trivial commutative monoid object. We later show this is initial in `CommMon_ C`.
-/
@[simps!]
def trivial : CommMon_ C 
goal: (CommMon_.trivial C).X = 𝟙_ C

full_name: CommMon_.trivial_one
code: /-- The trivial commutative monoid object. We later show this is initial in `CommMon_ C`.
-/
@[simps!]
def trivial : CommMon_ C 
goal: (CommMon_.trivial C).one = 𝟙 (𝟙_ C)

full_name: CommMon_.trivial_mul
code: /-- The trivial commutative monoid object. We later show this is initial in `CommMon_ C`.
-/
@[simps!]
def trivial : CommMon_ C 
goal: (CommMon_.trivial C).mul = (λ_ (𝟙_ C)).hom

full_name: CommMon_.instInhabited
code: instance : Inhabited (CommMon_ C) 
goal: Inhabited (CommMon_ C)

full_name: CommMon_.instCategory
code: instance : Category (CommMon_ C) 
goal: CategoryTheory.Category.{v₁, max u₁ v₁} (CommMon_ C)

full_name: CommMon_.id_hom
code: @[simp]
theorem id_hom (A : CommMon_ C) : Mon_.Hom.hom (𝟙 A) = 𝟙 A.X 
goal: (𝟙 A).hom = 𝟙 A.X

full_name: CommMon_.comp_hom
code: @[simp]
theorem comp_hom {R S T : CommMon_ C} (f : R ⟶ S) (g : S ⟶ T) :
    Mon_.Hom.hom (f ≫ g) = f.hom ≫ g.hom 
goal: (f ≫ g).hom = f.hom ≫ g.hom

full_name: CommMon_.hom_ext
code: @[ext]
lemma hom_ext {A B : CommMon_ C} (f g : A ⟶ B) (h : f.hom = g.hom) : f = g 
goal: f = g

full_name: CommMon_.id'
code: @[simp]
lemma id' (A : CommMon_ C) : (𝟙 A : A.toMon_ ⟶ A.toMon_) = 𝟙 (A.toMon_) 
goal: 𝟙 A = 𝟙 A.toMon_

full_name: CommMon_.comp'
code: @[simp]
lemma comp' {A₁ A₂ A₃ : CommMon_ C} (f : A₁ ⟶ A₂) (g : A₂ ⟶ A₃) :
    ((f ≫ g : A₁ ⟶ A₃) : A₁.toMon_ ⟶ A₃.toMon_) = @CategoryStruct.comp (Mon_ C) _ _ _ _ f g 
goal: f ≫ g = f ≫ g

full_name: CommMon_.forget₂Mon_
code: /-- The forgetful functor from commutative monoid objects to monoid objects. -/
def forget₂Mon_ : CommMon_ C ⥤ Mon_ C 
goal: CommMon_ C ⥤ Mon_ C

full_name: CommMon_.instFullMon_Forget₂Mon_
code: instance : (forget₂Mon_ C).Full 
goal: (CommMon_.forget₂Mon_ C).Full

full_name: CommMon_.instFaithfulMon_Forget₂Mon_
code: instance : (forget₂Mon_ C).Faithful 
goal: (CommMon_.forget₂Mon_ C).Faithful

full_name: CommMon_.forget₂_Mon_obj_one
code: @[simp]
theorem forget₂_Mon_obj_one (A : CommMon_ C) : ((forget₂Mon_ C).obj A).one = A.one 
goal: ((CommMon_.forget₂Mon_ C).obj A).one = A.one

full_name: CommMon_.forget₂_Mon_obj_mul
code: @[simp]
theorem forget₂_Mon_obj_mul (A : CommMon_ C) : ((forget₂Mon_ C).obj A).mul = A.mul 
goal: ((CommMon_.forget₂Mon_ C).obj A).mul = A.mul

full_name: CommMon_.forget₂_Mon_map_hom
code: @[simp]
theorem forget₂_Mon_map_hom {A B : CommMon_ C} (f : A ⟶ B) : ((forget₂Mon_ C).map f).hom = f.hom 
goal: ((CommMon_.forget₂Mon_ C).map f).hom = f.hom

full_name: CommMon_.uniqueHomFromTrivial
code: instance uniqueHomFromTrivial (A : CommMon_ C) : Unique (trivial C ⟶ A) 
goal: Unique (CommMon_.trivial C ⟶ A)

full_name: CommMon_.instHasInitial
code: instance : HasInitial (CommMon_ C) 
goal: CategoryTheory.Limits.HasInitial (CommMon_ C)

full_name: CategoryTheory.LaxBraidedFunctor.mapCommMon_obj_X
code: /-- A lax braided functor takes commutative monoid objects to commutative monoid objects.

That is, a lax braided functor `F : C ⥤ D` induces a functor `CommMon_ C ⥤ CommMon_ D`.
-/
@[simps!]
def mapCommMon (F : LaxBraidedFunctor C D) : CommMon_ C ⥤ CommMon_ D 
goal: (F.mapCommMon.obj A).X = F.obj A.X

full_name: CategoryTheory.LaxBraidedFunctor.mapCommMon_map_hom
code: /-- A lax braided functor takes commutative monoid objects to commutative monoid objects.

That is, a lax braided functor `F : C ⥤ D` induces a functor `CommMon_ C ⥤ CommMon_ D`.
-/
@[simps!]
def mapCommMon (F : LaxBraidedFunctor C D) : CommMon_ C ⥤ CommMon_ D 
goal: ∀ {X Y : CommMon_ C} (f : X ⟶ Y), (F.mapCommMon.map f).hom = F.map f.hom

full_name: CategoryTheory.LaxBraidedFunctor.mapCommMon
code: /-- A lax braided functor takes commutative monoid objects to commutative monoid objects.

That is, a lax braided functor `F : C ⥤ D` induces a functor `CommMon_ C ⥤ CommMon_ D`.
-/
@[simps!]
def mapCommMon (F : LaxBraidedFunctor C D) : CommMon_ C ⥤ CommMon_ D 
goal: CommMon_ C ⥤ CommMon_ D

full_name: CategoryTheory.LaxBraidedFunctor.mapCommMon_obj_mul
code: /-- A lax braided functor takes commutative monoid objects to commutative monoid objects.

That is, a lax braided functor `F : C ⥤ D` induces a functor `CommMon_ C ⥤ CommMon_ D`.
-/
@[simps!]
def mapCommMon (F : LaxBraidedFunctor C D) : CommMon_ C ⥤ CommMon_ D 
goal: (F.mapCommMon.obj A).mul = F.μ A.X A.X ≫ F.map A.mul

full_name: CategoryTheory.LaxBraidedFunctor.mapCommMon_obj_one
code: /-- A lax braided functor takes commutative monoid objects to commutative monoid objects.

That is, a lax braided functor `F : C ⥤ D` induces a functor `CommMon_ C ⥤ CommMon_ D`.
-/
@[simps!]
def mapCommMon (F : LaxBraidedFunctor C D) : CommMon_ C ⥤ CommMon_ D 
goal: (F.mapCommMon.obj A).one = F.ε ≫ F.map A.one

full_name: CategoryTheory.LaxBraidedFunctor.mapCommMonFunctor
code: /-- `mapCommMon` is functorial in the lax braided functor. -/
@[simps]
def mapCommMonFunctor : LaxBraidedFunctor C D ⥤ CommMon_ C ⥤ CommMon_ D 
goal: CategoryTheory.LaxBraidedFunctor C D ⥤ CommMon_ C ⥤ CommMon_ D

full_name: CategoryTheory.LaxBraidedFunctor.mapCommMonFunctor_map_app_hom
code: /-- `mapCommMon` is functorial in the lax braided functor. -/
@[simps]
def mapCommMonFunctor : LaxBraidedFunctor C D ⥤ CommMon_ C ⥤ CommMon_ D 
goal: ∀ {X Y : CategoryTheory.LaxBraidedFunctor C D} (α : X ⟶ Y) (A : CommMon_ C),
  (((CategoryTheory.LaxBraidedFunctor.mapCommMonFunctor C D).map α).app A).hom = α.app A.X

full_name: CategoryTheory.LaxBraidedFunctor.mapCommMonFunctor_obj
code: /-- `mapCommMon` is functorial in the lax braided functor. -/
@[simps]
def mapCommMonFunctor : LaxBraidedFunctor C D ⥤ CommMon_ C ⥤ CommMon_ D 
goal: (CategoryTheory.LaxBraidedFunctor.mapCommMonFunctor C D).obj F = F.mapCommMon

full_name: CommMon_.EquivLaxBraidedFunctorPUnit.laxBraidedToCommMon_obj
code: /-- Implementation of `CommMon_.equivLaxBraidedFunctorPUnit`. -/
@[simps]
def laxBraidedToCommMon : LaxBraidedFunctor (Discrete PUnit.{u + 1}) C ⥤ CommMon_ C 
goal: (CommMon_.EquivLaxBraidedFunctorPUnit.laxBraidedToCommMon C).obj F =
  F.mapCommMon.obj (CommMon_.trivial (CategoryTheory.Discrete PUnit.{u + 1}))

full_name: CommMon_.EquivLaxBraidedFunctorPUnit.laxBraidedToCommMon
code: /-- Implementation of `CommMon_.equivLaxBraidedFunctorPUnit`. -/
@[simps]
def laxBraidedToCommMon : LaxBraidedFunctor (Discrete PUnit.{u + 1}) C ⥤ CommMon_ C 
goal: CategoryTheory.LaxBraidedFunctor (CategoryTheory.Discrete PUnit.{u + 1}) C ⥤ CommMon_ C

full_name: CommMon_.EquivLaxBraidedFunctorPUnit.laxBraidedToCommMon_map
code: /-- Implementation of `CommMon_.equivLaxBraidedFunctorPUnit`. -/
@[simps]
def laxBraidedToCommMon : LaxBraidedFunctor (Discrete PUnit.{u + 1}) C ⥤ CommMon_ C 
goal: ∀ {X Y : CategoryTheory.LaxBraidedFunctor (CategoryTheory.Discrete PUnit.{u + 1}) C} (α : X ⟶ Y),
  (CommMon_.EquivLaxBraidedFunctorPUnit.laxBraidedToCommMon C).map α =
    ((CategoryTheory.LaxBraidedFunctor.mapCommMonFunctor (CategoryTheory.Discrete PUnit.{u + 1}) C).map α).app
      (CommMon_.trivial (CategoryTheory.Discrete PUnit.{u + 1}))

full_name: CommMon_.EquivLaxBraidedFunctorPUnit.commMonToLaxBraided_obj_map
code: /-- Implementation of `CommMon_.equivLaxBraidedFunctorPunit`. -/
@[simps]
def commMonToLaxBraided : CommMon_ C ⥤ LaxBraidedFunctor (Discrete PUnit.{u + 1}) C 
goal: ∀ {X Y : CategoryTheory.Discrete PUnit.{u + 1}} (x : X ⟶ Y),
  ((CommMon_.EquivLaxBraidedFunctorPUnit.commMonToLaxBraided C).obj A).map x = 𝟙 ((fun x => A.X) X)

full_name: CommMon_.EquivLaxBraidedFunctorPUnit.commMonToLaxBraided_obj_obj
code: /-- Implementation of `CommMon_.equivLaxBraidedFunctorPunit`. -/
@[simps]
def commMonToLaxBraided : CommMon_ C ⥤ LaxBraidedFunctor (Discrete PUnit.{u + 1}) C 
goal: ∀ (x : CategoryTheory.Discrete PUnit.{u + 1}),
  ((CommMon_.EquivLaxBraidedFunctorPUnit.commMonToLaxBraided C).obj A).obj x = A.X

full_name: CommMon_.EquivLaxBraidedFunctorPUnit.commMonToLaxBraided_obj_μ
code: /-- Implementation of `CommMon_.equivLaxBraidedFunctorPunit`. -/
@[simps]
def commMonToLaxBraided : CommMon_ C ⥤ LaxBraidedFunctor (Discrete PUnit.{u + 1}) C 
goal: ∀ (x x_1 : CategoryTheory.Discrete PUnit.{u + 1}),
  ((CommMon_.EquivLaxBraidedFunctorPUnit.commMonToLaxBraided C).obj A).μ x x_1 = A.mul

full_name: CommMon_.EquivLaxBraidedFunctorPUnit.commMonToLaxBraided_obj_ε
code: /-- Implementation of `CommMon_.equivLaxBraidedFunctorPunit`. -/
@[simps]
def commMonToLaxBraided : CommMon_ C ⥤ LaxBraidedFunctor (Discrete PUnit.{u + 1}) C 
goal: ((CommMon_.EquivLaxBraidedFunctorPUnit.commMonToLaxBraided C).obj A).ε = A.one

full_name: CommMon_.EquivLaxBraidedFunctorPUnit.commMonToLaxBraided
code: /-- Implementation of `CommMon_.equivLaxBraidedFunctorPunit`. -/
@[simps]
def commMonToLaxBraided : CommMon_ C ⥤ LaxBraidedFunctor (Discrete PUnit.{u + 1}) C 
goal: CommMon_ C ⥤ CategoryTheory.LaxBraidedFunctor (CategoryTheory.Discrete PUnit.{u + 1}) C

full_name: CommMon_.EquivLaxBraidedFunctorPUnit.commMonToLaxBraided_map_toNatTrans_app
code: /-- Implementation of `CommMon_.equivLaxBraidedFunctorPunit`. -/
@[simps]
def commMonToLaxBraided : CommMon_ C ⥤ LaxBraidedFunctor (Discrete PUnit.{u + 1}) C 
goal: ∀ {X Y : CommMon_ C} (f : X ⟶ Y) (x : CategoryTheory.Discrete PUnit.{u + 1}),
  ((CommMon_.EquivLaxBraidedFunctorPUnit.commMonToLaxBraided C).map f).app x = f.hom

full_name: CommMon_.EquivLaxBraidedFunctorPUnit.unitIso
code: /-- Implementation of `CommMon_.equivLaxBraidedFunctorPUnit`. -/
@[simps!]
def unitIso :
    𝟭 (LaxBraidedFunctor (Discrete PUnit.{u + 1}) C) ≅
      laxBraidedToCommMon C ⋙ commMonToLaxBraided C 
goal: 𝟭 (CategoryTheory.LaxBraidedFunctor (CategoryTheory.Discrete PUnit.{u + 1}) C) ≅
  CommMon_.EquivLaxBraidedFunctorPUnit.laxBraidedToCommMon C ⋙
    CommMon_.EquivLaxBraidedFunctorPUnit.commMonToLaxBraided C

full_name: CommMon_.EquivLaxBraidedFunctorPUnit.unitIso_hom_app_toNatTrans_app
code: /-- Implementation of `CommMon_.equivLaxBraidedFunctorPUnit`. -/
@[simps!]
def unitIso :
    𝟭 (LaxBraidedFunctor (Discrete PUnit.{u + 1}) C) ≅
      laxBraidedToCommMon C ⋙ commMonToLaxBraided C 
goal: ∀ (X_1 : CategoryTheory.Discrete PUnit.{u + 1}),
  ((CommMon_.EquivLaxBraidedFunctorPUnit.unitIso C).hom.app X).app X_1 = 𝟙 (X.obj X_1)

full_name: CommMon_.EquivLaxBraidedFunctorPUnit.unitIso_inv_app_toNatTrans_app
code: /-- Implementation of `CommMon_.equivLaxBraidedFunctorPUnit`. -/
@[simps!]
def unitIso :
    𝟭 (LaxBraidedFunctor (Discrete PUnit.{u + 1}) C) ≅
      laxBraidedToCommMon C ⋙ commMonToLaxBraided C 
goal: ∀ (X_1 : CategoryTheory.Discrete PUnit.{u + 1}),
  ((CommMon_.EquivLaxBraidedFunctorPUnit.unitIso C).inv.app X).app X_1 =
    𝟙 (X.obj (𝟙_ (CategoryTheory.Discrete PUnit.{u + 1})))

full_name: CommMon_.EquivLaxBraidedFunctorPUnit.counitIso
code: /-- Implementation of `CommMon_.equivLaxBraidedFunctorPUnit`. -/
@[simps!]
def counitIso : commMonToLaxBraided C ⋙ laxBraidedToCommMon C ≅ 𝟭 (CommMon_ C) 
goal: CommMon_.EquivLaxBraidedFunctorPUnit.commMonToLaxBraided C ⋙
    CommMon_.EquivLaxBraidedFunctorPUnit.laxBraidedToCommMon C ≅
  𝟭 (CommMon_ C)

full_name: CommMon_.EquivLaxBraidedFunctorPUnit.counitIso_hom_app_hom
code: /-- Implementation of `CommMon_.equivLaxBraidedFunctorPUnit`. -/
@[simps!]
def counitIso : commMonToLaxBraided C ⋙ laxBraidedToCommMon C ≅ 𝟭 (CommMon_ C) 
goal: ((CommMon_.EquivLaxBraidedFunctorPUnit.counitIso C).hom.app X).hom = 𝟙 X.X

full_name: CommMon_.EquivLaxBraidedFunctorPUnit.counitIso_inv_app_hom
code: /-- Implementation of `CommMon_.equivLaxBraidedFunctorPUnit`. -/
@[simps!]
def counitIso : commMonToLaxBraided C ⋙ laxBraidedToCommMon C ≅ 𝟭 (CommMon_ C) 
goal: ((CommMon_.EquivLaxBraidedFunctorPUnit.counitIso C).inv.app X).hom = 𝟙 X.X

full_name: CommMon_.equivLaxBraidedFunctorPUnit_unitIso
code: /-- Commutative monoid objects in `C` are "just" braided lax monoidal functors from the trivial
braided monoidal category to `C`.
-/
@[simps]
def equivLaxBraidedFunctorPUnit : LaxBraidedFunctor (Discrete PUnit.{u + 1}) C ≌ CommMon_ C 
goal: (CommMon_.equivLaxBraidedFunctorPUnit C).unitIso = CommMon_.EquivLaxBraidedFunctorPUnit.unitIso C

full_name: CommMon_.equivLaxBraidedFunctorPUnit_counitIso
code: /-- Commutative monoid objects in `C` are "just" braided lax monoidal functors from the trivial
braided monoidal category to `C`.
-/
@[simps]
def equivLaxBraidedFunctorPUnit : LaxBraidedFunctor (Discrete PUnit.{u + 1}) C ≌ CommMon_ C 
goal: (CommMon_.equivLaxBraidedFunctorPUnit C).counitIso = CommMon_.EquivLaxBraidedFunctorPUnit.counitIso C

full_name: CommMon_.equivLaxBraidedFunctorPUnit_functor
code: /-- Commutative monoid objects in `C` are "just" braided lax monoidal functors from the trivial
braided monoidal category to `C`.
-/
@[simps]
def equivLaxBraidedFunctorPUnit : LaxBraidedFunctor (Discrete PUnit.{u + 1}) C ≌ CommMon_ C 
goal: (CommMon_.equivLaxBraidedFunctorPUnit C).functor = CommMon_.EquivLaxBraidedFunctorPUnit.laxBraidedToCommMon C

full_name: CommMon_.equivLaxBraidedFunctorPUnit_inverse
code: /-- Commutative monoid objects in `C` are "just" braided lax monoidal functors from the trivial
braided monoidal category to `C`.
-/
@[simps]
def equivLaxBraidedFunctorPUnit : LaxBraidedFunctor (Discrete PUnit.{u + 1}) C ≌ CommMon_ C 
goal: (CommMon_.equivLaxBraidedFunctorPUnit C).inverse = CommMon_.EquivLaxBraidedFunctorPUnit.commMonToLaxBraided C

full_name: CommMon_.equivLaxBraidedFunctorPUnit
code: /-- Commutative monoid objects in `C` are "just" braided lax monoidal functors from the trivial
braided monoidal category to `C`.
-/
@[simps]
def equivLaxBraidedFunctorPUnit : LaxBraidedFunctor (Discrete PUnit.{u + 1}) C ≌ CommMon_ C 
goal: CategoryTheory.LaxBraidedFunctor (CategoryTheory.Discrete PUnit.{u + 1}) C ≌ CommMon_ C