Theorem: CompleteLattice.Independent.linearIndependent
File: Mathlib/LinearAlgebra/Dfinsupp.lean

tactic: let _ := Classical.decEq ι
state_before: ι : Type u_3
R : Type u_1
S : Type ?u.728203
M : ι → Type ?u.728208
N : Type u_2
dec_ι : DecidableEq ι
inst✝³ : Ring R
inst✝² : AddCommGroup N
inst✝¹ : Module R N
inst✝ : NoZeroSMulDivisors R N
p : ι → Submodule R N
hp : Independent p
v : ι → N
hv : ∀ (i : ι), v i ∈ p i
hv' : ∀ (i : ι), v i ≠ 0
⊢ LinearIndependent R v

tactic: let _ := Classical.decEq R
state_before: ι : Type u_3
R : Type u_1
S : Type ?u.728203
M : ι → Type ?u.728208
N : Type u_2
dec_ι : DecidableEq ι
inst✝³ : Ring R
inst✝² : AddCommGroup N
inst✝¹ : Module R N
inst✝ : NoZeroSMulDivisors R N
p : ι → Submodule R N
hp : Independent p
v : ι → N
hv : ∀ (i : ι), v i ∈ p i
hv' : ∀ (i : ι), v i ≠ 0
x✝ : DecidableEq ι := Classical.decEq ι
⊢ LinearIndependent R v

tactic: rw [linearIndependent_iff]
state_before: ι : Type u_3
R : Type u_1
S : Type ?u.728203
M : ι → Type ?u.728208
N : Type u_2
dec_ι : DecidableEq ι
inst✝³ : Ring R
inst✝² : AddCommGroup N
inst✝¹ : Module R N
inst✝ : NoZeroSMulDivisors R N
p : ι → Submodule R N
hp : Independent p
v : ι → N
hv : ∀ (i : ι), v i ∈ p i
hv' : ∀ (i : ι), v i ≠ 0
x✝¹ : DecidableEq ι := Classical.decEq ι
x✝ : DecidableEq R := Classical.decEq R
⊢ LinearIndependent R v

tactic: intro l hl
state_before: ι : Type u_3
R : Type u_1
S : Type ?u.728203
M : ι → Type ?u.728208
N : Type u_2
dec_ι : DecidableEq ι
inst✝³ : Ring R
inst✝² : AddCommGroup N
inst✝¹ : Module R N
inst✝ : NoZeroSMulDivisors R N
p : ι → Submodule R N
hp : Independent p
v : ι → N
hv : ∀ (i : ι), v i ∈ p i
hv' : ∀ (i : ι), v i ≠ 0
x✝¹ : DecidableEq ι := Classical.decEq ι
x✝ : DecidableEq R := Classical.decEq R
⊢ ∀ (l : ι →₀ R), ↑(Finsupp.total ι N R v) l = 0 → l = 0

tactic: let a :=
  Dfinsupp.mapRange.linearMap (fun i => LinearMap.toSpanSingleton R (p i) ⟨v i, hv i⟩)
    l.toDfinsupp
state_before: ι : Type u_3
R : Type u_1
S : Type ?u.728203
M : ι → Type ?u.728208
N : Type u_2
dec_ι : DecidableEq ι
inst✝³ : Ring R
inst✝² : AddCommGroup N
inst✝¹ : Module R N
inst✝ : NoZeroSMulDivisors R N
p : ι → Submodule R N
hp : Independent p
v : ι → N
hv : ∀ (i : ι), v i ∈ p i
hv' : ∀ (i : ι), v i ≠ 0
x✝¹ : DecidableEq ι := Classical.decEq ι
x✝ : DecidableEq R := Classical.decEq R
l : ι →₀ R
hl : ↑(Finsupp.total ι N R v) l = 0
⊢ l = 0

tactic: have ha : a = 0 := by
  apply hp.dfinsupp_lsum_injective
  rwa [← lsum_comp_mapRange_toSpanSingleton _ hv] at hl
state_before: ι : Type u_3
R : Type u_1
S : Type ?u.728203
M : ι → Type ?u.728208
N : Type u_2
dec_ι : DecidableEq ι
inst✝³ : Ring R
inst✝² : AddCommGroup N
inst✝¹ : Module R N
inst✝ : NoZeroSMulDivisors R N
p : ι → Submodule R N
hp : Independent p
v : ι → N
hv : ∀ (i : ι), v i ∈ p i
hv' : ∀ (i : ι), v i ≠ 0
x✝¹ : DecidableEq ι := Classical.decEq ι
x✝ : DecidableEq R := Classical.decEq R
l : ι →₀ R
hl : ↑(Finsupp.total ι N R v) l = 0
a : (fun x => Π₀ (i : ι), { x // x ∈ p i }) (Finsupp.toDfinsupp l) :=
  ↑(mapRange.linearMap fun i =>
        LinearMap.toSpanSingleton R { x // x ∈ p i } { val := v i, property := (_ : v i ∈ p i) })
    (Finsupp.toDfinsupp l)
⊢ l = 0

tactic: ext i
state_before: ι : Type u_3
R : Type u_1
S : Type ?u.728203
M : ι → Type ?u.728208
N : Type u_2
dec_ι : DecidableEq ι
inst✝³ : Ring R
inst✝² : AddCommGroup N
inst✝¹ : Module R N
inst✝ : NoZeroSMulDivisors R N
p : ι → Submodule R N
hp : Independent p
v : ι → N
hv : ∀ (i : ι), v i ∈ p i
hv' : ∀ (i : ι), v i ≠ 0
x✝¹ : DecidableEq ι := Classical.decEq ι
x✝ : DecidableEq R := Classical.decEq R
l : ι →₀ R
hl : ↑(Finsupp.total ι N R v) l = 0
a : (fun x => Π₀ (i : ι), { x // x ∈ p i }) (Finsupp.toDfinsupp l) :=
  ↑(mapRange.linearMap fun i =>
        LinearMap.toSpanSingleton R { x // x ∈ p i } { val := v i, property := (_ : v i ∈ p i) })
    (Finsupp.toDfinsupp l)
ha : a = 0
⊢ l = 0

tactic: apply smul_left_injective R (hv' i)
state_before: case h
ι : Type u_3
R : Type u_1
S : Type ?u.728203
M : ι → Type ?u.728208
N : Type u_2
dec_ι : DecidableEq ι
inst✝³ : Ring R
inst✝² : AddCommGroup N
inst✝¹ : Module R N
inst✝ : NoZeroSMulDivisors R N
p : ι → Submodule R N
hp : Independent p
v : ι → N
hv : ∀ (i : ι), v i ∈ p i
hv' : ∀ (i : ι), v i ≠ 0
x✝¹ : DecidableEq ι := Classical.decEq ι
x✝ : DecidableEq R := Classical.decEq R
l : ι →₀ R
hl : ↑(Finsupp.total ι N R v) l = 0
a : (fun x => Π₀ (i : ι), { x // x ∈ p i }) (Finsupp.toDfinsupp l) :=
  ↑(mapRange.linearMap fun i =>
        LinearMap.toSpanSingleton R { x // x ∈ p i } { val := v i, property := (_ : v i ∈ p i) })
    (Finsupp.toDfinsupp l)
ha : a = 0
i : ι
⊢ ↑l i = ↑0 i

tactic: have : l i • v i = a i := rfl
state_before: case h.a
ι : Type u_3
R : Type u_1
S : Type ?u.728203
M : ι → Type ?u.728208
N : Type u_2
dec_ι : DecidableEq ι
inst✝³ : Ring R
inst✝² : AddCommGroup N
inst✝¹ : Module R N
inst✝ : NoZeroSMulDivisors R N
p : ι → Submodule R N
hp : Independent p
v : ι → N
hv : ∀ (i : ι), v i ∈ p i
hv' : ∀ (i : ι), v i ≠ 0
x✝¹ : DecidableEq ι := Classical.decEq ι
x✝ : DecidableEq R := Classical.decEq R
l : ι →₀ R
hl : ↑(Finsupp.total ι N R v) l = 0
a : (fun x => Π₀ (i : ι), { x // x ∈ p i }) (Finsupp.toDfinsupp l) :=
  ↑(mapRange.linearMap fun i =>
        LinearMap.toSpanSingleton R { x // x ∈ p i } { val := v i, property := (_ : v i ∈ p i) })
    (Finsupp.toDfinsupp l)
ha : a = 0
i : ι
⊢ (fun c => c • v i) (↑l i) = (fun c => c • v i) (↑0 i)

tactic: simp only [coe_zero, Pi.zero_apply, ZeroMemClass.coe_zero, smul_eq_zero, ha] at this
state_before: case h.a
ι : Type u_3
R : Type u_1
S : Type ?u.728203
M : ι → Type ?u.728208
N : Type u_2
dec_ι : DecidableEq ι
inst✝³ : Ring R
inst✝² : AddCommGroup N
inst✝¹ : Module R N
inst✝ : NoZeroSMulDivisors R N
p : ι → Submodule R N
hp : Independent p
v : ι → N
hv : ∀ (i : ι), v i ∈ p i
hv' : ∀ (i : ι), v i ≠ 0
x✝¹ : DecidableEq ι := Classical.decEq ι
x✝ : DecidableEq R := Classical.decEq R
l : ι →₀ R
hl : ↑(Finsupp.total ι N R v) l = 0
a : (fun x => Π₀ (i : ι), { x // x ∈ p i }) (Finsupp.toDfinsupp l) :=
  ↑(mapRange.linearMap fun i =>
        LinearMap.toSpanSingleton R { x // x ∈ p i } { val := v i, property := (_ : v i ∈ p i) })
    (Finsupp.toDfinsupp l)
ha : a = 0
i : ι
this : ↑l i • v i = ↑(↑a i)
⊢ (fun c => c • v i) (↑l i) = (fun c => c • v i) (↑0 i)

tactic: simpa
state_before: case h.a
ι : Type u_3
R : Type u_1
S : Type ?u.728203
M : ι → Type ?u.728208
N : Type u_2
dec_ι : DecidableEq ι
inst✝³ : Ring R
inst✝² : AddCommGroup N
inst✝¹ : Module R N
inst✝ : NoZeroSMulDivisors R N
p : ι → Submodule R N
hp : Independent p
v : ι → N
hv : ∀ (i : ι), v i ∈ p i
hv' : ∀ (i : ι), v i ≠ 0
x✝¹ : DecidableEq ι := Classical.decEq ι
x✝ : DecidableEq R := Classical.decEq R
l : ι →₀ R
hl : ↑(Finsupp.total ι N R v) l = 0
a : (fun x => Π₀ (i : ι), { x // x ∈ p i }) (Finsupp.toDfinsupp l) :=
  ↑(mapRange.linearMap fun i =>
        LinearMap.toSpanSingleton R { x // x ∈ p i } { val := v i, property := (_ : v i ∈ p i) })
    (Finsupp.toDfinsupp l)
ha : a = 0
i : ι
this : ↑l i = 0 ∨ v i = 0
⊢ (fun c => c • v i) (↑l i) = (fun c => c • v i) (↑0 i)

tactic: apply hp.dfinsupp_lsum_injective
state_before: ι : Type u_3
R : Type u_1
S : Type ?u.728203
M : ι → Type ?u.728208
N : Type u_2
dec_ι : DecidableEq ι
inst✝³ : Ring R
inst✝² : AddCommGroup N
inst✝¹ : Module R N
inst✝ : NoZeroSMulDivisors R N
p : ι → Submodule R N
hp : Independent p
v : ι → N
hv : ∀ (i : ι), v i ∈ p i
hv' : ∀ (i : ι), v i ≠ 0
x✝¹ : DecidableEq ι := Classical.decEq ι
x✝ : DecidableEq R := Classical.decEq R
l : ι →₀ R
hl : ↑(Finsupp.total ι N R v) l = 0
a : (fun x => Π₀ (i : ι), { x // x ∈ p i }) (Finsupp.toDfinsupp l) :=
  ↑(mapRange.linearMap fun i =>
        LinearMap.toSpanSingleton R { x // x ∈ p i } { val := v i, property := (_ : v i ∈ p i) })
    (Finsupp.toDfinsupp l)
⊢ a = 0

tactic: rwa [← lsum_comp_mapRange_toSpanSingleton _ hv] at hl
state_before: case a
ι : Type u_3
R : Type u_1
S : Type ?u.728203
M : ι → Type ?u.728208
N : Type u_2
dec_ι : DecidableEq ι
inst✝³ : Ring R
inst✝² : AddCommGroup N
inst✝¹ : Module R N
inst✝ : NoZeroSMulDivisors R N
p : ι → Submodule R N
hp : Independent p
v : ι → N
hv : ∀ (i : ι), v i ∈ p i
hv' : ∀ (i : ι), v i ≠ 0
x✝¹ : DecidableEq ι := Classical.decEq ι
x✝ : DecidableEq R := Classical.decEq R
l : ι →₀ R
hl : ↑(Finsupp.total ι N R v) l = 0
a : (fun x => Π₀ (i : ι), { x // x ∈ p i }) (Finsupp.toDfinsupp l) :=
  ↑(mapRange.linearMap fun i =>
        LinearMap.toSpanSingleton R { x // x ∈ p i } { val := v i, property := (_ : v i ∈ p i) })
    (Finsupp.toDfinsupp l)
⊢ ↑(↑(lsum ℕ) fun i => Submodule.subtype (p i)) a = ↑(↑(lsum ℕ) fun i => Submodule.subtype (p i)) 0