Theorem: CategoryTheory.Triangulated.Localization.distinguished_cocone_triangle
File: Mathlib/CategoryTheory/Localization/Triangulated.lean

Proof steps:
state_before: C : Type u_1
D : Type u_2
inst✝¹⁵ : Category.{u_4, u_1} C
inst✝¹⁴ : Category.{u_3, u_2} D
L : C ⥤ D
inst✝¹³ : HasShift C ℤ
inst✝¹² : Preadditive C
inst✝¹¹ : HasZeroObject C
inst✝¹⁰ : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝⁹ : Pretriangulated C
inst✝⁸ : HasShift D ℤ
inst✝⁷ : L.CommShift ℤ
W : MorphismProperty C
inst✝⁶ : L.IsLocalization W
inst✝⁵ : W.IsCompatibleWithTriangulation
inst✝⁴ : W.HasLeftCalculusOfFractions
inst✝³ : Preadditive D
inst✝² : HasZeroObject D
inst✝¹ : ∀ (n : ℤ), (shiftFunctor D n).Additive
inst✝ : L.Additive
X Y : D
f : X ⟶ Y
⊢ ∃ Z g h, Triangle.mk f g h ∈ L.essImageDistTriang
state_after: C : Type u_1
D : Type u_2
inst✝¹⁵ : Category.{u_4, u_1} C
inst✝¹⁴ : Category.{u_3, u_2} D
L : C ⥤ D
inst✝¹³ : HasShift C ℤ
inst✝¹² : Preadditive C
inst✝¹¹ : HasZeroObject C
inst✝¹⁰ : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝⁹ : Pretriangulated C
inst✝⁸ : HasShift D ℤ
inst✝⁷ : L.CommShift ℤ
W : MorphismProperty C
inst✝⁶ : L.IsLocalization W
inst✝⁵ : W.IsCompatibleWithTriangulation
inst✝⁴ : W.HasLeftCalculusOfFractions
inst✝³ : Preadditive D
inst✝² : HasZeroObject D
inst✝¹ : ∀ (n : ℤ), (shiftFunctor D n).Additive
inst✝ : L.Additive
X Y : D
f : X ⟶ Y
this : L.mapArrow.EssSurj
⊢ ∃ Z g h, Triangle.mk f g h ∈ L.essImageDistTriang
tactic: have := essSurj_mapArrow L W
state_before: C : Type u_1
D : Type u_2
inst✝¹⁵ : Category.{u_4, u_1} C
inst✝¹⁴ : Category.{u_3, u_2} D
L : C ⥤ D
inst✝¹³ : HasShift C ℤ
inst✝¹² : Preadditive C
inst✝¹¹ : HasZeroObject C
inst✝¹⁰ : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝⁹ : Pretriangulated C
inst✝⁸ : HasShift D ℤ
inst✝⁷ : L.CommShift ℤ
W : MorphismProperty C
inst✝⁶ : L.IsLocalization W
inst✝⁵ : W.IsCompatibleWithTriangulation
inst✝⁴ : W.HasLeftCalculusOfFractions
inst✝³ : Preadditive D
inst✝² : HasZeroObject D
inst✝¹ : ∀ (n : ℤ), (shiftFunctor D n).Additive
inst✝ : L.Additive
X Y : D
f : X ⟶ Y
this : L.mapArrow.EssSurj
⊢ ∃ Z g h, Triangle.mk f g h ∈ L.essImageDistTriang
state_after: case intro.intro
C : Type u_1
D : Type u_2
inst✝¹⁵ : Category.{u_4, u_1} C
inst✝¹⁴ : Category.{u_3, u_2} D
L : C ⥤ D
inst✝¹³ : HasShift C ℤ
inst✝¹² : Preadditive C
inst✝¹¹ : HasZeroObject C
inst✝¹⁰ : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝⁹ : Pretriangulated C
inst✝⁸ : HasShift D ℤ
inst✝⁷ : L.CommShift ℤ
W : MorphismProperty C
inst✝⁶ : L.IsLocalization W
inst✝⁵ : W.IsCompatibleWithTriangulation
inst✝⁴ : W.HasLeftCalculusOfFractions
inst✝³ : Preadditive D
inst✝² : HasZeroObject D
inst✝¹ : ∀ (n : ℤ), (shiftFunctor D n).Additive
inst✝ : L.Additive
X Y : D
f : X ⟶ Y
this : L.mapArrow.EssSurj
φ : Arrow C
e : L.mapArrow.obj φ ≅ Arrow.mk f
⊢ ∃ Z g h, Triangle.mk f g h ∈ L.essImageDistTriang
tactic: obtain ⟨φ, ⟨e⟩⟩ : ∃ (φ : Arrow C), Nonempty (L.mapArrow.obj φ ≅ Arrow.mk f) :=
    ⟨_, ⟨Functor.objObjPreimageIso _ _⟩⟩
state_before: case intro.intro
C : Type u_1
D : Type u_2
inst✝¹⁵ : Category.{u_4, u_1} C
inst✝¹⁴ : Category.{u_3, u_2} D
L : C ⥤ D
inst✝¹³ : HasShift C ℤ
inst✝¹² : Preadditive C
inst✝¹¹ : HasZeroObject C
inst✝¹⁰ : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝⁹ : Pretriangulated C
inst✝⁸ : HasShift D ℤ
inst✝⁷ : L.CommShift ℤ
W : MorphismProperty C
inst✝⁶ : L.IsLocalization W
inst✝⁵ : W.IsCompatibleWithTriangulation
inst✝⁴ : W.HasLeftCalculusOfFractions
inst✝³ : Preadditive D
inst✝² : HasZeroObject D
inst✝¹ : ∀ (n : ℤ), (shiftFunctor D n).Additive
inst✝ : L.Additive
X Y : D
f : X ⟶ Y
this : L.mapArrow.EssSurj
φ : Arrow C
e : L.mapArrow.obj φ ≅ Arrow.mk f
⊢ ∃ Z g h, Triangle.mk f g h ∈ L.essImageDistTriang
state_after: case intro.intro.intro.intro.intro
C : Type u_1
D : Type u_2
inst✝¹⁵ : Category.{u_4, u_1} C
inst✝¹⁴ : Category.{u_3, u_2} D
L : C ⥤ D
inst✝¹³ : HasShift C ℤ
inst✝¹² : Preadditive C
inst✝¹¹ : HasZeroObject C
inst✝¹⁰ : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝⁹ : Pretriangulated C
inst✝⁸ : HasShift D ℤ
inst✝⁷ : L.CommShift ℤ
W : MorphismProperty C
inst✝⁶ : L.IsLocalization W
inst✝⁵ : W.IsCompatibleWithTriangulation
inst✝⁴ : W.HasLeftCalculusOfFractions
inst✝³ : Preadditive D
inst✝² : HasZeroObject D
inst✝¹ : ∀ (n : ℤ), (shiftFunctor D n).Additive
inst✝ : L.Additive
X Y : D
f : X ⟶ Y
this : L.mapArrow.EssSurj
φ : Arrow C
e : L.mapArrow.obj φ ≅ Arrow.mk f
Z : C
g : (𝟭 C).obj φ.right ⟶ Z
h : Z ⟶ (shiftFunctor C 1).obj ((𝟭 C).obj φ.left)
H : Triangle.mk φ.hom g h ∈ distinguishedTriangles
⊢ ∃ Z g h, Triangle.mk f g h ∈ L.essImageDistTriang
tactic: obtain ⟨Z, g, h, H⟩ := Pretriangulated.distinguished_cocone_triangle φ.hom
state_before: case intro.intro.intro.intro.intro
C : Type u_1
D : Type u_2
inst✝¹⁵ : Category.{u_4, u_1} C
inst✝¹⁴ : Category.{u_3, u_2} D
L : C ⥤ D
inst✝¹³ : HasShift C ℤ
inst✝¹² : Preadditive C
inst✝¹¹ : HasZeroObject C
inst✝¹⁰ : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝⁹ : Pretriangulated C
inst✝⁸ : HasShift D ℤ
inst✝⁷ : L.CommShift ℤ
W : MorphismProperty C
inst✝⁶ : L.IsLocalization W
inst✝⁵ : W.IsCompatibleWithTriangulation
inst✝⁴ : W.HasLeftCalculusOfFractions
inst✝³ : Preadditive D
inst✝² : HasZeroObject D
inst✝¹ : ∀ (n : ℤ), (shiftFunctor D n).Additive
inst✝ : L.Additive
X Y : D
f : X ⟶ Y
this : L.mapArrow.EssSurj
φ : Arrow C
e : L.mapArrow.obj φ ≅ Arrow.mk f
Z : C
g : (𝟭 C).obj φ.right ⟶ Z
h : Z ⟶ (shiftFunctor C 1).obj ((𝟭 C).obj φ.left)
H : Triangle.mk φ.hom g h ∈ distinguishedTriangles
⊢ ∃ Z g h, Triangle.mk f g h ∈ L.essImageDistTriang
state_after: case intro.intro.intro.intro.intro
C : Type u_1
D : Type u_2
inst✝¹⁵ : Category.{u_4, u_1} C
inst✝¹⁴ : Category.{u_3, u_2} D
L : C ⥤ D
inst✝¹³ : HasShift C ℤ
inst✝¹² : Preadditive C
inst✝¹¹ : HasZeroObject C
inst✝¹⁰ : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝⁹ : Pretriangulated C
inst✝⁸ : HasShift D ℤ
inst✝⁷ : L.CommShift ℤ
W : MorphismProperty C
inst✝⁶ : L.IsLocalization W
inst✝⁵ : W.IsCompatibleWithTriangulation
inst✝⁴ : W.HasLeftCalculusOfFractions
inst✝³ : Preadditive D
inst✝² : HasZeroObject D
inst✝¹ : ∀ (n : ℤ), (shiftFunctor D n).Additive
inst✝ : L.Additive
X Y : D
f : X ⟶ Y
this : L.mapArrow.EssSurj
φ : Arrow C
e : L.mapArrow.obj φ ≅ Arrow.mk f
Z : C
g : (𝟭 C).obj φ.right ⟶ Z
h : Z ⟶ (shiftFunctor C 1).obj ((𝟭 C).obj φ.left)
H : Triangle.mk φ.hom g h ∈ distinguishedTriangles
⊢ Triangle.mk f (e.inv.right ≫ L.map g)
      (L.map h ≫ (L.commShiftIso 1).hom.app ((𝟭 C).obj φ.left) ≫ (shiftFunctor D 1).map e.hom.left) ≅
    L.mapTriangle.obj (Triangle.mk φ.hom g h)
tactic: refine ⟨L.obj Z, e.inv.right ≫ L.map g,
    L.map h ≫ (L.commShiftIso (1 : ℤ)).hom.app _ ≫ e.hom.left⟦(1 : ℤ)⟧', _, ?_, H⟩
state_before: case intro.intro.intro.intro.intro
C : Type u_1
D : Type u_2
inst✝¹⁵ : Category.{u_4, u_1} C
inst✝¹⁴ : Category.{u_3, u_2} D
L : C ⥤ D
inst✝¹³ : HasShift C ℤ
inst✝¹² : Preadditive C
inst✝¹¹ : HasZeroObject C
inst✝¹⁰ : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝⁹ : Pretriangulated C
inst✝⁸ : HasShift D ℤ
inst✝⁷ : L.CommShift ℤ
W : MorphismProperty C
inst✝⁶ : L.IsLocalization W
inst✝⁵ : W.IsCompatibleWithTriangulation
inst✝⁴ : W.HasLeftCalculusOfFractions
inst✝³ : Preadditive D
inst✝² : HasZeroObject D
inst✝¹ : ∀ (n : ℤ), (shiftFunctor D n).Additive
inst✝ : L.Additive
X Y : D
f : X ⟶ Y
this : L.mapArrow.EssSurj
φ : Arrow C
e : L.mapArrow.obj φ ≅ Arrow.mk f
Z : C
g : (𝟭 C).obj φ.right ⟶ Z
h : Z ⟶ (shiftFunctor C 1).obj ((𝟭 C).obj φ.left)
H : Triangle.mk φ.hom g h ∈ distinguishedTriangles
⊢ Triangle.mk f (e.inv.right ≫ L.map g)
      (L.map h ≫ (L.commShiftIso 1).hom.app ((𝟭 C).obj φ.left) ≫ (shiftFunctor D 1).map e.hom.left) ≅
    L.mapTriangle.obj (Triangle.mk φ.hom g h)
state_after: case intro.intro.intro.intro.intro
C : Type u_1
D : Type u_2
inst✝¹⁵ : Category.{u_4, u_1} C
inst✝¹⁴ : Category.{u_3, u_2} D
L : C ⥤ D
inst✝¹³ : HasShift C ℤ
inst✝¹² : Preadditive C
inst✝¹¹ : HasZeroObject C
inst✝¹⁰ : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝⁹ : Pretriangulated C
inst✝⁸ : HasShift D ℤ
inst✝⁷ : L.CommShift ℤ
W : MorphismProperty C
inst✝⁶ : L.IsLocalization W
inst✝⁵ : W.IsCompatibleWithTriangulation
inst✝⁴ : W.HasLeftCalculusOfFractions
inst✝³ : Preadditive D
inst✝² : HasZeroObject D
inst✝¹ : ∀ (n : ℤ), (shiftFunctor D n).Additive
inst✝ : L.Additive
X Y : D
f : X ⟶ Y
this : L.mapArrow.EssSurj
φ : Arrow C
e : L.mapArrow.obj φ ≅ Arrow.mk f
Z : C
g : (𝟭 C).obj φ.right ⟶ Z
h : Z ⟶ (shiftFunctor C 1).obj ((𝟭 C).obj φ.left)
H : Triangle.mk φ.hom g h ∈ distinguishedTriangles
⊢ (Triangle.mk f (e.inv.right ≫ L.map g)
          (L.map h ≫ (L.commShiftIso 1).hom.app ((𝟭 C).obj φ.left) ≫ (shiftFunctor D 1).map e.hom.left)).mor₃ ≫
      (shiftFunctor D 1).map (Arrow.leftFunc.mapIso e.symm).hom =
    (Iso.refl
          (Triangle.mk f (e.inv.right ≫ L.map g)
              (L.map h ≫ (L.commShiftIso 1).hom.app ((𝟭 C).obj φ.left) ≫ (shiftFunctor D 1).map e.hom.left)).obj₃).hom ≫
      (L.mapTriangle.obj (Triangle.mk φ.hom g h)).mor₃
tactic: refine Triangle.isoMk _ _ (Arrow.leftFunc.mapIso e.symm) (Arrow.rightFunc.mapIso e.symm)
    (Iso.refl _) e.inv.w.symm (by simp) ?_
state_before: case intro.intro.intro.intro.intro
C : Type u_1
D : Type u_2
inst✝¹⁵ : Category.{u_4, u_1} C
inst✝¹⁴ : Category.{u_3, u_2} D
L : C ⥤ D
inst✝¹³ : HasShift C ℤ
inst✝¹² : Preadditive C
inst✝¹¹ : HasZeroObject C
inst✝¹⁰ : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝⁹ : Pretriangulated C
inst✝⁸ : HasShift D ℤ
inst✝⁷ : L.CommShift ℤ
W : MorphismProperty C
inst✝⁶ : L.IsLocalization W
inst✝⁵ : W.IsCompatibleWithTriangulation
inst✝⁴ : W.HasLeftCalculusOfFractions
inst✝³ : Preadditive D
inst✝² : HasZeroObject D
inst✝¹ : ∀ (n : ℤ), (shiftFunctor D n).Additive
inst✝ : L.Additive
X Y : D
f : X ⟶ Y
this : L.mapArrow.EssSurj
φ : Arrow C
e : L.mapArrow.obj φ ≅ Arrow.mk f
Z : C
g : (𝟭 C).obj φ.right ⟶ Z
h : Z ⟶ (shiftFunctor C 1).obj ((𝟭 C).obj φ.left)
H : Triangle.mk φ.hom g h ∈ distinguishedTriangles
⊢ (Triangle.mk f (e.inv.right ≫ L.map g)
          (L.map h ≫ (L.commShiftIso 1).hom.app ((𝟭 C).obj φ.left) ≫ (shiftFunctor D 1).map e.hom.left)).mor₃ ≫
      (shiftFunctor D 1).map (Arrow.leftFunc.mapIso e.symm).hom =
    (Iso.refl
          (Triangle.mk f (e.inv.right ≫ L.map g)
              (L.map h ≫ (L.commShiftIso 1).hom.app ((𝟭 C).obj φ.left) ≫ (shiftFunctor D 1).map e.hom.left)).obj₃).hom ≫
      (L.mapTriangle.obj (Triangle.mk φ.hom g h)).mor₃
state_after: case intro.intro.intro.intro.intro
C : Type u_1
D : Type u_2
inst✝¹⁵ : Category.{u_4, u_1} C
inst✝¹⁴ : Category.{u_3, u_2} D
L : C ⥤ D
inst✝¹³ : HasShift C ℤ
inst✝¹² : Preadditive C
inst✝¹¹ : HasZeroObject C
inst✝¹⁰ : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝⁹ : Pretriangulated C
inst✝⁸ : HasShift D ℤ
inst✝⁷ : L.CommShift ℤ
W : MorphismProperty C
inst✝⁶ : L.IsLocalization W
inst✝⁵ : W.IsCompatibleWithTriangulation
inst✝⁴ : W.HasLeftCalculusOfFractions
inst✝³ : Preadditive D
inst✝² : HasZeroObject D
inst✝¹ : ∀ (n : ℤ), (shiftFunctor D n).Additive
inst✝ : L.Additive
X Y : D
f : X ⟶ Y
this : L.mapArrow.EssSurj
φ : Arrow C
e : L.mapArrow.obj φ ≅ Arrow.mk f
Z : C
g : (𝟭 C).obj φ.right ⟶ Z
h : Z ⟶ (shiftFunctor C 1).obj ((𝟭 C).obj φ.left)
H : Triangle.mk φ.hom g h ∈ distinguishedTriangles
⊢ (L.map h ≫ (L.commShiftIso 1).hom.app φ.left ≫ (shiftFunctor D 1).map e.hom.left) ≫
      (shiftFunctor D 1).map e.inv.left =
    𝟙 (L.obj Z) ≫ L.map h ≫ (L.commShiftIso 1).hom.app φ.left
tactic: dsimp
state_before: case intro.intro.intro.intro.intro
C : Type u_1
D : Type u_2
inst✝¹⁵ : Category.{u_4, u_1} C
inst✝¹⁴ : Category.{u_3, u_2} D
L : C ⥤ D
inst✝¹³ : HasShift C ℤ
inst✝¹² : Preadditive C
inst✝¹¹ : HasZeroObject C
inst✝¹⁰ : ∀ (n : ℤ), (shiftFunctor C n).Additive
inst✝⁹ : Pretriangulated C
inst✝⁸ : HasShift D ℤ
inst✝⁷ : L.CommShift ℤ
W : MorphismProperty C
inst✝⁶ : L.IsLocalization W
inst✝⁵ : W.IsCompatibleWithTriangulation
inst✝⁴ : W.HasLeftCalculusOfFractions
inst✝³ : Preadditive D
inst✝² : HasZeroObject D
inst✝¹ : ∀ (n : ℤ), (shiftFunctor D n).Additive
inst✝ : L.Additive
X Y : D
f : X ⟶ Y
this : L.mapArrow.EssSurj
φ : Arrow C
e : L.mapArrow.obj φ ≅ Arrow.mk f
Z : C
g : (𝟭 C).obj φ.right ⟶ Z
h : Z ⟶ (shiftFunctor C 1).obj ((𝟭 C).obj φ.left)
H : Triangle.mk φ.hom g h ∈ distinguishedTriangles
⊢ (L.map h ≫ (L.commShiftIso 1).hom.app φ.left ≫ (shiftFunctor D 1).map e.hom.left) ≫
      (shiftFunctor D 1).map e.inv.left =
    𝟙 (L.obj Z) ≫ L.map h ≫ (L.commShiftIso 1).hom.app φ.left
state_after: no goals
tactic: simp only [assoc, id_comp, ← Functor.map_comp, ← Arrow.comp_left, e.hom_inv_id, Arrow.id_left,
    Functor.mapArrow_obj_left, Functor.map_id, comp_id]