Theorem: CategoryTheory.ComposableArrows.exact₂_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
hS : S.IsComplex
⊢ S.Exact ↔ (S.sc' hS 0 1 2 ⋯ ⋯ ⋯).Exact
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
hS : S.IsComplex
⊢ S.Exact → (S.sc' hS 0 1 2 ⋯ ⋯ ⋯).Exact

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
hS : S.IsComplex
⊢ (S.sc' hS 0 1 2 ⋯ ⋯ ⋯).Exact → S.Exact

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
hS : S.IsComplex
⊢ S.Exact → (S.sc' hS 0 1 2 ⋯ ⋯ ⋯).Exact
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
hS : S.IsComplex
h : S.Exact
⊢ (S.sc' hS 0 1 2 ⋯ ⋯ ⋯).Exact

tactic: exact h.exact 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
hS : S.IsComplex
h : S.Exact
⊢ (S.sc' hS 0 1 2 ⋯ ⋯ ⋯).Exact
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
hS : S.IsComplex
h : S.Exact
⊢ 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
hS : S.IsComplex
⊢ (S.sc' hS 0 1 2 ⋯ ⋯ ⋯).Exact → S.Exact
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
hS : S.IsComplex
h : (S.sc' hS 0 1 2 ⋯ ⋯ ⋯).Exact
⊢ S.Exact

tactic: refine Exact.mk hS (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
hS : S.IsComplex
h : (S.sc' hS 0 1 2 ⋯ ⋯ ⋯).Exact
⊢ S.Exact
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
hS : S.IsComplex
h : (S.sc' hS 0 1 2 ⋯ ⋯ ⋯).Exact
i : ℕ
hi : autoParam (i + 2 ≤ 2) _auto✝
⊢ (S.sc hS i ⋯).Exact

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
hS : S.IsComplex
h : (S.sc' hS 0 1 2 ⋯ ⋯ ⋯).Exact
i : ℕ
hi : autoParam (i + 2 ≤ 2) _auto✝
⊢ (S.sc hS i ⋯).Exact
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
hS : S.IsComplex
h : (S.sc' hS 0 1 2 ⋯ ⋯ ⋯).Exact
hi : autoParam (0 + 2 ≤ 2) _auto✝
⊢ (S.sc hS 0 ⋯).Exact

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
hS : S.IsComplex
h : (S.sc' hS 0 1 2 ⋯ ⋯ ⋯).Exact
hi : autoParam (0 + 2 ≤ 2) _auto✝
⊢ (S.sc hS 0 ⋯).Exact
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
hS : S.IsComplex
h : (S.sc' hS 0 1 2 ⋯ ⋯ ⋯).Exact
i : ℕ
hi : autoParam (i + 2 ≤ 2) _auto✝
⊢ i = 0
state_after: no goals