Theorem: mem_span_set'
File: Mathlib/LinearAlgebra/Finsupp.lean

tactic: refine ⟨fun h ↦ ?_, ?_⟩
state_before: R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
m : M
s : Set M
⊢ m ∈ span R s ↔ ∃ n f g, ∑ i : Fin n, f i • ↑(g i) = m
state_after: case refine_1
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
m : M
s : Set M
h : m ∈ span R s
⊢ ∃ n f g, ∑ i : Fin n, f i • ↑(g i) = m

case refine_2
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
m : M
s : Set M
⊢ (∃ n f g, ∑ i : Fin n, f i • ↑(g i) = m) → m ∈ span R s

tactic: rcases mem_span_set.1 h with ⟨c, cs, rfl⟩
state_before: case refine_1
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
m : M
s : Set M
h : m ∈ span R s
⊢ ∃ n f g, ∑ i : Fin n, f i • ↑(g i) = m
state_after: case refine_1.intro.intro
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
s : Set M
c : M →₀ R
cs : ↑c.support ⊆ s
h : (c.sum fun mi r => r • mi) ∈ span R s
⊢ ∃ n f g, ∑ i : Fin n, f i • ↑(g i) = c.sum fun mi r => r • mi

tactic: have A : c.support ≃ Fin c.support.card := Finset.equivFin _
state_before: case refine_1.intro.intro
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
s : Set M
c : M →₀ R
cs : ↑c.support ⊆ s
h : (c.sum fun mi r => r • mi) ∈ span R s
⊢ ∃ n f g, ∑ i : Fin n, f i • ↑(g i) = c.sum fun mi r => r • mi
state_after: case refine_1.intro.intro
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
s : Set M
c : M →₀ R
cs : ↑c.support ⊆ s
h : (c.sum fun mi r => r • mi) ∈ span R s
A : { x // x ∈ c.support } ≃ Fin c.support.card
⊢ ∃ n f g, ∑ i : Fin n, f i • ↑(g i) = c.sum fun mi r => r • mi

tactic: refine ⟨_, fun i ↦ c (A.symm i), fun i ↦ ⟨A.symm i, cs (A.symm i).2⟩, ?_⟩
state_before: case refine_1.intro.intro
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
s : Set M
c : M →₀ R
cs : ↑c.support ⊆ s
h : (c.sum fun mi r => r • mi) ∈ span R s
A : { x // x ∈ c.support } ≃ Fin c.support.card
⊢ ∃ n f g, ∑ i : Fin n, f i • ↑(g i) = c.sum fun mi r => r • mi
state_after: case refine_1.intro.intro
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
s : Set M
c : M →₀ R
cs : ↑c.support ⊆ s
h : (c.sum fun mi r => r • mi) ∈ span R s
A : { x // x ∈ c.support } ≃ Fin c.support.card
⊢ ∑ i : Fin c.support.card, (fun i => c ↑(A.symm i)) i • ↑((fun i => ⟨↑(A.symm i), ⋯⟩) i) = c.sum fun mi r => r • mi

tactic: rw [Finsupp.sum, ← Finset.sum_coe_sort c.support]
state_before: case refine_1.intro.intro
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
s : Set M
c : M →₀ R
cs : ↑c.support ⊆ s
h : (c.sum fun mi r => r • mi) ∈ span R s
A : { x // x ∈ c.support } ≃ Fin c.support.card
⊢ ∑ i : Fin c.support.card, (fun i => c ↑(A.symm i)) i • ↑((fun i => ⟨↑(A.symm i), ⋯⟩) i) = c.sum fun mi r => r • mi
state_after: case refine_1.intro.intro
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
s : Set M
c : M →₀ R
cs : ↑c.support ⊆ s
h : (c.sum fun mi r => r • mi) ∈ span R s
A : { x // x ∈ c.support } ≃ Fin c.support.card
⊢ ∑ i : Fin c.support.card, (fun i => c ↑(A.symm i)) i • ↑((fun i => ⟨↑(A.symm i), ⋯⟩) i) =
    ∑ i : { x // x ∈ c.support }, c ↑i • ↑i

tactic: exact Fintype.sum_equiv A.symm _ (fun j ↦ c j • (j : M)) (fun i ↦ rfl)
state_before: case refine_1.intro.intro
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
s : Set M
c : M →₀ R
cs : ↑c.support ⊆ s
h : (c.sum fun mi r => r • mi) ∈ span R s
A : { x // x ∈ c.support } ≃ Fin c.support.card
⊢ ∑ i : Fin c.support.card, (fun i => c ↑(A.symm i)) i • ↑((fun i => ⟨↑(A.symm i), ⋯⟩) i) =
    ∑ i : { x // x ∈ c.support }, c ↑i • ↑i
state_after: no goals

tactic: rintro ⟨n, f, g, rfl⟩
state_before: case refine_2
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
m : M
s : Set M
⊢ (∃ n f g, ∑ i : Fin n, f i • ↑(g i) = m) → m ∈ span R s
state_after: case refine_2.intro.intro.intro
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
s : Set M
n : ℕ
f : Fin n → R
g : Fin n → ↑s
⊢ ∑ i : Fin n, f i • ↑(g i) ∈ span R s

tactic: exact Submodule.sum_mem _ (fun i _ ↦ Submodule.smul_mem _ _ (Submodule.subset_span (g i).2))
state_before: case refine_2.intro.intro.intro
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
s : Set M
n : ℕ
f : Fin n → R
g : Fin n → ↑s
⊢ ∑ i : Fin n, f i • ↑(g i) ∈ span R s
state_after: no goals