-- Mathlib/LinearAlgebra/BilinearForm/Orthogonal.lean
theorem iIsOrtho.not_isOrtho_basis_self_of_nondegenerate {n : Type w} [Nontrivial R]
    {B : BilinForm R M} {v : Basis n R M} (h : B.iIsOrtho v) (hB : B.Nondegenerate) (i : n) :
    ¬B.IsOrtho (v i) (v i)

Proof state:
R : Type u_1
M : Type u_2
inst✝³ : CommSemiring R
inst✝² : AddCommMonoid M
inst✝¹ : Module R M
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : B.iIsOrtho ⇑v
hB : B.Nondegenerate
i : n
ho : B.IsOrtho (v i) (v i)
m : M
⊢ (B (v i)) m = 0

Tactic:
obtain ⟨vi, rfl⟩ := v.repr.symm.surjective m

Result:
case intro
R : Type u_1
M : Type u_2
inst✝³ : CommSemiring R
inst✝² : AddCommMonoid M
inst✝¹ : Module R M
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : B.iIsOrtho ⇑v
hB : B.Nondegenerate
i : n
ho : B.IsOrtho (v i) (v i)
vi : n →₀ R
⊢ (B (v i)) (v.repr.symm vi) = 0

Proof state:
case intro
R : Type u_1
M : Type u_2
inst✝³ : CommSemiring R
inst✝² : AddCommMonoid M
inst✝¹ : Module R M
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : B.iIsOrtho ⇑v
hB : B.Nondegenerate
i : n
ho : B.IsOrtho (v i) (v i)
vi : n →₀ R
⊢ ∑ i_1 ∈ vi.support, (B (v i)) (vi i_1 • v i_1) = 0

Tactic:
apply Finset.sum_eq_zero

Result:
case intro.h
R : Type u_1
M : Type u_2
inst✝³ : CommSemiring R
inst✝² : AddCommMonoid M
inst✝¹ : Module R M
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : B.iIsOrtho ⇑v
hB : B.Nondegenerate
i : n
ho : B.IsOrtho (v i) (v i)
vi : n →₀ R
⊢ ∀ x ∈ vi.support, (B (v i)) (vi x • v x) = 0

Proof state:
R : Type u_1
M : Type u_2
inst✝³ : CommSemiring R
inst✝² : AddCommMonoid M
inst✝¹ : Module R M
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : B.iIsOrtho ⇑v
hB : B.Nondegenerate
i : n
ho : B.IsOrtho (v i) (v i)
⊢ False

Tactic:
refine v.ne_zero i (hB (v i) fun m => ?_)

Result:
R : Type u_1
M : Type u_2
inst✝³ : CommSemiring R
inst✝² : AddCommMonoid M
inst✝¹ : Module R M
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : B.iIsOrtho ⇑v
hB : B.Nondegenerate
i : n
ho : B.IsOrtho (v i) (v i)
m : M
⊢ (B (v i)) m = 0

Proof state:
case intro.h
R : Type u_1
M : Type u_2
inst✝³ : CommSemiring R
inst✝² : AddCommMonoid M
inst✝¹ : Module R M
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : B.iIsOrtho ⇑v
hB : B.Nondegenerate
i : n
ho : B.IsOrtho (v i) (v i)
vi : n →₀ R
⊢ ∀ x ∈ vi.support, (B (v i)) (vi x • v x) = 0

Tactic:
rintro j -

Result:
case intro.h
R : Type u_1
M : Type u_2
inst✝³ : CommSemiring R
inst✝² : AddCommMonoid M
inst✝¹ : Module R M
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : B.iIsOrtho ⇑v
hB : B.Nondegenerate
i : n
ho : B.IsOrtho (v i) (v i)
vi : n →₀ R
j : n
⊢ (B (v i)) (vi j • v j) = 0

Proof state:
case h.e'_2.h.e'_6.inr
R : Type u_1
M : Type u_2
inst✝³ : CommSemiring R
inst✝² : AddCommMonoid M
inst✝¹ : Module R M
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : B.iIsOrtho ⇑v
hB : B.Nondegenerate
i : n
ho : B.IsOrtho (v i) (v i)
vi : n →₀ R
j : n
hij : i ≠ j
⊢ (B (v i)) (v j) = 0

Tactic:
exact h hij

Result:
no goals

Proof state:
case h.e'_2.h.e'_6.inl
R : Type u_1
M : Type u_2
inst✝³ : CommSemiring R
inst✝² : AddCommMonoid M
inst✝¹ : Module R M
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : B.iIsOrtho ⇑v
hB : B.Nondegenerate
i : n
ho : B.IsOrtho (v i) (v i)
vi : n →₀ R
⊢ (B (v i)) (v i) = 0

Tactic:
exact ho

Result:
no goals

Proof state:
case intro
R : Type u_1
M : Type u_2
inst✝³ : CommSemiring R
inst✝² : AddCommMonoid M
inst✝¹ : Module R M
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : B.iIsOrtho ⇑v
hB : B.Nondegenerate
i : n
ho : B.IsOrtho (v i) (v i)
vi : n →₀ R
⊢ (B (v i)) (v.repr.symm vi) = 0

Tactic:
rw [Basis.repr_symm_apply, Finsupp.linearCombination_apply, Finsupp.sum, sum_right]

Result:
case intro
R : Type u_1
M : Type u_2
inst✝³ : CommSemiring R
inst✝² : AddCommMonoid M
inst✝¹ : Module R M
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : B.iIsOrtho ⇑v
hB : B.Nondegenerate
i : n
ho : B.IsOrtho (v i) (v i)
vi : n →₀ R
⊢ ∑ i_1 ∈ vi.support, (B (v i)) (vi i_1 • v i_1) = 0

Proof state:
case intro.h
R : Type u_1
M : Type u_2
inst✝³ : CommSemiring R
inst✝² : AddCommMonoid M
inst✝¹ : Module R M
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : B.iIsOrtho ⇑v
hB : B.Nondegenerate
i : n
ho : B.IsOrtho (v i) (v i)
vi : n →₀ R
j : n
⊢ (B (v i)) (vi j • v j) = 0

Tactic:
rw [smul_right]

Result:
case intro.h
R : Type u_1
M : Type u_2
inst✝³ : CommSemiring R
inst✝² : AddCommMonoid M
inst✝¹ : Module R M
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : B.iIsOrtho ⇑v
hB : B.Nondegenerate
i : n
ho : B.IsOrtho (v i) (v i)
vi : n →₀ R
j : n
⊢ vi j * (B (v i)) (v j) = 0

Proof state:
case intro.h
R : Type u_1
M : Type u_2
inst✝³ : CommSemiring R
inst✝² : AddCommMonoid M
inst✝¹ : Module R M
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : B.iIsOrtho ⇑v
hB : B.Nondegenerate
i : n
ho : B.IsOrtho (v i) (v i)
vi : n →₀ R
j : n
⊢ vi j * (B (v i)) (v j) = 0

Tactic:
convert mul_zero (vi j) using 2

Result:
case h.e'_2.h.e'_6
R : Type u_1
M : Type u_2
inst✝³ : CommSemiring R
inst✝² : AddCommMonoid M
inst✝¹ : Module R M
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : B.iIsOrtho ⇑v
hB : B.Nondegenerate
i : n
ho : B.IsOrtho (v i) (v i)
vi : n →₀ R
j : n
⊢ (B (v i)) (v j) = 0

Proof state:
case h.e'_2.h.e'_6
R : Type u_1
M : Type u_2
inst✝³ : CommSemiring R
inst✝² : AddCommMonoid M
inst✝¹ : Module R M
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : B.iIsOrtho ⇑v
hB : B.Nondegenerate
i : n
ho : B.IsOrtho (v i) (v i)
vi : n →₀ R
j : n
⊢ (B (v i)) (v j) = 0

Tactic:
obtain rfl | hij := eq_or_ne i j

Result:
case h.e'_2.h.e'_6.inl
R : Type u_1
M : Type u_2
inst✝³ : CommSemiring R
inst✝² : AddCommMonoid M
inst✝¹ : Module R M
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : B.iIsOrtho ⇑v
hB : B.Nondegenerate
i : n
ho : B.IsOrtho (v i) (v i)
vi : n →₀ R
⊢ (B (v i)) (v i) = 0

case h.e'_2.h.e'_6.inr
R : Type u_1
M : Type u_2
inst✝³ : CommSemiring R
inst✝² : AddCommMonoid M
inst✝¹ : Module R M
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : B.iIsOrtho ⇑v
hB : B.Nondegenerate
i : n
ho : B.IsOrtho (v i) (v i)
vi : n →₀ R
j : n
hij : i ≠ j
⊢ (B (v i)) (v j) = 0

Proof state:
R : Type u_1
M : Type u_2
inst✝³ : CommSemiring R
inst✝² : AddCommMonoid M
inst✝¹ : Module R M
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : B.iIsOrtho ⇑v
hB : B.Nondegenerate
i : n
⊢ ¬B.IsOrtho (v i) (v i)

Tactic:
intro ho

Result:
R : Type u_1
M : Type u_2
inst✝³ : CommSemiring R
inst✝² : AddCommMonoid M
inst✝¹ : Module R M
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : B.iIsOrtho ⇑v
hB : B.Nondegenerate
i : n
ho : B.IsOrtho (v i) (v i)
⊢ False