Theorem: CategoryTheory.Limits.colimitFlipCompColimIsoColimitCompColim_ι_ι_hom
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
j : J
k : K
⊢ colimit.ι (F.flip.obj k) j ≫ colimit.ι (F.flip ⋙ colim) k ≫ (colimitFlipCompColimIsoColimitCompColim F).hom =
    colimit.ι (F.obj j) k ≫ colimit.ι (F ⋙ colim) j
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
j : J
k : K
⊢ colimit.ι (F.flip.obj k) j ≫
      colimit.ι (F.flip ⋙ colim) k ≫
        (colimitUncurryIsoColimitCompColim F.flip).inv ≫
          (HasColimit.isoOfNatIso (uncurryObjFlip F)).hom ≫
            (HasColimit.isoOfEquivalence (Prod.braiding K J)
                  (NatIso.ofComponents (fun x => Iso.refl ((F.obj x.2).obj x.1)) ⋯)).hom ≫
              (colimitUncurryIsoColimitCompColim F).hom =
    colimit.ι (F.obj j) k ≫ colimit.ι (F ⋙ colim) j
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
j : J
k : K
⊢ colimit.ι (F.flip.obj k) j ≫
      colimit.ι (F.flip ⋙ colim) k ≫
        (colimitUncurryIsoColimitCompColim F.flip).inv ≫
          (HasColimit.isoOfNatIso (uncurryObjFlip F)).hom ≫
            (HasColimit.isoOfEquivalence (Prod.braiding K J)
                  (NatIso.ofComponents (fun x => Iso.refl ((F.obj x.2).obj x.1)) ⋯)).hom ≫
              (colimitUncurryIsoColimitCompColim F).hom =
    colimit.ι (F.obj j) k ≫ colimit.ι (F ⋙ colim) j
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
j : J
k : K
⊢ (((colimit.ι (F.flip.obj k) j ≫ colimit.ι (F.flip ⋙ colim) k ≫ (colimitUncurryIsoColimitCompColim F.flip).inv) ≫
          (HasColimit.isoOfNatIso (uncurryObjFlip F)).hom) ≫
        (HasColimit.isoOfEquivalence (Prod.braiding K J)
            (NatIso.ofComponents (fun x => Iso.refl ((F.obj x.2).obj x.1)) ⋯)).hom) ≫
      (colimitUncurryIsoColimitCompColim F).hom =
    colimit.ι (F.obj j) k ≫ colimit.ι (F ⋙ colim) j
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
j : J
k : K
⊢ (((colimit.ι (F.flip.obj k) j ≫ colimit.ι (F.flip ⋙ colim) k ≫ (colimitUncurryIsoColimitCompColim F.flip).inv) ≫
          (HasColimit.isoOfNatIso (uncurryObjFlip F)).hom) ≫
        (HasColimit.isoOfEquivalence (Prod.braiding K J)
            (NatIso.ofComponents (fun x => Iso.refl ((F.obj x.2).obj x.1)) ⋯)).hom) ≫
      (colimitUncurryIsoColimitCompColim F).hom =
    colimit.ι (F.obj j) k ≫ colimit.ι (F ⋙ colim) j
state_after: no goals
tactic: simp