Theorem: DerivedCategory.mem_distTriang_iff
File: Mathlib/Algebra/Homology/DerivedCategory/Basic.lean

tactic: constructor
state_before: C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasDerivedCategory C
T : Triangle (DerivedCategory C)
⊢ T ∈ distinguishedTriangles ↔ ∃ X Y f, Nonempty (T ≅ Q.mapTriangle.obj (CochainComplex.mappingCone.triangle f))
state_after: case mp
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasDerivedCategory C
T : Triangle (DerivedCategory C)
⊢ T ∈ distinguishedTriangles → ∃ X Y f, Nonempty (T ≅ Q.mapTriangle.obj (CochainComplex.mappingCone.triangle f))

case mpr
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasDerivedCategory C
T : Triangle (DerivedCategory C)
⊢ (∃ X Y f, Nonempty (T ≅ Q.mapTriangle.obj (CochainComplex.mappingCone.triangle f))) → T ∈ distinguishedTriangles

tactic: rintro ⟨T', e, ⟨X, Y, f, ⟨e'⟩⟩⟩
state_before: case mp
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasDerivedCategory C
T : Triangle (DerivedCategory C)
⊢ T ∈ distinguishedTriangles → ∃ X Y f, Nonempty (T ≅ Q.mapTriangle.obj (CochainComplex.mappingCone.triangle f))
state_after: case mp.intro.intro.intro.intro.intro.intro
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasDerivedCategory C
T : Triangle (DerivedCategory C)
T' : Triangle (HomotopyCategory C (ComplexShape.up ℤ))
e : T ≅ Qh.mapTriangle.obj T'
X Y : CochainComplex C ℤ
f : X ⟶ Y
e' : T' ≅ CochainComplex.mappingCone.triangleh f
⊢ ∃ X Y f, Nonempty (T ≅ Q.mapTriangle.obj (CochainComplex.mappingCone.triangle f))

tactic: refine ⟨_, _, f, ⟨?_⟩⟩
state_before: case mp.intro.intro.intro.intro.intro.intro
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasDerivedCategory C
T : Triangle (DerivedCategory C)
T' : Triangle (HomotopyCategory C (ComplexShape.up ℤ))
e : T ≅ Qh.mapTriangle.obj T'
X Y : CochainComplex C ℤ
f : X ⟶ Y
e' : T' ≅ CochainComplex.mappingCone.triangleh f
⊢ ∃ X Y f, Nonempty (T ≅ Q.mapTriangle.obj (CochainComplex.mappingCone.triangle f))
state_after: case mp.intro.intro.intro.intro.intro.intro
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasDerivedCategory C
T : Triangle (DerivedCategory C)
T' : Triangle (HomotopyCategory C (ComplexShape.up ℤ))
e : T ≅ Qh.mapTriangle.obj T'
X Y : CochainComplex C ℤ
f : X ⟶ Y
e' : T' ≅ CochainComplex.mappingCone.triangleh f
⊢ T ≅ Q.mapTriangle.obj (CochainComplex.mappingCone.triangle f)

tactic: exact e ≪≫ Qh.mapTriangle.mapIso e' ≪≫
  (Functor.mapTriangleCompIso (HomotopyCategory.quotient C _) Qh).symm.app _ ≪≫
  (Functor.mapTriangleIso (quotientCompQhIso C)).app _
state_before: case mp.intro.intro.intro.intro.intro.intro
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasDerivedCategory C
T : Triangle (DerivedCategory C)
T' : Triangle (HomotopyCategory C (ComplexShape.up ℤ))
e : T ≅ Qh.mapTriangle.obj T'
X Y : CochainComplex C ℤ
f : X ⟶ Y
e' : T' ≅ CochainComplex.mappingCone.triangleh f
⊢ T ≅ Q.mapTriangle.obj (CochainComplex.mappingCone.triangle f)
state_after: no goals

tactic: rintro ⟨X, Y, f, ⟨e⟩⟩
state_before: case mpr
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasDerivedCategory C
T : Triangle (DerivedCategory C)
⊢ (∃ X Y f, Nonempty (T ≅ Q.mapTriangle.obj (CochainComplex.mappingCone.triangle f))) → T ∈ distinguishedTriangles
state_after: case mpr.intro.intro.intro.intro
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasDerivedCategory C
T : Triangle (DerivedCategory C)
X Y : CochainComplex C ℤ
f : X ⟶ Y
e : T ≅ Q.mapTriangle.obj (CochainComplex.mappingCone.triangle f)
⊢ T ∈ distinguishedTriangles

tactic: refine isomorphic_distinguished _ (Qh.map_distinguished _ ?_) _
  (e ≪≫ (Functor.mapTriangleIso (quotientCompQhIso C)).symm.app _ ≪≫
  (Functor.mapTriangleCompIso (HomotopyCategory.quotient C _) Qh).app _)
state_before: case mpr.intro.intro.intro.intro
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasDerivedCategory C
T : Triangle (DerivedCategory C)
X Y : CochainComplex C ℤ
f : X ⟶ Y
e : T ≅ Q.mapTriangle.obj (CochainComplex.mappingCone.triangle f)
⊢ T ∈ distinguishedTriangles
state_after: case mpr.intro.intro.intro.intro
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasDerivedCategory C
T : Triangle (DerivedCategory C)
X Y : CochainComplex C ℤ
f : X ⟶ Y
e : T ≅ Q.mapTriangle.obj (CochainComplex.mappingCone.triangle f)
⊢ (HomotopyCategory.quotient C (ComplexShape.up ℤ)).mapTriangle.obj (CochainComplex.mappingCone.triangle f) ∈
    distinguishedTriangles

tactic: exact ⟨_, _, f, ⟨Iso.refl _⟩⟩
state_before: case mpr.intro.intro.intro.intro
C : Type u
inst✝² : Category.{v, u} C
inst✝¹ : Abelian C
inst✝ : HasDerivedCategory C
T : Triangle (DerivedCategory C)
X Y : CochainComplex C ℤ
f : X ⟶ Y
e : T ≅ Q.mapTriangle.obj (CochainComplex.mappingCone.triangle f)
⊢ (HomotopyCategory.quotient C (ComplexShape.up ℤ)).mapTriangle.obj (CochainComplex.mappingCone.triangle f) ∈
    distinguishedTriangles
state_after: no goals