Theorem: LinearIndependent.localization_localization
File: Mathlib/RingTheory/Localization/Module.lean

tactic: rw [linearIndependent_iff'] at hv⊢
state_before: R : Type u_2
Rₛ : Type u_4
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_5
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_1
v : ι → A
hv : LinearIndependent R v
⊢ LinearIndependent Rₛ (↑(algebraMap A Aₛ) ∘ v)

tactic: intro s g hg i hi
state_before: R : Type u_2
Rₛ : Type u_4
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_5
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_1
v : ι → A
hv : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • v i = 0 → ∀ (i : ι), i ∈ s → g i = 0
⊢ ∀ (s : Finset ι) (g : ι → Rₛ), ∑ i in s, g i • (↑(algebraMap A Aₛ) ∘ v) i = 0 → ∀ (i : ι), i ∈ s → g i = 0

tactic: choose! a g' hg' using IsLocalization.exist_integer_multiples S s g
state_before: R : Type u_2
Rₛ : Type u_4
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_5
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_1
v : ι → A
hv : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • v i = 0 → ∀ (i : ι), i ∈ s → g i = 0
s : Finset ι
g : ι → Rₛ
hg : ∑ i in s, g i • (↑(algebraMap A Aₛ) ∘ v) i = 0
i : ι
hi : i ∈ s
⊢ g i = 0

tactic: obtain ⟨⟨_, r, hrS, rfl⟩, hr : algebraMap R A r * _ = 0⟩ :=
  (IsLocalization.map_eq_zero_iff (Algebra.algebraMapSubmonoid A S) _ _).1 h0
state_before: R : Type u_2
Rₛ : Type u_4
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_5
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_1
v : ι → A
hv : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • v i = 0 → ∀ (i : ι), i ∈ s → g i = 0
s : Finset ι
g : ι → Rₛ
hg : ∑ i in s, g i • (↑(algebraMap A Aₛ) ∘ v) i = 0
i : ι
hi : i ∈ s
a : { x // x ∈ S }
g' : ι → R
hg' : ∀ (i : ι), i ∈ s → ↑(algebraMap R Rₛ) (g' i) = ↑a • g i
h0 : ↑(algebraMap A Aₛ) (∑ i in s, g' i • v i) = 0
⊢ g i = 0

tactic: simp_rw [Finset.mul_sum, ← Algebra.smul_def, smul_smul] at hr
state_before: case intro.mk.intro.intro
R : Type u_2
Rₛ : Type u_4
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_5
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_1
v : ι → A
hv : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • v i = 0 → ∀ (i : ι), i ∈ s → g i = 0
s : Finset ι
g : ι → Rₛ
hg : ∑ i in s, g i • (↑(algebraMap A Aₛ) ∘ v) i = 0
i : ι
hi : i ∈ s
a : { x // x ∈ S }
g' : ι → R
hg' : ∀ (i : ι), i ∈ s → ↑(algebraMap R Rₛ) (g' i) = ↑a • g i
h0 : ↑(algebraMap A Aₛ) (∑ i in s, g' i • v i) = 0
r : R
hrS : r ∈ ↑S
hr : ↑(algebraMap R A) r * ∑ i in s, g' i • v i = 0
⊢ g i = 0

tactic: specialize hv s _ hr i hi
state_before: case intro.mk.intro.intro
R : Type u_2
Rₛ : Type u_4
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_5
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_1
v : ι → A
hv : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • v i = 0 → ∀ (i : ι), i ∈ s → g i = 0
s : Finset ι
g : ι → Rₛ
hg : ∑ i in s, g i • (↑(algebraMap A Aₛ) ∘ v) i = 0
i : ι
hi : i ∈ s
a : { x // x ∈ S }
g' : ι → R
hg' : ∀ (i : ι), i ∈ s → ↑(algebraMap R Rₛ) (g' i) = ↑a • g i
h0 : ↑(algebraMap A Aₛ) (∑ i in s, g' i • v i) = 0
r : R
hrS : r ∈ ↑S
hr : ∑ x in s, (r * g' x) • v x = 0
⊢ g i = 0

tactic: rw [← (IsLocalization.map_units Rₛ a).mul_right_eq_zero, ← Algebra.smul_def, ← hg' i hi]
state_before: case intro.mk.intro.intro
R : Type u_2
Rₛ : Type u_4
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_5
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_1
v : ι → A
s : Finset ι
g : ι → Rₛ
hg : ∑ i in s, g i • (↑(algebraMap A Aₛ) ∘ v) i = 0
i : ι
hi : i ∈ s
a : { x // x ∈ S }
g' : ι → R
hg' : ∀ (i : ι), i ∈ s → ↑(algebraMap R Rₛ) (g' i) = ↑a • g i
h0 : ↑(algebraMap A Aₛ) (∑ i in s, g' i • v i) = 0
r : R
hrS : r ∈ ↑S
hr : ∑ x in s, (r * g' x) • v x = 0
hv : r * g' i = 0
⊢ g i = 0

tactic: exact (IsLocalization.map_eq_zero_iff S _ _).2 ⟨⟨r, hrS⟩, hv⟩
state_before: case intro.mk.intro.intro
R : Type u_2
Rₛ : Type u_4
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_5
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_1
v : ι → A
s : Finset ι
g : ι → Rₛ
hg : ∑ i in s, g i • (↑(algebraMap A Aₛ) ∘ v) i = 0
i : ι
hi : i ∈ s
a : { x // x ∈ S }
g' : ι → R
hg' : ∀ (i : ι), i ∈ s → ↑(algebraMap R Rₛ) (g' i) = ↑a • g i
h0 : ↑(algebraMap A Aₛ) (∑ i in s, g' i • v i) = 0
r : R
hrS : r ∈ ↑S
hr : ∑ x in s, (r * g' x) • v x = 0
hv : r * g' i = 0
⊢ ↑(algebraMap R Rₛ) (g' i) = 0

tactic: rw [smul_zero, Finset.smul_sum] at hg
state_before: R : Type u_2
Rₛ : Type u_4
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_5
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_1
v : ι → A
hv : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • v i = 0 → ∀ (i : ι), i ∈ s → g i = 0
s : Finset ι
g : ι → Rₛ
i : ι
hi : i ∈ s
a : { x // x ∈ S }
g' : ι → R
hg' : ∀ (i : ι), i ∈ s → ↑(algebraMap R Rₛ) (g' i) = ↑a • g i
hg : ↑a • ∑ i in s, g i • (↑(algebraMap A Aₛ) ∘ v) i = ↑a • 0
⊢ ↑(algebraMap A Aₛ) (∑ i in s, g' i • v i) = 0

tactic: rw [map_sum, ← hg]
state_before: R : Type u_2
Rₛ : Type u_4
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_5
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_1
v : ι → A
hv : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • v i = 0 → ∀ (i : ι), i ∈ s → g i = 0
s : Finset ι
g : ι → Rₛ
i : ι
hi : i ∈ s
a : { x // x ∈ S }
g' : ι → R
hg' : ∀ (i : ι), i ∈ s → ↑(algebraMap R Rₛ) (g' i) = ↑a • g i
hg : ∑ x in s, ↑a • g x • (↑(algebraMap A Aₛ) ∘ v) x = 0
⊢ ↑(algebraMap A Aₛ) (∑ i in s, g' i • v i) = 0

tactic: refine' Finset.sum_congr rfl fun i hi => _
state_before: R : Type u_2
Rₛ : Type u_4
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_5
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_1
v : ι → A
hv : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • v i = 0 → ∀ (i : ι), i ∈ s → g i = 0
s : Finset ι
g : ι → Rₛ
i : ι
hi : i ∈ s
a : { x // x ∈ S }
g' : ι → R
hg' : ∀ (i : ι), i ∈ s → ↑(algebraMap R Rₛ) (g' i) = ↑a • g i
hg : ∑ x in s, ↑a • g x • (↑(algebraMap A Aₛ) ∘ v) x = 0
⊢ ∑ x in s, ↑(algebraMap A Aₛ) (g' x • v x) = ∑ x in s, ↑a • g x • (↑(algebraMap A Aₛ) ∘ v) x

tactic: rw [← smul_assoc, ← hg' i hi, Algebra.smul_def, map_mul, ← IsScalarTower.algebraMap_apply, ←
  Algebra.smul_def, algebraMap_smul, Function.comp_apply]
state_before: R : Type u_2
Rₛ : Type u_4
inst✝¹⁰ : CommRing R
inst✝⁹ : CommRing Rₛ
inst✝⁸ : Algebra R Rₛ
S : Submonoid R
hT : IsLocalization S Rₛ
A : Type u_3
inst✝⁷ : CommRing A
inst✝⁶ : Algebra R A
Aₛ : Type u_5
inst✝⁵ : CommRing Aₛ
inst✝⁴ : Algebra A Aₛ
inst✝³ : Algebra Rₛ Aₛ
inst✝² : Algebra R Aₛ
inst✝¹ : IsScalarTower R Rₛ Aₛ
inst✝ : IsScalarTower R A Aₛ
hA : IsLocalization (Algebra.algebraMapSubmonoid A S) Aₛ
ι : Type u_1
v : ι → A
hv : ∀ (s : Finset ι) (g : ι → R), ∑ i in s, g i • v i = 0 → ∀ (i : ι), i ∈ s → g i = 0
s : Finset ι
g : ι → Rₛ
i✝ : ι
hi✝ : i✝ ∈ s
a : { x // x ∈ S }
g' : ι → R
hg' : ∀ (i : ι), i ∈ s → ↑(algebraMap R Rₛ) (g' i) = ↑a • g i
hg : ∑ x in s, ↑a • g x • (↑(algebraMap A Aₛ) ∘ v) x = 0
i : ι
hi : i ∈ s
⊢ ↑(algebraMap A Aₛ) (g' i • v i) = ↑a • g i • (↑(algebraMap A Aₛ) ∘ v) i