Theorem: CategoryTheory.Limits.colimitFlipCompColimIsoColimitCompColim_ι_ι_inv
File: Mathlib/CategoryTheory/Limits/Fubini.lean

Proof steps:
state_before: J K : Type v
inst✝⁶ : SmallCategory J
inst✝⁵ : SmallCategory K
C : Type u
inst✝⁴ : Category.{v, u} C
F : J ⥤ K ⥤ C
inst✝³ : HasColimitsOfShape J C
inst✝² : HasColimitsOfShape K C
inst✝¹ : HasColimitsOfShape (J × K) C
inst✝ : HasColimitsOfShape (K × J) C
k : K
j : J
⊢ colimit.ι (F.obj j) k ≫ colimit.ι (F ⋙ colim) j ≫ (colimitFlipCompColimIsoColimitCompColim F).inv =
    colimit.ι (F.flip.obj k) j ≫ colimit.ι (F.flip ⋙ colim) k
state_after: J K : Type v
inst✝⁶ : SmallCategory J
inst✝⁵ : SmallCategory K
C : Type u
inst✝⁴ : Category.{v, u} C
F : J ⥤ K ⥤ C
inst✝³ : HasColimitsOfShape J C
inst✝² : HasColimitsOfShape K C
inst✝¹ : HasColimitsOfShape (J × K) C
inst✝ : HasColimitsOfShape (K × J) C
k : K
j : J
⊢ colimit.ι (F.obj j) k ≫
      colimit.ι (F ⋙ colim) j ≫
        (((colimitUncurryIsoColimitCompColim F).inv ≫
              (HasColimit.isoOfEquivalence (Prod.braiding K J)
                  (NatIso.ofComponents (fun x => Iso.refl ((F.obj x.2).obj x.1)) ⋯)).inv) ≫
            (HasColimit.isoOfNatIso (uncurryObjFlip F)).inv) ≫
          (colimitUncurryIsoColimitCompColim F.flip).hom =
    colimit.ι (F.flip.obj k) j ≫ colimit.ι (F.flip ⋙ colim) k
tactic: dsimp [colimitFlipCompColimIsoColimitCompColim]
state_before: J K : Type v
inst✝⁶ : SmallCategory J
inst✝⁵ : SmallCategory K
C : Type u
inst✝⁴ : Category.{v, u} C
F : J ⥤ K ⥤ C
inst✝³ : HasColimitsOfShape J C
inst✝² : HasColimitsOfShape K C
inst✝¹ : HasColimitsOfShape (J × K) C
inst✝ : HasColimitsOfShape (K × J) C
k : K
j : J
⊢ colimit.ι (F.obj j) k ≫
      colimit.ι (F ⋙ colim) j ≫
        (((colimitUncurryIsoColimitCompColim F).inv ≫
              (HasColimit.isoOfEquivalence (Prod.braiding K J)
                  (NatIso.ofComponents (fun x => Iso.refl ((F.obj x.2).obj x.1)) ⋯)).inv) ≫
            (HasColimit.isoOfNatIso (uncurryObjFlip F)).inv) ≫
          (colimitUncurryIsoColimitCompColim F.flip).hom =
    colimit.ι (F.flip.obj k) j ≫ colimit.ι (F.flip ⋙ colim) k
state_after: J K : Type v
inst✝⁶ : SmallCategory J
inst✝⁵ : SmallCategory K
C : Type u
inst✝⁴ : Category.{v, u} C
F : J ⥤ K ⥤ C
inst✝³ : HasColimitsOfShape J C
inst✝² : HasColimitsOfShape K C
inst✝¹ : HasColimitsOfShape (J × K) C
inst✝ : HasColimitsOfShape (K × J) C
k : K
j : J
⊢ (((colimit.ι (F.obj j) k ≫ colimit.ι (F ⋙ colim) j ≫ (colimitUncurryIsoColimitCompColim F).inv) ≫
          (HasColimit.isoOfEquivalence (Prod.braiding K J)
              (NatIso.ofComponents (fun x => Iso.refl ((F.obj x.2).obj x.1)) ⋯)).inv) ≫
        (HasColimit.isoOfNatIso (uncurryObjFlip F)).inv) ≫
      (colimitUncurryIsoColimitCompColim F.flip).hom =
    colimit.ι (F.flip.obj k) j ≫ colimit.ι (F.flip ⋙ colim) k
tactic: slice_lhs 1 3 => simp only []
state_before: J K : Type v
inst✝⁶ : SmallCategory J
inst✝⁵ : SmallCategory K
C : Type u
inst✝⁴ : Category.{v, u} C
F : J ⥤ K ⥤ C
inst✝³ : HasColimitsOfShape J C
inst✝² : HasColimitsOfShape K C
inst✝¹ : HasColimitsOfShape (J × K) C
inst✝ : HasColimitsOfShape (K × J) C
k : K
j : J
⊢ (((colimit.ι (F.obj j) k ≫ colimit.ι (F ⋙ colim) j ≫ (colimitUncurryIsoColimitCompColim F).inv) ≫
          (HasColimit.isoOfEquivalence (Prod.braiding K J)
              (NatIso.ofComponents (fun x => Iso.refl ((F.obj x.2).obj x.1)) ⋯)).inv) ≫
        (HasColimit.isoOfNatIso (uncurryObjFlip F)).inv) ≫
      (colimitUncurryIsoColimitCompColim F.flip).hom =
    colimit.ι (F.flip.obj k) j ≫ colimit.ι (F.flip ⋙ colim) k
state_after: no goals
tactic: simp