l3lab/ntp-mathlib huggingface dataset:
/-- An orthogonal basis with respect to a nondegenerate bilinear form has no self-orthogonal
elements. -/
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) := by
  intro ho
  refine' v.ne_zero i (hB (v i) fun m => _)
  obtain ⟨vi, rfl⟩ := v.repr.symm.surjective m
  rw [Basis.repr_symm_apply, Finsupp.total_apply, Finsupp.sum, sum_right]
  apply Finset.sum_eq_zero
  

Proof state:
case intro.h
R : Type u_1
M : Type u_2
inst✝²¹ : Semiring R
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁸ : Ring R₁
inst✝¹⁷ : AddCommGroup M₁
inst✝¹⁶ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁵ : CommSemiring R₂
inst✝¹⁴ : AddCommMonoid M₂
inst✝¹³ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹² : CommRing R₃
inst✝¹¹ : AddCommGroup M₃
inst✝¹⁰ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁹ : Field K
inst✝⁸ : AddCommGroup V
inst✝⁷ : Module K V
M₂'✝ : Type u_11
M₂'' : Type u_12
inst✝⁶ : AddCommMonoid M₂'✝
inst✝⁵ : AddCommMonoid M₂''
inst✝⁴ : Module R₂ M₂'✝
inst✝³ : Module R₂ M₂''
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_13
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : iIsOrtho B ⇑v
hB : Nondegenerate B
i : n
ho : IsOrtho B (v i) (v i)
vi : n →₀ R
⊢ ∀ x ∈ vi.support, bilin B (v i) (vi x • v x) = 0

Next tactic:
rintro j -
/-- An orthogonal basis with respect to a nondegenerate bilinear form has no self-orthogonal
elements. -/
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) := by
  intro ho
  refine' v.ne_zero i (hB (v i) fun m => _)
  obtain ⟨vi, rfl⟩ := v.repr.symm.surjective m
  rw [Basis.repr_symm_apply, Finsupp.total_apply, Finsupp.sum, sum_right]
  apply Finset.sum_eq_zero
  rintro j -
  

Proof state:
case intro.h
R : Type u_1
M : Type u_2
inst✝²¹ : Semiring R
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁸ : Ring R₁
inst✝¹⁷ : AddCommGroup M₁
inst✝¹⁶ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁵ : CommSemiring R₂
inst✝¹⁴ : AddCommMonoid M₂
inst✝¹³ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹² : CommRing R₃
inst✝¹¹ : AddCommGroup M₃
inst✝¹⁰ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁹ : Field K
inst✝⁸ : AddCommGroup V
inst✝⁷ : Module K V
M₂'✝ : Type u_11
M₂'' : Type u_12
inst✝⁶ : AddCommMonoid M₂'✝
inst✝⁵ : AddCommMonoid M₂''
inst✝⁴ : Module R₂ M₂'✝
inst✝³ : Module R₂ M₂''
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_13
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : iIsOrtho B ⇑v
hB : Nondegenerate B
i : n
ho : IsOrtho B (v i) (v i)
vi : n →₀ R
j : n
⊢ bilin B (v i) (vi j • v j) = 0

Next tactic:
rw [smul_right]
/-- An orthogonal basis with respect to a nondegenerate bilinear form has no self-orthogonal
elements. -/
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) := by
  intro ho
  refine' v.ne_zero i (hB (v i) fun m => _)
  obtain ⟨vi, rfl⟩ := v.repr.symm.surjective m
  rw [Basis.repr_symm_apply, Finsupp.total_apply, Finsupp.sum, sum_right]
  apply Finset.sum_eq_zero
  rintro j -
  rw [smul_right]
  

Proof state:
case intro.h
R : Type u_1
M : Type u_2
inst✝²¹ : Semiring R
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁸ : Ring R₁
inst✝¹⁷ : AddCommGroup M₁
inst✝¹⁶ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁵ : CommSemiring R₂
inst✝¹⁴ : AddCommMonoid M₂
inst✝¹³ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹² : CommRing R₃
inst✝¹¹ : AddCommGroup M₃
inst✝¹⁰ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁹ : Field K
inst✝⁸ : AddCommGroup V
inst✝⁷ : Module K V
M₂'✝ : Type u_11
M₂'' : Type u_12
inst✝⁶ : AddCommMonoid M₂'✝
inst✝⁵ : AddCommMonoid M₂''
inst✝⁴ : Module R₂ M₂'✝
inst✝³ : Module R₂ M₂''
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_13
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : iIsOrtho B ⇑v
hB : Nondegenerate B
i : n
ho : IsOrtho B (v i) (v i)
vi : n →₀ R
j : n
⊢ vi j * bilin B (v i) (v j) = 0

Next tactic:
convert mul_zero (vi j) using 2
/-- An orthogonal basis with respect to a nondegenerate bilinear form has no self-orthogonal
elements. -/
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) := by
  intro ho
  refine' v.ne_zero i (hB (v i) fun m => _)
  obtain ⟨vi, rfl⟩ := v.repr.symm.surjective m
  rw [Basis.repr_symm_apply, Finsupp.total_apply, Finsupp.sum, sum_right]
  apply Finset.sum_eq_zero
  rintro j -
  rw [smul_right]
  convert mul_zero (vi j) using 2
  

Proof state:
case h.e'_2.h.e'_6
R : Type u_1
M : Type u_2
inst✝²¹ : Semiring R
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁸ : Ring R₁
inst✝¹⁷ : AddCommGroup M₁
inst✝¹⁶ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁵ : CommSemiring R₂
inst✝¹⁴ : AddCommMonoid M₂
inst✝¹³ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹² : CommRing R₃
inst✝¹¹ : AddCommGroup M₃
inst✝¹⁰ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁹ : Field K
inst✝⁸ : AddCommGroup V
inst✝⁷ : Module K V
M₂'✝ : Type u_11
M₂'' : Type u_12
inst✝⁶ : AddCommMonoid M₂'✝
inst✝⁵ : AddCommMonoid M₂''
inst✝⁴ : Module R₂ M₂'✝
inst✝³ : Module R₂ M₂''
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_13
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : iIsOrtho B ⇑v
hB : Nondegenerate B
i : n
ho : IsOrtho B (v i) (v i)
vi : n →₀ R
j : n
⊢ bilin B (v i) (v j) = 0

Next tactic:
obtain rfl | hij := eq_or_ne i j
/-- An orthogonal basis with respect to a nondegenerate bilinear form has no self-orthogonal
elements. -/
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) := by
  intro ho
  refine' v.ne_zero i (hB (v i) fun m => _)
  obtain ⟨vi, rfl⟩ := v.repr.symm.surjective m
  rw [Basis.repr_symm_apply, Finsupp.total_apply, Finsupp.sum, sum_right]
  apply Finset.sum_eq_zero
  rintro j -
  rw [smul_right]
  convert mul_zero (vi j) using 2
  obtain rfl | hij := eq_or_ne i j
  · 

Proof state:
case h.e'_2.h.e'_6.inl
R : Type u_1
M : Type u_2
inst✝²¹ : Semiring R
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁸ : Ring R₁
inst✝¹⁷ : AddCommGroup M₁
inst✝¹⁶ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁵ : CommSemiring R₂
inst✝¹⁴ : AddCommMonoid M₂
inst✝¹³ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹² : CommRing R₃
inst✝¹¹ : AddCommGroup M₃
inst✝¹⁰ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁹ : Field K
inst✝⁸ : AddCommGroup V
inst✝⁷ : Module K V
M₂'✝ : Type u_11
M₂'' : Type u_12
inst✝⁶ : AddCommMonoid M₂'✝
inst✝⁵ : AddCommMonoid M₂''
inst✝⁴ : Module R₂ M₂'✝
inst✝³ : Module R₂ M₂''
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_13
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : iIsOrtho B ⇑v
hB : Nondegenerate B
i : n
ho : IsOrtho B (v i) (v i)
vi : n →₀ R
⊢ bilin B (v i) (v i) = 0

Next tactic:
exact ho
/-- An orthogonal basis with respect to a nondegenerate bilinear form has no self-orthogonal
elements. -/
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) := by
  intro ho
  refine' v.ne_zero i (hB (v i) fun m => _)
  obtain ⟨vi, rfl⟩ := v.repr.symm.surjective m
  rw [Basis.repr_symm_apply, Finsupp.total_apply, Finsupp.sum, sum_right]
  apply Finset.sum_eq_zero
  rintro j -
  rw [smul_right]
  convert mul_zero (vi j) using 2
  obtain rfl | hij := eq_or_ne i j
  · exact ho
  · 

Proof state:
case h.e'_2.h.e'_6.inr
R : Type u_1
M : Type u_2
inst✝²¹ : Semiring R
inst✝²⁰ : AddCommMonoid M
inst✝¹⁹ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁸ : Ring R₁
inst✝¹⁷ : AddCommGroup M₁
inst✝¹⁶ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁵ : CommSemiring R₂
inst✝¹⁴ : AddCommMonoid M₂
inst✝¹³ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹² : CommRing R₃
inst✝¹¹ : AddCommGroup M₃
inst✝¹⁰ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝⁹ : Field K
inst✝⁸ : AddCommGroup V
inst✝⁷ : Module K V
M₂'✝ : Type u_11
M₂'' : Type u_12
inst✝⁶ : AddCommMonoid M₂'✝
inst✝⁵ : AddCommMonoid M₂''
inst✝⁴ : Module R₂ M₂'✝
inst✝³ : Module R₂ M₂''
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_13
inst✝² : AddCommMonoid M₂'
inst✝¹ : Module R₂ M₂'
n : Type w
inst✝ : Nontrivial R
B : BilinForm R M
v : Basis n R M
h : iIsOrtho B ⇑v
hB : Nondegenerate B
i : n
ho : IsOrtho B (v i) (v i)
vi : n →₀ R
j : n
hij : i ≠ j
⊢ bilin B (v i) (v j) = 0

Next tactic:
exact h hij
/-- Given an orthogonal basis with respect to a bilinear form, the bilinear form is nondegenerate
iff the basis has no elements which are self-orthogonal. -/
theorem iIsOrtho.nondegenerate_iff_not_isOrtho_basis_self {n : Type w} [Nontrivial R]
    [NoZeroDivisors R] (B : BilinForm R M) (v : Basis n R M) (hO : B.iIsOrtho v) :
    B.Nondegenerate ↔ ∀ i, ¬B.IsOrtho (v i) (v i) := by
  

Proof state:
R : Type u_1
M : Type u_2
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
M₂'✝ : Type u_11
M₂'' : Type u_12
inst✝⁷ : AddCommMonoid M₂'✝
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'✝
inst✝⁴ : Module R₂ M₂''
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_13
inst✝³ : AddCommMonoid M₂'
inst✝² : Module R₂ M₂'
n : Type w
inst✝¹ : Nontrivial R
inst✝ : NoZeroDivisors R
B : BilinForm R M
v : Basis n R M
hO : iIsOrtho B ⇑v
⊢ Nondegenerate B ↔ ∀ (i : n), ¬IsOrtho B (v i) (v i)

Next tactic:
refine' ⟨hO.not_isOrtho_basis_self_of_nondegenerate, fun ho m hB => _⟩
/-- Given an orthogonal basis with respect to a bilinear form, the bilinear form is nondegenerate
iff the basis has no elements which are self-orthogonal. -/
theorem iIsOrtho.nondegenerate_iff_not_isOrtho_basis_self {n : Type w} [Nontrivial R]
    [NoZeroDivisors R] (B : BilinForm R M) (v : Basis n R M) (hO : B.iIsOrtho v) :
    B.Nondegenerate ↔ ∀ i, ¬B.IsOrtho (v i) (v i) := by
  refine' ⟨hO.not_isOrtho_basis_self_of_nondegenerate, fun ho m hB => _⟩
  

Proof state:
R : Type u_1
M : Type u_2
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
M₂'✝ : Type u_11
M₂'' : Type u_12
inst✝⁷ : AddCommMonoid M₂'✝
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'✝
inst✝⁴ : Module R₂ M₂''
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_13
inst✝³ : AddCommMonoid M₂'
inst✝² : Module R₂ M₂'
n : Type w
inst✝¹ : Nontrivial R
inst✝ : NoZeroDivisors R
B : BilinForm R M
v : Basis n R M
hO : iIsOrtho B ⇑v
ho : ∀ (i : n), ¬IsOrtho B (v i) (v i)
m : M
hB : ∀ (n : M), bilin B m n = 0
⊢ m = 0

Next tactic:
obtain ⟨vi, rfl⟩ := v.repr.symm.surjective m
/-- Given an orthogonal basis with respect to a bilinear form, the bilinear form is nondegenerate
iff the basis has no elements which are self-orthogonal. -/
theorem iIsOrtho.nondegenerate_iff_not_isOrtho_basis_self {n : Type w} [Nontrivial R]
    [NoZeroDivisors R] (B : BilinForm R M) (v : Basis n R M) (hO : B.iIsOrtho v) :
    B.Nondegenerate ↔ ∀ i, ¬B.IsOrtho (v i) (v i) := by
  refine' ⟨hO.not_isOrtho_basis_self_of_nondegenerate, fun ho m hB => _⟩
  obtain ⟨vi, rfl⟩ := v.repr.symm.surjective m
  

Proof state:
case intro
R : Type u_1
M : Type u_2
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
M₂'✝ : Type u_11
M₂'' : Type u_12
inst✝⁷ : AddCommMonoid M₂'✝
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'✝
inst✝⁴ : Module R₂ M₂''
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_13
inst✝³ : AddCommMonoid M₂'
inst✝² : Module R₂ M₂'
n : Type w
inst✝¹ : Nontrivial R
inst✝ : NoZeroDivisors R
B : BilinForm R M
v : Basis n R M
hO : iIsOrtho B ⇑v
ho : ∀ (i : n), ¬IsOrtho B (v i) (v i)
vi : n →₀ R
hB : ∀ (n_1 : M), bilin B ((LinearEquiv.symm v.repr) vi) n_1 = 0
⊢ (LinearEquiv.symm v.repr) vi = 0

Next tactic:
rw [LinearEquiv.map_eq_zero_iff]
/-- Given an orthogonal basis with respect to a bilinear form, the bilinear form is nondegenerate
iff the basis has no elements which are self-orthogonal. -/
theorem iIsOrtho.nondegenerate_iff_not_isOrtho_basis_self {n : Type w} [Nontrivial R]
    [NoZeroDivisors R] (B : BilinForm R M) (v : Basis n R M) (hO : B.iIsOrtho v) :
    B.Nondegenerate ↔ ∀ i, ¬B.IsOrtho (v i) (v i) := by
  refine' ⟨hO.not_isOrtho_basis_self_of_nondegenerate, fun ho m hB => _⟩
  obtain ⟨vi, rfl⟩ := v.repr.symm.surjective m
  rw [LinearEquiv.map_eq_zero_iff]
  

Proof state:
case intro
R : Type u_1
M : Type u_2
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
M₂'✝ : Type u_11
M₂'' : Type u_12
inst✝⁷ : AddCommMonoid M₂'✝
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'✝
inst✝⁴ : Module R₂ M₂''
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_13
inst✝³ : AddCommMonoid M₂'
inst✝² : Module R₂ M₂'
n : Type w
inst✝¹ : Nontrivial R
inst✝ : NoZeroDivisors R
B : BilinForm R M
v : Basis n R M
hO : iIsOrtho B ⇑v
ho : ∀ (i : n), ¬IsOrtho B (v i) (v i)
vi : n →₀ R
hB : ∀ (n_1 : M), bilin B ((LinearEquiv.symm v.repr) vi) n_1 = 0
⊢ vi = 0

Next tactic:
ext i
/-- Given an orthogonal basis with respect to a bilinear form, the bilinear form is nondegenerate
iff the basis has no elements which are self-orthogonal. -/
theorem iIsOrtho.nondegenerate_iff_not_isOrtho_basis_self {n : Type w} [Nontrivial R]
    [NoZeroDivisors R] (B : BilinForm R M) (v : Basis n R M) (hO : B.iIsOrtho v) :
    B.Nondegenerate ↔ ∀ i, ¬B.IsOrtho (v i) (v i) := by
  refine' ⟨hO.not_isOrtho_basis_self_of_nondegenerate, fun ho m hB => _⟩
  obtain ⟨vi, rfl⟩ := v.repr.symm.surjective m
  rw [LinearEquiv.map_eq_zero_iff]
  ext i
  

Proof state:
case intro.h
R : Type u_1
M : Type u_2
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
M₂'✝ : Type u_11
M₂'' : Type u_12
inst✝⁷ : AddCommMonoid M₂'✝
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'✝
inst✝⁴ : Module R₂ M₂''
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_13
inst✝³ : AddCommMonoid M₂'
inst✝² : Module R₂ M₂'
n : Type w
inst✝¹ : Nontrivial R
inst✝ : NoZeroDivisors R
B : BilinForm R M
v : Basis n R M
hO : iIsOrtho B ⇑v
ho : ∀ (i : n), ¬IsOrtho B (v i) (v i)
vi : n →₀ R
hB : ∀ (n_1 : M), bilin B ((LinearEquiv.symm v.repr) vi) n_1 = 0
i : n
⊢ vi i = 0 i

Next tactic:
rw [Finsupp.zero_apply]
/-- Given an orthogonal basis with respect to a bilinear form, the bilinear form is nondegenerate
iff the basis has no elements which are self-orthogonal. -/
theorem iIsOrtho.nondegenerate_iff_not_isOrtho_basis_self {n : Type w} [Nontrivial R]
    [NoZeroDivisors R] (B : BilinForm R M) (v : Basis n R M) (hO : B.iIsOrtho v) :
    B.Nondegenerate ↔ ∀ i, ¬B.IsOrtho (v i) (v i) := by
  refine' ⟨hO.not_isOrtho_basis_self_of_nondegenerate, fun ho m hB => _⟩
  obtain ⟨vi, rfl⟩ := v.repr.symm.surjective m
  rw [LinearEquiv.map_eq_zero_iff]
  ext i
  rw [Finsupp.zero_apply]
  

Proof state:
case intro.h
R : Type u_1
M : Type u_2
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
M₂'✝ : Type u_11
M₂'' : Type u_12
inst✝⁷ : AddCommMonoid M₂'✝
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'✝
inst✝⁴ : Module R₂ M₂''
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_13
inst✝³ : AddCommMonoid M₂'
inst✝² : Module R₂ M₂'
n : Type w
inst✝¹ : Nontrivial R
inst✝ : NoZeroDivisors R
B : BilinForm R M
v : Basis n R M
hO : iIsOrtho B ⇑v
ho : ∀ (i : n), ¬IsOrtho B (v i) (v i)
vi : n →₀ R
hB : ∀ (n_1 : M), bilin B ((LinearEquiv.symm v.repr) vi) n_1 = 0
i : n
⊢ vi i = 0

Next tactic:
specialize hB (v i)
/-- Given an orthogonal basis with respect to a bilinear form, the bilinear form is nondegenerate
iff the basis has no elements which are self-orthogonal. -/
theorem iIsOrtho.nondegenerate_iff_not_isOrtho_basis_self {n : Type w} [Nontrivial R]
    [NoZeroDivisors R] (B : BilinForm R M) (v : Basis n R M) (hO : B.iIsOrtho v) :
    B.Nondegenerate ↔ ∀ i, ¬B.IsOrtho (v i) (v i) := by
  refine' ⟨hO.not_isOrtho_basis_self_of_nondegenerate, fun ho m hB => _⟩
  obtain ⟨vi, rfl⟩ := v.repr.symm.surjective m
  rw [LinearEquiv.map_eq_zero_iff]
  ext i
  rw [Finsupp.zero_apply]
  specialize hB (v i)
  

Proof state:
case intro.h
R : Type u_1
M : Type u_2
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
M₂'✝ : Type u_11
M₂'' : Type u_12
inst✝⁷ : AddCommMonoid M₂'✝
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'✝
inst✝⁴ : Module R₂ M₂''
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_13
inst✝³ : AddCommMonoid M₂'
inst✝² : Module R₂ M₂'
n : Type w
inst✝¹ : Nontrivial R
inst✝ : NoZeroDivisors R
B : BilinForm R M
v : Basis n R M
hO : iIsOrtho B ⇑v
ho : ∀ (i : n), ¬IsOrtho B (v i) (v i)
vi : n →₀ R
i : n
hB : bilin B ((LinearEquiv.symm v.repr) vi) (v i) = 0
⊢ vi i = 0

Next tactic:
simp_rw [Basis.repr_symm_apply, Finsupp.total_apply, Finsupp.sum, sum_left, smul_left] at hB
/-- Given an orthogonal basis with respect to a bilinear form, the bilinear form is nondegenerate
iff the basis has no elements which are self-orthogonal. -/
theorem iIsOrtho.nondegenerate_iff_not_isOrtho_basis_self {n : Type w} [Nontrivial R]
    [NoZeroDivisors R] (B : BilinForm R M) (v : Basis n R M) (hO : B.iIsOrtho v) :
    B.Nondegenerate ↔ ∀ i, ¬B.IsOrtho (v i) (v i) := by
  refine' ⟨hO.not_isOrtho_basis_self_of_nondegenerate, fun ho m hB => _⟩
  obtain ⟨vi, rfl⟩ := v.repr.symm.surjective m
  rw [LinearEquiv.map_eq_zero_iff]
  ext i
  rw [Finsupp.zero_apply]
  specialize hB (v i)
  simp_rw [Basis.repr_symm_apply, Finsupp.total_apply, Finsupp.sum, sum_left, smul_left] at hB
  

Proof state:
case intro.h
R : Type u_1
M : Type u_2
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
M₂'✝ : Type u_11
M₂'' : Type u_12
inst✝⁷ : AddCommMonoid M₂'✝
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'✝
inst✝⁴ : Module R₂ M₂''
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_13
inst✝³ : AddCommMonoid M₂'
inst✝² : Module R₂ M₂'
n : Type w
inst✝¹ : Nontrivial R
inst✝ : NoZeroDivisors R
B : BilinForm R M
v : Basis n R M
hO : iIsOrtho B ⇑v
ho : ∀ (i : n), ¬IsOrtho B (v i) (v i)
vi : n →₀ R
i : n
hB : ∑ x in vi.support, vi x * bilin B (v x) (v i) = 0
⊢ vi i = 0

Next tactic:
rw [Finset.sum_eq_single i] at hB
/-- Given an orthogonal basis with respect to a bilinear form, the bilinear form is nondegenerate
iff the basis has no elements which are self-orthogonal. -/
theorem iIsOrtho.nondegenerate_iff_not_isOrtho_basis_self {n : Type w} [Nontrivial R]
    [NoZeroDivisors R] (B : BilinForm R M) (v : Basis n R M) (hO : B.iIsOrtho v) :
    B.Nondegenerate ↔ ∀ i, ¬B.IsOrtho (v i) (v i) := by
  refine' ⟨hO.not_isOrtho_basis_self_of_nondegenerate, fun ho m hB => _⟩
  obtain ⟨vi, rfl⟩ := v.repr.symm.surjective m
  rw [LinearEquiv.map_eq_zero_iff]
  ext i
  rw [Finsupp.zero_apply]
  specialize hB (v i)
  simp_rw [Basis.repr_symm_apply, Finsupp.total_apply, Finsupp.sum, sum_left, smul_left] at hB
  rw [Finset.sum_eq_single i] at hB
  · 

Proof state:
case intro.h
R : Type u_1
M : Type u_2
inst✝²² : Semiring R
inst✝²¹ : AddCommMonoid M
inst✝²⁰ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝¹⁹ : Ring R₁
inst✝¹⁸ : AddCommGroup M₁
inst✝¹⁷ : Module R₁ M₁
R₂ : Type u_5
M₂ : Type u_6
inst✝¹⁶ : CommSemiring R₂
inst✝¹⁵ : AddCommMonoid M₂
inst✝¹⁴ : Module R₂ M₂
R₃ : Type u_7
M₃ : Type u_8
inst✝¹³ : CommRing R₃
inst✝¹² : AddCommGroup M₃
inst✝¹¹ : Module R₃ M₃
V : Type u_9
K : Type u_10
inst✝¹⁰ : Field K
inst✝⁹ : AddCommGroup V
inst✝⁸ : Module K V
M₂'✝ : Type u_11
M₂'' : Type u_12
inst✝⁷ : AddCommMonoid M₂'✝
inst✝⁶ : AddCommMonoid M₂''
inst✝⁵ : Module R₂ M₂'✝
inst✝⁴ : Module R₂ M₂''
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M₂' : Type u_13
inst✝³ : AddCommMonoid M₂'
inst✝² : Module R₂ M₂'
n : Type w
inst✝¹ : Nontrivial R
inst✝ : NoZeroDivisors R
B : BilinForm R M
v : Basis n R M
hO : iIsOrtho B ⇑v
ho : ∀ (i : n), ¬IsOrtho B (v i) (v i)
vi : n →₀ R
i : n
hB : vi i * bilin B (v i) (v i) = 0
⊢ vi i = 0

Next tactic:
exact eq_zero_of_ne_zero_of_mul_right_eq_zero (ho i) hB