Theorem: AlgebraicTopology.DoldKan.PInfty_comp_map_mono_eq_zero
File: Mathlib/AlgebraicTopology/DoldKan/NCompGamma.lean

tactic: induction' Δ' using SimplexCategory.rec with m
state_before: C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
n : ℕ
Δ' : SimplexCategory
i : Δ' ⟶ [n]
hi : Mono i
h₁ : len Δ' ≠ n
h₂ : ¬Isδ₀ i
⊢ HomologicalComplex.Hom.f PInfty n ≫ X.map i.op = 0

tactic: obtain ⟨k, hk⟩ := Nat.exists_eq_add_of_lt (len_lt_of_mono i fun h => by
      rw [← h] at h₁
      exact h₁ rfl)
state_before: case h
C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
n : ℕ
Δ' : SimplexCategory
i✝ : Δ' ⟶ [n]
hi✝ : Mono i✝
h₁✝ : len Δ' ≠ n
h₂✝ : ¬Isδ₀ i✝
m : ℕ
i : [m] ⟶ [n]
hi : Mono i
h₁ : len [m] ≠ n
h₂ : ¬Isδ₀ i
⊢ HomologicalComplex.Hom.f PInfty n ≫ X.map i.op = 0

tactic: simp only [len_mk] at hk
state_before: case h.intro
C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
n : ℕ
Δ' : SimplexCategory
i✝ : Δ' ⟶ [n]
hi✝ : Mono i✝
h₁✝ : len Δ' ≠ n
h₂✝ : ¬Isδ₀ i✝
m : ℕ
i : [m] ⟶ [n]
hi : Mono i
h₁ : len [m] ≠ n
h₂ : ¬Isδ₀ i
k : ℕ
hk : len [n] = len [m] + k + 1
⊢ HomologicalComplex.Hom.f PInfty n ≫ X.map i.op = 0

tactic: rcases k with _|k
state_before: case h.intro
C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
n : ℕ
Δ' : SimplexCategory
i✝ : Δ' ⟶ [n]
hi✝ : Mono i✝
h₁✝ : len Δ' ≠ n
h₂✝ : ¬Isδ₀ i✝
m : ℕ
i : [m] ⟶ [n]
hi : Mono i
h₁ : len [m] ≠ n
h₂ : ¬Isδ₀ i
k : ℕ
hk : n = m + k + 1
⊢ HomologicalComplex.Hom.f PInfty n ≫ X.map i.op = 0

tactic: rw [← h] at h₁
state_before: C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
n : ℕ
Δ' : SimplexCategory
i✝ : Δ' ⟶ [n]
hi✝ : Mono i✝
h₁✝ : len Δ' ≠ n
h₂✝ : ¬Isδ₀ i✝
m : ℕ
i : [m] ⟶ [n]
hi : Mono i
h₁ : len [m] ≠ n
h₂ : ¬Isδ₀ i
h : [n] = [m]
⊢ False

tactic: exact h₁ rfl
state_before: C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
n : ℕ
Δ' : SimplexCategory
i✝ : Δ' ⟶ [n]
hi✝ : Mono i✝
h₁✝ : len Δ' ≠ n
h₂✝ : ¬Isδ₀ i✝
m : ℕ
i : [m] ⟶ [n]
hi : Mono i
h₁ : len [n] ≠ n
h₂ : ¬Isδ₀ i
h : [n] = [m]
⊢ False

tactic: change n = m + 1 at hk
state_before: case h.intro.zero
C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
n : ℕ
Δ' : SimplexCategory
i✝ : Δ' ⟶ [n]
hi✝ : Mono i✝
h₁✝ : len Δ' ≠ n
h₂✝ : ¬Isδ₀ i✝
m : ℕ
i : [m] ⟶ [n]
hi : Mono i
h₁ : len [m] ≠ n
h₂ : ¬Isδ₀ i
hk : n = m + Nat.zero + 1
⊢ HomologicalComplex.Hom.f PInfty n ≫ X.map i.op = 0

tactic: subst hk
state_before: case h.intro.zero
C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
n : ℕ
Δ' : SimplexCategory
i✝ : Δ' ⟶ [n]
hi✝ : Mono i✝
h₁✝ : len Δ' ≠ n
h₂✝ : ¬Isδ₀ i✝
m : ℕ
i : [m] ⟶ [n]
hi : Mono i
h₁ : len [m] ≠ n
h₂ : ¬Isδ₀ i
hk : n = m + 1
⊢ HomologicalComplex.Hom.f PInfty n ≫ X.map i.op = 0

tactic: obtain ⟨j, rfl⟩ := eq_δ_of_mono i
state_before: case h.intro.zero
C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
Δ' : SimplexCategory
m : ℕ
i✝ : Δ' ⟶ [m + 1]
hi✝ : Mono i✝
h₁✝ : len Δ' ≠ m + 1
h₂✝ : ¬Isδ₀ i✝
i : [m] ⟶ [m + 1]
hi : Mono i
h₁ : len [m] ≠ m + 1
h₂ : ¬Isδ₀ i
⊢ HomologicalComplex.Hom.f PInfty (m + 1) ≫ X.map i.op = 0

tactic: rw [Isδ₀.iff] at h₂
state_before: case h.intro.zero.intro
C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
Δ' : SimplexCategory
m : ℕ
i : Δ' ⟶ [m + 1]
hi✝ : Mono i
h₁✝ : len Δ' ≠ m + 1
h₂✝ : ¬Isδ₀ i
h₁ : len [m] ≠ m + 1
j : Fin (m + 2)
hi : Mono (SimplexCategory.δ j)
h₂ : ¬Isδ₀ (SimplexCategory.δ j)
⊢ HomologicalComplex.Hom.f PInfty (m + 1) ≫ X.map (SimplexCategory.δ j).op = 0

tactic: have h₃ : 1 ≤ (j : ℕ) := by
  by_contra h
  exact h₂ (by simpa only [Fin.ext_iff, not_le, Nat.lt_one_iff] using h)
state_before: case h.intro.zero.intro
C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
Δ' : SimplexCategory
m : ℕ
i : Δ' ⟶ [m + 1]
hi✝ : Mono i
h₁✝ : len Δ' ≠ m + 1
h₂✝ : ¬Isδ₀ i
h₁ : len [m] ≠ m + 1
j : Fin (m + 2)
hi : Mono (SimplexCategory.δ j)
h₂ : ¬j = 0
⊢ HomologicalComplex.Hom.f PInfty (m + 1) ≫ X.map (SimplexCategory.δ j).op = 0

tactic: exact (HigherFacesVanish.of_P (m + 1) m).comp_δ_eq_zero j h₂ (by linarith)
state_before: case h.intro.zero.intro
C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
Δ' : SimplexCategory
m : ℕ
i : Δ' ⟶ [m + 1]
hi✝ : Mono i
h₁✝ : len Δ' ≠ m + 1
h₂✝ : ¬Isδ₀ i
h₁ : len [m] ≠ m + 1
j : Fin (m + 2)
hi : Mono (SimplexCategory.δ j)
h₂ : ¬j = 0
h₃ : 1 ≤ ↑j
⊢ HomologicalComplex.Hom.f PInfty (m + 1) ≫ X.map (SimplexCategory.δ j).op = 0

tactic: by_contra h
state_before: C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
Δ' : SimplexCategory
m : ℕ
i : Δ' ⟶ [m + 1]
hi✝ : Mono i
h₁✝ : len Δ' ≠ m + 1
h₂✝ : ¬Isδ₀ i
h₁ : len [m] ≠ m + 1
j : Fin (m + 2)
hi : Mono (SimplexCategory.δ j)
h₂ : ¬j = 0
⊢ 1 ≤ ↑j

tactic: exact h₂ (by simpa only [Fin.ext_iff, not_le, Nat.lt_one_iff] using h)
state_before: C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
Δ' : SimplexCategory
m : ℕ
i : Δ' ⟶ [m + 1]
hi✝ : Mono i
h₁✝ : len Δ' ≠ m + 1
h₂✝ : ¬Isδ₀ i
h₁ : len [m] ≠ m + 1
j : Fin (m + 2)
hi : Mono (SimplexCategory.δ j)
h₂ : ¬j = 0
h : ¬1 ≤ ↑j
⊢ False

tactic: simpa only [Fin.ext_iff, not_le, Nat.lt_one_iff] using h
state_before: C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
Δ' : SimplexCategory
m : ℕ
i : Δ' ⟶ [m + 1]
hi✝ : Mono i
h₁✝ : len Δ' ≠ m + 1
h₂✝ : ¬Isδ₀ i
h₁ : len [m] ≠ m + 1
j : Fin (m + 2)
hi : Mono (SimplexCategory.δ j)
h₂ : ¬j = 0
h : ¬1 ≤ ↑j
⊢ j = 0

tactic: linarith
state_before: C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
Δ' : SimplexCategory
m : ℕ
i : Δ' ⟶ [m + 1]
hi✝ : Mono i
h₁✝ : len Δ' ≠ m + 1
h₂✝ : ¬Isδ₀ i
h₁ : len [m] ≠ m + 1
j : Fin (m + 2)
hi : Mono (SimplexCategory.δ j)
h₂ : ¬j = 0
h₃ : 1 ≤ ↑j
⊢ m + 2 ≤ ↑j + (m + 1)

tactic: simp only [Nat.succ_eq_add_one, ← add_assoc] at hk
state_before: case h.intro.succ
C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
n : ℕ
Δ' : SimplexCategory
i✝ : Δ' ⟶ [n]
hi✝ : Mono i✝
h₁✝ : len Δ' ≠ n
h₂✝ : ¬Isδ₀ i✝
m : ℕ
i : [m] ⟶ [n]
hi : Mono i
h₁ : len [m] ≠ n
h₂ : ¬Isδ₀ i
k : ℕ
hk : n = m + Nat.succ k + 1
⊢ HomologicalComplex.Hom.f PInfty n ≫ X.map i.op = 0

tactic: clear h₂ hi
state_before: case h.intro.succ
C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
n : ℕ
Δ' : SimplexCategory
i✝ : Δ' ⟶ [n]
hi✝ : Mono i✝
h₁✝ : len Δ' ≠ n
h₂✝ : ¬Isδ₀ i✝
m : ℕ
i : [m] ⟶ [n]
hi : Mono i
h₁ : len [m] ≠ n
h₂ : ¬Isδ₀ i
k : ℕ
hk : n = m + k + 1 + 1
⊢ HomologicalComplex.Hom.f PInfty n ≫ X.map i.op = 0

tactic: subst hk
state_before: case h.intro.succ
C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
n : ℕ
Δ' : SimplexCategory
i✝ : Δ' ⟶ [n]
hi : Mono i✝
h₁✝ : len Δ' ≠ n
h₂ : ¬Isδ₀ i✝
m : ℕ
i : [m] ⟶ [n]
h₁ : len [m] ≠ n
k : ℕ
hk : n = m + k + 1 + 1
⊢ HomologicalComplex.Hom.f PInfty n ≫ X.map i.op = 0

tactic: obtain ⟨j₁ : Fin (_ + 1), i, rfl⟩ :=
  eq_comp_δ_of_not_surjective i fun h => by
    have h' := len_le_of_epi (SimplexCategory.epi_iff_surjective.2 h)
    dsimp at h'
    linarith
state_before: case h.intro.succ
C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
Δ' : SimplexCategory
m k : ℕ
i✝ : Δ' ⟶ [m + k + 1 + 1]
hi : Mono i✝
h₁✝ : len Δ' ≠ m + k + 1 + 1
h₂ : ¬Isδ₀ i✝
i : [m] ⟶ [m + k + 1 + 1]
h₁ : len [m] ≠ m + k + 1 + 1
⊢ HomologicalComplex.Hom.f PInfty (m + k + 1 + 1) ≫ X.map i.op = 0

tactic: obtain ⟨j₂, i, rfl⟩ :=
  eq_comp_δ_of_not_surjective i fun h => by
    have h' := len_le_of_epi (SimplexCategory.epi_iff_surjective.2 h)
    dsimp at h'
    linarith
state_before: case h.intro.succ.intro.intro
C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
Δ' : SimplexCategory
m k : ℕ
i✝ : Δ' ⟶ [m + k + 1 + 1]
hi : Mono i✝
h₁✝ : len Δ' ≠ m + k + 1 + 1
h₂ : ¬Isδ₀ i✝
h₁ : len [m] ≠ m + k + 1 + 1
j₁ : Fin (m + k + 2 + 1)
i : [m] ⟶ [m + k + 1]
⊢ HomologicalComplex.Hom.f PInfty (m + k + 1 + 1) ≫ X.map (i ≫ SimplexCategory.δ j₁).op = 0

tactic: by_cases hj₁ : j₁ = 0
state_before: case h.intro.succ.intro.intro.intro.intro
C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
Δ' : SimplexCategory
m k : ℕ
i✝ : Δ' ⟶ [m + k + 1 + 1]
hi : Mono i✝
h₁✝ : len Δ' ≠ m + k + 1 + 1
h₂ : ¬Isδ₀ i✝
h₁ : len [m] ≠ m + k + 1 + 1
j₁ : Fin (m + k + 2 + 1)
j₂ : Fin (m + k + 2)
i : [m] ⟶ [m + k]
⊢ HomologicalComplex.Hom.f PInfty (m + k + 1 + 1) ≫ X.map ((i ≫ SimplexCategory.δ j₂) ≫ SimplexCategory.δ j₁).op = 0

tactic: . subst hj₁
  rw [assoc, ← SimplexCategory.δ_comp_δ'' (Fin.zero_le _)]
  simp only [op_comp, X.map_comp, assoc, PInfty_f]
  erw [(HigherFacesVanish.of_P _ _).comp_δ_eq_zero_assoc _ j₂.succ_ne_zero, zero_comp]
  simp only [Nat.succ_eq_add_one, Nat.add, Fin.succ]
  linarith
state_before: case pos
C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
Δ' : SimplexCategory
m k : ℕ
i✝ : Δ' ⟶ [m + k + 1 + 1]
hi : Mono i✝
h₁✝ : len Δ' ≠ m + k + 1 + 1
h₂ : ¬Isδ₀ i✝
h₁ : len [m] ≠ m + k + 1 + 1
j₁ : Fin (m + k + 2 + 1)
j₂ : Fin (m + k + 2)
i : [m] ⟶ [m + k]
hj₁ : j₁ = 0
⊢ HomologicalComplex.Hom.f PInfty (m + k + 1 + 1) ≫ X.map ((i ≫ SimplexCategory.δ j₂) ≫ SimplexCategory.δ j₁).op = 0

case neg
C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
Δ' : SimplexCategory
m k : ℕ
i✝ : Δ' ⟶ [m + k + 1 + 1]
hi : Mono i✝
h₁✝ : len Δ' ≠ m + k + 1 + 1
h₂ : ¬Isδ₀ i✝
h₁ : len [m] ≠ m + k + 1 + 1
j₁ : Fin (m + k + 2 + 1)
j₂ : Fin (m + k + 2)
i : [m] ⟶ [m + k]
hj₁ : ¬j₁ = 0
⊢ HomologicalComplex.Hom.f PInfty (m + k + 1 + 1) ≫ X.map ((i ≫ SimplexCategory.δ j₂) ≫ SimplexCategory.δ j₁).op = 0

tactic: have h' := len_le_of_epi (SimplexCategory.epi_iff_surjective.2 h)
state_before: C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
Δ' : SimplexCategory
m k : ℕ
i✝ : Δ' ⟶ [m + k + 1 + 1]
hi : Mono i✝
h₁✝ : len Δ' ≠ m + k + 1 + 1
h₂ : ¬Isδ₀ i✝
i : [m] ⟶ [m + k + 1 + 1]
h₁ : len [m] ≠ m + k + 1 + 1
h : Function.Surjective ↑(Hom.toOrderHom i)
⊢ False

tactic: dsimp at h'
state_before: C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
Δ' : SimplexCategory
m k : ℕ
i✝ : Δ' ⟶ [m + k + 1 + 1]
hi : Mono i✝
h₁✝ : len Δ' ≠ m + k + 1 + 1
h₂ : ¬Isδ₀ i✝
i : [m] ⟶ [m + k + 1 + 1]
h₁ : len [m] ≠ m + k + 1 + 1
h : Function.Surjective ↑(Hom.toOrderHom i)
h' : len [m + k + 1 + 1] ≤ len [m]
⊢ False

tactic: linarith
state_before: C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
Δ' : SimplexCategory
m k : ℕ
i✝ : Δ' ⟶ [m + k + 1 + 1]
hi : Mono i✝
h₁✝ : len Δ' ≠ m + k + 1 + 1
h₂ : ¬Isδ₀ i✝
i : [m] ⟶ [m + k + 1 + 1]
h₁ : len [m] ≠ m + k + 1 + 1
h : Function.Surjective ↑(Hom.toOrderHom i)
h' : m + k + 1 + 1 ≤ m
⊢ False

tactic: have h' := len_le_of_epi (SimplexCategory.epi_iff_surjective.2 h)
state_before: C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
Δ' : SimplexCategory
m k : ℕ
i✝ : Δ' ⟶ [m + k + 1 + 1]
hi : Mono i✝
h₁✝ : len Δ' ≠ m + k + 1 + 1
h₂ : ¬Isδ₀ i✝
h₁ : len [m] ≠ m + k + 1 + 1
j₁ : Fin (m + k + 2 + 1)
i : [m] ⟶ [m + k + 1]
h : Function.Surjective ↑(Hom.toOrderHom i)
⊢ False

tactic: dsimp at h'
state_before: C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
Δ' : SimplexCategory
m k : ℕ
i✝ : Δ' ⟶ [m + k + 1 + 1]
hi : Mono i✝
h₁✝ : len Δ' ≠ m + k + 1 + 1
h₂ : ¬Isδ₀ i✝
h₁ : len [m] ≠ m + k + 1 + 1
j₁ : Fin (m + k + 2 + 1)
i : [m] ⟶ [m + k + 1]
h : Function.Surjective ↑(Hom.toOrderHom i)
h' : len [m + k + 1] ≤ len [m]
⊢ False

tactic: linarith
state_before: C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
Δ' : SimplexCategory
m k : ℕ
i✝ : Δ' ⟶ [m + k + 1 + 1]
hi : Mono i✝
h₁✝ : len Δ' ≠ m + k + 1 + 1
h₂ : ¬Isδ₀ i✝
h₁ : len [m] ≠ m + k + 1 + 1
j₁ : Fin (m + k + 2 + 1)
i : [m] ⟶ [m + k + 1]
h : Function.Surjective ↑(Hom.toOrderHom i)
h' : m + k + 1 ≤ m
⊢ False

tactic: subst hj₁
state_before: case pos
C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
Δ' : SimplexCategory
m k : ℕ
i✝ : Δ' ⟶ [m + k + 1 + 1]
hi : Mono i✝
h₁✝ : len Δ' ≠ m + k + 1 + 1
h₂ : ¬Isδ₀ i✝
h₁ : len [m] ≠ m + k + 1 + 1
j₁ : Fin (m + k + 2 + 1)
j₂ : Fin (m + k + 2)
i : [m] ⟶ [m + k]
hj₁ : j₁ = 0
⊢ HomologicalComplex.Hom.f PInfty (m + k + 1 + 1) ≫ X.map ((i ≫ SimplexCategory.δ j₂) ≫ SimplexCategory.δ j₁).op = 0

tactic: rw [assoc, ← SimplexCategory.δ_comp_δ'' (Fin.zero_le _)]
state_before: case pos
C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
Δ' : SimplexCategory
m k : ℕ
i✝ : Δ' ⟶ [m + k + 1 + 1]
hi : Mono i✝
h₁✝ : len Δ' ≠ m + k + 1 + 1
h₂ : ¬Isδ₀ i✝
h₁ : len [m] ≠ m + k + 1 + 1
j₂ : Fin (m + k + 2)
i : [m] ⟶ [m + k]
⊢ HomologicalComplex.Hom.f PInfty (m + k + 1 + 1) ≫ X.map ((i ≫ SimplexCategory.δ j₂) ≫ SimplexCategory.δ 0).op = 0

tactic: simp only [op_comp, X.map_comp, assoc, PInfty_f]
state_before: case pos
C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
Δ' : SimplexCategory
m k : ℕ
i✝ : Δ' ⟶ [m + k + 1 + 1]
hi : Mono i✝
h₁✝ : len Δ' ≠ m + k + 1 + 1
h₂ : ¬Isδ₀ i✝
h₁ : len [m] ≠ m + k + 1 + 1
j₂ : Fin (m + k + 2)
i : [m] ⟶ [m + k]
⊢ HomologicalComplex.Hom.f PInfty (m + k + 1 + 1) ≫
      X.map (i ≫ SimplexCategory.δ (Fin.castLT 0 (_ : ↑0 < m + k + 2)) ≫ SimplexCategory.δ (Fin.succ j₂)).op =
    0

tactic: erw [(HigherFacesVanish.of_P _ _).comp_δ_eq_zero_assoc _ j₂.succ_ne_zero, zero_comp]
state_before: case pos
C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
Δ' : SimplexCategory
m k : ℕ
i✝ : Δ' ⟶ [m + k + 1 + 1]
hi : Mono i✝
h₁✝ : len Δ' ≠ m + k + 1 + 1
h₂ : ¬Isδ₀ i✝
h₁ : len [m] ≠ m + k + 1 + 1
j₂ : Fin (m + k + 2)
i : [m] ⟶ [m + k]
⊢ HomologicalComplex.Hom.f (P (m + k + 1 + 1)) (m + k + 1 + 1) ≫
      X.map (SimplexCategory.δ (Fin.succ j₂)).op ≫
        X.map (SimplexCategory.δ (Fin.castLT 0 (_ : ↑0 < m + k + 2))).op ≫ X.map i.op =
    0

tactic: simp only [Nat.succ_eq_add_one, Nat.add, Fin.succ]
state_before: case pos.hj₂
C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
Δ' : SimplexCategory
m k : ℕ
i✝ : Δ' ⟶ [m + k + 1 + 1]
hi : Mono i✝
h₁✝ : len Δ' ≠ m + k + 1 + 1
h₂ : ¬Isδ₀ i✝
h₁ : len [m] ≠ m + k + 1 + 1
j₂ : Fin (m + k + 2)
i : [m] ⟶ [m + k]
⊢ m + k + 1 + 2 ≤ ↑(Fin.succ j₂) + (m + k + 1 + 1)

tactic: linarith
state_before: case pos.hj₂
C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
Δ' : SimplexCategory
m k : ℕ
i✝ : Δ' ⟶ [m + k + 1 + 1]
hi : Mono i✝
h₁✝ : len Δ' ≠ m + k + 1 + 1
h₂ : ¬Isδ₀ i✝
h₁ : len [m] ≠ m + k + 1 + 1
j₂ : Fin (m + k + 2)
i : [m] ⟶ [m + k]
⊢ m + k + 1 + 2 ≤ ↑j₂ + 1 + (m + k + 1 + 1)

tactic: simp only [op_comp, X.map_comp, assoc, PInfty_f]
state_before: case neg
C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
Δ' : SimplexCategory
m k : ℕ
i✝ : Δ' ⟶ [m + k + 1 + 1]
hi : Mono i✝
h₁✝ : len Δ' ≠ m + k + 1 + 1
h₂ : ¬Isδ₀ i✝
h₁ : len [m] ≠ m + k + 1 + 1
j₁ : Fin (m + k + 2 + 1)
j₂ : Fin (m + k + 2)
i : [m] ⟶ [m + k]
hj₁ : ¬j₁ = 0
⊢ HomologicalComplex.Hom.f PInfty (m + k + 1 + 1) ≫ X.map ((i ≫ SimplexCategory.δ j₂) ≫ SimplexCategory.δ j₁).op = 0

tactic: erw [(HigherFacesVanish.of_P _ _).comp_δ_eq_zero_assoc _ hj₁, zero_comp]
state_before: case neg
C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
Δ' : SimplexCategory
m k : ℕ
i✝ : Δ' ⟶ [m + k + 1 + 1]
hi : Mono i✝
h₁✝ : len Δ' ≠ m + k + 1 + 1
h₂ : ¬Isδ₀ i✝
h₁ : len [m] ≠ m + k + 1 + 1
j₁ : Fin (m + k + 2 + 1)
j₂ : Fin (m + k + 2)
i : [m] ⟶ [m + k]
hj₁ : ¬j₁ = 0
⊢ HomologicalComplex.Hom.f (P (m + k + 1 + 1)) (m + k + 1 + 1) ≫
      X.map (SimplexCategory.δ j₁).op ≫ X.map (SimplexCategory.δ j₂).op ≫ X.map i.op =
    0

tactic: by_contra
state_before: case neg.hj₂
C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
Δ' : SimplexCategory
m k : ℕ
i✝ : Δ' ⟶ [m + k + 1 + 1]
hi : Mono i✝
h₁✝ : len Δ' ≠ m + k + 1 + 1
h₂ : ¬Isδ₀ i✝
h₁ : len [m] ≠ m + k + 1 + 1
j₁ : Fin (m + k + 2 + 1)
j₂ : Fin (m + k + 2)
i : [m] ⟶ [m + k]
hj₁ : ¬j₁ = 0
⊢ m + k + 1 + 2 ≤ ↑j₁ + (m + k + 1 + 1)

tactic: exact hj₁ (by simp only [Fin.ext_iff, Fin.val_zero] ; linarith)
state_before: case neg.hj₂
C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
Δ' : SimplexCategory
m k : ℕ
i✝ : Δ' ⟶ [m + k + 1 + 1]
hi : Mono i✝
h₁✝ : len Δ' ≠ m + k + 1 + 1
h₂ : ¬Isδ₀ i✝
h₁ : len [m] ≠ m + k + 1 + 1
j₁ : Fin (m + k + 2 + 1)
j₂ : Fin (m + k + 2)
i : [m] ⟶ [m + k]
hj₁ : ¬j₁ = 0
x✝ : ¬m + k + 1 + 2 ≤ ↑j₁ + (m + k + 1 + 1)
⊢ False

tactic: simp only [Fin.ext_iff, Fin.val_zero]
state_before: C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
Δ' : SimplexCategory
m k : ℕ
i✝ : Δ' ⟶ [m + k + 1 + 1]
hi : Mono i✝
h₁✝ : len Δ' ≠ m + k + 1 + 1
h₂ : ¬Isδ₀ i✝
h₁ : len [m] ≠ m + k + 1 + 1
j₁ : Fin (m + k + 2 + 1)
j₂ : Fin (m + k + 2)
i : [m] ⟶ [m + k]
hj₁ : ¬j₁ = 0
x✝ : ¬m + k + 1 + 2 ≤ ↑j₁ + (m + k + 1 + 1)
⊢ j₁ = 0

tactic: linarith
state_before: C : Type u_2
inst✝¹ : Category C
inst✝ : Preadditive C
X : SimplicialObject C
Δ' : SimplexCategory
m k : ℕ
i✝ : Δ' ⟶ [m + k + 1 + 1]
hi : Mono i✝
h₁✝ : len Δ' ≠ m + k + 1 + 1
h₂ : ¬Isδ₀ i✝
h₁ : len [m] ≠ m + k + 1 + 1
j₁ : Fin (m + k + 2 + 1)
j₂ : Fin (m + k + 2)
i : [m] ⟶ [m + k]
hj₁ : ¬j₁ = 0
x✝ : ¬m + k + 1 + 2 ≤ ↑j₁ + (m + k + 1 + 1)
⊢ ↑j₁ = 0