Theorem: CategoryTheory.LaxFunctor.comp_mapComp
File: Mathlib/CategoryTheory/Bicategory/Functor/Lax.lean

Proof steps:
state_before: B : Type u₁
inst✝² : Bicategory B
C : Type u₂
inst✝¹ : Bicategory C
F✝ : LaxFunctor B C
D : Type u₃
inst✝ : Bicategory D
F : LaxFunctor B C
G : LaxFunctor C D
a✝ b✝ c✝ : B
f✝ f'✝ : a✝ ⟶ b✝
η : f✝ ⟶ f'✝
g : b✝ ⟶ c✝
⊢ (fun {a b c} f g => G.mapComp (F.map f) (F.map g) ≫ G.map₂ (F.mapComp f g)) f✝ g ≫
      (F.comp G.toPrelaxFunctor).map₂ (η ▷ g) =
    (F.comp G.toPrelaxFunctor).map₂ η ▷ (F.comp G.toPrelaxFunctor).map g ≫
      (fun {a b c} f g => G.mapComp (F.map f) (F.map g) ≫ G.map₂ (F.mapComp f g)) f'✝ g
state_after: B : Type u₁
inst✝² : Bicategory B
C : Type u₂
inst✝¹ : Bicategory C
F✝ : LaxFunctor B C
D : Type u₃
inst✝ : Bicategory D
F : LaxFunctor B C
G : LaxFunctor C D
a✝ b✝ c✝ : B
f✝ f'✝ : a✝ ⟶ b✝
η : f✝ ⟶ f'✝
g : b✝ ⟶ c✝
⊢ (G.mapComp (F.map f✝) (F.map g) ≫ G.map₂ (F.mapComp f✝ g)) ≫ G.map₂ (F.map₂ (η ▷ g)) =
    G.map₂ (F.map₂ η) ▷ G.map (F.map g) ≫ G.mapComp (F.map f'✝) (F.map g) ≫ G.map₂ (F.mapComp f'✝ g)
tactic: dsimp
state_before: B : Type u₁
inst✝² : Bicategory B
C : Type u₂
inst✝¹ : Bicategory C
F✝ : LaxFunctor B C
D : Type u₃
inst✝ : Bicategory D
F : LaxFunctor B C
G : LaxFunctor C D
a✝ b✝ c✝ : B
f✝ f'✝ : a✝ ⟶ b✝
η : f✝ ⟶ f'✝
g : b✝ ⟶ c✝
⊢ (G.mapComp (F.map f✝) (F.map g) ≫ G.map₂ (F.mapComp f✝ g)) ≫ G.map₂ (F.map₂ (η ▷ g)) =
    G.map₂ (F.map₂ η) ▷ G.map (F.map g) ≫ G.mapComp (F.map f'✝) (F.map g) ≫ G.map₂ (F.mapComp f'✝ g)
state_after: no goals
tactic: rw [assoc, ← G.map₂_comp, mapComp_naturality_left, G.map₂_comp, mapComp_naturality_left_assoc]
state_before: B : Type u₁
inst✝² : Bicategory B
C : Type u₂
inst✝¹ : Bicategory C
F✝ : LaxFunctor B C
D : Type u₃
inst✝ : Bicategory D
F : LaxFunctor B C
G : LaxFunctor C D
a✝ b✝ c✝ : B
f : a✝ ⟶ b✝
x✝¹ x✝ : b✝ ⟶ c✝
η : x✝¹ ⟶ x✝
⊢ (fun {a b c} f g => G.mapComp (F.map f) (F.map g) ≫ G.map₂ (F.mapComp f g)) f x✝¹ ≫
      (F.comp G.toPrelaxFunctor).map₂ (f ◁ η) =
    (F.comp G.toPrelaxFunctor).map f ◁ (F.comp G.toPrelaxFunctor).map₂ η ≫
      (fun {a b c} f g => G.mapComp (F.map f) (F.map g) ≫ G.map₂ (F.mapComp f g)) f x✝
state_after: B : Type u₁
inst✝² : Bicategory B
C : Type u₂
inst✝¹ : Bicategory C
F✝ : LaxFunctor B C
D : Type u₃
inst✝ : Bicategory D
F : LaxFunctor B C
G : LaxFunctor C D
a✝ b✝ c✝ : B
f : a✝ ⟶ b✝
x✝¹ x✝ : b✝ ⟶ c✝
η : x✝¹ ⟶ x✝
⊢ (G.mapComp (F.map f) (F.map x✝¹) ≫ G.map₂ (F.mapComp f x✝¹)) ≫ G.map₂ (F.map₂ (f ◁ η)) =
    G.map (F.map f) ◁ G.map₂ (F.map₂ η) ≫ G.mapComp (F.map f) (F.map x✝) ≫ G.map₂ (F.mapComp f x✝)
tactic: dsimp
state_before: B : Type u₁
inst✝² : Bicategory B
C : Type u₂
inst✝¹ : Bicategory C
F✝ : LaxFunctor B C
D : Type u₃
inst✝ : Bicategory D
F : LaxFunctor B C
G : LaxFunctor C D
a✝ b✝ c✝ : B
f : a✝ ⟶ b✝
x✝¹ x✝ : b✝ ⟶ c✝
η : x✝¹ ⟶ x✝
⊢ (G.mapComp (F.map f) (F.map x✝¹) ≫ G.map₂ (F.mapComp f x✝¹)) ≫ G.map₂ (F.map₂ (f ◁ η)) =
    G.map (F.map f) ◁ G.map₂ (F.map₂ η) ≫ G.mapComp (F.map f) (F.map x✝) ≫ G.map₂ (F.mapComp f x✝)
state_after: no goals
tactic: rw [assoc, ← G.map₂_comp, mapComp_naturality_right, G.map₂_comp, mapComp_naturality_right_assoc]
state_before: B : Type u₁
inst✝² : Bicategory B
C : Type u₂
inst✝¹ : Bicategory C
F✝ : LaxFunctor B C
D : Type u₃
inst✝ : Bicategory D
F : LaxFunctor B C
G : LaxFunctor C D
a✝ b✝ c✝ d✝ : B
f : a✝ ⟶ b✝
g : b✝ ⟶ c✝
h : c✝ ⟶ d✝
⊢ (fun {a b c} f g => G.mapComp (F.map f) (F.map g) ≫ G.map₂ (F.mapComp f g)) f g ▷ (F.comp G.toPrelaxFunctor).map h ≫
      (fun {a b c} f g => G.mapComp (F.map f) (F.map g) ≫ G.map₂ (F.mapComp f g)) (f ≫ g) h ≫
        (F.comp G.toPrelaxFunctor).map₂ (α_ f g h).hom =
    (α_ ((F.comp G.toPrelaxFunctor).map f) ((F.comp G.toPrelaxFunctor).map g) ((F.comp G.toPrelaxFunctor).map h)).hom ≫
      (F.comp G.toPrelaxFunctor).map f ◁
          (fun {a b c} f g => G.mapComp (F.map f) (F.map g) ≫ G.map₂ (F.mapComp f g)) g h ≫
        (fun {a b c} f g => G.mapComp (F.map f) (F.map g) ≫ G.map₂ (F.mapComp f g)) f (g ≫ h)
state_after: B : Type u₁
inst✝² : Bicategory B
C : Type u₂
inst✝¹ : Bicategory C
F✝ : LaxFunctor B C
D : Type u₃
inst✝ : Bicategory D
F : LaxFunctor B C
G : LaxFunctor C D
a✝ b✝ c✝ d✝ : B
f : a✝ ⟶ b✝
g : b✝ ⟶ c✝
h : c✝ ⟶ d✝
⊢ (G.mapComp (F.map f) (F.map g) ≫ G.map₂ (F.mapComp f g)) ▷ G.map (F.map h) ≫
      (G.mapComp (F.map (f ≫ g)) (F.map h) ≫ G.map₂ (F.mapComp (f ≫ g) h)) ≫ G.map₂ (F.map₂ (α_ f g h).hom) =
    (α_ (G.map (F.map f)) (G.map (F.map g)) (G.map (F.map h))).hom ≫
      G.map (F.map f) ◁ (G.mapComp (F.map g) (F.map h) ≫ G.map₂ (F.mapComp g h)) ≫
        G.mapComp (F.map f) (F.map (g ≫ h)) ≫ G.map₂ (F.mapComp f (g ≫ h))
tactic: dsimp
state_before: B : Type u₁
inst✝² : Bicategory B
C : Type u₂
inst✝¹ : Bicategory C
F✝ : LaxFunctor B C
D : Type u₃
inst✝ : Bicategory D
F : LaxFunctor B C
G : LaxFunctor C D
a✝ b✝ c✝ d✝ : B
f : a✝ ⟶ b✝
g : b✝ ⟶ c✝
h : c✝ ⟶ d✝
⊢ (G.mapComp (F.map f) (F.map g) ≫ G.map₂ (F.mapComp f g)) ▷ G.map (F.map h) ≫
      (G.mapComp (F.map (f ≫ g)) (F.map h) ≫ G.map₂ (F.mapComp (f ≫ g) h)) ≫ G.map₂ (F.map₂ (α_ f g h).hom) =
    (α_ (G.map (F.map f)) (G.map (F.map g)) (G.map (F.map h))).hom ≫
      G.map (F.map f) ◁ (G.mapComp (F.map g) (F.map h) ≫ G.map₂ (F.mapComp g h)) ≫
        G.mapComp (F.map f) (F.map (g ≫ h)) ≫ G.map₂ (F.mapComp f (g ≫ h))
state_after: B : Type u₁
inst✝² : Bicategory B
C : Type u₂
inst✝¹ : Bicategory C
F✝ : LaxFunctor B C
D : Type u₃
inst✝ : Bicategory D
F : LaxFunctor B C
G : LaxFunctor C D
a✝ b✝ c✝ d✝ : B
f : a✝ ⟶ b✝
g : b✝ ⟶ c✝
h : c✝ ⟶ d✝
⊢ (G.mapComp (F.map f) (F.map g) ≫ G.map₂ (F.mapComp f g)) ▷ G.map (F.map h) ≫
      (G.mapComp (F.map (f ≫ g)) (F.map h) ≫ G.map₂ (F.mapComp (f ≫ g) h)) ≫ G.map₂ (F.map₂ (α_ f g h).hom) =
    (G.mapComp (F.map f) (F.map g) ▷ G.map (F.map h) ≫
        G.mapComp (F.map f ≫ F.map g) (F.map h) ≫
          G.map₂ (α_ (F.map f) (F.map g) (F.map h)).hom ≫ G.map₂ (F.map f ◁ F.mapComp g h)) ≫
      G.map₂ (F.mapComp f (g ≫ h))
tactic: slice_rhs 1 3 =>
      rw [whiskerLeft_comp, assoc, ← mapComp_naturality_right, ← map₂_associator_assoc]
state_before: B : Type u₁
inst✝² : Bicategory B
C : Type u₂
inst✝¹ : Bicategory C
F✝ : LaxFunctor B C
D : Type u₃
inst✝ : Bicategory D
F : LaxFunctor B C
G : LaxFunctor C D
a✝ b✝ c✝ d✝ : B
f : a✝ ⟶ b✝
g : b✝ ⟶ c✝
h : c✝ ⟶ d✝
⊢ (G.mapComp (F.map f) (F.map g) ≫ G.map₂ (F.mapComp f g)) ▷ G.map (F.map h) ≫
      (G.mapComp (F.map (f ≫ g)) (F.map h) ≫ G.map₂ (F.mapComp (f ≫ g) h)) ≫ G.map₂ (F.map₂ (α_ f g h).hom) =
    (G.mapComp (F.map f) (F.map g) ▷ G.map (F.map h) ≫
        G.mapComp (F.map f ≫ F.map g) (F.map h) ≫
          G.map₂ (α_ (F.map f) (F.map g) (F.map h)).hom ≫ G.map₂ (F.map f ◁ F.mapComp g h)) ≫
      G.map₂ (F.mapComp f (g ≫ h))
state_after: B : Type u₁
inst✝² : Bicategory B
C : Type u₂
inst✝¹ : Bicategory C
F✝ : LaxFunctor B C
D : Type u₃
inst✝ : Bicategory D
F : LaxFunctor B C
G : LaxFunctor C D
a✝ b✝ c✝ d✝ : B
f : a✝ ⟶ b✝
g : b✝ ⟶ c✝
h : c✝ ⟶ d✝
⊢ (G.mapComp (F.map f) (F.map g) ≫ G.map₂ (F.mapComp f g)) ▷ G.map (F.map h) ≫
      (G.mapComp (F.map (f ≫ g)) (F.map h) ≫ G.map₂ (F.mapComp (f ≫ g) h)) ≫ G.map₂ (F.map₂ (α_ f g h).hom) =
    G.mapComp (F.map f) (F.map g) ▷ G.map (F.map h) ≫
      G.mapComp (F.map f ≫ F.map g) (F.map h) ≫
        G.map₂ (F.mapComp f g ▷ F.map h) ≫ G.map₂ (F.mapComp (f ≫ g) h) ≫ G.map₂ (F.map₂ (α_ f g h).hom)
tactic: slice_rhs 3 5 =>
      rw [← G.map₂_comp, ← G.map₂_comp, ← F.map₂_associator, G.map₂_comp, G.map₂_comp]
state_before: B : Type u₁
inst✝² : Bicategory B
C : Type u₂
inst✝¹ : Bicategory C
F✝ : LaxFunctor B C
D : Type u₃
inst✝ : Bicategory D
F : LaxFunctor B C
G : LaxFunctor C D
a✝ b✝ c✝ d✝ : B
f : a✝ ⟶ b✝
g : b✝ ⟶ c✝
h : c✝ ⟶ d✝
⊢ (G.mapComp (F.map f) (F.map g) ≫ G.map₂ (F.mapComp f g)) ▷ G.map (F.map h) ≫
      (G.mapComp (F.map (f ≫ g)) (F.map h) ≫ G.map₂ (F.mapComp (f ≫ g) h)) ≫ G.map₂ (F.map₂ (α_ f g h).hom) =
    G.mapComp (F.map f) (F.map g) ▷ G.map (F.map h) ≫
      G.mapComp (F.map f ≫ F.map g) (F.map h) ≫
        G.map₂ (F.mapComp f g ▷ F.map h) ≫ G.map₂ (F.mapComp (f ≫ g) h) ≫ G.map₂ (F.map₂ (α_ f g h).hom)
state_after: B : Type u₁
inst✝² : Bicategory B
C : Type u₂
inst✝¹ : Bicategory C
F✝ : LaxFunctor B C
D : Type u₃
inst✝ : Bicategory D
F : LaxFunctor B C
G : LaxFunctor C D
a✝ b✝ c✝ d✝ : B
f : a✝ ⟶ b✝
g : b✝ ⟶ c✝
h : c✝ ⟶ d✝
⊢ (G.mapComp (F.map f) (F.map g) ▷ G.map (F.map h) ≫
        G.mapComp (F.map f ≫ F.map g) (F.map h) ≫ G.map₂ (F.mapComp f g ▷ F.map h) ≫ G.map₂ (F.mapComp (f ≫ g) h)) ≫
      G.map₂ (F.map₂ (α_ f g h).hom) =
    G.mapComp (F.map f) (F.map g) ▷ G.map (F.map h) ≫
      G.mapComp (F.map f ≫ F.map g) (F.map h) ≫
        G.map₂ (F.mapComp f g ▷ F.map h) ≫ G.map₂ (F.mapComp (f ≫ g) h) ≫ G.map₂ (F.map₂ (α_ f g h).hom)
tactic: slice_lhs 1 3 =>
      rw [comp_whiskerRight, assoc, ← G.mapComp_naturality_left_assoc]
state_before: B : Type u₁
inst✝² : Bicategory B
C : Type u₂
inst✝¹ : Bicategory C
F✝ : LaxFunctor B C
D : Type u₃
inst✝ : Bicategory D
F : LaxFunctor B C
G : LaxFunctor C D
a✝ b✝ c✝ d✝ : B
f : a✝ ⟶ b✝
g : b✝ ⟶ c✝
h : c✝ ⟶ d✝
⊢ (G.mapComp (F.map f) (F.map g) ▷ G.map (F.map h) ≫
        G.mapComp (F.map f ≫ F.map g) (F.map h) ≫ G.map₂ (F.mapComp f g ▷ F.map h) ≫ G.map₂ (F.mapComp (f ≫ g) h)) ≫
      G.map₂ (F.map₂ (α_ f g h).hom) =
    G.mapComp (F.map f) (F.map g) ▷ G.map (F.map h) ≫
      G.mapComp (F.map f ≫ F.map g) (F.map h) ≫
        G.map₂ (F.mapComp f g ▷ F.map h) ≫ G.map₂ (F.mapComp (f ≫ g) h) ≫ G.map₂ (F.map₂ (α_ f g h).hom)
state_after: no goals
tactic: simp only [assoc]
state_before: B : Type u₁
inst✝² : Bicategory B
C : Type u₂
inst✝¹ : Bicategory C
F✝ : LaxFunctor B C
D : Type u₃
inst✝ : Bicategory D
F : LaxFunctor B C
G : LaxFunctor C D
a✝ b✝ : B
f : a✝ ⟶ b✝
⊢ (F.comp G.toPrelaxFunctor).map₂ (λ_ f).inv =
    (λ_ ((F.comp G.toPrelaxFunctor).map f)).inv ≫
      (fun a => G.mapId (F.obj a) ≫ G.map₂ (F.mapId a)) a✝ ▷ (F.comp G.toPrelaxFunctor).map f ≫
        (fun {a b c} f g => G.mapComp (F.map f) (F.map g) ≫ G.map₂ (F.mapComp f g)) (𝟙 a✝) f
state_after: B : Type u₁
inst✝² : Bicategory B
C : Type u₂
inst✝¹ : Bicategory C
F✝ : LaxFunctor B C
D : Type u₃
inst✝ : Bicategory D
F : LaxFunctor B C
G : LaxFunctor C D
a✝ b✝ : B
f : a✝ ⟶ b✝
⊢ G.map₂ (F.map₂ (λ_ f).inv) =
    (λ_ (G.map (F.map f))).inv ≫
      (G.mapId (F.obj a✝) ≫ G.map₂ (F.mapId a✝)) ▷ G.map (F.map f) ≫
        G.mapComp (F.map (𝟙 a✝)) (F.map f) ≫ G.map₂ (F.mapComp (𝟙 a✝) f)
tactic: dsimp
state_before: B : Type u₁
inst✝² : Bicategory B
C : Type u₂
inst✝¹ : Bicategory C
F✝ : LaxFunctor B C
D : Type u₃
inst✝ : Bicategory D
F : LaxFunctor B C
G : LaxFunctor C D
a✝ b✝ : B
f : a✝ ⟶ b✝
⊢ G.map₂ (F.map₂ (λ_ f).inv) =
    (λ_ (G.map (F.map f))).inv ≫
      (G.mapId (F.obj a✝) ≫ G.map₂ (F.mapId a✝)) ▷ G.map (F.map f) ≫
        G.mapComp (F.map (𝟙 a✝)) (F.map f) ≫ G.map₂ (F.mapComp (𝟙 a✝) f)
state_after: no goals
tactic: simp only [map₂_leftUnitor, PrelaxFunctor.map₂_comp, assoc, mapComp_naturality_left_assoc,
      comp_whiskerRight]
state_before: B : Type u₁
inst✝² : Bicategory B
C : Type u₂
inst✝¹ : Bicategory C
F✝ : LaxFunctor B C
D : Type u₃
inst✝ : Bicategory D
F : LaxFunctor B C
G : LaxFunctor C D
a✝ b✝ : B
f : a✝ ⟶ b✝
⊢ (F.comp G.toPrelaxFunctor).map₂ (ρ_ f).inv =
    (ρ_ ((F.comp G.toPrelaxFunctor).map f)).inv ≫
      (F.comp G.toPrelaxFunctor).map f ◁ (fun a => G.mapId (F.obj a) ≫ G.map₂ (F.mapId a)) b✝ ≫
        (fun {a b c} f g => G.mapComp (F.map f) (F.map g) ≫ G.map₂ (F.mapComp f g)) f (𝟙 b✝)
state_after: B : Type u₁
inst✝² : Bicategory B
C : Type u₂
inst✝¹ : Bicategory C
F✝ : LaxFunctor B C
D : Type u₃
inst✝ : Bicategory D
F : LaxFunctor B C
G : LaxFunctor C D
a✝ b✝ : B
f : a✝ ⟶ b✝
⊢ G.map₂ (F.map₂ (ρ_ f).inv) =
    (ρ_ (G.map (F.map f))).inv ≫
      G.map (F.map f) ◁ (G.mapId (F.obj b✝) ≫ G.map₂ (F.mapId b✝)) ≫
        G.mapComp (F.map f) (F.map (𝟙 b✝)) ≫ G.map₂ (F.mapComp f (𝟙 b✝))
tactic: dsimp
state_before: B : Type u₁
inst✝² : Bicategory B
C : Type u₂
inst✝¹ : Bicategory C
F✝ : LaxFunctor B C
D : Type u₃
inst✝ : Bicategory D
F : LaxFunctor B C
G : LaxFunctor C D
a✝ b✝ : B
f : a✝ ⟶ b✝
⊢ G.map₂ (F.map₂ (ρ_ f).inv) =
    (ρ_ (G.map (F.map f))).inv ≫
      G.map (F.map f) ◁ (G.mapId (F.obj b✝) ≫ G.map₂ (F.mapId b✝)) ≫
        G.mapComp (F.map f) (F.map (𝟙 b✝)) ≫ G.map₂ (F.mapComp f (𝟙 b✝))
state_after: no goals
tactic: simp only [map₂_rightUnitor, PrelaxFunctor.map₂_comp, assoc, mapComp_naturality_right_assoc,
      whiskerLeft_comp]