Theorem: HomotopyCategory.Pretriangulated.contractible_distinguished
File: Mathlib/Algebra/Homology/HomotopyCategory/Pretriangulated.lean

tactic: obtain ⟨X⟩ := X
state_before: C : Type u_1
inst✝³ : Category.{u_2, u_1} C
inst✝² : Preadditive C
inst✝¹ : HasZeroObject C
inst✝ : HasBinaryBiproducts C
K L : CochainComplex C ℤ
φ : K ⟶ L
X : HomotopyCategory C (ComplexShape.up ℤ)
⊢ contractibleTriangle X ∈ distinguishedTriangles C
state_after: case mk
C : Type u_1
inst✝³ : Category.{u_2, u_1} C
inst✝² : Preadditive C
inst✝¹ : HasZeroObject C
inst✝ : HasBinaryBiproducts C
K L : CochainComplex C ℤ
φ : K ⟶ L
X : HomologicalComplex C (ComplexShape.up ℤ)
⊢ contractibleTriangle { as := X } ∈ distinguishedTriangles C

tactic: refine ⟨_, _, 𝟙 X, ⟨?_⟩⟩
state_before: case mk
C : Type u_1
inst✝³ : Category.{u_2, u_1} C
inst✝² : Preadditive C
inst✝¹ : HasZeroObject C
inst✝ : HasBinaryBiproducts C
K L : CochainComplex C ℤ
φ : K ⟶ L
X : HomologicalComplex C (ComplexShape.up ℤ)
⊢ contractibleTriangle { as := X } ∈ distinguishedTriangles C
state_after: case mk
C : Type u_1
inst✝³ : Category.{u_2, u_1} C
inst✝² : Preadditive C
inst✝¹ : HasZeroObject C
inst✝ : HasBinaryBiproducts C
K L : CochainComplex C ℤ
φ : K ⟶ L
X : HomologicalComplex C (ComplexShape.up ℤ)
⊢ contractibleTriangle { as := X } ≅ CochainComplex.mappingCone.triangleh (𝟙 X)

tactic: have h := (isZero_quotient_obj_iff _).2 ⟨CochainComplex.mappingCone.homotopyToZeroOfId X⟩
state_before: case mk
C : Type u_1
inst✝³ : Category.{u_2, u_1} C
inst✝² : Preadditive C
inst✝¹ : HasZeroObject C
inst✝ : HasBinaryBiproducts C
K L : CochainComplex C ℤ
φ : K ⟶ L
X : HomologicalComplex C (ComplexShape.up ℤ)
⊢ contractibleTriangle { as := X } ≅ CochainComplex.mappingCone.triangleh (𝟙 X)
state_after: case mk
C : Type u_1
inst✝³ : Category.{u_2, u_1} C
inst✝² : Preadditive C
inst✝¹ : HasZeroObject C
inst✝ : HasBinaryBiproducts C
K L : CochainComplex C ℤ
φ : K ⟶ L
X : HomologicalComplex C (ComplexShape.up ℤ)
h : IsZero ((quotient C (ComplexShape.up ℤ)).obj (CochainComplex.mappingCone (𝟙 X)))
⊢ contractibleTriangle { as := X } ≅ CochainComplex.mappingCone.triangleh (𝟙 X)

tactic: exact Triangle.isoMk _ _ (Iso.refl _) (Iso.refl _) h.isoZero.symm
  (by simp) (h.eq_of_tgt _ _) (by dsimp; ext)
state_before: case mk
C : Type u_1
inst✝³ : Category.{u_2, u_1} C
inst✝² : Preadditive C
inst✝¹ : HasZeroObject C
inst✝ : HasBinaryBiproducts C
K L : CochainComplex C ℤ
φ : K ⟶ L
X : HomologicalComplex C (ComplexShape.up ℤ)
h : IsZero ((quotient C (ComplexShape.up ℤ)).obj (CochainComplex.mappingCone (𝟙 X)))
⊢ contractibleTriangle { as := X } ≅ CochainComplex.mappingCone.triangleh (𝟙 X)
state_after: no goals

tactic: simp
state_before: C : Type u_1
inst✝³ : Category.{u_2, u_1} C
inst✝² : Preadditive C
inst✝¹ : HasZeroObject C
inst✝ : HasBinaryBiproducts C
K L : CochainComplex C ℤ
φ : K ⟶ L
X : HomologicalComplex C (ComplexShape.up ℤ)
h : IsZero ((quotient C (ComplexShape.up ℤ)).obj (CochainComplex.mappingCone (𝟙 X)))
⊢ (contractibleTriangle { as := X }).mor₁ ≫ (Iso.refl (contractibleTriangle { as := X }).obj₂).hom =
    (Iso.refl (contractibleTriangle { as := X }).obj₁).hom ≫ (CochainComplex.mappingCone.triangleh (𝟙 X)).mor₁
state_after: no goals

tactic: dsimp
state_before: C : Type u_1
inst✝³ : Category.{u_2, u_1} C
inst✝² : Preadditive C
inst✝¹ : HasZeroObject C
inst✝ : HasBinaryBiproducts C
K L : CochainComplex C ℤ
φ : K ⟶ L
X : HomologicalComplex C (ComplexShape.up ℤ)
h : IsZero ((quotient C (ComplexShape.up ℤ)).obj (CochainComplex.mappingCone (𝟙 X)))
⊢ (contractibleTriangle { as := X }).mor₃ ≫
      (shiftFunctor (HomotopyCategory C (ComplexShape.up ℤ)) 1).map
        (Iso.refl (contractibleTriangle { as := X }).obj₁).hom =
    h.isoZero.symm.hom ≫ (CochainComplex.mappingCone.triangleh (𝟙 X)).mor₃
state_after: C : Type u_1
inst✝³ : Category.{u_2, u_1} C
inst✝² : Preadditive C
inst✝¹ : HasZeroObject C
inst✝ : HasBinaryBiproducts C
K L : CochainComplex C ℤ
φ : K ⟶ L
X : HomologicalComplex C (ComplexShape.up ℤ)
h : IsZero ((quotient C (ComplexShape.up ℤ)).obj (CochainComplex.mappingCone (𝟙 X)))
⊢ 0 ≫ (shiftFunctor (HomotopyCategory C (ComplexShape.up ℤ)) 1).map (𝟙 { as := X }) =
    h.isoZero.inv ≫
      (quotient C (ComplexShape.up ℤ)).map (CochainComplex.mappingCone.triangle (𝟙 X)).mor₃ ≫
        ((quotient C (ComplexShape.up ℤ)).commShiftIso 1).hom.app X

tactic: ext
state_before: C : Type u_1
inst✝³ : Category.{u_2, u_1} C
inst✝² : Preadditive C
inst✝¹ : HasZeroObject C
inst✝ : HasBinaryBiproducts C
K L : CochainComplex C ℤ
φ : K ⟶ L
X : HomologicalComplex C (ComplexShape.up ℤ)
h : IsZero ((quotient C (ComplexShape.up ℤ)).obj (CochainComplex.mappingCone (𝟙 X)))
⊢ 0 ≫ (shiftFunctor (HomotopyCategory C (ComplexShape.up ℤ)) 1).map (𝟙 { as := X }) =
    h.isoZero.inv ≫
      (quotient C (ComplexShape.up ℤ)).map (CochainComplex.mappingCone.triangle (𝟙 X)).mor₃ ≫
        ((quotient C (ComplexShape.up ℤ)).commShiftIso 1).hom.app X
state_after: no goals