Theorem: CategoryTheory.MonoidalFunctor.toOplaxMonoidalFunctor_toFunctor
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
F : MonoidalFunctor C D
⊢ ∀ {X Y : C} (f : X ⟶ Y) (X' : C),
    (fun X Y => inv (F.μ X Y)) X X' ≫ F.map f ▷ F.obj X' = F.map (f ▷ X') ≫ (fun X Y => inv (F.μ X Y)) Y X'
state_after: no goals
tactic: aesop_cat
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 : MonoidalFunctor C D
⊢ ∀ {X Y : C} (X' : C) (f : X ⟶ Y),
    (fun X Y => inv (F.μ X Y)) X' X ≫ F.obj X' ◁ F.map f = F.map (X' ◁ f) ≫ (fun X Y => inv (F.μ X Y)) X' Y
state_after: no goals
tactic: aesop_cat
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 : MonoidalFunctor C D
⊢ ∀ (X Y Z : C),
    (fun X Y => inv (F.μ X Y)) (X ⊗ Y) Z ≫
        (fun X Y => inv (F.μ X Y)) X Y ▷ F.obj Z ≫ (α_ (F.obj X) (F.obj Y) (F.obj Z)).hom =
      F.map (α_ X Y Z).hom ≫ (fun X Y => inv (F.μ X Y)) X (Y ⊗ Z) ≫ F.obj X ◁ (fun X Y => inv (F.μ X 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
F : MonoidalFunctor C D
X Y Z : C
⊢ (fun X Y => inv (F.μ X Y)) (X ⊗ Y) Z ≫
      (fun X Y => inv (F.μ X Y)) X Y ▷ F.obj Z ≫ (α_ (F.obj X) (F.obj Y) (F.obj Z)).hom =
    F.map (α_ X Y Z).hom ≫ (fun X Y => inv (F.μ X Y)) X (Y ⊗ Z) ≫ F.obj X ◁ (fun X Y => inv (F.μ X Y)) Y Z
tactic: intros X Y Z
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 : MonoidalFunctor C D
X Y Z : C
⊢ (fun X Y => inv (F.μ X Y)) (X ⊗ Y) Z ≫
      (fun X Y => inv (F.μ X Y)) X Y ▷ F.obj Z ≫ (α_ (F.obj X) (F.obj Y) (F.obj Z)).hom =
    F.map (α_ X Y Z).hom ≫ (fun X Y => inv (F.μ X Y)) X (Y ⊗ Z) ≫ F.obj X ◁ (fun X Y => inv (F.μ X 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
F : MonoidalFunctor C D
X Y Z : C
⊢ inv (F.μ (X ⊗ Y) Z) ≫ inv (F.μ X Y) ▷ F.obj Z ≫ (α_ (F.obj X) (F.obj Y) (F.obj Z)).hom =
    F.map (α_ X Y Z).hom ≫ inv (F.μ X (Y ⊗ Z)) ≫ F.obj X ◁ inv (F.μ 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
F : MonoidalFunctor C D
X Y Z : C
⊢ inv (F.μ (X ⊗ Y) Z) ≫ inv (F.μ X Y) ▷ F.obj Z ≫ (α_ (F.obj X) (F.obj Y) (F.obj Z)).hom =
    F.map (α_ X Y Z).hom ≫ inv (F.μ X (Y ⊗ Z)) ≫ F.obj X ◁ inv (F.μ 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
F : MonoidalFunctor C D
X Y Z : C
⊢ (α_ (F.obj X) (F.obj Y) (F.obj Z)).hom =
    F.μ X Y ▷ F.obj Z ≫ F.μ (X ⊗ Y) Z ≫ F.map (α_ X Y Z).hom ≫ inv (F.μ X (Y ⊗ Z)) ≫ F.obj X ◁ inv (F.μ Y Z)
tactic: rw [IsIso.inv_comp_eq, ← inv_whiskerRight, IsIso.inv_comp_eq]
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 : MonoidalFunctor C D
X Y Z : C
⊢ (α_ (F.obj X) (F.obj Y) (F.obj Z)).hom =
    F.μ X Y ▷ F.obj Z ≫ F.μ (X ⊗ Y) Z ≫ F.map (α_ X Y Z).hom ≫ inv (F.μ X (Y ⊗ Z)) ≫ F.obj X ◁ inv (F.μ 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
F : MonoidalFunctor C D
X Y Z : C
⊢ (α_ (F.obj X) (F.obj Y) (F.obj Z)).hom =
    (((α_ (F.obj X) (F.obj Y) (F.obj Z)).hom ≫ F.obj X ◁ F.μ Y Z ≫ F.μ X (Y ⊗ Z)) ≫ inv (F.μ X (Y ⊗ Z))) ≫
      F.obj X ◁ inv (F.μ Y Z)
tactic: slice_rhs 1 3 =>
        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
F : MonoidalFunctor C D
X Y Z : C
⊢ (α_ (F.obj X) (F.obj Y) (F.obj Z)).hom =
    (((α_ (F.obj X) (F.obj Y) (F.obj Z)).hom ≫ F.obj X ◁ F.μ Y Z ≫ F.μ X (Y ⊗ Z)) ≫ inv (F.μ X (Y ⊗ Z))) ≫
      F.obj X ◁ inv (F.μ Y Z)
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 : MonoidalFunctor C D
⊢ ∀ (X : C), (λ_ (F.obj X)).inv = F.map (λ_ X).inv ≫ (fun X Y => inv (F.μ X Y)) (𝟙_ C) X ≫ inv F.ε ▷ F.obj 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
F : MonoidalFunctor C D
X : C
⊢ (λ_ (F.obj X)).inv = F.map (λ_ X).inv ≫ (fun X Y => inv (F.μ X Y)) (𝟙_ C) X ≫ inv F.ε ▷ F.obj X
tactic: intros 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
F : MonoidalFunctor C D
X : C
⊢ (λ_ (F.obj X)).inv = F.map (λ_ X).inv ≫ (fun X Y => inv (F.μ X Y)) (𝟙_ C) X ≫ inv F.ε ▷ F.obj 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
F : MonoidalFunctor C D
X : C
⊢ (λ_ (F.obj X)).inv = F.map (λ_ X).inv ≫ inv (F.μ (𝟙_ C) X) ≫ inv F.ε ▷ F.obj X
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 : MonoidalFunctor C D
X : C
⊢ (λ_ (F.obj X)).inv = F.map (λ_ X).inv ≫ inv (F.μ (𝟙_ C) X) ≫ inv F.ε ▷ F.obj X
state_after: case hom_inv_id
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
inst✝² : MonoidalCategory C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
F : MonoidalFunctor C D
X : C
⊢ (λ_ (F.obj X)).hom ≫ F.map (λ_ X).inv ≫ inv (F.μ (𝟙_ C) X) ≫ inv F.ε ▷ F.obj X = 𝟙 (𝟙_ D ⊗ F.obj X)
tactic: apply Iso.inv_ext
state_before: case hom_inv_id
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
inst✝² : MonoidalCategory C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
F : MonoidalFunctor C D
X : C
⊢ (λ_ (F.obj X)).hom ≫ F.map (λ_ X).inv ≫ inv (F.μ (𝟙_ C) X) ≫ inv F.ε ▷ F.obj X = 𝟙 (𝟙_ D ⊗ F.obj X)
state_after: case hom_inv_id
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
inst✝² : MonoidalCategory C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
F : MonoidalFunctor C D
X : C
⊢ (F.ε ▷ F.obj X ≫ F.μ (𝟙_ C) X ≫ F.map (λ_ X).hom) ≫ F.map (λ_ X).inv ≫ inv (F.μ (𝟙_ C) X) ≫ inv F.ε ▷ F.obj X =
    𝟙 (𝟙_ D ⊗ F.obj X)
tactic: rw [F.left_unitality]
state_before: case hom_inv_id
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
inst✝² : MonoidalCategory C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
F : MonoidalFunctor C D
X : C
⊢ (F.ε ▷ F.obj X ≫ F.μ (𝟙_ C) X ≫ F.map (λ_ X).hom) ≫ F.map (λ_ X).inv ≫ inv (F.μ (𝟙_ C) X) ≫ inv F.ε ▷ F.obj X =
    𝟙 (𝟙_ D ⊗ F.obj X)
state_after: case hom_inv_id
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
inst✝² : MonoidalCategory C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
F : MonoidalFunctor C D
X : C
⊢ F.ε ▷ F.obj X ≫ F.μ (𝟙_ C) X ≫ (𝟙 (F.obj (𝟙_ C ⊗ X)) ≫ inv (F.μ (𝟙_ C) X)) ≫ inv F.ε ▷ F.obj X = 𝟙 (𝟙_ D ⊗ F.obj X)
tactic: slice_lhs 3 4 =>
        rw [← F.map_comp, Iso.hom_inv_id, F.map_id]
state_before: case hom_inv_id
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
inst✝² : MonoidalCategory C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
F : MonoidalFunctor C D
X : C
⊢ F.ε ▷ F.obj X ≫ F.μ (𝟙_ C) X ≫ (𝟙 (F.obj (𝟙_ C ⊗ X)) ≫ inv (F.μ (𝟙_ C) X)) ≫ inv F.ε ▷ F.obj X = 𝟙 (𝟙_ D ⊗ F.obj X)
state_after: no goals
tactic: simp [inv_whiskerRight]
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 : MonoidalFunctor C D
⊢ ∀ (X : C), (ρ_ (F.obj X)).inv = F.map (ρ_ X).inv ≫ (fun X Y => inv (F.μ X Y)) X (𝟙_ C) ≫ F.obj X ◁ inv 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
F : MonoidalFunctor C D
X : C
⊢ (ρ_ (F.obj X)).inv = F.map (ρ_ X).inv ≫ (fun X Y => inv (F.μ X Y)) X (𝟙_ C) ≫ F.obj X ◁ inv F.ε
tactic: intros 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
F : MonoidalFunctor C D
X : C
⊢ (ρ_ (F.obj X)).inv = F.map (ρ_ X).inv ≫ (fun X Y => inv (F.μ X Y)) X (𝟙_ C) ≫ F.obj X ◁ inv 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
F : MonoidalFunctor C D
X : C
⊢ (ρ_ (F.obj X)).inv = F.map (ρ_ X).inv ≫ inv (F.μ X (𝟙_ C)) ≫ F.obj X ◁ inv 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 : MonoidalFunctor C D
X : C
⊢ (ρ_ (F.obj X)).inv = F.map (ρ_ X).inv ≫ inv (F.μ X (𝟙_ C)) ≫ F.obj X ◁ inv F.ε
state_after: case hom_inv_id
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
inst✝² : MonoidalCategory C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
F : MonoidalFunctor C D
X : C
⊢ (ρ_ (F.obj X)).hom ≫ F.map (ρ_ X).inv ≫ inv (F.μ X (𝟙_ C)) ≫ F.obj X ◁ inv F.ε = 𝟙 (F.obj X ⊗ 𝟙_ D)
tactic: apply Iso.inv_ext
state_before: case hom_inv_id
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
inst✝² : MonoidalCategory C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
F : MonoidalFunctor C D
X : C
⊢ (ρ_ (F.obj X)).hom ≫ F.map (ρ_ X).inv ≫ inv (F.μ X (𝟙_ C)) ≫ F.obj X ◁ inv F.ε = 𝟙 (F.obj X ⊗ 𝟙_ D)
state_after: case hom_inv_id
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
inst✝² : MonoidalCategory C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
F : MonoidalFunctor C D
X : C
⊢ (F.obj X ◁ F.ε ≫ F.μ X (𝟙_ C) ≫ F.map (ρ_ X).hom) ≫ F.map (ρ_ X).inv ≫ inv (F.μ X (𝟙_ C)) ≫ F.obj X ◁ inv F.ε =
    𝟙 (F.obj X ⊗ 𝟙_ D)
tactic: rw [F.right_unitality]
state_before: case hom_inv_id
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
inst✝² : MonoidalCategory C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
F : MonoidalFunctor C D
X : C
⊢ (F.obj X ◁ F.ε ≫ F.μ X (𝟙_ C) ≫ F.map (ρ_ X).hom) ≫ F.map (ρ_ X).inv ≫ inv (F.μ X (𝟙_ C)) ≫ F.obj X ◁ inv F.ε =
    𝟙 (F.obj X ⊗ 𝟙_ D)
state_after: case hom_inv_id
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
inst✝² : MonoidalCategory C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
F : MonoidalFunctor C D
X : C
⊢ F.obj X ◁ F.ε ≫ F.μ X (𝟙_ C) ≫ (𝟙 (F.obj (X ⊗ 𝟙_ C)) ≫ inv (F.μ X (𝟙_ C))) ≫ F.obj X ◁ inv F.ε = 𝟙 (F.obj X ⊗ 𝟙_ D)
tactic: slice_lhs 3 4 =>
        rw [← F.map_comp, Iso.hom_inv_id, F.map_id]
state_before: case hom_inv_id
C : Type u₁
inst✝³ : Category.{v₁, u₁} C
inst✝² : MonoidalCategory C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
inst✝ : MonoidalCategory D
F : MonoidalFunctor C D
X : C
⊢ F.obj X ◁ F.ε ≫ F.μ X (𝟙_ C) ≫ (𝟙 (F.obj (X ⊗ 𝟙_ C)) ≫ inv (F.μ X (𝟙_ C))) ≫ F.obj X ◁ inv F.ε = 𝟙 (F.obj X ⊗ 𝟙_ D)
state_after: no goals
tactic: simp