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

tactic: rw [← Finset.coe_singleton]
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₁
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬B.IsOrtho x x
⊢ Submodule.span K {x} ⊓ B.orthogonal (Submodule.span K {x}) = ⊥
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₁
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬B.IsOrtho x x
⊢ Submodule.span K ↑{x} ⊓ B.orthogonal (Submodule.span K ↑{x}) = ⊥

tactic: refine eq_bot_iff.2 fun y h => ?_
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₁
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬B.IsOrtho x x
⊢ Submodule.span K ↑{x} ⊓ B.orthogonal (Submodule.span K ↑{x}) = ⊥
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₁
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬B.IsOrtho x x
y : V
h : y ∈ Submodule.span K ↑{x} ⊓ B.orthogonal (Submodule.span K ↑{x})
⊢ y ∈ ⊥

tactic: rcases mem_span_finset.1 h.1 with ⟨μ, 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₁
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬B.IsOrtho x x
y : V
h : y ∈ Submodule.span K ↑{x} ⊓ B.orthogonal (Submodule.span K ↑{x})
⊢ y ∈ ⊥
state_after: case 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₁
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬B.IsOrtho x x
μ : V → K
h : ∑ i ∈ {x}, μ i • i ∈ Submodule.span K ↑{x} ⊓ B.orthogonal (Submodule.span K ↑{x})
⊢ ∑ i ∈ {x}, μ i • i ∈ ⊥

tactic: have := h.2 x ?_
state_before: case 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₁
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬B.IsOrtho x x
μ : V → K
h : ∑ i ∈ {x}, μ i • i ∈ Submodule.span K ↑{x} ⊓ B.orthogonal (Submodule.span K ↑{x})
⊢ ∑ i ∈ {x}, μ i • i ∈ ⊥
state_after: case intro.refine_2
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₁
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬B.IsOrtho x x
μ : V → K
h : ∑ i ∈ {x}, μ i • i ∈ Submodule.span K ↑{x} ⊓ B.orthogonal (Submodule.span K ↑{x})
this : B.IsOrtho x (∑ i ∈ {x}, μ i • i)
⊢ ∑ i ∈ {x}, μ i • i ∈ ⊥

case intro.refine_1
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₁
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬B.IsOrtho x x
μ : V → K
h : ∑ i ∈ {x}, μ i • i ∈ Submodule.span K ↑{x} ⊓ B.orthogonal (Submodule.span K ↑{x})
⊢ x ∈ Submodule.span K ↑{x}

tactic: rw [Finset.sum_singleton] at this ⊢
state_before: case intro.refine_2
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₁
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬B.IsOrtho x x
μ : V → K
h : ∑ i ∈ {x}, μ i • i ∈ Submodule.span K ↑{x} ⊓ B.orthogonal (Submodule.span K ↑{x})
this : B.IsOrtho x (∑ i ∈ {x}, μ i • i)
⊢ ∑ i ∈ {x}, μ i • i ∈ ⊥
state_after: case intro.refine_2
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₁
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬B.IsOrtho x x
μ : V → K
h : ∑ i ∈ {x}, μ i • i ∈ Submodule.span K ↑{x} ⊓ B.orthogonal (Submodule.span K ↑{x})
this : B.IsOrtho x (μ x • x)
⊢ μ x • x ∈ ⊥

tactic: suffices hμzero : μ x = 0 by rw [hμzero, zero_smul, Submodule.mem_bot]
state_before: case intro.refine_2
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₁
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬B.IsOrtho x x
μ : V → K
h : ∑ i ∈ {x}, μ i • i ∈ Submodule.span K ↑{x} ⊓ B.orthogonal (Submodule.span K ↑{x})
this : B.IsOrtho x (μ x • x)
⊢ μ x • x ∈ ⊥
state_after: case intro.refine_2
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₁
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬B.IsOrtho x x
μ : V → K
h : ∑ i ∈ {x}, μ i • i ∈ Submodule.span K ↑{x} ⊓ B.orthogonal (Submodule.span K ↑{x})
this : B.IsOrtho x (μ x • x)
⊢ μ x = 0

tactic: change B x (μ x • x) = 0 at this
state_before: case intro.refine_2
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₁
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬B.IsOrtho x x
μ : V → K
h : ∑ i ∈ {x}, μ i • i ∈ Submodule.span K ↑{x} ⊓ B.orthogonal (Submodule.span K ↑{x})
this : B.IsOrtho x (μ x • x)
⊢ μ x = 0
state_after: case intro.refine_2
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₁
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬B.IsOrtho x x
μ : V → K
h : ∑ i ∈ {x}, μ i • i ∈ Submodule.span K ↑{x} ⊓ B.orthogonal (Submodule.span K ↑{x})
this : (B x) (μ x • x) = 0
⊢ μ x = 0

tactic: rw [smul_right] at this
state_before: case intro.refine_2
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₁
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬B.IsOrtho x x
μ : V → K
h : ∑ i ∈ {x}, μ i • i ∈ Submodule.span K ↑{x} ⊓ B.orthogonal (Submodule.span K ↑{x})
this : (B x) (μ x • x) = 0
⊢ μ x = 0
state_after: case intro.refine_2
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₁
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬B.IsOrtho x x
μ : V → K
h : ∑ i ∈ {x}, μ i • i ∈ Submodule.span K ↑{x} ⊓ B.orthogonal (Submodule.span K ↑{x})
this : μ x * (B x) x = 0
⊢ μ x = 0

tactic: exact eq_zero_of_ne_zero_of_mul_right_eq_zero hx this
state_before: case intro.refine_2
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₁
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬B.IsOrtho x x
μ : V → K
h : ∑ i ∈ {x}, μ i • i ∈ Submodule.span K ↑{x} ⊓ B.orthogonal (Submodule.span K ↑{x})
this : μ x * (B x) x = 0
⊢ μ x = 0
state_after: no goals

tactic: rw [hμzero, zero_smul, Submodule.mem_bot]
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₁
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬B.IsOrtho x x
μ : V → K
h : ∑ i ∈ {x}, μ i • i ∈ Submodule.span K ↑{x} ⊓ B.orthogonal (Submodule.span K ↑{x})
this : B.IsOrtho x (μ x • x)
hμzero : μ x = 0
⊢ μ x • x ∈ ⊥
state_after: no goals

tactic: rw [Submodule.mem_span]
state_before: case intro.refine_1
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₁
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬B.IsOrtho x x
μ : V → K
h : ∑ i ∈ {x}, μ i • i ∈ Submodule.span K ↑{x} ⊓ B.orthogonal (Submodule.span K ↑{x})
⊢ x ∈ Submodule.span K ↑{x}
state_after: case intro.refine_1
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₁
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬B.IsOrtho x x
μ : V → K
h : ∑ i ∈ {x}, μ i • i ∈ Submodule.span K ↑{x} ⊓ B.orthogonal (Submodule.span K ↑{x})
⊢ ∀ (p : Submodule K V), ↑{x} ⊆ ↑p → x ∈ p

tactic: exact fun _ hp => hp <| Finset.mem_singleton_self _
state_before: case intro.refine_1
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₁
N L : Submodule R M
B : BilinForm K V
x : V
hx : ¬B.IsOrtho x x
μ : V → K
h : ∑ i ∈ {x}, μ i • i ∈ Submodule.span K ↑{x} ⊓ B.orthogonal (Submodule.span K ↑{x})
⊢ ∀ (p : Submodule K V), ↑{x} ⊆ ↑p → x ∈ p
state_after: no goals