Theorem: Finsupp.range_total
File: Mathlib/LinearAlgebra/Finsupp.lean

tactic: ext x
state_before: α : Type u_3
M : Type u_1
N : Type ?u.330103
P : Type ?u.330106
R : Type u_2
S : Type ?u.330112
inst✝¹² : Semiring R
inst✝¹¹ : Semiring S
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : AddCommMonoid N
inst✝⁷ : Module R N
inst✝⁶ : AddCommMonoid P
inst✝⁵ : Module R P
α' : Type ?u.330204
M' : Type ?u.330207
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M'
inst✝² : AddCommMonoid M
inst✝¹ : Module R M'
inst✝ : Module R M
v : α → M
v' : α' → M'
⊢ LinearMap.range (Finsupp.total α M R v) = span R (Set.range v)

tactic: constructor
state_before: case h
α : Type u_3
M : Type u_1
N : Type ?u.330103
P : Type ?u.330106
R : Type u_2
S : Type ?u.330112
inst✝¹² : Semiring R
inst✝¹¹ : Semiring S
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : AddCommMonoid N
inst✝⁷ : Module R N
inst✝⁶ : AddCommMonoid P
inst✝⁵ : Module R P
α' : Type ?u.330204
M' : Type ?u.330207
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M'
inst✝² : AddCommMonoid M
inst✝¹ : Module R M'
inst✝ : Module R M
v : α → M
v' : α' → M'
x : M
⊢ x ∈ LinearMap.range (Finsupp.total α M R v) ↔ x ∈ span R (Set.range v)

tactic: intro hx
state_before: case h.mp
α : Type u_3
M : Type u_1
N : Type ?u.330103
P : Type ?u.330106
R : Type u_2
S : Type ?u.330112
inst✝¹² : Semiring R
inst✝¹¹ : Semiring S
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : AddCommMonoid N
inst✝⁷ : Module R N
inst✝⁶ : AddCommMonoid P
inst✝⁵ : Module R P
α' : Type ?u.330204
M' : Type ?u.330207
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M'
inst✝² : AddCommMonoid M
inst✝¹ : Module R M'
inst✝ : Module R M
v : α → M
v' : α' → M'
x : M
⊢ x ∈ LinearMap.range (Finsupp.total α M R v) → x ∈ span R (Set.range v)

tactic: rw [LinearMap.mem_range] at hx
state_before: case h.mp
α : Type u_3
M : Type u_1
N : Type ?u.330103
P : Type ?u.330106
R : Type u_2
S : Type ?u.330112
inst✝¹² : Semiring R
inst✝¹¹ : Semiring S
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : AddCommMonoid N
inst✝⁷ : Module R N
inst✝⁶ : AddCommMonoid P
inst✝⁵ : Module R P
α' : Type ?u.330204
M' : Type ?u.330207
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M'
inst✝² : AddCommMonoid M
inst✝¹ : Module R M'
inst✝ : Module R M
v : α → M
v' : α' → M'
x : M
hx : x ∈ LinearMap.range (Finsupp.total α M R v)
⊢ x ∈ span R (Set.range v)

tactic: rcases hx with ⟨l, hl⟩
state_before: case h.mp
α : Type u_3
M : Type u_1
N : Type ?u.330103
P : Type ?u.330106
R : Type u_2
S : Type ?u.330112
inst✝¹² : Semiring R
inst✝¹¹ : Semiring S
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : AddCommMonoid N
inst✝⁷ : Module R N
inst✝⁶ : AddCommMonoid P
inst✝⁵ : Module R P
α' : Type ?u.330204
M' : Type ?u.330207
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M'
inst✝² : AddCommMonoid M
inst✝¹ : Module R M'
inst✝ : Module R M
v : α → M
v' : α' → M'
x : M
hx : ∃ y, ↑(Finsupp.total α M R v) y = x
⊢ x ∈ span R (Set.range v)

tactic: rw [← hl]
state_before: case h.mp.intro
α : Type u_3
M : Type u_1
N : Type ?u.330103
P : Type ?u.330106
R : Type u_2
S : Type ?u.330112
inst✝¹² : Semiring R
inst✝¹¹ : Semiring S
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : AddCommMonoid N
inst✝⁷ : Module R N
inst✝⁶ : AddCommMonoid P
inst✝⁵ : Module R P
α' : Type ?u.330204
M' : Type ?u.330207
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M'
inst✝² : AddCommMonoid M
inst✝¹ : Module R M'
inst✝ : Module R M
v : α → M
v' : α' → M'
x : M
l : α →₀ R
hl : ↑(Finsupp.total α M R v) l = x
⊢ x ∈ span R (Set.range v)

tactic: rw [Finsupp.total_apply]
state_before: case h.mp.intro
α : Type u_3
M : Type u_1
N : Type ?u.330103
P : Type ?u.330106
R : Type u_2
S : Type ?u.330112
inst✝¹² : Semiring R
inst✝¹¹ : Semiring S
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : AddCommMonoid N
inst✝⁷ : Module R N
inst✝⁶ : AddCommMonoid P
inst✝⁵ : Module R P
α' : Type ?u.330204
M' : Type ?u.330207
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M'
inst✝² : AddCommMonoid M
inst✝¹ : Module R M'
inst✝ : Module R M
v : α → M
v' : α' → M'
x : M
l : α →₀ R
hl : ↑(Finsupp.total α M R v) l = x
⊢ ↑(Finsupp.total α M R v) l ∈ span R (Set.range v)

tactic: exact sum_mem fun i _ => Submodule.smul_mem _ _ (subset_span (mem_range_self i))
state_before: case h.mp.intro
α : Type u_3
M : Type u_1
N : Type ?u.330103
P : Type ?u.330106
R : Type u_2
S : Type ?u.330112
inst✝¹² : Semiring R
inst✝¹¹ : Semiring S
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : AddCommMonoid N
inst✝⁷ : Module R N
inst✝⁶ : AddCommMonoid P
inst✝⁵ : Module R P
α' : Type ?u.330204
M' : Type ?u.330207
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M'
inst✝² : AddCommMonoid M
inst✝¹ : Module R M'
inst✝ : Module R M
v : α → M
v' : α' → M'
x : M
l : α →₀ R
hl : ↑(Finsupp.total α M R v) l = x
⊢ (sum l fun i a => a • v i) ∈ span R (Set.range v)

tactic: apply span_le.2
state_before: case h.mpr
α : Type u_3
M : Type u_1
N : Type ?u.330103
P : Type ?u.330106
R : Type u_2
S : Type ?u.330112
inst✝¹² : Semiring R
inst✝¹¹ : Semiring S
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : AddCommMonoid N
inst✝⁷ : Module R N
inst✝⁶ : AddCommMonoid P
inst✝⁵ : Module R P
α' : Type ?u.330204
M' : Type ?u.330207
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M'
inst✝² : AddCommMonoid M
inst✝¹ : Module R M'
inst✝ : Module R M
v : α → M
v' : α' → M'
x : M
⊢ x ∈ span R (Set.range v) → x ∈ LinearMap.range (Finsupp.total α M R v)

tactic: intro x hx
state_before: case h.mpr.a
α : Type u_3
M : Type u_1
N : Type ?u.330103
P : Type ?u.330106
R : Type u_2
S : Type ?u.330112
inst✝¹² : Semiring R
inst✝¹¹ : Semiring S
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : AddCommMonoid N
inst✝⁷ : Module R N
inst✝⁶ : AddCommMonoid P
inst✝⁵ : Module R P
α' : Type ?u.330204
M' : Type ?u.330207
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M'
inst✝² : AddCommMonoid M
inst✝¹ : Module R M'
inst✝ : Module R M
v : α → M
v' : α' → M'
x : M
⊢ Set.range v ⊆ ↑(LinearMap.range (Finsupp.total α M R v))

tactic: rcases hx with ⟨i, hi⟩
state_before: case h.mpr.a
α : Type u_3
M : Type u_1
N : Type ?u.330103
P : Type ?u.330106
R : Type u_2
S : Type ?u.330112
inst✝¹² : Semiring R
inst✝¹¹ : Semiring S
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : AddCommMonoid N
inst✝⁷ : Module R N
inst✝⁶ : AddCommMonoid P
inst✝⁵ : Module R P
α' : Type ?u.330204
M' : Type ?u.330207
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M'
inst✝² : AddCommMonoid M
inst✝¹ : Module R M'
inst✝ : Module R M
v : α → M
v' : α' → M'
x✝ x : M
hx : x ∈ Set.range v
⊢ x ∈ ↑(LinearMap.range (Finsupp.total α M R v))

tactic: rw [SetLike.mem_coe, LinearMap.mem_range]
state_before: case h.mpr.a.intro
α : Type u_3
M : Type u_1
N : Type ?u.330103
P : Type ?u.330106
R : Type u_2
S : Type ?u.330112
inst✝¹² : Semiring R
inst✝¹¹ : Semiring S
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : AddCommMonoid N
inst✝⁷ : Module R N
inst✝⁶ : AddCommMonoid P
inst✝⁵ : Module R P
α' : Type ?u.330204
M' : Type ?u.330207
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M'
inst✝² : AddCommMonoid M
inst✝¹ : Module R M'
inst✝ : Module R M
v : α → M
v' : α' → M'
x✝ x : M
i : α
hi : v i = x
⊢ x ∈ ↑(LinearMap.range (Finsupp.total α M R v))

tactic: use Finsupp.single i 1
state_before: case h.mpr.a.intro
α : Type u_3
M : Type u_1
N : Type ?u.330103
P : Type ?u.330106
R : Type u_2
S : Type ?u.330112
inst✝¹² : Semiring R
inst✝¹¹ : Semiring S
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : AddCommMonoid N
inst✝⁷ : Module R N
inst✝⁶ : AddCommMonoid P
inst✝⁵ : Module R P
α' : Type ?u.330204
M' : Type ?u.330207
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M'
inst✝² : AddCommMonoid M
inst✝¹ : Module R M'
inst✝ : Module R M
v : α → M
v' : α' → M'
x✝ x : M
i : α
hi : v i = x
⊢ ∃ y, ↑(Finsupp.total α M R v) y = x

tactic: simp [hi]
state_before: case h.mpr.a.intro
α : Type u_3
M : Type u_1
N : Type ?u.330103
P : Type ?u.330106
R : Type u_2
S : Type ?u.330112
inst✝¹² : Semiring R
inst✝¹¹ : Semiring S
inst✝¹⁰ : AddCommMonoid M
inst✝⁹ : Module R M
inst✝⁸ : AddCommMonoid N
inst✝⁷ : Module R N
inst✝⁶ : AddCommMonoid P
inst✝⁵ : Module R P
α' : Type ?u.330204
M' : Type ?u.330207
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M'
inst✝² : AddCommMonoid M
inst✝¹ : Module R M'
inst✝ : Module R M
v : α → M
v' : α' → M'
x✝ x : M
i : α
hi : v i = x
⊢ ↑(Finsupp.total α M R v) (single i 1) = x