Theorem: CategoryTheory.Monoidal.MonFunctorCategoryEquivalence.functorObj_obj_mul
File: Mathlib/CategoryTheory/Monoidal/Internal/FunctorCategory.lean

Proof steps:
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
A : Mon_ (C ⥤ D)
X✝ Y✝ : C
f : X✝ ⟶ Y✝
⊢ ((fun X => { X := A.X.obj X, one := A.one.app X, mul := A.mul.app X, one_mul := ⋯, mul_one := ⋯, mul_assoc := ⋯ })
          X✝).one ≫
      A.X.map f =
    ((fun X => { X := A.X.obj X, one := A.one.app X, mul := A.mul.app X, one_mul := ⋯, mul_one := ⋯, mul_assoc := ⋯ })
        Y✝).one
state_after: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
A : Mon_ (C ⥤ D)
X✝ Y✝ : C
f : X✝ ⟶ Y✝
⊢ 𝟙 (𝟙_ D) ≫ A.one.app Y✝ =
    ((fun X => { X := A.X.obj X, one := A.one.app X, mul := A.mul.app X, one_mul := ⋯, mul_one := ⋯, mul_assoc := ⋯ })
        Y✝).one
tactic: rw [← A.one.naturality, tensorUnit_map]
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
A : Mon_ (C ⥤ D)
X✝ Y✝ : C
f : X✝ ⟶ Y✝
⊢ 𝟙 (𝟙_ D) ≫ A.one.app Y✝ =
    ((fun X => { X := A.X.obj X, one := A.one.app X, mul := A.mul.app X, one_mul := ⋯, mul_one := ⋯, mul_assoc := ⋯ })
        Y✝).one
state_after: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
A : Mon_ (C ⥤ D)
X✝ Y✝ : C
f : X✝ ⟶ Y✝
⊢ 𝟙 (𝟙_ D) ≫ A.one.app Y✝ = A.one.app Y✝
tactic: dsimp
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
A : Mon_ (C ⥤ D)
X✝ Y✝ : C
f : X✝ ⟶ Y✝
⊢ 𝟙 (𝟙_ D) ≫ A.one.app Y✝ = A.one.app Y✝
state_after: no goals
tactic: rw [Category.id_comp]
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
A : Mon_ (C ⥤ D)
X✝ Y✝ : C
f : X✝ ⟶ Y✝
⊢ ((fun X => { X := A.X.obj X, one := A.one.app X, mul := A.mul.app X, one_mul := ⋯, mul_one := ⋯, mul_assoc := ⋯ })
          X✝).mul ≫
      A.X.map f =
    (A.X.map f ⊗ A.X.map f) ≫
      ((fun X => { X := A.X.obj X, one := A.one.app X, mul := A.mul.app X, one_mul := ⋯, mul_one := ⋯, mul_assoc := ⋯ })
          Y✝).mul
state_after: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
A : Mon_ (C ⥤ D)
X✝ Y✝ : C
f : X✝ ⟶ Y✝
⊢ A.mul.app X✝ ≫ A.X.map f = (A.X.map f ⊗ A.X.map f) ≫ A.mul.app Y✝
tactic: dsimp
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
A : Mon_ (C ⥤ D)
X✝ Y✝ : C
f : X✝ ⟶ Y✝
⊢ A.mul.app X✝ ≫ A.X.map f = (A.X.map f ⊗ A.X.map f) ≫ A.mul.app Y✝
state_after: no goals
tactic: rw [← A.mul.naturality, tensorObj_map]
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
A : Mon_ (C ⥤ D)
X : C
⊢ {
          obj := fun X =>
            { X := A.X.obj X, one := A.one.app X, mul := A.mul.app X, one_mul := ⋯, mul_one := ⋯, mul_assoc := ⋯ },
          map := fun {X Y} f => { hom := A.X.map f, one_hom := ⋯, mul_hom := ⋯ } }.map
      (𝟙 X) =
    𝟙
      ({
            obj := fun X =>
              { X := A.X.obj X, one := A.one.app X, mul := A.mul.app X, one_mul := ⋯, mul_one := ⋯, mul_assoc := ⋯ },
            map := fun {X Y} f => { hom := A.X.map f, one_hom := ⋯, mul_hom := ⋯ } }.obj
        X)
state_after: case w
C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
A : Mon_ (C ⥤ D)
X : C
⊢ ({
            obj := fun X =>
              { X := A.X.obj X, one := A.one.app X, mul := A.mul.app X, one_mul := ⋯, mul_one := ⋯, mul_assoc := ⋯ },
            map := fun {X Y} f => { hom := A.X.map f, one_hom := ⋯, mul_hom := ⋯ } }.map
        (𝟙 X)).hom =
    (𝟙
        ({
              obj := fun X =>
                { X := A.X.obj X, one := A.one.app X, mul := A.mul.app X, one_mul := ⋯, mul_one := ⋯, mul_assoc := ⋯ },
              map := fun {X Y} f => { hom := A.X.map f, one_hom := ⋯, mul_hom := ⋯ } }.obj
          X)).hom
tactic: ext
state_before: case w
C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
A : Mon_ (C ⥤ D)
X : C
⊢ ({
            obj := fun X =>
              { X := A.X.obj X, one := A.one.app X, mul := A.mul.app X, one_mul := ⋯, mul_one := ⋯, mul_assoc := ⋯ },
            map := fun {X Y} f => { hom := A.X.map f, one_hom := ⋯, mul_hom := ⋯ } }.map
        (𝟙 X)).hom =
    (𝟙
        ({
              obj := fun X =>
                { X := A.X.obj X, one := A.one.app X, mul := A.mul.app X, one_mul := ⋯, mul_one := ⋯, mul_assoc := ⋯ },
              map := fun {X Y} f => { hom := A.X.map f, one_hom := ⋯, mul_hom := ⋯ } }.obj
          X)).hom
state_after: case w
C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
A : Mon_ (C ⥤ D)
X : C
⊢ A.X.map (𝟙 X) = 𝟙 (A.X.obj X)
tactic: dsimp
state_before: case w
C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
A : Mon_ (C ⥤ D)
X : C
⊢ A.X.map (𝟙 X) = 𝟙 (A.X.obj X)
state_after: no goals
tactic: rw [CategoryTheory.Functor.map_id]
state_before: C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
A : Mon_ (C ⥤ D)
X✝ Y✝ Z✝ : C
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
⊢ {
          obj := fun X =>
            { X := A.X.obj X, one := A.one.app X, mul := A.mul.app X, one_mul := ⋯, mul_one := ⋯, mul_assoc := ⋯ },
          map := fun {X Y} f => { hom := A.X.map f, one_hom := ⋯, mul_hom := ⋯ } }.map
      (f ≫ g) =
    {
            obj := fun X =>
              { X := A.X.obj X, one := A.one.app X, mul := A.mul.app X, one_mul := ⋯, mul_one := ⋯, mul_assoc := ⋯ },
            map := fun {X Y} f => { hom := A.X.map f, one_hom := ⋯, mul_hom := ⋯ } }.map
        f ≫
      {
            obj := fun X =>
              { X := A.X.obj X, one := A.one.app X, mul := A.mul.app X, one_mul := ⋯, mul_one := ⋯, mul_assoc := ⋯ },
            map := fun {X Y} f => { hom := A.X.map f, one_hom := ⋯, mul_hom := ⋯ } }.map
        g
state_after: case w
C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
A : Mon_ (C ⥤ D)
X✝ Y✝ Z✝ : C
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
⊢ ({
            obj := fun X =>
              { X := A.X.obj X, one := A.one.app X, mul := A.mul.app X, one_mul := ⋯, mul_one := ⋯, mul_assoc := ⋯ },
            map := fun {X Y} f => { hom := A.X.map f, one_hom := ⋯, mul_hom := ⋯ } }.map
        (f ≫ g)).hom =
    ({
              obj := fun X =>
                { X := A.X.obj X, one := A.one.app X, mul := A.mul.app X, one_mul := ⋯, mul_one := ⋯, mul_assoc := ⋯ },
              map := fun {X Y} f => { hom := A.X.map f, one_hom := ⋯, mul_hom := ⋯ } }.map
          f ≫
        {
              obj := fun X =>
                { X := A.X.obj X, one := A.one.app X, mul := A.mul.app X, one_mul := ⋯, mul_one := ⋯, mul_assoc := ⋯ },
              map := fun {X Y} f => { hom := A.X.map f, one_hom := ⋯, mul_hom := ⋯ } }.map
          g).hom
tactic: ext
state_before: case w
C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
A : Mon_ (C ⥤ D)
X✝ Y✝ Z✝ : C
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
⊢ ({
            obj := fun X =>
              { X := A.X.obj X, one := A.one.app X, mul := A.mul.app X, one_mul := ⋯, mul_one := ⋯, mul_assoc := ⋯ },
            map := fun {X Y} f => { hom := A.X.map f, one_hom := ⋯, mul_hom := ⋯ } }.map
        (f ≫ g)).hom =
    ({
              obj := fun X =>
                { X := A.X.obj X, one := A.one.app X, mul := A.mul.app X, one_mul := ⋯, mul_one := ⋯, mul_assoc := ⋯ },
              map := fun {X Y} f => { hom := A.X.map f, one_hom := ⋯, mul_hom := ⋯ } }.map
          f ≫
        {
              obj := fun X =>
                { X := A.X.obj X, one := A.one.app X, mul := A.mul.app X, one_mul := ⋯, mul_one := ⋯, mul_assoc := ⋯ },
              map := fun {X Y} f => { hom := A.X.map f, one_hom := ⋯, mul_hom := ⋯ } }.map
          g).hom
state_after: case w
C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
A : Mon_ (C ⥤ D)
X✝ Y✝ Z✝ : C
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
⊢ A.X.map (f ≫ g) = A.X.map f ≫ A.X.map g
tactic: dsimp
state_before: case w
C : Type u₁
inst✝² : Category.{v₁, u₁} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
A : Mon_ (C ⥤ D)
X✝ Y✝ Z✝ : C
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
⊢ A.X.map (f ≫ g) = A.X.map f ≫ A.X.map g
state_after: no goals
tactic: rw [Functor.map_comp]