Theorem: CategoryTheory.ShortComplex.moduleCat_exact_iff_range_eq_ker
File: Mathlib/Algebra/Homology/ShortComplex/ModuleCat.lean

tactic: rw [moduleCat_exact_iff_ker_sub_range]
state_before: R : Type u
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
⊢ S.Exact ↔ LinearMap.range S.f = LinearMap.ker S.g
state_after: R : Type u
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
⊢ LinearMap.ker S.g ≤ LinearMap.range S.f ↔ LinearMap.range S.f = LinearMap.ker S.g

tactic: constructor
state_before: R : Type u
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
⊢ LinearMap.ker S.g ≤ LinearMap.range S.f ↔ LinearMap.range S.f = LinearMap.ker S.g
state_after: case mp
R : Type u
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
⊢ LinearMap.ker S.g ≤ LinearMap.range S.f → LinearMap.range S.f = LinearMap.ker S.g

case mpr
R : Type u
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
⊢ LinearMap.range S.f = LinearMap.ker S.g → LinearMap.ker S.g ≤ LinearMap.range S.f

tactic: intro h
state_before: case mp
R : Type u
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
⊢ LinearMap.ker S.g ≤ LinearMap.range S.f → LinearMap.range S.f = LinearMap.ker S.g
state_after: case mp
R : Type u
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
h : LinearMap.ker S.g ≤ LinearMap.range S.f
⊢ LinearMap.range S.f = LinearMap.ker S.g

tactic: ext x
state_before: case mp
R : Type u
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
h : LinearMap.ker S.g ≤ LinearMap.range S.f
⊢ LinearMap.range S.f = LinearMap.ker S.g
state_after: case mp.h
R : Type u
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
h : LinearMap.ker S.g ≤ LinearMap.range S.f
x : ↑S.X₂
⊢ x ∈ LinearMap.range S.f ↔ x ∈ LinearMap.ker S.g

tactic: constructor
state_before: case mp.h
R : Type u
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
h : LinearMap.ker S.g ≤ LinearMap.range S.f
x : ↑S.X₂
⊢ x ∈ LinearMap.range S.f ↔ x ∈ LinearMap.ker S.g
state_after: case mp.h.mp
R : Type u
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
h : LinearMap.ker S.g ≤ LinearMap.range S.f
x : ↑S.X₂
⊢ x ∈ LinearMap.range S.f → x ∈ LinearMap.ker S.g

case mp.h.mpr
R : Type u
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
h : LinearMap.ker S.g ≤ LinearMap.range S.f
x : ↑S.X₂
⊢ x ∈ LinearMap.ker S.g → x ∈ LinearMap.range S.f

tactic: rintro ⟨y, hy⟩
state_before: case mp.h.mp
R : Type u
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
h : LinearMap.ker S.g ≤ LinearMap.range S.f
x : ↑S.X₂
⊢ x ∈ LinearMap.range S.f → x ∈ LinearMap.ker S.g
state_after: case mp.h.mp.intro
R : Type u
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
h : LinearMap.ker S.g ≤ LinearMap.range S.f
x : ↑S.X₂
y : ↑S.X₁
hy : S.f y = x
⊢ x ∈ LinearMap.ker S.g

tactic: rw [← hy]
state_before: case mp.h.mp.intro
R : Type u
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
h : LinearMap.ker S.g ≤ LinearMap.range S.f
x : ↑S.X₂
y : ↑S.X₁
hy : S.f y = x
⊢ x ∈ LinearMap.ker S.g
state_after: case mp.h.mp.intro
R : Type u
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
h : LinearMap.ker S.g ≤ LinearMap.range S.f
x : ↑S.X₂
y : ↑S.X₁
hy : S.f y = x
⊢ S.f y ∈ LinearMap.ker S.g

tactic: simp only [LinearMap.mem_ker, moduleCat_zero_apply]
state_before: case mp.h.mp.intro
R : Type u
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
h : LinearMap.ker S.g ≤ LinearMap.range S.f
x : ↑S.X₂
y : ↑S.X₁
hy : S.f y = x
⊢ S.f y ∈ LinearMap.ker S.g
state_after: no goals

tactic: intro hx
state_before: case mp.h.mpr
R : Type u
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
h : LinearMap.ker S.g ≤ LinearMap.range S.f
x : ↑S.X₂
⊢ x ∈ LinearMap.ker S.g → x ∈ LinearMap.range S.f
state_after: case mp.h.mpr
R : Type u
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
h : LinearMap.ker S.g ≤ LinearMap.range S.f
x : ↑S.X₂
hx : x ∈ LinearMap.ker S.g
⊢ x ∈ LinearMap.range S.f

tactic: exact h hx
state_before: case mp.h.mpr
R : Type u
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
h : LinearMap.ker S.g ≤ LinearMap.range S.f
x : ↑S.X₂
hx : x ∈ LinearMap.ker S.g
⊢ x ∈ LinearMap.range S.f
state_after: no goals

tactic: intro h
state_before: case mpr
R : Type u
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
⊢ LinearMap.range S.f = LinearMap.ker S.g → LinearMap.ker S.g ≤ LinearMap.range S.f
state_after: case mpr
R : Type u
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
h : LinearMap.range S.f = LinearMap.ker S.g
⊢ LinearMap.ker S.g ≤ LinearMap.range S.f

tactic: rw [h]
state_before: case mpr
R : Type u
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
h : LinearMap.range S.f = LinearMap.ker S.g
⊢ LinearMap.ker S.g ≤ LinearMap.range S.f
state_after: no goals