Theorem: BilinForm.linearIndependent_of_iIsOrtho
File: Mathlib/LinearAlgebra/BilinearForm.lean

tactic: classical
  rw [linearIndependent_iff']
  intro s w hs i hi
  have : B (s.sum fun i : n => w i • v i) (v i) = 0 := by rw [hs, zero_left]
  have hsum : (s.sum fun j : n => w j * B (v j) (v i)) = w i * B (v i) (v i) := by
    apply Finset.sum_eq_single_of_mem i hi
    intro j _ hij
    rw [iIsOrtho_def.1 hv₁ _ _ hij, MulZeroClass.mul_zero]
  simp_rw [sum_left, smul_left, hsum] at this
  exact eq_zero_of_ne_zero_of_mul_right_eq_zero (hv₂ i) this
state_before: R : Type ?u.787806
M : Type ?u.787809
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type ?u.787845
M₁ : Type ?u.787848
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type ?u.788457
M₂ : Type ?u.788460
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type ?u.788647
M₃ : Type ?u.788650
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_2
K : Type u_1
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type ?u.790455
M₂'' : Type ?u.790458
inst✝⁷ : AddCommMonoid M₂'
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'
inst✝⁴ : Module R₂ M₂''
R₄ : Type ?u.790741
M₄ : Type ?u.790744
inst✝³ : Ring R₄
inst✝² : IsDomain R₄
inst✝¹ : AddCommGroup M₄
inst✝ : Module R₄ M₄
G : BilinForm R₄ M₄
n : Type w
B : BilinForm K V
v : n → V
hv₁ : iIsOrtho B v
hv₂ : ∀ (i : n), ¬IsOrtho B (v i) (v i)
⊢ LinearIndependent K v

tactic: rw [linearIndependent_iff']
state_before: R : Type ?u.787806
M : Type ?u.787809
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type ?u.787845
M₁ : Type ?u.787848
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type ?u.788457
M₂ : Type ?u.788460
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type ?u.788647
M₃ : Type ?u.788650
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_2
K : Type u_1
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type ?u.790455
M₂'' : Type ?u.790458
inst✝⁷ : AddCommMonoid M₂'
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'
inst✝⁴ : Module R₂ M₂''
R₄ : Type ?u.790741
M₄ : Type ?u.790744
inst✝³ : Ring R₄
inst✝² : IsDomain R₄
inst✝¹ : AddCommGroup M₄
inst✝ : Module R₄ M₄
G : BilinForm R₄ M₄
n : Type w
B : BilinForm K V
v : n → V
hv₁ : iIsOrtho B v
hv₂ : ∀ (i : n), ¬IsOrtho B (v i) (v i)
⊢ LinearIndependent K v

tactic: intro s w hs i hi
state_before: R : Type ?u.787806
M : Type ?u.787809
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type ?u.787845
M₁ : Type ?u.787848
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type ?u.788457
M₂ : Type ?u.788460
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type ?u.788647
M₃ : Type ?u.788650
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_2
K : Type u_1
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type ?u.790455
M₂'' : Type ?u.790458
inst✝⁷ : AddCommMonoid M₂'
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'
inst✝⁴ : Module R₂ M₂''
R₄ : Type ?u.790741
M₄ : Type ?u.790744
inst✝³ : Ring R₄
inst✝² : IsDomain R₄
inst✝¹ : AddCommGroup M₄
inst✝ : Module R₄ M₄
G : BilinForm R₄ M₄
n : Type w
B : BilinForm K V
v : n → V
hv₁ : iIsOrtho B v
hv₂ : ∀ (i : n), ¬IsOrtho B (v i) (v i)
⊢ ∀ (s : Finset n) (g : n → K), ∑ i in s, g i • v i = 0 → ∀ (i : n), i ∈ s → g i = 0

tactic: have : B (s.sum fun i : n => w i • v i) (v i) = 0 := by rw [hs, zero_left]
state_before: R : Type ?u.787806
M : Type ?u.787809
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type ?u.787845
M₁ : Type ?u.787848
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type ?u.788457
M₂ : Type ?u.788460
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type ?u.788647
M₃ : Type ?u.788650
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_2
K : Type u_1
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type ?u.790455
M₂'' : Type ?u.790458
inst✝⁷ : AddCommMonoid M₂'
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'
inst✝⁴ : Module R₂ M₂''
R₄ : Type ?u.790741
M₄ : Type ?u.790744
inst✝³ : Ring R₄
inst✝² : IsDomain R₄
inst✝¹ : AddCommGroup M₄
inst✝ : Module R₄ M₄
G : BilinForm R₄ M₄
n : Type w
B : BilinForm K V
v : n → V
hv₁ : iIsOrtho B v
hv₂ : ∀ (i : n), ¬IsOrtho B (v i) (v i)
s : Finset n
w : n → K
hs : ∑ i in s, w i • v i = 0
i : n
hi : i ∈ s
⊢ w i = 0

tactic: have hsum : (s.sum fun j : n => w j * B (v j) (v i)) = w i * B (v i) (v i) := by
  apply Finset.sum_eq_single_of_mem i hi
  intro j _ hij
  rw [iIsOrtho_def.1 hv₁ _ _ hij, MulZeroClass.mul_zero]
state_before: R : Type ?u.787806
M : Type ?u.787809
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type ?u.787845
M₁ : Type ?u.787848
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type ?u.788457
M₂ : Type ?u.788460
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type ?u.788647
M₃ : Type ?u.788650
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_2
K : Type u_1
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type ?u.790455
M₂'' : Type ?u.790458
inst✝⁷ : AddCommMonoid M₂'
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'
inst✝⁴ : Module R₂ M₂''
R₄ : Type ?u.790741
M₄ : Type ?u.790744
inst✝³ : Ring R₄
inst✝² : IsDomain R₄
inst✝¹ : AddCommGroup M₄
inst✝ : Module R₄ M₄
G : BilinForm R₄ M₄
n : Type w
B : BilinForm K V
v : n → V
hv₁ : iIsOrtho B v
hv₂ : ∀ (i : n), ¬IsOrtho B (v i) (v i)
s : Finset n
w : n → K
hs : ∑ i in s, w i • v i = 0
i : n
hi : i ∈ s
this : bilin B (∑ i in s, w i • v i) (v i) = 0
⊢ w i = 0

tactic: simp_rw [sum_left, smul_left, hsum] at this
state_before: R : Type ?u.787806
M : Type ?u.787809
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type ?u.787845
M₁ : Type ?u.787848
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type ?u.788457
M₂ : Type ?u.788460
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type ?u.788647
M₃ : Type ?u.788650
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_2
K : Type u_1
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type ?u.790455
M₂'' : Type ?u.790458
inst✝⁷ : AddCommMonoid M₂'
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'
inst✝⁴ : Module R₂ M₂''
R₄ : Type ?u.790741
M₄ : Type ?u.790744
inst✝³ : Ring R₄
inst✝² : IsDomain R₄
inst✝¹ : AddCommGroup M₄
inst✝ : Module R₄ M₄
G : BilinForm R₄ M₄
n : Type w
B : BilinForm K V
v : n → V
hv₁ : iIsOrtho B v
hv₂ : ∀ (i : n), ¬IsOrtho B (v i) (v i)
s : Finset n
w : n → K
hs : ∑ i in s, w i • v i = 0
i : n
hi : i ∈ s
this : bilin B (∑ i in s, w i • v i) (v i) = 0
hsum : ∑ j in s, w j * bilin B (v j) (v i) = w i * bilin B (v i) (v i)
⊢ w i = 0

tactic: exact eq_zero_of_ne_zero_of_mul_right_eq_zero (hv₂ i) this
state_before: R : Type ?u.787806
M : Type ?u.787809
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type ?u.787845
M₁ : Type ?u.787848
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type ?u.788457
M₂ : Type ?u.788460
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type ?u.788647
M₃ : Type ?u.788650
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_2
K : Type u_1
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type ?u.790455
M₂'' : Type ?u.790458
inst✝⁷ : AddCommMonoid M₂'
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'
inst✝⁴ : Module R₂ M₂''
R₄ : Type ?u.790741
M₄ : Type ?u.790744
inst✝³ : Ring R₄
inst✝² : IsDomain R₄
inst✝¹ : AddCommGroup M₄
inst✝ : Module R₄ M₄
G : BilinForm R₄ M₄
n : Type w
B : BilinForm K V
v : n → V
hv₁ : iIsOrtho B v
hv₂ : ∀ (i : n), ¬IsOrtho B (v i) (v i)
s : Finset n
w : n → K
hs : ∑ i in s, w i • v i = 0
i : n
hi : i ∈ s
hsum : ∑ j in s, w j * bilin B (v j) (v i) = w i * bilin B (v i) (v i)
this : w i * bilin B (v i) (v i) = 0
⊢ w i = 0

tactic: rw [hs, zero_left]
state_before: R : Type ?u.787806
M : Type ?u.787809
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type ?u.787845
M₁ : Type ?u.787848
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type ?u.788457
M₂ : Type ?u.788460
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type ?u.788647
M₃ : Type ?u.788650
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_2
K : Type u_1
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type ?u.790455
M₂'' : Type ?u.790458
inst✝⁷ : AddCommMonoid M₂'
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'
inst✝⁴ : Module R₂ M₂''
R₄ : Type ?u.790741
M₄ : Type ?u.790744
inst✝³ : Ring R₄
inst✝² : IsDomain R₄
inst✝¹ : AddCommGroup M₄
inst✝ : Module R₄ M₄
G : BilinForm R₄ M₄
n : Type w
B : BilinForm K V
v : n → V
hv₁ : iIsOrtho B v
hv₂ : ∀ (i : n), ¬IsOrtho B (v i) (v i)
s : Finset n
w : n → K
hs : ∑ i in s, w i • v i = 0
i : n
hi : i ∈ s
⊢ bilin B (∑ i in s, w i • v i) (v i) = 0

tactic: apply Finset.sum_eq_single_of_mem i hi
state_before: R : Type ?u.787806
M : Type ?u.787809
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type ?u.787845
M₁ : Type ?u.787848
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type ?u.788457
M₂ : Type ?u.788460
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type ?u.788647
M₃ : Type ?u.788650
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_2
K : Type u_1
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type ?u.790455
M₂'' : Type ?u.790458
inst✝⁷ : AddCommMonoid M₂'
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'
inst✝⁴ : Module R₂ M₂''
R₄ : Type ?u.790741
M₄ : Type ?u.790744
inst✝³ : Ring R₄
inst✝² : IsDomain R₄
inst✝¹ : AddCommGroup M₄
inst✝ : Module R₄ M₄
G : BilinForm R₄ M₄
n : Type w
B : BilinForm K V
v : n → V
hv₁ : iIsOrtho B v
hv₂ : ∀ (i : n), ¬IsOrtho B (v i) (v i)
s : Finset n
w : n → K
hs : ∑ i in s, w i • v i = 0
i : n
hi : i ∈ s
this : bilin B (∑ i in s, w i • v i) (v i) = 0
⊢ ∑ j in s, w j * bilin B (v j) (v i) = w i * bilin B (v i) (v i)

tactic: intro j _ hij
state_before: R : Type ?u.787806
M : Type ?u.787809
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type ?u.787845
M₁ : Type ?u.787848
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type ?u.788457
M₂ : Type ?u.788460
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type ?u.788647
M₃ : Type ?u.788650
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_2
K : Type u_1
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type ?u.790455
M₂'' : Type ?u.790458
inst✝⁷ : AddCommMonoid M₂'
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'
inst✝⁴ : Module R₂ M₂''
R₄ : Type ?u.790741
M₄ : Type ?u.790744
inst✝³ : Ring R₄
inst✝² : IsDomain R₄
inst✝¹ : AddCommGroup M₄
inst✝ : Module R₄ M₄
G : BilinForm R₄ M₄
n : Type w
B : BilinForm K V
v : n → V
hv₁ : iIsOrtho B v
hv₂ : ∀ (i : n), ¬IsOrtho B (v i) (v i)
s : Finset n
w : n → K
hs : ∑ i in s, w i • v i = 0
i : n
hi : i ∈ s
this : bilin B (∑ i in s, w i • v i) (v i) = 0
⊢ ∀ (b : n), b ∈ s → b ≠ i → w b * bilin B (v b) (v i) = 0

tactic: rw [iIsOrtho_def.1 hv₁ _ _ hij, MulZeroClass.mul_zero]
state_before: R : Type ?u.787806
M : Type ?u.787809
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type ?u.787845
M₁ : Type ?u.787848
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type ?u.788457
M₂ : Type ?u.788460
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type ?u.788647
M₃ : Type ?u.788650
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_2
K : Type u_1
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type ?u.790455
M₂'' : Type ?u.790458
inst✝⁷ : AddCommMonoid M₂'
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'
inst✝⁴ : Module R₂ M₂''
R₄ : Type ?u.790741
M₄ : Type ?u.790744
inst✝³ : Ring R₄
inst✝² : IsDomain R₄
inst✝¹ : AddCommGroup M₄
inst✝ : Module R₄ M₄
G : BilinForm R₄ M₄
n : Type w
B : BilinForm K V
v : n → V
hv₁ : iIsOrtho B v
hv₂ : ∀ (i : n), ¬IsOrtho B (v i) (v i)
s : Finset n
w : n → K
hs : ∑ i in s, w i • v i = 0
i : n
hi : i ∈ s
this : bilin B (∑ i in s, w i • v i) (v i) = 0
j : n
a✝ : j ∈ s
hij : j ≠ i
⊢ w j * bilin B (v j) (v i) = 0