Theorem: maximal_orthonormal_iff_basis_of_finiteDimensional
File: Mathlib/Analysis/InnerProductSpace/Projection.lean

tactic: haveI := proper_isROrC 𝕜 (span 𝕜 v)
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type ?u.1127153
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
inst✝ : FiniteDimensional 𝕜 E
hv : Orthonormal 𝕜 Subtype.val
⊢ (∀ (u : Set E), u ⊇ v → Orthonormal 𝕜 Subtype.val → u = v) ↔ ∃ b, ↑b = Subtype.val

tactic: rw [maximal_orthonormal_iff_orthogonalComplement_eq_bot hv]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type ?u.1127153
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
inst✝ : FiniteDimensional 𝕜 E
hv : Orthonormal 𝕜 Subtype.val
this : ProperSpace { x // x ∈ span 𝕜 v }
⊢ (∀ (u : Set E), u ⊇ v → Orthonormal 𝕜 Subtype.val → u = v) ↔ ∃ b, ↑b = Subtype.val

tactic: rw [Submodule.orthogonal_eq_bot_iff]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type ?u.1127153
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
inst✝ : FiniteDimensional 𝕜 E
hv : Orthonormal 𝕜 Subtype.val
this : ProperSpace { x // x ∈ span 𝕜 v }
⊢ (span 𝕜 v)ᗮ = ⊥ ↔ ∃ b, ↑b = Subtype.val

tactic: have hv_coe : range ((↑) : v → E) = v := by simp
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type ?u.1127153
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
inst✝ : FiniteDimensional 𝕜 E
hv : Orthonormal 𝕜 Subtype.val
this : ProperSpace { x // x ∈ span 𝕜 v }
⊢ span 𝕜 v = ⊤ ↔ ∃ b, ↑b = Subtype.val

tactic: constructor
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type ?u.1127153
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
inst✝ : FiniteDimensional 𝕜 E
hv : Orthonormal 𝕜 Subtype.val
this : ProperSpace { x // x ∈ span 𝕜 v }
hv_coe : Set.range Subtype.val = v
⊢ span 𝕜 v = ⊤ ↔ ∃ b, ↑b = Subtype.val

tactic: simp
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type ?u.1127153
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
inst✝ : FiniteDimensional 𝕜 E
hv : Orthonormal 𝕜 Subtype.val
this : ProperSpace { x // x ∈ span 𝕜 v }
⊢ Set.range Subtype.val = v

tactic: refine' fun h => ⟨Basis.mk hv.linearIndependent _, Basis.coe_mk _ _⟩
state_before: case mp
𝕜 : Type u_1
E : Type u_2
F : Type ?u.1127153
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
inst✝ : FiniteDimensional 𝕜 E
hv : Orthonormal 𝕜 Subtype.val
this : ProperSpace { x // x ∈ span 𝕜 v }
hv_coe : Set.range Subtype.val = v
⊢ span 𝕜 v = ⊤ → ∃ b, ↑b = Subtype.val

tactic: convert h.ge
state_before: case mp
𝕜 : Type u_1
E : Type u_2
F : Type ?u.1127153
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
inst✝ : FiniteDimensional 𝕜 E
hv : Orthonormal 𝕜 Subtype.val
this : ProperSpace { x // x ∈ span 𝕜 v }
hv_coe : Set.range Subtype.val = v
h : span 𝕜 v = ⊤
⊢ ⊤ ≤ span 𝕜 (Set.range Subtype.val)

tactic: rintro ⟨h, coe_h⟩
state_before: case mpr
𝕜 : Type u_1
E : Type u_2
F : Type ?u.1127153
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
inst✝ : FiniteDimensional 𝕜 E
hv : Orthonormal 𝕜 Subtype.val
this : ProperSpace { x // x ∈ span 𝕜 v }
hv_coe : Set.range Subtype.val = v
⊢ (∃ b, ↑b = Subtype.val) → span 𝕜 v = ⊤

tactic: rw [← h.span_eq, coe_h, hv_coe]
state_before: case mpr.intro
𝕜 : Type u_1
E : Type u_2
F : Type ?u.1127153
inst✝⁵ : IsROrC 𝕜
inst✝⁴ : NormedAddCommGroup E
inst✝³ : NormedAddCommGroup F
inst✝² : InnerProductSpace 𝕜 E
inst✝¹ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
v : Set E
inst✝ : FiniteDimensional 𝕜 E
hv : Orthonormal 𝕜 Subtype.val
this : ProperSpace { x // x ∈ span 𝕜 v }
hv_coe : Set.range Subtype.val = v
h : Basis (↑v) 𝕜 E
coe_h : ↑h = Subtype.val
⊢ span 𝕜 v = ⊤