Theorem: CategoryTheory.Abelian.isIso_of_epi_of_isIso_of_isIso_of_mono
File: Mathlib/CategoryTheory/Abelian/DiagramLemmas/Four.lean

tactic: dsimp at h₀ h₁ h₂ h₃
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Abelian C
R₁ R₂ : ComposableArrows C 4
hR₁ : R₁.Exact
hR₂ : R₂.Exact
φ : R₁ ⟶ R₂
h₀ : Epi (app' φ 0 ⋯)
h₁ : IsIso (app' φ 1 ⋯)
h₂ : IsIso (app' φ 3 ⋯)
h₃ : Mono (app' φ 4 ⋯)
⊢ IsIso (app' φ 2 ⋯)
state_after: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Abelian C
R₁ R₂ : ComposableArrows C 4
hR₁ : R₁.Exact
hR₂ : R₂.Exact
φ : R₁ ⟶ R₂
h₀ : Epi (φ.app 0)
h₁ : IsIso (φ.app 1)
h₂ : IsIso (φ.app ⟨3, ⋯⟩)
h₃ : Mono (φ.app ⟨4, ⋯⟩)
⊢ IsIso (app' φ 2 ⋯)

tactic: have : Mono (app' φ 2) := by
  apply mono_of_epi_of_mono_of_mono (δlastFunctor.map φ) (R₁.exact_iff_δlast.1 hR₁).1
    (R₂.exact_iff_δlast.1 hR₂).1 <;> dsimp <;> infer_instance
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Abelian C
R₁ R₂ : ComposableArrows C 4
hR₁ : R₁.Exact
hR₂ : R₂.Exact
φ : R₁ ⟶ R₂
h₀ : Epi (φ.app 0)
h₁ : IsIso (φ.app 1)
h₂ : IsIso (φ.app ⟨3, ⋯⟩)
h₃ : Mono (φ.app ⟨4, ⋯⟩)
⊢ IsIso (app' φ 2 ⋯)
state_after: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Abelian C
R₁ R₂ : ComposableArrows C 4
hR₁ : R₁.Exact
hR₂ : R₂.Exact
φ : R₁ ⟶ R₂
h₀ : Epi (φ.app 0)
h₁ : IsIso (φ.app 1)
h₂ : IsIso (φ.app ⟨3, ⋯⟩)
h₃ : Mono (φ.app ⟨4, ⋯⟩)
this : Mono (app' φ 2 ⋯)
⊢ IsIso (app' φ 2 ⋯)

tactic: have : Epi (app' φ 2) := by
  apply epi_of_epi_of_epi_of_mono (δ₀Functor.map φ) (R₁.exact_iff_δ₀.1 hR₁).2
    (R₂.exact_iff_δ₀.1 hR₂).2 <;> dsimp <;> infer_instance
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Abelian C
R₁ R₂ : ComposableArrows C 4
hR₁ : R₁.Exact
hR₂ : R₂.Exact
φ : R₁ ⟶ R₂
h₀ : Epi (φ.app 0)
h₁ : IsIso (φ.app 1)
h₂ : IsIso (φ.app ⟨3, ⋯⟩)
h₃ : Mono (φ.app ⟨4, ⋯⟩)
this : Mono (app' φ 2 ⋯)
⊢ IsIso (app' φ 2 ⋯)
state_after: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Abelian C
R₁ R₂ : ComposableArrows C 4
hR₁ : R₁.Exact
hR₂ : R₂.Exact
φ : R₁ ⟶ R₂
h₀ : Epi (φ.app 0)
h₁ : IsIso (φ.app 1)
h₂ : IsIso (φ.app ⟨3, ⋯⟩)
h₃ : Mono (φ.app ⟨4, ⋯⟩)
this✝ : Mono (app' φ 2 ⋯)
this : Epi (app' φ 2 ⋯)
⊢ IsIso (app' φ 2 ⋯)

tactic: apply isIso_of_mono_of_epi
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Abelian C
R₁ R₂ : ComposableArrows C 4
hR₁ : R₁.Exact
hR₂ : R₂.Exact
φ : R₁ ⟶ R₂
h₀ : Epi (φ.app 0)
h₁ : IsIso (φ.app 1)
h₂ : IsIso (φ.app ⟨3, ⋯⟩)
h₃ : Mono (φ.app ⟨4, ⋯⟩)
this✝ : Mono (app' φ 2 ⋯)
this : Epi (app' φ 2 ⋯)
⊢ IsIso (app' φ 2 ⋯)
state_after: no goals

tactic: apply mono_of_epi_of_mono_of_mono (δlastFunctor.map φ) (R₁.exact_iff_δlast.1 hR₁).1
  (R₂.exact_iff_δlast.1 hR₂).1 <;> dsimp <;> infer_instance
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Abelian C
R₁ R₂ : ComposableArrows C 4
hR₁ : R₁.Exact
hR₂ : R₂.Exact
φ : R₁ ⟶ R₂
h₀ : Epi (φ.app 0)
h₁ : IsIso (φ.app 1)
h₂ : IsIso (φ.app ⟨3, ⋯⟩)
h₃ : Mono (φ.app ⟨4, ⋯⟩)
⊢ Mono (app' φ 2 ⋯)
state_after: no goals

tactic: apply epi_of_epi_of_epi_of_mono (δ₀Functor.map φ) (R₁.exact_iff_δ₀.1 hR₁).2
  (R₂.exact_iff_δ₀.1 hR₂).2 <;> dsimp <;> infer_instance
state_before: C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Abelian C
R₁ R₂ : ComposableArrows C 4
hR₁ : R₁.Exact
hR₂ : R₂.Exact
φ : R₁ ⟶ R₂
h₀ : Epi (φ.app 0)
h₁ : IsIso (φ.app 1)
h₂ : IsIso (φ.app ⟨3, ⋯⟩)
h₃ : Mono (φ.app ⟨4, ⋯⟩)
this : Mono (app' φ 2 ⋯)
⊢ Epi (app' φ 2 ⋯)
state_after: no goals