Theorem: CategoryTheory.ComposableArrows.isComplex₂_iff
File: Mathlib/Algebra/Homology/ExactSequence.lean

tactic: constructor
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
n : ℕ
S✝ : ComposableArrows C n
S : ComposableArrows C 2
⊢ S.IsComplex ↔ S.map' 0 1 ⋯ ⋯ ≫ S.map' 1 2 ⋯ ⋯ = 0
state_after: case mp
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
n : ℕ
S✝ : ComposableArrows C n
S : ComposableArrows C 2
⊢ S.IsComplex → S.map' 0 1 ⋯ ⋯ ≫ S.map' 1 2 ⋯ ⋯ = 0

case mpr
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
n : ℕ
S✝ : ComposableArrows C n
S : ComposableArrows C 2
⊢ S.map' 0 1 ⋯ ⋯ ≫ S.map' 1 2 ⋯ ⋯ = 0 → S.IsComplex

tactic: intro h
state_before: case mp
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
n : ℕ
S✝ : ComposableArrows C n
S : ComposableArrows C 2
⊢ S.IsComplex → S.map' 0 1 ⋯ ⋯ ≫ S.map' 1 2 ⋯ ⋯ = 0
state_after: case mp
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
n : ℕ
S✝ : ComposableArrows C n
S : ComposableArrows C 2
h : S.IsComplex
⊢ S.map' 0 1 ⋯ ⋯ ≫ S.map' 1 2 ⋯ ⋯ = 0

tactic: exact h.zero 0 (by omega)
state_before: case mp
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
n : ℕ
S✝ : ComposableArrows C n
S : ComposableArrows C 2
h : S.IsComplex
⊢ S.map' 0 1 ⋯ ⋯ ≫ S.map' 1 2 ⋯ ⋯ = 0
state_after: no goals

tactic: omega
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
n : ℕ
S✝ : ComposableArrows C n
S : ComposableArrows C 2
h : S.IsComplex
⊢ 0 + 2 ≤ 2
state_after: no goals

tactic: intro h
state_before: case mpr
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
n : ℕ
S✝ : ComposableArrows C n
S : ComposableArrows C 2
⊢ S.map' 0 1 ⋯ ⋯ ≫ S.map' 1 2 ⋯ ⋯ = 0 → S.IsComplex
state_after: case mpr
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
n : ℕ
S✝ : ComposableArrows C n
S : ComposableArrows C 2
h : S.map' 0 1 ⋯ ⋯ ≫ S.map' 1 2 ⋯ ⋯ = 0
⊢ S.IsComplex

tactic: refine IsComplex.mk (fun i hi => ?_)
state_before: case mpr
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
n : ℕ
S✝ : ComposableArrows C n
S : ComposableArrows C 2
h : S.map' 0 1 ⋯ ⋯ ≫ S.map' 1 2 ⋯ ⋯ = 0
⊢ S.IsComplex
state_after: case mpr
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
n : ℕ
S✝ : ComposableArrows C n
S : ComposableArrows C 2
h : S.map' 0 1 ⋯ ⋯ ≫ S.map' 1 2 ⋯ ⋯ = 0
i : ℕ
hi : autoParam (i + 2 ≤ 2) _auto✝
⊢ S.map' i (i + 1) ⋯ ⋯ ≫ S.map' (i + 1) (i + 2) ⋯ hi = 0

tactic: obtain rfl : i = 0 := by omega
state_before: case mpr
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
n : ℕ
S✝ : ComposableArrows C n
S : ComposableArrows C 2
h : S.map' 0 1 ⋯ ⋯ ≫ S.map' 1 2 ⋯ ⋯ = 0
i : ℕ
hi : autoParam (i + 2 ≤ 2) _auto✝
⊢ S.map' i (i + 1) ⋯ ⋯ ≫ S.map' (i + 1) (i + 2) ⋯ hi = 0
state_after: case mpr
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
n : ℕ
S✝ : ComposableArrows C n
S : ComposableArrows C 2
h : S.map' 0 1 ⋯ ⋯ ≫ S.map' 1 2 ⋯ ⋯ = 0
hi : autoParam (0 + 2 ≤ 2) _auto✝
⊢ S.map' 0 (0 + 1) ⋯ ⋯ ≫ S.map' (0 + 1) (0 + 2) ⋯ hi = 0

tactic: exact h
state_before: case mpr
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
n : ℕ
S✝ : ComposableArrows C n
S : ComposableArrows C 2
h : S.map' 0 1 ⋯ ⋯ ≫ S.map' 1 2 ⋯ ⋯ = 0
hi : autoParam (0 + 2 ≤ 2) _auto✝
⊢ S.map' 0 (0 + 1) ⋯ ⋯ ≫ S.map' (0 + 1) (0 + 2) ⋯ hi = 0
state_after: no goals

tactic: omega
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : HasZeroMorphisms C
n : ℕ
S✝ : ComposableArrows C n
S : ComposableArrows C 2
h : S.map' 0 1 ⋯ ⋯ ≫ S.map' 1 2 ⋯ ⋯ = 0
i : ℕ
hi : autoParam (i + 2 ≤ 2) _auto✝
⊢ i = 0
state_after: no goals