Theorem: CategoryTheory.ShiftedHom.map_comp
File: Mathlib/CategoryTheory/Shift/ShiftedHom.lean

Proof steps:
state_before: C : Type u_1
inst✝⁷ : Category.{u_5, u_1} C
D : Type u_2
inst✝⁶ : Category.{u_6, u_2} D
E : Type u_3
inst✝⁵ : Category.{?u.61156, u_3} E
M : Type u_4
inst✝⁴ : AddMonoid M
inst✝³ : HasShift C M
inst✝² : HasShift D M
inst✝¹ : HasShift E M
X Y Z T : C
a b c : M
f : ShiftedHom X Y a
g : ShiftedHom Y Z b
h : b + a = c
F : C ⥤ D
inst✝ : F.CommShift M
⊢ (f.comp g h).map F = (f.map F).comp (g.map F) h
state_after: C : Type u_1
inst✝⁷ : Category.{u_5, u_1} C
D : Type u_2
inst✝⁶ : Category.{u_6, u_2} D
E : Type u_3
inst✝⁵ : Category.{?u.61156, u_3} E
M : Type u_4
inst✝⁴ : AddMonoid M
inst✝³ : HasShift C M
inst✝² : HasShift D M
inst✝¹ : HasShift E M
X Y Z T : C
a b c : M
f : ShiftedHom X Y a
g : ShiftedHom Y Z b
h : b + a = c
F : C ⥤ D
inst✝ : F.CommShift M
⊢ F.map (f ≫ (shiftFunctor C a).map g ≫ (shiftFunctorAdd' C b a c h).inv.app Z) ≫ (F.commShiftIso c).hom.app Z =
    (F.map f ≫ (F.commShiftIso a).hom.app Y) ≫
      (shiftFunctor D a).map (F.map g ≫ (F.commShiftIso b).hom.app Z) ≫ (shiftFunctorAdd' D b a c h).inv.app (F.obj Z)
tactic: dsimp [comp, map]
state_before: C : Type u_1
inst✝⁷ : Category.{u_5, u_1} C
D : Type u_2
inst✝⁶ : Category.{u_6, u_2} D
E : Type u_3
inst✝⁵ : Category.{?u.61156, u_3} E
M : Type u_4
inst✝⁴ : AddMonoid M
inst✝³ : HasShift C M
inst✝² : HasShift D M
inst✝¹ : HasShift E M
X Y Z T : C
a b c : M
f : ShiftedHom X Y a
g : ShiftedHom Y Z b
h : b + a = c
F : C ⥤ D
inst✝ : F.CommShift M
⊢ F.map (f ≫ (shiftFunctor C a).map g ≫ (shiftFunctorAdd' C b a c h).inv.app Z) ≫ (F.commShiftIso c).hom.app Z =
    (F.map f ≫ (F.commShiftIso a).hom.app Y) ≫
      (shiftFunctor D a).map (F.map g ≫ (F.commShiftIso b).hom.app Z) ≫ (shiftFunctorAdd' D b a c h).inv.app (F.obj Z)
state_after: C : Type u_1
inst✝⁷ : Category.{u_5, u_1} C
D : Type u_2
inst✝⁶ : Category.{u_6, u_2} D
E : Type u_3
inst✝⁵ : Category.{?u.61156, u_3} E
M : Type u_4
inst✝⁴ : AddMonoid M
inst✝³ : HasShift C M
inst✝² : HasShift D M
inst✝¹ : HasShift E M
X Y Z T : C
a b c : M
f : ShiftedHom X Y a
g : ShiftedHom Y Z b
h : b + a = c
F : C ⥤ D
inst✝ : F.CommShift M
⊢ F.map f ≫
      F.map ((shiftFunctor C a).map g) ≫ F.map ((shiftFunctorAdd' C b a c h).inv.app Z) ≫ (F.commShiftIso c).hom.app Z =
    F.map f ≫
      (F.commShiftIso a).hom.app Y ≫
        (shiftFunctor D a).map (F.map g) ≫
          (shiftFunctor D a).map ((F.commShiftIso b).hom.app Z) ≫ (shiftFunctorAdd' D b a c h).inv.app (F.obj Z)
tactic: simp only [Functor.map_comp, assoc]
state_before: C : Type u_1
inst✝⁷ : Category.{u_5, u_1} C
D : Type u_2
inst✝⁶ : Category.{u_6, u_2} D
E : Type u_3
inst✝⁵ : Category.{?u.61156, u_3} E
M : Type u_4
inst✝⁴ : AddMonoid M
inst✝³ : HasShift C M
inst✝² : HasShift D M
inst✝¹ : HasShift E M
X Y Z T : C
a b c : M
f : ShiftedHom X Y a
g : ShiftedHom Y Z b
h : b + a = c
F : C ⥤ D
inst✝ : F.CommShift M
⊢ F.map f ≫
      F.map ((shiftFunctor C a).map g) ≫ F.map ((shiftFunctorAdd' C b a c h).inv.app Z) ≫ (F.commShiftIso c).hom.app Z =
    F.map f ≫
      (F.commShiftIso a).hom.app Y ≫
        (shiftFunctor D a).map (F.map g) ≫
          (shiftFunctor D a).map ((F.commShiftIso b).hom.app Z) ≫ (shiftFunctorAdd' D b a c h).inv.app (F.obj Z)
state_after: C : Type u_1
inst✝⁷ : Category.{u_5, u_1} C
D : Type u_2
inst✝⁶ : Category.{u_6, u_2} D
E : Type u_3
inst✝⁵ : Category.{?u.61156, u_3} E
M : Type u_4
inst✝⁴ : AddMonoid M
inst✝³ : HasShift C M
inst✝² : HasShift D M
inst✝¹ : HasShift E M
X Y Z T : C
a b c : M
f : ShiftedHom X Y a
g : ShiftedHom Y Z b
h : b + a = c
F : C ⥤ D
inst✝ : F.CommShift M
⊢ F.map f ≫
      F.map ((shiftFunctor C a).map g) ≫ F.map ((shiftFunctorAdd' C b a c h).inv.app Z) ≫ (F.commShiftIso c).hom.app Z =
    F.map f ≫
      (shiftFunctor C a ⋙ F).map g ≫
        (F.commShiftIso a).hom.app ((shiftFunctor C b).obj Z) ≫
          (shiftFunctor D a).map ((F.commShiftIso b).hom.app Z) ≫ (shiftFunctorAdd' D b a c h).inv.app (F.obj Z)
tactic: erw [← NatTrans.naturality_assoc]
state_before: C : Type u_1
inst✝⁷ : Category.{u_5, u_1} C
D : Type u_2
inst✝⁶ : Category.{u_6, u_2} D
E : Type u_3
inst✝⁵ : Category.{?u.61156, u_3} E
M : Type u_4
inst✝⁴ : AddMonoid M
inst✝³ : HasShift C M
inst✝² : HasShift D M
inst✝¹ : HasShift E M
X Y Z T : C
a b c : M
f : ShiftedHom X Y a
g : ShiftedHom Y Z b
h : b + a = c
F : C ⥤ D
inst✝ : F.CommShift M
⊢ F.map f ≫
      F.map ((shiftFunctor C a).map g) ≫ F.map ((shiftFunctorAdd' C b a c h).inv.app Z) ≫ (F.commShiftIso c).hom.app Z =
    F.map f ≫
      (shiftFunctor C a ⋙ F).map g ≫
        (F.commShiftIso a).hom.app ((shiftFunctor C b).obj Z) ≫
          (shiftFunctor D a).map ((F.commShiftIso b).hom.app Z) ≫ (shiftFunctorAdd' D b a c h).inv.app (F.obj Z)
state_after: no goals
tactic: simp only [Functor.comp_map, F.commShiftIso_add' h, Functor.CommShift.isoAdd'_hom_app,
    ← Functor.map_comp_assoc, Iso.inv_hom_id_app, Functor.comp_obj, comp_id, assoc]