Theorem: HomologicalComplex.coneOfHasLimitEval_π_app_f
File: Mathlib/Algebra/Homology/HomologicalComplexLimits.lean

Proof steps:
state_before: C : Type u_1
ι : Type u_2
J : Type u_3
inst✝³ : Category.{?u.6070, u_1} C
inst✝² : Category.{?u.6074, u_3} J
c : ComplexShape ι
inst✝¹ : HasZeroMorphisms C
F : J ⥤ HomologicalComplex C c
inst✝ : ∀ (n : ι), HasLimit (F ⋙ eval C c n)
n m : ι
h : ¬c.Rel n m
⊢ (fun n m => limMap { app := fun j => (F.obj j).d n m, naturality := ⋯ }) n m = 0
state_after: case w
C : Type u_1
ι : Type u_2
J : Type u_3
inst✝³ : Category.{?u.6070, u_1} C
inst✝² : Category.{?u.6074, u_3} J
c : ComplexShape ι
inst✝¹ : HasZeroMorphisms C
F : J ⥤ HomologicalComplex C c
inst✝ : ∀ (n : ι), HasLimit (F ⋙ eval C c n)
n m : ι
h : ¬c.Rel n m
j : J
⊢ (fun n m => limMap { app := fun j => (F.obj j).d n m, naturality := ⋯ }) n m ≫ limit.π (F ⋙ eval C c m) j =
    0 ≫ limit.π (F ⋙ eval C c m) j
tactic: ext j
state_before: case w
C : Type u_1
ι : Type u_2
J : Type u_3
inst✝³ : Category.{?u.6070, u_1} C
inst✝² : Category.{?u.6074, u_3} J
c : ComplexShape ι
inst✝¹ : HasZeroMorphisms C
F : J ⥤ HomologicalComplex C c
inst✝ : ∀ (n : ι), HasLimit (F ⋙ eval C c n)
n m : ι
h : ¬c.Rel n m
j : J
⊢ (fun n m => limMap { app := fun j => (F.obj j).d n m, naturality := ⋯ }) n m ≫ limit.π (F ⋙ eval C c m) j =
    0 ≫ limit.π (F ⋙ eval C c m) j
state_after: case w
C : Type u_1
ι : Type u_2
J : Type u_3
inst✝³ : Category.{?u.6070, u_1} C
inst✝² : Category.{?u.6074, u_3} J
c : ComplexShape ι
inst✝¹ : HasZeroMorphisms C
F : J ⥤ HomologicalComplex C c
inst✝ : ∀ (n : ι), HasLimit (F ⋙ eval C c n)
n m : ι
h : ¬c.Rel n m
j : J
⊢ limit.π (F ⋙ eval C c n) j ≫ { app := fun j => (F.obj j).d n m, naturality := ⋯ }.app j =
    0 ≫ limit.π (F ⋙ eval C c m) j
tactic: rw [limMap_π]
state_before: case w
C : Type u_1
ι : Type u_2
J : Type u_3
inst✝³ : Category.{?u.6070, u_1} C
inst✝² : Category.{?u.6074, u_3} J
c : ComplexShape ι
inst✝¹ : HasZeroMorphisms C
F : J ⥤ HomologicalComplex C c
inst✝ : ∀ (n : ι), HasLimit (F ⋙ eval C c n)
n m : ι
h : ¬c.Rel n m
j : J
⊢ limit.π (F ⋙ eval C c n) j ≫ { app := fun j => (F.obj j).d n m, naturality := ⋯ }.app j =
    0 ≫ limit.π (F ⋙ eval C c m) j
state_after: case w
C : Type u_1
ι : Type u_2
J : Type u_3
inst✝³ : Category.{?u.6070, u_1} C
inst✝² : Category.{?u.6074, u_3} J
c : ComplexShape ι
inst✝¹ : HasZeroMorphisms C
F : J ⥤ HomologicalComplex C c
inst✝ : ∀ (n : ι), HasLimit (F ⋙ eval C c n)
n m : ι
h : ¬c.Rel n m
j : J
⊢ limit.π (F ⋙ eval C c n) j ≫ (F.obj j).d n m = 0 ≫ limit.π (F ⋙ eval C c m) j
tactic: dsimp
state_before: case w
C : Type u_1
ι : Type u_2
J : Type u_3
inst✝³ : Category.{?u.6070, u_1} C
inst✝² : Category.{?u.6074, u_3} J
c : ComplexShape ι
inst✝¹ : HasZeroMorphisms C
F : J ⥤ HomologicalComplex C c
inst✝ : ∀ (n : ι), HasLimit (F ⋙ eval C c n)
n m : ι
h : ¬c.Rel n m
j : J
⊢ limit.π (F ⋙ eval C c n) j ≫ (F.obj j).d n m = 0 ≫ limit.π (F ⋙ eval C c m) j
state_after: no goals
tactic: rw [(F.obj j).shape _ _ h, comp_zero, zero_comp]
state_before: C : Type u_1
ι : Type u_2
J : Type u_3
inst✝³ : Category.{?u.6070, u_1} C
inst✝² : Category.{?u.6074, u_3} J
c : ComplexShape ι
inst✝¹ : HasZeroMorphisms C
F : J ⥤ HomologicalComplex C c
inst✝ : ∀ (n : ι), HasLimit (F ⋙ eval C c n)
i j : J
φ : i ⟶ j
⊢ ((Functor.const J).obj
            { X := fun n => limit (F ⋙ eval C c n),
              d := fun n m => limMap { app := fun j => (F.obj j).d n m, naturality := ⋯ }, shape := ⋯,
              d_comp_d' := ⋯ }).map
        φ ≫
      (fun j => { f := fun n => limit.π (F ⋙ eval C c n) j, comm' := ⋯ }) j =
    (fun j => { f := fun n => limit.π (F ⋙ eval C c n) j, comm' := ⋯ }) i ≫ F.map φ
state_after: case h
C : Type u_1
ι : Type u_2
J : Type u_3
inst✝³ : Category.{?u.6070, u_1} C
inst✝² : Category.{?u.6074, u_3} J
c : ComplexShape ι
inst✝¹ : HasZeroMorphisms C
F : J ⥤ HomologicalComplex C c
inst✝ : ∀ (n : ι), HasLimit (F ⋙ eval C c n)
i j : J
φ : i ⟶ j
n : ι
⊢ (((Functor.const J).obj
                { X := fun n => limit (F ⋙ eval C c n),
                  d := fun n m => limMap { app := fun j => (F.obj j).d n m, naturality := ⋯ }, shape := ⋯,
                  d_comp_d' := ⋯ }).map
            φ ≫
          (fun j => { f := fun n => limit.π (F ⋙ eval C c n) j, comm' := ⋯ }) j).f
      n =
    ((fun j => { f := fun n => limit.π (F ⋙ eval C c n) j, comm' := ⋯ }) i ≫ F.map φ).f n
tactic: ext n
state_before: case h
C : Type u_1
ι : Type u_2
J : Type u_3
inst✝³ : Category.{?u.6070, u_1} C
inst✝² : Category.{?u.6074, u_3} J
c : ComplexShape ι
inst✝¹ : HasZeroMorphisms C
F : J ⥤ HomologicalComplex C c
inst✝ : ∀ (n : ι), HasLimit (F ⋙ eval C c n)
i j : J
φ : i ⟶ j
n : ι
⊢ (((Functor.const J).obj
                { X := fun n => limit (F ⋙ eval C c n),
                  d := fun n m => limMap { app := fun j => (F.obj j).d n m, naturality := ⋯ }, shape := ⋯,
                  d_comp_d' := ⋯ }).map
            φ ≫
          (fun j => { f := fun n => limit.π (F ⋙ eval C c n) j, comm' := ⋯ }) j).f
      n =
    ((fun j => { f := fun n => limit.π (F ⋙ eval C c n) j, comm' := ⋯ }) i ≫ F.map φ).f n
state_after: case h
C : Type u_1
ι : Type u_2
J : Type u_3
inst✝³ : Category.{?u.6070, u_1} C
inst✝² : Category.{?u.6074, u_3} J
c : ComplexShape ι
inst✝¹ : HasZeroMorphisms C
F : J ⥤ HomologicalComplex C c
inst✝ : ∀ (n : ι), HasLimit (F ⋙ eval C c n)
i j : J
φ : i ⟶ j
n : ι
⊢ 𝟙 (limit (F ⋙ eval C c n)) ≫ limit.π (F ⋙ eval C c n) j = limit.π (F ⋙ eval C c n) i ≫ (F.map φ).f n
tactic: dsimp
state_before: case h
C : Type u_1
ι : Type u_2
J : Type u_3
inst✝³ : Category.{?u.6070, u_1} C
inst✝² : Category.{?u.6074, u_3} J
c : ComplexShape ι
inst✝¹ : HasZeroMorphisms C
F : J ⥤ HomologicalComplex C c
inst✝ : ∀ (n : ι), HasLimit (F ⋙ eval C c n)
i j : J
φ : i ⟶ j
n : ι
⊢ 𝟙 (limit (F ⋙ eval C c n)) ≫ limit.π (F ⋙ eval C c n) j = limit.π (F ⋙ eval C c n) i ≫ (F.map φ).f n
state_after: no goals
tactic: erw [limit.w, id_comp]