Theorem: CategoryTheory.OplaxNatTrans.vcomp_naturality
File: Mathlib/CategoryTheory/Bicategory/NaturalTransformation/Oplax.lean

Proof steps:
state_before: B : Type u₁
inst✝¹ : Bicategory B
C : Type u₂
inst✝ : Bicategory C
F G H : OplaxFunctor B C
η✝ : OplaxNatTrans F G
θ✝ : OplaxNatTrans G H
η : OplaxNatTrans F G
θ : OplaxNatTrans G H
a b c : B
f : a ⟶ b
g : b ⟶ c
⊢ (fun {a b} f =>
          (α_ (F.map f) (η.app b) (θ.app b)).inv ≫
            η.naturality f ▷ θ.app b ≫
              (α_ (η.app a) (G.map f) (θ.app b)).hom ≫
                η.app a ◁ θ.naturality f ≫ (α_ (η.app a) (θ.app a) (H.map f)).inv)
        (f ≫ g) ≫
      (fun a => η.app a ≫ θ.app a) a ◁ H.mapComp f g =
    F.mapComp f g ▷ (fun a => η.app a ≫ θ.app a) c ≫
      (α_ (F.map f) (F.map g) ((fun a => η.app a ≫ θ.app a) c)).hom ≫
        F.map f ◁
            (fun {a b} f =>
                (α_ (F.map f) (η.app b) (θ.app b)).inv ≫
                  η.naturality f ▷ θ.app b ≫
                    (α_ (η.app a) (G.map f) (θ.app b)).hom ≫
                      η.app a ◁ θ.naturality f ≫ (α_ (η.app a) (θ.app a) (H.map f)).inv)
              g ≫
          (α_ (F.map f) ((fun a => η.app a ≫ θ.app a) b) (H.map g)).inv ≫
            (fun {a b} f =>
                    (α_ (F.map f) (η.app b) (θ.app b)).inv ≫
                      η.naturality f ▷ θ.app b ≫
                        (α_ (η.app a) (G.map f) (θ.app b)).hom ≫
                          η.app a ◁ θ.naturality f ≫ (α_ (η.app a) (θ.app a) (H.map f)).inv)
                  f ▷
                H.map g ≫
              (α_ ((fun a => η.app a ≫ θ.app a) a) (H.map f) (H.map g)).hom
state_after: case calc_1
B : Type u₁
inst✝¹ : Bicategory B
C : Type u₂
inst✝ : Bicategory C
F G H : OplaxFunctor B C
η✝ : OplaxNatTrans F G
θ✝ : OplaxNatTrans G H
η : OplaxNatTrans F G
θ : OplaxNatTrans G H
a b c : B
f : a ⟶ b
g : b ⟶ c
⊢ F.map (f ≫ g) ≫ (fun a => η.app a ≫ θ.app a) c ⟶ (F.map (f ≫ g) ≫ η.app c) ≫ θ.app c

case calc_2
B : Type u₁
inst✝¹ : Bicategory B
C : Type u₂
inst✝ : Bicategory C
F G H : OplaxFunctor B C
η✝ : OplaxNatTrans F G
θ✝ : OplaxNatTrans G H
η : OplaxNatTrans F G
θ : OplaxNatTrans G H
a b c : B
f : a ⟶ b
g : b ⟶ c
⊢ ((F.map f ≫ F.map g) ≫ η.app c) ≫ θ.app c ⟶ F.map f ≫ (F.map g ≫ η.app c) ≫ θ.app c

case calc_3
B : Type u₁
inst✝¹ : Bicategory B
C : Type u₂
inst✝ : Bicategory C
F G H : OplaxFunctor B C
η✝ : OplaxNatTrans F G
θ✝ : OplaxNatTrans G H
η : OplaxNatTrans F G
θ : OplaxNatTrans G H
a b c : B
f : a ⟶ b
g : b ⟶ c
⊢ F.map f ≫ (η.app b ≫ G.map g) ≫ θ.app c ⟶ (F.map f ≫ η.app b) ≫ G.map g ≫ θ.app c

case calc_4
B : Type u₁
inst✝¹ : Bicategory B
C : Type u₂
inst✝ : Bicategory C
F G H : OplaxFunctor B C
η✝ : OplaxNatTrans F G
θ✝ : OplaxNatTrans G H
η : OplaxNatTrans F G
θ : OplaxNatTrans G H
a b c : B
f : a ⟶ b
g : b ⟶ c
⊢ (η.app a ≫ G.map f) ≫ θ.app b ≫ H.map g ⟶ η.app a ≫ (G.map f ≫ θ.app b) ≫ H.map g

case calc_5
B : Type u₁
inst✝¹ : Bicategory B
C : Type u₂
inst✝ : Bicategory C
F G H : OplaxFunctor B C
η✝ : OplaxNatTrans F G
θ✝ : OplaxNatTrans G H
η : OplaxNatTrans F G
θ : OplaxNatTrans G H
a b c : B
f : a ⟶ b
g : b ⟶ c
⊢ η.app a ≫ (θ.app a ≫ H.map f) ≫ H.map g ⟶ (fun a => η.app a ≫ θ.app a) a ≫ H.map f ≫ H.map g

case calc_6
B : Type u₁
inst✝¹ : Bicategory B
C : Type u₂
inst✝ : Bicategory C
F G H : OplaxFunctor B C
η✝ : OplaxNatTrans F G
θ✝ : OplaxNatTrans G H
η : OplaxNatTrans F G
θ : OplaxNatTrans G H
a b c : B
f : a ⟶ b
g : b ⟶ c
⊢ (fun {a b} f =>
          (α_ (F.map f) (η.app b) (θ.app b)).inv ≫
            η.naturality f ▷ θ.app b ≫
              (α_ (η.app a) (G.map f) (θ.app b)).hom ≫
                η.app a ◁ θ.naturality f ≫ (α_ (η.app a) (θ.app a) (H.map f)).inv)
        (f ≫ g) ≫
      (fun a => η.app a ≫ θ.app a) a ◁ H.mapComp f g =
    ?calc_1 ≫
      F.mapComp f g ▷ η.app c ▷ θ.app c ≫
        ?calc_2 ≫
          F.map f ◁ η.naturality g ▷ θ.app c ≫
            ?calc_3 ≫
              (F.map f ≫ η.app b) ◁ θ.naturality g ≫
                η.naturality f ▷ (θ.app b ≫ H.map g) ≫ ?calc_4 ≫ η.app a ◁ θ.naturality f ▷ H.map g ≫ ?calc_5

case calc_7
B : Type u₁
inst✝¹ : Bicategory B
C : Type u₂
inst✝ : Bicategory C
F G H : OplaxFunctor B C
η✝ : OplaxNatTrans F G
θ✝ : OplaxNatTrans G H
η : OplaxNatTrans F G
θ : OplaxNatTrans G H
a b c : B
f : a ⟶ b
g : b ⟶ c
⊢ ?calc_1 ≫
      F.mapComp f g ▷ η.app c ▷ θ.app c ≫
        ?calc_2 ≫
          F.map f ◁ η.naturality g ▷ θ.app c ≫
            ?calc_3 ≫
              (F.map f ≫ η.app b) ◁ θ.naturality g ≫
                η.naturality f ▷ (θ.app b ≫ H.map g) ≫ ?calc_4 ≫ η.app a ◁ θ.naturality f ▷ H.map g ≫ ?calc_5 =
    F.mapComp f g ▷ (fun a => η.app a ≫ θ.app a) c ≫
      (α_ (F.map f) (F.map g) ((fun a => η.app a ≫ θ.app a) c)).hom ≫
        F.map f ◁
            (fun {a b} f =>
                (α_ (F.map f) (η.app b) (θ.app b)).inv ≫
                  η.naturality f ▷ θ.app b ≫
                    (α_ (η.app a) (G.map f) (θ.app b)).hom ≫
                      η.app a ◁ θ.naturality f ≫ (α_ (η.app a) (θ.app a) (H.map f)).inv)
              g ≫
          (α_ (F.map f) ((fun a => η.app a ≫ θ.app a) b) (H.map g)).inv ≫
            (fun {a b} f =>
                    (α_ (F.map f) (η.app b) (θ.app b)).inv ≫
                      η.naturality f ▷ θ.app b ≫
                        (α_ (η.app a) (G.map f) (θ.app b)).hom ≫
                          η.app a ◁ θ.naturality f ≫ (α_ (η.app a) (θ.app a) (H.map f)).inv)
                  f ▷
                H.map g ≫
              (α_ ((fun a => η.app a ≫ θ.app a) a) (H.map f) (H.map g)).hom
tactic: calc
      _ =
          ?_ ≫
            F.mapComp f g ▷ η.app c ▷ θ.app c ≫
              ?_ ≫
                F.map f ◁ η.naturality g ▷ θ.app c ≫
                  ?_ ≫
                    (F.map f ≫ η.app b) ◁ θ.naturality g ≫
                      η.naturality f ▷ (θ.app b ≫ H.map g) ≫
                        ?_ ≫ η.app a ◁ θ.naturality f ▷ H.map g ≫ ?_ :=
        ?_
      _ = _ := ?_