Theorem: CategoryTheory.Functor.mapBifunctorHomologicalComplex_map_app_f_f
File: Mathlib/Algebra/Homology/Bifunctor.lean

Proof steps:
state_before: C₁ : Type u_1
C₂ : Type u_2
D : Type u_3
inst✝⁷ : Category.{?u.35500, u_1} C₁
inst✝⁶ : Category.{?u.35504, u_2} C₂
inst✝⁵ : Category.{?u.35508, u_3} D
inst✝⁴ : HasZeroMorphisms C₁
inst✝³ : HasZeroMorphisms C₂
inst✝² : HasZeroMorphisms D
F : C₁ ⥤ C₂ ⥤ D
I₁ : Type u_4
I₂ : Type u_5
J : Type u_6
c₁ : ComplexShape I₁
c₂ : ComplexShape I₂
inst✝¹ : F.PreservesZeroMorphisms
inst✝ : ∀ (X₁ : C₁), (F.obj X₁).PreservesZeroMorphisms
K₁ K₁' : HomologicalComplex C₁ c₁
f : K₁ ⟶ K₁'
K₂ : HomologicalComplex C₂ c₂
⊢ ∀ (i₁ i₁' : I₁) (i₂ : I₂),
    c₁.Rel i₁ i₁' →
      ((GradedObject.mapBifunctor F I₁ I₂).map f.f).app K₂.X (i₁, i₂) ≫
          (((F.mapBifunctorHomologicalComplexObj c₂ K₁').obj K₂).d i₁ i₁').f i₂ =
        (((F.mapBifunctorHomologicalComplexObj c₂ K₁).obj K₂).d i₁ i₁').f i₂ ≫
          ((GradedObject.mapBifunctor F I₁ I₂).map f.f).app K₂.X (i₁', i₂)
state_after: C₁ : Type u_1
C₂ : Type u_2
D : Type u_3
inst✝⁷ : Category.{?u.35500, u_1} C₁
inst✝⁶ : Category.{?u.35504, u_2} C₂
inst✝⁵ : Category.{?u.35508, u_3} D
inst✝⁴ : HasZeroMorphisms C₁
inst✝³ : HasZeroMorphisms C₂
inst✝² : HasZeroMorphisms D
F : C₁ ⥤ C₂ ⥤ D
I₁ : Type u_4
I₂ : Type u_5
J : Type u_6
c₁ : ComplexShape I₁
c₂ : ComplexShape I₂
inst✝¹ : F.PreservesZeroMorphisms
inst✝ : ∀ (X₁ : C₁), (F.obj X₁).PreservesZeroMorphisms
K₁ K₁' : HomologicalComplex C₁ c₁
f : K₁ ⟶ K₁'
K₂ : HomologicalComplex C₂ c₂
i₁✝ i₁'✝ : I₁
i₂✝ : I₂
a✝ : c₁.Rel i₁✝ i₁'✝
⊢ ((GradedObject.mapBifunctor F I₁ I₂).map f.f).app K₂.X (i₁✝, i₂✝) ≫
      (((F.mapBifunctorHomologicalComplexObj c₂ K₁').obj K₂).d i₁✝ i₁'✝).f i₂✝ =
    (((F.mapBifunctorHomologicalComplexObj c₂ K₁).obj K₂).d i₁✝ i₁'✝).f i₂✝ ≫
      ((GradedObject.mapBifunctor F I₁ I₂).map f.f).app K₂.X (i₁'✝, i₂✝)
tactic: intros
state_before: C₁ : Type u_1
C₂ : Type u_2
D : Type u_3
inst✝⁷ : Category.{?u.35500, u_1} C₁
inst✝⁶ : Category.{?u.35504, u_2} C₂
inst✝⁵ : Category.{?u.35508, u_3} D
inst✝⁴ : HasZeroMorphisms C₁
inst✝³ : HasZeroMorphisms C₂
inst✝² : HasZeroMorphisms D
F : C₁ ⥤ C₂ ⥤ D
I₁ : Type u_4
I₂ : Type u_5
J : Type u_6
c₁ : ComplexShape I₁
c₂ : ComplexShape I₂
inst✝¹ : F.PreservesZeroMorphisms
inst✝ : ∀ (X₁ : C₁), (F.obj X₁).PreservesZeroMorphisms
K₁ K₁' : HomologicalComplex C₁ c₁
f : K₁ ⟶ K₁'
K₂ : HomologicalComplex C₂ c₂
i₁✝ i₁'✝ : I₁
i₂✝ : I₂
a✝ : c₁.Rel i₁✝ i₁'✝
⊢ ((GradedObject.mapBifunctor F I₁ I₂).map f.f).app K₂.X (i₁✝, i₂✝) ≫
      (((F.mapBifunctorHomologicalComplexObj c₂ K₁').obj K₂).d i₁✝ i₁'✝).f i₂✝ =
    (((F.mapBifunctorHomologicalComplexObj c₂ K₁).obj K₂).d i₁✝ i₁'✝).f i₂✝ ≫
      ((GradedObject.mapBifunctor F I₁ I₂).map f.f).app K₂.X (i₁'✝, i₂✝)
state_after: C₁ : Type u_1
C₂ : Type u_2
D : Type u_3
inst✝⁷ : Category.{?u.35500, u_1} C₁
inst✝⁶ : Category.{?u.35504, u_2} C₂
inst✝⁵ : Category.{?u.35508, u_3} D
inst✝⁴ : HasZeroMorphisms C₁
inst✝³ : HasZeroMorphisms C₂
inst✝² : HasZeroMorphisms D
F : C₁ ⥤ C₂ ⥤ D
I₁ : Type u_4
I₂ : Type u_5
J : Type u_6
c₁ : ComplexShape I₁
c₂ : ComplexShape I₂
inst✝¹ : F.PreservesZeroMorphisms
inst✝ : ∀ (X₁ : C₁), (F.obj X₁).PreservesZeroMorphisms
K₁ K₁' : HomologicalComplex C₁ c₁
f : K₁ ⟶ K₁'
K₂ : HomologicalComplex C₂ c₂
i₁✝ i₁'✝ : I₁
i₂✝ : I₂
a✝ : c₁.Rel i₁✝ i₁'✝
⊢ (F.map (f.f i₁✝)).app (K₂.X i₂✝) ≫ (F.map (K₁'.d i₁✝ i₁'✝)).app (K₂.X i₂✝) =
    (F.map (K₁.d i₁✝ i₁'✝)).app (K₂.X i₂✝) ≫ (F.map (f.f i₁'✝)).app (K₂.X i₂✝)
tactic: dsimp
state_before: C₁ : Type u_1
C₂ : Type u_2
D : Type u_3
inst✝⁷ : Category.{?u.35500, u_1} C₁
inst✝⁶ : Category.{?u.35504, u_2} C₂
inst✝⁵ : Category.{?u.35508, u_3} D
inst✝⁴ : HasZeroMorphisms C₁
inst✝³ : HasZeroMorphisms C₂
inst✝² : HasZeroMorphisms D
F : C₁ ⥤ C₂ ⥤ D
I₁ : Type u_4
I₂ : Type u_5
J : Type u_6
c₁ : ComplexShape I₁
c₂ : ComplexShape I₂
inst✝¹ : F.PreservesZeroMorphisms
inst✝ : ∀ (X₁ : C₁), (F.obj X₁).PreservesZeroMorphisms
K₁ K₁' : HomologicalComplex C₁ c₁
f : K₁ ⟶ K₁'
K₂ : HomologicalComplex C₂ c₂
i₁✝ i₁'✝ : I₁
i₂✝ : I₂
a✝ : c₁.Rel i₁✝ i₁'✝
⊢ (F.map (f.f i₁✝)).app (K₂.X i₂✝) ≫ (F.map (K₁'.d i₁✝ i₁'✝)).app (K₂.X i₂✝) =
    (F.map (K₁.d i₁✝ i₁'✝)).app (K₂.X i₂✝) ≫ (F.map (f.f i₁'✝)).app (K₂.X i₂✝)
state_after: no goals
tactic: simp only [← NatTrans.comp_app, ← F.map_comp, f.comm]
state_before: C₁ : Type u_1
C₂ : Type u_2
D : Type u_3
inst✝⁷ : Category.{?u.35500, u_1} C₁
inst✝⁶ : Category.{?u.35504, u_2} C₂
inst✝⁵ : Category.{?u.35508, u_3} D
inst✝⁴ : HasZeroMorphisms C₁
inst✝³ : HasZeroMorphisms C₂
inst✝² : HasZeroMorphisms D
F : C₁ ⥤ C₂ ⥤ D
I₁ : Type u_4
I₂ : Type u_5
J : Type u_6
c₁ : ComplexShape I₁
c₂ : ComplexShape I₂
inst✝¹ : F.PreservesZeroMorphisms
inst✝ : ∀ (X₁ : C₁), (F.obj X₁).PreservesZeroMorphisms
K₁ K₁' : HomologicalComplex C₁ c₁
f : K₁ ⟶ K₁'
K₂ : HomologicalComplex C₂ c₂
⊢ ∀ (i₁ : I₁) (i₂ i₂' : I₂),
    c₂.Rel i₂ i₂' →
      ((GradedObject.mapBifunctor F I₁ I₂).map f.f).app K₂.X (i₁, i₂) ≫
          (((F.mapBifunctorHomologicalComplexObj c₂ K₁').obj K₂).X i₁).d i₂ i₂' =
        (((F.mapBifunctorHomologicalComplexObj c₂ K₁).obj K₂).X i₁).d i₂ i₂' ≫
          ((GradedObject.mapBifunctor F I₁ I₂).map f.f).app K₂.X (i₁, i₂')
state_after: no goals
tactic: simp