Theorem: LinearMap.BilinForm.restrict_nondegenerate_orthogonal_spanSingleton
File: Mathlib/LinearAlgebra/BilinearForm/Orthogonal.lean

tactic: refine fun m hm => Submodule.coe_eq_zero.1 (b₁ m.1 fun n => ?_)
state_before: R : Type u_1
M : Type u_2
inst✝¹⁰ : CommSemiring R
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝⁷ : CommRing R₁
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R₁ M₁
V : Type u_5
K : Type u_6
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
M₂' : Type u_7
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R M₂'
B : BilinForm K V
b₁ : B.Nondegenerate
b₂ : B.IsRefl
x : V
hx : ¬B.IsOrtho x x
⊢ (B.restrict (B.orthogonal (Submodule.span K {x}))).Nondegenerate
state_after: R : Type u_1
M : Type u_2
inst✝¹⁰ : CommSemiring R
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝⁷ : CommRing R₁
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R₁ M₁
V : Type u_5
K : Type u_6
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
M₂' : Type u_7
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R M₂'
B : BilinForm K V
b₁ : B.Nondegenerate
b₂ : B.IsRefl
x : V
hx : ¬B.IsOrtho x x
m : ↥(B.orthogonal (Submodule.span K {x}))
hm : ∀ (n : ↥(B.orthogonal (Submodule.span K {x}))), ((B.restrict (B.orthogonal (Submodule.span K {x}))) m) n = 0
n : V
⊢ (B ↑m) n = 0

tactic: have : n ∈ (K ∙ x) ⊔ B.orthogonal (K ∙ x) :=
  (span_singleton_sup_orthogonal_eq_top hx).symm ▸ Submodule.mem_top
state_before: R : Type u_1
M : Type u_2
inst✝¹⁰ : CommSemiring R
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝⁷ : CommRing R₁
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R₁ M₁
V : Type u_5
K : Type u_6
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
M₂' : Type u_7
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R M₂'
B : BilinForm K V
b₁ : B.Nondegenerate
b₂ : B.IsRefl
x : V
hx : ¬B.IsOrtho x x
m : ↥(B.orthogonal (Submodule.span K {x}))
hm : ∀ (n : ↥(B.orthogonal (Submodule.span K {x}))), ((B.restrict (B.orthogonal (Submodule.span K {x}))) m) n = 0
n : V
⊢ (B ↑m) n = 0
state_after: R : Type u_1
M : Type u_2
inst✝¹⁰ : CommSemiring R
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝⁷ : CommRing R₁
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R₁ M₁
V : Type u_5
K : Type u_6
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
M₂' : Type u_7
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R M₂'
B : BilinForm K V
b₁ : B.Nondegenerate
b₂ : B.IsRefl
x : V
hx : ¬B.IsOrtho x x
m : ↥(B.orthogonal (Submodule.span K {x}))
hm : ∀ (n : ↥(B.orthogonal (Submodule.span K {x}))), ((B.restrict (B.orthogonal (Submodule.span K {x}))) m) n = 0
n : V
this : n ∈ Submodule.span K {x} ⊔ B.orthogonal (Submodule.span K {x})
⊢ (B ↑m) n = 0

tactic: rcases Submodule.mem_sup.1 this with ⟨y, hy, z, hz, rfl⟩
state_before: R : Type u_1
M : Type u_2
inst✝¹⁰ : CommSemiring R
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝⁷ : CommRing R₁
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R₁ M₁
V : Type u_5
K : Type u_6
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
M₂' : Type u_7
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R M₂'
B : BilinForm K V
b₁ : B.Nondegenerate
b₂ : B.IsRefl
x : V
hx : ¬B.IsOrtho x x
m : ↥(B.orthogonal (Submodule.span K {x}))
hm : ∀ (n : ↥(B.orthogonal (Submodule.span K {x}))), ((B.restrict (B.orthogonal (Submodule.span K {x}))) m) n = 0
n : V
this : n ∈ Submodule.span K {x} ⊔ B.orthogonal (Submodule.span K {x})
⊢ (B ↑m) n = 0
state_after: case intro.intro.intro.intro
R : Type u_1
M : Type u_2
inst✝¹⁰ : CommSemiring R
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝⁷ : CommRing R₁
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R₁ M₁
V : Type u_5
K : Type u_6
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
M₂' : Type u_7
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R M₂'
B : BilinForm K V
b₁ : B.Nondegenerate
b₂ : B.IsRefl
x : V
hx : ¬B.IsOrtho x x
m : ↥(B.orthogonal (Submodule.span K {x}))
hm : ∀ (n : ↥(B.orthogonal (Submodule.span K {x}))), ((B.restrict (B.orthogonal (Submodule.span K {x}))) m) n = 0
y : V
hy : y ∈ Submodule.span K {x}
z : V
hz : z ∈ B.orthogonal (Submodule.span K {x})
this : y + z ∈ Submodule.span K {x} ⊔ B.orthogonal (Submodule.span K {x})
⊢ (B ↑m) (y + z) = 0

tactic: specialize hm ⟨z, hz⟩
state_before: case intro.intro.intro.intro
R : Type u_1
M : Type u_2
inst✝¹⁰ : CommSemiring R
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝⁷ : CommRing R₁
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R₁ M₁
V : Type u_5
K : Type u_6
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
M₂' : Type u_7
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R M₂'
B : BilinForm K V
b₁ : B.Nondegenerate
b₂ : B.IsRefl
x : V
hx : ¬B.IsOrtho x x
m : ↥(B.orthogonal (Submodule.span K {x}))
hm : ∀ (n : ↥(B.orthogonal (Submodule.span K {x}))), ((B.restrict (B.orthogonal (Submodule.span K {x}))) m) n = 0
y : V
hy : y ∈ Submodule.span K {x}
z : V
hz : z ∈ B.orthogonal (Submodule.span K {x})
this : y + z ∈ Submodule.span K {x} ⊔ B.orthogonal (Submodule.span K {x})
⊢ (B ↑m) (y + z) = 0
state_after: case intro.intro.intro.intro
R : Type u_1
M : Type u_2
inst✝¹⁰ : CommSemiring R
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝⁷ : CommRing R₁
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R₁ M₁
V : Type u_5
K : Type u_6
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
M₂' : Type u_7
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R M₂'
B : BilinForm K V
b₁ : B.Nondegenerate
b₂ : B.IsRefl
x : V
hx : ¬B.IsOrtho x x
m : ↥(B.orthogonal (Submodule.span K {x}))
y : V
hy : y ∈ Submodule.span K {x}
z : V
hz : z ∈ B.orthogonal (Submodule.span K {x})
this : y + z ∈ Submodule.span K {x} ⊔ B.orthogonal (Submodule.span K {x})
hm : ((B.restrict (B.orthogonal (Submodule.span K {x}))) m) ⟨z, hz⟩ = 0
⊢ (B ↑m) (y + z) = 0

tactic: rw [restrict] at hm
state_before: case intro.intro.intro.intro
R : Type u_1
M : Type u_2
inst✝¹⁰ : CommSemiring R
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝⁷ : CommRing R₁
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R₁ M₁
V : Type u_5
K : Type u_6
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
M₂' : Type u_7
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R M₂'
B : BilinForm K V
b₁ : B.Nondegenerate
b₂ : B.IsRefl
x : V
hx : ¬B.IsOrtho x x
m : ↥(B.orthogonal (Submodule.span K {x}))
y : V
hy : y ∈ Submodule.span K {x}
z : V
hz : z ∈ B.orthogonal (Submodule.span K {x})
this : y + z ∈ Submodule.span K {x} ⊔ B.orthogonal (Submodule.span K {x})
hm : ((B.restrict (B.orthogonal (Submodule.span K {x}))) m) ⟨z, hz⟩ = 0
⊢ (B ↑m) (y + z) = 0
state_after: case intro.intro.intro.intro
R : Type u_1
M : Type u_2
inst✝¹⁰ : CommSemiring R
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝⁷ : CommRing R₁
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R₁ M₁
V : Type u_5
K : Type u_6
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
M₂' : Type u_7
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R M₂'
B : BilinForm K V
b₁ : B.Nondegenerate
b₂ : B.IsRefl
x : V
hx : ¬B.IsOrtho x x
m : ↥(B.orthogonal (Submodule.span K {x}))
y : V
hy : y ∈ Submodule.span K {x}
z : V
hz : z ∈ B.orthogonal (Submodule.span K {x})
this : y + z ∈ Submodule.span K {x} ⊔ B.orthogonal (Submodule.span K {x})
hm : ((domRestrict₁₂ B (B.orthogonal (Submodule.span K {x})) (B.orthogonal (Submodule.span K {x}))) m) ⟨z, hz⟩ = 0
⊢ (B ↑m) (y + z) = 0

tactic: erw [add_right, show B m.1 y = 0 by rw [b₂]; exact m.2 y hy, hm, add_zero]
state_before: case intro.intro.intro.intro
R : Type u_1
M : Type u_2
inst✝¹⁰ : CommSemiring R
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝⁷ : CommRing R₁
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R₁ M₁
V : Type u_5
K : Type u_6
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
M₂' : Type u_7
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R M₂'
B : BilinForm K V
b₁ : B.Nondegenerate
b₂ : B.IsRefl
x : V
hx : ¬B.IsOrtho x x
m : ↥(B.orthogonal (Submodule.span K {x}))
y : V
hy : y ∈ Submodule.span K {x}
z : V
hz : z ∈ B.orthogonal (Submodule.span K {x})
this : y + z ∈ Submodule.span K {x} ⊔ B.orthogonal (Submodule.span K {x})
hm : ((domRestrict₁₂ B (B.orthogonal (Submodule.span K {x})) (B.orthogonal (Submodule.span K {x}))) m) ⟨z, hz⟩ = 0
⊢ (B ↑m) (y + z) = 0
state_after: no goals

tactic: rw [b₂]
state_before: R : Type u_1
M : Type u_2
inst✝¹⁰ : CommSemiring R
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝⁷ : CommRing R₁
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R₁ M₁
V : Type u_5
K : Type u_6
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
M₂' : Type u_7
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R M₂'
B : BilinForm K V
b₁ : B.Nondegenerate
b₂ : B.IsRefl
x : V
hx : ¬B.IsOrtho x x
m : ↥(B.orthogonal (Submodule.span K {x}))
y : V
hy : y ∈ Submodule.span K {x}
z : V
hz : z ∈ B.orthogonal (Submodule.span K {x})
this : y + z ∈ Submodule.span K {x} ⊔ B.orthogonal (Submodule.span K {x})
hm : ((domRestrict₁₂ B (B.orthogonal (Submodule.span K {x})) (B.orthogonal (Submodule.span K {x}))) m) ⟨z, hz⟩ = 0
⊢ (B ↑m) y = 0
state_after: case a
R : Type u_1
M : Type u_2
inst✝¹⁰ : CommSemiring R
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝⁷ : CommRing R₁
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R₁ M₁
V : Type u_5
K : Type u_6
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
M₂' : Type u_7
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R M₂'
B : BilinForm K V
b₁ : B.Nondegenerate
b₂ : B.IsRefl
x : V
hx : ¬B.IsOrtho x x
m : ↥(B.orthogonal (Submodule.span K {x}))
y : V
hy : y ∈ Submodule.span K {x}
z : V
hz : z ∈ B.orthogonal (Submodule.span K {x})
this : y + z ∈ Submodule.span K {x} ⊔ B.orthogonal (Submodule.span K {x})
hm : ((domRestrict₁₂ B (B.orthogonal (Submodule.span K {x})) (B.orthogonal (Submodule.span K {x}))) m) ⟨z, hz⟩ = 0
⊢ (B y) ↑m = 0

tactic: exact m.2 y hy
state_before: case a
R : Type u_1
M : Type u_2
inst✝¹⁰ : CommSemiring R
inst✝⁹ : AddCommMonoid M
inst✝⁸ : Module R M
R₁ : Type u_3
M₁ : Type u_4
inst✝⁷ : CommRing R₁
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R₁ M₁
V : Type u_5
K : Type u_6
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
M₂' : Type u_7
inst✝¹ : AddCommMonoid M₂'
inst✝ : Module R M₂'
B : BilinForm K V
b₁ : B.Nondegenerate
b₂ : B.IsRefl
x : V
hx : ¬B.IsOrtho x x
m : ↥(B.orthogonal (Submodule.span K {x}))
y : V
hy : y ∈ Submodule.span K {x}
z : V
hz : z ∈ B.orthogonal (Submodule.span K {x})
this : y + z ∈ Submodule.span K {x} ⊔ B.orthogonal (Submodule.span K {x})
hm : ((domRestrict₁₂ B (B.orthogonal (Submodule.span K {x})) (B.orthogonal (Submodule.span K {x}))) m) ⟨z, hz⟩ = 0
⊢ (B y) ↑m = 0
state_after: no goals