Theorem: ModuleCat.span_exact
File: Mathlib/Algebra/Category/ModuleCat/Free.lean

Proof steps:
state_before: ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
β : Type u_4
u : ι ⊕ β → ↑S.X₂
huv : u ∘ Sum.inl = ⇑S.f ∘ v
hv : ⊤ ≤ span R (range v)
hw : ⊤ ≤ span R (range (⇑S.g ∘ u ∘ Sum.inr))
⊢ ⊤ ≤ span R (range u)
state_after: ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
β : Type u_4
u : ι ⊕ β → ↑S.X₂
huv : u ∘ Sum.inl = ⇑S.f ∘ v
hv : ⊤ ≤ span R (range v)
hw : ⊤ ≤ span R (range (⇑S.g ∘ u ∘ Sum.inr))
m : ↑S.X₂
a✝ : m ∈ ⊤
⊢ m ∈ span R (range u)
tactic: intro m _
state_before: ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
β : Type u_4
u : ι ⊕ β → ↑S.X₂
huv : u ∘ Sum.inl = ⇑S.f ∘ v
hv : ⊤ ≤ span R (range v)
hw : ⊤ ≤ span R (range (⇑S.g ∘ u ∘ Sum.inr))
m : ↑S.X₂
a✝ : m ∈ ⊤
⊢ m ∈ span R (range u)
state_after: ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
β : Type u_4
u : ι ⊕ β → ↑S.X₂
huv : u ∘ Sum.inl = ⇑S.f ∘ v
hv : ⊤ ≤ span R (range v)
hw : ⊤ ≤ span R (range (⇑S.g ∘ u ∘ Sum.inr))
m : ↑S.X₂
a✝ : m ∈ ⊤
hgm : S.g m ∈ span R (range (⇑S.g ∘ u ∘ Sum.inr))
⊢ m ∈ span R (range u)
tactic: have hgm : S.g m ∈ span R (range (S.g ∘ u ∘ Sum.inr)) := hw mem_top
state_before: ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
β : Type u_4
u : ι ⊕ β → ↑S.X₂
huv : u ∘ Sum.inl = ⇑S.f ∘ v
hv : ⊤ ≤ span R (range v)
hw : ⊤ ≤ span R (range (⇑S.g ∘ u ∘ Sum.inr))
m : ↑S.X₂
a✝ : m ∈ ⊤
hgm : S.g m ∈ span R (range (⇑S.g ∘ u ∘ Sum.inr))
⊢ m ∈ span R (range u)
state_after: ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
β : Type u_4
u : ι ⊕ β → ↑S.X₂
huv : u ∘ Sum.inl = ⇑S.f ∘ v
hv : ⊤ ≤ span R (range v)
hw : ⊤ ≤ span R (range (⇑S.g ∘ u ∘ Sum.inr))
m : ↑S.X₂
a✝ : m ∈ ⊤
hgm : ∃ c, (c.sum fun i a => a • (⇑S.g ∘ u ∘ Sum.inr) i) = S.g m
⊢ m ∈ span R (range u)
tactic: rw [Finsupp.mem_span_range_iff_exists_finsupp] at hgm
state_before: ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
β : Type u_4
u : ι ⊕ β → ↑S.X₂
huv : u ∘ Sum.inl = ⇑S.f ∘ v
hv : ⊤ ≤ span R (range v)
hw : ⊤ ≤ span R (range (⇑S.g ∘ u ∘ Sum.inr))
m : ↑S.X₂
a✝ : m ∈ ⊤
hgm : ∃ c, (c.sum fun i a => a • (⇑S.g ∘ u ∘ Sum.inr) i) = S.g m
⊢ m ∈ span R (range u)
state_after: case intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
β : Type u_4
u : ι ⊕ β → ↑S.X₂
huv : u ∘ Sum.inl = ⇑S.f ∘ v
hv : ⊤ ≤ span R (range v)
hw : ⊤ ≤ span R (range (⇑S.g ∘ u ∘ Sum.inr))
m : ↑S.X₂
a✝ : m ∈ ⊤
cm : β →₀ R
hm : (cm.sum fun i a => a • (⇑S.g ∘ u ∘ Sum.inr) i) = S.g m
⊢ m ∈ span R (range u)
tactic: obtain ⟨cm, hm⟩ := hgm
state_before: case intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
β : Type u_4
u : ι ⊕ β → ↑S.X₂
huv : u ∘ Sum.inl = ⇑S.f ∘ v
hv : ⊤ ≤ span R (range v)
hw : ⊤ ≤ span R (range (⇑S.g ∘ u ∘ Sum.inr))
m : ↑S.X₂
a✝ : m ∈ ⊤
cm : β →₀ R
hm : (cm.sum fun i a => a • (⇑S.g ∘ u ∘ Sum.inr) i) = S.g m
⊢ m ∈ span R (range u)
state_after: case intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
β : Type u_4
u : ι ⊕ β → ↑S.X₂
huv : u ∘ Sum.inl = ⇑S.f ∘ v
hv : ⊤ ≤ span R (range v)
hw : ⊤ ≤ span R (range (⇑S.g ∘ u ∘ Sum.inr))
m : ↑S.X₂
a✝ : m ∈ ⊤
cm : β →₀ R
hm : (cm.sum fun i a => a • (⇑S.g ∘ u ∘ Sum.inr) i) = S.g m
m' : ↑S.X₂ := cm.sum fun j a => a • u (Sum.inr j)
⊢ m ∈ span R (range u)
tactic: let m' : S.X₂ := Finsupp.sum cm fun j a ↦ a • (u (Sum.inr j))
state_before: case intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
β : Type u_4
u : ι ⊕ β → ↑S.X₂
huv : u ∘ Sum.inl = ⇑S.f ∘ v
hv : ⊤ ≤ span R (range v)
hw : ⊤ ≤ span R (range (⇑S.g ∘ u ∘ Sum.inr))
m : ↑S.X₂
a✝ : m ∈ ⊤
cm : β →₀ R
hm : (cm.sum fun i a => a • (⇑S.g ∘ u ∘ Sum.inr) i) = S.g m
m' : ↑S.X₂ := cm.sum fun j a => a • u (Sum.inr j)
⊢ m ∈ span R (range u)
state_after: case intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
β : Type u_4
u : ι ⊕ β → ↑S.X₂
huv : u ∘ Sum.inl = ⇑S.f ∘ v
hv : ⊤ ≤ span R (range v)
hw : ⊤ ≤ span R (range (⇑S.g ∘ u ∘ Sum.inr))
m : ↑S.X₂
a✝ : m ∈ ⊤
cm : β →₀ R
hm : (cm.sum fun i a => a • (⇑S.g ∘ u ∘ Sum.inr) i) = S.g m
m' : ↑S.X₂ := cm.sum fun j a => a • u (Sum.inr j)
hsub : m - m' ∈ LinearMap.range S.f
⊢ m ∈ span R (range u)
tactic: have hsub : m - m' ∈ LinearMap.range S.f := by
    rw [hS.moduleCat_range_eq_ker]
    simp only [LinearMap.mem_ker, map_sub, sub_eq_zero]
    rw [← hm, map_finsupp_sum]
    simp only [Function.comp_apply, map_smul]
state_before: case intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
β : Type u_4
u : ι ⊕ β → ↑S.X₂
huv : u ∘ Sum.inl = ⇑S.f ∘ v
hv : ⊤ ≤ span R (range v)
hw : ⊤ ≤ span R (range (⇑S.g ∘ u ∘ Sum.inr))
m : ↑S.X₂
a✝ : m ∈ ⊤
cm : β →₀ R
hm : (cm.sum fun i a => a • (⇑S.g ∘ u ∘ Sum.inr) i) = S.g m
m' : ↑S.X₂ := cm.sum fun j a => a • u (Sum.inr j)
hsub : m - m' ∈ LinearMap.range S.f
⊢ m ∈ span R (range u)
state_after: case intro.intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
β : Type u_4
u : ι ⊕ β → ↑S.X₂
huv : u ∘ Sum.inl = ⇑S.f ∘ v
hv : ⊤ ≤ span R (range v)
hw : ⊤ ≤ span R (range (⇑S.g ∘ u ∘ Sum.inr))
m : ↑S.X₂
a✝ : m ∈ ⊤
cm : β →₀ R
hm : (cm.sum fun i a => a • (⇑S.g ∘ u ∘ Sum.inr) i) = S.g m
m' : ↑S.X₂ := cm.sum fun j a => a • u (Sum.inr j)
n : ↑S.X₁
hnm : S.f n = m - m'
⊢ m ∈ span R (range u)
tactic: obtain ⟨n, hnm⟩ := hsub
state_before: case intro.intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
β : Type u_4
u : ι ⊕ β → ↑S.X₂
huv : u ∘ Sum.inl = ⇑S.f ∘ v
hv : ⊤ ≤ span R (range v)
hw : ⊤ ≤ span R (range (⇑S.g ∘ u ∘ Sum.inr))
m : ↑S.X₂
a✝ : m ∈ ⊤
cm : β →₀ R
hm : (cm.sum fun i a => a • (⇑S.g ∘ u ∘ Sum.inr) i) = S.g m
m' : ↑S.X₂ := cm.sum fun j a => a • u (Sum.inr j)
n : ↑S.X₁
hnm : S.f n = m - m'
⊢ m ∈ span R (range u)
state_after: case intro.intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
β : Type u_4
u : ι ⊕ β → ↑S.X₂
huv : u ∘ Sum.inl = ⇑S.f ∘ v
hv : ⊤ ≤ span R (range v)
hw : ⊤ ≤ span R (range (⇑S.g ∘ u ∘ Sum.inr))
m : ↑S.X₂
a✝ : m ∈ ⊤
cm : β →₀ R
hm : (cm.sum fun i a => a • (⇑S.g ∘ u ∘ Sum.inr) i) = S.g m
m' : ↑S.X₂ := cm.sum fun j a => a • u (Sum.inr j)
n : ↑S.X₁
hnm : S.f n = m - m'
hn : n ∈ span R (range v)
⊢ m ∈ span R (range u)
tactic: have hn : n ∈ span R (range v) := hv mem_top
state_before: case intro.intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
β : Type u_4
u : ι ⊕ β → ↑S.X₂
huv : u ∘ Sum.inl = ⇑S.f ∘ v
hv : ⊤ ≤ span R (range v)
hw : ⊤ ≤ span R (range (⇑S.g ∘ u ∘ Sum.inr))
m : ↑S.X₂
a✝ : m ∈ ⊤
cm : β →₀ R
hm : (cm.sum fun i a => a • (⇑S.g ∘ u ∘ Sum.inr) i) = S.g m
m' : ↑S.X₂ := cm.sum fun j a => a • u (Sum.inr j)
n : ↑S.X₁
hnm : S.f n = m - m'
hn : n ∈ span R (range v)
⊢ m ∈ span R (range u)
state_after: case intro.intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
β : Type u_4
u : ι ⊕ β → ↑S.X₂
huv : u ∘ Sum.inl = ⇑S.f ∘ v
hv : ⊤ ≤ span R (range v)
hw : ⊤ ≤ span R (range (⇑S.g ∘ u ∘ Sum.inr))
m : ↑S.X₂
a✝ : m ∈ ⊤
cm : β →₀ R
hm : (cm.sum fun i a => a • (⇑S.g ∘ u ∘ Sum.inr) i) = S.g m
m' : ↑S.X₂ := cm.sum fun j a => a • u (Sum.inr j)
n : ↑S.X₁
hnm : S.f n = m - m'
hn : ∃ c, (c.sum fun i a => a • v i) = n
⊢ m ∈ span R (range u)
tactic: rw [Finsupp.mem_span_range_iff_exists_finsupp] at hn
state_before: case intro.intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
β : Type u_4
u : ι ⊕ β → ↑S.X₂
huv : u ∘ Sum.inl = ⇑S.f ∘ v
hv : ⊤ ≤ span R (range v)
hw : ⊤ ≤ span R (range (⇑S.g ∘ u ∘ Sum.inr))
m : ↑S.X₂
a✝ : m ∈ ⊤
cm : β →₀ R
hm : (cm.sum fun i a => a • (⇑S.g ∘ u ∘ Sum.inr) i) = S.g m
m' : ↑S.X₂ := cm.sum fun j a => a • u (Sum.inr j)
n : ↑S.X₁
hnm : S.f n = m - m'
hn : ∃ c, (c.sum fun i a => a • v i) = n
⊢ m ∈ span R (range u)
state_after: case intro.intro.intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
β : Type u_4
u : ι ⊕ β → ↑S.X₂
huv : u ∘ Sum.inl = ⇑S.f ∘ v
hv : ⊤ ≤ span R (range v)
hw : ⊤ ≤ span R (range (⇑S.g ∘ u ∘ Sum.inr))
m : ↑S.X₂
a✝ : m ∈ ⊤
cm : β →₀ R
hm : (cm.sum fun i a => a • (⇑S.g ∘ u ∘ Sum.inr) i) = S.g m
m' : ↑S.X₂ := cm.sum fun j a => a • u (Sum.inr j)
n : ↑S.X₁
hnm : S.f n = m - m'
cn : ι →₀ R
hn : (cn.sum fun i a => a • v i) = n
⊢ m ∈ span R (range u)
tactic: obtain ⟨cn, hn⟩ := hn
state_before: case intro.intro.intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
β : Type u_4
u : ι ⊕ β → ↑S.X₂
huv : u ∘ Sum.inl = ⇑S.f ∘ v
hv : ⊤ ≤ span R (range v)
hw : ⊤ ≤ span R (range (⇑S.g ∘ u ∘ Sum.inr))
m : ↑S.X₂
a✝ : m ∈ ⊤
cm : β →₀ R
hm : (cm.sum fun i a => a • (⇑S.g ∘ u ∘ Sum.inr) i) = S.g m
m' : ↑S.X₂ := cm.sum fun j a => a • u (Sum.inr j)
n : ↑S.X₁
hnm : S.f n = m - m'
cn : ι →₀ R
hn : (cn.sum fun i a => a • v i) = n
⊢ m ∈ span R (range u)
state_after: case intro.intro.intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
β : Type u_4
u : ι ⊕ β → ↑S.X₂
huv : u ∘ Sum.inl = ⇑S.f ∘ v
hv : ⊤ ≤ span R (range v)
hw : ⊤ ≤ span R (range (⇑S.g ∘ u ∘ Sum.inr))
m : ↑S.X₂
a✝ : m ∈ ⊤
cm : β →₀ R
hm : (cm.sum fun i a => a • (⇑S.g ∘ u ∘ Sum.inr) i) = S.g m
m' : ↑S.X₂ := cm.sum fun j a => a • u (Sum.inr j)
n : ↑S.X₁
cn : ι →₀ R
hnm : (cn.sum fun a b => S.f (b • v a)) = m - m'
hn : (cn.sum fun i a => a • v i) = n
⊢ m ∈ span R (range u)
tactic: rw [← hn, map_finsupp_sum] at hnm
state_before: case intro.intro.intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
β : Type u_4
u : ι ⊕ β → ↑S.X₂
huv : u ∘ Sum.inl = ⇑S.f ∘ v
hv : ⊤ ≤ span R (range v)
hw : ⊤ ≤ span R (range (⇑S.g ∘ u ∘ Sum.inr))
m : ↑S.X₂
a✝ : m ∈ ⊤
cm : β →₀ R
hm : (cm.sum fun i a => a • (⇑S.g ∘ u ∘ Sum.inr) i) = S.g m
m' : ↑S.X₂ := cm.sum fun j a => a • u (Sum.inr j)
n : ↑S.X₁
cn : ι →₀ R
hnm : (cn.sum fun a b => S.f (b • v a)) = m - m'
hn : (cn.sum fun i a => a • v i) = n
⊢ m ∈ span R (range u)
state_after: case intro.intro.intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
β : Type u_4
u : ι ⊕ β → ↑S.X₂
huv : u ∘ Sum.inl = ⇑S.f ∘ v
hv : ⊤ ≤ span R (range v)
hw : ⊤ ≤ span R (range (⇑S.g ∘ u ∘ Sum.inr))
m : ↑S.X₂
a✝ : m ∈ ⊤
cm : β →₀ R
hm : (cm.sum fun i a => a • (⇑S.g ∘ u ∘ Sum.inr) i) = S.g m
m' : ↑S.X₂ := cm.sum fun j a => a • u (Sum.inr j)
n : ↑S.X₁
cn : ι →₀ R
hnm : (cn.sum fun a b => S.f (b • v a)) = m - m'
hn : (cn.sum fun i a => a • v i) = n
⊢ (cn.sum fun a b => S.f (b • v a)) + m' ∈ span R (range u)
tactic: rw [← sub_add_cancel m m', ← hnm,]
state_before: case intro.intro.intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
β : Type u_4
u : ι ⊕ β → ↑S.X₂
huv : u ∘ Sum.inl = ⇑S.f ∘ v
hv : ⊤ ≤ span R (range v)
hw : ⊤ ≤ span R (range (⇑S.g ∘ u ∘ Sum.inr))
m : ↑S.X₂
a✝ : m ∈ ⊤
cm : β →₀ R
hm : (cm.sum fun i a => a • (⇑S.g ∘ u ∘ Sum.inr) i) = S.g m
m' : ↑S.X₂ := cm.sum fun j a => a • u (Sum.inr j)
n : ↑S.X₁
cn : ι →₀ R
hnm : (cn.sum fun a b => S.f (b • v a)) = m - m'
hn : (cn.sum fun i a => a • v i) = n
⊢ (cn.sum fun a b => S.f (b • v a)) + m' ∈ span R (range u)
state_after: case intro.intro.intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
β : Type u_4
u : ι ⊕ β → ↑S.X₂
huv : u ∘ Sum.inl = ⇑S.f ∘ v
hv : ⊤ ≤ span R (range v)
hw : ⊤ ≤ span R (range (⇑S.g ∘ u ∘ Sum.inr))
m : ↑S.X₂
a✝ : m ∈ ⊤
cm : β →₀ R
hm : (cm.sum fun i a => a • (⇑S.g ∘ u ∘ Sum.inr) i) = S.g m
m' : ↑S.X₂ := cm.sum fun j a => a • u (Sum.inr j)
n : ↑S.X₁
cn : ι →₀ R
hnm : (cn.sum fun a b => S.f (b • v a)) = m - m'
hn : (cn.sum fun i a => a • v i) = n
⊢ (cn.sum fun a b => b • S.f (v a)) + m' ∈ span R (range u)
tactic: simp only [map_smul]
state_before: case intro.intro.intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
β : Type u_4
u : ι ⊕ β → ↑S.X₂
huv : u ∘ Sum.inl = ⇑S.f ∘ v
hv : ⊤ ≤ span R (range v)
hw : ⊤ ≤ span R (range (⇑S.g ∘ u ∘ Sum.inr))
m : ↑S.X₂
a✝ : m ∈ ⊤
cm : β →₀ R
hm : (cm.sum fun i a => a • (⇑S.g ∘ u ∘ Sum.inr) i) = S.g m
m' : ↑S.X₂ := cm.sum fun j a => a • u (Sum.inr j)
n : ↑S.X₁
cn : ι →₀ R
hnm : (cn.sum fun a b => S.f (b • v a)) = m - m'
hn : (cn.sum fun i a => a • v i) = n
⊢ (cn.sum fun a b => b • S.f (v a)) + m' ∈ span R (range u)
state_after: case intro.intro.intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
β : Type u_4
u : ι ⊕ β → ↑S.X₂
huv : u ∘ Sum.inl = ⇑S.f ∘ v
hv : ⊤ ≤ span R (range v)
hw : ⊤ ≤ span R (range (⇑S.g ∘ u ∘ Sum.inr))
m : ↑S.X₂
a✝ : m ∈ ⊤
cm : β →₀ R
hm : (cm.sum fun i a => a • (⇑S.g ∘ u ∘ Sum.inr) i) = S.g m
m' : ↑S.X₂ := cm.sum fun j a => a • u (Sum.inr j)
n : ↑S.X₁
cn : ι →₀ R
hnm : (cn.sum fun a b => S.f (b • v a)) = m - m'
hn : (cn.sum fun i a => a • v i) = n
hn' : (cn.sum fun a b => b • S.f (v a)) = cn.sum fun a b => b • u (Sum.inl a)
⊢ (cn.sum fun a b => b • S.f (v a)) + m' ∈ span R (range u)
tactic: have hn' : (Finsupp.sum cn fun a b ↦ b • S.f (v a)) =
      (Finsupp.sum cn fun a b ↦ b • u (Sum.inl a)) := by
    congr; ext a b; rw [← Function.comp_apply (f := S.f), ← huv, Function.comp_apply]
state_before: case intro.intro.intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
β : Type u_4
u : ι ⊕ β → ↑S.X₂
huv : u ∘ Sum.inl = ⇑S.f ∘ v
hv : ⊤ ≤ span R (range v)
hw : ⊤ ≤ span R (range (⇑S.g ∘ u ∘ Sum.inr))
m : ↑S.X₂
a✝ : m ∈ ⊤
cm : β →₀ R
hm : (cm.sum fun i a => a • (⇑S.g ∘ u ∘ Sum.inr) i) = S.g m
m' : ↑S.X₂ := cm.sum fun j a => a • u (Sum.inr j)
n : ↑S.X₁
cn : ι →₀ R
hnm : (cn.sum fun a b => S.f (b • v a)) = m - m'
hn : (cn.sum fun i a => a • v i) = n
hn' : (cn.sum fun a b => b • S.f (v a)) = cn.sum fun a b => b • u (Sum.inl a)
⊢ (cn.sum fun a b => b • S.f (v a)) + m' ∈ span R (range u)
state_after: case intro.intro.intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
β : Type u_4
u : ι ⊕ β → ↑S.X₂
huv : u ∘ Sum.inl = ⇑S.f ∘ v
hv : ⊤ ≤ span R (range v)
hw : ⊤ ≤ span R (range (⇑S.g ∘ u ∘ Sum.inr))
m : ↑S.X₂
a✝ : m ∈ ⊤
cm : β →₀ R
hm : (cm.sum fun i a => a • (⇑S.g ∘ u ∘ Sum.inr) i) = S.g m
m' : ↑S.X₂ := cm.sum fun j a => a • u (Sum.inr j)
n : ↑S.X₁
cn : ι →₀ R
hnm : (cn.sum fun a b => S.f (b • v a)) = m - m'
hn : (cn.sum fun i a => a • v i) = n
hn' : (cn.sum fun a b => b • S.f (v a)) = cn.sum fun a b => b • u (Sum.inl a)
⊢ (cn.sum fun a b => b • u (Sum.inl a)) + m' ∈ span R (range u)
tactic: rw [hn']
state_before: case intro.intro.intro
ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
β : Type u_4
u : ι ⊕ β → ↑S.X₂
huv : u ∘ Sum.inl = ⇑S.f ∘ v
hv : ⊤ ≤ span R (range v)
hw : ⊤ ≤ span R (range (⇑S.g ∘ u ∘ Sum.inr))
m : ↑S.X₂
a✝ : m ∈ ⊤
cm : β →₀ R
hm : (cm.sum fun i a => a • (⇑S.g ∘ u ∘ Sum.inr) i) = S.g m
m' : ↑S.X₂ := cm.sum fun j a => a • u (Sum.inr j)
n : ↑S.X₁
cn : ι →₀ R
hnm : (cn.sum fun a b => S.f (b • v a)) = m - m'
hn : (cn.sum fun i a => a • v i) = n
hn' : (cn.sum fun a b => b • S.f (v a)) = cn.sum fun a b => b • u (Sum.inl a)
⊢ (cn.sum fun a b => b • u (Sum.inl a)) + m' ∈ span R (range u)
state_after: case intro.intro.intro.a
ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
β : Type u_4
u : ι ⊕ β → ↑S.X₂
huv : u ∘ Sum.inl = ⇑S.f ∘ v
hv : ⊤ ≤ span R (range v)
hw : ⊤ ≤ span R (range (⇑S.g ∘ u ∘ Sum.inr))
m : ↑S.X₂
a✝ : m ∈ ⊤
cm : β →₀ R
hm : (cm.sum fun i a => a • (⇑S.g ∘ u ∘ Sum.inr) i) = S.g m
m' : ↑S.X₂ := cm.sum fun j a => a • u (Sum.inr j)
n : ↑S.X₁
cn : ι →₀ R
hnm : (cn.sum fun a b => S.f (b • v a)) = m - m'
hn : (cn.sum fun i a => a • v i) = n
hn' : (cn.sum fun a b => b • S.f (v a)) = cn.sum fun a b => b • u (Sum.inl a)
⊢ (cn.sum fun a b => b • u (Sum.inl a)) ∈ span R (range u)

case intro.intro.intro.a
ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
β : Type u_4
u : ι ⊕ β → ↑S.X₂
huv : u ∘ Sum.inl = ⇑S.f ∘ v
hv : ⊤ ≤ span R (range v)
hw : ⊤ ≤ span R (range (⇑S.g ∘ u ∘ Sum.inr))
m : ↑S.X₂
a✝ : m ∈ ⊤
cm : β →₀ R
hm : (cm.sum fun i a => a • (⇑S.g ∘ u ∘ Sum.inr) i) = S.g m
m' : ↑S.X₂ := cm.sum fun j a => a • u (Sum.inr j)
n : ↑S.X₁
cn : ι →₀ R
hnm : (cn.sum fun a b => S.f (b • v a)) = m - m'
hn : (cn.sum fun i a => a • v i) = n
hn' : (cn.sum fun a b => b • S.f (v a)) = cn.sum fun a b => b • u (Sum.inl a)
⊢ m' ∈ span R (range u)
tactic: apply add_mem