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_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
n : ℕ
Δ' : SimplexCategory
i : Δ' ⟶ [n]
hi : Mono i
h₁ : Δ'.len ≠ n
h₂ : ¬Isδ₀ i
⊢ PInfty.f n ≫ X.map i.op = 0
state_after: case h
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
n m : ℕ
i : [m] ⟶ [n]
hi : Mono i
h₁ : [m].len ≠ n
h₂ : ¬Isδ₀ i
⊢ PInfty.f 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_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
n m : ℕ
i : [m] ⟶ [n]
hi : Mono i
h₁ : [m].len ≠ n
h₂ : ¬Isδ₀ i
⊢ PInfty.f n ≫ X.map i.op = 0
state_after: case h.intro
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
n m : ℕ
i : [m] ⟶ [n]
hi : Mono i
h₁ : [m].len ≠ n
h₂ : ¬Isδ₀ i
k : ℕ
hk : [n].len = [m].len + k + 1
⊢ PInfty.f n ≫ X.map i.op = 0

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

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

case h.intro.succ
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
n m : ℕ
i : [m] ⟶ [n]
hi : Mono i
h₁ : [m].len ≠ n
h₂ : ¬Isδ₀ i
k : ℕ
hk : n = m + (k + 1) + 1
⊢ PInfty.f n ≫ X.map i.op = 0

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

tactic: exact h₁ rfl
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
n m : ℕ
i : [m] ⟶ [n]
hi : Mono i
h₁ : [n].len ≠ n
h₂ : ¬Isδ₀ i
h : [n] = [m]
⊢ False
state_after: no goals

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

tactic: subst hk
state_before: case h.intro.zero
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
n m : ℕ
i : [m] ⟶ [n]
hi : Mono i
h₁ : [m].len ≠ n
h₂ : ¬Isδ₀ i
hk : n = m + 1
⊢ PInfty.f n ≫ X.map i.op = 0
state_after: case h.intro.zero
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m : ℕ
i : [m] ⟶ [m + 1]
hi : Mono i
h₁ : [m].len ≠ m + 1
h₂ : ¬Isδ₀ i
⊢ PInfty.f (m + 1) ≫ X.map i.op = 0

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

tactic: rw [Isδ₀.iff] at h₂
state_before: case h.intro.zero.intro
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m : ℕ
h₁ : [m].len ≠ m + 1
j : Fin (m + 2)
hi : Mono (SimplexCategory.δ j)
h₂ : ¬Isδ₀ (SimplexCategory.δ j)
⊢ PInfty.f (m + 1) ≫ X.map (SimplexCategory.δ j).op = 0
state_after: case h.intro.zero.intro
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m : ℕ
h₁ : [m].len ≠ m + 1
j : Fin (m + 2)
hi : Mono (SimplexCategory.δ j)
h₂ : ¬j = 0
⊢ PInfty.f (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_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m : ℕ
h₁ : [m].len ≠ m + 1
j : Fin (m + 2)
hi : Mono (SimplexCategory.δ j)
h₂ : ¬j = 0
⊢ PInfty.f (m + 1) ≫ X.map (SimplexCategory.δ j).op = 0
state_after: case h.intro.zero.intro
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m : ℕ
h₁ : [m].len ≠ m + 1
j : Fin (m + 2)
hi : Mono (SimplexCategory.δ j)
h₂ : ¬j = 0
h₃ : 1 ≤ ↑j
⊢ PInfty.f (m + 1) ≫ X.map (SimplexCategory.δ j).op = 0

tactic: exact (HigherFacesVanish.of_P (m + 1) m).comp_δ_eq_zero j h₂ (by omega)
state_before: case h.intro.zero.intro
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m : ℕ
h₁ : [m].len ≠ m + 1
j : Fin (m + 2)
hi : Mono (SimplexCategory.δ j)
h₂ : ¬j = 0
h₃ : 1 ≤ ↑j
⊢ PInfty.f (m + 1) ≫ X.map (SimplexCategory.δ j).op = 0
state_after: no goals

tactic: by_contra h
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m : ℕ
h₁ : [m].len ≠ m + 1
j : Fin (m + 2)
hi : Mono (SimplexCategory.δ j)
h₂ : ¬j = 0
⊢ 1 ≤ ↑j
state_after: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m : ℕ
h₁ : [m].len ≠ m + 1
j : Fin (m + 2)
hi : Mono (SimplexCategory.δ j)
h₂ : ¬j = 0
h : ¬1 ≤ ↑j
⊢ False

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

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

tactic: omega
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m : ℕ
h₁ : [m].len ≠ m + 1
j : Fin (m + 2)
hi : Mono (SimplexCategory.δ j)
h₂ : ¬j = 0
h₃ : 1 ≤ ↑j
⊢ m + 2 ≤ ↑j + (m + 1)
state_after: no goals

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

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

tactic: subst hk
state_before: case h.intro.succ
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
n m : ℕ
i : [m] ⟶ [n]
h₁ : [m].len ≠ n
k : ℕ
hk : n = m + k + 1 + 1
⊢ PInfty.f n ≫ X.map i.op = 0
state_after: case h.intro.succ
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
i : [m] ⟶ [m + k + 1 + 1]
h₁ : [m].len ≠ m + k + 1 + 1
⊢ PInfty.f (m + k + 1 + 1) ≫ 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'
    omega
state_before: case h.intro.succ
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
i : [m] ⟶ [m + k + 1 + 1]
h₁ : [m].len ≠ m + k + 1 + 1
⊢ PInfty.f (m + k + 1 + 1) ≫ X.map i.op = 0
state_after: case h.intro.succ.intro.intro
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
h₁ : [m].len ≠ m + k + 1 + 1
j₁ : Fin (m + k + 2 + 1)
i : [m] ⟶ [m + k + 1]
⊢ PInfty.f (m + k + 1 + 1) ≫ X.map (i ≫ SimplexCategory.δ j₁).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'
    omega
state_before: case h.intro.succ.intro.intro
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
h₁ : [m].len ≠ m + k + 1 + 1
j₁ : Fin (m + k + 2 + 1)
i : [m] ⟶ [m + k + 1]
⊢ PInfty.f (m + k + 1 + 1) ≫ X.map (i ≫ SimplexCategory.δ j₁).op = 0
state_after: case h.intro.succ.intro.intro.intro.intro
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
h₁ : [m].len ≠ m + k + 1 + 1
j₁ : Fin (m + k + 2 + 1)
j₂ : Fin (m + k + 2)
i : [m] ⟶ [m + k]
⊢ PInfty.f (m + k + 1 + 1) ≫ X.map ((i ≫ SimplexCategory.δ j₂) ≫ SimplexCategory.δ j₁).op = 0

tactic: by_cases hj₁ : j₁ = 0
state_before: case h.intro.succ.intro.intro.intro.intro
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
h₁ : [m].len ≠ m + k + 1 + 1
j₁ : Fin (m + k + 2 + 1)
j₂ : Fin (m + k + 2)
i : [m] ⟶ [m + k]
⊢ PInfty.f (m + k + 1 + 1) ≫ X.map ((i ≫ SimplexCategory.δ j₂) ≫ SimplexCategory.δ j₁).op = 0
state_after: case pos
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
h₁ : [m].len ≠ m + k + 1 + 1
j₁ : Fin (m + k + 2 + 1)
j₂ : Fin (m + k + 2)
i : [m] ⟶ [m + k]
hj₁ : j₁ = 0
⊢ PInfty.f (m + k + 1 + 1) ≫ X.map ((i ≫ SimplexCategory.δ j₂) ≫ SimplexCategory.δ j₁).op = 0

case neg
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
h₁ : [m].len ≠ m + k + 1 + 1
j₁ : Fin (m + k + 2 + 1)
j₂ : Fin (m + k + 2)
i : [m] ⟶ [m + k]
hj₁ : ¬j₁ = 0
⊢ PInfty.f (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_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
i : [m] ⟶ [m + k + 1 + 1]
h₁ : [m].len ≠ m + k + 1 + 1
h : Function.Surjective ⇑(Hom.toOrderHom i)
⊢ False
state_after: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
i : [m] ⟶ [m + k + 1 + 1]
h₁ : [m].len ≠ m + k + 1 + 1
h : Function.Surjective ⇑(Hom.toOrderHom i)
h' : [m + k + 1 + 1].len ≤ [m].len
⊢ False

tactic: dsimp at h'
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
i : [m] ⟶ [m + k + 1 + 1]
h₁ : [m].len ≠ m + k + 1 + 1
h : Function.Surjective ⇑(Hom.toOrderHom i)
h' : [m + k + 1 + 1].len ≤ [m].len
⊢ False
state_after: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
i : [m] ⟶ [m + k + 1 + 1]
h₁ : [m].len ≠ m + k + 1 + 1
h : Function.Surjective ⇑(Hom.toOrderHom i)
h' : m + k + 1 + 1 ≤ m
⊢ False

tactic: omega
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
i : [m] ⟶ [m + k + 1 + 1]
h₁ : [m].len ≠ m + k + 1 + 1
h : Function.Surjective ⇑(Hom.toOrderHom i)
h' : m + k + 1 + 1 ≤ m
⊢ False
state_after: no goals

tactic: have h' := len_le_of_epi (SimplexCategory.epi_iff_surjective.2 h)
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
h₁ : [m].len ≠ m + k + 1 + 1
j₁ : Fin (m + k + 2 + 1)
i : [m] ⟶ [m + k + 1]
h : Function.Surjective ⇑(Hom.toOrderHom i)
⊢ False
state_after: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
h₁ : [m].len ≠ 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].len ≤ [m].len
⊢ False

tactic: dsimp at h'
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
h₁ : [m].len ≠ 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].len ≤ [m].len
⊢ False
state_after: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
h₁ : [m].len ≠ 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: omega
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
h₁ : [m].len ≠ 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
state_after: no goals

tactic: subst hj₁
state_before: case pos
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
h₁ : [m].len ≠ m + k + 1 + 1
j₁ : Fin (m + k + 2 + 1)
j₂ : Fin (m + k + 2)
i : [m] ⟶ [m + k]
hj₁ : j₁ = 0
⊢ PInfty.f (m + k + 1 + 1) ≫ X.map ((i ≫ SimplexCategory.δ j₂) ≫ SimplexCategory.δ j₁).op = 0
state_after: case pos
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
h₁ : [m].len ≠ m + k + 1 + 1
j₂ : Fin (m + k + 2)
i : [m] ⟶ [m + k]
⊢ PInfty.f (m + k + 1 + 1) ≫ X.map ((i ≫ SimplexCategory.δ j₂) ≫ SimplexCategory.δ 0).op = 0

tactic: rw [assoc, ← SimplexCategory.δ_comp_δ'' (Fin.zero_le _)]
state_before: case pos
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
h₁ : [m].len ≠ m + k + 1 + 1
j₂ : Fin (m + k + 2)
i : [m] ⟶ [m + k]
⊢ PInfty.f (m + k + 1 + 1) ≫ X.map ((i ≫ SimplexCategory.δ j₂) ≫ SimplexCategory.δ 0).op = 0
state_after: case pos
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
h₁ : [m].len ≠ m + k + 1 + 1
j₂ : Fin (m + k + 2)
i : [m] ⟶ [m + k]
⊢ PInfty.f (m + k + 1 + 1) ≫ X.map (i ≫ SimplexCategory.δ (Fin.castLT 0 ⋯) ≫ SimplexCategory.δ j₂.succ).op = 0

tactic: simp only [op_comp, X.map_comp, assoc, PInfty_f]
state_before: case pos
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
h₁ : [m].len ≠ m + k + 1 + 1
j₂ : Fin (m + k + 2)
i : [m] ⟶ [m + k]
⊢ PInfty.f (m + k + 1 + 1) ≫ X.map (i ≫ SimplexCategory.δ (Fin.castLT 0 ⋯) ≫ SimplexCategory.δ j₂.succ).op = 0
state_after: case pos
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
h₁ : [m].len ≠ m + k + 1 + 1
j₂ : Fin (m + k + 2)
i : [m] ⟶ [m + k]
⊢ (P (m + k + 1 + 1)).f (m + k + 1 + 1) ≫
      X.map (SimplexCategory.δ j₂.succ).op ≫ X.map (SimplexCategory.δ (Fin.castLT 0 ⋯)).op ≫ X.map i.op =
    0

tactic: erw [(HigherFacesVanish.of_P _ _).comp_δ_eq_zero_assoc _ j₂.succ_ne_zero, zero_comp]
state_before: case pos
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
h₁ : [m].len ≠ m + k + 1 + 1
j₂ : Fin (m + k + 2)
i : [m] ⟶ [m + k]
⊢ (P (m + k + 1 + 1)).f (m + k + 1 + 1) ≫
      X.map (SimplexCategory.δ j₂.succ).op ≫ X.map (SimplexCategory.δ (Fin.castLT 0 ⋯)).op ≫ X.map i.op =
    0
state_after: case pos.hj₂
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
h₁ : [m].len ≠ m + k + 1 + 1
j₂ : Fin (m + k + 2)
i : [m] ⟶ [m + k]
⊢ m + k + 1 + 2 ≤ ↑j₂.succ + (m + k + 1 + 1)

tactic: simp only [Nat.succ_eq_add_one, Nat.add, Fin.succ]
state_before: case pos.hj₂
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
h₁ : [m].len ≠ m + k + 1 + 1
j₂ : Fin (m + k + 2)
i : [m] ⟶ [m + k]
⊢ m + k + 1 + 2 ≤ ↑j₂.succ + (m + k + 1 + 1)
state_after: case pos.hj₂
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
h₁ : [m].len ≠ m + k + 1 + 1
j₂ : Fin (m + k + 2)
i : [m] ⟶ [m + k]
⊢ m + k + 1 + 2 ≤ ↑j₂ + 1 + (m + k + 1 + 1)

tactic: omega
state_before: case pos.hj₂
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
h₁ : [m].len ≠ m + k + 1 + 1
j₂ : Fin (m + k + 2)
i : [m] ⟶ [m + k]
⊢ m + k + 1 + 2 ≤ ↑j₂ + 1 + (m + k + 1 + 1)
state_after: no goals

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

tactic: erw [(HigherFacesVanish.of_P _ _).comp_δ_eq_zero_assoc _ hj₁, zero_comp]
state_before: case neg
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
h₁ : [m].len ≠ m + k + 1 + 1
j₁ : Fin (m + k + 2 + 1)
j₂ : Fin (m + k + 2)
i : [m] ⟶ [m + k]
hj₁ : ¬j₁ = 0
⊢ (P (m + k + 1 + 1)).f (m + k + 1 + 1) ≫
      X.map (SimplexCategory.δ j₁).op ≫ X.map (SimplexCategory.δ j₂).op ≫ X.map i.op =
    0
state_after: case neg.hj₂
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
h₁ : [m].len ≠ 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: by_contra
state_before: case neg.hj₂
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
h₁ : [m].len ≠ 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)
state_after: case neg.hj₂
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
h₁ : [m].len ≠ 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: exact hj₁ (by simp only [Fin.ext_iff, Fin.val_zero]; linarith)
state_before: case neg.hj₂
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
h₁ : [m].len ≠ 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
state_after: no goals

tactic: simp only [Fin.ext_iff, Fin.val_zero]
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
h₁ : [m].len ≠ 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
state_after: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
h₁ : [m].len ≠ 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_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
m k : ℕ
h₁ : [m].len ≠ 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
state_after: no goals