Theorem: linearIndependent_le_span_aux'
File: Mathlib/LinearAlgebra/Dimension/StrongRankCondition.lean

tactic: fapply card_le_of_injective' R
state_before: R : Type u
M : Type v
inst✝⁵ : Ring R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
ι✝ : Type w
ι' : Type w'
inst✝² : StrongRankCondition R
ι : Type u_1
inst✝¹ : Fintype ι
v : ι → M
i : LinearIndependent R v
w : Set M
inst✝ : Fintype ↑w
s : range v ≤ ↑(span R w)
⊢ Fintype.card ι ≤ Fintype.card ↑w
state_after: case f
R : Type u
M : Type v
inst✝⁵ : Ring R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
ι✝ : Type w
ι' : Type w'
inst✝² : StrongRankCondition R
ι : Type u_1
inst✝¹ : Fintype ι
v : ι → M
i : LinearIndependent R v
w : Set M
inst✝ : Fintype ↑w
s : range v ≤ ↑(span R w)
⊢ (ι →₀ R) →ₗ[R] ↑w →₀ R

case i
R : Type u
M : Type v
inst✝⁵ : Ring R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
ι✝ : Type w
ι' : Type w'
inst✝² : StrongRankCondition R
ι : Type u_1
inst✝¹ : Fintype ι
v : ι → M
i : LinearIndependent R v
w : Set M
inst✝ : Fintype ↑w
s : range v ≤ ↑(span R w)
⊢ Injective ⇑?f

tactic: apply Finsupp.total
state_before: case f
R : Type u
M : Type v
inst✝⁵ : Ring R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
ι✝ : Type w
ι' : Type w'
inst✝² : StrongRankCondition R
ι : Type u_1
inst✝¹ : Fintype ι
v : ι → M
i : LinearIndependent R v
w : Set M
inst✝ : Fintype ↑w
s : range v ≤ ↑(span R w)
⊢ (ι →₀ R) →ₗ[R] ↑w →₀ R
state_after: case f.v
R : Type u
M : Type v
inst✝⁵ : Ring R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
ι✝ : Type w
ι' : Type w'
inst✝² : StrongRankCondition R
ι : Type u_1
inst✝¹ : Fintype ι
v : ι → M
i : LinearIndependent R v
w : Set M
inst✝ : Fintype ↑w
s : range v ≤ ↑(span R w)
⊢ ι → ↑w →₀ R

tactic: exact fun i => Span.repr R w ⟨v i, s (mem_range_self i)⟩
state_before: case f.v
R : Type u
M : Type v
inst✝⁵ : Ring R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
ι✝ : Type w
ι' : Type w'
inst✝² : StrongRankCondition R
ι : Type u_1
inst✝¹ : Fintype ι
v : ι → M
i : LinearIndependent R v
w : Set M
inst✝ : Fintype ↑w
s : range v ≤ ↑(span R w)
⊢ ι → ↑w →₀ R
state_after: no goals

tactic: intro f g h
state_before: case i
R : Type u
M : Type v
inst✝⁵ : Ring R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
ι✝ : Type w
ι' : Type w'
inst✝² : StrongRankCondition R
ι : Type u_1
inst✝¹ : Fintype ι
v : ι → M
i : LinearIndependent R v
w : Set M
inst✝ : Fintype ↑w
s : range v ≤ ↑(span R w)
⊢ Injective ⇑(Finsupp.total ι (↑w →₀ R) R fun i => Span.repr R w ⟨v i, ⋯⟩)
state_after: case i
R : Type u
M : Type v
inst✝⁵ : Ring R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
ι✝ : Type w
ι' : Type w'
inst✝² : StrongRankCondition R
ι : Type u_1
inst✝¹ : Fintype ι
v : ι → M
i : LinearIndependent R v
w : Set M
inst✝ : Fintype ↑w
s : range v ≤ ↑(span R w)
f g : ι →₀ R
h :
  (Finsupp.total ι (↑w →₀ R) R fun i => Span.repr R w ⟨v i, ⋯⟩) f =
    (Finsupp.total ι (↑w →₀ R) R fun i => Span.repr R w ⟨v i, ⋯⟩) g
⊢ f = g

tactic: apply_fun Finsupp.total w M R (↑) at h
state_before: case i
R : Type u
M : Type v
inst✝⁵ : Ring R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
ι✝ : Type w
ι' : Type w'
inst✝² : StrongRankCondition R
ι : Type u_1
inst✝¹ : Fintype ι
v : ι → M
i : LinearIndependent R v
w : Set M
inst✝ : Fintype ↑w
s : range v ≤ ↑(span R w)
f g : ι →₀ R
h :
  (Finsupp.total ι (↑w →₀ R) R fun i => Span.repr R w ⟨v i, ⋯⟩) f =
    (Finsupp.total ι (↑w →₀ R) R fun i => Span.repr R w ⟨v i, ⋯⟩) g
⊢ f = g
state_after: case i
R : Type u
M : Type v
inst✝⁵ : Ring R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
ι✝ : Type w
ι' : Type w'
inst✝² : StrongRankCondition R
ι : Type u_1
inst✝¹ : Fintype ι
v : ι → M
i : LinearIndependent R v
w : Set M
inst✝ : Fintype ↑w
s : range v ≤ ↑(span R w)
f g : ι →₀ R
h :
  (Finsupp.total (↑w) M R Subtype.val) ((Finsupp.total ι (↑w →₀ R) R fun i => Span.repr R w ⟨v i, ⋯⟩) f) =
    (Finsupp.total (↑w) M R Subtype.val) ((Finsupp.total ι (↑w →₀ R) R fun i => Span.repr R w ⟨v i, ⋯⟩) g)
⊢ f = g

tactic: simp only [Finsupp.total_total, Submodule.coe_mk, Span.finsupp_total_repr] at h
state_before: case i
R : Type u
M : Type v
inst✝⁵ : Ring R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
ι✝ : Type w
ι' : Type w'
inst✝² : StrongRankCondition R
ι : Type u_1
inst✝¹ : Fintype ι
v : ι → M
i : LinearIndependent R v
w : Set M
inst✝ : Fintype ↑w
s : range v ≤ ↑(span R w)
f g : ι →₀ R
h :
  (Finsupp.total (↑w) M R Subtype.val) ((Finsupp.total ι (↑w →₀ R) R fun i => Span.repr R w ⟨v i, ⋯⟩) f) =
    (Finsupp.total (↑w) M R Subtype.val) ((Finsupp.total ι (↑w →₀ R) R fun i => Span.repr R w ⟨v i, ⋯⟩) g)
⊢ f = g
state_after: case i
R : Type u
M : Type v
inst✝⁵ : Ring R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
ι✝ : Type w
ι' : Type w'
inst✝² : StrongRankCondition R
ι : Type u_1
inst✝¹ : Fintype ι
v : ι → M
i : LinearIndependent R v
w : Set M
inst✝ : Fintype ↑w
s : range v ≤ ↑(span R w)
f g : ι →₀ R
h : (Finsupp.total ι M R fun b => v b) f = (Finsupp.total ι M R fun b => v b) g
⊢ f = g

tactic: rw [← sub_eq_zero, ← LinearMap.map_sub] at h
state_before: case i
R : Type u
M : Type v
inst✝⁵ : Ring R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
ι✝ : Type w
ι' : Type w'
inst✝² : StrongRankCondition R
ι : Type u_1
inst✝¹ : Fintype ι
v : ι → M
i : LinearIndependent R v
w : Set M
inst✝ : Fintype ↑w
s : range v ≤ ↑(span R w)
f g : ι →₀ R
h : (Finsupp.total ι M R fun b => v b) f = (Finsupp.total ι M R fun b => v b) g
⊢ f = g
state_after: case i
R : Type u
M : Type v
inst✝⁵ : Ring R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
ι✝ : Type w
ι' : Type w'
inst✝² : StrongRankCondition R
ι : Type u_1
inst✝¹ : Fintype ι
v : ι → M
i : LinearIndependent R v
w : Set M
inst✝ : Fintype ↑w
s : range v ≤ ↑(span R w)
f g : ι →₀ R
h : (Finsupp.total ι M R fun b => v b) (f - g) = 0
⊢ f = g

tactic: exact sub_eq_zero.mp (linearIndependent_iff.mp i _ h)
state_before: case i
R : Type u
M : Type v
inst✝⁵ : Ring R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
ι✝ : Type w
ι' : Type w'
inst✝² : StrongRankCondition R
ι : Type u_1
inst✝¹ : Fintype ι
v : ι → M
i : LinearIndependent R v
w : Set M
inst✝ : Fintype ↑w
s : range v ≤ ↑(span R w)
f g : ι →₀ R
h : (Finsupp.total ι M R fun b => v b) (f - g) = 0
⊢ f = g
state_after: no goals