Theorem: CategoryTheory.isIso_of_shortExact_of_isIso_of_isIso
File: Mathlib/Algebra/Homology/ShortExact/Abelian.lean

tactic: obtain ⟨_⟩ := h
state_before: 𝒜 : Type u_1
inst✝³ : Category 𝒜
A B C A' B' C' : 𝒜
f : A ⟶ B
g : B ⟶ C
f' : A' ⟶ B'
g' : B' ⟶ C'
inst✝² : Abelian 𝒜
h : ShortExact f g
h' : ShortExact f' g'
i₁ : A ⟶ A'
i₂ : B ⟶ B'
i₃ : C ⟶ C'
comm₁ : autoParam (i₁ ≫ f' = f ≫ i₂) _auto✝
comm₂ : autoParam (i₂ ≫ g' = g ≫ i₃) _auto✝
inst✝¹ : IsIso i₁
inst✝ : IsIso i₃
⊢ IsIso i₂

tactic: obtain ⟨_⟩ := h'
state_before: case mk
𝒜 : Type u_1
inst✝³ : Category 𝒜
A B C A' B' C' : 𝒜
f : A ⟶ B
g : B ⟶ C
f' : A' ⟶ B'
g' : B' ⟶ C'
inst✝² : Abelian 𝒜
h' : ShortExact f' g'
i₁ : A ⟶ A'
i₂ : B ⟶ B'
i₃ : C ⟶ C'
comm₁ : autoParam (i₁ ≫ f' = f ≫ i₂) _auto✝
comm₂ : autoParam (i₂ ≫ g' = g ≫ i₃) _auto✝
inst✝¹ : IsIso i₁
inst✝ : IsIso i₃
mono✝ : Mono f
epi✝ : Epi g
exact✝ : Exact f g
⊢ IsIso i₂

tactic: refine @Abelian.isIso_of_isIso_of_isIso_of_isIso_of_isIso 𝒜 _ _ 0 _ _ _ 0 _ _ _ 0 f g 0 f' g'
    0 i₁ i₂ i₃ ?_ comm₁ comm₂ 0 0 0 0 0 ?_ ?_ ?_ ?_ ?_ ?_ ?_ _ _ _ _
state_before: case mk.mk
𝒜 : Type u_1
inst✝³ : Category 𝒜
A B C A' B' C' : 𝒜
f : A ⟶ B
g : B ⟶ C
f' : A' ⟶ B'
g' : B' ⟶ C'
inst✝² : Abelian 𝒜
i₁ : A ⟶ A'
i₂ : B ⟶ B'
i₃ : C ⟶ C'
comm₁ : autoParam (i₁ ≫ f' = f ≫ i₂) _auto✝
comm₂ : autoParam (i₂ ≫ g' = g ≫ i₃) _auto✝
inst✝¹ : IsIso i₁
inst✝ : IsIso i₃
mono✝¹ : Mono f
epi✝¹ : Epi g
exact✝¹ : Exact f g
mono✝ : Mono f'
epi✝ : Epi g'
exact✝ : Exact f' g'
⊢ IsIso i₂

tactic: all_goals try simp
state_before: case mk.mk.refine_1
𝒜 : Type u_1
inst✝³ : Category 𝒜
A B C A' B' C' : 𝒜
f : A ⟶ B
g : B ⟶ C
f' : A' ⟶ B'
g' : B' ⟶ C'
inst✝² : Abelian 𝒜
i₁ : A ⟶ A'
i₂ : B ⟶ B'
i₃ : C ⟶ C'
comm₁ : autoParam (i₁ ≫ f' = f ≫ i₂) _auto✝
comm₂ : autoParam (i₂ ≫ g' = g ≫ i₃) _auto✝
inst✝¹ : IsIso i₁
inst✝ : IsIso i₃
mono✝¹ : Mono f
epi✝¹ : Epi g
exact✝¹ : Exact f g
mono✝ : Mono f'
epi✝ : Epi g'
exact✝ : Exact f' g'
⊢ 0 ≫ 0 = 0 ≫ i₁

case mk.mk.refine_2
𝒜 : Type u_1
inst✝³ : Category 𝒜
A B C A' B' C' : 𝒜
f : A ⟶ B
g : B ⟶ C
f' : A' ⟶ B'
g' : B' ⟶ C'
inst✝² : Abelian 𝒜
i₁ : A ⟶ A'
i₂ : B ⟶ B'
i₃ : C ⟶ C'
comm₁ : autoParam (i₁ ≫ f' = f ≫ i₂) _auto✝
comm₂ : autoParam (i₂ ≫ g' = g ≫ i₃) _auto✝
inst✝¹ : IsIso i₁
inst✝ : IsIso i₃
mono✝¹ : Mono f
epi✝¹ : Epi g
exact✝¹ : Exact f g
mono✝ : Mono f'
epi✝ : Epi g'
exact✝ : Exact f' g'
⊢ i₃ ≫ 0 = 0 ≫ 0

case mk.mk.refine_3
𝒜 : Type u_1
inst✝³ : Category 𝒜
A B C A' B' C' : 𝒜
f : A ⟶ B
g : B ⟶ C
f' : A' ⟶ B'
g' : B' ⟶ C'
inst✝² : Abelian 𝒜
i₁ : A ⟶ A'
i₂ : B ⟶ B'
i₃ : C ⟶ C'
comm₁ : autoParam (i₁ ≫ f' = f ≫ i₂) _auto✝
comm₂ : autoParam (i₂ ≫ g' = g ≫ i₃) _auto✝
inst✝¹ : IsIso i₁
inst✝ : IsIso i₃
mono✝¹ : Mono f
epi✝¹ : Epi g
exact✝¹ : Exact f g
mono✝ : Mono f'
epi✝ : Epi g'
exact✝ : Exact f' g'
⊢ Exact 0 f

case mk.mk.refine_4
𝒜 : Type u_1
inst✝³ : Category 𝒜
A B C A' B' C' : 𝒜
f : A ⟶ B
g : B ⟶ C
f' : A' ⟶ B'
g' : B' ⟶ C'
inst✝² : Abelian 𝒜
i₁ : A ⟶ A'
i₂ : B ⟶ B'
i₃ : C ⟶ C'
comm₁ : autoParam (i₁ ≫ f' = f ≫ i₂) _auto✝
comm₂ : autoParam (i₂ ≫ g' = g ≫ i₃) _auto✝
inst✝¹ : IsIso i₁
inst✝ : IsIso i₃
mono✝¹ : Mono f
epi✝¹ : Epi g
exact✝¹ : Exact f g
mono✝ : Mono f'
epi✝ : Epi g'
exact✝ : Exact f' g'
⊢ Exact f g

case mk.mk.refine_5
𝒜 : Type u_1
inst✝³ : Category 𝒜
A B C A' B' C' : 𝒜
f : A ⟶ B
g : B ⟶ C
f' : A' ⟶ B'
g' : B' ⟶ C'
inst✝² : Abelian 𝒜
i₁ : A ⟶ A'
i₂ : B ⟶ B'
i₃ : C ⟶ C'
comm₁ : autoParam (i₁ ≫ f' = f ≫ i₂) _auto✝
comm₂ : autoParam (i₂ ≫ g' = g ≫ i₃) _auto✝
inst✝¹ : IsIso i₁
inst✝ : IsIso i₃
mono✝¹ : Mono f
epi✝¹ : Epi g
exact✝¹ : Exact f g
mono✝ : Mono f'
epi✝ : Epi g'
exact✝ : Exact f' g'
⊢ Exact g 0

case mk.mk.refine_6
𝒜 : Type u_1
inst✝³ : Category 𝒜
A B C A' B' C' : 𝒜
f : A ⟶ B
g : B ⟶ C
f' : A' ⟶ B'
g' : B' ⟶ C'
inst✝² : Abelian 𝒜
i₁ : A ⟶ A'
i₂ : B ⟶ B'
i₃ : C ⟶ C'
comm₁ : autoParam (i₁ ≫ f' = f ≫ i₂) _auto✝
comm₂ : autoParam (i₂ ≫ g' = g ≫ i₃) _auto✝
inst✝¹ : IsIso i₁
inst✝ : IsIso i₃
mono✝¹ : Mono f
epi✝¹ : Epi g
exact✝¹ : Exact f g
mono✝ : Mono f'
epi✝ : Epi g'
exact✝ : Exact f' g'
⊢ Exact 0 f'

case mk.mk.refine_7
𝒜 : Type u_1
inst✝³ : Category 𝒜
A B C A' B' C' : 𝒜
f : A ⟶ B
g : B ⟶ C
f' : A' ⟶ B'
g' : B' ⟶ C'
inst✝² : Abelian 𝒜
i₁ : A ⟶ A'
i₂ : B ⟶ B'
i₃ : C ⟶ C'
comm₁ : autoParam (i₁ ≫ f' = f ≫ i₂) _auto✝
comm₂ : autoParam (i₂ ≫ g' = g ≫ i₃) _auto✝
inst✝¹ : IsIso i₁
inst✝ : IsIso i₃
mono✝¹ : Mono f
epi✝¹ : Epi g
exact✝¹ : Exact f g
mono✝ : Mono f'
epi✝ : Epi g'
exact✝ : Exact f' g'
⊢ Exact f' g'

case mk.mk.refine_8
𝒜 : Type u_1
inst✝³ : Category 𝒜
A B C A' B' C' : 𝒜
f : A ⟶ B
g : B ⟶ C
f' : A' ⟶ B'
g' : B' ⟶ C'
inst✝² : Abelian 𝒜
i₁ : A ⟶ A'
i₂ : B ⟶ B'
i₃ : C ⟶ C'
comm₁ : autoParam (i₁ ≫ f' = f ≫ i₂) _auto✝
comm₂ : autoParam (i₂ ≫ g' = g ≫ i₃) _auto✝
inst✝¹ : IsIso i₁
inst✝ : IsIso i₃
mono✝¹ : Mono f
epi✝¹ : Epi g
exact✝¹ : Exact f g
mono✝ : Mono f'
epi✝ : Epi g'
exact✝ : Exact f' g'
⊢ Exact g' 0

tactic: all_goals try assumption
state_before: case mk.mk.refine_3
𝒜 : Type u_1
inst✝³ : Category 𝒜
A B C A' B' C' : 𝒜
f : A ⟶ B
g : B ⟶ C
f' : A' ⟶ B'
g' : B' ⟶ C'
inst✝² : Abelian 𝒜
i₁ : A ⟶ A'
i₂ : B ⟶ B'
i₃ : C ⟶ C'
comm₁ : autoParam (i₁ ≫ f' = f ≫ i₂) _auto✝
comm₂ : autoParam (i₂ ≫ g' = g ≫ i₃) _auto✝
inst✝¹ : IsIso i₁
inst✝ : IsIso i₃
mono✝¹ : Mono f
epi✝¹ : Epi g
exact✝¹ : Exact f g
mono✝ : Mono f'
epi✝ : Epi g'
exact✝ : Exact f' g'
⊢ Exact 0 f

case mk.mk.refine_4
𝒜 : Type u_1
inst✝³ : Category 𝒜
A B C A' B' C' : 𝒜
f : A ⟶ B
g : B ⟶ C
f' : A' ⟶ B'
g' : B' ⟶ C'
inst✝² : Abelian 𝒜
i₁ : A ⟶ A'
i₂ : B ⟶ B'
i₃ : C ⟶ C'
comm₁ : autoParam (i₁ ≫ f' = f ≫ i₂) _auto✝
comm₂ : autoParam (i₂ ≫ g' = g ≫ i₃) _auto✝
inst✝¹ : IsIso i₁
inst✝ : IsIso i₃
mono✝¹ : Mono f
epi✝¹ : Epi g
exact✝¹ : Exact f g
mono✝ : Mono f'
epi✝ : Epi g'
exact✝ : Exact f' g'
⊢ Exact f g

case mk.mk.refine_5
𝒜 : Type u_1
inst✝³ : Category 𝒜
A B C A' B' C' : 𝒜
f : A ⟶ B
g : B ⟶ C
f' : A' ⟶ B'
g' : B' ⟶ C'
inst✝² : Abelian 𝒜
i₁ : A ⟶ A'
i₂ : B ⟶ B'
i₃ : C ⟶ C'
comm₁ : autoParam (i₁ ≫ f' = f ≫ i₂) _auto✝
comm₂ : autoParam (i₂ ≫ g' = g ≫ i₃) _auto✝
inst✝¹ : IsIso i₁
inst✝ : IsIso i₃
mono✝¹ : Mono f
epi✝¹ : Epi g
exact✝¹ : Exact f g
mono✝ : Mono f'
epi✝ : Epi g'
exact✝ : Exact f' g'
⊢ Exact g 0

case mk.mk.refine_6
𝒜 : Type u_1
inst✝³ : Category 𝒜
A B C A' B' C' : 𝒜
f : A ⟶ B
g : B ⟶ C
f' : A' ⟶ B'
g' : B' ⟶ C'
inst✝² : Abelian 𝒜
i₁ : A ⟶ A'
i₂ : B ⟶ B'
i₃ : C ⟶ C'
comm₁ : autoParam (i₁ ≫ f' = f ≫ i₂) _auto✝
comm₂ : autoParam (i₂ ≫ g' = g ≫ i₃) _auto✝
inst✝¹ : IsIso i₁
inst✝ : IsIso i₃
mono✝¹ : Mono f
epi✝¹ : Epi g
exact✝¹ : Exact f g
mono✝ : Mono f'
epi✝ : Epi g'
exact✝ : Exact f' g'
⊢ Exact 0 f'

case mk.mk.refine_7
𝒜 : Type u_1
inst✝³ : Category 𝒜
A B C A' B' C' : 𝒜
f : A ⟶ B
g : B ⟶ C
f' : A' ⟶ B'
g' : B' ⟶ C'
inst✝² : Abelian 𝒜
i₁ : A ⟶ A'
i₂ : B ⟶ B'
i₃ : C ⟶ C'
comm₁ : autoParam (i₁ ≫ f' = f ≫ i₂) _auto✝
comm₂ : autoParam (i₂ ≫ g' = g ≫ i₃) _auto✝
inst✝¹ : IsIso i₁
inst✝ : IsIso i₃
mono✝¹ : Mono f
epi✝¹ : Epi g
exact✝¹ : Exact f g
mono✝ : Mono f'
epi✝ : Epi g'
exact✝ : Exact f' g'
⊢ Exact f' g'

case mk.mk.refine_8
𝒜 : Type u_1
inst✝³ : Category 𝒜
A B C A' B' C' : 𝒜
f : A ⟶ B
g : B ⟶ C
f' : A' ⟶ B'
g' : B' ⟶ C'
inst✝² : Abelian 𝒜
i₁ : A ⟶ A'
i₂ : B ⟶ B'
i₃ : C ⟶ C'
comm₁ : autoParam (i₁ ≫ f' = f ≫ i₂) _auto✝
comm₂ : autoParam (i₂ ≫ g' = g ≫ i₃) _auto✝
inst✝¹ : IsIso i₁
inst✝ : IsIso i₃
mono✝¹ : Mono f
epi✝¹ : Epi g
exact✝¹ : Exact f g
mono✝ : Mono f'
epi✝ : Epi g'
exact✝ : Exact f' g'
⊢ Exact g' 0

tactic: all_goals try apply exact_zero_left_of_mono
state_before: case mk.mk.refine_3
𝒜 : Type u_1
inst✝³ : Category 𝒜
A B C A' B' C' : 𝒜
f : A ⟶ B
g : B ⟶ C
f' : A' ⟶ B'
g' : B' ⟶ C'
inst✝² : Abelian 𝒜
i₁ : A ⟶ A'
i₂ : B ⟶ B'
i₃ : C ⟶ C'
comm₁ : autoParam (i₁ ≫ f' = f ≫ i₂) _auto✝
comm₂ : autoParam (i₂ ≫ g' = g ≫ i₃) _auto✝
inst✝¹ : IsIso i₁
inst✝ : IsIso i₃
mono✝¹ : Mono f
epi✝¹ : Epi g
exact✝¹ : Exact f g
mono✝ : Mono f'
epi✝ : Epi g'
exact✝ : Exact f' g'
⊢ Exact 0 f

case mk.mk.refine_5
𝒜 : Type u_1
inst✝³ : Category 𝒜
A B C A' B' C' : 𝒜
f : A ⟶ B
g : B ⟶ C
f' : A' ⟶ B'
g' : B' ⟶ C'
inst✝² : Abelian 𝒜
i₁ : A ⟶ A'
i₂ : B ⟶ B'
i₃ : C ⟶ C'
comm₁ : autoParam (i₁ ≫ f' = f ≫ i₂) _auto✝
comm₂ : autoParam (i₂ ≫ g' = g ≫ i₃) _auto✝
inst✝¹ : IsIso i₁
inst✝ : IsIso i₃
mono✝¹ : Mono f
epi✝¹ : Epi g
exact✝¹ : Exact f g
mono✝ : Mono f'
epi✝ : Epi g'
exact✝ : Exact f' g'
⊢ Exact g 0

case mk.mk.refine_6
𝒜 : Type u_1
inst✝³ : Category 𝒜
A B C A' B' C' : 𝒜
f : A ⟶ B
g : B ⟶ C
f' : A' ⟶ B'
g' : B' ⟶ C'
inst✝² : Abelian 𝒜
i₁ : A ⟶ A'
i₂ : B ⟶ B'
i₃ : C ⟶ C'
comm₁ : autoParam (i₁ ≫ f' = f ≫ i₂) _auto✝
comm₂ : autoParam (i₂ ≫ g' = g ≫ i₃) _auto✝
inst✝¹ : IsIso i₁
inst✝ : IsIso i₃
mono✝¹ : Mono f
epi✝¹ : Epi g
exact✝¹ : Exact f g
mono✝ : Mono f'
epi✝ : Epi g'
exact✝ : Exact f' g'
⊢ Exact 0 f'

case mk.mk.refine_8
𝒜 : Type u_1
inst✝³ : Category 𝒜
A B C A' B' C' : 𝒜
f : A ⟶ B
g : B ⟶ C
f' : A' ⟶ B'
g' : B' ⟶ C'
inst✝² : Abelian 𝒜
i₁ : A ⟶ A'
i₂ : B ⟶ B'
i₃ : C ⟶ C'
comm₁ : autoParam (i₁ ≫ f' = f ≫ i₂) _auto✝
comm₂ : autoParam (i₂ ≫ g' = g ≫ i₃) _auto✝
inst✝¹ : IsIso i₁
inst✝ : IsIso i₃
mono✝¹ : Mono f
epi✝¹ : Epi g
exact✝¹ : Exact f g
mono✝ : Mono f'
epi✝ : Epi g'
exact✝ : Exact f' g'
⊢ Exact g' 0

tactic: all_goals rwa [← epi_iff_exact_zero_right ]
state_before: case mk.mk.refine_5
𝒜 : Type u_1
inst✝³ : Category 𝒜
A B C A' B' C' : 𝒜
f : A ⟶ B
g : B ⟶ C
f' : A' ⟶ B'
g' : B' ⟶ C'
inst✝² : Abelian 𝒜
i₁ : A ⟶ A'
i₂ : B ⟶ B'
i₃ : C ⟶ C'
comm₁ : autoParam (i₁ ≫ f' = f ≫ i₂) _auto✝
comm₂ : autoParam (i₂ ≫ g' = g ≫ i₃) _auto✝
inst✝¹ : IsIso i₁
inst✝ : IsIso i₃
mono✝¹ : Mono f
epi✝¹ : Epi g
exact✝¹ : Exact f g
mono✝ : Mono f'
epi✝ : Epi g'
exact✝ : Exact f' g'
⊢ Exact g 0

case mk.mk.refine_8
𝒜 : Type u_1
inst✝³ : Category 𝒜
A B C A' B' C' : 𝒜
f : A ⟶ B
g : B ⟶ C
f' : A' ⟶ B'
g' : B' ⟶ C'
inst✝² : Abelian 𝒜
i₁ : A ⟶ A'
i₂ : B ⟶ B'
i₃ : C ⟶ C'
comm₁ : autoParam (i₁ ≫ f' = f ≫ i₂) _auto✝
comm₂ : autoParam (i₂ ≫ g' = g ≫ i₃) _auto✝
inst✝¹ : IsIso i₁
inst✝ : IsIso i₃
mono✝¹ : Mono f
epi✝¹ : Epi g
exact✝¹ : Exact f g
mono✝ : Mono f'
epi✝ : Epi g'
exact✝ : Exact f' g'
⊢ Exact g' 0

tactic: try simp
state_before: case mk.mk.refine_8
𝒜 : Type u_1
inst✝³ : Category 𝒜
A B C A' B' C' : 𝒜
f : A ⟶ B
g : B ⟶ C
f' : A' ⟶ B'
g' : B' ⟶ C'
inst✝² : Abelian 𝒜
i₁ : A ⟶ A'
i₂ : B ⟶ B'
i₃ : C ⟶ C'
comm₁ : autoParam (i₁ ≫ f' = f ≫ i₂) _auto✝
comm₂ : autoParam (i₂ ≫ g' = g ≫ i₃) _auto✝
inst✝¹ : IsIso i₁
inst✝ : IsIso i₃
mono✝¹ : Mono f
epi✝¹ : Epi g
exact✝¹ : Exact f g
mono✝ : Mono f'
epi✝ : Epi g'
exact✝ : Exact f' g'
⊢ Exact g' 0

tactic: simp
state_before: case mk.mk.refine_8
𝒜 : Type u_1
inst✝³ : Category 𝒜
A B C A' B' C' : 𝒜
f : A ⟶ B
g : B ⟶ C
f' : A' ⟶ B'
g' : B' ⟶ C'
inst✝² : Abelian 𝒜
i₁ : A ⟶ A'
i₂ : B ⟶ B'
i₃ : C ⟶ C'
comm₁ : autoParam (i₁ ≫ f' = f ≫ i₂) _auto✝
comm₂ : autoParam (i₂ ≫ g' = g ≫ i₃) _auto✝
inst✝¹ : IsIso i₁
inst✝ : IsIso i₃
mono✝¹ : Mono f
epi✝¹ : Epi g
exact✝¹ : Exact f g
mono✝ : Mono f'
epi✝ : Epi g'
exact✝ : Exact f' g'
⊢ Exact g' 0

tactic: try assumption
state_before: case mk.mk.refine_8
𝒜 : Type u_1
inst✝³ : Category 𝒜
A B C A' B' C' : 𝒜
f : A ⟶ B
g : B ⟶ C
f' : A' ⟶ B'
g' : B' ⟶ C'
inst✝² : Abelian 𝒜
i₁ : A ⟶ A'
i₂ : B ⟶ B'
i₃ : C ⟶ C'
comm₁ : autoParam (i₁ ≫ f' = f ≫ i₂) _auto✝
comm₂ : autoParam (i₂ ≫ g' = g ≫ i₃) _auto✝
inst✝¹ : IsIso i₁
inst✝ : IsIso i₃
mono✝¹ : Mono f
epi✝¹ : Epi g
exact✝¹ : Exact f g
mono✝ : Mono f'
epi✝ : Epi g'
exact✝ : Exact f' g'
⊢ Exact g' 0

tactic: assumption
state_before: case mk.mk.refine_8
𝒜 : Type u_1
inst✝³ : Category 𝒜
A B C A' B' C' : 𝒜
f : A ⟶ B
g : B ⟶ C
f' : A' ⟶ B'
g' : B' ⟶ C'
inst✝² : Abelian 𝒜
i₁ : A ⟶ A'
i₂ : B ⟶ B'
i₃ : C ⟶ C'
comm₁ : autoParam (i₁ ≫ f' = f ≫ i₂) _auto✝
comm₂ : autoParam (i₂ ≫ g' = g ≫ i₃) _auto✝
inst✝¹ : IsIso i₁
inst✝ : IsIso i₃
mono✝¹ : Mono f
epi✝¹ : Epi g
exact✝¹ : Exact f g
mono✝ : Mono f'
epi✝ : Epi g'
exact✝ : Exact f' g'
⊢ Exact g' 0

tactic: try apply exact_zero_left_of_mono
state_before: case mk.mk.refine_8
𝒜 : Type u_1
inst✝³ : Category 𝒜
A B C A' B' C' : 𝒜
f : A ⟶ B
g : B ⟶ C
f' : A' ⟶ B'
g' : B' ⟶ C'
inst✝² : Abelian 𝒜
i₁ : A ⟶ A'
i₂ : B ⟶ B'
i₃ : C ⟶ C'
comm₁ : autoParam (i₁ ≫ f' = f ≫ i₂) _auto✝
comm₂ : autoParam (i₂ ≫ g' = g ≫ i₃) _auto✝
inst✝¹ : IsIso i₁
inst✝ : IsIso i₃
mono✝¹ : Mono f
epi✝¹ : Epi g
exact✝¹ : Exact f g
mono✝ : Mono f'
epi✝ : Epi g'
exact✝ : Exact f' g'
⊢ Exact g' 0

tactic: apply exact_zero_left_of_mono
state_before: case mk.mk.refine_8
𝒜 : Type u_1
inst✝³ : Category 𝒜
A B C A' B' C' : 𝒜
f : A ⟶ B
g : B ⟶ C
f' : A' ⟶ B'
g' : B' ⟶ C'
inst✝² : Abelian 𝒜
i₁ : A ⟶ A'
i₂ : B ⟶ B'
i₃ : C ⟶ C'
comm₁ : autoParam (i₁ ≫ f' = f ≫ i₂) _auto✝
comm₂ : autoParam (i₂ ≫ g' = g ≫ i₃) _auto✝
inst✝¹ : IsIso i₁
inst✝ : IsIso i₃
mono✝¹ : Mono f
epi✝¹ : Epi g
exact✝¹ : Exact f g
mono✝ : Mono f'
epi✝ : Epi g'
exact✝ : Exact f' g'
⊢ Exact g' 0

tactic: rwa [← epi_iff_exact_zero_right ]
state_before: case mk.mk.refine_8
𝒜 : Type u_1
inst✝³ : Category 𝒜
A B C A' B' C' : 𝒜
f : A ⟶ B
g : B ⟶ C
f' : A' ⟶ B'
g' : B' ⟶ C'
inst✝² : Abelian 𝒜
i₁ : A ⟶ A'
i₂ : B ⟶ B'
i₃ : C ⟶ C'
comm₁ : autoParam (i₁ ≫ f' = f ≫ i₂) _auto✝
comm₂ : autoParam (i₂ ≫ g' = g ≫ i₃) _auto✝
inst✝¹ : IsIso i₁
inst✝ : IsIso i₃
mono✝¹ : Mono f
epi✝¹ : Epi g
exact✝¹ : Exact f g
mono✝ : Mono f'
epi✝ : Epi g'
exact✝ : Exact f' g'
⊢ Exact g' 0