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

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))
⊢ ⊤ ≤ 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: 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 ∈ ⊤
⊢ 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: 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 : 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: obtain ⟨cm, hm⟩ := 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: 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 ∈ 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: 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)
⊢ 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: obtain ⟨n, hnm⟩ := hsub
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: 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'
⊢ 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: 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 : 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: obtain ⟨cn, hn⟩ := 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: 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₁
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 [← 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
⊢ 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: 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 => 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: 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
⊢ (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: 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 • 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: apply add_mem
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: rw [hS.moduleCat_range_eq_ker]
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 ∈ ⊤
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 - m' ∈ LinearMap.range S.f
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 ∈ ⊤
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 - m' ∈ LinearMap.ker S.g

tactic: simp only [LinearMap.mem_ker, map_sub, sub_eq_zero]
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 ∈ ⊤
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 - m' ∈ LinearMap.ker S.g
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 ∈ ⊤
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)
⊢ S.g m = S.g m'

tactic: rw [← hm, map_finsupp_sum]
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 ∈ ⊤
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)
⊢ S.g m = S.g m'
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 ∈ ⊤
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)
⊢ (cm.sum fun i a => a • (⇑S.g ∘ u ∘ Sum.inr) i) = cm.sum fun a b => S.g (b • u (Sum.inr a))

tactic: simp only [Function.comp_apply, map_smul]
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 ∈ ⊤
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)
⊢ (cm.sum fun i a => a • (⇑S.g ∘ u ∘ Sum.inr) i) = cm.sum fun a b => S.g (b • u (Sum.inr a))
state_after: no goals

tactic: congr
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 ∈ ⊤
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)) = cn.sum fun a b => b • u (Sum.inl a)
state_after: case e_g
ι : 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
⊢ (fun a b => b • S.f (v a)) = fun a b => b • u (Sum.inl a)

tactic: ext a b
state_before: case e_g
ι : 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
⊢ (fun a b => b • S.f (v a)) = fun a b => b • u (Sum.inl a)
state_after: case e_g.h.h
ι : 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
a : ι
b : R
⊢ b • S.f (v a) = b • u (Sum.inl a)

tactic: rw [← Function.comp_apply (f := S.f), ← huv, Function.comp_apply]
state_before: case e_g.h.h
ι : 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
a : ι
b : R
⊢ b • S.f (v a) = b • u (Sum.inl a)
state_after: no goals

tactic: rw [Finsupp.mem_span_range_iff_exists_finsupp]
state_before: 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)
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)
⊢ ∃ c, (c.sum fun i a => a • u i) = cn.sum fun a b => b • u (Sum.inl a)

tactic: use cn.mapDomain (Sum.inl)
state_before: 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)
⊢ ∃ c, (c.sum fun i a => a • u i) = cn.sum fun a b => b • u (Sum.inl a)
state_after: case h
ι : 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)
⊢ ((Finsupp.mapDomain Sum.inl cn).sum fun i a => a • u i) = cn.sum fun a b => b • u (Sum.inl a)

tactic: rw [Finsupp.sum_mapDomain_index_inj Sum.inl_injective]
state_before: case h
ι : 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)
⊢ ((Finsupp.mapDomain Sum.inl cn).sum fun i a => a • u i) = cn.sum fun a b => b • u (Sum.inl a)
state_after: no goals

tactic: rw [Finsupp.mem_span_range_iff_exists_finsupp]
state_before: 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)
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)
⊢ ∃ c, (c.sum fun i a => a • u i) = m'

tactic: use cm.mapDomain (Sum.inr)
state_before: 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)
⊢ ∃ c, (c.sum fun i a => a • u i) = m'
state_after: case h
ι : 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)
⊢ ((Finsupp.mapDomain Sum.inr cm).sum fun i a => a • u i) = m'

tactic: rw [Finsupp.sum_mapDomain_index_inj Sum.inr_injective]
state_before: case h
ι : 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)
⊢ ((Finsupp.mapDomain Sum.inr cm).sum fun i a => a • u i) = m'
state_after: no goals