Theorem: linearIndependent_smul
File: Mathlib/RingTheory/AlgebraTower.lean

tactic: rw [linearIndependent_iff'] at hb hc
state_before: R : Type u
S : Type v
A : Type w
B : Type u₁
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid A
inst✝³ : Module R S
inst✝² : Module S A
inst✝¹ : Module R A
inst✝ : IsScalarTower R S A
ι : Type v₁
b : ι → S
ι' : Type w₁
c : ι' → A
hb : LinearIndependent R b
hc : LinearIndependent S c
⊢ LinearIndependent R fun p => b p.1 • c p.2
state_after: R : Type u
S : Type v
A : Type w
B : Type u₁
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid A
inst✝³ : Module R S
inst✝² : Module S A
inst✝¹ : Module R A
inst✝ : IsScalarTower R S A
ι : Type v₁
b : ι → S
ι' : Type w₁
c : ι' → A
hb : ∀ (s : Finset ι) (g : ι → R), ∑ i ∈ s, g i • b i = 0 → ∀ i ∈ s, g i = 0
hc : ∀ (s : Finset ι') (g : ι' → S), ∑ i ∈ s, g i • c i = 0 → ∀ i ∈ s, g i = 0
⊢ LinearIndependent R fun p => b p.1 • c p.2

tactic: rw [linearIndependent_iff'']
state_before: R : Type u
S : Type v
A : Type w
B : Type u₁
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid A
inst✝³ : Module R S
inst✝² : Module S A
inst✝¹ : Module R A
inst✝ : IsScalarTower R S A
ι : Type v₁
b : ι → S
ι' : Type w₁
c : ι' → A
hb : ∀ (s : Finset ι) (g : ι → R), ∑ i ∈ s, g i • b i = 0 → ∀ i ∈ s, g i = 0
hc : ∀ (s : Finset ι') (g : ι' → S), ∑ i ∈ s, g i • c i = 0 → ∀ i ∈ s, g i = 0
⊢ LinearIndependent R fun p => b p.1 • c p.2
state_after: R : Type u
S : Type v
A : Type w
B : Type u₁
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid A
inst✝³ : Module R S
inst✝² : Module S A
inst✝¹ : Module R A
inst✝ : IsScalarTower R S A
ι : Type v₁
b : ι → S
ι' : Type w₁
c : ι' → A
hb : ∀ (s : Finset ι) (g : ι → R), ∑ i ∈ s, g i • b i = 0 → ∀ i ∈ s, g i = 0
hc : ∀ (s : Finset ι') (g : ι' → S), ∑ i ∈ s, g i • c i = 0 → ∀ i ∈ s, g i = 0
⊢ ∀ (s : Finset (ι × ι')) (g : ι × ι' → R),
    (∀ i ∉ s, g i = 0) → ∑ i ∈ s, g i • b i.1 • c i.2 = 0 → ∀ (i : ι × ι'), g i = 0

tactic: rintro s g hg hsg ⟨i, k⟩
state_before: R : Type u
S : Type v
A : Type w
B : Type u₁
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid A
inst✝³ : Module R S
inst✝² : Module S A
inst✝¹ : Module R A
inst✝ : IsScalarTower R S A
ι : Type v₁
b : ι → S
ι' : Type w₁
c : ι' → A
hb : ∀ (s : Finset ι) (g : ι → R), ∑ i ∈ s, g i • b i = 0 → ∀ i ∈ s, g i = 0
hc : ∀ (s : Finset ι') (g : ι' → S), ∑ i ∈ s, g i • c i = 0 → ∀ i ∈ s, g i = 0
⊢ ∀ (s : Finset (ι × ι')) (g : ι × ι' → R),
    (∀ i ∉ s, g i = 0) → ∑ i ∈ s, g i • b i.1 • c i.2 = 0 → ∀ (i : ι × ι'), g i = 0
state_after: case mk
R : Type u
S : Type v
A : Type w
B : Type u₁
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid A
inst✝³ : Module R S
inst✝² : Module S A
inst✝¹ : Module R A
inst✝ : IsScalarTower R S A
ι : Type v₁
b : ι → S
ι' : Type w₁
c : ι' → A
hb : ∀ (s : Finset ι) (g : ι → R), ∑ i ∈ s, g i • b i = 0 → ∀ i ∈ s, g i = 0
hc : ∀ (s : Finset ι') (g : ι' → S), ∑ i ∈ s, g i • c i = 0 → ∀ i ∈ s, g i = 0
s : Finset (ι × ι')
g : ι × ι' → R
hg : ∀ i ∉ s, g i = 0
hsg : ∑ i ∈ s, g i • b i.1 • c i.2 = 0
i : ι
k : ι'
⊢ g (i, k) = 0

tactic: by_cases hik : (i, k) ∈ s
state_before: case mk
R : Type u
S : Type v
A : Type w
B : Type u₁
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid A
inst✝³ : Module R S
inst✝² : Module S A
inst✝¹ : Module R A
inst✝ : IsScalarTower R S A
ι : Type v₁
b : ι → S
ι' : Type w₁
c : ι' → A
hb : ∀ (s : Finset ι) (g : ι → R), ∑ i ∈ s, g i • b i = 0 → ∀ i ∈ s, g i = 0
hc : ∀ (s : Finset ι') (g : ι' → S), ∑ i ∈ s, g i • c i = 0 → ∀ i ∈ s, g i = 0
s : Finset (ι × ι')
g : ι × ι' → R
hg : ∀ i ∉ s, g i = 0
hsg : ∑ i ∈ s, g i • b i.1 • c i.2 = 0
i : ι
k : ι'
⊢ g (i, k) = 0
state_after: case pos
R : Type u
S : Type v
A : Type w
B : Type u₁
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid A
inst✝³ : Module R S
inst✝² : Module S A
inst✝¹ : Module R A
inst✝ : IsScalarTower R S A
ι : Type v₁
b : ι → S
ι' : Type w₁
c : ι' → A
hb : ∀ (s : Finset ι) (g : ι → R), ∑ i ∈ s, g i • b i = 0 → ∀ i ∈ s, g i = 0
hc : ∀ (s : Finset ι') (g : ι' → S), ∑ i ∈ s, g i • c i = 0 → ∀ i ∈ s, g i = 0
s : Finset (ι × ι')
g : ι × ι' → R
hg : ∀ i ∉ s, g i = 0
hsg : ∑ i ∈ s, g i • b i.1 • c i.2 = 0
i : ι
k : ι'
hik : (i, k) ∈ s
⊢ g (i, k) = 0

case neg
R : Type u
S : Type v
A : Type w
B : Type u₁
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid A
inst✝³ : Module R S
inst✝² : Module S A
inst✝¹ : Module R A
inst✝ : IsScalarTower R S A
ι : Type v₁
b : ι → S
ι' : Type w₁
c : ι' → A
hb : ∀ (s : Finset ι) (g : ι → R), ∑ i ∈ s, g i • b i = 0 → ∀ i ∈ s, g i = 0
hc : ∀ (s : Finset ι') (g : ι' → S), ∑ i ∈ s, g i • c i = 0 → ∀ i ∈ s, g i = 0
s : Finset (ι × ι')
g : ι × ι' → R
hg : ∀ i ∉ s, g i = 0
hsg : ∑ i ∈ s, g i • b i.1 • c i.2 = 0
i : ι
k : ι'
hik : (i, k) ∉ s
⊢ g (i, k) = 0

tactic: exact hg _ hik
state_before: case neg
R : Type u
S : Type v
A : Type w
B : Type u₁
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid A
inst✝³ : Module R S
inst✝² : Module S A
inst✝¹ : Module R A
inst✝ : IsScalarTower R S A
ι : Type v₁
b : ι → S
ι' : Type w₁
c : ι' → A
hb : ∀ (s : Finset ι) (g : ι → R), ∑ i ∈ s, g i • b i = 0 → ∀ i ∈ s, g i = 0
hc : ∀ (s : Finset ι') (g : ι' → S), ∑ i ∈ s, g i • c i = 0 → ∀ i ∈ s, g i = 0
s : Finset (ι × ι')
g : ι × ι' → R
hg : ∀ i ∉ s, g i = 0
hsg : ∑ i ∈ s, g i • b i.1 • c i.2 = 0
i : ι
k : ι'
hik : (i, k) ∉ s
⊢ g (i, k) = 0
state_after: no goals

tactic: have h1 : ∑ i ∈ s.image Prod.fst ×ˢ s.image Prod.snd, g i • b i.1 • c i.2 = 0 := by
  rw [← hsg]
  exact
    (Finset.sum_subset Finset.subset_product fun p _ hp =>
        show g p • b p.1 • c p.2 = 0 by rw [hg p hp, zero_smul]).symm
state_before: case pos
R : Type u
S : Type v
A : Type w
B : Type u₁
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid A
inst✝³ : Module R S
inst✝² : Module S A
inst✝¹ : Module R A
inst✝ : IsScalarTower R S A
ι : Type v₁
b : ι → S
ι' : Type w₁
c : ι' → A
hb : ∀ (s : Finset ι) (g : ι → R), ∑ i ∈ s, g i • b i = 0 → ∀ i ∈ s, g i = 0
hc : ∀ (s : Finset ι') (g : ι' → S), ∑ i ∈ s, g i • c i = 0 → ∀ i ∈ s, g i = 0
s : Finset (ι × ι')
g : ι × ι' → R
hg : ∀ i ∉ s, g i = 0
hsg : ∑ i ∈ s, g i • b i.1 • c i.2 = 0
i : ι
k : ι'
hik : (i, k) ∈ s
⊢ g (i, k) = 0
state_after: case pos
R : Type u
S : Type v
A : Type w
B : Type u₁
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid A
inst✝³ : Module R S
inst✝² : Module S A
inst✝¹ : Module R A
inst✝ : IsScalarTower R S A
ι : Type v₁
b : ι → S
ι' : Type w₁
c : ι' → A
hb : ∀ (s : Finset ι) (g : ι → R), ∑ i ∈ s, g i • b i = 0 → ∀ i ∈ s, g i = 0
hc : ∀ (s : Finset ι') (g : ι' → S), ∑ i ∈ s, g i • c i = 0 → ∀ i ∈ s, g i = 0
s : Finset (ι × ι')
g : ι × ι' → R
hg : ∀ i ∉ s, g i = 0
hsg : ∑ i ∈ s, g i • b i.1 • c i.2 = 0
i : ι
k : ι'
hik : (i, k) ∈ s
h1 : ∑ i ∈ Finset.image Prod.fst s ×ˢ Finset.image Prod.snd s, g i • b i.1 • c i.2 = 0
⊢ g (i, k) = 0

tactic: rw [Finset.sum_product_right] at h1
state_before: case pos
R : Type u
S : Type v
A : Type w
B : Type u₁
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid A
inst✝³ : Module R S
inst✝² : Module S A
inst✝¹ : Module R A
inst✝ : IsScalarTower R S A
ι : Type v₁
b : ι → S
ι' : Type w₁
c : ι' → A
hb : ∀ (s : Finset ι) (g : ι → R), ∑ i ∈ s, g i • b i = 0 → ∀ i ∈ s, g i = 0
hc : ∀ (s : Finset ι') (g : ι' → S), ∑ i ∈ s, g i • c i = 0 → ∀ i ∈ s, g i = 0
s : Finset (ι × ι')
g : ι × ι' → R
hg : ∀ i ∉ s, g i = 0
hsg : ∑ i ∈ s, g i • b i.1 • c i.2 = 0
i : ι
k : ι'
hik : (i, k) ∈ s
h1 : ∑ i ∈ Finset.image Prod.fst s ×ˢ Finset.image Prod.snd s, g i • b i.1 • c i.2 = 0
⊢ g (i, k) = 0
state_after: case pos
R : Type u
S : Type v
A : Type w
B : Type u₁
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid A
inst✝³ : Module R S
inst✝² : Module S A
inst✝¹ : Module R A
inst✝ : IsScalarTower R S A
ι : Type v₁
b : ι → S
ι' : Type w₁
c : ι' → A
hb : ∀ (s : Finset ι) (g : ι → R), ∑ i ∈ s, g i • b i = 0 → ∀ i ∈ s, g i = 0
hc : ∀ (s : Finset ι') (g : ι' → S), ∑ i ∈ s, g i • c i = 0 → ∀ i ∈ s, g i = 0
s : Finset (ι × ι')
g : ι × ι' → R
hg : ∀ i ∉ s, g i = 0
hsg : ∑ i ∈ s, g i • b i.1 • c i.2 = 0
i : ι
k : ι'
hik : (i, k) ∈ s
h1 : ∑ y ∈ Finset.image Prod.snd s, ∑ x ∈ Finset.image Prod.fst s, g (x, y) • b (x, y).1 • c (x, y).2 = 0
⊢ g (i, k) = 0

tactic: simp_rw [← smul_assoc, ← Finset.sum_smul] at h1
state_before: case pos
R : Type u
S : Type v
A : Type w
B : Type u₁
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid A
inst✝³ : Module R S
inst✝² : Module S A
inst✝¹ : Module R A
inst✝ : IsScalarTower R S A
ι : Type v₁
b : ι → S
ι' : Type w₁
c : ι' → A
hb : ∀ (s : Finset ι) (g : ι → R), ∑ i ∈ s, g i • b i = 0 → ∀ i ∈ s, g i = 0
hc : ∀ (s : Finset ι') (g : ι' → S), ∑ i ∈ s, g i • c i = 0 → ∀ i ∈ s, g i = 0
s : Finset (ι × ι')
g : ι × ι' → R
hg : ∀ i ∉ s, g i = 0
hsg : ∑ i ∈ s, g i • b i.1 • c i.2 = 0
i : ι
k : ι'
hik : (i, k) ∈ s
h1 : ∑ y ∈ Finset.image Prod.snd s, ∑ x ∈ Finset.image Prod.fst s, g (x, y) • b (x, y).1 • c (x, y).2 = 0
⊢ g (i, k) = 0
state_after: case pos
R : Type u
S : Type v
A : Type w
B : Type u₁
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid A
inst✝³ : Module R S
inst✝² : Module S A
inst✝¹ : Module R A
inst✝ : IsScalarTower R S A
ι : Type v₁
b : ι → S
ι' : Type w₁
c : ι' → A
hb : ∀ (s : Finset ι) (g : ι → R), ∑ i ∈ s, g i • b i = 0 → ∀ i ∈ s, g i = 0
hc : ∀ (s : Finset ι') (g : ι' → S), ∑ i ∈ s, g i • c i = 0 → ∀ i ∈ s, g i = 0
s : Finset (ι × ι')
g : ι × ι' → R
hg : ∀ i ∉ s, g i = 0
hsg : ∑ i ∈ s, g i • b i.1 • c i.2 = 0
i : ι
k : ι'
hik : (i, k) ∈ s
h1 : ∑ x ∈ Finset.image Prod.snd s, (∑ i ∈ Finset.image Prod.fst s, g (i, x) • b i) • c x = 0
⊢ g (i, k) = 0

tactic: exact hb _ _ (hc _ _ h1 k (Finset.mem_image_of_mem _ hik)) i (Finset.mem_image_of_mem _ hik)
state_before: case pos
R : Type u
S : Type v
A : Type w
B : Type u₁
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid A
inst✝³ : Module R S
inst✝² : Module S A
inst✝¹ : Module R A
inst✝ : IsScalarTower R S A
ι : Type v₁
b : ι → S
ι' : Type w₁
c : ι' → A
hb : ∀ (s : Finset ι) (g : ι → R), ∑ i ∈ s, g i • b i = 0 → ∀ i ∈ s, g i = 0
hc : ∀ (s : Finset ι') (g : ι' → S), ∑ i ∈ s, g i • c i = 0 → ∀ i ∈ s, g i = 0
s : Finset (ι × ι')
g : ι × ι' → R
hg : ∀ i ∉ s, g i = 0
hsg : ∑ i ∈ s, g i • b i.1 • c i.2 = 0
i : ι
k : ι'
hik : (i, k) ∈ s
h1 : ∑ x ∈ Finset.image Prod.snd s, (∑ i ∈ Finset.image Prod.fst s, g (i, x) • b i) • c x = 0
⊢ g (i, k) = 0
state_after: no goals

tactic: rw [← hsg]
state_before: R : Type u
S : Type v
A : Type w
B : Type u₁
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid A
inst✝³ : Module R S
inst✝² : Module S A
inst✝¹ : Module R A
inst✝ : IsScalarTower R S A
ι : Type v₁
b : ι → S
ι' : Type w₁
c : ι' → A
hb : ∀ (s : Finset ι) (g : ι → R), ∑ i ∈ s, g i • b i = 0 → ∀ i ∈ s, g i = 0
hc : ∀ (s : Finset ι') (g : ι' → S), ∑ i ∈ s, g i • c i = 0 → ∀ i ∈ s, g i = 0
s : Finset (ι × ι')
g : ι × ι' → R
hg : ∀ i ∉ s, g i = 0
hsg : ∑ i ∈ s, g i • b i.1 • c i.2 = 0
i : ι
k : ι'
hik : (i, k) ∈ s
⊢ ∑ i ∈ Finset.image Prod.fst s ×ˢ Finset.image Prod.snd s, g i • b i.1 • c i.2 = 0
state_after: R : Type u
S : Type v
A : Type w
B : Type u₁
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid A
inst✝³ : Module R S
inst✝² : Module S A
inst✝¹ : Module R A
inst✝ : IsScalarTower R S A
ι : Type v₁
b : ι → S
ι' : Type w₁
c : ι' → A
hb : ∀ (s : Finset ι) (g : ι → R), ∑ i ∈ s, g i • b i = 0 → ∀ i ∈ s, g i = 0
hc : ∀ (s : Finset ι') (g : ι' → S), ∑ i ∈ s, g i • c i = 0 → ∀ i ∈ s, g i = 0
s : Finset (ι × ι')
g : ι × ι' → R
hg : ∀ i ∉ s, g i = 0
hsg : ∑ i ∈ s, g i • b i.1 • c i.2 = 0
i : ι
k : ι'
hik : (i, k) ∈ s
⊢ ∑ i ∈ Finset.image Prod.fst s ×ˢ Finset.image Prod.snd s, g i • b i.1 • c i.2 = ∑ i ∈ s, g i • b i.1 • c i.2

tactic: exact
  (Finset.sum_subset Finset.subset_product fun p _ hp =>
      show g p • b p.1 • c p.2 = 0 by rw [hg p hp, zero_smul]).symm
state_before: R : Type u
S : Type v
A : Type w
B : Type u₁
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid A
inst✝³ : Module R S
inst✝² : Module S A
inst✝¹ : Module R A
inst✝ : IsScalarTower R S A
ι : Type v₁
b : ι → S
ι' : Type w₁
c : ι' → A
hb : ∀ (s : Finset ι) (g : ι → R), ∑ i ∈ s, g i • b i = 0 → ∀ i ∈ s, g i = 0
hc : ∀ (s : Finset ι') (g : ι' → S), ∑ i ∈ s, g i • c i = 0 → ∀ i ∈ s, g i = 0
s : Finset (ι × ι')
g : ι × ι' → R
hg : ∀ i ∉ s, g i = 0
hsg : ∑ i ∈ s, g i • b i.1 • c i.2 = 0
i : ι
k : ι'
hik : (i, k) ∈ s
⊢ ∑ i ∈ Finset.image Prod.fst s ×ˢ Finset.image Prod.snd s, g i • b i.1 • c i.2 = ∑ i ∈ s, g i • b i.1 • c i.2
state_after: no goals

tactic: rw [hg p hp, zero_smul]
state_before: R : Type u
S : Type v
A : Type w
B : Type u₁
inst✝⁶ : Semiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid A
inst✝³ : Module R S
inst✝² : Module S A
inst✝¹ : Module R A
inst✝ : IsScalarTower R S A
ι : Type v₁
b : ι → S
ι' : Type w₁
c : ι' → A
hb : ∀ (s : Finset ι) (g : ι → R), ∑ i ∈ s, g i • b i = 0 → ∀ i ∈ s, g i = 0
hc : ∀ (s : Finset ι') (g : ι' → S), ∑ i ∈ s, g i • c i = 0 → ∀ i ∈ s, g i = 0
s : Finset (ι × ι')
g : ι × ι' → R
hg : ∀ i ∉ s, g i = 0
hsg : ∑ i ∈ s, g i • b i.1 • c i.2 = 0
i : ι
k : ι'
hik : (i, k) ∈ s
p : ι × ι'
x✝ : p ∈ Finset.image Prod.fst s ×ˢ Finset.image Prod.snd s
hp : p ∉ s
⊢ g p • b p.1 • c p.2 = 0
state_after: no goals