Theorem: LinearIndependent.eq_of_smul_apply_eq_smul_apply
File: Mathlib/LinearAlgebra/LinearIndependent.lean

tactic: let l : ι →₀ R := Finsupp.single i c - Finsupp.single j d
state_before: ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M✝
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M✝
inst✝³ : Module R M'
inst✝² : Module R M''
a b : R
x y : M✝
M : Type u_8
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
li : LinearIndependent R v
c d : R
i j : ι
hc : c ≠ 0
h : c • v i = d • v j
⊢ i = j
state_after: ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M✝
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M✝
inst✝³ : Module R M'
inst✝² : Module R M''
a b : R
x y : M✝
M : Type u_8
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
li : LinearIndependent R v
c d : R
i j : ι
hc : c ≠ 0
h : c • v i = d • v j
l : ι →₀ R := Finsupp.single i c - Finsupp.single j d
⊢ i = j

tactic: have h_total : Finsupp.total ι M R v l = 0 := by
  simp_rw [l, LinearMap.map_sub, Finsupp.total_apply]
  simp [h]
state_before: ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M✝
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M✝
inst✝³ : Module R M'
inst✝² : Module R M''
a b : R
x y : M✝
M : Type u_8
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
li : LinearIndependent R v
c d : R
i j : ι
hc : c ≠ 0
h : c • v i = d • v j
l : ι →₀ R := Finsupp.single i c - Finsupp.single j d
⊢ i = j
state_after: ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M✝
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M✝
inst✝³ : Module R M'
inst✝² : Module R M''
a b : R
x y : M✝
M : Type u_8
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
li : LinearIndependent R v
c d : R
i j : ι
hc : c ≠ 0
h : c • v i = d • v j
l : ι →₀ R := Finsupp.single i c - Finsupp.single j d
h_total : (Finsupp.total ι M R v) l = 0
⊢ i = j

tactic: have h_single_eq : Finsupp.single i c = Finsupp.single j d := by
  rw [linearIndependent_iff] at li
  simp [eq_add_of_sub_eq' (li l h_total)]
state_before: ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M✝
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M✝
inst✝³ : Module R M'
inst✝² : Module R M''
a b : R
x y : M✝
M : Type u_8
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
li : LinearIndependent R v
c d : R
i j : ι
hc : c ≠ 0
h : c • v i = d • v j
l : ι →₀ R := Finsupp.single i c - Finsupp.single j d
h_total : (Finsupp.total ι M R v) l = 0
⊢ i = j
state_after: ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M✝
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M✝
inst✝³ : Module R M'
inst✝² : Module R M''
a b : R
x y : M✝
M : Type u_8
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
li : LinearIndependent R v
c d : R
i j : ι
hc : c ≠ 0
h : c • v i = d • v j
l : ι →₀ R := Finsupp.single i c - Finsupp.single j d
h_total : (Finsupp.total ι M R v) l = 0
h_single_eq : Finsupp.single i c = Finsupp.single j d
⊢ i = j

tactic: rcases (Finsupp.single_eq_single_iff ..).mp h_single_eq with (⟨H, _⟩ | ⟨hc, _⟩)
state_before: ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M✝
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M✝
inst✝³ : Module R M'
inst✝² : Module R M''
a b : R
x y : M✝
M : Type u_8
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
li : LinearIndependent R v
c d : R
i j : ι
hc : c ≠ 0
h : c • v i = d • v j
l : ι →₀ R := Finsupp.single i c - Finsupp.single j d
h_total : (Finsupp.total ι M R v) l = 0
h_single_eq : Finsupp.single i c = Finsupp.single j d
⊢ i = j
state_after: case inl.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M✝
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M✝
inst✝³ : Module R M'
inst✝² : Module R M''
a b : R
x y : M✝
M : Type u_8
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
li : LinearIndependent R v
c d : R
i j : ι
hc : c ≠ 0
h : c • v i = d • v j
l : ι →₀ R := Finsupp.single i c - Finsupp.single j d
h_total : (Finsupp.total ι M R v) l = 0
h_single_eq : Finsupp.single i c = Finsupp.single j d
H : i = j
right✝ : c = d
⊢ i = j

case inr.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M✝
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M✝
inst✝³ : Module R M'
inst✝² : Module R M''
a b : R
x y : M✝
M : Type u_8
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
li : LinearIndependent R v
c d : R
i j : ι
hc✝ : c ≠ 0
h : c • v i = d • v j
l : ι →₀ R := Finsupp.single i c - Finsupp.single j d
h_total : (Finsupp.total ι M R v) l = 0
h_single_eq : Finsupp.single i c = Finsupp.single j d
hc : c = 0
right✝ : d = 0
⊢ i = j

tactic: simp_rw [l, LinearMap.map_sub, Finsupp.total_apply]
state_before: ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M✝
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M✝
inst✝³ : Module R M'
inst✝² : Module R M''
a b : R
x y : M✝
M : Type u_8
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
li : LinearIndependent R v
c d : R
i j : ι
hc : c ≠ 0
h : c • v i = d • v j
l : ι →₀ R := Finsupp.single i c - Finsupp.single j d
⊢ (Finsupp.total ι M R v) l = 0
state_after: ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M✝
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M✝
inst✝³ : Module R M'
inst✝² : Module R M''
a b : R
x y : M✝
M : Type u_8
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
li : LinearIndependent R v
c d : R
i j : ι
hc : c ≠ 0
h : c • v i = d • v j
l : ι →₀ R := Finsupp.single i c - Finsupp.single j d
⊢ (((Finsupp.single i c).sum fun i a => a • v i) - (Finsupp.single j d).sum fun i a => a • v i) = 0

tactic: simp [h]
state_before: ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M✝
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M✝
inst✝³ : Module R M'
inst✝² : Module R M''
a b : R
x y : M✝
M : Type u_8
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
li : LinearIndependent R v
c d : R
i j : ι
hc : c ≠ 0
h : c • v i = d • v j
l : ι →₀ R := Finsupp.single i c - Finsupp.single j d
⊢ (((Finsupp.single i c).sum fun i a => a • v i) - (Finsupp.single j d).sum fun i a => a • v i) = 0
state_after: no goals

tactic: rw [linearIndependent_iff] at li
state_before: ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M✝
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M✝
inst✝³ : Module R M'
inst✝² : Module R M''
a b : R
x y : M✝
M : Type u_8
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
li : LinearIndependent R v
c d : R
i j : ι
hc : c ≠ 0
h : c • v i = d • v j
l : ι →₀ R := Finsupp.single i c - Finsupp.single j d
h_total : (Finsupp.total ι M R v) l = 0
⊢ Finsupp.single i c = Finsupp.single j d
state_after: ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M✝
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M✝
inst✝³ : Module R M'
inst✝² : Module R M''
a b : R
x y : M✝
M : Type u_8
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
li : ∀ (l : ι →₀ R), (Finsupp.total ι M R v) l = 0 → l = 0
c d : R
i j : ι
hc : c ≠ 0
h : c • v i = d • v j
l : ι →₀ R := Finsupp.single i c - Finsupp.single j d
h_total : (Finsupp.total ι M R v) l = 0
⊢ Finsupp.single i c = Finsupp.single j d

tactic: simp [eq_add_of_sub_eq' (li l h_total)]
state_before: ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M✝
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M✝
inst✝³ : Module R M'
inst✝² : Module R M''
a b : R
x y : M✝
M : Type u_8
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
li : ∀ (l : ι →₀ R), (Finsupp.total ι M R v) l = 0 → l = 0
c d : R
i j : ι
hc : c ≠ 0
h : c • v i = d • v j
l : ι →₀ R := Finsupp.single i c - Finsupp.single j d
h_total : (Finsupp.total ι M R v) l = 0
⊢ Finsupp.single i c = Finsupp.single j d
state_after: no goals

tactic: exact H
state_before: case inl.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M✝
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M✝
inst✝³ : Module R M'
inst✝² : Module R M''
a b : R
x y : M✝
M : Type u_8
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
li : LinearIndependent R v
c d : R
i j : ι
hc : c ≠ 0
h : c • v i = d • v j
l : ι →₀ R := Finsupp.single i c - Finsupp.single j d
h_total : (Finsupp.total ι M R v) l = 0
h_single_eq : Finsupp.single i c = Finsupp.single j d
H : i = j
right✝ : c = d
⊢ i = j
state_after: no goals

tactic: contradiction
state_before: case inr.intro
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M✝ : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v✝ : ι → M✝
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : AddCommGroup M'
inst✝⁵ : AddCommGroup M''
inst✝⁴ : Module R M✝
inst✝³ : Module R M'
inst✝² : Module R M''
a b : R
x y : M✝
M : Type u_8
inst✝¹ : AddCommGroup M
inst✝ : Module R M
v : ι → M
li : LinearIndependent R v
c d : R
i j : ι
hc✝ : c ≠ 0
h : c • v i = d • v j
l : ι →₀ R := Finsupp.single i c - Finsupp.single j d
h_total : (Finsupp.total ι M R v) l = 0
h_single_eq : Finsupp.single i c = Finsupp.single j d
hc : c = 0
right✝ : d = 0
⊢ i = j
state_after: no goals