awhecmu/canonical-drafter-extract-mathlib huggingface dataset:
-- Lean 4 proof step from Mathlib.Algebra.Homology.HomotopyCategory.Pretriangulated (hypothesis)
Goal:
C : Type u_1
inst : Category.{v_1, u_1} C
inst_1 : Preadditive.{v_1, u_1} C
inst_2 : HasBinaryBiproducts.{v_1, u_1} C
inst_3 : HasZeroObject.{v_1, u_1} C
X : HomologicalComplex.{v_1, u_1, 0} C (ComplexShape.up ℤ)
⊢ contractibleTriangle (CategoryTheory.Quotient.mk (r := homotopic C (ComplexShape.up ℤ)) X) ≅
    CochainComplex.mappingCone.triangleh (𝟙 X)
have h : IsZero (Functor.obj (quotient C (ComplexShape.up ℤ)) (CochainComplex.mappingCone (𝟙 X)))
Tactic: have h := (isZero_quotient_obj_iff _).2 ⟨CochainComplex.mappingCone.homotopyToZeroOfId X⟩
-- Lean 4 proof step from Mathlib.Algebra.Homology.HomotopyCategory.Pretriangulated (goal)
Goal:
C : Type u_1
inst : Category.{v_1, u_1} C
inst_1 : Preadditive.{v_1, u_1} C
inst_2 : HasBinaryBiproducts.{v_1, u_1} C
inst_3 : HasZeroObject.{v_1, u_1} C
X : HomologicalComplex.{v_1, u_1, 0} C (ComplexShape.up ℤ)
h : IsZero (Functor.obj (quotient C (ComplexShape.up ℤ)) (CochainComplex.mappingCone (𝟙 X)))
⊢ Eq (α :=
    Triangle.obj₃ (contractibleTriangle (CategoryTheory.Quotient.mk (r := homotopic C (ComplexShape.up ℤ)) X)) ⟶
      Functor.obj (shiftFunctor (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)) (A := ℤ) 1)
        (CochainComplex.mappingCone.triangleh (𝟙 X)).obj₁)
    (Triangle.mor₃ (contractibleTriangle (CategoryTheory.Quotient.mk (r := homotopic C (ComplexShape.up ℤ)) X)) ≫
      CategoryTheory.Functor.map (shiftFunctor (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)) (A := ℤ) 1)
        (Iso.hom
          (Iso.refl
            (Triangle.obj₁
              (contractibleTriangle (CategoryTheory.Quotient.mk (r := homotopic C (ComplexShape.up ℤ)) X))))))
    (Iso.hom (Iso.symm h.isoZero) ≫ (CochainComplex.mappingCone.triangleh (𝟙 X)).mor₃)
have dsimp : Eq (α :=
  0 ⟶
    Functor.obj (shiftFunctor (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)) (A := ℤ) 1)
      (Functor.obj (quotient C (ComplexShape.up ℤ)) X))
  (0 ≫
    CategoryTheory.Functor.map (shiftFunctor (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)) (A := ℤ) 1)
      (𝟙 (CategoryTheory.Quotient.mk (r := homotopic C (ComplexShape.up ℤ)) X)))
  (Iso.inv h.isoZero ≫
    CategoryTheory.Functor.map (quotient C (ComplexShape.up ℤ)) (CochainComplex.mappingCone.triangle (𝟙 X)).mor₃ ≫
      NatTrans.app (Iso.hom (Functor.commShiftIso (quotient C (ComplexShape.up ℤ)) 1)) X)
Tactic: dsimp
-- Lean 4 proof step from Mathlib.Algebra.Homology.HomotopyCategory.Pretriangulated (goal)
Goal:
C : Type u_1
inst : Category.{v_1, u_1} C
inst_1 : Preadditive.{v_1, u_1} C
inst_2 : HasBinaryBiproducts.{v_1, u_1} C
X Y : HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)
f : X ⟶ Y
⊢ ∃ (Z : HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)) (g : Y ⟶ Z) (h :
    Z ⟶ Functor.obj (shiftFunctor (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)) (A := ℤ) 1) X),
    Membership.mem (γ := Set (Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ))))
      (distinguishedTriangles C) (Triangle.mk f g h)
have obtain : ∀ (f : X.as (r := homotopic C (ComplexShape.up ℤ)) ⟶ Y.as (r := homotopic C (ComplexShape.up ℤ))),
  ∃ (Z : HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)) (g : Y ⟶ Z) (h :
    Z ⟶ Functor.obj (shiftFunctor (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)) (A := ℤ) 1) X),
    Membership.mem (γ := Set (Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ))))
      (distinguishedTriangles C) (Triangle.mk (CategoryTheory.Functor.map (quotient C (ComplexShape.up ℤ)) f) g h)
Tactic: obtain ⟨f, rfl⟩ := (quotient _ _).map_surjective f
Cleared hypotheses: f
-- Lean 4 proof step from Mathlib.Algebra.Homology.HomotopyCategory.Pretriangulated (goal)
Goal:
C : Type u_1
inst : Category.{v_1, u_1} C
inst_1 : Preadditive.{v_1, u_1} C
inst_2 : HasBinaryBiproducts.{v_1, u_1} C
T : Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ))
hT :
  Membership.mem (γ := Set (Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)))) (distinguishedTriangles C)
    T
⊢ Membership.mem (γ := Set (Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)))) (distinguishedTriangles C)
    T.rotate
have obtain : ∀ (K L : CochainComplex.{v_1, u_1, 0} C ℤ) (φ : K ⟶ L) (e : T ≅ CochainComplex.mappingCone.triangleh φ),
  Membership.mem (γ := Set (Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)))) (distinguishedTriangles C)
    T.rotate
Tactic: obtain ⟨K, L, φ, ⟨e⟩⟩ := hT
Cleared hypotheses: hT
-- Lean 4 proof step from Mathlib.Algebra.Homology.HomotopyCategory.Pretriangulated (goal)
Goal:
C : Type u_1
inst : Category.{v_1, u_1} C
inst_1 : Preadditive.{v_1, u_1} C
inst_2 : HasBinaryBiproducts.{v_1, u_1} C
T : Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ))
hT :
  Membership.mem (γ := Set (Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)))) (distinguishedTriangles C)
    T
n : ℤ
⊢ Membership.mem (γ := Set (Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)))) (distinguishedTriangles C)
    (Functor.obj (Triangle.shiftFunctor (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)) n) T)
have obtain : ∀ (K L : CochainComplex.{v_1, u_1, 0} C ℤ) (φ : K ⟶ L) (e : T ≅ CochainComplex.mappingCone.triangleh φ),
  Membership.mem (γ := Set (Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)))) (distinguishedTriangles C)
    (Functor.obj (Triangle.shiftFunctor (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)) n) T)
Tactic: obtain ⟨K, L, φ, ⟨e⟩⟩ := hT
Cleared hypotheses: hT
-- Lean 4 proof step from Mathlib.Algebra.Homology.HomotopyCategory.Pretriangulated (goal)
Goal:
C : Type u_1
inst : Category.{v_1, u_1} C
inst_1 : Preadditive.{v_1, u_1} C
inst_2 : HasBinaryBiproducts.{v_1, u_1} C
T : Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ))
⊢ Membership.mem (γ := Set (Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)))) (distinguishedTriangles C)
      T ↔
    Membership.mem (γ := Set (Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ))))
      (distinguishedTriangles C) T.rotate
have mp : Membership.mem (γ := Set (Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)))) (distinguishedTriangles C)
    T →
  Membership.mem (γ := Set (Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)))) (distinguishedTriangles C)
    T.rotate
Tactic: constructor
-- Lean 4 proof step from Mathlib.Algebra.Homology.HomotopyCategory.Pretriangulated (goal)
Goal:
C : Type u_1
inst : Category.{v_1, u_1} C
inst_1 : Preadditive.{v_1, u_1} C
inst_2 : HasBinaryBiproducts.{v_1, u_1} C
T : Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ))
mp :
  Membership.mem (γ := Set (Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)))) (distinguishedTriangles C)
      T →
    Membership.mem (γ := Set (Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ))))
      (distinguishedTriangles C) T.rotate
⊢ Membership.mem (γ := Set (Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)))) (distinguishedTriangles C)
      T ↔
    Membership.mem (γ := Set (Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ))))
      (distinguishedTriangles C) T.rotate
have mpr : Membership.mem (γ := Set (Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)))) (distinguishedTriangles C)
    T.rotate →
  Membership.mem (γ := Set (Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)))) (distinguishedTriangles C)
    T
Tactic: constructor
-- Lean 4 proof step from Mathlib.Algebra.Homology.HomotopyCategory.Pretriangulated (goal)
Goal:
C : Type u_1
inst : Category.{v_1, u_1} C
inst_1 : Preadditive.{v_1, u_1} C
inst_2 : HasBinaryBiproducts.{v_1, u_1} C
T₁ T₂ : Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ))
hT₁ :
  Membership.mem (γ := Set (Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)))) (distinguishedTriangles C)
    T₁
hT₂ :
  Membership.mem (γ := Set (Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)))) (distinguishedTriangles C)
    T₂
a : T₁.obj₁ ⟶ T₂.obj₁
b : T₁.obj₂ ⟶ T₂.obj₂
fac : T₁.mor₁ ≫ b = a ≫ T₂.mor₁
⊢ ∃ (c : T₁.obj₃ ⟶ T₂.obj₃),
    T₁.mor₂ ≫ c = b ≫ T₂.mor₂ ∧
      T₁.mor₃ ≫
          CategoryTheory.Functor.map (shiftFunctor (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)) (A := ℤ) 1)
            a =
        c ≫ T₂.mor₃
have obtain : ∀ (K₁ L₁ : CochainComplex.{v_1, u_1, 0} C ℤ) (φ₁ : K₁ ⟶ L₁) (e₁ : T₁ ≅ triangleh φ₁),
  ∃ (c : T₁.obj₃ ⟶ T₂.obj₃),
    T₁.mor₂ ≫ c = b ≫ T₂.mor₂ ∧
      T₁.mor₃ ≫
          CategoryTheory.Functor.map (shiftFunctor (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)) (A := ℤ) 1)
            a =
        c ≫ T₂.mor₃
Tactic: obtain ⟨K₁, L₁, φ₁, ⟨e₁⟩⟩ := hT₁
Cleared hypotheses: hT₁
-- Lean 4 proof step from Mathlib.Algebra.Homology.HomotopyCategory.Pretriangulated (goal)
Goal:
C : Type u_1
inst : Category.{v_1, u_1} C
inst_1 : Preadditive.{v_1, u_1} C
inst_2 : HasBinaryBiproducts.{v_1, u_1} C
T₁ T₂ : Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ))
hT₂ :
  Membership.mem (γ := Set (Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)))) (distinguishedTriangles C)
    T₂
a : T₁.obj₁ ⟶ T₂.obj₁
b : T₁.obj₂ ⟶ T₂.obj₂
fac : T₁.mor₁ ≫ b = a ≫ T₂.mor₁
K₁ L₁ : CochainComplex.{v_1, u_1, 0} C ℤ
φ₁ : K₁ ⟶ L₁
e₁ : T₁ ≅ triangleh φ₁
⊢ ∃ (c : T₁.obj₃ ⟶ T₂.obj₃),
    T₁.mor₂ ≫ c = b ≫ T₂.mor₂ ∧
      T₁.mor₃ ≫
          CategoryTheory.Functor.map (shiftFunctor (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)) (A := ℤ) 1)
            a =
        c ≫ T₂.mor₃
have obtain : ∀ (K₂ L₂ : CochainComplex.{v_1, u_1, 0} C ℤ) (φ₂ : K₂ ⟶ L₂) (e₂ : T₂ ≅ triangleh φ₂),
  ∃ (c : T₁.obj₃ ⟶ T₂.obj₃),
    T₁.mor₂ ≫ c = b ≫ T₂.mor₂ ∧
      T₁.mor₃ ≫
          CategoryTheory.Functor.map (shiftFunctor (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)) (A := ℤ) 1)
            a =
        c ≫ T₂.mor₃
Tactic: obtain ⟨K₂, L₂, φ₂, ⟨e₂⟩⟩ := hT₂
Cleared hypotheses: hT₂
-- Lean 4 proof step from Mathlib.Algebra.Homology.HomotopyCategory.Pretriangulated (goal)
Goal:
C : Type u_1
inst : Category.{v_1, u_1} C
inst_1 : Preadditive.{v_1, u_1} C
inst_2 : HasBinaryBiproducts.{v_1, u_1} C
T₁ T₂ : Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ))
a : T₁.obj₁ ⟶ T₂.obj₁
b : T₁.obj₂ ⟶ T₂.obj₂
fac : T₁.mor₁ ≫ b = a ≫ T₂.mor₁
K₁ L₁ : CochainComplex.{v_1, u_1, 0} C ℤ
φ₁ : K₁ ⟶ L₁
e₁ : T₁ ≅ triangleh φ₁
K₂ L₂ : CochainComplex.{v_1, u_1, 0} C ℤ
φ₂ : K₂ ⟶ L₂
e₂ : T₂ ≅ triangleh φ₂
⊢ ∃ (c : T₁.obj₃ ⟶ T₂.obj₃),
    T₁.mor₂ ≫ c = b ≫ T₂.mor₂ ∧
      T₁.mor₃ ≫
          CategoryTheory.Functor.map (shiftFunctor (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)) (A := ℤ) 1)
            a =
        c ≫ T₂.mor₃
have obtain : ∀ (a' : Functor.obj (quotient C (ComplexShape.up ℤ)) K₁ ⟶ Functor.obj (quotient C (ComplexShape.up ℤ)) K₂)
  (ha' : a' = e₁.inv.hom₁ ≫ a ≫ e₂.hom.hom₁),
  ∃ (c : T₁.obj₃ ⟶ T₂.obj₃),
    T₁.mor₂ ≫ c = b ≫ T₂.mor₂ ∧
      T₁.mor₃ ≫
          CategoryTheory.Functor.map (shiftFunctor (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)) (A := ℤ) 1)
            a =
        c ≫ T₂.mor₃
Tactic: obtain ⟨a', ha'⟩ : ∃ (a' : (quotient _ _).obj K₁ ⟶ (quotient _ _).obj K₂),
    a' = e₁.inv.hom₁ ≫ a ≫ e₂.hom.hom₁ := ⟨_, rfl⟩
-- Lean 4 proof step from Mathlib.Algebra.Homology.HomotopyCategory.Pretriangulated (goal)
Goal:
C : Type u_1
inst : Category.{v_1, u_1} C
inst_1 : Preadditive.{v_1, u_1} C
inst_2 : HasBinaryBiproducts.{v_1, u_1} C
T₁ T₂ : Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ))
a : T₁.obj₁ ⟶ T₂.obj₁
b : T₁.obj₂ ⟶ T₂.obj₂
fac : T₁.mor₁ ≫ b = a ≫ T₂.mor₁
K₁ L₁ : CochainComplex.{v_1, u_1, 0} C ℤ
φ₁ : K₁ ⟶ L₁
e₁ : T₁ ≅ triangleh φ₁
K₂ L₂ : CochainComplex.{v_1, u_1, 0} C ℤ
φ₂ : K₂ ⟶ L₂
e₂ : T₂ ≅ triangleh φ₂
a' : Functor.obj (quotient C (ComplexShape.up ℤ)) K₁ ⟶ Functor.obj (quotient C (ComplexShape.up ℤ)) K₂
ha' : a' = e₁.inv.hom₁ ≫ a ≫ e₂.hom.hom₁
⊢ ∃ (c : T₁.obj₃ ⟶ T₂.obj₃),
    T₁.mor₂ ≫ c = b ≫ T₂.mor₂ ∧
      T₁.mor₃ ≫
          CategoryTheory.Functor.map (shiftFunctor (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)) (A := ℤ) 1)
            a =
        c ≫ T₂.mor₃
have obtain : ∀ (b' : Functor.obj (quotient C (ComplexShape.up ℤ)) L₁ ⟶ Functor.obj (quotient C (ComplexShape.up ℤ)) L₂)
  (hb' : b' = e₁.inv.hom₂ ≫ b ≫ e₂.hom.hom₂),
  ∃ (c : T₁.obj₃ ⟶ T₂.obj₃),
    T₁.mor₂ ≫ c = b ≫ T₂.mor₂ ∧
      T₁.mor₃ ≫
          CategoryTheory.Functor.map (shiftFunctor (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)) (A := ℤ) 1)
            a =
        c ≫ T₂.mor₃
Tactic: obtain ⟨b', hb'⟩ : ∃ (b' : (quotient _ _).obj L₁ ⟶ (quotient _ _).obj L₂),
    b' = e₁.inv.hom₂ ≫ b ≫ e₂.hom.hom₂ := ⟨_, rfl⟩
-- Lean 4 proof step from Mathlib.Algebra.Homology.HomotopyCategory.Pretriangulated (goal)
Goal:
C : Type u_1
inst : Category.{v_1, u_1} C
inst_1 : Preadditive.{v_1, u_1} C
inst_2 : HasBinaryBiproducts.{v_1, u_1} C
T₁ T₂ : Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ))
a : T₁.obj₁ ⟶ T₂.obj₁
b : T₁.obj₂ ⟶ T₂.obj₂
fac : T₁.mor₁ ≫ b = a ≫ T₂.mor₁
K₁ L₁ : CochainComplex.{v_1, u_1, 0} C ℤ
φ₁ : K₁ ⟶ L₁
e₁ : T₁ ≅ triangleh φ₁
K₂ L₂ : CochainComplex.{v_1, u_1, 0} C ℤ
φ₂ : K₂ ⟶ L₂
e₂ : T₂ ≅ triangleh φ₂
a' : Functor.obj (quotient C (ComplexShape.up ℤ)) K₁ ⟶ Functor.obj (quotient C (ComplexShape.up ℤ)) K₂
ha' : a' = e₁.inv.hom₁ ≫ a ≫ e₂.hom.hom₁
b' : Functor.obj (quotient C (ComplexShape.up ℤ)) L₁ ⟶ Functor.obj (quotient C (ComplexShape.up ℤ)) L₂
hb' : b' = e₁.inv.hom₂ ≫ b ≫ e₂.hom.hom₂
⊢ ∃ (c : T₁.obj₃ ⟶ T₂.obj₃),
    T₁.mor₂ ≫ c = b ≫ T₂.mor₂ ∧
      T₁.mor₃ ≫
          CategoryTheory.Functor.map (shiftFunctor (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)) (A := ℤ) 1)
            a =
        c ≫ T₂.mor₃
have obtain : ∀ (a'' : K₁ ⟶ K₂)
  (ha' : CategoryTheory.Functor.map (quotient C (ComplexShape.up ℤ)) a'' = e₁.inv.hom₁ ≫ a ≫ e₂.hom.hom₁),
  ∃ (c : T₁.obj₃ ⟶ T₂.obj₃),
    T₁.mor₂ ≫ c = b ≫ T₂.mor₂ ∧
      T₁.mor₃ ≫
          CategoryTheory.Functor.map (shiftFunctor (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)) (A := ℤ) 1)
            a =
        c ≫ T₂.mor₃
Tactic: obtain ⟨a'', rfl⟩ := (quotient _ _).map_surjective a'
Cleared hypotheses: a', ha'
-- Lean 4 proof step from Mathlib.Algebra.Homology.HomotopyCategory.Pretriangulated (goal)
Goal:
C : Type u_1
inst : Category.{v_1, u_1} C
inst_1 : Preadditive.{v_1, u_1} C
inst_2 : HasBinaryBiproducts.{v_1, u_1} C
T₁ T₂ : Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ))
a : T₁.obj₁ ⟶ T₂.obj₁
b : T₁.obj₂ ⟶ T₂.obj₂
fac : T₁.mor₁ ≫ b = a ≫ T₂.mor₁
K₁ L₁ : CochainComplex.{v_1, u_1, 0} C ℤ
φ₁ : K₁ ⟶ L₁
e₁ : T₁ ≅ triangleh φ₁
K₂ L₂ : CochainComplex.{v_1, u_1, 0} C ℤ
φ₂ : K₂ ⟶ L₂
e₂ : T₂ ≅ triangleh φ₂
b' : Functor.obj (quotient C (ComplexShape.up ℤ)) L₁ ⟶ Functor.obj (quotient C (ComplexShape.up ℤ)) L₂
hb' : b' = e₁.inv.hom₂ ≫ b ≫ e₂.hom.hom₂
a'' : K₁ ⟶ K₂
ha' : CategoryTheory.Functor.map (quotient C (ComplexShape.up ℤ)) a'' = e₁.inv.hom₁ ≫ a ≫ e₂.hom.hom₁
⊢ ∃ (c : T₁.obj₃ ⟶ T₂.obj₃),
    T₁.mor₂ ≫ c = b ≫ T₂.mor₂ ∧
      T₁.mor₃ ≫
          CategoryTheory.Functor.map (shiftFunctor (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)) (A := ℤ) 1)
            a =
        c ≫ T₂.mor₃
have obtain : ∀ (b'' : L₁ ⟶ L₂)
  (hb' : CategoryTheory.Functor.map (quotient C (ComplexShape.up ℤ)) b'' = e₁.inv.hom₂ ≫ b ≫ e₂.hom.hom₂),
  ∃ (c : T₁.obj₃ ⟶ T₂.obj₃),
    T₁.mor₂ ≫ c = b ≫ T₂.mor₂ ∧
      T₁.mor₃ ≫
          CategoryTheory.Functor.map (shiftFunctor (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)) (A := ℤ) 1)
            a =
        c ≫ T₂.mor₃
Tactic: obtain ⟨b'', rfl⟩ := (quotient _ _).map_surjective b'
Cleared hypotheses: b', hb'
-- Lean 4 proof step from Mathlib.Algebra.Homology.HomotopyCategory.Pretriangulated (hypothesis)
Goal:
C : Type u_1
inst : Category.{v_1, u_1} C
inst_1 : Preadditive.{v_1, u_1} C
inst_2 : HasBinaryBiproducts.{v_1, u_1} C
T₁ T₂ : Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ))
a : T₁.obj₁ ⟶ T₂.obj₁
b : T₁.obj₂ ⟶ T₂.obj₂
fac : T₁.mor₁ ≫ b = a ≫ T₂.mor₁
K₁ L₁ : CochainComplex.{v_1, u_1, 0} C ℤ
φ₁ : K₁ ⟶ L₁
e₁ : T₁ ≅ triangleh φ₁
K₂ L₂ : CochainComplex.{v_1, u_1, 0} C ℤ
φ₂ : K₂ ⟶ L₂
e₂ : T₂ ≅ triangleh φ₂
a'' : K₁ ⟶ K₂
ha' : CategoryTheory.Functor.map (quotient C (ComplexShape.up ℤ)) a'' = e₁.inv.hom₁ ≫ a ≫ e₂.hom.hom₁
b'' : L₁ ⟶ L₂
hb' : CategoryTheory.Functor.map (quotient C (ComplexShape.up ℤ)) b'' = e₁.inv.hom₂ ≫ b ≫ e₂.hom.hom₂
⊢ Eq (α := Functor.obj (quotient C (ComplexShape.up ℤ)) K₁ ⟶ Functor.obj (quotient C (ComplexShape.up ℤ)) L₂)
    (CategoryTheory.Functor.map (quotient C (ComplexShape.up ℤ)) (φ₁ ≫ b''))
    (CategoryTheory.Functor.map (quotient C (ComplexShape.up ℤ)) (a'' ≫ φ₂))
have comm₁₁ : (triangleh φ₁).mor₁ ≫ e₁.inv.hom₂ = e₁.inv.hom₁ ≫ T₁.mor₁
Tactic: have comm₁₁ := e₁.inv.comm₁
-- Lean 4 proof step from Mathlib.Algebra.Homology.HomotopyCategory.Pretriangulated (hypothesis)
Goal:
C : Type u_1
inst : Category.{v_1, u_1} C
inst_1 : Preadditive.{v_1, u_1} C
inst_2 : HasBinaryBiproducts.{v_1, u_1} C
T₁ T₂ : Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ))
a : T₁.obj₁ ⟶ T₂.obj₁
b : T₁.obj₂ ⟶ T₂.obj₂
fac : T₁.mor₁ ≫ b = a ≫ T₂.mor₁
K₁ L₁ : CochainComplex.{v_1, u_1, 0} C ℤ
φ₁ : K₁ ⟶ L₁
e₁ : T₁ ≅ triangleh φ₁
K₂ L₂ : CochainComplex.{v_1, u_1, 0} C ℤ
φ₂ : K₂ ⟶ L₂
e₂ : T₂ ≅ triangleh φ₂
a'' : K₁ ⟶ K₂
ha' : CategoryTheory.Functor.map (quotient C (ComplexShape.up ℤ)) a'' = e₁.inv.hom₁ ≫ a ≫ e₂.hom.hom₁
b'' : L₁ ⟶ L₂
hb' : CategoryTheory.Functor.map (quotient C (ComplexShape.up ℤ)) b'' = e₁.inv.hom₂ ≫ b ≫ e₂.hom.hom₂
comm₁₁ : (triangleh φ₁).mor₁ ≫ e₁.inv.hom₂ = e₁.inv.hom₁ ≫ T₁.mor₁
⊢ Eq (α := Functor.obj (quotient C (ComplexShape.up ℤ)) K₁ ⟶ Functor.obj (quotient C (ComplexShape.up ℤ)) L₂)
    (CategoryTheory.Functor.map (quotient C (ComplexShape.up ℤ)) (φ₁ ≫ b''))
    (CategoryTheory.Functor.map (quotient C (ComplexShape.up ℤ)) (a'' ≫ φ₂))
have comm₁₂ : T₂.mor₁ ≫ e₂.hom.hom₂ = e₂.hom.hom₁ ≫ (triangleh φ₂).mor₁
Tactic: have comm₁₂ := e₂.hom.comm₁
-- Lean 4 proof step from Mathlib.Algebra.Homology.HomotopyCategory.Pretriangulated (goal)
Goal:
C : Type u_1
inst : Category.{v_1, u_1} C
inst_1 : Preadditive.{v_1, u_1} C
inst_2 : HasBinaryBiproducts.{v_1, u_1} C
T₁ T₂ : Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ))
a : T₁.obj₁ ⟶ T₂.obj₁
b : T₁.obj₂ ⟶ T₂.obj₂
fac : T₁.mor₁ ≫ b = a ≫ T₂.mor₁
K₁ L₁ : CochainComplex.{v_1, u_1, 0} C ℤ
φ₁ : K₁ ⟶ L₁
e₁ : T₁ ≅ triangleh φ₁
K₂ L₂ : CochainComplex.{v_1, u_1, 0} C ℤ
φ₂ : K₂ ⟶ L₂
e₂ : T₂ ≅ triangleh φ₂
a'' : K₁ ⟶ K₂
ha' : CategoryTheory.Functor.map (quotient C (ComplexShape.up ℤ)) a'' = e₁.inv.hom₁ ≫ a ≫ e₂.hom.hom₁
b'' : L₁ ⟶ L₂
hb' : CategoryTheory.Functor.map (quotient C (ComplexShape.up ℤ)) b'' = e₁.inv.hom₂ ≫ b ≫ e₂.hom.hom₂
⊢ ∃ (c : T₁.obj₃ ⟶ T₂.obj₃),
    T₁.mor₂ ≫ c = b ≫ T₂.mor₂ ∧
      T₁.mor₃ ≫
          CategoryTheory.Functor.map (shiftFunctor (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)) (A := ℤ) 1)
            a =
        c ≫ T₂.mor₃
have have : ∀ (H : Homotopy (φ₁ ≫ b'') (a'' ≫ φ₂)),
  ∃ (c : T₁.obj₃ ⟶ T₂.obj₃),
    T₁.mor₂ ≫ c = b ≫ T₂.mor₂ ∧
      T₁.mor₃ ≫
          CategoryTheory.Functor.map (shiftFunctor (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)) (A := ℤ) 1)
            a =
        c ≫ T₂.mor₃
Tactic: have H : Homotopy (φ₁ ≫ b'') (a'' ≫ φ₂) := homotopyOfEq _ _ (by
    have comm₁₁ := e₁.inv.comm₁
    have comm₁₂ := e₂.hom.comm₁
    dsimp at comm₁₁ comm₁₂
    simp only [Functor.map_comp, ha', hb', reassoc_of% comm₁₁,
      reassoc_of% fac, comm₁₂, assoc])
-- Lean 4 proof step from Mathlib.Algebra.Homology.HomotopyCategory.Pretriangulated (hypothesis)
Goal:
C : Type u_1
inst : Category.{v_1, u_1} C
inst_1 : Preadditive.{v_1, u_1} C
inst_2 : HasBinaryBiproducts.{v_1, u_1} C
T₁ T₂ : Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ))
a : T₁.obj₁ ⟶ T₂.obj₁
b : T₁.obj₂ ⟶ T₂.obj₂
fac : T₁.mor₁ ≫ b = a ≫ T₂.mor₁
K₁ L₁ : CochainComplex.{v_1, u_1, 0} C ℤ
φ₁ : K₁ ⟶ L₁
e₁ : T₁ ≅ triangleh φ₁
K₂ L₂ : CochainComplex.{v_1, u_1, 0} C ℤ
φ₂ : K₂ ⟶ L₂
e₂ : T₂ ≅ triangleh φ₂
a'' : K₁ ⟶ K₂
ha' : CategoryTheory.Functor.map (quotient C (ComplexShape.up ℤ)) a'' = e₁.inv.hom₁ ≫ a ≫ e₂.hom.hom₁
b'' : L₁ ⟶ L₂
hb' : CategoryTheory.Functor.map (quotient C (ComplexShape.up ℤ)) b'' = e₁.inv.hom₂ ≫ b ≫ e₂.hom.hom₂
H : Homotopy (φ₁ ≫ b'') (a'' ≫ φ₂)
γ : T₁ ⟶ T₂ := e₁.hom ≫ trianglehMapOfHomotopy H ≫ e₂.inv
⊢ ∃ (c : T₁.obj₃ ⟶ T₂.obj₃),
    T₁.mor₂ ≫ c = b ≫ T₂.mor₂ ∧
      T₁.mor₃ ≫
          CategoryTheory.Functor.map (shiftFunctor (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)) (A := ℤ) 1)
            a =
        c ≫ T₂.mor₃
have comm₂ : T₁.mor₂ ≫ γ.hom₃ = γ.hom₂ ≫ T₂.mor₂
Tactic: have comm₂ := γ.comm₂
-- Lean 4 proof step from Mathlib.Algebra.Homology.HomotopyCategory.Pretriangulated (hypothesis)
Goal:
C : Type u_1
inst : Category.{v_1, u_1} C
inst_1 : Preadditive.{v_1, u_1} C
inst_2 : HasBinaryBiproducts.{v_1, u_1} C
T₁ T₂ : Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ))
a : T₁.obj₁ ⟶ T₂.obj₁
b : T₁.obj₂ ⟶ T₂.obj₂
fac : T₁.mor₁ ≫ b = a ≫ T₂.mor₁
K₁ L₁ : CochainComplex.{v_1, u_1, 0} C ℤ
φ₁ : K₁ ⟶ L₁
e₁ : T₁ ≅ triangleh φ₁
K₂ L₂ : CochainComplex.{v_1, u_1, 0} C ℤ
φ₂ : K₂ ⟶ L₂
e₂ : T₂ ≅ triangleh φ₂
a'' : K₁ ⟶ K₂
ha' : CategoryTheory.Functor.map (quotient C (ComplexShape.up ℤ)) a'' = e₁.inv.hom₁ ≫ a ≫ e₂.hom.hom₁
b'' : L₁ ⟶ L₂
hb' : CategoryTheory.Functor.map (quotient C (ComplexShape.up ℤ)) b'' = e₁.inv.hom₂ ≫ b ≫ e₂.hom.hom₂
H : Homotopy (φ₁ ≫ b'') (a'' ≫ φ₂)
γ : T₁ ⟶ T₂ := e₁.hom ≫ trianglehMapOfHomotopy H ≫ e₂.inv
comm₂ : T₁.mor₂ ≫ γ.hom₃ = γ.hom₂ ≫ T₂.mor₂
⊢ ∃ (c : T₁.obj₃ ⟶ T₂.obj₃),
    T₁.mor₂ ≫ c = b ≫ T₂.mor₂ ∧
      T₁.mor₃ ≫
          CategoryTheory.Functor.map (shiftFunctor (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)) (A := ℤ) 1)
            a =
        c ≫ T₂.mor₃
have comm₃ : T₁.mor₃ ≫
    CategoryTheory.Functor.map (shiftFunctor (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)) (A := ℤ) 1) γ.hom₁ =
  γ.hom₃ ≫ T₂.mor₃
Tactic: have comm₃ := γ.comm₃
-- Lean 4 proof step from Mathlib.Algebra.Homology.HomotopyCategory.Pretriangulated (hypothesis)
Goal:
C : Type u_1
inst : Category.{v_1, u_1} C
inst_1 : Preadditive.{v_1, u_1} C
inst_2 : HasBinaryBiproducts.{v_1, u_1} C
T₁ T₂ : Triangle (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ))
a : T₁.obj₁ ⟶ T₂.obj₁
b : T₁.obj₂ ⟶ T₂.obj₂
fac : T₁.mor₁ ≫ b = a ≫ T₂.mor₁
K₁ L₁ : CochainComplex.{v_1, u_1, 0} C ℤ
φ₁ : K₁ ⟶ L₁
e₁ : T₁ ≅ triangleh φ₁
K₂ L₂ : CochainComplex.{v_1, u_1, 0} C ℤ
φ₂ : K₂ ⟶ L₂
e₂ : T₂ ≅ triangleh φ₂
a'' : K₁ ⟶ K₂
ha' : CategoryTheory.Functor.map (quotient C (ComplexShape.up ℤ)) a'' = e₁.inv.hom₁ ≫ a ≫ e₂.hom.hom₁
b'' : L₁ ⟶ L₂
hb' : CategoryTheory.Functor.map (quotient C (ComplexShape.up ℤ)) b'' = e₁.inv.hom₂ ≫ b ≫ e₂.hom.hom₂
H : Homotopy (φ₁ ≫ b'') (a'' ≫ φ₂)
γ : T₁ ⟶ T₂ := e₁.hom ≫ trianglehMapOfHomotopy H ≫ e₂.inv
comm₂ :
  T₁.mor₂ ≫ e₁.hom.hom₃ ≫ CategoryTheory.Functor.map (quotient C (ComplexShape.up ℤ)) (mapOfHomotopy H) ≫ e₂.inv.hom₃ =
    (e₁.hom.hom₂ ≫ CategoryTheory.Functor.map (quotient C (ComplexShape.up ℤ)) b'' ≫ e₂.inv.hom₂) ≫ T₂.mor₂
comm₃ :
  T₁.mor₃ ≫
      CategoryTheory.Functor.map (shiftFunctor (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)) (A := ℤ) 1)
        (e₁.hom.hom₁ ≫ CategoryTheory.Functor.map (quotient C (ComplexShape.up ℤ)) a'' ≫ e₂.inv.hom₁) =
    (e₁.hom.hom₃ ≫ CategoryTheory.Functor.map (quotient C (ComplexShape.up ℤ)) (mapOfHomotopy H) ≫ e₂.inv.hom₃) ≫
      T₂.mor₃
⊢ ∃ (c : T₁.obj₃ ⟶ T₂.obj₃),
    T₁.mor₂ ≫ c = b ≫ T₂.mor₂ ∧
      T₁.mor₃ ≫
          CategoryTheory.Functor.map (shiftFunctor (HomotopyCategory.{v_1, u_1, 0} C (ComplexShape.up ℤ)) (A := ℤ) 1)
            a =
        c ≫ T₂.mor₃
have comm₄ : T₁.mor₂ ≫ e₁.hom.hom₃ ≫ CategoryTheory.Functor.map (quotient C (ComplexShape.up ℤ)) (mapOfHomotopy H) ≫ e₂.inv.hom₃ =
  (e₁.hom.hom₂ ≫ (e₁.inv.hom₂ ≫ b ≫ e₂.hom.hom₂) ≫ e₂.inv.hom₂) ≫ T₂.mor₂
Tactic: simp only [ha', hb'] at comm₂ comm₃
Cleared hypotheses: comm₂, comm₃