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✝⁶ : CommSemiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid A
inst✝³ : Algebra 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.fst • c p.snd

tactic: rw [linearIndependent_iff'']
state_before: R : Type u
S : Type v
A : Type w
B : Type u₁
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid A
inst✝³ : Algebra 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 in s, g i • b i = 0 → ∀ (i : ι), i ∈ s → g i = 0
hc : ∀ (s : Finset ι') (g : ι' → S), ∑ i in s, g i • c i = 0 → ∀ (i : ι'), i ∈ s → g i = 0
⊢ LinearIndependent R fun p => b p.fst • c p.snd

tactic: rintro s g hg hsg ⟨i, k⟩
state_before: R : Type u
S : Type v
A : Type w
B : Type u₁
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid A
inst✝³ : Algebra 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 in s, g i • b i = 0 → ∀ (i : ι), i ∈ s → g i = 0
hc : ∀ (s : Finset ι') (g : ι' → S), ∑ i in s, g i • c i = 0 → ∀ (i : ι'), i ∈ s → g i = 0
⊢ ∀ (s : Finset (ι × ι')) (g : ι × ι' → R),
    (∀ (i : ι × ι'), ¬i ∈ s → g i = 0) → ∑ i in s, g i • b i.fst • c i.snd = 0 → ∀ (i : ι × ι'), g i = 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✝⁶ : CommSemiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid A
inst✝³ : Algebra 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 in s, g i • b i = 0 → ∀ (i : ι), i ∈ s → g i = 0
hc : ∀ (s : Finset ι') (g : ι' → S), ∑ i in s, g i • c i = 0 → ∀ (i : ι'), i ∈ s → g i = 0
s : Finset (ι × ι')
g : ι × ι' → R
hg : ∀ (i : ι × ι'), ¬i ∈ s → g i = 0
hsg : ∑ i in s, g i • b i.fst • c i.snd = 0
i : ι
k : ι'
⊢ 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✝⁶ : CommSemiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid A
inst✝³ : Algebra 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 in s, g i • b i = 0 → ∀ (i : ι), i ∈ s → g i = 0
hc : ∀ (s : Finset ι') (g : ι' → S), ∑ i in s, g i • c i = 0 → ∀ (i : ι'), i ∈ s → g i = 0
s : Finset (ι × ι')
g : ι × ι' → R
hg : ∀ (i : ι × ι'), ¬i ∈ s → g i = 0
hsg : ∑ i in s, g i • b i.fst • c i.snd = 0
i : ι
k : ι'
hik : ¬(i, k) ∈ s
⊢ g (i, k) = 0

tactic: have h1 : (∑ i in 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✝⁶ : CommSemiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid A
inst✝³ : Algebra 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 in s, g i • b i = 0 → ∀ (i : ι), i ∈ s → g i = 0
hc : ∀ (s : Finset ι') (g : ι' → S), ∑ i in s, g i • c i = 0 → ∀ (i : ι'), i ∈ s → g i = 0
s : Finset (ι × ι')
g : ι × ι' → R
hg : ∀ (i : ι × ι'), ¬i ∈ s → g i = 0
hsg : ∑ i in s, g i • b i.fst • c i.snd = 0
i : ι
k : ι'
hik : (i, k) ∈ s
⊢ 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✝⁶ : CommSemiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid A
inst✝³ : Algebra 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 in s, g i • b i = 0 → ∀ (i : ι), i ∈ s → g i = 0
hc : ∀ (s : Finset ι') (g : ι' → S), ∑ i in s, g i • c i = 0 → ∀ (i : ι'), i ∈ s → g i = 0
s : Finset (ι × ι')
g : ι × ι' → R
hg : ∀ (i : ι × ι'), ¬i ∈ s → g i = 0
hsg : ∑ i in s, g i • b i.fst • c i.snd = 0
i : ι
k : ι'
hik : (i, k) ∈ s
h1 : ∑ i in Finset.image Prod.fst s ×ˢ Finset.image Prod.snd s, g i • b i.fst • c i.snd = 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✝⁶ : CommSemiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid A
inst✝³ : Algebra 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 in s, g i • b i = 0 → ∀ (i : ι), i ∈ s → g i = 0
hc : ∀ (s : Finset ι') (g : ι' → S), ∑ i in s, g i • c i = 0 → ∀ (i : ι'), i ∈ s → g i = 0
s : Finset (ι × ι')
g : ι × ι' → R
hg : ∀ (i : ι × ι'), ¬i ∈ s → g i = 0
hsg : ∑ i in s, g i • b i.fst • c i.snd = 0
i : ι
k : ι'
hik : (i, k) ∈ s
h1 : ∑ y in Finset.image Prod.snd s, ∑ x in Finset.image Prod.fst s, g (x, y) • b (x, y).fst • c (x, y).snd = 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✝⁶ : CommSemiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid A
inst✝³ : Algebra 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 in s, g i • b i = 0 → ∀ (i : ι), i ∈ s → g i = 0
hc : ∀ (s : Finset ι') (g : ι' → S), ∑ i in s, g i • c i = 0 → ∀ (i : ι'), i ∈ s → g i = 0
s : Finset (ι × ι')
g : ι × ι' → R
hg : ∀ (i : ι × ι'), ¬i ∈ s → g i = 0
hsg : ∑ i in s, g i • b i.fst • c i.snd = 0
i : ι
k : ι'
hik : (i, k) ∈ s
h1 : ∑ x in Finset.image Prod.snd s, (∑ i in Finset.image Prod.fst s, g (i, x) • b i) • c x = 0
⊢ g (i, k) = 0

tactic: rw [← hsg]
state_before: R : Type u
S : Type v
A : Type w
B : Type u₁
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid A
inst✝³ : Algebra 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 in s, g i • b i = 0 → ∀ (i : ι), i ∈ s → g i = 0
hc : ∀ (s : Finset ι') (g : ι' → S), ∑ i in s, g i • c i = 0 → ∀ (i : ι'), i ∈ s → g i = 0
s : Finset (ι × ι')
g : ι × ι' → R
hg : ∀ (i : ι × ι'), ¬i ∈ s → g i = 0
hsg : ∑ i in s, g i • b i.fst • c i.snd = 0
i : ι
k : ι'
hik : (i, k) ∈ s
⊢ ∑ i in Finset.image Prod.fst s ×ˢ Finset.image Prod.snd s, g i • b i.fst • c i.snd = 0

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✝⁶ : CommSemiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid A
inst✝³ : Algebra 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 in s, g i • b i = 0 → ∀ (i : ι), i ∈ s → g i = 0
hc : ∀ (s : Finset ι') (g : ι' → S), ∑ i in s, g i • c i = 0 → ∀ (i : ι'), i ∈ s → g i = 0
s : Finset (ι × ι')
g : ι × ι' → R
hg : ∀ (i : ι × ι'), ¬i ∈ s → g i = 0
hsg : ∑ i in s, g i • b i.fst • c i.snd = 0
i : ι
k : ι'
hik : (i, k) ∈ s
⊢ ∑ i in Finset.image Prod.fst s ×ˢ Finset.image Prod.snd s, g i • b i.fst • c i.snd = ∑ i in s, g i • b i.fst • c i.snd

tactic: rw [hg p hp, zero_smul]
state_before: R : Type u
S : Type v
A : Type w
B : Type u₁
inst✝⁶ : CommSemiring R
inst✝⁵ : Semiring S
inst✝⁴ : AddCommMonoid A
inst✝³ : Algebra 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 in s, g i • b i = 0 → ∀ (i : ι), i ∈ s → g i = 0
hc : ∀ (s : Finset ι') (g : ι' → S), ∑ i in s, g i • c i = 0 → ∀ (i : ι'), i ∈ s → g i = 0
s : Finset (ι × ι')
g : ι × ι' → R
hg : ∀ (i : ι × ι'), ¬i ∈ s → g i = 0
hsg : ∑ i in s, g i • b i.fst • c i.snd = 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.fst • c p.snd = 0