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

tactic: ext x
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
W : Subspace K V
⊢ (range (domRestrict B W)).dualCoannihilator = B.orthogonal W
state_after: case h
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
W : Subspace K V
x : V
⊢ x ∈ (range (domRestrict B W)).dualCoannihilator ↔ x ∈ B.orthogonal W

tactic: constructor <;> rw [mem_orthogonal_iff] <;> intro hx
state_before: case h
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
W : Subspace K V
x : V
⊢ x ∈ (range (domRestrict B W)).dualCoannihilator ↔ x ∈ B.orthogonal W
state_after: case h.mp
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
W : Subspace K V
x : V
hx : x ∈ (range (domRestrict B W)).dualCoannihilator
⊢ ∀ n ∈ W, B.IsOrtho n x

case h.mpr
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
W : Subspace K V
x : V
hx : ∀ n ∈ W, B.IsOrtho n x
⊢ x ∈ (range (domRestrict B W)).dualCoannihilator

tactic: intro y hy
state_before: case h.mp
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
W : Subspace K V
x : V
hx : x ∈ (range (domRestrict B W)).dualCoannihilator
⊢ ∀ n ∈ W, B.IsOrtho n x
state_after: case h.mp
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
W : Subspace K V
x : V
hx : x ∈ (range (domRestrict B W)).dualCoannihilator
y : V
hy : y ∈ W
⊢ B.IsOrtho y x

tactic: rw [Submodule.mem_dualCoannihilator] at hx
state_before: case h.mp
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
W : Subspace K V
x : V
hx : x ∈ (range (domRestrict B W)).dualCoannihilator
y : V
hy : y ∈ W
⊢ B.IsOrtho y x
state_after: case h.mp
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
W : Subspace K V
x : V
hx : ∀ φ ∈ range (domRestrict B W), φ x = 0
y : V
hy : y ∈ W
⊢ B.IsOrtho y x

tactic: exact hx (B.domRestrict W ⟨y, hy⟩) ⟨⟨y, hy⟩, rfl⟩
state_before: case h.mp
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
W : Subspace K V
x : V
hx : ∀ φ ∈ range (domRestrict B W), φ x = 0
y : V
hy : y ∈ W
⊢ B.IsOrtho y x
state_after: no goals

tactic: rw [Submodule.mem_dualCoannihilator]
state_before: case h.mpr
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
W : Subspace K V
x : V
hx : ∀ n ∈ W, B.IsOrtho n x
⊢ x ∈ (range (domRestrict B W)).dualCoannihilator
state_after: case h.mpr
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
W : Subspace K V
x : V
hx : ∀ n ∈ W, B.IsOrtho n x
⊢ ∀ φ ∈ range (domRestrict B W), φ x = 0

tactic: rintro _ ⟨⟨w, hw⟩, rfl⟩
state_before: case h.mpr
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
W : Subspace K V
x : V
hx : ∀ n ∈ W, B.IsOrtho n x
⊢ ∀ φ ∈ range (domRestrict B W), φ x = 0
state_after: case h.mpr.intro.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 K V
W : Subspace K V
x : V
hx : ∀ n ∈ W, B.IsOrtho n x
w : V
hw : w ∈ W
⊢ ((domRestrict B W) ⟨w, hw⟩) x = 0

tactic: exact hx w hw
state_before: case h.mpr.intro.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 K V
W : Subspace K V
x : V
hx : ∀ n ∈ W, B.IsOrtho n x
w : V
hw : w ∈ W
⊢ ((domRestrict B W) ⟨w, hw⟩) x = 0
state_after: no goals