Theorem: CategoryTheory.Functor.isHomological_of_localization
File: Mathlib/CategoryTheory/Triangulated/HomologicalFunctor.lean

Proof steps:
state_before: C : Type u_1
D : Type u_2
A : Type u_3
inst✝¹⁸ : Category.{u_4, u_1} C
inst✝¹⁷ : HasZeroObject C
inst✝¹⁶ : HasShift C ℤ
inst✝¹⁵ : Preadditive C
inst✝¹⁴ : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝¹³ : Pretriangulated C
inst✝¹² : Category.{u_5, u_2} D
inst✝¹¹ : HasZeroObject D
inst✝¹⁰ : HasShift D ℤ
inst✝⁹ : Preadditive D
inst✝⁸ : ∀ (n : ℤ), (shiftFunctor D n).Additive
inst✝⁷ : Pretriangulated D
inst✝⁶ : Category.{u_6, u_3} A
inst✝⁵ : Abelian A
F✝ : C ⥤ A
inst✝⁴ : F✝.IsHomological
L : C ⥤ D
inst✝³ : L.CommShift ℤ
inst✝² : L.IsTriangulated
inst✝¹ : L.mapArrow.EssSurj
F : D ⥤ A
G : C ⥤ A
e : L ⋙ F ≅ G
inst✝ : G.IsHomological
⊢ F.IsHomological
state_after: C : Type u_1
D : Type u_2
A : Type u_3
inst✝¹⁸ : Category.{u_4, u_1} C
inst✝¹⁷ : HasZeroObject C
inst✝¹⁶ : HasShift C ℤ
inst✝¹⁵ : Preadditive C
inst✝¹⁴ : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝¹³ : Pretriangulated C
inst✝¹² : Category.{u_5, u_2} D
inst✝¹¹ : HasZeroObject D
inst✝¹⁰ : HasShift D ℤ
inst✝⁹ : Preadditive D
inst✝⁸ : ∀ (n : ℤ), (shiftFunctor D n).Additive
inst✝⁷ : Pretriangulated D
inst✝⁶ : Category.{u_6, u_3} A
inst✝⁵ : Abelian A
F✝ : C ⥤ A
inst✝⁴ : F✝.IsHomological
L : C ⥤ D
inst✝³ : L.CommShift ℤ
inst✝² : L.IsTriangulated
inst✝¹ : L.mapArrow.EssSurj
F : D ⥤ A
G : C ⥤ A
e : L ⋙ F ≅ G
inst✝ : G.IsHomological
this : F.PreservesZeroMorphisms
⊢ F.IsHomological
tactic: have : F.PreservesZeroMorphisms := preservesZeroMorphisms_of_map_zero_object
    (F.mapIso L.mapZeroObject.symm ≪≫ e.app _ ≪≫ G.mapZeroObject)
state_before: C : Type u_1
D : Type u_2
A : Type u_3
inst✝¹⁸ : Category.{u_4, u_1} C
inst✝¹⁷ : HasZeroObject C
inst✝¹⁶ : HasShift C ℤ
inst✝¹⁵ : Preadditive C
inst✝¹⁴ : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝¹³ : Pretriangulated C
inst✝¹² : Category.{u_5, u_2} D
inst✝¹¹ : HasZeroObject D
inst✝¹⁰ : HasShift D ℤ
inst✝⁹ : Preadditive D
inst✝⁸ : ∀ (n : ℤ), (shiftFunctor D n).Additive
inst✝⁷ : Pretriangulated D
inst✝⁶ : Category.{u_6, u_3} A
inst✝⁵ : Abelian A
F✝ : C ⥤ A
inst✝⁴ : F✝.IsHomological
L : C ⥤ D
inst✝³ : L.CommShift ℤ
inst✝² : L.IsTriangulated
inst✝¹ : L.mapArrow.EssSurj
F : D ⥤ A
G : C ⥤ A
e : L ⋙ F ≅ G
inst✝ : G.IsHomological
this : F.PreservesZeroMorphisms
⊢ F.IsHomological
state_after: C : Type u_1
D : Type u_2
A : Type u_3
inst✝¹⁸ : Category.{u_4, u_1} C
inst✝¹⁷ : HasZeroObject C
inst✝¹⁶ : HasShift C ℤ
inst✝¹⁵ : Preadditive C
inst✝¹⁴ : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝¹³ : Pretriangulated C
inst✝¹² : Category.{u_5, u_2} D
inst✝¹¹ : HasZeroObject D
inst✝¹⁰ : HasShift D ℤ
inst✝⁹ : Preadditive D
inst✝⁸ : ∀ (n : ℤ), (shiftFunctor D n).Additive
inst✝⁷ : Pretriangulated D
inst✝⁶ : Category.{u_6, u_3} A
inst✝⁵ : Abelian A
F✝ : C ⥤ A
inst✝⁴ : F✝.IsHomological
L : C ⥤ D
inst✝³ : L.CommShift ℤ
inst✝² : L.IsTriangulated
inst✝¹ : L.mapArrow.EssSurj
F : D ⥤ A
G : C ⥤ A
e : L ⋙ F ≅ G
inst✝ : G.IsHomological
this✝ : F.PreservesZeroMorphisms
this : (L ⋙ F).IsHomological
⊢ F.IsHomological
tactic: have : (L ⋙ F).IsHomological := IsHomological.of_iso e.symm
state_before: C : Type u_1
D : Type u_2
A : Type u_3
inst✝¹⁸ : Category.{u_4, u_1} C
inst✝¹⁷ : HasZeroObject C
inst✝¹⁶ : HasShift C ℤ
inst✝¹⁵ : Preadditive C
inst✝¹⁴ : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝¹³ : Pretriangulated C
inst✝¹² : Category.{u_5, u_2} D
inst✝¹¹ : HasZeroObject D
inst✝¹⁰ : HasShift D ℤ
inst✝⁹ : Preadditive D
inst✝⁸ : ∀ (n : ℤ), (shiftFunctor D n).Additive
inst✝⁷ : Pretriangulated D
inst✝⁶ : Category.{u_6, u_3} A
inst✝⁵ : Abelian A
F✝ : C ⥤ A
inst✝⁴ : F✝.IsHomological
L : C ⥤ D
inst✝³ : L.CommShift ℤ
inst✝² : L.IsTriangulated
inst✝¹ : L.mapArrow.EssSurj
F : D ⥤ A
G : C ⥤ A
e : L ⋙ F ≅ G
inst✝ : G.IsHomological
this✝ : F.PreservesZeroMorphisms
this : (L ⋙ F).IsHomological
⊢ F.IsHomological
state_after: C : Type u_1
D : Type u_2
A : Type u_3
inst✝¹⁸ : Category.{u_4, u_1} C
inst✝¹⁷ : HasZeroObject C
inst✝¹⁶ : HasShift C ℤ
inst✝¹⁵ : Preadditive C
inst✝¹⁴ : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝¹³ : Pretriangulated C
inst✝¹² : Category.{u_5, u_2} D
inst✝¹¹ : HasZeroObject D
inst✝¹⁰ : HasShift D ℤ
inst✝⁹ : Preadditive D
inst✝⁸ : ∀ (n : ℤ), (shiftFunctor D n).Additive
inst✝⁷ : Pretriangulated D
inst✝⁶ : Category.{u_6, u_3} A
inst✝⁵ : Abelian A
F✝ : C ⥤ A
inst✝⁴ : F✝.IsHomological
L : C ⥤ D
inst✝³ : L.CommShift ℤ
inst✝² : L.IsTriangulated
inst✝¹ : L.mapArrow.EssSurj
F : D ⥤ A
G : C ⥤ A
e : L ⋙ F ≅ G
inst✝ : G.IsHomological
this✝ : F.PreservesZeroMorphisms
this : (L ⋙ F).IsHomological
T : Triangle D
hT : T ∈ distinguishedTriangles
⊢ ∃ T' e, ((shortComplexOfDistTriangle T' ⋯).map F).Exact
tactic: refine IsHomological.mk' _ (fun T hT => ?_)
state_before: C : Type u_1
D : Type u_2
A : Type u_3
inst✝¹⁸ : Category.{u_4, u_1} C
inst✝¹⁷ : HasZeroObject C
inst✝¹⁶ : HasShift C ℤ
inst✝¹⁵ : Preadditive C
inst✝¹⁴ : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝¹³ : Pretriangulated C
inst✝¹² : Category.{u_5, u_2} D
inst✝¹¹ : HasZeroObject D
inst✝¹⁰ : HasShift D ℤ
inst✝⁹ : Preadditive D
inst✝⁸ : ∀ (n : ℤ), (shiftFunctor D n).Additive
inst✝⁷ : Pretriangulated D
inst✝⁶ : Category.{u_6, u_3} A
inst✝⁵ : Abelian A
F✝ : C ⥤ A
inst✝⁴ : F✝.IsHomological
L : C ⥤ D
inst✝³ : L.CommShift ℤ
inst✝² : L.IsTriangulated
inst✝¹ : L.mapArrow.EssSurj
F : D ⥤ A
G : C ⥤ A
e : L ⋙ F ≅ G
inst✝ : G.IsHomological
this✝ : F.PreservesZeroMorphisms
this : (L ⋙ F).IsHomological
T : Triangle D
hT : T ∈ distinguishedTriangles
⊢ ∃ T' e, ((shortComplexOfDistTriangle T' ⋯).map F).Exact
state_after: C : Type u_1
D : Type u_2
A : Type u_3
inst✝¹⁸ : Category.{u_4, u_1} C
inst✝¹⁷ : HasZeroObject C
inst✝¹⁶ : HasShift C ℤ
inst✝¹⁵ : Preadditive C
inst✝¹⁴ : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝¹³ : Pretriangulated C
inst✝¹² : Category.{u_5, u_2} D
inst✝¹¹ : HasZeroObject D
inst✝¹⁰ : HasShift D ℤ
inst✝⁹ : Preadditive D
inst✝⁸ : ∀ (n : ℤ), (shiftFunctor D n).Additive
inst✝⁷ : Pretriangulated D
inst✝⁶ : Category.{u_6, u_3} A
inst✝⁵ : Abelian A
F✝ : C ⥤ A
inst✝⁴ : F✝.IsHomological
L : C ⥤ D
inst✝³ : L.CommShift ℤ
inst✝² : L.IsTriangulated
inst✝¹ : L.mapArrow.EssSurj
F : D ⥤ A
G : C ⥤ A
e : L ⋙ F ≅ G
inst✝ : G.IsHomological
this✝ : F.PreservesZeroMorphisms
this : (L ⋙ F).IsHomological
T : Triangle D
hT✝ : T ∈ distinguishedTriangles
hT : T ∈ L.essImageDistTriang
⊢ ∃ T' e, ((shortComplexOfDistTriangle T' ⋯).map F).Exact
tactic: rw [L.distTriang_iff] at hT
state_before: C : Type u_1
D : Type u_2
A : Type u_3
inst✝¹⁸ : Category.{u_4, u_1} C
inst✝¹⁷ : HasZeroObject C
inst✝¹⁶ : HasShift C ℤ
inst✝¹⁵ : Preadditive C
inst✝¹⁴ : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝¹³ : Pretriangulated C
inst✝¹² : Category.{u_5, u_2} D
inst✝¹¹ : HasZeroObject D
inst✝¹⁰ : HasShift D ℤ
inst✝⁹ : Preadditive D
inst✝⁸ : ∀ (n : ℤ), (shiftFunctor D n).Additive
inst✝⁷ : Pretriangulated D
inst✝⁶ : Category.{u_6, u_3} A
inst✝⁵ : Abelian A
F✝ : C ⥤ A
inst✝⁴ : F✝.IsHomological
L : C ⥤ D
inst✝³ : L.CommShift ℤ
inst✝² : L.IsTriangulated
inst✝¹ : L.mapArrow.EssSurj
F : D ⥤ A
G : C ⥤ A
e : L ⋙ F ≅ G
inst✝ : G.IsHomological
this✝ : F.PreservesZeroMorphisms
this : (L ⋙ F).IsHomological
T : Triangle D
hT✝ : T ∈ distinguishedTriangles
hT : T ∈ L.essImageDistTriang
⊢ ∃ T' e, ((shortComplexOfDistTriangle T' ⋯).map F).Exact
state_after: case intro.intro
C : Type u_1
D : Type u_2
A : Type u_3
inst✝¹⁸ : Category.{u_4, u_1} C
inst✝¹⁷ : HasZeroObject C
inst✝¹⁶ : HasShift C ℤ
inst✝¹⁵ : Preadditive C
inst✝¹⁴ : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝¹³ : Pretriangulated C
inst✝¹² : Category.{u_5, u_2} D
inst✝¹¹ : HasZeroObject D
inst✝¹⁰ : HasShift D ℤ
inst✝⁹ : Preadditive D
inst✝⁸ : ∀ (n : ℤ), (shiftFunctor D n).Additive
inst✝⁷ : Pretriangulated D
inst✝⁶ : Category.{u_6, u_3} A
inst✝⁵ : Abelian A
F✝ : C ⥤ A
inst✝⁴ : F✝.IsHomological
L : C ⥤ D
inst✝³ : L.CommShift ℤ
inst✝² : L.IsTriangulated
inst✝¹ : L.mapArrow.EssSurj
F : D ⥤ A
G : C ⥤ A
e✝ : L ⋙ F ≅ G
inst✝ : G.IsHomological
this✝ : F.PreservesZeroMorphisms
this : (L ⋙ F).IsHomological
T : Triangle D
hT : T ∈ distinguishedTriangles
T₀ : Triangle C
e : T ≅ L.mapTriangle.obj T₀
hT₀ : T₀ ∈ distinguishedTriangles
⊢ ∃ T' e, ((shortComplexOfDistTriangle T' ⋯).map F).Exact
tactic: obtain ⟨T₀, e, hT₀⟩ := hT
state_before: case intro.intro
C : Type u_1
D : Type u_2
A : Type u_3
inst✝¹⁸ : Category.{u_4, u_1} C
inst✝¹⁷ : HasZeroObject C
inst✝¹⁶ : HasShift C ℤ
inst✝¹⁵ : Preadditive C
inst✝¹⁴ : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝¹³ : Pretriangulated C
inst✝¹² : Category.{u_5, u_2} D
inst✝¹¹ : HasZeroObject D
inst✝¹⁰ : HasShift D ℤ
inst✝⁹ : Preadditive D
inst✝⁸ : ∀ (n : ℤ), (shiftFunctor D n).Additive
inst✝⁷ : Pretriangulated D
inst✝⁶ : Category.{u_6, u_3} A
inst✝⁵ : Abelian A
F✝ : C ⥤ A
inst✝⁴ : F✝.IsHomological
L : C ⥤ D
inst✝³ : L.CommShift ℤ
inst✝² : L.IsTriangulated
inst✝¹ : L.mapArrow.EssSurj
F : D ⥤ A
G : C ⥤ A
e✝ : L ⋙ F ≅ G
inst✝ : G.IsHomological
this✝ : F.PreservesZeroMorphisms
this : (L ⋙ F).IsHomological
T : Triangle D
hT : T ∈ distinguishedTriangles
T₀ : Triangle C
e : T ≅ L.mapTriangle.obj T₀
hT₀ : T₀ ∈ distinguishedTriangles
⊢ ∃ T' e, ((shortComplexOfDistTriangle T' ⋯).map F).Exact
state_after: no goals
tactic: exact ⟨L.mapTriangle.obj T₀, e, (L ⋙ F).map_distinguished_exact _ hT₀⟩