Theorem: CategoryTheory.OplaxMonoidalFunctor.comp_η
File: Mathlib/CategoryTheory/Monoidal/Functor.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
E : Type u₃
inst✝¹ : Category.{v₃, u₃} E
inst✝ : MonoidalCategory E
F : OplaxMonoidalFunctor C D
G : OplaxMonoidalFunctor D E
⊢ ∀ {X Y : C} (f : X ⟶ Y) (X' : C),
    (fun X Y => G.map (F.δ X Y) ≫ G.δ (F.obj X) (F.obj Y)) X X' ≫ __src✝.map f ▷ __src✝.obj X' =
      __src✝.map (f ▷ X') ≫ (fun X Y => G.map (F.δ X Y) ≫ G.δ (F.obj X) (F.obj Y)) Y X'
state_after: C : Type u₁
inst✝⁵ : Category.{v₁, u₁} C
inst✝⁴ : MonoidalCategory C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
inst✝² : MonoidalCategory D
E : Type u₃
inst✝¹ : Category.{v₃, u₃} E
inst✝ : MonoidalCategory E
F : OplaxMonoidalFunctor C D
G : OplaxMonoidalFunctor D E
X Y : C
f : X ⟶ Y
X' : C
⊢ (fun X Y => G.map (F.δ X Y) ≫ G.δ (F.obj X) (F.obj Y)) X X' ≫ __src✝.map f ▷ __src✝.obj X' =
    __src✝.map (f ▷ X') ≫ (fun X Y => G.map (F.δ X Y) ≫ G.δ (F.obj X) (F.obj Y)) Y X'
tactic: intro X Y f X'
state_before: C : Type u₁
inst✝⁵ : Category.{v₁, u₁} C
inst✝⁴ : MonoidalCategory C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
inst✝² : MonoidalCategory D
E : Type u₃
inst✝¹ : Category.{v₃, u₃} E
inst✝ : MonoidalCategory E
F : OplaxMonoidalFunctor C D
G : OplaxMonoidalFunctor D E
X Y : C
f : X ⟶ Y
X' : C
⊢ (fun X Y => G.map (F.δ X Y) ≫ G.δ (F.obj X) (F.obj Y)) X X' ≫ __src✝.map f ▷ __src✝.obj X' =
    __src✝.map (f ▷ X') ≫ (fun X Y => G.map (F.δ X Y) ≫ G.δ (F.obj X) (F.obj Y)) Y X'
state_after: no goals
tactic: simp_rw [comp_obj, Functor.comp_map, ← G.map_comp_assoc, ← F.δ_natural_left, assoc,
        G.δ_natural_left, ← G.map_comp_assoc]
state_before: C : Type u₁
inst✝⁵ : Category.{v₁, u₁} C
inst✝⁴ : MonoidalCategory C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
inst✝² : MonoidalCategory D
E : Type u₃
inst✝¹ : Category.{v₃, u₃} E
inst✝ : MonoidalCategory E
F : OplaxMonoidalFunctor C D
G : OplaxMonoidalFunctor D E
⊢ ∀ {X Y : C} (X' : C) (f : X ⟶ Y),
    (fun X Y => G.map (F.δ X Y) ≫ G.δ (F.obj X) (F.obj Y)) X' X ≫ __src✝.obj X' ◁ __src✝.map f =
      __src✝.map (X' ◁ f) ≫ (fun X Y => G.map (F.δ X Y) ≫ G.δ (F.obj X) (F.obj Y)) X' Y
state_after: C : Type u₁
inst✝⁵ : Category.{v₁, u₁} C
inst✝⁴ : MonoidalCategory C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
inst✝² : MonoidalCategory D
E : Type u₃
inst✝¹ : Category.{v₃, u₃} E
inst✝ : MonoidalCategory E
F : OplaxMonoidalFunctor C D
G : OplaxMonoidalFunctor D E
X Y f : C
X' : X ⟶ Y
⊢ (fun X Y => G.map (F.δ X Y) ≫ G.δ (F.obj X) (F.obj Y)) f X ≫ __src✝.obj f ◁ __src✝.map X' =
    __src✝.map (f ◁ X') ≫ (fun X Y => G.map (F.δ X Y) ≫ G.δ (F.obj X) (F.obj Y)) f Y
tactic: intro X Y f X'
state_before: C : Type u₁
inst✝⁵ : Category.{v₁, u₁} C
inst✝⁴ : MonoidalCategory C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
inst✝² : MonoidalCategory D
E : Type u₃
inst✝¹ : Category.{v₃, u₃} E
inst✝ : MonoidalCategory E
F : OplaxMonoidalFunctor C D
G : OplaxMonoidalFunctor D E
X Y f : C
X' : X ⟶ Y
⊢ (fun X Y => G.map (F.δ X Y) ≫ G.δ (F.obj X) (F.obj Y)) f X ≫ __src✝.obj f ◁ __src✝.map X' =
    __src✝.map (f ◁ X') ≫ (fun X Y => G.map (F.δ X Y) ≫ G.δ (F.obj X) (F.obj Y)) f Y
state_after: no goals
tactic: simp_rw [comp_obj, Functor.comp_map, ← G.map_comp_assoc, ← F.δ_natural_right, assoc,
        G.δ_natural_right, ← G.map_comp_assoc]
state_before: C : Type u₁
inst✝⁵ : Category.{v₁, u₁} C
inst✝⁴ : MonoidalCategory C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
inst✝² : MonoidalCategory D
E : Type u₃
inst✝¹ : Category.{v₃, u₃} E
inst✝ : MonoidalCategory E
F : OplaxMonoidalFunctor C D
G : OplaxMonoidalFunctor D E
X Y Z : C
⊢ (fun X Y => G.map (F.δ X Y) ≫ G.δ (F.obj X) (F.obj Y)) (X ⊗ Y) Z ≫
      (fun X Y => G.map (F.δ X Y) ≫ G.δ (F.obj X) (F.obj Y)) X Y ▷ __src✝.obj Z ≫
        (α_ (__src✝.obj X) (__src✝.obj Y) (__src✝.obj Z)).hom =
    __src✝.map (α_ X Y Z).hom ≫
      (fun X Y => G.map (F.δ X Y) ≫ G.δ (F.obj X) (F.obj Y)) X (Y ⊗ Z) ≫
        __src✝.obj X ◁ (fun X Y => G.map (F.δ X Y) ≫ G.δ (F.obj X) (F.obj Y)) Y Z
state_after: C : Type u₁
inst✝⁵ : Category.{v₁, u₁} C
inst✝⁴ : MonoidalCategory C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
inst✝² : MonoidalCategory D
E : Type u₃
inst✝¹ : Category.{v₃, u₃} E
inst✝ : MonoidalCategory E
F : OplaxMonoidalFunctor C D
G : OplaxMonoidalFunctor D E
X Y Z : C
⊢ (G.map (F.δ (X ⊗ Y) Z) ≫ G.δ (F.obj (X ⊗ Y)) (F.obj Z)) ≫
      (G.map (F.δ X Y) ≫ G.δ (F.obj X) (F.obj Y)) ▷ G.obj (F.obj Z) ≫
        (α_ (G.obj (F.obj X)) (G.obj (F.obj Y)) (G.obj (F.obj Z))).hom =
    G.map (F.map (α_ X Y Z).hom) ≫
      (G.map (F.δ X (Y ⊗ Z)) ≫ G.δ (F.obj X) (F.obj (Y ⊗ Z))) ≫
        G.obj (F.obj X) ◁ (G.map (F.δ Y Z) ≫ G.δ (F.obj Y) (F.obj Z))
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
E : Type u₃
inst✝¹ : Category.{v₃, u₃} E
inst✝ : MonoidalCategory E
F : OplaxMonoidalFunctor C D
G : OplaxMonoidalFunctor D E
X Y Z : C
⊢ (G.map (F.δ (X ⊗ Y) Z) ≫ G.δ (F.obj (X ⊗ Y)) (F.obj Z)) ≫
      (G.map (F.δ X Y) ≫ G.δ (F.obj X) (F.obj Y)) ▷ G.obj (F.obj Z) ≫
        (α_ (G.obj (F.obj X)) (G.obj (F.obj Y)) (G.obj (F.obj Z))).hom =
    G.map (F.map (α_ X Y Z).hom) ≫
      (G.map (F.δ X (Y ⊗ Z)) ≫ G.δ (F.obj X) (F.obj (Y ⊗ Z))) ≫
        G.obj (F.obj X) ◁ (G.map (F.δ Y Z) ≫ G.δ (F.obj Y) (F.obj Z))
state_after: C : Type u₁
inst✝⁵ : Category.{v₁, u₁} C
inst✝⁴ : MonoidalCategory C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
inst✝² : MonoidalCategory D
E : Type u₃
inst✝¹ : Category.{v₃, u₃} E
inst✝ : MonoidalCategory E
F : OplaxMonoidalFunctor C D
G : OplaxMonoidalFunctor D E
X Y Z : C
⊢ G.map (F.δ (X ⊗ Y) Z) ≫
      G.map (F.δ X Y ▷ F.obj Z) ≫
        G.δ (F.obj X ⊗ F.obj Y) (F.obj Z) ≫
          G.δ (F.obj X) (F.obj Y) ▷ G.obj (F.obj Z) ≫ (α_ (G.obj (F.obj X)) (G.obj (F.obj Y)) (G.obj (F.obj Z))).hom =
    G.map (F.map (α_ X Y Z).hom) ≫
      G.map (F.δ X (Y ⊗ Z)) ≫
        G.map (F.obj X ◁ F.δ Y Z) ≫ G.δ (F.obj X) (F.obj Y ⊗ F.obj Z) ≫ G.obj (F.obj X) ◁ G.δ (F.obj Y) (F.obj Z)
tactic: simp_rw [comp_whiskerRight, assoc, δ_natural_left_assoc, MonoidalCategory.whiskerLeft_comp,
        δ_natural_right_assoc]
state_before: C : Type u₁
inst✝⁵ : Category.{v₁, u₁} C
inst✝⁴ : MonoidalCategory C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
inst✝² : MonoidalCategory D
E : Type u₃
inst✝¹ : Category.{v₃, u₃} E
inst✝ : MonoidalCategory E
F : OplaxMonoidalFunctor C D
G : OplaxMonoidalFunctor D E
X Y Z : C
⊢ G.map (F.δ (X ⊗ Y) Z) ≫
      G.map (F.δ X Y ▷ F.obj Z) ≫
        G.δ (F.obj X ⊗ F.obj Y) (F.obj Z) ≫
          G.δ (F.obj X) (F.obj Y) ▷ G.obj (F.obj Z) ≫ (α_ (G.obj (F.obj X)) (G.obj (F.obj Y)) (G.obj (F.obj Z))).hom =
    G.map (F.map (α_ X Y Z).hom) ≫
      G.map (F.δ X (Y ⊗ Z)) ≫
        G.map (F.obj X ◁ F.δ Y Z) ≫ G.δ (F.obj X) (F.obj Y ⊗ F.obj Z) ≫ G.obj (F.obj X) ◁ G.δ (F.obj Y) (F.obj Z)
state_after: C : Type u₁
inst✝⁵ : Category.{v₁, u₁} C
inst✝⁴ : MonoidalCategory C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
inst✝² : MonoidalCategory D
E : Type u₃
inst✝¹ : Category.{v₃, u₃} E
inst✝ : MonoidalCategory E
F : OplaxMonoidalFunctor C D
G : OplaxMonoidalFunctor D E
X Y Z : C
⊢ G.map (F.δ (X ⊗ Y) Z) ≫
      G.map (F.δ X Y ▷ F.obj Z) ≫
        G.δ (F.obj X ⊗ F.obj Y) (F.obj Z) ≫
          G.δ (F.obj X) (F.obj Y) ▷ G.obj (F.obj Z) ≫ (α_ (G.obj (F.obj X)) (G.obj (F.obj Y)) (G.obj (F.obj Z))).hom =
    (G.map (F.δ (X ⊗ Y) Z ≫ F.δ X Y ▷ F.obj Z ≫ (α_ (F.obj X) (F.obj Y) (F.obj Z)).hom) ≫
        G.δ (F.obj X) (F.obj Y ⊗ F.obj Z)) ≫
      G.obj (F.obj X) ◁ G.δ (F.obj Y) (F.obj Z)
tactic: slice_rhs 1 3 =>
        simp only [← G.toFunctor.map_comp]
        rw [← 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
E : Type u₃
inst✝¹ : Category.{v₃, u₃} E
inst✝ : MonoidalCategory E
F : OplaxMonoidalFunctor C D
G : OplaxMonoidalFunctor D E
X Y Z : C
⊢ G.map (F.δ (X ⊗ Y) Z) ≫
      G.map (F.δ X Y ▷ F.obj Z) ≫
        G.δ (F.obj X ⊗ F.obj Y) (F.obj Z) ≫
          G.δ (F.obj X) (F.obj Y) ▷ G.obj (F.obj Z) ≫ (α_ (G.obj (F.obj X)) (G.obj (F.obj Y)) (G.obj (F.obj Z))).hom =
    (G.map (F.δ (X ⊗ Y) Z ≫ F.δ X Y ▷ F.obj Z ≫ (α_ (F.obj X) (F.obj Y) (F.obj Z)).hom) ≫
        G.δ (F.obj X) (F.obj Y ⊗ F.obj Z)) ≫
      G.obj (F.obj X) ◁ G.δ (F.obj Y) (F.obj Z)
state_after: C : Type u₁
inst✝⁵ : Category.{v₁, u₁} C
inst✝⁴ : MonoidalCategory C
D : Type u₂
inst✝³ : Category.{v₂, u₂} D
inst✝² : MonoidalCategory D
E : Type u₃
inst✝¹ : Category.{v₃, u₃} E
inst✝ : MonoidalCategory E
F : OplaxMonoidalFunctor C D
G : OplaxMonoidalFunctor D E
X Y Z : C
⊢ G.map (F.δ (X ⊗ Y) Z) ≫
      G.map (F.δ X Y ▷ F.obj Z) ≫
        G.map (α_ (F.obj X) (F.obj Y) (F.obj Z)).hom ≫
          G.δ (F.obj X) (F.obj Y ⊗ F.obj Z) ≫ G.obj (F.obj X) ◁ G.δ (F.obj Y) (F.obj Z) =
    (G.map (F.δ (X ⊗ Y) Z ≫ F.δ X Y ▷ F.obj Z ≫ (α_ (F.obj X) (F.obj Y) (F.obj Z)).hom) ≫
        G.δ (F.obj X) (F.obj Y ⊗ F.obj Z)) ≫
      G.obj (F.obj X) ◁ G.δ (F.obj Y) (F.obj Z)
tactic: rw [G.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
E : Type u₃
inst✝¹ : Category.{v₃, u₃} E
inst✝ : MonoidalCategory E
F : OplaxMonoidalFunctor C D
G : OplaxMonoidalFunctor D E
X Y Z : C
⊢ G.map (F.δ (X ⊗ Y) Z) ≫
      G.map (F.δ X Y ▷ F.obj Z) ≫
        G.map (α_ (F.obj X) (F.obj Y) (F.obj Z)).hom ≫
          G.δ (F.obj X) (F.obj Y ⊗ F.obj Z) ≫ G.obj (F.obj X) ◁ G.δ (F.obj Y) (F.obj Z) =
    (G.map (F.δ (X ⊗ Y) Z ≫ F.δ X Y ▷ F.obj Z ≫ (α_ (F.obj X) (F.obj Y) (F.obj Z)).hom) ≫
        G.δ (F.obj X) (F.obj Y ⊗ F.obj Z)) ≫
      G.obj (F.obj X) ◁ G.δ (F.obj Y) (F.obj Z)
state_after: no goals
tactic: simp only [G.map_comp, Category.assoc]