Theorem: BilinForm.exists_orthogonal_basis
File: Mathlib/LinearAlgebra/QuadraticForm/Basic.lean

tactic: induction' hd : finrank K V with d ih generalizing V
state_before: S : Type ?u.672109
R : Type ?u.672112
R₁ : Type ?u.672115
M : Type ?u.672118
inst✝⁶ : Ring R
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
V : Type u
K : Type v
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
hK : Invertible 2
B : BilinForm K V
hB₂ : IsSymm B
⊢ ∃ v, iIsOrtho B ↑v

tactic: haveI := finrank_pos_iff.1 (hd.symm ▸ Nat.succ_pos d : 0 < finrank K V)
state_before: case succ
S : Type ?u.672109
R : Type ?u.672112
R₁ : Type ?u.672115
M : Type ?u.672118
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
V✝ : Type u
K : Type v
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V✝
inst✝⁴ : Module K V✝
inst✝³ : FiniteDimensional K V✝
hK : Invertible 2
B✝ : BilinForm K V✝
hB₂✝ : IsSymm B✝
x✝ : ℕ
hd✝ : finrank K V✝ = x✝
d : ℕ
ih :
  ∀ {V : Type u} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] {B : BilinForm K V},
    IsSymm B → finrank K V = d → ∃ v, iIsOrtho B ↑v
V : Type u
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
B : BilinForm K V
hB₂ : IsSymm B
hd : finrank K V = Nat.succ d
⊢ ∃ v, iIsOrtho B ↑v

tactic: obtain rfl | hB₁ := eq_or_ne B 0
state_before: case succ
S : Type ?u.672109
R : Type ?u.672112
R₁ : Type ?u.672115
M : Type ?u.672118
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
V✝ : Type u
K : Type v
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V✝
inst✝⁴ : Module K V✝
inst✝³ : FiniteDimensional K V✝
hK : Invertible 2
B✝ : BilinForm K V✝
hB₂✝ : IsSymm B✝
x✝ : ℕ
hd✝ : finrank K V✝ = x✝
d : ℕ
ih :
  ∀ {V : Type u} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] {B : BilinForm K V},
    IsSymm B → finrank K V = d → ∃ v, iIsOrtho B ↑v
V : Type u
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
B : BilinForm K V
hB₂ : IsSymm B
hd : finrank K V = Nat.succ d
this : Nontrivial V
⊢ ∃ v, iIsOrtho B ↑v

tactic: obtain ⟨x, hx⟩ := exists_bilinForm_self_ne_zero hB₁ hB₂
state_before: case succ.inr
S : Type ?u.672109
R : Type ?u.672112
R₁ : Type ?u.672115
M : Type ?u.672118
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
V✝ : Type u
K : Type v
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V✝
inst✝⁴ : Module K V✝
inst✝³ : FiniteDimensional K V✝
hK : Invertible 2
B✝ : BilinForm K V✝
hB₂✝ : IsSymm B✝
x✝ : ℕ
hd✝ : finrank K V✝ = x✝
d : ℕ
ih :
  ∀ {V : Type u} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] {B : BilinForm K V},
    IsSymm B → finrank K V = d → ∃ v, iIsOrtho B ↑v
V : Type u
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
B : BilinForm K V
hB₂ : IsSymm B
hd : finrank K V = Nat.succ d
this : Nontrivial V
hB₁ : B ≠ 0
⊢ ∃ v, iIsOrtho B ↑v

tactic: rw [← Submodule.finrank_add_eq_of_isCompl (isCompl_span_singleton_orthogonal hx).symm,
  finrank_span_singleton (ne_zero_of_not_isOrtho_self x hx)] at hd
state_before: case succ.inr.intro
S : Type ?u.672109
R : Type ?u.672112
R₁ : Type ?u.672115
M : Type ?u.672118
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
V✝ : Type u
K : Type v
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V✝
inst✝⁴ : Module K V✝
inst✝³ : FiniteDimensional K V✝
hK : Invertible 2
B✝ : BilinForm K V✝
hB₂✝ : IsSymm B✝
x✝ : ℕ
hd✝ : finrank K V✝ = x✝
d : ℕ
ih :
  ∀ {V : Type u} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] {B : BilinForm K V},
    IsSymm B → finrank K V = d → ∃ v, iIsOrtho B ↑v
V : Type u
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
B : BilinForm K V
hB₂ : IsSymm B
hd : finrank K V = Nat.succ d
this : Nontrivial V
hB₁ : B ≠ 0
x : V
hx : ¬IsOrtho B x x
⊢ ∃ v, iIsOrtho B ↑v

tactic: let B' := B.restrict (B.orthogonal <| K ∙ x)
state_before: case succ.inr.intro
S : Type ?u.672109
R : Type ?u.672112
R₁ : Type ?u.672115
M : Type ?u.672118
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
V✝ : Type u
K : Type v
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V✝
inst✝⁴ : Module K V✝
inst✝³ : FiniteDimensional K V✝
hK : Invertible 2
B✝ : BilinForm K V✝
hB₂✝ : IsSymm B✝
x✝ : ℕ
hd✝ : finrank K V✝ = x✝
d : ℕ
ih :
  ∀ {V : Type u} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] {B : BilinForm K V},
    IsSymm B → finrank K V = d → ∃ v, iIsOrtho B ↑v
V : Type u
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
B : BilinForm K V
hB₂ : IsSymm B
this : Nontrivial V
hB₁ : B ≠ 0
x : V
hd : finrank K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } + 1 = Nat.succ d
hx : ¬IsOrtho B x x
⊢ ∃ v, iIsOrtho B ↑v

tactic: obtain ⟨v', hv₁⟩ := ih (B.restrictSymm hB₂ _ : B'.IsSymm) (Nat.succ.inj hd)
state_before: case succ.inr.intro
S : Type ?u.672109
R : Type ?u.672112
R₁ : Type ?u.672115
M : Type ?u.672118
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
V✝ : Type u
K : Type v
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V✝
inst✝⁴ : Module K V✝
inst✝³ : FiniteDimensional K V✝
hK : Invertible 2
B✝ : BilinForm K V✝
hB₂✝ : IsSymm B✝
x✝ : ℕ
hd✝ : finrank K V✝ = x✝
d : ℕ
ih :
  ∀ {V : Type u} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] {B : BilinForm K V},
    IsSymm B → finrank K V = d → ∃ v, iIsOrtho B ↑v
V : Type u
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
B : BilinForm K V
hB₂ : IsSymm B
this : Nontrivial V
hB₁ : B ≠ 0
x : V
hd : finrank K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } + 1 = Nat.succ d
hx : ¬IsOrtho B x x
B' : BilinForm K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } :=
  restrict B (orthogonal B (Submodule.span K {x}))
⊢ ∃ v, iIsOrtho B ↑v

tactic: let b :=
  Basis.mkFinCons x v'
    (by
      rintro c y hy hc
      rw [add_eq_zero_iff_neg_eq] at hc
      rw [← hc, Submodule.neg_mem_iff] at hy
      have := (isCompl_span_singleton_orthogonal hx).disjoint
      rw [Submodule.disjoint_def] at this
      have := this (c • x) (Submodule.smul_mem _ _ <| Submodule.mem_span_singleton_self _) hy
      exact (smul_eq_zero.1 this).resolve_right fun h => hx <| h.symm ▸ zero_left _)
    (by
      intro y
      refine' ⟨-B x y / B x x, fun z hz => _⟩
      obtain ⟨c, rfl⟩ := Submodule.mem_span_singleton.1 hz
      rw [IsOrtho, smul_left, add_right, smul_right, div_mul_cancel _ hx, add_neg_self,
        mul_zero])
state_before: case succ.inr.intro.intro
S : Type ?u.672109
R : Type ?u.672112
R₁ : Type ?u.672115
M : Type ?u.672118
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
V✝ : Type u
K : Type v
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V✝
inst✝⁴ : Module K V✝
inst✝³ : FiniteDimensional K V✝
hK : Invertible 2
B✝ : BilinForm K V✝
hB₂✝ : IsSymm B✝
x✝ : ℕ
hd✝ : finrank K V✝ = x✝
d : ℕ
ih :
  ∀ {V : Type u} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] {B : BilinForm K V},
    IsSymm B → finrank K V = d → ∃ v, iIsOrtho B ↑v
V : Type u
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
B : BilinForm K V
hB₂ : IsSymm B
this : Nontrivial V
hB₁ : B ≠ 0
x : V
hd : finrank K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } + 1 = Nat.succ d
hx : ¬IsOrtho B x x
B' : BilinForm K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } :=
  restrict B (orthogonal B (Submodule.span K {x}))
v' : Basis (Fin d) K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) }
hv₁ : iIsOrtho (restrict B (orthogonal B (Submodule.span K {x}))) ↑v'
⊢ ∃ v, iIsOrtho B ↑v

tactic: refine' ⟨b, _⟩
state_before: case succ.inr.intro.intro
S : Type ?u.672109
R : Type ?u.672112
R₁ : Type ?u.672115
M : Type ?u.672118
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
V✝ : Type u
K : Type v
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V✝
inst✝⁴ : Module K V✝
inst✝³ : FiniteDimensional K V✝
hK : Invertible 2
B✝ : BilinForm K V✝
hB₂✝ : IsSymm B✝
x✝ : ℕ
hd✝ : finrank K V✝ = x✝
d : ℕ
ih :
  ∀ {V : Type u} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] {B : BilinForm K V},
    IsSymm B → finrank K V = d → ∃ v, iIsOrtho B ↑v
V : Type u
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
B : BilinForm K V
hB₂ : IsSymm B
this : Nontrivial V
hB₁ : B ≠ 0
x : V
hd : finrank K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } + 1 = Nat.succ d
hx : ¬IsOrtho B x x
B' : BilinForm K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } :=
  restrict B (orthogonal B (Submodule.span K {x}))
v' : Basis (Fin d) K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) }
hv₁ : iIsOrtho (restrict B (orthogonal B (Submodule.span K {x}))) ↑v'
b : Basis (Fin (d + 1)) K V :=
  Basis.mkFinCons x v' (_ : ∀ (c : K) (y : V), y ∈ orthogonal B (Submodule.span K {x}) → c • x + y = 0 → c = 0)
    (_ : ∀ (y : V), ∃ c, y + c • x ∈ orthogonal B (Submodule.span K {x}))
⊢ ∃ v, iIsOrtho B ↑v

tactic: simp_rw [Nat.zero_eq]
state_before: case zero
S : Type ?u.672109
R : Type ?u.672112
R₁ : Type ?u.672115
M : Type ?u.672118
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
V✝ : Type u
K : Type v
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V✝
inst✝⁴ : Module K V✝
inst✝³ : FiniteDimensional K V✝
hK : Invertible 2
B✝ : BilinForm K V✝
hB₂✝ : IsSymm B✝
x✝ : ℕ
hd✝ : finrank K V✝ = x✝
V : Type u
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
B : BilinForm K V
hB₂ : IsSymm B
hd : finrank K V = Nat.zero
⊢ ∃ v, iIsOrtho B ↑v

tactic: exact ⟨basisOfFinrankZero hd, fun _ _ _ => zero_left _⟩
state_before: case zero
S : Type ?u.672109
R : Type ?u.672112
R₁ : Type ?u.672115
M : Type ?u.672118
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
V✝ : Type u
K : Type v
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V✝
inst✝⁴ : Module K V✝
inst✝³ : FiniteDimensional K V✝
hK : Invertible 2
B✝ : BilinForm K V✝
hB₂✝ : IsSymm B✝
x✝ : ℕ
hd✝ : finrank K V✝ = x✝
V : Type u
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
B : BilinForm K V
hB₂ : IsSymm B
hd : finrank K V = Nat.zero
⊢ ∃ v, iIsOrtho B ↑v

tactic: let b := FiniteDimensional.finBasis K V
state_before: case succ.inl
S : Type ?u.672109
R : Type ?u.672112
R₁ : Type ?u.672115
M : Type ?u.672118
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
V✝ : Type u
K : Type v
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V✝
inst✝⁴ : Module K V✝
inst✝³ : FiniteDimensional K V✝
hK : Invertible 2
B : BilinForm K V✝
hB₂✝ : IsSymm B
x✝ : ℕ
hd✝ : finrank K V✝ = x✝
d : ℕ
ih :
  ∀ {V : Type u} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] {B : BilinForm K V},
    IsSymm B → finrank K V = d → ∃ v, iIsOrtho B ↑v
V : Type u
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
hd : finrank K V = Nat.succ d
this : Nontrivial V
hB₂ : IsSymm 0
⊢ ∃ v, iIsOrtho 0 ↑v

tactic: rw [hd] at b
state_before: case succ.inl
S : Type ?u.672109
R : Type ?u.672112
R₁ : Type ?u.672115
M : Type ?u.672118
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
V✝ : Type u
K : Type v
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V✝
inst✝⁴ : Module K V✝
inst✝³ : FiniteDimensional K V✝
hK : Invertible 2
B : BilinForm K V✝
hB₂✝ : IsSymm B
x✝ : ℕ
hd✝ : finrank K V✝ = x✝
d : ℕ
ih :
  ∀ {V : Type u} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] {B : BilinForm K V},
    IsSymm B → finrank K V = d → ∃ v, iIsOrtho B ↑v
V : Type u
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
hd : finrank K V = Nat.succ d
this : Nontrivial V
hB₂ : IsSymm 0
b : Basis (Fin (finrank K V)) K V := finBasis K V
⊢ ∃ v, iIsOrtho 0 ↑v

tactic: refine' ⟨b, fun i j _ => rfl⟩
state_before: case succ.inl
S : Type ?u.672109
R : Type ?u.672112
R₁ : Type ?u.672115
M : Type ?u.672118
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
V✝ : Type u
K : Type v
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V✝
inst✝⁴ : Module K V✝
inst✝³ : FiniteDimensional K V✝
hK : Invertible 2
B : BilinForm K V✝
hB₂✝ : IsSymm B
x✝ : ℕ
hd✝ : finrank K V✝ = x✝
d : ℕ
ih :
  ∀ {V : Type u} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] {B : BilinForm K V},
    IsSymm B → finrank K V = d → ∃ v, iIsOrtho B ↑v
V : Type u
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
hd : finrank K V = Nat.succ d
this : Nontrivial V
hB₂ : IsSymm 0
b : Basis (Fin (Nat.succ d)) K V
⊢ ∃ v, iIsOrtho 0 ↑v

tactic: rintro c y hy hc
state_before: S : Type ?u.672109
R : Type ?u.672112
R₁ : Type ?u.672115
M : Type ?u.672118
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
V✝ : Type u
K : Type v
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V✝
inst✝⁴ : Module K V✝
inst✝³ : FiniteDimensional K V✝
hK : Invertible 2
B✝ : BilinForm K V✝
hB₂✝ : IsSymm B✝
x✝ : ℕ
hd✝ : finrank K V✝ = x✝
d : ℕ
ih :
  ∀ {V : Type u} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] {B : BilinForm K V},
    IsSymm B → finrank K V = d → ∃ v, iIsOrtho B ↑v
V : Type u
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
B : BilinForm K V
hB₂ : IsSymm B
this : Nontrivial V
hB₁ : B ≠ 0
x : V
hd : finrank K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } + 1 = Nat.succ d
hx : ¬IsOrtho B x x
B' : BilinForm K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } :=
  restrict B (orthogonal B (Submodule.span K {x}))
v' : Basis (Fin d) K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) }
hv₁ : iIsOrtho (restrict B (orthogonal B (Submodule.span K {x}))) ↑v'
⊢ ∀ (c : K) (x_1 : V), x_1 ∈ orthogonal B (Submodule.span K {x}) → c • x + x_1 = 0 → c = 0

tactic: rw [add_eq_zero_iff_neg_eq] at hc
state_before: S : Type ?u.672109
R : Type ?u.672112
R₁ : Type ?u.672115
M : Type ?u.672118
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
V✝ : Type u
K : Type v
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V✝
inst✝⁴ : Module K V✝
inst✝³ : FiniteDimensional K V✝
hK : Invertible 2
B✝ : BilinForm K V✝
hB₂✝ : IsSymm B✝
x✝ : ℕ
hd✝ : finrank K V✝ = x✝
d : ℕ
ih :
  ∀ {V : Type u} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] {B : BilinForm K V},
    IsSymm B → finrank K V = d → ∃ v, iIsOrtho B ↑v
V : Type u
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
B : BilinForm K V
hB₂ : IsSymm B
this : Nontrivial V
hB₁ : B ≠ 0
x : V
hd : finrank K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } + 1 = Nat.succ d
hx : ¬IsOrtho B x x
B' : BilinForm K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } :=
  restrict B (orthogonal B (Submodule.span K {x}))
v' : Basis (Fin d) K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) }
hv₁ : iIsOrtho (restrict B (orthogonal B (Submodule.span K {x}))) ↑v'
c : K
y : V
hy : y ∈ orthogonal B (Submodule.span K {x})
hc : c • x + y = 0
⊢ c = 0

tactic: rw [← hc, Submodule.neg_mem_iff] at hy
state_before: S : Type ?u.672109
R : Type ?u.672112
R₁ : Type ?u.672115
M : Type ?u.672118
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
V✝ : Type u
K : Type v
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V✝
inst✝⁴ : Module K V✝
inst✝³ : FiniteDimensional K V✝
hK : Invertible 2
B✝ : BilinForm K V✝
hB₂✝ : IsSymm B✝
x✝ : ℕ
hd✝ : finrank K V✝ = x✝
d : ℕ
ih :
  ∀ {V : Type u} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] {B : BilinForm K V},
    IsSymm B → finrank K V = d → ∃ v, iIsOrtho B ↑v
V : Type u
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
B : BilinForm K V
hB₂ : IsSymm B
this : Nontrivial V
hB₁ : B ≠ 0
x : V
hd : finrank K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } + 1 = Nat.succ d
hx : ¬IsOrtho B x x
B' : BilinForm K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } :=
  restrict B (orthogonal B (Submodule.span K {x}))
v' : Basis (Fin d) K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) }
hv₁ : iIsOrtho (restrict B (orthogonal B (Submodule.span K {x}))) ↑v'
c : K
y : V
hy : y ∈ orthogonal B (Submodule.span K {x})
hc : -(c • x) = y
⊢ c = 0

tactic: have := (isCompl_span_singleton_orthogonal hx).disjoint
state_before: S : Type ?u.672109
R : Type ?u.672112
R₁ : Type ?u.672115
M : Type ?u.672118
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
V✝ : Type u
K : Type v
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V✝
inst✝⁴ : Module K V✝
inst✝³ : FiniteDimensional K V✝
hK : Invertible 2
B✝ : BilinForm K V✝
hB₂✝ : IsSymm B✝
x✝ : ℕ
hd✝ : finrank K V✝ = x✝
d : ℕ
ih :
  ∀ {V : Type u} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] {B : BilinForm K V},
    IsSymm B → finrank K V = d → ∃ v, iIsOrtho B ↑v
V : Type u
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
B : BilinForm K V
hB₂ : IsSymm B
this : Nontrivial V
hB₁ : B ≠ 0
x : V
hd : finrank K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } + 1 = Nat.succ d
hx : ¬IsOrtho B x x
B' : BilinForm K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } :=
  restrict B (orthogonal B (Submodule.span K {x}))
v' : Basis (Fin d) K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) }
hv₁ : iIsOrtho (restrict B (orthogonal B (Submodule.span K {x}))) ↑v'
c : K
y : V
hy : c • x ∈ orthogonal B (Submodule.span K {x})
hc : -(c • x) = y
⊢ c = 0

tactic: rw [Submodule.disjoint_def] at this
state_before: S : Type ?u.672109
R : Type ?u.672112
R₁ : Type ?u.672115
M : Type ?u.672118
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
V✝ : Type u
K : Type v
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V✝
inst✝⁴ : Module K V✝
inst✝³ : FiniteDimensional K V✝
hK : Invertible 2
B✝ : BilinForm K V✝
hB₂✝ : IsSymm B✝
x✝ : ℕ
hd✝ : finrank K V✝ = x✝
d : ℕ
ih :
  ∀ {V : Type u} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] {B : BilinForm K V},
    IsSymm B → finrank K V = d → ∃ v, iIsOrtho B ↑v
V : Type u
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
B : BilinForm K V
hB₂ : IsSymm B
this✝ : Nontrivial V
hB₁ : B ≠ 0
x : V
hd : finrank K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } + 1 = Nat.succ d
hx : ¬IsOrtho B x x
B' : BilinForm K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } :=
  restrict B (orthogonal B (Submodule.span K {x}))
v' : Basis (Fin d) K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) }
hv₁ : iIsOrtho (restrict B (orthogonal B (Submodule.span K {x}))) ↑v'
c : K
y : V
hy : c • x ∈ orthogonal B (Submodule.span K {x})
hc : -(c • x) = y
this : Disjoint (Submodule.span K {x}) (orthogonal B (Submodule.span K {x}))
⊢ c = 0

tactic: have := this (c • x) (Submodule.smul_mem _ _ <| Submodule.mem_span_singleton_self _) hy
state_before: S : Type ?u.672109
R : Type ?u.672112
R₁ : Type ?u.672115
M : Type ?u.672118
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
V✝ : Type u
K : Type v
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V✝
inst✝⁴ : Module K V✝
inst✝³ : FiniteDimensional K V✝
hK : Invertible 2
B✝ : BilinForm K V✝
hB₂✝ : IsSymm B✝
x✝ : ℕ
hd✝ : finrank K V✝ = x✝
d : ℕ
ih :
  ∀ {V : Type u} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] {B : BilinForm K V},
    IsSymm B → finrank K V = d → ∃ v, iIsOrtho B ↑v
V : Type u
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
B : BilinForm K V
hB₂ : IsSymm B
this✝ : Nontrivial V
hB₁ : B ≠ 0
x : V
hd : finrank K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } + 1 = Nat.succ d
hx : ¬IsOrtho B x x
B' : BilinForm K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } :=
  restrict B (orthogonal B (Submodule.span K {x}))
v' : Basis (Fin d) K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) }
hv₁ : iIsOrtho (restrict B (orthogonal B (Submodule.span K {x}))) ↑v'
c : K
y : V
hy : c • x ∈ orthogonal B (Submodule.span K {x})
hc : -(c • x) = y
this : ∀ (x_1 : V), x_1 ∈ Submodule.span K {x} → x_1 ∈ orthogonal B (Submodule.span K {x}) → x_1 = 0
⊢ c = 0

tactic: exact (smul_eq_zero.1 this).resolve_right fun h => hx <| h.symm ▸ zero_left _
state_before: S : Type ?u.672109
R : Type ?u.672112
R₁ : Type ?u.672115
M : Type ?u.672118
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
V✝ : Type u
K : Type v
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V✝
inst✝⁴ : Module K V✝
inst✝³ : FiniteDimensional K V✝
hK : Invertible 2
B✝ : BilinForm K V✝
hB₂✝ : IsSymm B✝
x✝ : ℕ
hd✝ : finrank K V✝ = x✝
d : ℕ
ih :
  ∀ {V : Type u} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] {B : BilinForm K V},
    IsSymm B → finrank K V = d → ∃ v, iIsOrtho B ↑v
V : Type u
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
B : BilinForm K V
hB₂ : IsSymm B
this✝¹ : Nontrivial V
hB₁ : B ≠ 0
x : V
hd : finrank K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } + 1 = Nat.succ d
hx : ¬IsOrtho B x x
B' : BilinForm K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } :=
  restrict B (orthogonal B (Submodule.span K {x}))
v' : Basis (Fin d) K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) }
hv₁ : iIsOrtho (restrict B (orthogonal B (Submodule.span K {x}))) ↑v'
c : K
y : V
hy : c • x ∈ orthogonal B (Submodule.span K {x})
hc : -(c • x) = y
this✝ : ∀ (x_1 : V), x_1 ∈ Submodule.span K {x} → x_1 ∈ orthogonal B (Submodule.span K {x}) → x_1 = 0
this : c • x = 0
⊢ c = 0

tactic: intro y
state_before: S : Type ?u.672109
R : Type ?u.672112
R₁ : Type ?u.672115
M : Type ?u.672118
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
V✝ : Type u
K : Type v
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V✝
inst✝⁴ : Module K V✝
inst✝³ : FiniteDimensional K V✝
hK : Invertible 2
B✝ : BilinForm K V✝
hB₂✝ : IsSymm B✝
x✝ : ℕ
hd✝ : finrank K V✝ = x✝
d : ℕ
ih :
  ∀ {V : Type u} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] {B : BilinForm K V},
    IsSymm B → finrank K V = d → ∃ v, iIsOrtho B ↑v
V : Type u
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
B : BilinForm K V
hB₂ : IsSymm B
this : Nontrivial V
hB₁ : B ≠ 0
x : V
hd : finrank K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } + 1 = Nat.succ d
hx : ¬IsOrtho B x x
B' : BilinForm K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } :=
  restrict B (orthogonal B (Submodule.span K {x}))
v' : Basis (Fin d) K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) }
hv₁ : iIsOrtho (restrict B (orthogonal B (Submodule.span K {x}))) ↑v'
⊢ ∀ (z : V), ∃ c, z + c • x ∈ orthogonal B (Submodule.span K {x})

tactic: refine' ⟨-B x y / B x x, fun z hz => _⟩
state_before: S : Type ?u.672109
R : Type ?u.672112
R₁ : Type ?u.672115
M : Type ?u.672118
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
V✝ : Type u
K : Type v
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V✝
inst✝⁴ : Module K V✝
inst✝³ : FiniteDimensional K V✝
hK : Invertible 2
B✝ : BilinForm K V✝
hB₂✝ : IsSymm B✝
x✝ : ℕ
hd✝ : finrank K V✝ = x✝
d : ℕ
ih :
  ∀ {V : Type u} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] {B : BilinForm K V},
    IsSymm B → finrank K V = d → ∃ v, iIsOrtho B ↑v
V : Type u
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
B : BilinForm K V
hB₂ : IsSymm B
this : Nontrivial V
hB₁ : B ≠ 0
x : V
hd : finrank K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } + 1 = Nat.succ d
hx : ¬IsOrtho B x x
B' : BilinForm K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } :=
  restrict B (orthogonal B (Submodule.span K {x}))
v' : Basis (Fin d) K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) }
hv₁ : iIsOrtho (restrict B (orthogonal B (Submodule.span K {x}))) ↑v'
y : V
⊢ ∃ c, y + c • x ∈ orthogonal B (Submodule.span K {x})

tactic: obtain ⟨c, rfl⟩ := Submodule.mem_span_singleton.1 hz
state_before: S : Type ?u.672109
R : Type ?u.672112
R₁ : Type ?u.672115
M : Type ?u.672118
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
V✝ : Type u
K : Type v
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V✝
inst✝⁴ : Module K V✝
inst✝³ : FiniteDimensional K V✝
hK : Invertible 2
B✝ : BilinForm K V✝
hB₂✝ : IsSymm B✝
x✝ : ℕ
hd✝ : finrank K V✝ = x✝
d : ℕ
ih :
  ∀ {V : Type u} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] {B : BilinForm K V},
    IsSymm B → finrank K V = d → ∃ v, iIsOrtho B ↑v
V : Type u
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
B : BilinForm K V
hB₂ : IsSymm B
this : Nontrivial V
hB₁ : B ≠ 0
x : V
hd : finrank K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } + 1 = Nat.succ d
hx : ¬IsOrtho B x x
B' : BilinForm K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } :=
  restrict B (orthogonal B (Submodule.span K {x}))
v' : Basis (Fin d) K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) }
hv₁ : iIsOrtho (restrict B (orthogonal B (Submodule.span K {x}))) ↑v'
y z : V
hz : z ∈ Submodule.span K {x}
⊢ IsOrtho B z (y + (-bilin B x y / bilin B x x) • x)

tactic: rw [IsOrtho, smul_left, add_right, smul_right, div_mul_cancel _ hx, add_neg_self,
  mul_zero]
state_before: case intro
S : Type ?u.672109
R : Type ?u.672112
R₁ : Type ?u.672115
M : Type ?u.672118
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
V✝ : Type u
K : Type v
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V✝
inst✝⁴ : Module K V✝
inst✝³ : FiniteDimensional K V✝
hK : Invertible 2
B✝ : BilinForm K V✝
hB₂✝ : IsSymm B✝
x✝ : ℕ
hd✝ : finrank K V✝ = x✝
d : ℕ
ih :
  ∀ {V : Type u} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] {B : BilinForm K V},
    IsSymm B → finrank K V = d → ∃ v, iIsOrtho B ↑v
V : Type u
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
B : BilinForm K V
hB₂ : IsSymm B
this : Nontrivial V
hB₁ : B ≠ 0
x : V
hd : finrank K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } + 1 = Nat.succ d
hx : ¬IsOrtho B x x
B' : BilinForm K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } :=
  restrict B (orthogonal B (Submodule.span K {x}))
v' : Basis (Fin d) K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) }
hv₁ : iIsOrtho (restrict B (orthogonal B (Submodule.span K {x}))) ↑v'
y : V
c : K
hz : c • x ∈ Submodule.span K {x}
⊢ IsOrtho B (c • x) (y + (-bilin B x y / bilin B x x) • x)

tactic: rw [Basis.coe_mkFinCons]
state_before: case succ.inr.intro.intro
S : Type ?u.672109
R : Type ?u.672112
R₁ : Type ?u.672115
M : Type ?u.672118
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
V✝ : Type u
K : Type v
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V✝
inst✝⁴ : Module K V✝
inst✝³ : FiniteDimensional K V✝
hK : Invertible 2
B✝ : BilinForm K V✝
hB₂✝ : IsSymm B✝
x✝ : ℕ
hd✝ : finrank K V✝ = x✝
d : ℕ
ih :
  ∀ {V : Type u} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] {B : BilinForm K V},
    IsSymm B → finrank K V = d → ∃ v, iIsOrtho B ↑v
V : Type u
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
B : BilinForm K V
hB₂ : IsSymm B
this : Nontrivial V
hB₁ : B ≠ 0
x : V
hd : finrank K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } + 1 = Nat.succ d
hx : ¬IsOrtho B x x
B' : BilinForm K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } :=
  restrict B (orthogonal B (Submodule.span K {x}))
v' : Basis (Fin d) K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) }
hv₁ : iIsOrtho (restrict B (orthogonal B (Submodule.span K {x}))) ↑v'
b : Basis (Fin (d + 1)) K V :=
  Basis.mkFinCons x v' (_ : ∀ (c : K) (y : V), y ∈ orthogonal B (Submodule.span K {x}) → c • x + y = 0 → c = 0)
    (_ : ∀ (y : V), ∃ c, y + c • x ∈ orthogonal B (Submodule.span K {x}))
⊢ iIsOrtho B ↑b

tactic: intro j i
state_before: case succ.inr.intro.intro
S : Type ?u.672109
R : Type ?u.672112
R₁ : Type ?u.672115
M : Type ?u.672118
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
V✝ : Type u
K : Type v
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V✝
inst✝⁴ : Module K V✝
inst✝³ : FiniteDimensional K V✝
hK : Invertible 2
B✝ : BilinForm K V✝
hB₂✝ : IsSymm B✝
x✝ : ℕ
hd✝ : finrank K V✝ = x✝
d : ℕ
ih :
  ∀ {V : Type u} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] {B : BilinForm K V},
    IsSymm B → finrank K V = d → ∃ v, iIsOrtho B ↑v
V : Type u
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
B : BilinForm K V
hB₂ : IsSymm B
this : Nontrivial V
hB₁ : B ≠ 0
x : V
hd : finrank K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } + 1 = Nat.succ d
hx : ¬IsOrtho B x x
B' : BilinForm K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } :=
  restrict B (orthogonal B (Submodule.span K {x}))
v' : Basis (Fin d) K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) }
hv₁ : iIsOrtho (restrict B (orthogonal B (Submodule.span K {x}))) ↑v'
b : Basis (Fin (d + 1)) K V :=
  Basis.mkFinCons x v' (_ : ∀ (c : K) (y : V), y ∈ orthogonal B (Submodule.span K {x}) → c • x + y = 0 → c = 0)
    (_ : ∀ (y : V), ∃ c, y + c • x ∈ orthogonal B (Submodule.span K {x}))
⊢ iIsOrtho B (Fin.cons x (Subtype.val ∘ ↑v'))

tactic: refine' Fin.cases _ (fun i => _) i <;> refine' Fin.cases _ (fun j => _) j <;> intro hij <;>
  simp only [Function.onFun, Fin.cons_zero, Fin.cons_succ, Function.comp_apply]
state_before: case succ.inr.intro.intro
S : Type ?u.672109
R : Type ?u.672112
R₁ : Type ?u.672115
M : Type ?u.672118
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
V✝ : Type u
K : Type v
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V✝
inst✝⁴ : Module K V✝
inst✝³ : FiniteDimensional K V✝
hK : Invertible 2
B✝ : BilinForm K V✝
hB₂✝ : IsSymm B✝
x✝ : ℕ
hd✝ : finrank K V✝ = x✝
d : ℕ
ih :
  ∀ {V : Type u} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] {B : BilinForm K V},
    IsSymm B → finrank K V = d → ∃ v, iIsOrtho B ↑v
V : Type u
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
B : BilinForm K V
hB₂ : IsSymm B
this : Nontrivial V
hB₁ : B ≠ 0
x : V
hd : finrank K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } + 1 = Nat.succ d
hx : ¬IsOrtho B x x
B' : BilinForm K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } :=
  restrict B (orthogonal B (Submodule.span K {x}))
v' : Basis (Fin d) K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) }
hv₁ : iIsOrtho (restrict B (orthogonal B (Submodule.span K {x}))) ↑v'
b : Basis (Fin (d + 1)) K V :=
  Basis.mkFinCons x v' (_ : ∀ (c : K) (y : V), y ∈ orthogonal B (Submodule.span K {x}) → c • x + y = 0 → c = 0)
    (_ : ∀ (y : V), ∃ c, y + c • x ∈ orthogonal B (Submodule.span K {x}))
j i : Fin (Nat.succ d)
⊢ j ≠ i → (IsOrtho B on Fin.cons x (Subtype.val ∘ ↑v')) j i

tactic: exact (hij rfl).elim
state_before: case succ.inr.intro.intro.refine'_1.refine'_1
S : Type ?u.672109
R : Type ?u.672112
R₁ : Type ?u.672115
M : Type ?u.672118
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
V✝ : Type u
K : Type v
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V✝
inst✝⁴ : Module K V✝
inst✝³ : FiniteDimensional K V✝
hK : Invertible 2
B✝ : BilinForm K V✝
hB₂✝ : IsSymm B✝
x✝ : ℕ
hd✝ : finrank K V✝ = x✝
d : ℕ
ih :
  ∀ {V : Type u} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] {B : BilinForm K V},
    IsSymm B → finrank K V = d → ∃ v, iIsOrtho B ↑v
V : Type u
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
B : BilinForm K V
hB₂ : IsSymm B
this : Nontrivial V
hB₁ : B ≠ 0
x : V
hd : finrank K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } + 1 = Nat.succ d
hx : ¬IsOrtho B x x
B' : BilinForm K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } :=
  restrict B (orthogonal B (Submodule.span K {x}))
v' : Basis (Fin d) K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) }
hv₁ : iIsOrtho (restrict B (orthogonal B (Submodule.span K {x}))) ↑v'
b : Basis (Fin (d + 1)) K V :=
  Basis.mkFinCons x v' (_ : ∀ (c : K) (y : V), y ∈ orthogonal B (Submodule.span K {x}) → c • x + y = 0 → c = 0)
    (_ : ∀ (y : V), ∃ c, y + c • x ∈ orthogonal B (Submodule.span K {x}))
j i : Fin (Nat.succ d)
hij : 0 ≠ 0
⊢ IsOrtho B x x

tactic: rw [IsOrtho, hB₂]
state_before: case succ.inr.intro.intro.refine'_1.refine'_2
S : Type ?u.672109
R : Type ?u.672112
R₁ : Type ?u.672115
M : Type ?u.672118
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
V✝ : Type u
K : Type v
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V✝
inst✝⁴ : Module K V✝
inst✝³ : FiniteDimensional K V✝
hK : Invertible 2
B✝ : BilinForm K V✝
hB₂✝ : IsSymm B✝
x✝ : ℕ
hd✝ : finrank K V✝ = x✝
d : ℕ
ih :
  ∀ {V : Type u} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] {B : BilinForm K V},
    IsSymm B → finrank K V = d → ∃ v, iIsOrtho B ↑v
V : Type u
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
B : BilinForm K V
hB₂ : IsSymm B
this : Nontrivial V
hB₁ : B ≠ 0
x : V
hd : finrank K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } + 1 = Nat.succ d
hx : ¬IsOrtho B x x
B' : BilinForm K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } :=
  restrict B (orthogonal B (Submodule.span K {x}))
v' : Basis (Fin d) K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) }
hv₁ : iIsOrtho (restrict B (orthogonal B (Submodule.span K {x}))) ↑v'
b : Basis (Fin (d + 1)) K V :=
  Basis.mkFinCons x v' (_ : ∀ (c : K) (y : V), y ∈ orthogonal B (Submodule.span K {x}) → c • x + y = 0 → c = 0)
    (_ : ∀ (y : V), ∃ c, y + c • x ∈ orthogonal B (Submodule.span K {x}))
j✝ i : Fin (Nat.succ d)
j : Fin d
hij : Fin.succ j ≠ 0
⊢ IsOrtho B (↑(↑v' j)) x

tactic: exact (v' j).prop _ (Submodule.mem_span_singleton_self x)
state_before: case succ.inr.intro.intro.refine'_1.refine'_2
S : Type ?u.672109
R : Type ?u.672112
R₁ : Type ?u.672115
M : Type ?u.672118
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
V✝ : Type u
K : Type v
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V✝
inst✝⁴ : Module K V✝
inst✝³ : FiniteDimensional K V✝
hK : Invertible 2
B✝ : BilinForm K V✝
hB₂✝ : IsSymm B✝
x✝ : ℕ
hd✝ : finrank K V✝ = x✝
d : ℕ
ih :
  ∀ {V : Type u} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] {B : BilinForm K V},
    IsSymm B → finrank K V = d → ∃ v, iIsOrtho B ↑v
V : Type u
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
B : BilinForm K V
hB₂ : IsSymm B
this : Nontrivial V
hB₁ : B ≠ 0
x : V
hd : finrank K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } + 1 = Nat.succ d
hx : ¬IsOrtho B x x
B' : BilinForm K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } :=
  restrict B (orthogonal B (Submodule.span K {x}))
v' : Basis (Fin d) K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) }
hv₁ : iIsOrtho (restrict B (orthogonal B (Submodule.span K {x}))) ↑v'
b : Basis (Fin (d + 1)) K V :=
  Basis.mkFinCons x v' (_ : ∀ (c : K) (y : V), y ∈ orthogonal B (Submodule.span K {x}) → c • x + y = 0 → c = 0)
    (_ : ∀ (y : V), ∃ c, y + c • x ∈ orthogonal B (Submodule.span K {x}))
j✝ i : Fin (Nat.succ d)
j : Fin d
hij : Fin.succ j ≠ 0
⊢ bilin B x ↑(↑v' j) = 0

tactic: exact (v' i).prop _ (Submodule.mem_span_singleton_self x)
state_before: case succ.inr.intro.intro.refine'_2.refine'_1
S : Type ?u.672109
R : Type ?u.672112
R₁ : Type ?u.672115
M : Type ?u.672118
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
V✝ : Type u
K : Type v
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V✝
inst✝⁴ : Module K V✝
inst✝³ : FiniteDimensional K V✝
hK : Invertible 2
B✝ : BilinForm K V✝
hB₂✝ : IsSymm B✝
x✝ : ℕ
hd✝ : finrank K V✝ = x✝
d : ℕ
ih :
  ∀ {V : Type u} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] {B : BilinForm K V},
    IsSymm B → finrank K V = d → ∃ v, iIsOrtho B ↑v
V : Type u
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
B : BilinForm K V
hB₂ : IsSymm B
this : Nontrivial V
hB₁ : B ≠ 0
x : V
hd : finrank K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } + 1 = Nat.succ d
hx : ¬IsOrtho B x x
B' : BilinForm K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } :=
  restrict B (orthogonal B (Submodule.span K {x}))
v' : Basis (Fin d) K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) }
hv₁ : iIsOrtho (restrict B (orthogonal B (Submodule.span K {x}))) ↑v'
b : Basis (Fin (d + 1)) K V :=
  Basis.mkFinCons x v' (_ : ∀ (c : K) (y : V), y ∈ orthogonal B (Submodule.span K {x}) → c • x + y = 0 → c = 0)
    (_ : ∀ (y : V), ∃ c, y + c • x ∈ orthogonal B (Submodule.span K {x}))
j i✝ : Fin (Nat.succ d)
i : Fin d
hij : 0 ≠ Fin.succ i
⊢ IsOrtho B x ↑(↑v' i)

tactic: exact hv₁ (ne_of_apply_ne _ hij)
state_before: case succ.inr.intro.intro.refine'_2.refine'_2
S : Type ?u.672109
R : Type ?u.672112
R₁ : Type ?u.672115
M : Type ?u.672118
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
V✝ : Type u
K : Type v
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V✝
inst✝⁴ : Module K V✝
inst✝³ : FiniteDimensional K V✝
hK : Invertible 2
B✝ : BilinForm K V✝
hB₂✝ : IsSymm B✝
x✝ : ℕ
hd✝ : finrank K V✝ = x✝
d : ℕ
ih :
  ∀ {V : Type u} [inst : AddCommGroup V] [inst_1 : Module K V] [inst_2 : FiniteDimensional K V] {B : BilinForm K V},
    IsSymm B → finrank K V = d → ∃ v, iIsOrtho B ↑v
V : Type u
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : FiniteDimensional K V
B : BilinForm K V
hB₂ : IsSymm B
this : Nontrivial V
hB₁ : B ≠ 0
x : V
hd : finrank K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } + 1 = Nat.succ d
hx : ¬IsOrtho B x x
B' : BilinForm K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) } :=
  restrict B (orthogonal B (Submodule.span K {x}))
v' : Basis (Fin d) K { x_1 // x_1 ∈ orthogonal B (Submodule.span K {x}) }
hv₁ : iIsOrtho (restrict B (orthogonal B (Submodule.span K {x}))) ↑v'
b : Basis (Fin (d + 1)) K V :=
  Basis.mkFinCons x v' (_ : ∀ (c : K) (y : V), y ∈ orthogonal B (Submodule.span K {x}) → c • x + y = 0 → c = 0)
    (_ : ∀ (y : V), ∃ c, y + c • x ∈ orthogonal B (Submodule.span K {x}))
j✝ i✝ : Fin (Nat.succ d)
i j : Fin d
hij : Fin.succ j ≠ Fin.succ i
⊢ IsOrtho B ↑(↑v' j) ↑(↑v' i)