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

tactic: letI := Classical.decEq (G →* L)
state_before: ι : Type u'
ι' : Type ?u.660661
R : Type ?u.660664
K : Type ?u.660667
M : Type ?u.660670
M' : Type ?u.660673
M'' : Type ?u.660676
V : Type u
V' : Type ?u.660681
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
G : Type u_1
inst✝² : Monoid G
L : Type u_2
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
⊢ LinearIndependent L fun f => ↑f

tactic: letI : MulAction L L := DistribMulAction.toMulAction
state_before: ι : Type u'
ι' : Type ?u.660661
R : Type ?u.660664
K : Type ?u.660667
M : Type ?u.660670
M' : Type ?u.660673
M'' : Type ?u.660676
V : Type u
V' : Type ?u.660681
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
G : Type u_1
inst✝² : Monoid G
L : Type u_2
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this : DecidableEq (G →* L) := Classical.decEq (G →* L)
⊢ LinearIndependent L fun f => ↑f

tactic: rw [add_sub_add_left_eq_sub]
state_before: ι : Type u'
ι' : Type ?u.660661
R : Type ?u.660664
K : Type ?u.660667
M : Type ?u.660670
M' : Type ?u.660673
M'' : Type ?u.660676
V : Type u
V' : Type ?u.660681
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
G : Type u_1
inst✝² : Monoid G
L : Type u_2
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
i : G →* L
his : i ∈ s
x y : G
⊢ ∑ i in s, g i * ↑i x * ↑i y - ∑ i in s, g i * ↑a x * ↑i y =
    g a * ↑a x * ↑a y + ∑ i in s, g i * ↑i x * ↑i y - (g a * ↑a x * ↑a y + ∑ i in s, g i * ↑a x * ↑i y)

tactic: rw [Finset.sum_insert has, Finset.sum_insert has]
state_before: ι : Type u'
ι' : Type ?u.660661
R : Type ?u.660664
K : Type ?u.660667
M : Type ?u.660670
M' : Type ?u.660673
M'' : Type ?u.660676
V : Type u
V' : Type ?u.660681
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
G : Type u_1
inst✝² : Monoid G
L : Type u_2
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
i : G →* L
his : i ∈ s
x y : G
⊢ g a * ↑a x * ↑a y + ∑ i in s, g i * ↑i x * ↑i y - (g a * ↑a x * ↑a y + ∑ i in s, g i * ↑a x * ↑i y) =
    ∑ i in insert a s, g i * ↑i x * ↑i y - ∑ i in insert a s, g i * ↑a x * ↑i y

tactic: rw [i.map_mul, mul_assoc]
state_before: ι : Type u'
ι' : Type ?u.660661
R : Type ?u.660664
K : Type ?u.660667
M : Type ?u.660670
M' : Type ?u.660673
M'' : Type ?u.660676
V : Type u
V' : Type ?u.660681
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
G : Type u_1
inst✝² : Monoid G
L : Type u_2
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
i✝ : G →* L
his : i✝ ∈ s
x y : G
i : G →* L
x✝ : i ∈ insert a s
⊢ g i * ↑i x * ↑i y = g i * ↑i (x * y)

tactic: rw [mul_assoc, mul_left_comm]
state_before: ι : Type u'
ι' : Type ?u.660661
R : Type ?u.660664
K : Type ?u.660667
M : Type ?u.660670
M' : Type ?u.660673
M'' : Type ?u.660676
V : Type u
V' : Type ?u.660681
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
G : Type u_1
inst✝² : Monoid G
L : Type u_2
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
i : G →* L
his : i ∈ s
x y : G
x✝¹ : G →* L
x✝ : x✝¹ ∈ insert a s
⊢ g x✝¹ * ↑a x * ↑x✝¹ y = ↑a x * (g x✝¹ * ↑x✝¹ y)

tactic: rw [Finset.sum_apply, Finset.sum_apply, Finset.mul_sum]
state_before: ι : Type u'
ι' : Type ?u.660661
R : Type ?u.660664
K : Type ?u.660667
M : Type ?u.660670
M' : Type ?u.660673
M'' : Type ?u.660676
V : Type u
V' : Type ?u.660681
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
G : Type u_1
inst✝² : Monoid G
L : Type u_2
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
i : G →* L
his : i ∈ s
x y : G
⊢ ∑ i in insert a s, g i * ↑i (x * y) - ∑ i in insert a s, ↑a x * (g i * ↑i y) =
    Finset.sum (insert a s) (fun i => g i • ↑i) (x * y) - ↑a x * Finset.sum (insert a s) (fun i => g i • ↑i) y

tactic: rfl
state_before: ι : Type u'
ι' : Type ?u.660661
R : Type ?u.660664
K : Type ?u.660667
M : Type ?u.660670
M' : Type ?u.660673
M'' : Type ?u.660676
V : Type u
V' : Type ?u.660681
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
G : Type u_1
inst✝² : Monoid G
L : Type u_2
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
i : G →* L
his : i ∈ s
x y : G
⊢ ∑ i in insert a s, g i * ↑i (x * y) - ∑ i in insert a s, ↑a x * (g i * ↑i y) =
    ∑ c in insert a s, (g c • ↑c) (x * y) - ∑ x_1 in insert a s, ↑a x * (g x_1 • ↑x_1) y

tactic: rw [hg]
state_before: ι : Type u'
ι' : Type ?u.660661
R : Type ?u.660664
K : Type ?u.660667
M : Type ?u.660670
M' : Type ?u.660673
M'' : Type ?u.660676
V : Type u
V' : Type ?u.660681
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
G : Type u_1
inst✝² : Monoid G
L : Type u_2
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
i : G →* L
his : i ∈ s
x y : G
⊢ Finset.sum (insert a s) (fun i => g i • ↑i) (x * y) - ↑a x * Finset.sum (insert a s) (fun i => g i • ↑i) y =
    0 - ↑a x * 0

tactic: rfl
state_before: ι : Type u'
ι' : Type ?u.660661
R : Type ?u.660664
K : Type ?u.660667
M : Type ?u.660670
M' : Type ?u.660673
M'' : Type ?u.660676
V : Type u
V' : Type ?u.660681
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
G : Type u_1
inst✝² : Monoid G
L : Type u_2
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
i : G →* L
his : i ∈ s
x y : G
⊢ OfNat.ofNat 0 (x * y) - ↑a x * OfNat.ofNat 0 y = 0 - ↑a x * 0

tactic: rw [mul_zero, sub_zero]
state_before: ι : Type u'
ι' : Type ?u.660661
R : Type ?u.660664
K : Type ?u.660667
M : Type ?u.660670
M' : Type ?u.660673
M'' : Type ?u.660676
V : Type u
V' : Type ?u.660681
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
G : Type u_1
inst✝² : Monoid G
L : Type u_2
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
i : G →* L
his : i ∈ s
x y : G
⊢ 0 - ↑a x * 0 = 0

tactic: rw [mul_sub, sub_eq_zero]
state_before: ι : Type u'
ι' : Type ?u.660661
R : Type ?u.660664
K : Type ?u.660667
M : Type ?u.660670
M' : Type ?u.660673
M'' : Type ?u.660676
V : Type u
V' : Type ?u.660681
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
G : Type u_1
inst✝² : Monoid G
L : Type u_2
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
h1 : ∀ (i : G →* L), i ∈ s → g i • ↑i = g i • ↑a
h2 : ∀ (i : G →* L), i ∈ s → ∃ y, ↑i y ≠ ↑a y
i : G →* L
his : i ∈ s
y : G
hy : ↑i y ≠ ↑a y
h : g i • ↑i y = g i • ↑a y
⊢ g i * (↑i y - ↑a y) = 0

tactic: exact h
state_before: ι : Type u'
ι' : Type ?u.660661
R : Type ?u.660664
K : Type ?u.660667
M : Type ?u.660670
M' : Type ?u.660673
M'' : Type ?u.660676
V : Type u
V' : Type ?u.660681
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
G : Type u_1
inst✝² : Monoid G
L : Type u_2
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
h1 : ∀ (i : G →* L), i ∈ s → g i • ↑i = g i • ↑a
h2 : ∀ (i : G →* L), i ∈ s → ∃ y, ↑i y ≠ ↑a y
i : G →* L
his : i ∈ s
y : G
hy : ↑i y ≠ ↑a y
h : g i • ↑i y = g i • ↑a y
⊢ g i * ↑i y = g i * ↑a y

tactic: rw [← a.map_one]
state_before: ι : Type u'
ι' : Type ?u.660661
R : Type ?u.660664
K : Type ?u.660667
M : Type ?u.660670
M' : Type ?u.660673
M'' : Type ?u.660676
V : Type u
V' : Type ?u.660681
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
G : Type u_1
inst✝² : Monoid G
L : Type u_2
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
h1 : ∀ (i : G →* L), i ∈ s → g i • ↑i = g i • ↑a
h2 : ∀ (i : G →* L), i ∈ s → ∃ y, ↑i y ≠ ↑a y
h3 : ∀ (i : G →* L), i ∈ s → g i = 0
⊢ g a * 1 = (g a • ↑a) 1

tactic: rfl
state_before: ι : Type u'
ι' : Type ?u.660661
R : Type ?u.660664
K : Type ?u.660667
M : Type ?u.660670
M' : Type ?u.660673
M'' : Type ?u.660676
V : Type u
V' : Type ?u.660681
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
G : Type u_1
inst✝² : Monoid G
L : Type u_2
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
h1 : ∀ (i : G →* L), i ∈ s → g i • ↑i = g i • ↑a
h2 : ∀ (i : G →* L), i ∈ s → ∃ y, ↑i y ≠ ↑a y
h3 : ∀ (i : G →* L), i ∈ s → g i = 0
⊢ g a * ↑a 1 = (g a • ↑a) 1

tactic: rw [Finset.sum_eq_single a]
state_before: ι : Type u'
ι' : Type ?u.660661
R : Type ?u.660664
K : Type ?u.660667
M : Type ?u.660670
M' : Type ?u.660673
M'' : Type ?u.660676
V : Type u
V' : Type ?u.660681
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
G : Type u_1
inst✝² : Monoid G
L : Type u_2
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
h1 : ∀ (i : G →* L), i ∈ s → g i • ↑i = g i • ↑a
h2 : ∀ (i : G →* L), i ∈ s → ∃ y, ↑i y ≠ ↑a y
h3 : ∀ (i : G →* L), i ∈ s → g i = 0
⊢ (g a • ↑a) 1 = Finset.sum (insert a s) (fun i => g i • ↑i) 1

tactic: intro i his hia
state_before: case h₀
ι : Type u'
ι' : Type ?u.660661
R : Type ?u.660664
K : Type ?u.660667
M : Type ?u.660670
M' : Type ?u.660673
M'' : Type ?u.660676
V : Type u
V' : Type ?u.660681
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
G : Type u_1
inst✝² : Monoid G
L : Type u_2
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
h1 : ∀ (i : G →* L), i ∈ s → g i • ↑i = g i • ↑a
h2 : ∀ (i : G →* L), i ∈ s → ∃ y, ↑i y ≠ ↑a y
h3 : ∀ (i : G →* L), i ∈ s → g i = 0
⊢ ∀ (b : G →* L), b ∈ insert a s → b ≠ a → g b • ↑b = 0

tactic: rw [Finset.mem_insert] at his
state_before: case h₀
ι : Type u'
ι' : Type ?u.660661
R : Type ?u.660664
K : Type ?u.660667
M : Type ?u.660670
M' : Type ?u.660673
M'' : Type ?u.660676
V : Type u
V' : Type ?u.660681
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
G : Type u_1
inst✝² : Monoid G
L : Type u_2
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
h1 : ∀ (i : G →* L), i ∈ s → g i • ↑i = g i • ↑a
h2 : ∀ (i : G →* L), i ∈ s → ∃ y, ↑i y ≠ ↑a y
h3 : ∀ (i : G →* L), i ∈ s → g i = 0
i : G →* L
his : i ∈ insert a s
hia : i ≠ a
⊢ g i • ↑i = 0

tactic: rw [h3 i (his.resolve_left hia), zero_smul]
state_before: case h₀
ι : Type u'
ι' : Type ?u.660661
R : Type ?u.660664
K : Type ?u.660667
M : Type ?u.660670
M' : Type ?u.660673
M'' : Type ?u.660676
V : Type u
V' : Type ?u.660681
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
G : Type u_1
inst✝² : Monoid G
L : Type u_2
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
h1 : ∀ (i : G →* L), i ∈ s → g i • ↑i = g i • ↑a
h2 : ∀ (i : G →* L), i ∈ s → ∃ y, ↑i y ≠ ↑a y
h3 : ∀ (i : G →* L), i ∈ s → g i = 0
i : G →* L
his : i = a ∨ i ∈ s
hia : i ≠ a
⊢ g i • ↑i = 0

tactic: intro haas
state_before: case h₁
ι : Type u'
ι' : Type ?u.660661
R : Type ?u.660664
K : Type ?u.660667
M : Type ?u.660670
M' : Type ?u.660673
M'' : Type ?u.660676
V : Type u
V' : Type ?u.660681
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
G : Type u_1
inst✝² : Monoid G
L : Type u_2
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
h1 : ∀ (i : G →* L), i ∈ s → g i • ↑i = g i • ↑a
h2 : ∀ (i : G →* L), i ∈ s → ∃ y, ↑i y ≠ ↑a y
h3 : ∀ (i : G →* L), i ∈ s → g i = 0
⊢ ¬a ∈ insert a s → g a • ↑a = 0

tactic: exfalso
state_before: case h₁
ι : Type u'
ι' : Type ?u.660661
R : Type ?u.660664
K : Type ?u.660667
M : Type ?u.660670
M' : Type ?u.660673
M'' : Type ?u.660676
V : Type u
V' : Type ?u.660681
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
G : Type u_1
inst✝² : Monoid G
L : Type u_2
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
h1 : ∀ (i : G →* L), i ∈ s → g i • ↑i = g i • ↑a
h2 : ∀ (i : G →* L), i ∈ s → ∃ y, ↑i y ≠ ↑a y
h3 : ∀ (i : G →* L), i ∈ s → g i = 0
haas : ¬a ∈ insert a s
⊢ g a • ↑a = 0

tactic: apply haas
state_before: case h₁.h
ι : Type u'
ι' : Type ?u.660661
R : Type ?u.660664
K : Type ?u.660667
M : Type ?u.660670
M' : Type ?u.660673
M'' : Type ?u.660676
V : Type u
V' : Type ?u.660681
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
G : Type u_1
inst✝² : Monoid G
L : Type u_2
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
h1 : ∀ (i : G →* L), i ∈ s → g i • ↑i = g i • ↑a
h2 : ∀ (i : G →* L), i ∈ s → ∃ y, ↑i y ≠ ↑a y
h3 : ∀ (i : G →* L), i ∈ s → g i = 0
haas : ¬a ∈ insert a s
⊢ False

tactic: exact Finset.mem_insert_self a s
state_before: case h₁.h
ι : Type u'
ι' : Type ?u.660661
R : Type ?u.660664
K : Type ?u.660667
M : Type ?u.660670
M' : Type ?u.660673
M'' : Type ?u.660676
V : Type u
V' : Type ?u.660681
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
G : Type u_1
inst✝² : Monoid G
L : Type u_2
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
h1 : ∀ (i : G →* L), i ∈ s → g i • ↑i = g i • ↑a
h2 : ∀ (i : G →* L), i ∈ s → ∃ y, ↑i y ≠ ↑a y
h3 : ∀ (i : G →* L), i ∈ s → g i = 0
haas : ¬a ∈ insert a s
⊢ a ∈ insert a s

tactic: rw [hg]
state_before: ι : Type u'
ι' : Type ?u.660661
R : Type ?u.660664
K : Type ?u.660667
M : Type ?u.660670
M' : Type ?u.660673
M'' : Type ?u.660676
V : Type u
V' : Type ?u.660681
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
G : Type u_1
inst✝² : Monoid G
L : Type u_2
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
h1 : ∀ (i : G →* L), i ∈ s → g i • ↑i = g i • ↑a
h2 : ∀ (i : G →* L), i ∈ s → ∃ y, ↑i y ≠ ↑a y
h3 : ∀ (i : G →* L), i ∈ s → g i = 0
⊢ Finset.sum (insert a s) (fun i => g i • ↑i) 1 = 0

tactic: rfl
state_before: ι : Type u'
ι' : Type ?u.660661
R : Type ?u.660664
K : Type ?u.660667
M : Type ?u.660670
M' : Type ?u.660673
M'' : Type ?u.660676
V : Type u
V' : Type ?u.660681
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
G : Type u_1
inst✝² : Monoid G
L : Type u_2
inst✝¹ : CommRing L
inst✝ : NoZeroDivisors L
this✝ : DecidableEq (G →* L) := Classical.decEq (G →* L)
this : MulAction L L := DistribMulAction.toMulAction
s✝ : Finset (G →* L)
a : G →* L
s : Finset (G →* L)
has : ¬a ∈ s
ih : ∀ (g : (G →* L) → L), ∑ i in s, g i • ↑i = 0 → ∀ (i : G →* L), i ∈ s → g i = 0
g : (G →* L) → L
hg : ∑ i in insert a s, g i • ↑i = 0
h1 : ∀ (i : G →* L), i ∈ s → g i • ↑i = g i • ↑a
h2 : ∀ (i : G →* L), i ∈ s → ∃ y, ↑i y ≠ ↑a y
h3 : ∀ (i : G →* L), i ∈ s → g i = 0
⊢ OfNat.ofNat 0 1 = 0