l3lab/ntp-mathlib huggingface dataset:
lemma mapHomologyIso'_eq_mapHomologyIso [S.HasHomology] [F.PreservesLeftHomologyOf S]
    [F.PreservesRightHomologyOf S] :
    S.mapHomologyIso' F = S.mapHomologyIso F := by
  ext
  rw [S.homologyData.left.mapHomologyIso_eq F, S.homologyData.right.mapHomologyIso'_eq F]
  dsimp only [Iso.trans, Iso.symm, Iso.refl, Functor.mapIso, RightHomologyData.homologyIso,
    rightHomologyIso, RightHomologyData.rightHomologyIso, LeftHomologyData.homologyIso,
    leftHomologyIso, LeftHomologyData.leftHomologyIso]
  simp only [RightHomologyData.map_H, rightHomologyMapIso'_inv, rightHomologyMapIso'_hom, assoc,
    Functor.map_comp, RightHomologyData.map_rightHomologyMap', Functor.mapShortComplex_obj,
    Functor.map_id, LeftHomologyData.map_H, leftHomologyMapIso'_inv, leftHomologyMapIso'_hom,
    LeftHomologyData.map_leftHomologyMap', ← rightHomologyMap'_comp_assoc, ← leftHomologyMap'_comp,
    ← leftHomologyMap'_comp_assoc, id_comp]
  have γ : HomologyMapData (𝟙 (S.map F)) (map S F).homologyData (S.homologyData.map F) := default
  have eq := γ.comm
  rw [← γ.left.leftHomologyMap'_eq, ← γ.right.rightHomologyMap'_eq] at eq
  dsimp at eq
  

Proof state:
case w
C : Type u_1
D : Type u_2
inst✝⁸ : Category.{u_3, u_1} C
inst✝⁷ : Category.{u_4, u_2} D
inst✝⁶ : HasZeroMorphisms C
inst✝⁵ : HasZeroMorphisms D
S : ShortComplex C
h₁✝ : LeftHomologyData S
h₂✝ : RightHomologyData S
F✝ : C ⥤ D
inst✝⁴ : Functor.PreservesZeroMorphisms F✝
hl : LeftHomologyData S
hr : RightHomologyData S
S₁ S₂ : ShortComplex C
φ : S₁ ⟶ S₂
hl₁ : LeftHomologyData S₁
hr₁ : RightHomologyData S₁
hl₂ : LeftHomologyData S₂
hr₂ : RightHomologyData S₂
h₁ : HomologyData S₁
h₂ : HomologyData S₂
F : C ⥤ D
inst✝³ : Functor.PreservesZeroMorphisms F
inst✝² : HasHomology S
inst✝¹ : Functor.PreservesLeftHomologyOf F S
inst✝ : Functor.PreservesRightHomologyOf F S
γ : HomologyMapData (𝟙 (map S F)) (homologyData (map S F)) (HomologyData.map (homologyData S) F)
eq :
  leftHomologyMap' (𝟙 (map S F)) (homologyData (map S F)).left (LeftHomologyData.map (homologyData S).left F) ≫
      F.map (homologyData S).iso.hom =
    (homologyData (map S F)).iso.hom ≫
      rightHomologyMap' (𝟙 (map S F)) (homologyData (map S F)).right (RightHomologyData.map (homologyData S).right F)
⊢ (homologyData (map S F)).iso.hom ≫
      rightHomologyMap' (𝟙 (map S F)) (homologyData (map S F)).right (RightHomologyData.map (homologyData S).right F) ≫
        F.map (homologyData S).iso.inv =
    leftHomologyMap' (𝟙 (map S F)) (homologyData (map S F)).left (LeftHomologyData.map (homologyData S).left F)

Next tactic:
simp only [← reassoc_of% eq, ← F.map_comp, Iso.hom_inv_id, F.map_id, comp_id]
instance quasiIso_map_of_preservesLeftHomology
    [F.PreservesLeftHomologyOf S₁] [F.PreservesLeftHomologyOf S₂]
    [QuasiIso φ] : QuasiIso (F.mapShortComplex.map φ) := by
  

Proof state:
C : Type u_1
D : Type u_2
inst✝¹¹ : Category.{?u.196132, u_1} C
inst✝¹⁰ : Category.{?u.196136, u_2} D
inst✝⁹ : HasZeroMorphisms C
inst✝⁸ : HasZeroMorphisms D
S : ShortComplex C
h₁ : LeftHomologyData S
h₂ : RightHomologyData S
F : C ⥤ D
inst✝⁷ : Functor.PreservesZeroMorphisms F
S₁ S₂ : ShortComplex C
φ : S₁ ⟶ S₂
hl₁ : LeftHomologyData S₁
hr₁ : RightHomologyData S₁
hl₂ : LeftHomologyData S₂
hr₂ : RightHomologyData S₂
ψl : LeftHomologyMapData φ hl₁ hl₂
ψr : RightHomologyMapData φ hr₁ hr₂
inst✝⁶ : HasHomology S₁
inst✝⁵ : HasHomology S₂
inst✝⁴ : HasHomology ((Functor.mapShortComplex F).obj S₁)
inst✝³ : HasHomology ((Functor.mapShortComplex F).obj S₂)
inst✝² : Functor.PreservesLeftHomologyOf F S₁
inst✝¹ : Functor.PreservesLeftHomologyOf F S₂
inst✝ : QuasiIso φ
⊢ QuasiIso ((Functor.mapShortComplex F).map φ)

Next tactic:
have γ : LeftHomologyMapData φ S₁.leftHomologyData S₂.leftHomologyData := default
instance quasiIso_map_of_preservesLeftHomology
    [F.PreservesLeftHomologyOf S₁] [F.PreservesLeftHomologyOf S₂]
    [QuasiIso φ] : QuasiIso (F.mapShortComplex.map φ) := by
  have γ : LeftHomologyMapData φ S₁.leftHomologyData S₂.leftHomologyData := default
  

Proof state:
C : Type u_1
D : Type u_2
inst✝¹¹ : Category.{?u.196132, u_1} C
inst✝¹⁰ : Category.{?u.196136, u_2} D
inst✝⁹ : HasZeroMorphisms C
inst✝⁸ : HasZeroMorphisms D
S : ShortComplex C
h₁ : LeftHomologyData S
h₂ : RightHomologyData S
F : C ⥤ D
inst✝⁷ : Functor.PreservesZeroMorphisms F
S₁ S₂ : ShortComplex C
φ : S₁ ⟶ S₂
hl₁ : LeftHomologyData S₁
hr₁ : RightHomologyData S₁
hl₂ : LeftHomologyData S₂
hr₂ : RightHomologyData S₂
ψl : LeftHomologyMapData φ hl₁ hl₂
ψr : RightHomologyMapData φ hr₁ hr₂
inst✝⁶ : HasHomology S₁
inst✝⁵ : HasHomology S₂
inst✝⁴ : HasHomology ((Functor.mapShortComplex F).obj S₁)
inst✝³ : HasHomology ((Functor.mapShortComplex F).obj S₂)
inst✝² : Functor.PreservesLeftHomologyOf F S₁
inst✝¹ : Functor.PreservesLeftHomologyOf F S₂
inst✝ : QuasiIso φ
γ : LeftHomologyMapData φ (leftHomologyData S₁) (leftHomologyData S₂)
⊢ QuasiIso ((Functor.mapShortComplex F).map φ)

Next tactic:
have : IsIso γ.φH := by
    rw [← γ.quasiIso_iff]
    infer_instance
instance quasiIso_map_of_preservesLeftHomology
    [F.PreservesLeftHomologyOf S₁] [F.PreservesLeftHomologyOf S₂]
    [QuasiIso φ] : QuasiIso (F.mapShortComplex.map φ) := by
  have γ : LeftHomologyMapData φ S₁.leftHomologyData S₂.leftHomologyData := default
  have : IsIso γ.φH := by
    

Proof state:
C : Type u_1
D : Type u_2
inst✝¹¹ : Category.{?u.196132, u_1} C
inst✝¹⁰ : Category.{?u.196136, u_2} D
inst✝⁹ : HasZeroMorphisms C
inst✝⁸ : HasZeroMorphisms D
S : ShortComplex C
h₁ : LeftHomologyData S
h₂ : RightHomologyData S
F : C ⥤ D
inst✝⁷ : Functor.PreservesZeroMorphisms F
S₁ S₂ : ShortComplex C
φ : S₁ ⟶ S₂
hl₁ : LeftHomologyData S₁
hr₁ : RightHomologyData S₁
hl₂ : LeftHomologyData S₂
hr₂ : RightHomologyData S₂
ψl : LeftHomologyMapData φ hl₁ hl₂
ψr : RightHomologyMapData φ hr₁ hr₂
inst✝⁶ : HasHomology S₁
inst✝⁵ : HasHomology S₂
inst✝⁴ : HasHomology ((Functor.mapShortComplex F).obj S₁)
inst✝³ : HasHomology ((Functor.mapShortComplex F).obj S₂)
inst✝² : Functor.PreservesLeftHomologyOf F S₁
inst✝¹ : Functor.PreservesLeftHomologyOf F S₂
inst✝ : QuasiIso φ
γ : LeftHomologyMapData φ (leftHomologyData S₁) (leftHomologyData S₂)
⊢ IsIso γ.φH

Next tactic:
rw [← γ.quasiIso_iff]
instance quasiIso_map_of_preservesLeftHomology
    [F.PreservesLeftHomologyOf S₁] [F.PreservesLeftHomologyOf S₂]
    [QuasiIso φ] : QuasiIso (F.mapShortComplex.map φ) := by
  have γ : LeftHomologyMapData φ S₁.leftHomologyData S₂.leftHomologyData := default
  have : IsIso γ.φH := by
    rw [← γ.quasiIso_iff]
    

Proof state:
C : Type u_1
D : Type u_2
inst✝¹¹ : Category.{?u.196132, u_1} C
inst✝¹⁰ : Category.{?u.196136, u_2} D
inst✝⁹ : HasZeroMorphisms C
inst✝⁸ : HasZeroMorphisms D
S : ShortComplex C
h₁ : LeftHomologyData S
h₂ : RightHomologyData S
F : C ⥤ D
inst✝⁷ : Functor.PreservesZeroMorphisms F
S₁ S₂ : ShortComplex C
φ : S₁ ⟶ S₂
hl₁ : LeftHomologyData S₁
hr₁ : RightHomologyData S₁
hl₂ : LeftHomologyData S₂
hr₂ : RightHomologyData S₂
ψl : LeftHomologyMapData φ hl₁ hl₂
ψr : RightHomologyMapData φ hr₁ hr₂
inst✝⁶ : HasHomology S₁
inst✝⁵ : HasHomology S₂
inst✝⁴ : HasHomology ((Functor.mapShortComplex F).obj S₁)
inst✝³ : HasHomology ((Functor.mapShortComplex F).obj S₂)
inst✝² : Functor.PreservesLeftHomologyOf F S₁
inst✝¹ : Functor.PreservesLeftHomologyOf F S₂
inst✝ : QuasiIso φ
γ : LeftHomologyMapData φ (leftHomologyData S₁) (leftHomologyData S₂)
⊢ QuasiIso φ

Next tactic:
infer_instance
instance quasiIso_map_of_preservesLeftHomology
    [F.PreservesLeftHomologyOf S₁] [F.PreservesLeftHomologyOf S₂]
    [QuasiIso φ] : QuasiIso (F.mapShortComplex.map φ) := by
  have γ : LeftHomologyMapData φ S₁.leftHomologyData S₂.leftHomologyData := default
  have : IsIso γ.φH := by
    rw [← γ.quasiIso_iff]
    infer_instance
  

Proof state:
C : Type u_1
D : Type u_2
inst✝¹¹ : Category.{?u.196132, u_1} C
inst✝¹⁰ : Category.{?u.196136, u_2} D
inst✝⁹ : HasZeroMorphisms C
inst✝⁸ : HasZeroMorphisms D
S : ShortComplex C
h₁ : LeftHomologyData S
h₂ : RightHomologyData S
F : C ⥤ D
inst✝⁷ : Functor.PreservesZeroMorphisms F
S₁ S₂ : ShortComplex C
φ : S₁ ⟶ S₂
hl₁ : LeftHomologyData S₁
hr₁ : RightHomologyData S₁
hl₂ : LeftHomologyData S₂
hr₂ : RightHomologyData S₂
ψl : LeftHomologyMapData φ hl₁ hl₂
ψr : RightHomologyMapData φ hr₁ hr₂
inst✝⁶ : HasHomology S₁
inst✝⁵ : HasHomology S₂
inst✝⁴ : HasHomology ((Functor.mapShortComplex F).obj S₁)
inst✝³ : HasHomology ((Functor.mapShortComplex F).obj S₂)
inst✝² : Functor.PreservesLeftHomologyOf F S₁
inst✝¹ : Functor.PreservesLeftHomologyOf F S₂
inst✝ : QuasiIso φ
γ : LeftHomologyMapData φ (leftHomologyData S₁) (leftHomologyData S₂)
this : IsIso γ.φH
⊢ QuasiIso ((Functor.mapShortComplex F).map φ)

Next tactic:
rw [(γ.map F).quasiIso_iff, LeftHomologyMapData.map_φH]
instance quasiIso_map_of_preservesLeftHomology
    [F.PreservesLeftHomologyOf S₁] [F.PreservesLeftHomologyOf S₂]
    [QuasiIso φ] : QuasiIso (F.mapShortComplex.map φ) := by
  have γ : LeftHomologyMapData φ S₁.leftHomologyData S₂.leftHomologyData := default
  have : IsIso γ.φH := by
    rw [← γ.quasiIso_iff]
    infer_instance
  rw [(γ.map F).quasiIso_iff, LeftHomologyMapData.map_φH]
  

Proof state:
C : Type u_1
D : Type u_2
inst✝¹¹ : Category.{?u.196132, u_1} C
inst✝¹⁰ : Category.{?u.196136, u_2} D
inst✝⁹ : HasZeroMorphisms C
inst✝⁸ : HasZeroMorphisms D
S : ShortComplex C
h₁ : LeftHomologyData S
h₂ : RightHomologyData S
F : C ⥤ D
inst✝⁷ : Functor.PreservesZeroMorphisms F
S₁ S₂ : ShortComplex C
φ : S₁ ⟶ S₂
hl₁ : LeftHomologyData S₁
hr₁ : RightHomologyData S₁
hl₂ : LeftHomologyData S₂
hr₂ : RightHomologyData S₂
ψl : LeftHomologyMapData φ hl₁ hl₂
ψr : RightHomologyMapData φ hr₁ hr₂
inst✝⁶ : HasHomology S₁
inst✝⁵ : HasHomology S₂
inst✝⁴ : HasHomology ((Functor.mapShortComplex F).obj S₁)
inst✝³ : HasHomology ((Functor.mapShortComplex F).obj S₂)
inst✝² : Functor.PreservesLeftHomologyOf F S₁
inst✝¹ : Functor.PreservesLeftHomologyOf F S₂
inst✝ : QuasiIso φ
γ : LeftHomologyMapData φ (leftHomologyData S₁) (leftHomologyData S₂)
this : IsIso γ.φH
⊢ IsIso (F.map γ.φH)

Next tactic:
infer_instance
lemma quasiIso_map_iff_of_preservesLeftHomology
    [F.PreservesLeftHomologyOf S₁] [F.PreservesLeftHomologyOf S₂]
    [ReflectsIsomorphisms F] :
    QuasiIso (F.mapShortComplex.map φ) ↔ QuasiIso φ := by
  

Proof state:
C : Type u_1
D : Type u_2
inst✝¹¹ : Category.{u_3, u_1} C
inst✝¹⁰ : Category.{u_4, u_2} D
inst✝⁹ : HasZeroMorphisms C
inst✝⁸ : HasZeroMorphisms D
S : ShortComplex C
h₁ : LeftHomologyData S
h₂ : RightHomologyData S
F : C ⥤ D
inst✝⁷ : Functor.PreservesZeroMorphisms F
S₁ S₂ : ShortComplex C
φ : S₁ ⟶ S₂
hl₁ : LeftHomologyData S₁
hr₁ : RightHomologyData S₁
hl₂ : LeftHomologyData S₂
hr₂ : RightHomologyData S₂
ψl : LeftHomologyMapData φ hl₁ hl₂
ψr : RightHomologyMapData φ hr₁ hr₂
inst✝⁶ : HasHomology S₁
inst✝⁵ : HasHomology S₂
inst✝⁴ : HasHomology ((Functor.mapShortComplex F).obj S₁)
inst✝³ : HasHomology ((Functor.mapShortComplex F).obj S₂)
inst✝² : Functor.PreservesLeftHomologyOf F S₁
inst✝¹ : Functor.PreservesLeftHomologyOf F S₂
inst✝ : ReflectsIsomorphisms F
⊢ QuasiIso ((Functor.mapShortComplex F).map φ) ↔ QuasiIso φ

Next tactic:
have γ : LeftHomologyMapData φ S₁.leftHomologyData S₂.leftHomologyData := default
lemma quasiIso_map_iff_of_preservesLeftHomology
    [F.PreservesLeftHomologyOf S₁] [F.PreservesLeftHomologyOf S₂]
    [ReflectsIsomorphisms F] :
    QuasiIso (F.mapShortComplex.map φ) ↔ QuasiIso φ := by
  have γ : LeftHomologyMapData φ S₁.leftHomologyData S₂.leftHomologyData := default
  

Proof state:
C : Type u_1
D : Type u_2
inst✝¹¹ : Category.{u_3, u_1} C
inst✝¹⁰ : Category.{u_4, u_2} D
inst✝⁹ : HasZeroMorphisms C
inst✝⁸ : HasZeroMorphisms D
S : ShortComplex C
h₁ : LeftHomologyData S
h₂ : RightHomologyData S
F : C ⥤ D
inst✝⁷ : Functor.PreservesZeroMorphisms F
S₁ S₂ : ShortComplex C
φ : S₁ ⟶ S₂
hl₁ : LeftHomologyData S₁
hr₁ : RightHomologyData S₁
hl₂ : LeftHomologyData S₂
hr₂ : RightHomologyData S₂
ψl : LeftHomologyMapData φ hl₁ hl₂
ψr : RightHomologyMapData φ hr₁ hr₂
inst✝⁶ : HasHomology S₁
inst✝⁵ : HasHomology S₂
inst✝⁴ : HasHomology ((Functor.mapShortComplex F).obj S₁)
inst✝³ : HasHomology ((Functor.mapShortComplex F).obj S₂)
inst✝² : Functor.PreservesLeftHomologyOf F S₁
inst✝¹ : Functor.PreservesLeftHomologyOf F S₂
inst✝ : ReflectsIsomorphisms F
γ : LeftHomologyMapData φ (leftHomologyData S₁) (leftHomologyData S₂)
⊢ QuasiIso ((Functor.mapShortComplex F).map φ) ↔ QuasiIso φ

Next tactic:
rw [γ.quasiIso_iff, (γ.map F).quasiIso_iff, LeftHomologyMapData.map_φH]
lemma quasiIso_map_iff_of_preservesLeftHomology
    [F.PreservesLeftHomologyOf S₁] [F.PreservesLeftHomologyOf S₂]
    [ReflectsIsomorphisms F] :
    QuasiIso (F.mapShortComplex.map φ) ↔ QuasiIso φ := by
  have γ : LeftHomologyMapData φ S₁.leftHomologyData S₂.leftHomologyData := default
  rw [γ.quasiIso_iff, (γ.map F).quasiIso_iff, LeftHomologyMapData.map_φH]
  

Proof state:
C : Type u_1
D : Type u_2
inst✝¹¹ : Category.{u_3, u_1} C
inst✝¹⁰ : Category.{u_4, u_2} D
inst✝⁹ : HasZeroMorphisms C
inst✝⁸ : HasZeroMorphisms D
S : ShortComplex C
h₁ : LeftHomologyData S
h₂ : RightHomologyData S
F : C ⥤ D
inst✝⁷ : Functor.PreservesZeroMorphisms F
S₁ S₂ : ShortComplex C
φ : S₁ ⟶ S₂
hl₁ : LeftHomologyData S₁
hr₁ : RightHomologyData S₁
hl₂ : LeftHomologyData S₂
hr₂ : RightHomologyData S₂
ψl : LeftHomologyMapData φ hl₁ hl₂
ψr : RightHomologyMapData φ hr₁ hr₂
inst✝⁶ : HasHomology S₁
inst✝⁵ : HasHomology S₂
inst✝⁴ : HasHomology ((Functor.mapShortComplex F).obj S₁)
inst✝³ : HasHomology ((Functor.mapShortComplex F).obj S₂)
inst✝² : Functor.PreservesLeftHomologyOf F S₁
inst✝¹ : Functor.PreservesLeftHomologyOf F S₂
inst✝ : ReflectsIsomorphisms F
γ : LeftHomologyMapData φ (leftHomologyData S₁) (leftHomologyData S₂)
⊢ IsIso (F.map γ.φH) ↔ IsIso γ.φH

Next tactic:
constructor
lemma quasiIso_map_iff_of_preservesLeftHomology
    [F.PreservesLeftHomologyOf S₁] [F.PreservesLeftHomologyOf S₂]
    [ReflectsIsomorphisms F] :
    QuasiIso (F.mapShortComplex.map φ) ↔ QuasiIso φ := by
  have γ : LeftHomologyMapData φ S₁.leftHomologyData S₂.leftHomologyData := default
  rw [γ.quasiIso_iff, (γ.map F).quasiIso_iff, LeftHomologyMapData.map_φH]
  constructor
  · 

Proof state:
case mp
C : Type u_1
D : Type u_2
inst✝¹¹ : Category.{u_3, u_1} C
inst✝¹⁰ : Category.{u_4, u_2} D
inst✝⁹ : HasZeroMorphisms C
inst✝⁸ : HasZeroMorphisms D
S : ShortComplex C
h₁ : LeftHomologyData S
h₂ : RightHomologyData S
F : C ⥤ D
inst✝⁷ : Functor.PreservesZeroMorphisms F
S₁ S₂ : ShortComplex C
φ : S₁ ⟶ S₂
hl₁ : LeftHomologyData S₁
hr₁ : RightHomologyData S₁
hl₂ : LeftHomologyData S₂
hr₂ : RightHomologyData S₂
ψl : LeftHomologyMapData φ hl₁ hl₂
ψr : RightHomologyMapData φ hr₁ hr₂
inst✝⁶ : HasHomology S₁
inst✝⁵ : HasHomology S₂
inst✝⁴ : HasHomology ((Functor.mapShortComplex F).obj S₁)
inst✝³ : HasHomology ((Functor.mapShortComplex F).obj S₂)
inst✝² : Functor.PreservesLeftHomologyOf F S₁
inst✝¹ : Functor.PreservesLeftHomologyOf F S₂
inst✝ : ReflectsIsomorphisms F
γ : LeftHomologyMapData φ (leftHomologyData S₁) (leftHomologyData S₂)
⊢ IsIso (F.map γ.φH) → IsIso γ.φH

Next tactic:
intro
lemma quasiIso_map_iff_of_preservesLeftHomology
    [F.PreservesLeftHomologyOf S₁] [F.PreservesLeftHomologyOf S₂]
    [ReflectsIsomorphisms F] :
    QuasiIso (F.mapShortComplex.map φ) ↔ QuasiIso φ := by
  have γ : LeftHomologyMapData φ S₁.leftHomologyData S₂.leftHomologyData := default
  rw [γ.quasiIso_iff, (γ.map F).quasiIso_iff, LeftHomologyMapData.map_φH]
  constructor
  · intro
    

Proof state:
case mp
C : Type u_1
D : Type u_2
inst✝¹¹ : Category.{u_3, u_1} C
inst✝¹⁰ : Category.{u_4, u_2} D
inst✝⁹ : HasZeroMorphisms C
inst✝⁸ : HasZeroMorphisms D
S : ShortComplex C
h₁ : LeftHomologyData S
h₂ : RightHomologyData S
F : C ⥤ D
inst✝⁷ : Functor.PreservesZeroMorphisms F
S₁ S₂ : ShortComplex C
φ : S₁ ⟶ S₂
hl₁ : LeftHomologyData S₁
hr₁ : RightHomologyData S₁
hl₂ : LeftHomologyData S₂
hr₂ : RightHomologyData S₂
ψl : LeftHomologyMapData φ hl₁ hl₂
ψr : RightHomologyMapData φ hr₁ hr₂
inst✝⁶ : HasHomology S₁
inst✝⁵ : HasHomology S₂
inst✝⁴ : HasHomology ((Functor.mapShortComplex F).obj S₁)
inst✝³ : HasHomology ((Functor.mapShortComplex F).obj S₂)
inst✝² : Functor.PreservesLeftHomologyOf F S₁
inst✝¹ : Functor.PreservesLeftHomologyOf F S₂
inst✝ : ReflectsIsomorphisms F
γ : LeftHomologyMapData φ (leftHomologyData S₁) (leftHomologyData S₂)
a✝ : IsIso (F.map γ.φH)
⊢ IsIso γ.φH

Next tactic:
exact isIso_of_reflects_iso _ F
lemma quasiIso_map_iff_of_preservesLeftHomology
    [F.PreservesLeftHomologyOf S₁] [F.PreservesLeftHomologyOf S₂]
    [ReflectsIsomorphisms F] :
    QuasiIso (F.mapShortComplex.map φ) ↔ QuasiIso φ := by
  have γ : LeftHomologyMapData φ S₁.leftHomologyData S₂.leftHomologyData := default
  rw [γ.quasiIso_iff, (γ.map F).quasiIso_iff, LeftHomologyMapData.map_φH]
  constructor
  · intro
    exact isIso_of_reflects_iso _ F
  · 

Proof state:
case mpr
C : Type u_1
D : Type u_2
inst✝¹¹ : Category.{u_3, u_1} C
inst✝¹⁰ : Category.{u_4, u_2} D
inst✝⁹ : HasZeroMorphisms C
inst✝⁸ : HasZeroMorphisms D
S : ShortComplex C
h₁ : LeftHomologyData S
h₂ : RightHomologyData S
F : C ⥤ D
inst✝⁷ : Functor.PreservesZeroMorphisms F
S₁ S₂ : ShortComplex C
φ : S₁ ⟶ S₂
hl₁ : LeftHomologyData S₁
hr₁ : RightHomologyData S₁
hl₂ : LeftHomologyData S₂
hr₂ : RightHomologyData S₂
ψl : LeftHomologyMapData φ hl₁ hl₂
ψr : RightHomologyMapData φ hr₁ hr₂
inst✝⁶ : HasHomology S₁
inst✝⁵ : HasHomology S₂
inst✝⁴ : HasHomology ((Functor.mapShortComplex F).obj S₁)
inst✝³ : HasHomology ((Functor.mapShortComplex F).obj S₂)
inst✝² : Functor.PreservesLeftHomologyOf F S₁
inst✝¹ : Functor.PreservesLeftHomologyOf F S₂
inst✝ : ReflectsIsomorphisms F
γ : LeftHomologyMapData φ (leftHomologyData S₁) (leftHomologyData S₂)
⊢ IsIso γ.φH → IsIso (F.map γ.φH)

Next tactic:
intro
lemma quasiIso_map_iff_of_preservesLeftHomology
    [F.PreservesLeftHomologyOf S₁] [F.PreservesLeftHomologyOf S₂]
    [ReflectsIsomorphisms F] :
    QuasiIso (F.mapShortComplex.map φ) ↔ QuasiIso φ := by
  have γ : LeftHomologyMapData φ S₁.leftHomologyData S₂.leftHomologyData := default
  rw [γ.quasiIso_iff, (γ.map F).quasiIso_iff, LeftHomologyMapData.map_φH]
  constructor
  · intro
    exact isIso_of_reflects_iso _ F
  · intro
    

Proof state:
case mpr
C : Type u_1
D : Type u_2
inst✝¹¹ : Category.{u_3, u_1} C
inst✝¹⁰ : Category.{u_4, u_2} D
inst✝⁹ : HasZeroMorphisms C
inst✝⁸ : HasZeroMorphisms D
S : ShortComplex C
h₁ : LeftHomologyData S
h₂ : RightHomologyData S
F : C ⥤ D
inst✝⁷ : Functor.PreservesZeroMorphisms F
S₁ S₂ : ShortComplex C
φ : S₁ ⟶ S₂
hl₁ : LeftHomologyData S₁
hr₁ : RightHomologyData S₁
hl₂ : LeftHomologyData S₂
hr₂ : RightHomologyData S₂
ψl : LeftHomologyMapData φ hl₁ hl₂
ψr : RightHomologyMapData φ hr₁ hr₂
inst✝⁶ : HasHomology S₁
inst✝⁵ : HasHomology S₂
inst✝⁴ : HasHomology ((Functor.mapShortComplex F).obj S₁)
inst✝³ : HasHomology ((Functor.mapShortComplex F).obj S₂)
inst✝² : Functor.PreservesLeftHomologyOf F S₁
inst✝¹ : Functor.PreservesLeftHomologyOf F S₂
inst✝ : ReflectsIsomorphisms F
γ : LeftHomologyMapData φ (leftHomologyData S₁) (leftHomologyData S₂)
a✝ : IsIso γ.φH
⊢ IsIso (F.map γ.φH)

Next tactic:
infer_instance
instance quasiIso_map_of_preservesRightHomology
    [F.PreservesRightHomologyOf S₁] [F.PreservesRightHomologyOf S₂]
    [QuasiIso φ] : QuasiIso (F.mapShortComplex.map φ) := by
  

Proof state:
C : Type u_1
D : Type u_2
inst✝¹¹ : Category.{?u.203053, u_1} C
inst✝¹⁰ : Category.{?u.203057, u_2} D
inst✝⁹ : HasZeroMorphisms C
inst✝⁸ : HasZeroMorphisms D
S : ShortComplex C
h₁ : LeftHomologyData S
h₂ : RightHomologyData S
F : C ⥤ D
inst✝⁷ : Functor.PreservesZeroMorphisms F
S₁ S₂ : ShortComplex C
φ : S₁ ⟶ S₂
hl₁ : LeftHomologyData S₁
hr₁ : RightHomologyData S₁
hl₂ : LeftHomologyData S₂
hr₂ : RightHomologyData S₂
ψl : LeftHomologyMapData φ hl₁ hl₂
ψr : RightHomologyMapData φ hr₁ hr₂
inst✝⁶ : HasHomology S₁
inst✝⁵ : HasHomology S₂
inst✝⁴ : HasHomology ((Functor.mapShortComplex F).obj S₁)
inst✝³ : HasHomology ((Functor.mapShortComplex F).obj S₂)
inst✝² : Functor.PreservesRightHomologyOf F S₁
inst✝¹ : Functor.PreservesRightHomologyOf F S₂
inst✝ : QuasiIso φ
⊢ QuasiIso ((Functor.mapShortComplex F).map φ)

Next tactic:
have γ : RightHomologyMapData φ S₁.rightHomologyData S₂.rightHomologyData := default
instance quasiIso_map_of_preservesRightHomology
    [F.PreservesRightHomologyOf S₁] [F.PreservesRightHomologyOf S₂]
    [QuasiIso φ] : QuasiIso (F.mapShortComplex.map φ) := by
  have γ : RightHomologyMapData φ S₁.rightHomologyData S₂.rightHomologyData := default
  

Proof state:
C : Type u_1
D : Type u_2
inst✝¹¹ : Category.{?u.203053, u_1} C
inst✝¹⁰ : Category.{?u.203057, u_2} D
inst✝⁹ : HasZeroMorphisms C
inst✝⁸ : HasZeroMorphisms D
S : ShortComplex C
h₁ : LeftHomologyData S
h₂ : RightHomologyData S
F : C ⥤ D
inst✝⁷ : Functor.PreservesZeroMorphisms F
S₁ S₂ : ShortComplex C
φ : S₁ ⟶ S₂
hl₁ : LeftHomologyData S₁
hr₁ : RightHomologyData S₁
hl₂ : LeftHomologyData S₂
hr₂ : RightHomologyData S₂
ψl : LeftHomologyMapData φ hl₁ hl₂
ψr : RightHomologyMapData φ hr₁ hr₂
inst✝⁶ : HasHomology S₁
inst✝⁵ : HasHomology S₂
inst✝⁴ : HasHomology ((Functor.mapShortComplex F).obj S₁)
inst✝³ : HasHomology ((Functor.mapShortComplex F).obj S₂)
inst✝² : Functor.PreservesRightHomologyOf F S₁
inst✝¹ : Functor.PreservesRightHomologyOf F S₂
inst✝ : QuasiIso φ
γ : RightHomologyMapData φ (rightHomologyData S₁) (rightHomologyData S₂)
⊢ QuasiIso ((Functor.mapShortComplex F).map φ)

Next tactic:
have : IsIso γ.φH := by
    rw [← γ.quasiIso_iff]
    infer_instance
instance quasiIso_map_of_preservesRightHomology
    [F.PreservesRightHomologyOf S₁] [F.PreservesRightHomologyOf S₂]
    [QuasiIso φ] : QuasiIso (F.mapShortComplex.map φ) := by
  have γ : RightHomologyMapData φ S₁.rightHomologyData S₂.rightHomologyData := default
  have : IsIso γ.φH := by
    

Proof state:
C : Type u_1
D : Type u_2
inst✝¹¹ : Category.{?u.203053, u_1} C
inst✝¹⁰ : Category.{?u.203057, u_2} D
inst✝⁹ : HasZeroMorphisms C
inst✝⁸ : HasZeroMorphisms D
S : ShortComplex C
h₁ : LeftHomologyData S
h₂ : RightHomologyData S
F : C ⥤ D
inst✝⁷ : Functor.PreservesZeroMorphisms F
S₁ S₂ : ShortComplex C
φ : S₁ ⟶ S₂
hl₁ : LeftHomologyData S₁
hr₁ : RightHomologyData S₁
hl₂ : LeftHomologyData S₂
hr₂ : RightHomologyData S₂
ψl : LeftHomologyMapData φ hl₁ hl₂
ψr : RightHomologyMapData φ hr₁ hr₂
inst✝⁶ : HasHomology S₁
inst✝⁵ : HasHomology S₂
inst✝⁴ : HasHomology ((Functor.mapShortComplex F).obj S₁)
inst✝³ : HasHomology ((Functor.mapShortComplex F).obj S₂)
inst✝² : Functor.PreservesRightHomologyOf F S₁
inst✝¹ : Functor.PreservesRightHomologyOf F S₂
inst✝ : QuasiIso φ
γ : RightHomologyMapData φ (rightHomologyData S₁) (rightHomologyData S₂)
⊢ IsIso γ.φH

Next tactic:
rw [← γ.quasiIso_iff]
instance quasiIso_map_of_preservesRightHomology
    [F.PreservesRightHomologyOf S₁] [F.PreservesRightHomologyOf S₂]
    [QuasiIso φ] : QuasiIso (F.mapShortComplex.map φ) := by
  have γ : RightHomologyMapData φ S₁.rightHomologyData S₂.rightHomologyData := default
  have : IsIso γ.φH := by
    rw [← γ.quasiIso_iff]
    

Proof state:
C : Type u_1
D : Type u_2
inst✝¹¹ : Category.{?u.203053, u_1} C
inst✝¹⁰ : Category.{?u.203057, u_2} D
inst✝⁹ : HasZeroMorphisms C
inst✝⁸ : HasZeroMorphisms D
S : ShortComplex C
h₁ : LeftHomologyData S
h₂ : RightHomologyData S
F : C ⥤ D
inst✝⁷ : Functor.PreservesZeroMorphisms F
S₁ S₂ : ShortComplex C
φ : S₁ ⟶ S₂
hl₁ : LeftHomologyData S₁
hr₁ : RightHomologyData S₁
hl₂ : LeftHomologyData S₂
hr₂ : RightHomologyData S₂
ψl : LeftHomologyMapData φ hl₁ hl₂
ψr : RightHomologyMapData φ hr₁ hr₂
inst✝⁶ : HasHomology S₁
inst✝⁵ : HasHomology S₂
inst✝⁴ : HasHomology ((Functor.mapShortComplex F).obj S₁)
inst✝³ : HasHomology ((Functor.mapShortComplex F).obj S₂)
inst✝² : Functor.PreservesRightHomologyOf F S₁
inst✝¹ : Functor.PreservesRightHomologyOf F S₂
inst✝ : QuasiIso φ
γ : RightHomologyMapData φ (rightHomologyData S₁) (rightHomologyData S₂)
⊢ QuasiIso φ

Next tactic:
infer_instance