Theorem: CategoryTheory.LaxMonoidalFunctor.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 : LaxMonoidalFunctor C D
G : LaxMonoidalFunctor D E
⊢ ∀ {X Y : C} (f : X ⟶ Y) (X' : C),
    __src✝.map f ▷ __src✝.obj X' ≫ (fun X Y => G.μ (F.obj X) (F.obj Y) ≫ G.map (F.μ X Y)) Y X' =
      (fun X Y => G.μ (F.obj X) (F.obj Y) ≫ G.map (F.μ X Y)) X X' ≫ __src✝.map (f ▷ 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 : LaxMonoidalFunctor C D
G : LaxMonoidalFunctor D E
X Y : C
f : X ⟶ Y
X' : C
⊢ __src✝.map f ▷ __src✝.obj X' ≫ (fun X Y => G.μ (F.obj X) (F.obj Y) ≫ G.map (F.μ X Y)) Y X' =
    (fun X Y => G.μ (F.obj X) (F.obj Y) ≫ G.map (F.μ X Y)) X X' ≫ __src✝.map (f ▷ 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 : LaxMonoidalFunctor C D
G : LaxMonoidalFunctor D E
X Y : C
f : X ⟶ Y
X' : C
⊢ __src✝.map f ▷ __src✝.obj X' ≫ (fun X Y => G.μ (F.obj X) (F.obj Y) ≫ G.map (F.μ X Y)) Y X' =
    (fun X Y => G.μ (F.obj X) (F.obj Y) ≫ G.map (F.μ X Y)) X X' ≫ __src✝.map (f ▷ X')
state_after: no goals
tactic: simp_rw [comp_obj, F.comp_map, μ_natural_left_assoc, assoc, ← G.map_comp, μ_natural_left]
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 : LaxMonoidalFunctor C D
G : LaxMonoidalFunctor D E
⊢ ∀ {X Y : C} (X' : C) (f : X ⟶ Y),
    __src✝.obj X' ◁ __src✝.map f ≫ (fun X Y => G.μ (F.obj X) (F.obj Y) ≫ G.map (F.μ X Y)) X' Y =
      (fun X Y => G.μ (F.obj X) (F.obj Y) ≫ G.map (F.μ X Y)) X' X ≫ __src✝.map (X' ◁ f)
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 : LaxMonoidalFunctor C D
G : LaxMonoidalFunctor D E
X Y f : C
X' : X ⟶ Y
⊢ __src✝.obj f ◁ __src✝.map X' ≫ (fun X Y => G.μ (F.obj X) (F.obj Y) ≫ G.map (F.μ X Y)) f Y =
    (fun X Y => G.μ (F.obj X) (F.obj Y) ≫ G.map (F.μ X Y)) f X ≫ __src✝.map (f ◁ 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 : LaxMonoidalFunctor C D
G : LaxMonoidalFunctor D E
X Y f : C
X' : X ⟶ Y
⊢ __src✝.obj f ◁ __src✝.map X' ≫ (fun X Y => G.μ (F.obj X) (F.obj Y) ≫ G.map (F.μ X Y)) f Y =
    (fun X Y => G.μ (F.obj X) (F.obj Y) ≫ G.map (F.μ X Y)) f X ≫ __src✝.map (f ◁ X')
state_after: no goals
tactic: simp_rw [comp_obj, F.comp_map, μ_natural_right_assoc, assoc, ← G.map_comp, μ_natural_right]
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 : LaxMonoidalFunctor C D
G : LaxMonoidalFunctor D E
X Y Z : C
⊢ (fun X Y => G.μ (F.obj X) (F.obj Y) ≫ G.map (F.μ X Y)) X Y ▷ __src✝.obj Z ≫
      (fun X Y => G.μ (F.obj X) (F.obj Y) ≫ G.map (F.μ X Y)) (X ⊗ Y) Z ≫ __src✝.map (α_ X Y Z).hom =
    (α_ (__src✝.obj X) (__src✝.obj Y) (__src✝.obj Z)).hom ≫
      __src✝.obj X ◁ (fun X Y => G.μ (F.obj X) (F.obj Y) ≫ G.map (F.μ X Y)) Y Z ≫
        (fun X Y => G.μ (F.obj X) (F.obj Y) ≫ G.map (F.μ X Y)) X (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 : LaxMonoidalFunctor C D
G : LaxMonoidalFunctor D E
X Y Z : C
⊢ (G.μ (F.obj X) (F.obj Y) ≫ G.map (F.μ X Y)) ▷ G.obj (F.obj Z) ≫
      (G.μ (F.obj (X ⊗ Y)) (F.obj Z) ≫ G.map (F.μ (X ⊗ Y) Z)) ≫ G.map (F.map (α_ X Y Z).hom) =
    (α_ (G.obj (F.obj X)) (G.obj (F.obj Y)) (G.obj (F.obj Z))).hom ≫
      G.obj (F.obj X) ◁ (G.μ (F.obj Y) (F.obj Z) ≫ G.map (F.μ Y Z)) ≫
        G.μ (F.obj X) (F.obj (Y ⊗ Z)) ≫ G.map (F.μ X (Y ⊗ 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 : LaxMonoidalFunctor C D
G : LaxMonoidalFunctor D E
X Y Z : C
⊢ (G.μ (F.obj X) (F.obj Y) ≫ G.map (F.μ X Y)) ▷ G.obj (F.obj Z) ≫
      (G.μ (F.obj (X ⊗ Y)) (F.obj Z) ≫ G.map (F.μ (X ⊗ Y) Z)) ≫ G.map (F.map (α_ X Y Z).hom) =
    (α_ (G.obj (F.obj X)) (G.obj (F.obj Y)) (G.obj (F.obj Z))).hom ≫
      G.obj (F.obj X) ◁ (G.μ (F.obj Y) (F.obj Z) ≫ G.map (F.μ Y Z)) ≫
        G.μ (F.obj X) (F.obj (Y ⊗ Z)) ≫ G.map (F.μ X (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 : LaxMonoidalFunctor C D
G : LaxMonoidalFunctor D E
X Y Z : C
⊢ G.μ (F.obj X) (F.obj Y) ▷ G.obj (F.obj Z) ≫
      G.μ (F.obj X ⊗ F.obj Y) (F.obj Z) ≫
        G.map (F.μ X Y ▷ F.obj Z) ≫ G.map (F.μ (X ⊗ Y) Z) ≫ G.map (F.map (α_ X Y Z).hom) =
    (α_ (G.obj (F.obj X)) (G.obj (F.obj Y)) (G.obj (F.obj Z))).hom ≫
      G.obj (F.obj X) ◁ G.μ (F.obj Y) (F.obj Z) ≫
        G.μ (F.obj X) (F.obj Y ⊗ F.obj Z) ≫ G.map (F.obj X ◁ F.μ Y Z) ≫ G.map (F.μ X (Y ⊗ Z))
tactic: simp_rw [comp_whiskerRight, assoc, μ_natural_left_assoc, MonoidalCategory.whiskerLeft_comp,
        assoc, μ_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 : LaxMonoidalFunctor C D
G : LaxMonoidalFunctor D E
X Y Z : C
⊢ G.μ (F.obj X) (F.obj Y) ▷ G.obj (F.obj Z) ≫
      G.μ (F.obj X ⊗ F.obj Y) (F.obj Z) ≫
        G.map (F.μ X Y ▷ F.obj Z) ≫ G.map (F.μ (X ⊗ Y) Z) ≫ G.map (F.map (α_ X Y Z).hom) =
    (α_ (G.obj (F.obj X)) (G.obj (F.obj Y)) (G.obj (F.obj Z))).hom ≫
      G.obj (F.obj X) ◁ G.μ (F.obj Y) (F.obj Z) ≫
        G.μ (F.obj X) (F.obj Y ⊗ F.obj Z) ≫ G.map (F.obj X ◁ F.μ Y Z) ≫ G.map (F.μ X (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 : LaxMonoidalFunctor C D
G : LaxMonoidalFunctor D E
X Y Z : C
⊢ G.μ (F.obj X) (F.obj Y) ▷ G.obj (F.obj Z) ≫
      G.μ (F.obj X ⊗ F.obj Y) (F.obj Z) ≫
        G.map (F.μ X Y ▷ F.obj Z) ≫ G.map (F.μ (X ⊗ Y) Z) ≫ G.map (F.map (α_ X Y Z).hom) =
    ((G.μ (F.obj X) (F.obj Y) ▷ G.obj (F.obj Z) ≫
          G.μ (F.obj X ⊗ F.obj Y) (F.obj Z) ≫ G.map (α_ (F.obj X) (F.obj Y) (F.obj Z)).hom) ≫
        G.map (F.obj X ◁ F.μ Y Z)) ≫
      G.map (F.μ X (Y ⊗ Z))
tactic: slice_rhs 1 3 => 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 : LaxMonoidalFunctor C D
G : LaxMonoidalFunctor D E
X Y Z : C
⊢ G.μ (F.obj X) (F.obj Y) ▷ G.obj (F.obj Z) ≫
      G.μ (F.obj X ⊗ F.obj Y) (F.obj Z) ≫
        G.map (F.μ X Y ▷ F.obj Z) ≫ G.map (F.μ (X ⊗ Y) Z) ≫ G.map (F.map (α_ X Y Z).hom) =
    ((G.μ (F.obj X) (F.obj Y) ▷ G.obj (F.obj Z) ≫
          G.μ (F.obj X ⊗ F.obj Y) (F.obj Z) ≫ G.map (α_ (F.obj X) (F.obj Y) (F.obj Z)).hom) ≫
        G.map (F.obj X ◁ F.μ Y Z)) ≫
      G.map (F.μ X (Y ⊗ Z))
state_after: no goals
tactic: simp_rw [Category.assoc, ← G.toFunctor.map_comp, F.associativity]