mathlib-initiative/mathlib-tactics huggingface dataset:
Module: Mathlib.CategoryTheory.Triangulated.Subcategory

Goal state before:
pp: C : Type u_1
inst✝⁶ : Category.{v_1, u_1} C
inst✝⁵ : HasZeroObject C
inst✝⁴ : HasShift C ℤ
inst✝³ : Preadditive C
inst✝² : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝¹ : Pretriangulated C
P Q R : ObjectProperty C
inst✝ : IsTriangulated C
⊢ (P.extensionProduct Q).extensionProduct R = P.extensionProduct (Q.extensionProduct R)

Tactic:
ext X

Goal state after:
C : Type u_1
inst✝⁶ : Category.{v_1, u_1} C
inst✝⁵ : HasZeroObject C
inst✝⁴ : HasShift C ℤ
inst✝³ : Preadditive C
inst✝² : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝¹ : Pretriangulated C
P Q R : ObjectProperty C
inst✝ : IsTriangulated C
X : C
⊢ (P.extensionProduct Q).extensionProduct R X ↔ P.extensionProduct (Q.extensionProduct R) X
Module: Mathlib.CategoryTheory.Localization.Composition

Goal state before:
pp: C₁ : Type u₁
C₂ : Type u₂
C₃ : Type u₃
E : Type u₄
inst✝³ : Category.{v₁, u₁} C₁
inst✝² : Category.{v₂, u₂} C₂
inst✝¹ : Category.{v₃, u₃} C₃
inst✝ : Category.{v₄, u₄} E
L₁ : C₁ ⥤ C₂
L₂ : C₂ ⥤ C₃
W₁ : MorphismProperty C₁
W₂ : MorphismProperty C₂
h₁ : StrictUniversalPropertyFixedTarget L₁ W₁ E
h₂ : StrictUniversalPropertyFixedTarget L₂ W₂ E
W₃ : MorphismProperty C₁
hW₃ : W₃.IsInvertedBy (L₁ ⋙ L₂)
hW₁₃ : W₁ ≤ W₃
hW₂₃ : W₂ ≤ W₃.map L₁
x✝¹ x✝ : C₃ ⥤ E
h : (L₁ ⋙ L₂) ⋙ x✝¹ = (L₁ ⋙ L₂) ⋙ x✝
⊢ L₁ ⋙ L₂ ⋙ x✝¹ = L₁ ⋙ L₂ ⋙ x✝

Tactic:
simpa only [Functor.assoc] using h

Goal state after:
Module: Mathlib.CategoryTheory.Localization.Composition

Goal state before:
pp: C₁ : Type u₁
C₂ : Type u₂
C₃ : Type u₃
inst✝⁴ : Category.{v₁, u₁} C₁
inst✝³ : Category.{v₂, u₂} C₂
inst✝² : Category.{v₃, u₃} C₃
L₁ : C₁ ⥤ C₂
L₂ : C₂ ⥤ C₃
W₁ : MorphismProperty C₁
W₂ : MorphismProperty C₂
inst✝¹ : L₁.IsLocalization W₁
inst✝ : L₂.IsLocalization W₂
W₃ : MorphismProperty C₁
hW₃ : W₃.IsInvertedBy (L₁ ⋙ L₂)
hW₁₃ : W₁ ≤ W₃
hW₂₃ : W₂ ≤ W₃.map L₁
E₂ : C₂ ≌ W₁.Localization := uniq L₁ W₁.Q W₁
W₂' : MorphismProperty W₁.Localization := W₂.map E₂.functor
eq : (W₂.map E₂.functor).inverseImage E₂.functor = W₂.isoClosure
⊢ W₂ ≤ W₂'.inverseImage E₂.functor

Tactic:
eq

Goal state after:
C₁ : Type u₁
C₂ : Type u₂
C₃ : Type u₃
inst✝⁴ : Category.{v₁, u₁} C₁
inst✝³ : Category.{v₂, u₂} C₂
inst✝² : Category.{v₃, u₃} C₃
L₁ : C₁ ⥤ C₂
L₂ : C₂ ⥤ C₃
W₁ : MorphismProperty C₁
W₂ : MorphismProperty C₂
inst✝¹ : L₁.IsLocalization W₁
inst✝ : L₂.IsLocalization W₂
W₃ : MorphismProperty C₁
hW₃ : W₃.IsInvertedBy (L₁ ⋙ L₂)
hW₁₃ : W₁ ≤ W₃
hW₂₃ : W₂ ≤ W₃.map L₁
E₂ : C₂ ≌ W₁.Localization := uniq L₁ W₁.Q W₁
W₂' : MorphismProperty W₁.Localization := W₂.map E₂.functor
eq : (W₂.map E₂.functor).inverseImage E₂.functor = W₂.isoClosure
⊢ W₂ ≤ W₂.isoClosure
Module: Mathlib.Algebra.Homology.HomotopyCategory.Acyclic

Goal state before:
pp: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Abelian C
⊢ (subcategoryAcyclic C).IsTriangulated

Tactic:
dsimp [subcategoryAcyclic]

Goal state after:
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Abelian C
⊢ (homologyFunctor C (ComplexShape.up ℤ) 0).homologicalKernel.IsTriangulated
Module: Mathlib.Algebra.Homology.HomotopyCategory.Acyclic

Goal state before:
pp: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Abelian C
⊢ (subcategoryAcyclic C).IsClosedUnderIsomorphisms

Tactic:
dsimp [subcategoryAcyclic]

Goal state after:
C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Abelian C
⊢ (homologyFunctor C (ComplexShape.up ℤ) 0).homologicalKernel.IsClosedUnderIsomorphisms
Module: Mathlib.CategoryTheory.Triangulated.Subcategory

Goal state before:
pp: case mp
C : Type u_1
inst✝⁶ : Category.{v_1, u_1} C
inst✝⁵ : HasZeroObject C
inst✝⁴ : HasShift C ℤ
inst✝³ : Preadditive C
inst✝² : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝¹ : Pretriangulated C
P : ObjectProperty C
inst✝ : P.IsClosedUnderIsomorphisms
T : Triangle C
hT : T ∈ distinguishedTriangles
⊢ P.trW T.mor₁ → P T.obj₃

Tactic:
rintro ⟨Z, g, h, hT', mem⟩

Goal state after:
case mp
C : Type u_1
inst✝⁶ : Category.{v_1, u_1} C
inst✝⁵ : HasZeroObject C
inst✝⁴ : HasShift C ℤ
inst✝³ : Preadditive C
inst✝² : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝¹ : Pretriangulated C
P : ObjectProperty C
inst✝ : P.IsClosedUnderIsomorphisms
T : Triangle C
hT : T ∈ distinguishedTriangles
Z : C
g : T.obj₂ ⟶ Z
h : Z ⟶ (shiftFunctor C 1).obj T.obj₁
hT' : Triangle.mk T.mor₁ g h ∈ distinguishedTriangles
mem : P Z
⊢ P T.obj₃
Module: Mathlib.CategoryTheory.Shift.SingleFunctors

Goal state before:
pp: C : Type u_1
D : Type u_2
E : Type u_3
E' : Type u_4
inst✝⁸ : Category.{v_1, u_1} C
inst✝⁷ : Category.{v_2, u_2} D
inst✝⁶ : Category.{v_3, u_3} E
inst✝⁵ : Category.{v_4, u_4} E'
A : Type u_5
inst✝⁴ : AddMonoid A
inst✝³ : HasShift D A
inst✝² : HasShift E A
inst✝¹ : HasShift E' A
F G✝ H : SingleFunctors C D A
G : D ⥤ E
inst✝ : G.CommShift A
a : A
⊢ (F.functor a).associator G (shiftFunctor E 0) ≪≫
      (F.functor a).isoWhiskerLeft (commShiftIso G 0).symm ≪≫
        ((F.functor a).associator (shiftFunctor D 0) G).symm ≪≫ isoWhiskerRight (F.shiftIso 0 a a ⋯) G =
    (F.functor a ⋙ G).isoWhiskerLeft (shiftFunctorZero E A)

Tactic:
ext X

Goal state after:
C : Type u_1
D : Type u_2
E : Type u_3
E' : Type u_4
inst✝⁸ : Category.{v_1, u_1} C
inst✝⁷ : Category.{v_2, u_2} D
inst✝⁶ : Category.{v_3, u_3} E
inst✝⁵ : Category.{v_4, u_4} E'
A : Type u_5
inst✝⁴ : AddMonoid A
inst✝³ : HasShift D A
inst✝² : HasShift E A
inst✝¹ : HasShift E' A
F G✝ H : SingleFunctors C D A
G : D ⥤ E
inst✝ : G.CommShift A
a : A
X : C
⊢ ((F.functor a).associator G (shiftFunctor E 0) ≪≫
            (F.functor a).isoWhiskerLeft (commShiftIso G 0).symm ≪≫
              ((F.functor a).associator (shiftFunctor D 0) G).symm ≪≫ isoWhiskerRight (F.shiftIso 0 a a ⋯) G).hom.app
      X =
    ((F.functor a ⋙ G).isoWhiskerLeft (shiftFunctorZero E A)).hom.app X
Module: Mathlib.CategoryTheory.Shift.SingleFunctors

Goal state before:
pp: C : Type u_1
D : Type u_2
E : Type u_3
E' : Type u_4
inst✝⁸ : Category.{v_1, u_1} C
inst✝⁷ : Category.{v_2, u_2} D
inst✝⁶ : Category.{v_3, u_3} E
inst✝⁵ : Category.{v_4, u_4} E'
A : Type u_5
inst✝⁴ : AddMonoid A
inst✝³ : HasShift D A
inst✝² : HasShift E A
inst✝¹ : HasShift E' A
F G✝ H : SingleFunctors C D A
G : D ⥤ E
inst✝ : G.CommShift A
n m a a' a'' : A
ha' : n + a = a'
ha'' : m + a' = a''
⊢ (F.functor a'').associator G (shiftFunctor E (m + n)) ≪≫
      (F.functor a'').isoWhiskerLeft (commShiftIso G (m + n)).symm ≪≫
        ((F.functor a'').associator (shiftFunctor D (m + n)) G).symm ≪≫ isoWhiskerRight (F.shiftIso (m + n) a a'' ⋯) G =
    (F.functor a'' ⋙ G).isoWhiskerLeft (shiftFunctorAdd E m n) ≪≫
      ((F.functor a'' ⋙ G).associator (shiftFunctor E m) (shiftFunctor E n)).symm ≪≫
        isoWhiskerRight
            ((F.functor a'').associator G (shiftFunctor E m) ≪≫
              (F.functor a'').isoWhiskerLeft (commShiftIso G m).symm ≪≫
                ((F.functor a'').associator (shiftFunctor D m) G).symm ≪≫ isoWhiskerRight (F.shiftIso m a' a'' ha'') G)
            (shiftFunctor E n) ≪≫
          (F.functor a').associator G (shiftFunctor E n) ≪≫
            (F.functor a').isoWhiskerLeft (commShiftIso G n).symm ≪≫
              ((F.functor a').associator (shiftFunctor D n) G).symm ≪≫ isoWhiskerRight (F.shiftIso n a a' ha') G

Tactic:
ext X

Goal state after:
C : Type u_1
D : Type u_2
E : Type u_3
E' : Type u_4
inst✝⁸ : Category.{v_1, u_1} C
inst✝⁷ : Category.{v_2, u_2} D
inst✝⁶ : Category.{v_3, u_3} E
inst✝⁵ : Category.{v_4, u_4} E'
A : Type u_5
inst✝⁴ : AddMonoid A
inst✝³ : HasShift D A
inst✝² : HasShift E A
inst✝¹ : HasShift E' A
F G✝ H : SingleFunctors C D A
G : D ⥤ E
inst✝ : G.CommShift A
n m a a' a'' : A
ha' : n + a = a'
ha'' : m + a' = a''
X : C
⊢ ((F.functor a'').associator G (shiftFunctor E (m + n)) ≪≫
            (F.functor a'').isoWhiskerLeft (commShiftIso G (m + n)).symm ≪≫
              ((F.functor a'').associator (shiftFunctor D (m + n)) G).symm ≪≫
                isoWhiskerRight (F.shiftIso (m + n) a a'' ⋯) G).hom.app
      X =
    ((F.functor a'' ⋙ G).isoWhiskerLeft (shiftFunctorAdd E m n) ≪≫
            ((F.functor a'' ⋙ G).associator (shiftFunctor E m) (shiftFunctor E n)).symm ≪≫
              isoWhiskerRight
                  ((F.functor a'').associator G (shiftFunctor E m) ≪≫
                    (F.functor a'').isoWhiskerLeft (commShiftIso G m).symm ≪≫
                      ((F.functor a'').associator (shiftFunctor D m) G).symm ≪≫
                        isoWhiskerRight (F.shiftIso m a' a'' ha'') G)
                  (shiftFunctor E n) ≪≫
                (F.functor a').associator G (shiftFunctor E n) ≪≫
                  (F.functor a').isoWhiskerLeft (commShiftIso G n).symm ≪≫
                    ((F.functor a').associator (shiftFunctor D n) G).symm ≪≫
                      isoWhiskerRight (F.shiftIso n a a' ha') G).hom.app
      X
Module: Mathlib.CategoryTheory.Shift.SingleFunctors

Goal state before:
pp: C : Type u_1
D : Type u_2
E : Type u_3
E' : Type u_4
inst✝⁸ : Category.{v_1, u_1} C
inst✝⁷ : Category.{v_2, u_2} D
inst✝⁶ : Category.{v_3, u_3} E
inst✝⁵ : Category.{v_4, u_4} E'
A : Type u_5
inst✝⁴ : AddMonoid A
inst✝³ : HasShift D A
inst✝² : HasShift E A
inst✝¹ : HasShift E' A
F G✝ H : SingleFunctors C D A
G : D ⥤ E
inst✝ : G.CommShift A
F₁ F₂ : SingleFunctors C D A
φ : F₁ ⟶ F₂
n a a' : A
ha' : n + a = a'
⊢ ((F₁.postcomp G).shiftIso n a a' ha').hom ≫ whiskerRight (φ.hom a) G =
    whiskerRight (whiskerRight (φ.hom a') G) (shiftFunctor E n) ≫ ((F₂.postcomp G).shiftIso n a a' ha').hom

Tactic:
ext X

Goal state after:
C : Type u_1
D : Type u_2
E : Type u_3
E' : Type u_4
inst✝⁸ : Category.{v_1, u_1} C
inst✝⁷ : Category.{v_2, u_2} D
inst✝⁶ : Category.{v_3, u_3} E
inst✝⁵ : Category.{v_4, u_4} E'
A : Type u_5
inst✝⁴ : AddMonoid A
inst✝³ : HasShift D A
inst✝² : HasShift E A
inst✝¹ : HasShift E' A
F G✝ H : SingleFunctors C D A
G : D ⥤ E
inst✝ : G.CommShift A
F₁ F₂ : SingleFunctors C D A
φ : F₁ ⟶ F₂
n a a' : A
ha' : n + a = a'
X : C
⊢ (((F₁.postcomp G).shiftIso n a a' ha').hom ≫ whiskerRight (φ.hom a) G).app X =
    (whiskerRight (whiskerRight (φ.hom a') G) (shiftFunctor E n) ≫ ((F₂.postcomp G).shiftIso n a a' ha').hom).app X
Module: Mathlib.CategoryTheory.Shift.SingleFunctors

Goal state before:
pp: C : Type u_1
D : Type u_2
E : Type u_3
E' : Type u_4
inst✝⁹ : Category.{v_1, u_1} C
inst✝⁸ : Category.{v_2, u_2} D
inst✝⁷ : Category.{v_3, u_3} E
inst✝⁶ : Category.{v_4, u_4} E'
A : Type u_5
inst✝⁵ : AddMonoid A
inst✝⁴ : HasShift D A
inst✝³ : HasShift E A
inst✝² : HasShift E' A
F G✝ H : SingleFunctors C D A
G : D ⥤ E
G' : E ⥤ E'
inst✝¹ : G.CommShift A
inst✝ : G'.CommShift A
n a a' : A
ha' : n + a = a'
⊢ (((F.postcomp G).postcomp G').shiftIso n a a' ha').hom ≫ ((F.functor a).associator G G').hom =
    whiskerRight ((F.functor a').associator G G').hom (shiftFunctor E' n) ≫
      ((F.postcomp (G ⋙ G')).shiftIso n a a' ha').hom

Tactic:
ext X

Goal state after:
C : Type u_1
D : Type u_2
E : Type u_3
E' : Type u_4
inst✝⁹ : Category.{v_1, u_1} C
inst✝⁸ : Category.{v_2, u_2} D
inst✝⁷ : Category.{v_3, u_3} E
inst✝⁶ : Category.{v_4, u_4} E'
A : Type u_5
inst✝⁵ : AddMonoid A
inst✝⁴ : HasShift D A
inst✝³ : HasShift E A
inst✝² : HasShift E' A
F G✝ H : SingleFunctors C D A
G : D ⥤ E
G' : E ⥤ E'
inst✝¹ : G.CommShift A
inst✝ : G'.CommShift A
n a a' : A
ha' : n + a = a'
X : C
⊢ ((((F.postcomp G).postcomp G').shiftIso n a a' ha').hom ≫ ((F.functor a).associator G G').hom).app X =
    (whiskerRight ((F.functor a').associator G G').hom (shiftFunctor E' n) ≫
          ((F.postcomp (G ⋙ G')).shiftIso n a a' ha').hom).app
      X
Module: Mathlib.CategoryTheory.Shift.SingleFunctors

Goal state before:
pp: C : Type u_1
D : Type u_2
E : Type u_3
E' : Type u_4
inst✝¹⁰ : Category.{v_1, u_1} C
inst✝⁹ : Category.{v_2, u_2} D
inst✝⁸ : Category.{v_3, u_3} E
inst✝⁷ : Category.{v_4, u_4} E'
A : Type u_5
inst✝⁶ : AddMonoid A
inst✝⁵ : HasShift D A
inst✝⁴ : HasShift E A
inst✝³ : HasShift E' A
F G✝ H : SingleFunctors C D A
G G' : D ⥤ E
e : G ≅ G'
inst✝² : G.CommShift A
inst✝¹ : G'.CommShift A
inst✝ : NatTrans.CommShift e.hom A
n a a' : A
ha' : n + a = a'
⊢ ((F.postcomp G).shiftIso n a a' ha').hom ≫ ((F.functor a).isoWhiskerLeft e).hom =
    whiskerRight ((F.functor a').isoWhiskerLeft e).hom (shiftFunctor E n) ≫ ((F.postcomp G').shiftIso n a a' ha').hom

Tactic:
ext X

Goal state after:
C : Type u_1
D : Type u_2
E : Type u_3
E' : Type u_4
inst✝¹⁰ : Category.{v_1, u_1} C
inst✝⁹ : Category.{v_2, u_2} D
inst✝⁸ : Category.{v_3, u_3} E
inst✝⁷ : Category.{v_4, u_4} E'
A : Type u_5
inst✝⁶ : AddMonoid A
inst✝⁵ : HasShift D A
inst✝⁴ : HasShift E A
inst✝³ : HasShift E' A
F G✝ H : SingleFunctors C D A
G G' : D ⥤ E
e : G ≅ G'
inst✝² : G.CommShift A
inst✝¹ : G'.CommShift A
inst✝ : NatTrans.CommShift e.hom A
n a a' : A
ha' : n + a = a'
X : C
⊢ (((F.postcomp G).shiftIso n a a' ha').hom ≫ ((F.functor a).isoWhiskerLeft e).hom).app X =
    (whiskerRight ((F.functor a').isoWhiskerLeft e).hom (shiftFunctor E n) ≫
          ((F.postcomp G').shiftIso n a a' ha').hom).app
      X
Module: Mathlib.Algebra.Homology.DerivedCategory.Basic

Goal state before:
pp: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasDerivedCategory C
n : ℤ
⊢ (singleFunctorsPostcompQIso C).hom.hom n = 𝟙 ((singleFunctors C).functor n)

Tactic:
ext X

Goal state after:
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasDerivedCategory C
n : ℤ
X : C
⊢ ((singleFunctorsPostcompQIso C).hom.hom n).app X = (𝟙 ((singleFunctors C).functor n)).app X
Module: Mathlib.Algebra.Homology.DerivedCategory.Basic

Goal state before:
pp: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasDerivedCategory C
n : ℤ
⊢ (singleFunctorsPostcompQIso C).inv.hom n = 𝟙 (((CochainComplex.singleFunctors C).postcomp Q).functor n)

Tactic:
ext X

Goal state after:
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasDerivedCategory C
n : ℤ
X : C
⊢ ((singleFunctorsPostcompQIso C).inv.hom n).app X =
    (𝟙 (((CochainComplex.singleFunctors C).postcomp Q).functor n)).app X
Module: Mathlib.CategoryTheory.Triangulated.Subcategory

Goal state before:
pp: C : Type u_1
inst✝¹⁵ : Category.{v_1, u_1} C
inst✝¹⁴ : HasZeroObject C
inst✝¹³ : HasShift C ℤ
inst✝¹² : Preadditive C
inst✝¹¹ : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝¹⁰ : Pretriangulated C
D : Type u_2
inst✝⁹ : Category.{v_2, u_2} D
inst✝⁸ : Preadditive D
inst✝⁷ : HasZeroObject D
inst✝⁶ : HasShift D ℤ
inst✝⁵ : ∀ (n : ℤ), (shiftFunctor D n).Additive
inst✝⁴ : Pretriangulated D
E : Type u_3
inst✝³ : Category.{v_3, u_3} E
inst✝² : HasShift E ℤ
P : ObjectProperty C
inst✝¹ : P.IsTriangulated
inst✝ : P.IsClosedUnderIsomorphisms
X : C
p : P.LimitOfShape (Discrete WalkingPair) X
⊢ P X

Tactic:
refine P.prop_of_iso ?_ (P.ext_of_isTriangulatedClosed₂ _
      (binaryProductTriangle_distinguished _ _)
      (p.prop_diag_obj (.mk .left)) (p.prop_diag_obj (.mk .right)))

Goal state after:
C : Type u_1
inst✝¹⁵ : Category.{v_1, u_1} C
inst✝¹⁴ : HasZeroObject C
inst✝¹³ : HasShift C ℤ
inst✝¹² : Preadditive C
inst✝¹¹ : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝¹⁰ : Pretriangulated C
D : Type u_2
inst✝⁹ : Category.{v_2, u_2} D
inst✝⁸ : Preadditive D
inst✝⁷ : HasZeroObject D
inst✝⁶ : HasShift D ℤ
inst✝⁵ : ∀ (n : ℤ), (shiftFunctor D n).Additive
inst✝⁴ : Pretriangulated D
E : Type u_3
inst✝³ : Category.{v_3, u_3} E
inst✝² : HasShift E ℤ
P : ObjectProperty C
inst✝¹ : P.IsTriangulated
inst✝ : P.IsClosedUnderIsomorphisms
X : C
p : P.LimitOfShape (Discrete WalkingPair) X
⊢ (binaryProductTriangle (p.diag.1 { as := WalkingPair.left }) (p.diag.1 { as := WalkingPair.right })).obj₂ ≅ X
Module: Mathlib.Algebra.Homology.DerivedCategory.HomologySequence

Goal state before:
pp: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasDerivedCategory C
T : Triangle (CochainComplex C ℤ)
hT : DerivedCategory.Q.mapTriangle.obj T ∈ distinguishedTriangles
n : ℤ
⊢ (DerivedCategory.homologyFunctor C n).map (DerivedCategory.Q.map T.mor₁) ≫
      (DerivedCategory.homologyFunctor C n).map (DerivedCategory.Q.map T.mor₂) ≫
        (DerivedCategory.homologyFunctorFactors C n).hom.app T.obj₃ =
    (DerivedCategory.homologyFunctorFactors C n).hom.app T.obj₁ ≫ 0

Tactic:
← Functor.map_comp_assoc,

Goal state after:
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasDerivedCategory C
T : Triangle (CochainComplex C ℤ)
hT : DerivedCategory.Q.mapTriangle.obj T ∈ distinguishedTriangles
n : ℤ
⊢ (DerivedCategory.homologyFunctor C n).map (DerivedCategory.Q.map T.mor₁ ≫ DerivedCategory.Q.map T.mor₂) ≫
      (DerivedCategory.homologyFunctorFactors C n).hom.app T.obj₃ =
    (DerivedCategory.homologyFunctorFactors C n).hom.app T.obj₁ ≫ 0
Module: Mathlib.Algebra.Homology.Embedding.Basic

Goal state before:
pp: ι : Type u_1
ι' : Type u_2
c : ComplexShape ι
c' : ComplexShape ι'
⊢ embeddingDownNat.IsRelIff

Tactic:
by dsimp [embeddingDownNat]; infer_instance

Goal state after:
Module: Mathlib.Algebra.Homology.Opposite

Goal state before:
pp: V : Type u_1
inst✝¹ : Category.{v_1, u_1} V
inst✝ : Abelian V
X Y Z : V
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
⊢ f ≫ factorThruImage g = 0

Tactic:
← cancel_mono (image.ι g),

Goal state after:
V : Type u_1
inst✝¹ : Category.{v_1, u_1} V
inst✝ : Abelian V
X Y Z : V
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
⊢ (f ≫ factorThruImage g) ≫ image.ι g = 0 ≫ image.ι g
Module: Mathlib.Algebra.Homology.Opposite

Goal state before:
pp: V : Type u_1
inst✝¹ : Category.{v_1, u_1} V
inst✝ : Abelian V
X Y Z : Vᵒᵖ
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
⊢ f ≫ factorThruImage g = 0

Tactic:
← cancel_mono (image.ι g),

Goal state after:
V : Type u_1
inst✝¹ : Category.{v_1, u_1} V
inst✝ : Abelian V
X Y Z : Vᵒᵖ
f : X ⟶ Y
g : Y ⟶ Z
w : f ≫ g = 0
⊢ (f ≫ factorThruImage g) ≫ image.ι g = 0 ≫ image.ι g
Module: Mathlib.Algebra.Homology.Opposite

Goal state before:
pp: ι : Type u_1
V : Type u_2
inst✝³ : Category.{v_1, u_2} V
c : ComplexShape ι
inst✝² : HasZeroMorphisms V
K L : HomologicalComplex Vᵒᵖ c
φ : K ⟶ L
i : ι
inst✝¹ : K.HasHomology i
inst✝ : L.HasHomology i
⊢ QuasiIsoAt ((unopFunctor V c).map φ.op) i ↔ QuasiIsoAt φ i

Tactic:
← quasiIsoAt_opFunctor_map_iff

Goal state after:
ι : Type u_1
V : Type u_2
inst✝³ : Category.{v_1, u_2} V
c : ComplexShape ι
inst✝² : HasZeroMorphisms V
K L : HomologicalComplex Vᵒᵖ c
φ : K ⟶ L
i : ι
inst✝¹ : K.HasHomology i
inst✝ : L.HasHomology i
⊢ QuasiIsoAt ((opFunctor V c.symm).map ((unopFunctor V c).map φ.op).op) i ↔ QuasiIsoAt φ i
Module: Mathlib.Algebra.Homology.Embedding.Restriction

Goal state before:
pp: ι : Type u_1
ι' : Type u_2
c : ComplexShape ι
c' : ComplexShape ι'
C : Type u_3
inst✝² : Category.{v_1, u_3} C
inst✝¹ : HasZeroMorphisms C
K L M : HomologicalComplex C c'
φ : K ⟶ L
φ' : L ⟶ M
e : c.Embedding c'
inst✝ : e.IsRelIff
i j : ι
hij : ¬c.Rel i j
⊢ ¬c'.Rel (e.f i) (e.f j)

Tactic:
simpa only [← e.rel_iff] using hij

Goal state after:
Module: Mathlib.Algebra.Homology.Embedding.Extend

Goal state before:
pp: case inr
ι : Type u_1
ι' : Type u_2
c : ComplexShape ι
c' : ComplexShape ι'
C : Type u_3
inst✝² : Category.{v_1, u_3} C
inst✝¹ : HasZeroObject C
inst✝ : HasZeroMorphisms C
K : HomologicalComplex C c
e : c.Embedding c'
i' j' : ι'
j : ι
hj : e.f j = j'
hj' : ¬c.Rel (c.prev j) j
i : ι
hi : e.r i' = some i
⊢ (K.extend e).d i' j' = 0

Tactic:
rw [extend_d_eq K e (e.f_eq_of_r_eq_some hi) hj, K.shape, zero_comp, comp_zero]

Goal state after:
case inr.a
ι : Type u_1
ι' : Type u_2
c : ComplexShape ι
c' : ComplexShape ι'
C : Type u_3
inst✝² : Category.{v_1, u_3} C
inst✝¹ : HasZeroObject C
inst✝ : HasZeroMorphisms C
K : HomologicalComplex C c
e : c.Embedding c'
i' j' : ι'
j : ι
hj : e.f j = j'
hj' : ¬c.Rel (c.prev j) j
i : ι
hi : e.r i' = some i
⊢ ¬c.Rel i j
Module: Mathlib.Algebra.Homology.Embedding.ExtendHomology

Goal state before:
pp: ι : Type u_1
ι' : Type u_2
c : ComplexShape ι
c' : ComplexShape ι'
C : Type u_3
inst✝² : Category.{v_1, u_3} C
inst✝¹ : HasZeroMorphisms C
inst✝ : HasZeroObject C
K : HomologicalComplex C c
e : c.Embedding c'
i j : ι
i' j' : ι'
hj' : e.f j = j'
hi : c.prev j = i
hi' : c'.prev j' = i'
W : C
φ : K.X j ⟶ W
⊢ K.d i j ≫ φ = 0 ↔ (K.extend e).d i' j' ≫ (K.extendXIso e hj').hom ≫ φ = 0

Tactic:
by_cases hij : c.Rel i j
  · have hi' : e.f i = i' := by rw [← hi', ← hj', c'.prev_eq' (e.rel hij)]
    rw [K.extend_d_eq e hi' hj', assoc, assoc, Iso.inv_hom_id_assoc,
      ← cancel_epi (K.extendXIso e hi').hom, comp_zero]
  · simp only [K.shape _ _ hij, zero_comp, true_iff]
    rw [K.extend_d_to_eq_zero e i' j' j hj', zero_comp]
    rw [hi]
    exact hij

Goal state after:
Module: Mathlib.Algebra.Homology.Embedding.TruncGE

Goal state before:
pp: ι : Type u_1
ι' : Type u_2
c : ComplexShape ι
c' : ComplexShape ι'
C : Type u_3
inst✝⁵ : Category.{v_1, u_3} C
inst✝⁴ : HasZeroMorphisms C
K L M : HomologicalComplex C c'
φ : K ⟶ L
φ' : L ⟶ M
e : c.Embedding c'
inst✝³ : e.IsTruncGE
inst✝² : ∀ (i' : ι'), K.HasHomology i'
inst✝¹ : ∀ (i' : ι'), L.HasHomology i'
inst✝ : ∀ (i' : ι'), M.HasHomology i'
i j : ι
hij : c.Rel i j
⊢ (if hi : e.BoundaryGE i then
        (K.truncGE'XIsoOpcycles e ⋯ hi).hom ≫ opcyclesMap φ (e.f i) ≫ (L.truncGE'XIsoOpcycles e ⋯ hi).inv
      else (K.truncGE'XIso e ⋯ hi).hom ≫ φ.f (e.f i) ≫ (L.truncGE'XIso e ⋯ hi).inv) ≫
      (L.truncGE' e).d i j =
    (K.truncGE' e).d i j ≫
      if hi : e.BoundaryGE j then
        (K.truncGE'XIsoOpcycles e ⋯ hi).hom ≫ opcyclesMap φ (e.f j) ≫ (L.truncGE'XIsoOpcycles e ⋯ hi).inv
      else (K.truncGE'XIso e ⋯ hi).hom ≫ φ.f (e.f j) ≫ (L.truncGE'XIso e ⋯ hi).inv

Tactic:
by
    rw [dif_neg (e.not_boundaryGE_next hij)]
    by_cases hi : e.BoundaryGE i
    · rw [dif_pos hi]
      simp [truncGE'_d_eq_fromOpcycles _ e hij rfl rfl hi,
        ← cancel_epi (K.pOpcycles (e.f i))]
    · rw [dif_neg hi]
      simp [truncGE'_d_eq _ e hij rfl rfl hi]

Goal state after:
Module: Mathlib.Algebra.Homology.Embedding.AreComplementary

Goal state before:
pp: ι : Type u_1
ι₁ : Type u_2
ι₂ : Type u_3
c : ComplexShape ι
c₁ : ComplexShape ι₁
c₂ : ComplexShape ι₂
e₁ : c₁.Embedding c
e₂ : c₂.Embedding c
ac : e₁.AreComplementary e₂
X : ι → Type u_5
x₁ : (i₁ : ι₁) → X (e₁.f i₁)
x₂ : (i₂ : ι₂) → X (e₂.f i₂)
i₁ : ι₁
⊢ ac.desc x₁ x₂ (e₁.f i₁) = x₁ i₁

Tactic:
dsimp [desc]
  rw [ac.desc'_inl _ _ _ i₁ (ac.equiv.injective (by simp)), desc.aux_trans]
  rfl

Goal state after:
Module: Mathlib.Algebra.Homology.Embedding.CochainComplex

Goal state before:
pp: case mp
C : Type u_1
inst✝⁴ : Category.{v_1, u_1} C
inst✝³ : HasZeroMorphisms C
K L : CochainComplex C ℤ
φ : K ⟶ L
inst✝² : HasZeroObject C
inst✝¹ : ∀ (i : ℤ), HasHomology K i
inst✝ : ∀ (i : ℤ), HasHomology L i
n : ℤ
⊢ (∀ (i : ℕ) (i' : ℤ), (embeddingUpIntGE n).f i = i' → QuasiIsoAt φ i') → ∀ (i : ℤ), n ≤ i → QuasiIsoAt φ i

Tactic:
intro h i hi

Goal state after:
case mp
C : Type u_1
inst✝⁴ : Category.{v_1, u_1} C
inst✝³ : HasZeroMorphisms C
K L : CochainComplex C ℤ
φ : K ⟶ L
inst✝² : HasZeroObject C
inst✝¹ : ∀ (i : ℤ), HasHomology K i
inst✝ : ∀ (i : ℤ), HasHomology L i
n : ℤ
h : ∀ (i : ℕ) (i' : ℤ), (embeddingUpIntGE n).f i = i' → QuasiIsoAt φ i'
i : ℤ
hi : n ≤ i
⊢ QuasiIsoAt φ i
Module: Mathlib.Algebra.Homology.SingleHomology

Goal state before:
pp: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : HasZeroMorphisms C
inst✝¹ : HasZeroObject C
ι : Type u_1
inst✝ : DecidableEq ι
c : ComplexShape ι
j : ι
A : C
this : IsIso (((single C c j).obj A).iCycles j)
⊢ ((single C c j).obj A).homologyπ j ≫ ((single C c j).obj A).homologyι j ≫ (singleObjOpcyclesSelfIso c j A).inv =
    ((single C c j).obj A).iCycles j ≫ (singleObjXSelf c j A).hom

Tactic:
homologyι_singleObjOpcyclesSelfIso_inv,

Goal state after:
C : Type u
inst✝³ : Category.{v, u} C
inst✝² : HasZeroMorphisms C
inst✝¹ : HasZeroObject C
ι : Type u_1
inst✝ : DecidableEq ι
c : ComplexShape ι
j : ι
A : C
this : IsIso (((single C c j).obj A).iCycles j)
⊢ ((single C c j).obj A).homologyπ j ≫ (singleObjHomologySelfIso c j A).hom =
    ((single C c j).obj A).iCycles j ≫ (singleObjXSelf c j A).hom