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

Proof steps:
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 R₁ M₁
b : B.IsRefl
W : Submodule R₁ M₁
hW : Disjoint W (B.orthogonal W)
⊢ (B.restrict W).Nondegenerate
state_after: case mk
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 R₁ M₁
b : B.IsRefl
W : Submodule R₁ M₁
hW : Disjoint W (B.orthogonal W)
x : M₁
hx : x ∈ W
b₁ : ∀ (n : ↥W), ((B.restrict W) ⟨x, hx⟩) n = 0
⊢ ⟨x, hx⟩ = 0
tactic: rintro ⟨x, hx⟩ b₁
state_before: case mk
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 R₁ M₁
b : B.IsRefl
W : Submodule R₁ M₁
hW : Disjoint W (B.orthogonal W)
x : M₁
hx : x ∈ W
b₁ : ∀ (n : ↥W), ((B.restrict W) ⟨x, hx⟩) n = 0
⊢ ⟨x, hx⟩ = 0
state_after: case mk
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 R₁ M₁
b : B.IsRefl
W : Submodule R₁ M₁
hW : Disjoint W (B.orthogonal W)
x : M₁
hx : x ∈ W
b₁ : ∀ (n : ↥W), ((B.restrict W) ⟨x, hx⟩) n = 0
⊢ x ∈ ⊥
tactic: rw [Submodule.mk_eq_zero, ← Submodule.mem_bot R₁]
state_before: case mk
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 R₁ M₁
b : B.IsRefl
W : Submodule R₁ M₁
hW : Disjoint W (B.orthogonal W)
x : M₁
hx : x ∈ W
b₁ : ∀ (n : ↥W), ((B.restrict W) ⟨x, hx⟩) n = 0
⊢ x ∈ ⊥
state_after: case mk
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 R₁ M₁
b : B.IsRefl
W : Submodule R₁ M₁
hW : Disjoint W (B.orthogonal W)
x : M₁
hx : x ∈ W
b₁ : ∀ (n : ↥W), ((B.restrict W) ⟨x, hx⟩) n = 0
y : M₁
hy : y ∈ W
⊢ B.IsOrtho y x
tactic: refine hW.le_bot ⟨hx, fun y hy => ?_⟩
state_before: case mk
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 R₁ M₁
b : B.IsRefl
W : Submodule R₁ M₁
hW : Disjoint W (B.orthogonal W)
x : M₁
hx : x ∈ W
b₁ : ∀ (n : ↥W), ((B.restrict W) ⟨x, hx⟩) n = 0
y : M₁
hy : y ∈ W
⊢ B.IsOrtho y x
state_after: case mk
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 R₁ M₁
b : B.IsRefl
W : Submodule R₁ M₁
hW : Disjoint W (B.orthogonal W)
x : M₁
hx : x ∈ W
y : M₁
hy : y ∈ W
b₁ : ((B.restrict W) ⟨x, hx⟩) ⟨y, hy⟩ = 0
⊢ B.IsOrtho y x
tactic: specialize b₁ ⟨y, hy⟩
state_before: case mk
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 R₁ M₁
b : B.IsRefl
W : Submodule R₁ M₁
hW : Disjoint W (B.orthogonal W)
x : M₁
hx : x ∈ W
y : M₁
hy : y ∈ W
b₁ : ((B.restrict W) ⟨x, hx⟩) ⟨y, hy⟩ = 0
⊢ B.IsOrtho y x
state_after: case mk
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 R₁ M₁
b : B.IsRefl
W : Submodule R₁ M₁
hW : Disjoint W (B.orthogonal W)
x : M₁
hx : x ∈ W
y : M₁
hy : y ∈ W
b₁ : (B x) y = 0
⊢ B.IsOrtho y x
tactic: simp only [restrict_apply, domRestrict_apply] at b₁
state_before: case mk
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 R₁ M₁
b : B.IsRefl
W : Submodule R₁ M₁
hW : Disjoint W (B.orthogonal W)
x : M₁
hx : x ∈ W
y : M₁
hy : y ∈ W
b₁ : (B x) y = 0
⊢ B.IsOrtho y x
state_after: no goals
tactic: exact isOrtho_def.mpr (b x y b₁)