Theorem: CategoryTheory.OplaxMonoidalFunctor.mapComon_map_hom
File: Mathlib/CategoryTheory/Monoidal/Comon_.lean

Proof steps:
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
inst✝² : MonoidalCategory C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
F : OplaxMonoidalFunctor C D
A : Comon_ C
⊢ (F.map A.comul ≫ F.δ A.X A.X) ≫ (F.map A.counit ≫ F.η) ▷ F.obj A.X = (λ_ (F.obj A.X)).inv
state_after: no goals
tactic: simp_rw [comp_whiskerRight, Category.assoc, F.δ_natural_left_assoc, F.left_unitality,
          ← F.map_comp_assoc, A.counit_comul]
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
inst✝² : MonoidalCategory C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
F : OplaxMonoidalFunctor C D
A : Comon_ C
⊢ (F.map A.comul ≫ F.δ A.X A.X) ≫ F.obj A.X ◁ (F.map A.counit ≫ F.η) = (ρ_ (F.obj A.X)).inv
state_after: no goals
tactic: simp_rw [MonoidalCategory.whiskerLeft_comp, Category.assoc, F.δ_natural_right_assoc,
          F.right_unitality, ← F.map_comp_assoc, A.comul_counit]
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
inst✝² : MonoidalCategory C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
F : OplaxMonoidalFunctor C D
A : Comon_ C
⊢ (F.map A.comul ≫ F.δ A.X A.X) ≫ F.obj A.X ◁ (F.map A.comul ≫ F.δ A.X A.X) =
    (F.map A.comul ≫ F.δ A.X A.X) ≫
      (F.map A.comul ≫ F.δ A.X A.X) ▷ F.obj A.X ≫ (α_ (F.obj A.X) (F.obj A.X) (F.obj A.X)).hom
state_after: no goals
tactic: simp_rw [comp_whiskerRight, Category.assoc, F.δ_natural_left_assoc,
          MonoidalCategory.whiskerLeft_comp, F.δ_natural_right_assoc,
          ← F.map_comp_assoc, A.comul_assoc, F.map_comp, Category.assoc, F.associativity]
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
inst✝² : MonoidalCategory C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
F : OplaxMonoidalFunctor C D
X✝ Y✝ : Comon_ C
f : X✝ ⟶ Y✝
⊢ F.map f.hom ≫
      ((fun A =>
            { X := F.obj A.X, counit := F.map A.counit ≫ F.η, comul := F.map A.comul ≫ F.δ A.X A.X, counit_comul := ⋯,
              comul_counit := ⋯, comul_assoc := ⋯ })
          Y✝).counit =
    ((fun A =>
          { X := F.obj A.X, counit := F.map A.counit ≫ F.η, comul := F.map A.comul ≫ F.δ A.X A.X, counit_comul := ⋯,
            comul_counit := ⋯, comul_assoc := ⋯ })
        X✝).counit
state_after: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
inst✝² : MonoidalCategory C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
F : OplaxMonoidalFunctor C D
X✝ Y✝ : Comon_ C
f : X✝ ⟶ Y✝
⊢ F.map f.hom ≫ F.map Y✝.counit ≫ F.η = F.map X✝.counit ≫ F.η
tactic: dsimp
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
inst✝² : MonoidalCategory C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
F : OplaxMonoidalFunctor C D
X✝ Y✝ : Comon_ C
f : X✝ ⟶ Y✝
⊢ F.map f.hom ≫ F.map Y✝.counit ≫ F.η = F.map X✝.counit ≫ F.η
state_after: no goals
tactic: rw [← F.map_comp_assoc, f.hom_counit]
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
inst✝² : MonoidalCategory C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
F : OplaxMonoidalFunctor C D
X✝ Y✝ : Comon_ C
f : X✝ ⟶ Y✝
⊢ F.map f.hom ≫
      ((fun A =>
            { X := F.obj A.X, counit := F.map A.counit ≫ F.η, comul := F.map A.comul ≫ F.δ A.X A.X, counit_comul := ⋯,
              comul_counit := ⋯, comul_assoc := ⋯ })
          Y✝).comul =
    ((fun A =>
            { X := F.obj A.X, counit := F.map A.counit ≫ F.η, comul := F.map A.comul ≫ F.δ A.X A.X, counit_comul := ⋯,
              comul_counit := ⋯, comul_assoc := ⋯ })
          X✝).comul ≫
      (F.map f.hom ⊗ F.map f.hom)
state_after: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
inst✝² : MonoidalCategory C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
F : OplaxMonoidalFunctor C D
X✝ Y✝ : Comon_ C
f : X✝ ⟶ Y✝
⊢ F.map f.hom ≫ F.map Y✝.comul ≫ F.δ Y✝.X Y✝.X = (F.map X✝.comul ≫ F.δ X✝.X X✝.X) ≫ (F.map f.hom ⊗ F.map f.hom)
tactic: dsimp
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
inst✝² : MonoidalCategory C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
F : OplaxMonoidalFunctor C D
X✝ Y✝ : Comon_ C
f : X✝ ⟶ Y✝
⊢ F.map f.hom ≫ F.map Y✝.comul ≫ F.δ Y✝.X Y✝.X = (F.map X✝.comul ≫ F.δ X✝.X X✝.X) ≫ (F.map f.hom ⊗ F.map f.hom)
state_after: no goals
tactic: rw [Category.assoc, F.δ_natural, ← F.map_comp_assoc, ← F.map_comp_assoc, f.hom_comul]
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
inst✝² : MonoidalCategory C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
F : OplaxMonoidalFunctor C D
A : Comon_ C
⊢ {
          obj := fun A =>
            { X := F.obj A.X, counit := F.map A.counit ≫ F.η, comul := F.map A.comul ≫ F.δ A.X A.X, counit_comul := ⋯,
              comul_counit := ⋯, comul_assoc := ⋯ },
          map := fun {X Y} f => { hom := F.map f.hom, hom_counit := ⋯, hom_comul := ⋯ } }.map
      (𝟙 A) =
    𝟙
      ({
            obj := fun A =>
              { X := F.obj A.X, counit := F.map A.counit ≫ F.η, comul := F.map A.comul ≫ F.δ A.X A.X, counit_comul := ⋯,
                comul_counit := ⋯, comul_assoc := ⋯ },
            map := fun {X Y} f => { hom := F.map f.hom, hom_counit := ⋯, hom_comul := ⋯ } }.obj
        A)
state_after: case w
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
inst✝² : MonoidalCategory C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
F : OplaxMonoidalFunctor C D
A : Comon_ C
⊢ ({
            obj := fun A =>
              { X := F.obj A.X, counit := F.map A.counit ≫ F.η, comul := F.map A.comul ≫ F.δ A.X A.X, counit_comul := ⋯,
                comul_counit := ⋯, comul_assoc := ⋯ },
            map := fun {X Y} f => { hom := F.map f.hom, hom_counit := ⋯, hom_comul := ⋯ } }.map
        (𝟙 A)).hom =
    (𝟙
        ({
              obj := fun A =>
                { X := F.obj A.X, counit := F.map A.counit ≫ F.η, comul := F.map A.comul ≫ F.δ A.X A.X,
                  counit_comul := ⋯, comul_counit := ⋯, comul_assoc := ⋯ },
              map := fun {X Y} f => { hom := F.map f.hom, hom_counit := ⋯, hom_comul := ⋯ } }.obj
          A)).hom
tactic: ext
state_before: case w
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
inst✝² : MonoidalCategory C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
F : OplaxMonoidalFunctor C D
A : Comon_ C
⊢ ({
            obj := fun A =>
              { X := F.obj A.X, counit := F.map A.counit ≫ F.η, comul := F.map A.comul ≫ F.δ A.X A.X, counit_comul := ⋯,
                comul_counit := ⋯, comul_assoc := ⋯ },
            map := fun {X Y} f => { hom := F.map f.hom, hom_counit := ⋯, hom_comul := ⋯ } }.map
        (𝟙 A)).hom =
    (𝟙
        ({
              obj := fun A =>
                { X := F.obj A.X, counit := F.map A.counit ≫ F.η, comul := F.map A.comul ≫ F.δ A.X A.X,
                  counit_comul := ⋯, comul_counit := ⋯, comul_assoc := ⋯ },
              map := fun {X Y} f => { hom := F.map f.hom, hom_counit := ⋯, hom_comul := ⋯ } }.obj
          A)).hom
state_after: no goals
tactic: simp
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
inst✝² : MonoidalCategory C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
F : OplaxMonoidalFunctor C D
X✝ Y✝ Z✝ : Comon_ C
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
⊢ {
          obj := fun A =>
            { X := F.obj A.X, counit := F.map A.counit ≫ F.η, comul := F.map A.comul ≫ F.δ A.X A.X, counit_comul := ⋯,
              comul_counit := ⋯, comul_assoc := ⋯ },
          map := fun {X Y} f => { hom := F.map f.hom, hom_counit := ⋯, hom_comul := ⋯ } }.map
      (f ≫ g) =
    {
            obj := fun A =>
              { X := F.obj A.X, counit := F.map A.counit ≫ F.η, comul := F.map A.comul ≫ F.δ A.X A.X, counit_comul := ⋯,
                comul_counit := ⋯, comul_assoc := ⋯ },
            map := fun {X Y} f => { hom := F.map f.hom, hom_counit := ⋯, hom_comul := ⋯ } }.map
        f ≫
      {
            obj := fun A =>
              { X := F.obj A.X, counit := F.map A.counit ≫ F.η, comul := F.map A.comul ≫ F.δ A.X A.X, counit_comul := ⋯,
                comul_counit := ⋯, comul_assoc := ⋯ },
            map := fun {X Y} f => { hom := F.map f.hom, hom_counit := ⋯, hom_comul := ⋯ } }.map
        g
state_after: case w
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
inst✝² : MonoidalCategory C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
F : OplaxMonoidalFunctor C D
X✝ Y✝ Z✝ : Comon_ C
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
⊢ ({
            obj := fun A =>
              { X := F.obj A.X, counit := F.map A.counit ≫ F.η, comul := F.map A.comul ≫ F.δ A.X A.X, counit_comul := ⋯,
                comul_counit := ⋯, comul_assoc := ⋯ },
            map := fun {X Y} f => { hom := F.map f.hom, hom_counit := ⋯, hom_comul := ⋯ } }.map
        (f ≫ g)).hom =
    ({
              obj := fun A =>
                { X := F.obj A.X, counit := F.map A.counit ≫ F.η, comul := F.map A.comul ≫ F.δ A.X A.X,
                  counit_comul := ⋯, comul_counit := ⋯, comul_assoc := ⋯ },
              map := fun {X Y} f => { hom := F.map f.hom, hom_counit := ⋯, hom_comul := ⋯ } }.map
          f ≫
        {
              obj := fun A =>
                { X := F.obj A.X, counit := F.map A.counit ≫ F.η, comul := F.map A.comul ≫ F.δ A.X A.X,
                  counit_comul := ⋯, comul_counit := ⋯, comul_assoc := ⋯ },
              map := fun {X Y} f => { hom := F.map f.hom, hom_counit := ⋯, hom_comul := ⋯ } }.map
          g).hom
tactic: ext
state_before: case w
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
inst✝² : MonoidalCategory C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
F : OplaxMonoidalFunctor C D
X✝ Y✝ Z✝ : Comon_ C
f : X✝ ⟶ Y✝
g : Y✝ ⟶ Z✝
⊢ ({
            obj := fun A =>
              { X := F.obj A.X, counit := F.map A.counit ≫ F.η, comul := F.map A.comul ≫ F.δ A.X A.X, counit_comul := ⋯,
                comul_counit := ⋯, comul_assoc := ⋯ },
            map := fun {X Y} f => { hom := F.map f.hom, hom_counit := ⋯, hom_comul := ⋯ } }.map
        (f ≫ g)).hom =
    ({
              obj := fun A =>
                { X := F.obj A.X, counit := F.map A.counit ≫ F.η, comul := F.map A.comul ≫ F.δ A.X A.X,
                  counit_comul := ⋯, comul_counit := ⋯, comul_assoc := ⋯ },
              map := fun {X Y} f => { hom := F.map f.hom, hom_counit := ⋯, hom_comul := ⋯ } }.map
          f ≫
        {
              obj := fun A =>
                { X := F.obj A.X, counit := F.map A.counit ≫ F.η, comul := F.map A.comul ≫ F.δ A.X A.X,
                  counit_comul := ⋯, comul_counit := ⋯, comul_assoc := ⋯ },
              map := fun {X Y} f => { hom := F.map f.hom, hom_counit := ⋯, hom_comul := ⋯ } }.map
          g).hom
state_after: no goals
tactic: simp