Theorem: AlternatingMap.map_linearDependent
File: Mathlib/LinearAlgebra/Alternating.lean

tactic: obtain ⟨s, g, h, i, hi, hz⟩ := not_linearIndependent_iff.mp h
state_before: R : Type ?u.546412
inst✝²⁰ : Semiring R
M✝ : Type ?u.546418
inst✝¹⁹ : AddCommMonoid M✝
inst✝¹⁸ : Module R M✝
N✝ : Type ?u.546450
inst✝¹⁷ : AddCommMonoid N✝
inst✝¹⁶ : Module R N✝
P : Type ?u.546480
inst✝¹⁵ : AddCommMonoid P
inst✝¹⁴ : Module R P
M' : Type ?u.546510
inst✝¹³ : AddCommGroup M'
inst✝¹² : Module R M'
N' : Type ?u.546898
inst✝¹¹ : AddCommGroup N'
inst✝¹⁰ : Module R N'
ι : Type u_4
ι' : Type ?u.547289
ι'' : Type ?u.547292
M₂ : Type ?u.547295
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R M₂
M₃ : Type ?u.547325
inst✝⁷ : AddCommMonoid M₃
inst✝⁶ : Module R M₃
f✝ f' : AlternatingMap R M✝ N✝ ι
g g₂ : AlternatingMap R M✝ N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M✝
v' : ι → M'
K : Type u_1
inst✝⁵ : Ring K
M : Type u_2
inst✝⁴ : AddCommGroup M
inst✝³ : Module K M
N : Type u_3
inst✝² : AddCommGroup N
inst✝¹ : Module K N
inst✝ : NoZeroSMulDivisors K N
f : AlternatingMap K M N ι
v : ι → M
h : ¬LinearIndependent K v
⊢ ↑f v = 0

tactic: letI := Classical.decEq ι
state_before: case intro.intro.intro.intro.intro
R : Type ?u.546412
inst✝²⁰ : Semiring R
M✝ : Type ?u.546418
inst✝¹⁹ : AddCommMonoid M✝
inst✝¹⁸ : Module R M✝
N✝ : Type ?u.546450
inst✝¹⁷ : AddCommMonoid N✝
inst✝¹⁶ : Module R N✝
P : Type ?u.546480
inst✝¹⁵ : AddCommMonoid P
inst✝¹⁴ : Module R P
M' : Type ?u.546510
inst✝¹³ : AddCommGroup M'
inst✝¹² : Module R M'
N' : Type ?u.546898
inst✝¹¹ : AddCommGroup N'
inst✝¹⁰ : Module R N'
ι : Type u_4
ι' : Type ?u.547289
ι'' : Type ?u.547292
M₂ : Type ?u.547295
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R M₂
M₃ : Type ?u.547325
inst✝⁷ : AddCommMonoid M₃
inst✝⁶ : Module R M₃
f✝ f' : AlternatingMap R M✝ N✝ ι
g✝ g₂ : AlternatingMap R M✝ N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M✝
v' : ι → M'
K : Type u_1
inst✝⁵ : Ring K
M : Type u_2
inst✝⁴ : AddCommGroup M
inst✝³ : Module K M
N : Type u_3
inst✝² : AddCommGroup N
inst✝¹ : Module K N
inst✝ : NoZeroSMulDivisors K N
f : AlternatingMap K M N ι
v : ι → M
h✝ : ¬LinearIndependent K v
s : Finset ι
g : ι → K
h : (Finset.sum s fun i => g i • v i) = 0
i : ι
hi : i ∈ s
hz : g i ≠ 0
⊢ ↑f v = 0

tactic: suffices f (update v i (g i • v i)) = 0 by
  rw [f.map_smul, Function.update_eq_self, smul_eq_zero] at this
  exact Or.resolve_left this hz
state_before: case intro.intro.intro.intro.intro
R : Type ?u.546412
inst✝²⁰ : Semiring R
M✝ : Type ?u.546418
inst✝¹⁹ : AddCommMonoid M✝
inst✝¹⁸ : Module R M✝
N✝ : Type ?u.546450
inst✝¹⁷ : AddCommMonoid N✝
inst✝¹⁶ : Module R N✝
P : Type ?u.546480
inst✝¹⁵ : AddCommMonoid P
inst✝¹⁴ : Module R P
M' : Type ?u.546510
inst✝¹³ : AddCommGroup M'
inst✝¹² : Module R M'
N' : Type ?u.546898
inst✝¹¹ : AddCommGroup N'
inst✝¹⁰ : Module R N'
ι : Type u_4
ι' : Type ?u.547289
ι'' : Type ?u.547292
M₂ : Type ?u.547295
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R M₂
M₃ : Type ?u.547325
inst✝⁷ : AddCommMonoid M₃
inst✝⁶ : Module R M₃
f✝ f' : AlternatingMap R M✝ N✝ ι
g✝ g₂ : AlternatingMap R M✝ N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M✝
v' : ι → M'
K : Type u_1
inst✝⁵ : Ring K
M : Type u_2
inst✝⁴ : AddCommGroup M
inst✝³ : Module K M
N : Type u_3
inst✝² : AddCommGroup N
inst✝¹ : Module K N
inst✝ : NoZeroSMulDivisors K N
f : AlternatingMap K M N ι
v : ι → M
h✝ : ¬LinearIndependent K v
s : Finset ι
g : ι → K
h : (Finset.sum s fun i => g i • v i) = 0
i : ι
hi : i ∈ s
hz : g i ≠ 0
this : DecidableEq ι := Classical.decEq ι
⊢ ↑f v = 0

tactic: rw [← (funext fun x => ite_self (c := i = x) (d := Classical.decEq ι i x) (g x • v x))] at h
state_before: case intro.intro.intro.intro.intro
R : Type ?u.546412
inst✝²⁰ : Semiring R
M✝ : Type ?u.546418
inst✝¹⁹ : AddCommMonoid M✝
inst✝¹⁸ : Module R M✝
N✝ : Type ?u.546450
inst✝¹⁷ : AddCommMonoid N✝
inst✝¹⁶ : Module R N✝
P : Type ?u.546480
inst✝¹⁵ : AddCommMonoid P
inst✝¹⁴ : Module R P
M' : Type ?u.546510
inst✝¹³ : AddCommGroup M'
inst✝¹² : Module R M'
N' : Type ?u.546898
inst✝¹¹ : AddCommGroup N'
inst✝¹⁰ : Module R N'
ι : Type u_4
ι' : Type ?u.547289
ι'' : Type ?u.547292
M₂ : Type ?u.547295
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R M₂
M₃ : Type ?u.547325
inst✝⁷ : AddCommMonoid M₃
inst✝⁶ : Module R M₃
f✝ f' : AlternatingMap R M✝ N✝ ι
g✝ g₂ : AlternatingMap R M✝ N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M✝
v' : ι → M'
K : Type u_1
inst✝⁵ : Ring K
M : Type u_2
inst✝⁴ : AddCommGroup M
inst✝³ : Module K M
N : Type u_3
inst✝² : AddCommGroup N
inst✝¹ : Module K N
inst✝ : NoZeroSMulDivisors K N
f : AlternatingMap K M N ι
v : ι → M
h✝ : ¬LinearIndependent K v
s : Finset ι
g : ι → K
h : (Finset.sum s fun i => g i • v i) = 0
i : ι
hi : i ∈ s
hz : g i ≠ 0
this : DecidableEq ι := Classical.decEq ι
⊢ ↑f (update v i (g i • v i)) = 0

tactic: rw [Finset.sum_ite, Finset.filter_eq, Finset.filter_ne, if_pos hi, Finset.sum_singleton,
  add_eq_zero_iff_eq_neg] at h
state_before: case intro.intro.intro.intro.intro
R : Type ?u.546412
inst✝²⁰ : Semiring R
M✝ : Type ?u.546418
inst✝¹⁹ : AddCommMonoid M✝
inst✝¹⁸ : Module R M✝
N✝ : Type ?u.546450
inst✝¹⁷ : AddCommMonoid N✝
inst✝¹⁶ : Module R N✝
P : Type ?u.546480
inst✝¹⁵ : AddCommMonoid P
inst✝¹⁴ : Module R P
M' : Type ?u.546510
inst✝¹³ : AddCommGroup M'
inst✝¹² : Module R M'
N' : Type ?u.546898
inst✝¹¹ : AddCommGroup N'
inst✝¹⁰ : Module R N'
ι : Type u_4
ι' : Type ?u.547289
ι'' : Type ?u.547292
M₂ : Type ?u.547295
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R M₂
M₃ : Type ?u.547325
inst✝⁷ : AddCommMonoid M₃
inst✝⁶ : Module R M₃
f✝ f' : AlternatingMap R M✝ N✝ ι
g✝ g₂ : AlternatingMap R M✝ N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M✝
v' : ι → M'
K : Type u_1
inst✝⁵ : Ring K
M : Type u_2
inst✝⁴ : AddCommGroup M
inst✝³ : Module K M
N : Type u_3
inst✝² : AddCommGroup N
inst✝¹ : Module K N
inst✝ : NoZeroSMulDivisors K N
f : AlternatingMap K M N ι
v : ι → M
h✝ : ¬LinearIndependent K v
s : Finset ι
g : ι → K
i : ι
h : (Finset.sum s fun x => if i = x then g x • v x else g x • v x) = 0
hi : i ∈ s
hz : g i ≠ 0
this : DecidableEq ι := Classical.decEq ι
⊢ ↑f (update v i (g i • v i)) = 0

tactic: rw [h, f.map_neg, f.map_update_sum, neg_eq_zero]
state_before: case intro.intro.intro.intro.intro
R : Type ?u.546412
inst✝²⁰ : Semiring R
M✝ : Type ?u.546418
inst✝¹⁹ : AddCommMonoid M✝
inst✝¹⁸ : Module R M✝
N✝ : Type ?u.546450
inst✝¹⁷ : AddCommMonoid N✝
inst✝¹⁶ : Module R N✝
P : Type ?u.546480
inst✝¹⁵ : AddCommMonoid P
inst✝¹⁴ : Module R P
M' : Type ?u.546510
inst✝¹³ : AddCommGroup M'
inst✝¹² : Module R M'
N' : Type ?u.546898
inst✝¹¹ : AddCommGroup N'
inst✝¹⁰ : Module R N'
ι : Type u_4
ι' : Type ?u.547289
ι'' : Type ?u.547292
M₂ : Type ?u.547295
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R M₂
M₃ : Type ?u.547325
inst✝⁷ : AddCommMonoid M₃
inst✝⁶ : Module R M₃
f✝ f' : AlternatingMap R M✝ N✝ ι
g✝ g₂ : AlternatingMap R M✝ N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M✝
v' : ι → M'
K : Type u_1
inst✝⁵ : Ring K
M : Type u_2
inst✝⁴ : AddCommGroup M
inst✝³ : Module K M
N : Type u_3
inst✝² : AddCommGroup N
inst✝¹ : Module K N
inst✝ : NoZeroSMulDivisors K N
f : AlternatingMap K M N ι
v : ι → M
h✝ : ¬LinearIndependent K v
s : Finset ι
g : ι → K
i : ι
hi : i ∈ s
hz : g i ≠ 0
this : DecidableEq ι := Classical.decEq ι
h : g i • v i = -Finset.sum (Finset.erase s i) fun x => g x • v x
⊢ ↑f (update v i (g i • v i)) = 0

tactic: apply Finset.sum_eq_zero
state_before: case intro.intro.intro.intro.intro
R : Type ?u.546412
inst✝²⁰ : Semiring R
M✝ : Type ?u.546418
inst✝¹⁹ : AddCommMonoid M✝
inst✝¹⁸ : Module R M✝
N✝ : Type ?u.546450
inst✝¹⁷ : AddCommMonoid N✝
inst✝¹⁶ : Module R N✝
P : Type ?u.546480
inst✝¹⁵ : AddCommMonoid P
inst✝¹⁴ : Module R P
M' : Type ?u.546510
inst✝¹³ : AddCommGroup M'
inst✝¹² : Module R M'
N' : Type ?u.546898
inst✝¹¹ : AddCommGroup N'
inst✝¹⁰ : Module R N'
ι : Type u_4
ι' : Type ?u.547289
ι'' : Type ?u.547292
M₂ : Type ?u.547295
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R M₂
M₃ : Type ?u.547325
inst✝⁷ : AddCommMonoid M₃
inst✝⁶ : Module R M₃
f✝ f' : AlternatingMap R M✝ N✝ ι
g✝ g₂ : AlternatingMap R M✝ N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M✝
v' : ι → M'
K : Type u_1
inst✝⁵ : Ring K
M : Type u_2
inst✝⁴ : AddCommGroup M
inst✝³ : Module K M
N : Type u_3
inst✝² : AddCommGroup N
inst✝¹ : Module K N
inst✝ : NoZeroSMulDivisors K N
f : AlternatingMap K M N ι
v : ι → M
h✝ : ¬LinearIndependent K v
s : Finset ι
g : ι → K
i : ι
hi : i ∈ s
hz : g i ≠ 0
this : DecidableEq ι := Classical.decEq ι
h : g i • v i = -Finset.sum (Finset.erase s i) fun x => g x • v x
⊢ (Finset.sum (Finset.erase s i) fun a => ↑f (update v i (g a • v a))) = 0

tactic: intro j hj
state_before: case intro.intro.intro.intro.intro.h
R : Type ?u.546412
inst✝²⁰ : Semiring R
M✝ : Type ?u.546418
inst✝¹⁹ : AddCommMonoid M✝
inst✝¹⁸ : Module R M✝
N✝ : Type ?u.546450
inst✝¹⁷ : AddCommMonoid N✝
inst✝¹⁶ : Module R N✝
P : Type ?u.546480
inst✝¹⁵ : AddCommMonoid P
inst✝¹⁴ : Module R P
M' : Type ?u.546510
inst✝¹³ : AddCommGroup M'
inst✝¹² : Module R M'
N' : Type ?u.546898
inst✝¹¹ : AddCommGroup N'
inst✝¹⁰ : Module R N'
ι : Type u_4
ι' : Type ?u.547289
ι'' : Type ?u.547292
M₂ : Type ?u.547295
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R M₂
M₃ : Type ?u.547325
inst✝⁷ : AddCommMonoid M₃
inst✝⁶ : Module R M₃
f✝ f' : AlternatingMap R M✝ N✝ ι
g✝ g₂ : AlternatingMap R M✝ N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M✝
v' : ι → M'
K : Type u_1
inst✝⁵ : Ring K
M : Type u_2
inst✝⁴ : AddCommGroup M
inst✝³ : Module K M
N : Type u_3
inst✝² : AddCommGroup N
inst✝¹ : Module K N
inst✝ : NoZeroSMulDivisors K N
f : AlternatingMap K M N ι
v : ι → M
h✝ : ¬LinearIndependent K v
s : Finset ι
g : ι → K
i : ι
hi : i ∈ s
hz : g i ≠ 0
this : DecidableEq ι := Classical.decEq ι
h : g i • v i = -Finset.sum (Finset.erase s i) fun x => g x • v x
⊢ ∀ (x : ι), x ∈ Finset.erase s i → ↑f (update v i (g x • v x)) = 0

tactic: obtain ⟨hij, _⟩ := Finset.mem_erase.mp hj
state_before: case intro.intro.intro.intro.intro.h
R : Type ?u.546412
inst✝²⁰ : Semiring R
M✝ : Type ?u.546418
inst✝¹⁹ : AddCommMonoid M✝
inst✝¹⁸ : Module R M✝
N✝ : Type ?u.546450
inst✝¹⁷ : AddCommMonoid N✝
inst✝¹⁶ : Module R N✝
P : Type ?u.546480
inst✝¹⁵ : AddCommMonoid P
inst✝¹⁴ : Module R P
M' : Type ?u.546510
inst✝¹³ : AddCommGroup M'
inst✝¹² : Module R M'
N' : Type ?u.546898
inst✝¹¹ : AddCommGroup N'
inst✝¹⁰ : Module R N'
ι : Type u_4
ι' : Type ?u.547289
ι'' : Type ?u.547292
M₂ : Type ?u.547295
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R M₂
M₃ : Type ?u.547325
inst✝⁷ : AddCommMonoid M₃
inst✝⁶ : Module R M₃
f✝ f' : AlternatingMap R M✝ N✝ ι
g✝ g₂ : AlternatingMap R M✝ N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M✝
v' : ι → M'
K : Type u_1
inst✝⁵ : Ring K
M : Type u_2
inst✝⁴ : AddCommGroup M
inst✝³ : Module K M
N : Type u_3
inst✝² : AddCommGroup N
inst✝¹ : Module K N
inst✝ : NoZeroSMulDivisors K N
f : AlternatingMap K M N ι
v : ι → M
h✝ : ¬LinearIndependent K v
s : Finset ι
g : ι → K
i : ι
hi : i ∈ s
hz : g i ≠ 0
this : DecidableEq ι := Classical.decEq ι
h : g i • v i = -Finset.sum (Finset.erase s i) fun x => g x • v x
j : ι
hj : j ∈ Finset.erase s i
⊢ ↑f (update v i (g j • v j)) = 0

tactic: rw [f.map_smul, f.map_update_self _ hij.symm, smul_zero]
state_before: case intro.intro.intro.intro.intro.h.intro
R : Type ?u.546412
inst✝²⁰ : Semiring R
M✝ : Type ?u.546418
inst✝¹⁹ : AddCommMonoid M✝
inst✝¹⁸ : Module R M✝
N✝ : Type ?u.546450
inst✝¹⁷ : AddCommMonoid N✝
inst✝¹⁶ : Module R N✝
P : Type ?u.546480
inst✝¹⁵ : AddCommMonoid P
inst✝¹⁴ : Module R P
M' : Type ?u.546510
inst✝¹³ : AddCommGroup M'
inst✝¹² : Module R M'
N' : Type ?u.546898
inst✝¹¹ : AddCommGroup N'
inst✝¹⁰ : Module R N'
ι : Type u_4
ι' : Type ?u.547289
ι'' : Type ?u.547292
M₂ : Type ?u.547295
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R M₂
M₃ : Type ?u.547325
inst✝⁷ : AddCommMonoid M₃
inst✝⁶ : Module R M₃
f✝ f' : AlternatingMap R M✝ N✝ ι
g✝ g₂ : AlternatingMap R M✝ N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M✝
v' : ι → M'
K : Type u_1
inst✝⁵ : Ring K
M : Type u_2
inst✝⁴ : AddCommGroup M
inst✝³ : Module K M
N : Type u_3
inst✝² : AddCommGroup N
inst✝¹ : Module K N
inst✝ : NoZeroSMulDivisors K N
f : AlternatingMap K M N ι
v : ι → M
h✝ : ¬LinearIndependent K v
s : Finset ι
g : ι → K
i : ι
hi : i ∈ s
hz : g i ≠ 0
this : DecidableEq ι := Classical.decEq ι
h : g i • v i = -Finset.sum (Finset.erase s i) fun x => g x • v x
j : ι
hj : j ∈ Finset.erase s i
hij : j ≠ i
right✝ : j ∈ s
⊢ ↑f (update v i (g j • v j)) = 0

tactic: rw [f.map_smul, Function.update_eq_self, smul_eq_zero] at this
state_before: R : Type ?u.546412
inst✝²⁰ : Semiring R
M✝ : Type ?u.546418
inst✝¹⁹ : AddCommMonoid M✝
inst✝¹⁸ : Module R M✝
N✝ : Type ?u.546450
inst✝¹⁷ : AddCommMonoid N✝
inst✝¹⁶ : Module R N✝
P : Type ?u.546480
inst✝¹⁵ : AddCommMonoid P
inst✝¹⁴ : Module R P
M' : Type ?u.546510
inst✝¹³ : AddCommGroup M'
inst✝¹² : Module R M'
N' : Type ?u.546898
inst✝¹¹ : AddCommGroup N'
inst✝¹⁰ : Module R N'
ι : Type u_4
ι' : Type ?u.547289
ι'' : Type ?u.547292
M₂ : Type ?u.547295
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R M₂
M₃ : Type ?u.547325
inst✝⁷ : AddCommMonoid M₃
inst✝⁶ : Module R M₃
f✝ f' : AlternatingMap R M✝ N✝ ι
g✝ g₂ : AlternatingMap R M✝ N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M✝
v' : ι → M'
K : Type u_1
inst✝⁵ : Ring K
M : Type u_2
inst✝⁴ : AddCommGroup M
inst✝³ : Module K M
N : Type u_3
inst✝² : AddCommGroup N
inst✝¹ : Module K N
inst✝ : NoZeroSMulDivisors K N
f : AlternatingMap K M N ι
v : ι → M
h✝ : ¬LinearIndependent K v
s : Finset ι
g : ι → K
h : (Finset.sum s fun i => g i • v i) = 0
i : ι
hi : i ∈ s
hz : g i ≠ 0
this✝ : DecidableEq ι := Classical.decEq ι
this : ↑f (update v i (g i • v i)) = 0
⊢ ↑f v = 0

tactic: exact Or.resolve_left this hz
state_before: R : Type ?u.546412
inst✝²⁰ : Semiring R
M✝ : Type ?u.546418
inst✝¹⁹ : AddCommMonoid M✝
inst✝¹⁸ : Module R M✝
N✝ : Type ?u.546450
inst✝¹⁷ : AddCommMonoid N✝
inst✝¹⁶ : Module R N✝
P : Type ?u.546480
inst✝¹⁵ : AddCommMonoid P
inst✝¹⁴ : Module R P
M' : Type ?u.546510
inst✝¹³ : AddCommGroup M'
inst✝¹² : Module R M'
N' : Type ?u.546898
inst✝¹¹ : AddCommGroup N'
inst✝¹⁰ : Module R N'
ι : Type u_4
ι' : Type ?u.547289
ι'' : Type ?u.547292
M₂ : Type ?u.547295
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R M₂
M₃ : Type ?u.547325
inst✝⁷ : AddCommMonoid M₃
inst✝⁶ : Module R M₃
f✝ f' : AlternatingMap R M✝ N✝ ι
g✝ g₂ : AlternatingMap R M✝ N' ι
g' : AlternatingMap R M' N' ι
v✝ : ι → M✝
v' : ι → M'
K : Type u_1
inst✝⁵ : Ring K
M : Type u_2
inst✝⁴ : AddCommGroup M
inst✝³ : Module K M
N : Type u_3
inst✝² : AddCommGroup N
inst✝¹ : Module K N
inst✝ : NoZeroSMulDivisors K N
f : AlternatingMap K M N ι
v : ι → M
h✝ : ¬LinearIndependent K v
s : Finset ι
g : ι → K
h : (Finset.sum s fun i => g i • v i) = 0
i : ι
hi : i ∈ s
hz : g i ≠ 0
this✝ : DecidableEq ι := Classical.decEq ι
this : g i = 0 ∨ ↑f v = 0
⊢ ↑f v = 0