[GOAL]
C : Type u_1
inst✝² : Category.{?u.243, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : HasZeroMorphisms C
Δ : SimplexCategoryᵒᵖ
A : IndexSet Δ
⊢ X.obj Δ ⟶ N s (SimplexCategory.len A.fst.unop)
[PROOFSTEP]
refine' (s.iso Δ).inv ≫ Sigma.desc fun B => _
[GOAL]
C : Type u_1
inst✝² : Category.{?u.243, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : HasZeroMorphisms C
Δ : SimplexCategoryᵒᵖ
A B : IndexSet Δ
⊢ summand s.N Δ B ⟶ N s (SimplexCategory.len A.fst.unop)
[PROOFSTEP]
by_cases B = A
[GOAL]
C : Type u_1
inst✝² : Category.{?u.243, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : HasZeroMorphisms C
Δ : SimplexCategoryᵒᵖ
A B : IndexSet Δ
⊢ summand s.N Δ B ⟶ N s (SimplexCategory.len A.fst.unop)
[PROOFSTEP]
by_cases B = A
[GOAL]
case pos
C : Type u_1
inst✝² : Category.{?u.243, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : HasZeroMorphisms C
Δ : SimplexCategoryᵒᵖ
A B : IndexSet Δ
h : B = A
⊢ summand s.N Δ B ⟶ N s (SimplexCategory.len A.fst.unop)
[PROOFSTEP]
exact eqToHom (by subst h; rfl)
[GOAL]
C : Type u_1
inst✝² : Category.{?u.243, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : HasZeroMorphisms C
Δ : SimplexCategoryᵒᵖ
A B : IndexSet Δ
h : B = A
⊢ summand s.N Δ B = N s (SimplexCategory.len A.fst.unop)
[PROOFSTEP]
subst h
[GOAL]
C : Type u_1
inst✝² : Category.{?u.243, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : HasZeroMorphisms C
Δ : SimplexCategoryᵒᵖ
B : IndexSet Δ
⊢ summand s.N Δ B = N s (SimplexCategory.len B.fst.unop)
[PROOFSTEP]
rfl
[GOAL]
case neg
C : Type u_1
inst✝² : Category.{?u.243, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : HasZeroMorphisms C
Δ : SimplexCategoryᵒᵖ
A B : IndexSet Δ
h : ¬B = A
⊢ summand s.N Δ B ⟶ N s (SimplexCategory.len A.fst.unop)
[PROOFSTEP]
exact 0
[GOAL]
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : HasZeroMorphisms C
Δ : SimplexCategoryᵒᵖ
A : IndexSet Δ
⊢ ιSummand s A ≫ πSummand s A = 𝟙 (N s (SimplexCategory.len A.fst.unop))
[PROOFSTEP]
dsimp only [ιSummand, iso_hom, πSummand, iso_inv, summand]
[GOAL]
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : HasZeroMorphisms C
Δ : SimplexCategoryᵒᵖ
A : IndexSet Δ
⊢ ((ιCoprod s.N A ≫ map X s.ι Δ) ≫
      inv (map X s.ι Δ) ≫
        Sigma.desc fun B =>
          if h : B = A then eqToHom (_ : summand s.N Δ B = N s (SimplexCategory.len A.fst.unop)) else 0) =
    𝟙 (N s (SimplexCategory.len A.fst.unop))
[PROOFSTEP]
simp only [summand, assoc, IsIso.hom_inv_id_assoc]
[GOAL]
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : HasZeroMorphisms C
Δ : SimplexCategoryᵒᵖ
A : IndexSet Δ
⊢ (ιCoprod s.N A ≫
      Sigma.desc fun B =>
        if h : B = A then eqToHom (_ : summand s.N Δ B = N s (SimplexCategory.len A.fst.unop)) else 0) =
    𝟙 (N s (SimplexCategory.len A.fst.unop))
[PROOFSTEP]
erw [colimit.ι_desc, Cofan.mk_ι_app]
[GOAL]
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : HasZeroMorphisms C
Δ : SimplexCategoryᵒᵖ
A : IndexSet Δ
⊢ (if h : { as := A }.as = A then eqToHom (_ : summand s.N Δ { as := A }.as = N s (SimplexCategory.len A.fst.unop))
    else 0) =
    𝟙 (N s (SimplexCategory.len A.fst.unop))
[PROOFSTEP]
dsimp
[GOAL]
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : HasZeroMorphisms C
Δ : SimplexCategoryᵒᵖ
A : IndexSet Δ
⊢ (if h : A = A then 𝟙 (N s (SimplexCategory.len A.fst.unop)) else 0) = 𝟙 (N s (SimplexCategory.len A.fst.unop))
[PROOFSTEP]
simp only [dite_eq_ite, ite_true]
[GOAL]
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : HasZeroMorphisms C
Δ : SimplexCategoryᵒᵖ
A B : IndexSet Δ
h : B ≠ A
⊢ ιSummand s A ≫ πSummand s B = 0
[PROOFSTEP]
dsimp only [ιSummand, iso_hom, πSummand, iso_inv, summand]
[GOAL]
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : HasZeroMorphisms C
Δ : SimplexCategoryᵒᵖ
A B : IndexSet Δ
h : B ≠ A
⊢ ((ιCoprod s.N A ≫ map X s.ι Δ) ≫
      inv (map X s.ι Δ) ≫
        Sigma.desc fun B_1 =>
          if h : B_1 = B then eqToHom (_ : summand s.N Δ B_1 = N s (SimplexCategory.len B.fst.unop)) else 0) =
    0
[PROOFSTEP]
simp only [summand, assoc, IsIso.hom_inv_id_assoc]
[GOAL]
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : HasZeroMorphisms C
Δ : SimplexCategoryᵒᵖ
A B : IndexSet Δ
h : B ≠ A
⊢ (ιCoprod s.N A ≫
      Sigma.desc fun B_1 =>
        if h : B_1 = B then eqToHom (_ : summand s.N Δ B_1 = N s (SimplexCategory.len B.fst.unop)) else 0) =
    0
[PROOFSTEP]
erw [colimit.ι_desc, Cofan.mk_ι_app]
[GOAL]
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : HasZeroMorphisms C
Δ : SimplexCategoryᵒᵖ
A B : IndexSet Δ
h : B ≠ A
⊢ (if h : { as := A }.as = B then eqToHom (_ : summand s.N Δ { as := A }.as = N s (SimplexCategory.len B.fst.unop))
    else 0) =
    0
[PROOFSTEP]
exact dif_neg h.symm
[GOAL]
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
Δ : SimplexCategoryᵒᵖ
⊢ 𝟙 (X.obj Δ) = ∑ A : IndexSet Δ, πSummand s A ≫ ιSummand s A
[PROOFSTEP]
apply s.hom_ext'
[GOAL]
case h
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
Δ : SimplexCategoryᵒᵖ
⊢ ∀ (A : IndexSet Δ), ιSummand s A ≫ 𝟙 (X.obj Δ) = ιSummand s A ≫ ∑ A : IndexSet Δ, πSummand s A ≫ ιSummand s A
[PROOFSTEP]
intro A
[GOAL]
case h
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
Δ : SimplexCategoryᵒᵖ
A : IndexSet Δ
⊢ ιSummand s A ≫ 𝟙 (X.obj Δ) = ιSummand s A ≫ ∑ A : IndexSet Δ, πSummand s A ≫ ιSummand s A
[PROOFSTEP]
rw [comp_id, comp_sum, Finset.sum_eq_single A, ι_πSummand_eq_id_assoc]
[GOAL]
case h.h₀
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
Δ : SimplexCategoryᵒᵖ
A : IndexSet Δ
⊢ ∀ (b : IndexSet Δ), b ∈ Finset.univ → b ≠ A → ιSummand s A ≫ πSummand s b ≫ ιSummand s b = 0
[PROOFSTEP]
intro B _ h₂
[GOAL]
case h.h₀
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
Δ : SimplexCategoryᵒᵖ
A B : IndexSet Δ
a✝ : B ∈ Finset.univ
h₂ : B ≠ A
⊢ ιSummand s A ≫ πSummand s B ≫ ιSummand s B = 0
[PROOFSTEP]
rw [s.ι_πSummand_eq_zero_assoc _ _ h₂, zero_comp]
[GOAL]
case h.h₁
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
Δ : SimplexCategoryᵒᵖ
A : IndexSet Δ
⊢ ¬A ∈ Finset.univ → ιSummand s A ≫ πSummand s A ≫ ιSummand s A = 0
[PROOFSTEP]
simp only [Finset.mem_univ, not_true, IsEmpty.forall_iff]
[GOAL]
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
i : Fin (n + 1)
⊢ SimplicialObject.σ X i ≫ πSummand s (IndexSet.id (op [n + 1])) = 0
[PROOFSTEP]
apply s.hom_ext'
[GOAL]
case h
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
i : Fin (n + 1)
⊢ ∀ (A : IndexSet (op [n])),
    ιSummand s A ≫ SimplicialObject.σ X i ≫ πSummand s (IndexSet.id (op [n + 1])) = ιSummand s A ≫ 0
[PROOFSTEP]
intro A
[GOAL]
case h
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
i : Fin (n + 1)
A : IndexSet (op [n])
⊢ ιSummand s A ≫ SimplicialObject.σ X i ≫ πSummand s (IndexSet.id (op [n + 1])) = ιSummand s A ≫ 0
[PROOFSTEP]
dsimp only [SimplicialObject.σ]
[GOAL]
case h
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
i : Fin (n + 1)
A : IndexSet (op [n])
⊢ ιSummand s A ≫ X.map (SimplexCategory.σ i).op ≫ πSummand s (IndexSet.id (op [n + 1])) = ιSummand s A ≫ 0
[PROOFSTEP]
rw [comp_zero, s.ιSummand_epi_naturality_assoc A (SimplexCategory.σ i).op, ι_πSummand_eq_zero]
[GOAL]
case h.h
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
i : Fin (n + 1)
A : IndexSet (op [n])
⊢ IndexSet.id (op [n + 1]) ≠ IndexSet.epiComp A (SimplexCategory.σ i).op
[PROOFSTEP]
rw [ne_comm]
[GOAL]
case h.h
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
i : Fin (n + 1)
A : IndexSet (op [n])
⊢ IndexSet.epiComp A (SimplexCategory.σ i).op ≠ IndexSet.id (op [n + 1])
[PROOFSTEP]
change ¬(A.epiComp (SimplexCategory.σ i).op).EqId
[GOAL]
case h.h
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
i : Fin (n + 1)
A : IndexSet (op [n])
⊢ ¬IndexSet.EqId (IndexSet.epiComp A (SimplexCategory.σ i).op)
[PROOFSTEP]
rw [IndexSet.eqId_iff_len_eq]
[GOAL]
case h.h
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
i : Fin (n + 1)
A : IndexSet (op [n])
⊢ ¬SimplexCategory.len (IndexSet.epiComp A (SimplexCategory.σ i).op).fst.unop = SimplexCategory.len (op [n + 1]).unop
[PROOFSTEP]
have h := SimplexCategory.len_le_of_epi (inferInstance : Epi A.e)
[GOAL]
case h.h
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
i : Fin (n + 1)
A : IndexSet (op [n])
h : SimplexCategory.len A.fst.unop ≤ SimplexCategory.len (op [n]).unop
⊢ ¬SimplexCategory.len (IndexSet.epiComp A (SimplexCategory.σ i).op).fst.unop = SimplexCategory.len (op [n + 1]).unop
[PROOFSTEP]
dsimp at h ⊢
[GOAL]
case h.h
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
i : Fin (n + 1)
A : IndexSet (op [n])
h : SimplexCategory.len A.fst.unop ≤ n
⊢ ¬SimplexCategory.len A.fst.unop = n + 1
[PROOFSTEP]
linarith
[GOAL]
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X✝ : SimplicialObject C
s✝ : Splitting X✝
inst✝ : Preadditive C
X : SimplicialObject C
s : Splitting X
n : ℕ
A : IndexSet (op [n])
hA : ¬IndexSet.EqId A
⊢ ιSummand s A ≫ HomologicalComplex.Hom.f PInfty n = 0
[PROOFSTEP]
rw [SimplicialObject.Splitting.IndexSet.eqId_iff_mono] at hA
[GOAL]
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X✝ : SimplicialObject C
s✝ : Splitting X✝
inst✝ : Preadditive C
X : SimplicialObject C
s : Splitting X
n : ℕ
A : IndexSet (op [n])
hA : ¬Mono (IndexSet.e A)
⊢ ιSummand s A ≫ HomologicalComplex.Hom.f PInfty n = 0
[PROOFSTEP]
rw [SimplicialObject.Splitting.ιSummand_eq, assoc, degeneracy_comp_PInfty X n A.e hA, comp_zero]
[GOAL]
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
Z : C
n : ℕ
f : Z ⟶ X.obj (op [n])
⊢ f ≫ HomologicalComplex.Hom.f PInfty n = 0 ↔ f ≫ πSummand s (IndexSet.id (op [n])) = 0
[PROOFSTEP]
constructor
[GOAL]
case mp
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
Z : C
n : ℕ
f : Z ⟶ X.obj (op [n])
⊢ f ≫ HomologicalComplex.Hom.f PInfty n = 0 → f ≫ πSummand s (IndexSet.id (op [n])) = 0
[PROOFSTEP]
intro h
[GOAL]
case mp
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
Z : C
n : ℕ
f : Z ⟶ X.obj (op [n])
h : f ≫ HomologicalComplex.Hom.f PInfty n = 0
⊢ f ≫ πSummand s (IndexSet.id (op [n])) = 0
[PROOFSTEP]
rcases n with _ | n
[GOAL]
case mp.zero
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
Z : C
f : Z ⟶ X.obj (op [Nat.zero])
h : f ≫ HomologicalComplex.Hom.f PInfty Nat.zero = 0
⊢ f ≫ πSummand s (IndexSet.id (op [Nat.zero])) = 0
[PROOFSTEP]
dsimp at h
[GOAL]
case mp.zero
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
Z : C
f : Z ⟶ X.obj (op [Nat.zero])
h : f ≫ 𝟙 (X.obj (op [0])) = 0
⊢ f ≫ πSummand s (IndexSet.id (op [Nat.zero])) = 0
[PROOFSTEP]
rw [comp_id] at h
[GOAL]
case mp.zero
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
Z : C
f : Z ⟶ X.obj (op [Nat.zero])
h : f = 0
⊢ f ≫ πSummand s (IndexSet.id (op [Nat.zero])) = 0
[PROOFSTEP]
rw [h, zero_comp]
[GOAL]
case mp.succ
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
Z : C
n : ℕ
f : Z ⟶ X.obj (op [Nat.succ n])
h : f ≫ HomologicalComplex.Hom.f PInfty (Nat.succ n) = 0
⊢ f ≫ πSummand s (IndexSet.id (op [Nat.succ n])) = 0
[PROOFSTEP]
have h' := f ≫= PInfty_f_add_QInfty_f (n + 1)
[GOAL]
case mp.succ
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
Z : C
n : ℕ
f : Z ⟶ X.obj (op [Nat.succ n])
h : f ≫ HomologicalComplex.Hom.f PInfty (Nat.succ n) = 0
h' :
  f ≫ (HomologicalComplex.Hom.f PInfty (n + 1) + HomologicalComplex.Hom.f QInfty (n + 1)) =
    f ≫ 𝟙 (HomologicalComplex.X K[X] (n + 1))
⊢ f ≫ πSummand s (IndexSet.id (op [Nat.succ n])) = 0
[PROOFSTEP]
dsimp at h'
[GOAL]
case mp.succ
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
Z : C
n : ℕ
f : Z ⟶ X.obj (op [Nat.succ n])
h : f ≫ HomologicalComplex.Hom.f PInfty (Nat.succ n) = 0
h' :
  f ≫ (HomologicalComplex.Hom.f PInfty (n + 1) + HomologicalComplex.Hom.f QInfty (n + 1)) = f ≫ 𝟙 (X.obj (op [n + 1]))
⊢ f ≫ πSummand s (IndexSet.id (op [Nat.succ n])) = 0
[PROOFSTEP]
rw [comp_id, comp_add, h, zero_add] at h'
[GOAL]
case mp.succ
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
Z : C
n : ℕ
f : Z ⟶ X.obj (op [Nat.succ n])
h : f ≫ HomologicalComplex.Hom.f PInfty (Nat.succ n) = 0
h' : f ≫ HomologicalComplex.Hom.f QInfty (n + 1) = f
⊢ f ≫ πSummand s (IndexSet.id (op [Nat.succ n])) = 0
[PROOFSTEP]
rw [← h', assoc, QInfty_f, decomposition_Q, Preadditive.sum_comp, Preadditive.comp_sum, Finset.sum_eq_zero]
[GOAL]
case mp.succ
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
Z : C
n : ℕ
f : Z ⟶ X.obj (op [Nat.succ n])
h : f ≫ HomologicalComplex.Hom.f PInfty (Nat.succ n) = 0
h' : f ≫ HomologicalComplex.Hom.f QInfty (n + 1) = f
⊢ ∀ (x : Fin (n + 1)),
    x ∈ Finset.filter (fun i => ↑i < n + 1) Finset.univ →
      f ≫
          (HomologicalComplex.Hom.f (P ↑x) (n + 1) ≫
              SimplicialObject.δ X (Fin.succ (↑Fin.revPerm x)) ≫ SimplicialObject.σ X (↑Fin.revPerm x)) ≫
            πSummand s (IndexSet.id (op [Nat.succ n])) =
        0
[PROOFSTEP]
intro i _
[GOAL]
case mp.succ
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
Z : C
n : ℕ
f : Z ⟶ X.obj (op [Nat.succ n])
h : f ≫ HomologicalComplex.Hom.f PInfty (Nat.succ n) = 0
h' : f ≫ HomologicalComplex.Hom.f QInfty (n + 1) = f
i : Fin (n + 1)
a✝ : i ∈ Finset.filter (fun i => ↑i < n + 1) Finset.univ
⊢ f ≫
      (HomologicalComplex.Hom.f (P ↑i) (n + 1) ≫
          SimplicialObject.δ X (Fin.succ (↑Fin.revPerm i)) ≫ SimplicialObject.σ X (↑Fin.revPerm i)) ≫
        πSummand s (IndexSet.id (op [Nat.succ n])) =
    0
[PROOFSTEP]
simp only [assoc, σ_comp_πSummand_id_eq_zero, comp_zero]
[GOAL]
case mpr
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
Z : C
n : ℕ
f : Z ⟶ X.obj (op [n])
⊢ f ≫ πSummand s (IndexSet.id (op [n])) = 0 → f ≫ HomologicalComplex.Hom.f PInfty n = 0
[PROOFSTEP]
intro h
[GOAL]
case mpr
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
Z : C
n : ℕ
f : Z ⟶ X.obj (op [n])
h : f ≫ πSummand s (IndexSet.id (op [n])) = 0
⊢ f ≫ HomologicalComplex.Hom.f PInfty n = 0
[PROOFSTEP]
rw [← comp_id f, assoc, s.decomposition_id, Preadditive.sum_comp, Preadditive.comp_sum, Fintype.sum_eq_zero]
[GOAL]
case mpr.h
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
Z : C
n : ℕ
f : Z ⟶ X.obj (op [n])
h : f ≫ πSummand s (IndexSet.id (op [n])) = 0
⊢ ∀ (a : IndexSet (op [n])), f ≫ (πSummand s a ≫ ιSummand s a) ≫ HomologicalComplex.Hom.f PInfty n = 0
[PROOFSTEP]
intro A
[GOAL]
case mpr.h
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
Z : C
n : ℕ
f : Z ⟶ X.obj (op [n])
h : f ≫ πSummand s (IndexSet.id (op [n])) = 0
A : IndexSet (op [n])
⊢ f ≫ (πSummand s A ≫ ιSummand s A) ≫ HomologicalComplex.Hom.f PInfty n = 0
[PROOFSTEP]
by_cases hA : A.EqId
[GOAL]
case pos
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
Z : C
n : ℕ
f : Z ⟶ X.obj (op [n])
h : f ≫ πSummand s (IndexSet.id (op [n])) = 0
A : IndexSet (op [n])
hA : IndexSet.EqId A
⊢ f ≫ (πSummand s A ≫ ιSummand s A) ≫ HomologicalComplex.Hom.f PInfty n = 0
[PROOFSTEP]
dsimp at hA
[GOAL]
case pos
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
Z : C
n : ℕ
f : Z ⟶ X.obj (op [n])
h : f ≫ πSummand s (IndexSet.id (op [n])) = 0
A : IndexSet (op [n])
hA : A = IndexSet.id (op [n])
⊢ f ≫ (πSummand s A ≫ ιSummand s A) ≫ HomologicalComplex.Hom.f PInfty n = 0
[PROOFSTEP]
subst hA
[GOAL]
case pos
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
Z : C
n : ℕ
f : Z ⟶ X.obj (op [n])
h : f ≫ πSummand s (IndexSet.id (op [n])) = 0
⊢ f ≫ (πSummand s (IndexSet.id (op [n])) ≫ ιSummand s (IndexSet.id (op [n]))) ≫ HomologicalComplex.Hom.f PInfty n = 0
[PROOFSTEP]
rw [assoc, reassoc_of% h, zero_comp]
[GOAL]
case neg
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
Z : C
n : ℕ
f : Z ⟶ X.obj (op [n])
h : f ≫ πSummand s (IndexSet.id (op [n])) = 0
A : IndexSet (op [n])
hA : ¬IndexSet.EqId A
⊢ f ≫ (πSummand s A ≫ ιSummand s A) ≫ HomologicalComplex.Hom.f PInfty n = 0
[PROOFSTEP]
simp only [assoc, s.ιSummand_comp_PInfty_eq_zero A hA, comp_zero]
[GOAL]
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
⊢ HomologicalComplex.Hom.f PInfty n ≫ πSummand s (IndexSet.id (op [n])) = πSummand s (IndexSet.id (op [n]))
[PROOFSTEP]
conv_rhs => rw [← id_comp (s.πSummand _)]
[GOAL]
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
| πSummand s (IndexSet.id (op [n]))
[PROOFSTEP]
rw [← id_comp (s.πSummand _)]
[GOAL]
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
| πSummand s (IndexSet.id (op [n]))
[PROOFSTEP]
rw [← id_comp (s.πSummand _)]
[GOAL]
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
| πSummand s (IndexSet.id (op [n]))
[PROOFSTEP]
rw [← id_comp (s.πSummand _)]
[GOAL]
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
⊢ HomologicalComplex.Hom.f PInfty n ≫ πSummand s (IndexSet.id (op [n])) =
    𝟙 (X.obj (op [n])) ≫ πSummand s (IndexSet.id (op [n]))
[PROOFSTEP]
symm
[GOAL]
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
⊢ 𝟙 (X.obj (op [n])) ≫ πSummand s (IndexSet.id (op [n])) =
    HomologicalComplex.Hom.f PInfty n ≫ πSummand s (IndexSet.id (op [n]))
[PROOFSTEP]
rw [← sub_eq_zero, ← sub_comp, ← comp_PInfty_eq_zero_iff, sub_comp, id_comp, PInfty_f_idem, sub_self]
[GOAL]
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
⊢ πSummand s (IndexSet.id (op [n])) ≫ ιSummand s (IndexSet.id (op [n])) ≫ HomologicalComplex.Hom.f PInfty n =
    HomologicalComplex.Hom.f PInfty n
[PROOFSTEP]
conv_rhs => rw [← id_comp (PInfty.f n)]
[GOAL]
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
| HomologicalComplex.Hom.f PInfty n
[PROOFSTEP]
rw [← id_comp (PInfty.f n)]
[GOAL]
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
| HomologicalComplex.Hom.f PInfty n
[PROOFSTEP]
rw [← id_comp (PInfty.f n)]
[GOAL]
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
| HomologicalComplex.Hom.f PInfty n
[PROOFSTEP]
rw [← id_comp (PInfty.f n)]
[GOAL]
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
⊢ πSummand s (IndexSet.id (op [n])) ≫ ιSummand s (IndexSet.id (op [n])) ≫ HomologicalComplex.Hom.f PInfty n =
    𝟙 (HomologicalComplex.X K[X] n) ≫ HomologicalComplex.Hom.f PInfty n
[PROOFSTEP]
erw [s.decomposition_id, Preadditive.sum_comp]
[GOAL]
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
⊢ πSummand s (IndexSet.id (op [n])) ≫ ιSummand s (IndexSet.id (op [n])) ≫ HomologicalComplex.Hom.f PInfty n =
    ∑ j : IndexSet (op [n]), (πSummand s j ≫ ιSummand s j) ≫ HomologicalComplex.Hom.f PInfty n
[PROOFSTEP]
rw [Fintype.sum_eq_single (IndexSet.id (op [n])), assoc]
[GOAL]
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
⊢ ∀ (x : IndexSet (op [n])),
    x ≠ IndexSet.id (op [n]) → (πSummand s x ≫ ιSummand s x) ≫ HomologicalComplex.Hom.f PInfty n = 0
[PROOFSTEP]
rintro A (hA : ¬A.EqId)
[GOAL]
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
A : IndexSet (op [n])
hA : ¬IndexSet.EqId A
⊢ (πSummand s A ≫ ιSummand s A) ≫ HomologicalComplex.Hom.f PInfty n = 0
[PROOFSTEP]
rw [assoc, s.ιSummand_comp_PInfty_eq_zero A hA, comp_zero]
[GOAL]
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
j k : ℕ
A : IndexSet (op [j])
hA : ¬IndexSet.EqId A
⊢ ιSummand s A ≫ HomologicalComplex.d K[X] j k ≫ πSummand s (IndexSet.id (op [k])) = 0
[PROOFSTEP]
rw [A.eqId_iff_mono] at hA
[GOAL]
C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
j k : ℕ
A : IndexSet (op [j])
hA : ¬Mono (IndexSet.e A)
⊢ ιSummand s A ≫ HomologicalComplex.d K[X] j k ≫ πSummand s (IndexSet.id (op [k])) = 0
[PROOFSTEP]
rw [← assoc, ← s.comp_PInfty_eq_zero_iff, assoc, ← PInfty.comm j k, s.ιSummand_eq, assoc,
  degeneracy_comp_PInfty_assoc X j A.e hA, zero_comp, comp_zero]
[GOAL]
C : Type u_1
inst✝² : Category.{?u.276754, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
i j : ℕ
hij : ¬ComplexShape.Rel (ComplexShape.down ℕ) i j
⊢ d s i j = 0
[PROOFSTEP]
simp only [d, K[X].shape i j hij, zero_comp, comp_zero]
[GOAL]
C : Type u_1
inst✝² : Category.{?u.276754, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
i j k : ℕ
x✝¹ : ComplexShape.Rel (ComplexShape.down ℕ) i j
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) j k
⊢ d s i j ≫ d s j k = 0
[PROOFSTEP]
simp only [d, assoc]
[GOAL]
C : Type u_1
inst✝² : Category.{?u.276754, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
i j k : ℕ
x✝¹ : ComplexShape.Rel (ComplexShape.down ℕ) i j
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) j k
⊢ ιSummand s (IndexSet.id (op [i])) ≫
      HomologicalComplex.d K[X] i j ≫
        πSummand s (IndexSet.id (op [j])) ≫
          ιSummand s (IndexSet.id (op [j])) ≫ HomologicalComplex.d K[X] j k ≫ πSummand s (IndexSet.id (op [k])) =
    0
[PROOFSTEP]
have eq : K[X].d i j ≫ 𝟙 (X.obj (op [j])) ≫ K[X].d j k ≫ s.πSummand (IndexSet.id (op [k])) = 0 := by
  erw [id_comp, HomologicalComplex.d_comp_d_assoc, zero_comp]
[GOAL]
C : Type u_1
inst✝² : Category.{?u.276754, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
i j k : ℕ
x✝¹ : ComplexShape.Rel (ComplexShape.down ℕ) i j
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) j k
⊢ HomologicalComplex.d K[X] i j ≫
      𝟙 (X.obj (op [j])) ≫ HomologicalComplex.d K[X] j k ≫ πSummand s (IndexSet.id (op [k])) =
    0
[PROOFSTEP]
erw [id_comp, HomologicalComplex.d_comp_d_assoc, zero_comp]
[GOAL]
C : Type u_1
inst✝² : Category.{?u.276754, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
i j k : ℕ
x✝¹ : ComplexShape.Rel (ComplexShape.down ℕ) i j
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) j k
eq :
  HomologicalComplex.d K[X] i j ≫
      𝟙 (X.obj (op [j])) ≫ HomologicalComplex.d K[X] j k ≫ πSummand s (IndexSet.id (op [k])) =
    0
⊢ ιSummand s (IndexSet.id (op [i])) ≫
      HomologicalComplex.d K[X] i j ≫
        πSummand s (IndexSet.id (op [j])) ≫
          ιSummand s (IndexSet.id (op [j])) ≫ HomologicalComplex.d K[X] j k ≫ πSummand s (IndexSet.id (op [k])) =
    0
[PROOFSTEP]
rw [s.decomposition_id] at eq
[GOAL]
C : Type u_1
inst✝² : Category.{?u.276754, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
i j k : ℕ
x✝¹ : ComplexShape.Rel (ComplexShape.down ℕ) i j
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) j k
eq :
  HomologicalComplex.d K[X] i j ≫
      (∑ A : IndexSet (op [j]), πSummand s A ≫ ιSummand s A) ≫
        HomologicalComplex.d K[X] j k ≫ πSummand s (IndexSet.id (op [k])) =
    0
⊢ ιSummand s (IndexSet.id (op [i])) ≫
      HomologicalComplex.d K[X] i j ≫
        πSummand s (IndexSet.id (op [j])) ≫
          ιSummand s (IndexSet.id (op [j])) ≫ HomologicalComplex.d K[X] j k ≫ πSummand s (IndexSet.id (op [k])) =
    0
[PROOFSTEP]
classical
rw [Fintype.sum_eq_add_sum_compl (IndexSet.id (op [j])), add_comp, comp_add, assoc, Preadditive.sum_comp,
  Preadditive.comp_sum, Finset.sum_eq_zero, add_zero] at eq
swap
· intro A hA
  simp only [Finset.mem_compl, Finset.mem_singleton] at hA
  simp only [assoc, ιSummand_comp_d_comp_πSummand_eq_zero _ _ _ _ hA, comp_zero]
rw [eq, comp_zero]
[GOAL]
C : Type u_1
inst✝² : Category.{?u.276754, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
i j k : ℕ
x✝¹ : ComplexShape.Rel (ComplexShape.down ℕ) i j
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) j k
eq :
  HomologicalComplex.d K[X] i j ≫
      (∑ A : IndexSet (op [j]), πSummand s A ≫ ιSummand s A) ≫
        HomologicalComplex.d K[X] j k ≫ πSummand s (IndexSet.id (op [k])) =
    0
⊢ ιSummand s (IndexSet.id (op [i])) ≫
      HomologicalComplex.d K[X] i j ≫
        πSummand s (IndexSet.id (op [j])) ≫
          ιSummand s (IndexSet.id (op [j])) ≫ HomologicalComplex.d K[X] j k ≫ πSummand s (IndexSet.id (op [k])) =
    0
[PROOFSTEP]
rw [Fintype.sum_eq_add_sum_compl (IndexSet.id (op [j])), add_comp, comp_add, assoc, Preadditive.sum_comp,
  Preadditive.comp_sum, Finset.sum_eq_zero, add_zero] at eq
[GOAL]
C : Type u_1
inst✝² : Category.{?u.276754, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
i j k : ℕ
x✝¹ : ComplexShape.Rel (ComplexShape.down ℕ) i j
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) j k
eq :
  HomologicalComplex.d K[X] i j ≫
      πSummand s (IndexSet.id (op [j])) ≫
        ιSummand s (IndexSet.id (op [j])) ≫ HomologicalComplex.d K[X] j k ≫ πSummand s (IndexSet.id (op [k])) =
    0
⊢ ιSummand s (IndexSet.id (op [i])) ≫
      HomologicalComplex.d K[X] i j ≫
        πSummand s (IndexSet.id (op [j])) ≫
          ιSummand s (IndexSet.id (op [j])) ≫ HomologicalComplex.d K[X] j k ≫ πSummand s (IndexSet.id (op [k])) =
    0
C : Type u_1
inst✝² : Category.{?u.276754, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
i j k : ℕ
x✝¹ : ComplexShape.Rel (ComplexShape.down ℕ) i j
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) j k
eq :
  HomologicalComplex.d K[X] i j ≫
        πSummand s (IndexSet.id (op [j])) ≫
          ιSummand s (IndexSet.id (op [j])) ≫ HomologicalComplex.d K[X] j k ≫ πSummand s (IndexSet.id (op [k])) +
      ∑ j_1 in {IndexSet.id (op [j])}ᶜ,
        HomologicalComplex.d K[X] i j ≫
          (πSummand s j_1 ≫ ιSummand s j_1) ≫ HomologicalComplex.d K[X] j k ≫ πSummand s (IndexSet.id (op [k])) =
    0
⊢ ∀ (x : IndexSet (op [j])),
    x ∈ {IndexSet.id (op [j])}ᶜ →
      HomologicalComplex.d K[X] i j ≫
          (πSummand s x ≫ ιSummand s x) ≫ HomologicalComplex.d K[X] j k ≫ πSummand s (IndexSet.id (op [k])) =
        0
[PROOFSTEP]
swap
[GOAL]
C : Type u_1
inst✝² : Category.{?u.276754, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
i j k : ℕ
x✝¹ : ComplexShape.Rel (ComplexShape.down ℕ) i j
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) j k
eq :
  HomologicalComplex.d K[X] i j ≫
        πSummand s (IndexSet.id (op [j])) ≫
          ιSummand s (IndexSet.id (op [j])) ≫ HomologicalComplex.d K[X] j k ≫ πSummand s (IndexSet.id (op [k])) +
      ∑ j_1 in {IndexSet.id (op [j])}ᶜ,
        HomologicalComplex.d K[X] i j ≫
          (πSummand s j_1 ≫ ιSummand s j_1) ≫ HomologicalComplex.d K[X] j k ≫ πSummand s (IndexSet.id (op [k])) =
    0
⊢ ∀ (x : IndexSet (op [j])),
    x ∈ {IndexSet.id (op [j])}ᶜ →
      HomologicalComplex.d K[X] i j ≫
          (πSummand s x ≫ ιSummand s x) ≫ HomologicalComplex.d K[X] j k ≫ πSummand s (IndexSet.id (op [k])) =
        0
[PROOFSTEP]
intro A hA
[GOAL]
C : Type u_1
inst✝² : Category.{?u.276754, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
i j k : ℕ
x✝¹ : ComplexShape.Rel (ComplexShape.down ℕ) i j
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) j k
eq :
  HomologicalComplex.d K[X] i j ≫
        πSummand s (IndexSet.id (op [j])) ≫
          ιSummand s (IndexSet.id (op [j])) ≫ HomologicalComplex.d K[X] j k ≫ πSummand s (IndexSet.id (op [k])) +
      ∑ j_1 in {IndexSet.id (op [j])}ᶜ,
        HomologicalComplex.d K[X] i j ≫
          (πSummand s j_1 ≫ ιSummand s j_1) ≫ HomologicalComplex.d K[X] j k ≫ πSummand s (IndexSet.id (op [k])) =
    0
A : IndexSet (op [j])
hA : A ∈ {IndexSet.id (op [j])}ᶜ
⊢ HomologicalComplex.d K[X] i j ≫
      (πSummand s A ≫ ιSummand s A) ≫ HomologicalComplex.d K[X] j k ≫ πSummand s (IndexSet.id (op [k])) =
    0
[PROOFSTEP]
simp only [Finset.mem_compl, Finset.mem_singleton] at hA
[GOAL]
C : Type u_1
inst✝² : Category.{?u.276754, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
i j k : ℕ
x✝¹ : ComplexShape.Rel (ComplexShape.down ℕ) i j
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) j k
eq :
  HomologicalComplex.d K[X] i j ≫
        πSummand s (IndexSet.id (op [j])) ≫
          ιSummand s (IndexSet.id (op [j])) ≫ HomologicalComplex.d K[X] j k ≫ πSummand s (IndexSet.id (op [k])) +
      ∑ j_1 in {IndexSet.id (op [j])}ᶜ,
        HomologicalComplex.d K[X] i j ≫
          (πSummand s j_1 ≫ ιSummand s j_1) ≫ HomologicalComplex.d K[X] j k ≫ πSummand s (IndexSet.id (op [k])) =
    0
A : IndexSet (op [j])
hA : ¬A = IndexSet.id (op [j])
⊢ HomologicalComplex.d K[X] i j ≫
      (πSummand s A ≫ ιSummand s A) ≫ HomologicalComplex.d K[X] j k ≫ πSummand s (IndexSet.id (op [k])) =
    0
[PROOFSTEP]
simp only [assoc, ιSummand_comp_d_comp_πSummand_eq_zero _ _ _ _ hA, comp_zero]
[GOAL]
C : Type u_1
inst✝² : Category.{?u.276754, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
i j k : ℕ
x✝¹ : ComplexShape.Rel (ComplexShape.down ℕ) i j
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) j k
eq :
  HomologicalComplex.d K[X] i j ≫
      πSummand s (IndexSet.id (op [j])) ≫
        ιSummand s (IndexSet.id (op [j])) ≫ HomologicalComplex.d K[X] j k ≫ πSummand s (IndexSet.id (op [k])) =
    0
⊢ ιSummand s (IndexSet.id (op [i])) ≫
      HomologicalComplex.d K[X] i j ≫
        πSummand s (IndexSet.id (op [j])) ≫
          ιSummand s (IndexSet.id (op [j])) ≫ HomologicalComplex.d K[X] j k ≫ πSummand s (IndexSet.id (op [k])) =
    0
[PROOFSTEP]
rw [eq, comp_zero]
[GOAL]
C : Type u_1
inst✝² : Category.{?u.336016, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
i j : ℕ
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) i j
⊢ (fun n => ιSummand s (IndexSet.id (op [n])) ≫ HomologicalComplex.Hom.f PInfty n) i ≫
      HomologicalComplex.d (N₁.obj X).X i j =
    HomologicalComplex.d ((toKaroubi (ChainComplex C ℕ)).obj (nondegComplex s)).X i j ≫
      (fun n => ιSummand s (IndexSet.id (op [n])) ≫ HomologicalComplex.Hom.f PInfty n) j
[PROOFSTEP]
dsimp
[GOAL]
C : Type u_1
inst✝² : Category.{?u.336016, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
i j : ℕ
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) i j
⊢ (ιSummand s (IndexSet.id (op [i])) ≫ HomologicalComplex.Hom.f PInfty i) ≫ HomologicalComplex.d K[X] i j =
    (ιSummand s (IndexSet.id (op [i])) ≫ HomologicalComplex.d K[X] i j ≫ πSummand s (IndexSet.id (op [j]))) ≫
      ιSummand s (IndexSet.id (op [j])) ≫ HomologicalComplex.Hom.f PInfty j
[PROOFSTEP]
rw [assoc, assoc, assoc, πSummand_comp_ιSummand_comp_PInfty_eq_PInfty, HomologicalComplex.Hom.comm]
[GOAL]
C : Type u_1
inst✝² : Category.{?u.336016, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
⊢ (HomologicalComplex.Hom.mk fun n => ιSummand s (IndexSet.id (op [n])) ≫ HomologicalComplex.Hom.f PInfty n) =
    ((toKaroubi (ChainComplex C ℕ)).obj (nondegComplex s)).p ≫
      (HomologicalComplex.Hom.mk fun n => ιSummand s (IndexSet.id (op [n])) ≫ HomologicalComplex.Hom.f PInfty n) ≫
        (N₁.obj X).p
[PROOFSTEP]
ext n
[GOAL]
case h
C : Type u_1
inst✝² : Category.{?u.336016, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
⊢ HomologicalComplex.Hom.f
      (HomologicalComplex.Hom.mk fun n => ιSummand s (IndexSet.id (op [n])) ≫ HomologicalComplex.Hom.f PInfty n) n =
    HomologicalComplex.Hom.f
      (((toKaroubi (ChainComplex C ℕ)).obj (nondegComplex s)).p ≫
        (HomologicalComplex.Hom.mk fun n => ιSummand s (IndexSet.id (op [n])) ≫ HomologicalComplex.Hom.f PInfty n) ≫
          (N₁.obj X).p)
      n
[PROOFSTEP]
dsimp
[GOAL]
case h
C : Type u_1
inst✝² : Category.{?u.336016, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
⊢ ιSummand s (IndexSet.id (op [n])) ≫ HomologicalComplex.Hom.f PInfty n =
    𝟙 (N s n) ≫
      (ιSummand s (IndexSet.id (op [n])) ≫ HomologicalComplex.Hom.f PInfty n) ≫ HomologicalComplex.Hom.f PInfty n
[PROOFSTEP]
rw [id_comp, assoc, PInfty_f_idem]
[GOAL]
C : Type u_1
inst✝² : Category.{?u.336016, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
i j : ℕ
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) i j
⊢ (fun n => πSummand s (IndexSet.id (op [n]))) i ≫
      HomologicalComplex.d ((toKaroubi (ChainComplex C ℕ)).obj (nondegComplex s)).X i j =
    HomologicalComplex.d (N₁.obj X).X i j ≫ (fun n => πSummand s (IndexSet.id (op [n]))) j
[PROOFSTEP]
dsimp
[GOAL]
C : Type u_1
inst✝² : Category.{?u.336016, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
i j : ℕ
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) i j
⊢ πSummand s (IndexSet.id (op [i])) ≫
      ιSummand s (IndexSet.id (op [i])) ≫ HomologicalComplex.d K[X] i j ≫ πSummand s (IndexSet.id (op [j])) =
    HomologicalComplex.d K[X] i j ≫ πSummand s (IndexSet.id (op [j]))
[PROOFSTEP]
slice_rhs 1 1 => rw [← id_comp (K[X].d i j)]
[GOAL]
case a
C : Type u_1
inst✝² : Category.{?u.336016, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
i j : ℕ
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) i j
| HomologicalComplex.d K[X] i j
case a
C : Type u_1
inst✝² : Category.{?u.336016, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
i j : ℕ
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) i j
| πSummand s (IndexSet.id (op [j]))
[PROOFSTEP]
rw [← id_comp (K[X].d i j)]
[GOAL]
case a
C : Type u_1
inst✝² : Category.{?u.336016, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
i j : ℕ
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) i j
| HomologicalComplex.d K[X] i j
case a
C : Type u_1
inst✝² : Category.{?u.336016, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
i j : ℕ
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) i j
| πSummand s (IndexSet.id (op [j]))
[PROOFSTEP]
rw [← id_comp (K[X].d i j)]
[GOAL]
case a
C : Type u_1
inst✝² : Category.{?u.336016, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
i j : ℕ
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) i j
| HomologicalComplex.d K[X] i j
case a
C : Type u_1
inst✝² : Category.{?u.336016, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
i j : ℕ
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) i j
| πSummand s (IndexSet.id (op [j]))
[PROOFSTEP]
rw [← id_comp (K[X].d i j)]
[GOAL]
C : Type u_1
inst✝² : Category.{?u.336016, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
i j : ℕ
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) i j
⊢ πSummand s (IndexSet.id (op [i])) ≫
      ιSummand s (IndexSet.id (op [i])) ≫ HomologicalComplex.d K[X] i j ≫ πSummand s (IndexSet.id (op [j])) =
    (𝟙 (HomologicalComplex.X K[X] i) ≫ HomologicalComplex.d K[X] i j) ≫ πSummand s (IndexSet.id (op [j]))
[PROOFSTEP]
erw [s.decomposition_id]
[GOAL]
C : Type u_1
inst✝² : Category.{?u.336016, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
i j : ℕ
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) i j
⊢ πSummand s (IndexSet.id (op [i])) ≫
      ιSummand s (IndexSet.id (op [i])) ≫ HomologicalComplex.d K[X] i j ≫ πSummand s (IndexSet.id (op [j])) =
    ((∑ A : IndexSet (op [i]), πSummand s A ≫ ιSummand s A) ≫ HomologicalComplex.d K[X] i j) ≫
      πSummand s (IndexSet.id (op [j]))
[PROOFSTEP]
rw [sum_comp, sum_comp, Finset.sum_eq_single (IndexSet.id (op [i])), assoc, assoc]
[GOAL]
case h₀
C : Type u_1
inst✝² : Category.{?u.336016, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
i j : ℕ
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) i j
⊢ ∀ (b : IndexSet (op [i])),
    b ∈ Finset.univ →
      b ≠ IndexSet.id (op [i]) →
        ((πSummand s b ≫ ιSummand s b) ≫ HomologicalComplex.d K[X] i j) ≫ πSummand s (IndexSet.id (op [j])) = 0
[PROOFSTEP]
intro A _ hA
[GOAL]
case h₀
C : Type u_1
inst✝² : Category.{?u.336016, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
i j : ℕ
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) i j
A : IndexSet (op [i])
a✝ : A ∈ Finset.univ
hA : A ≠ IndexSet.id (op [i])
⊢ ((πSummand s A ≫ ιSummand s A) ≫ HomologicalComplex.d K[X] i j) ≫ πSummand s (IndexSet.id (op [j])) = 0
[PROOFSTEP]
simp only [assoc, s.ιSummand_comp_d_comp_πSummand_eq_zero _ _ _ hA, comp_zero]
[GOAL]
case h₁
C : Type u_1
inst✝² : Category.{?u.336016, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
i j : ℕ
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) i j
⊢ ¬IndexSet.id (op [i]) ∈ Finset.univ →
    ((πSummand s (IndexSet.id (op [i])) ≫ ιSummand s (IndexSet.id (op [i]))) ≫ HomologicalComplex.d K[X] i j) ≫
        πSummand s (IndexSet.id (op [j])) =
      0
[PROOFSTEP]
simp only [Finset.mem_univ, not_true, IsEmpty.forall_iff]
[GOAL]
C : Type u_1
inst✝² : Category.{?u.336016, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
⊢ (HomologicalComplex.Hom.mk fun n => πSummand s (IndexSet.id (op [n]))) =
    (N₁.obj X).p ≫
      (HomologicalComplex.Hom.mk fun n => πSummand s (IndexSet.id (op [n]))) ≫
        ((toKaroubi (ChainComplex C ℕ)).obj (nondegComplex s)).p
[PROOFSTEP]
ext n
[GOAL]
case h
C : Type u_1
inst✝² : Category.{?u.336016, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
⊢ HomologicalComplex.Hom.f (HomologicalComplex.Hom.mk fun n => πSummand s (IndexSet.id (op [n]))) n =
    HomologicalComplex.Hom.f
      ((N₁.obj X).p ≫
        (HomologicalComplex.Hom.mk fun n => πSummand s (IndexSet.id (op [n]))) ≫
          ((toKaroubi (ChainComplex C ℕ)).obj (nondegComplex s)).p)
      n
[PROOFSTEP]
dsimp
[GOAL]
case h
C : Type u_1
inst✝² : Category.{?u.336016, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
⊢ πSummand s (IndexSet.id (op [n])) = HomologicalComplex.Hom.f PInfty n ≫ πSummand s (IndexSet.id (op [n])) ≫ 𝟙 (N s n)
[PROOFSTEP]
simp only [comp_id, PInfty_comp_πSummand_id]
[GOAL]
C : Type u_1
inst✝² : Category.{?u.336016, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
⊢ Karoubi.Hom.mk
        (HomologicalComplex.Hom.mk fun n => ιSummand s (IndexSet.id (op [n])) ≫ HomologicalComplex.Hom.f PInfty n) ≫
      Karoubi.Hom.mk (HomologicalComplex.Hom.mk fun n => πSummand s (IndexSet.id (op [n]))) =
    𝟙 ((toKaroubi (ChainComplex C ℕ)).obj (nondegComplex s))
[PROOFSTEP]
ext n
[GOAL]
case h.h
C : Type u_1
inst✝² : Category.{?u.336016, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
⊢ HomologicalComplex.Hom.f
      (Karoubi.Hom.mk
            (HomologicalComplex.Hom.mk fun n => ιSummand s (IndexSet.id (op [n])) ≫ HomologicalComplex.Hom.f PInfty n) ≫
          Karoubi.Hom.mk (HomologicalComplex.Hom.mk fun n => πSummand s (IndexSet.id (op [n])))).f
      n =
    HomologicalComplex.Hom.f (𝟙 ((toKaroubi (ChainComplex C ℕ)).obj (nondegComplex s))).f n
[PROOFSTEP]
simp only [assoc, PInfty_comp_πSummand_id, Karoubi.comp_f, HomologicalComplex.comp_f, ι_πSummand_eq_id]
[GOAL]
case h.h
C : Type u_1
inst✝² : Category.{?u.336016, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
⊢ 𝟙 (N s (SimplexCategory.len (IndexSet.id (op [n])).fst.unop)) =
    HomologicalComplex.Hom.f (𝟙 ((toKaroubi (ChainComplex C ℕ)).obj (nondegComplex s))).f n
[PROOFSTEP]
rfl
[GOAL]
C : Type u_1
inst✝² : Category.{?u.336016, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
⊢ Karoubi.Hom.mk (HomologicalComplex.Hom.mk fun n => πSummand s (IndexSet.id (op [n]))) ≫
      Karoubi.Hom.mk
        (HomologicalComplex.Hom.mk fun n => ιSummand s (IndexSet.id (op [n])) ≫ HomologicalComplex.Hom.f PInfty n) =
    𝟙 (N₁.obj X)
[PROOFSTEP]
ext n
[GOAL]
case h.h
C : Type u_1
inst✝² : Category.{?u.336016, u_1} C
inst✝¹ : HasFiniteCoproducts C
X : SimplicialObject C
s : Splitting X
inst✝ : Preadditive C
n : ℕ
⊢ HomologicalComplex.Hom.f
      (Karoubi.Hom.mk (HomologicalComplex.Hom.mk fun n => πSummand s (IndexSet.id (op [n]))) ≫
          Karoubi.Hom.mk
            (HomologicalComplex.Hom.mk fun n =>
              ιSummand s (IndexSet.id (op [n])) ≫ HomologicalComplex.Hom.f PInfty n)).f
      n =
    HomologicalComplex.Hom.f (𝟙 (N₁.obj X)).f n
[PROOFSTEP]
simp only [πSummand_comp_ιSummand_comp_PInfty_eq_PInfty, Karoubi.comp_f, HomologicalComplex.comp_f, N₁_obj_p,
  Karoubi.id_eq]
[GOAL]
C : Type u_1
inst✝² : Category.{?u.406470, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
S₁ S₂ : Split C
Φ : S₁ ⟶ S₂
i j : ℕ
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) i j
⊢ Hom.f Φ i ≫ HomologicalComplex.d ((fun S => Splitting.nondegComplex S.s) S₂) i j =
    HomologicalComplex.d ((fun S => Splitting.nondegComplex S.s) S₁) i j ≫ Hom.f Φ j
[PROOFSTEP]
dsimp
[GOAL]
C : Type u_1
inst✝² : Category.{?u.406470, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
S₁ S₂ : Split C
Φ : S₁ ⟶ S₂
i j : ℕ
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) i j
⊢ Hom.f Φ i ≫
      Splitting.ιSummand S₂.s (Splitting.IndexSet.id (op [i])) ≫
        HomologicalComplex.d K[S₂.X] i j ≫ Splitting.πSummand S₂.s (Splitting.IndexSet.id (op [j])) =
    (Splitting.ιSummand S₁.s (Splitting.IndexSet.id (op [i])) ≫
        HomologicalComplex.d K[S₁.X] i j ≫ Splitting.πSummand S₁.s (Splitting.IndexSet.id (op [j]))) ≫
      Hom.f Φ j
[PROOFSTEP]
erw [← ιSummand_naturality_symm_assoc Φ (Splitting.IndexSet.id (op [i])),
  ((alternatingFaceMapComplex C).map Φ.F).comm_assoc i j]
[GOAL]
C : Type u_1
inst✝² : Category.{?u.406470, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
S₁ S₂ : Split C
Φ : S₁ ⟶ S₂
i j : ℕ
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) i j
⊢ Splitting.ιSummand S₁.s (Splitting.IndexSet.id (op [i])) ≫
      HomologicalComplex.d ((alternatingFaceMapComplex C).obj S₁.X) i j ≫
        HomologicalComplex.Hom.f ((alternatingFaceMapComplex C).map Φ.F) j ≫
          Splitting.πSummand S₂.s (Splitting.IndexSet.id (op [j])) =
    (Splitting.ιSummand S₁.s (Splitting.IndexSet.id (op [i])) ≫
        HomologicalComplex.d K[S₁.X] i j ≫ Splitting.πSummand S₁.s (Splitting.IndexSet.id (op [j]))) ≫
      Hom.f Φ j
[PROOFSTEP]
simp only [assoc]
[GOAL]
C : Type u_1
inst✝² : Category.{?u.406470, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
S₁ S₂ : Split C
Φ : S₁ ⟶ S₂
i j : ℕ
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) i j
⊢ Splitting.ιSummand S₁.s (Splitting.IndexSet.id (op [i])) ≫
      HomologicalComplex.d ((alternatingFaceMapComplex C).obj S₁.X) i j ≫
        HomologicalComplex.Hom.f ((alternatingFaceMapComplex C).map Φ.F) j ≫
          Splitting.πSummand S₂.s (Splitting.IndexSet.id (op [j])) =
    Splitting.ιSummand S₁.s (Splitting.IndexSet.id (op [i])) ≫
      HomologicalComplex.d K[S₁.X] i j ≫ Splitting.πSummand S₁.s (Splitting.IndexSet.id (op [j])) ≫ Hom.f Φ j
[PROOFSTEP]
congr 2
[GOAL]
case e_a.e_a
C : Type u_1
inst✝² : Category.{?u.406470, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
S₁ S₂ : Split C
Φ : S₁ ⟶ S₂
i j : ℕ
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) i j
⊢ HomologicalComplex.Hom.f ((alternatingFaceMapComplex C).map Φ.F) j ≫
      Splitting.πSummand S₂.s (Splitting.IndexSet.id (op [j])) =
    Splitting.πSummand S₁.s (Splitting.IndexSet.id (op [j])) ≫ Hom.f Φ j
[PROOFSTEP]
apply S₁.s.hom_ext'
[GOAL]
case e_a.e_a.h
C : Type u_1
inst✝² : Category.{?u.406470, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
S₁ S₂ : Split C
Φ : S₁ ⟶ S₂
i j : ℕ
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) i j
⊢ ∀ (A : Splitting.IndexSet (op [j])),
    Splitting.ιSummand S₁.s A ≫
        HomologicalComplex.Hom.f ((alternatingFaceMapComplex C).map Φ.F) j ≫
          Splitting.πSummand S₂.s (Splitting.IndexSet.id (op [j])) =
      Splitting.ιSummand S₁.s A ≫ Splitting.πSummand S₁.s (Splitting.IndexSet.id (op [j])) ≫ Hom.f Φ j
[PROOFSTEP]
intro A
[GOAL]
case e_a.e_a.h
C : Type u_1
inst✝² : Category.{?u.406470, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
S₁ S₂ : Split C
Φ : S₁ ⟶ S₂
i j : ℕ
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) i j
A : Splitting.IndexSet (op [j])
⊢ Splitting.ιSummand S₁.s A ≫
      HomologicalComplex.Hom.f ((alternatingFaceMapComplex C).map Φ.F) j ≫
        Splitting.πSummand S₂.s (Splitting.IndexSet.id (op [j])) =
    Splitting.ιSummand S₁.s A ≫ Splitting.πSummand S₁.s (Splitting.IndexSet.id (op [j])) ≫ Hom.f Φ j
[PROOFSTEP]
dsimp [alternatingFaceMapComplex]
[GOAL]
case e_a.e_a.h
C : Type u_1
inst✝² : Category.{?u.406470, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
S₁ S₂ : Split C
Φ : S₁ ⟶ S₂
i j : ℕ
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) i j
A : Splitting.IndexSet (op [j])
⊢ Splitting.ιSummand S₁.s A ≫ NatTrans.app Φ.F (op [j]) ≫ Splitting.πSummand S₂.s (Splitting.IndexSet.id (op [j])) =
    Splitting.ιSummand S₁.s A ≫ Splitting.πSummand S₁.s (Splitting.IndexSet.id (op [j])) ≫ Hom.f Φ j
[PROOFSTEP]
erw [ιSummand_naturality_symm_assoc Φ A]
[GOAL]
case e_a.e_a.h
C : Type u_1
inst✝² : Category.{?u.406470, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
S₁ S₂ : Split C
Φ : S₁ ⟶ S₂
i j : ℕ
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) i j
A : Splitting.IndexSet (op [j])
⊢ Hom.f Φ (SimplexCategory.len A.fst.unop) ≫
      Splitting.ιSummand S₂.s A ≫ Splitting.πSummand S₂.s (Splitting.IndexSet.id (op [j])) =
    Splitting.ιSummand S₁.s A ≫ Splitting.πSummand S₁.s (Splitting.IndexSet.id (op [j])) ≫ Hom.f Φ j
[PROOFSTEP]
by_cases A.EqId
[GOAL]
case e_a.e_a.h
C : Type u_1
inst✝² : Category.{?u.406470, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
S₁ S₂ : Split C
Φ : S₁ ⟶ S₂
i j : ℕ
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) i j
A : Splitting.IndexSet (op [j])
⊢ Hom.f Φ (SimplexCategory.len A.fst.unop) ≫
      Splitting.ιSummand S₂.s A ≫ Splitting.πSummand S₂.s (Splitting.IndexSet.id (op [j])) =
    Splitting.ιSummand S₁.s A ≫ Splitting.πSummand S₁.s (Splitting.IndexSet.id (op [j])) ≫ Hom.f Φ j
[PROOFSTEP]
by_cases A.EqId
[GOAL]
case pos
C : Type u_1
inst✝² : Category.{?u.406470, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
S₁ S₂ : Split C
Φ : S₁ ⟶ S₂
i j : ℕ
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) i j
A : Splitting.IndexSet (op [j])
h : Splitting.IndexSet.EqId A
⊢ Hom.f Φ (SimplexCategory.len A.fst.unop) ≫
      Splitting.ιSummand S₂.s A ≫ Splitting.πSummand S₂.s (Splitting.IndexSet.id (op [j])) =
    Splitting.ιSummand S₁.s A ≫ Splitting.πSummand S₁.s (Splitting.IndexSet.id (op [j])) ≫ Hom.f Φ j
[PROOFSTEP]
dsimp at h
[GOAL]
case pos
C : Type u_1
inst✝² : Category.{?u.406470, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
S₁ S₂ : Split C
Φ : S₁ ⟶ S₂
i j : ℕ
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) i j
A : Splitting.IndexSet (op [j])
h : A = Splitting.IndexSet.id (op [j])
⊢ Hom.f Φ (SimplexCategory.len A.fst.unop) ≫
      Splitting.ιSummand S₂.s A ≫ Splitting.πSummand S₂.s (Splitting.IndexSet.id (op [j])) =
    Splitting.ιSummand S₁.s A ≫ Splitting.πSummand S₁.s (Splitting.IndexSet.id (op [j])) ≫ Hom.f Φ j
[PROOFSTEP]
subst h
[GOAL]
case pos
C : Type u_1
inst✝² : Category.{?u.406470, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
S₁ S₂ : Split C
Φ : S₁ ⟶ S₂
i j : ℕ
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) i j
⊢ Hom.f Φ (SimplexCategory.len (Splitting.IndexSet.id (op [j])).fst.unop) ≫
      Splitting.ιSummand S₂.s (Splitting.IndexSet.id (op [j])) ≫
        Splitting.πSummand S₂.s (Splitting.IndexSet.id (op [j])) =
    Splitting.ιSummand S₁.s (Splitting.IndexSet.id (op [j])) ≫
      Splitting.πSummand S₁.s (Splitting.IndexSet.id (op [j])) ≫ Hom.f Φ j
[PROOFSTEP]
simp only [Splitting.ι_πSummand_eq_id, comp_id, Splitting.ι_πSummand_eq_id_assoc]
[GOAL]
case pos
C : Type u_1
inst✝² : Category.{?u.406470, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
S₁ S₂ : Split C
Φ : S₁ ⟶ S₂
i j : ℕ
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) i j
⊢ Hom.f Φ (SimplexCategory.len (Splitting.IndexSet.id (op [j])).fst.unop) = Hom.f Φ j
[PROOFSTEP]
rfl
[GOAL]
case neg
C : Type u_1
inst✝² : Category.{?u.406470, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
S₁ S₂ : Split C
Φ : S₁ ⟶ S₂
i j : ℕ
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) i j
A : Splitting.IndexSet (op [j])
h : ¬Splitting.IndexSet.EqId A
⊢ Hom.f Φ (SimplexCategory.len A.fst.unop) ≫
      Splitting.ιSummand S₂.s A ≫ Splitting.πSummand S₂.s (Splitting.IndexSet.id (op [j])) =
    Splitting.ιSummand S₁.s A ≫ Splitting.πSummand S₁.s (Splitting.IndexSet.id (op [j])) ≫ Hom.f Φ j
[PROOFSTEP]
have h' : Splitting.IndexSet.id (op [j]) ≠ A := by
  rw [ne_comm]
  exact h
[GOAL]
C : Type u_1
inst✝² : Category.{?u.406470, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
S₁ S₂ : Split C
Φ : S₁ ⟶ S₂
i j : ℕ
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) i j
A : Splitting.IndexSet (op [j])
h : ¬Splitting.IndexSet.EqId A
⊢ Splitting.IndexSet.id (op [j]) ≠ A
[PROOFSTEP]
rw [ne_comm]
[GOAL]
C : Type u_1
inst✝² : Category.{?u.406470, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
S₁ S₂ : Split C
Φ : S₁ ⟶ S₂
i j : ℕ
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) i j
A : Splitting.IndexSet (op [j])
h : ¬Splitting.IndexSet.EqId A
⊢ A ≠ Splitting.IndexSet.id (op [j])
[PROOFSTEP]
exact h
[GOAL]
case neg
C : Type u_1
inst✝² : Category.{?u.406470, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
S₁ S₂ : Split C
Φ : S₁ ⟶ S₂
i j : ℕ
x✝ : ComplexShape.Rel (ComplexShape.down ℕ) i j
A : Splitting.IndexSet (op [j])
h : ¬Splitting.IndexSet.EqId A
h' : Splitting.IndexSet.id (op [j]) ≠ A
⊢ Hom.f Φ (SimplexCategory.len A.fst.unop) ≫
      Splitting.ιSummand S₂.s A ≫ Splitting.πSummand S₂.s (Splitting.IndexSet.id (op [j])) =
    Splitting.ιSummand S₁.s A ≫ Splitting.πSummand S₁.s (Splitting.IndexSet.id (op [j])) ≫ Hom.f Φ j
[PROOFSTEP]
rw [S₁.s.ι_πSummand_eq_zero_assoc _ _ h', S₂.s.ι_πSummand_eq_zero _ _ h', zero_comp, comp_zero]
[GOAL]
C : Type u_1
inst✝² : Category.{?u.449707, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
X✝ Y✝ : Split C
Φ : X✝ ⟶ Y✝
⊢ (nondegComplexFunctor ⋙ toKaroubi (ChainComplex C ℕ)).map Φ ≫
      ((fun S => Splitting.toKaroubiNondegComplexIsoN₁ S.s) Y✝).hom =
    ((fun S => Splitting.toKaroubiNondegComplexIsoN₁ S.s) X✝).hom ≫ (forget C ⋙ N₁).map Φ
[PROOFSTEP]
ext n
[GOAL]
case h.h
C : Type u_1
inst✝² : Category.{?u.449707, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
X✝ Y✝ : Split C
Φ : X✝ ⟶ Y✝
n : ℕ
⊢ HomologicalComplex.Hom.f
      ((nondegComplexFunctor ⋙ toKaroubi (ChainComplex C ℕ)).map Φ ≫
          ((fun S => Splitting.toKaroubiNondegComplexIsoN₁ S.s) Y✝).hom).f
      n =
    HomologicalComplex.Hom.f (((fun S => Splitting.toKaroubiNondegComplexIsoN₁ S.s) X✝).hom ≫ (forget C ⋙ N₁).map Φ).f n
[PROOFSTEP]
dsimp
[GOAL]
case h.h
C : Type u_1
inst✝² : Category.{?u.449707, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
X✝ Y✝ : Split C
Φ : X✝ ⟶ Y✝
n : ℕ
⊢ Hom.f Φ n ≫ Splitting.ιSummand Y✝.s (Splitting.IndexSet.id (op [n])) ≫ HomologicalComplex.Hom.f PInfty n =
    (Splitting.ιSummand X✝.s (Splitting.IndexSet.id (op [n])) ≫ HomologicalComplex.Hom.f PInfty n) ≫
      HomologicalComplex.Hom.f PInfty n ≫ NatTrans.app Φ.F (op [n])
[PROOFSTEP]
simp only [Karoubi.comp_f, toKaroubi_map_f, HomologicalComplex.comp_f, nondegComplexFunctor_map_f,
  Splitting.toKaroubiNondegComplexIsoN₁_hom_f_f, N₁_map_f, AlternatingFaceMapComplex.map_f, assoc, PInfty_f_idem_assoc]
[GOAL]
case h.h
C : Type u_1
inst✝² : Category.{?u.449707, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
X✝ Y✝ : Split C
Φ : X✝ ⟶ Y✝
n : ℕ
⊢ Hom.f Φ n ≫ Splitting.ιSummand Y✝.s (Splitting.IndexSet.id (op [n])) ≫ HomologicalComplex.Hom.f PInfty n =
    Splitting.ιSummand X✝.s (Splitting.IndexSet.id (op [n])) ≫
      HomologicalComplex.Hom.f PInfty n ≫ NatTrans.app Φ.F (op [n])
[PROOFSTEP]
erw [← Split.ιSummand_naturality_symm_assoc Φ (Splitting.IndexSet.id (op [n]))]
[GOAL]
case h.h
C : Type u_1
inst✝² : Category.{?u.449707, u_1} C
inst✝¹ : Preadditive C
inst✝ : HasFiniteCoproducts C
X✝ Y✝ : Split C
Φ : X✝ ⟶ Y✝
n : ℕ
⊢ Splitting.ιSummand X✝.s (Splitting.IndexSet.id (op [n])) ≫
      NatTrans.app Φ.F (op [n]) ≫ HomologicalComplex.Hom.f PInfty n =
    Splitting.ιSummand X✝.s (Splitting.IndexSet.id (op [n])) ≫
      HomologicalComplex.Hom.f PInfty n ≫ NatTrans.app Φ.F (op [n])
[PROOFSTEP]
rw [PInfty_f_naturality]


[GOAL]
⊢ 1 = 1
[PROOFSTEP]
sleep_heartbeats 1000
[GOAL]
⊢ 1 = 1
[PROOFSTEP]
rfl