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

tactic: cases isEmpty_or_nonempty ι
state_before: 𝕜 : Type u_3
E : Type u_1
F : Type ?u.850669
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_2
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
⊢ Tendsto (fun i => ↑(↑(orthogonalProjection (U i)) x)) atTop
    (𝓝 ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x))

tactic: let y := (orthogonalProjection (⨆ i, U i).topologicalClosure x : E)
state_before: case inr
𝕜 : Type u_3
E : Type u_1
F : Type ?u.850669
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_2
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : Nonempty ι
⊢ Tendsto (fun i => ↑(↑(orthogonalProjection (U i)) x)) atTop
    (𝓝 ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x))

tactic: have proj_x : ∀ i, orthogonalProjection (U i) x = orthogonalProjection (U i) y := fun i =>
  (orthogonalProjection_orthogonalProjection_of_le
      ((le_iSup U i).trans (iSup U).le_topologicalClosure) _).symm
state_before: case inr
𝕜 : Type u_3
E : Type u_1
F : Type ?u.850669
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_2
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : Nonempty ι
y : E := ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x)
⊢ Tendsto (fun i => ↑(↑(orthogonalProjection (U i)) x)) atTop
    (𝓝 ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x))

tactic: suffices ∀ ε > 0, ∃ I, ∀ i ≥ I, ‖(orthogonalProjection (U i) y : E) - y‖ < ε by
  simpa only [proj_x, NormedAddCommGroup.tendsto_atTop] using this
state_before: case inr
𝕜 : Type u_3
E : Type u_1
F : Type ?u.850669
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_2
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : Nonempty ι
y : E := ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x)
proj_x : ∀ (i : ι), ↑(orthogonalProjection (U i)) x = ↑(orthogonalProjection (U i)) y
⊢ Tendsto (fun i => ↑(↑(orthogonalProjection (U i)) x)) atTop
    (𝓝 ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x))

tactic: intro ε hε
state_before: case inr
𝕜 : Type u_3
E : Type u_1
F : Type ?u.850669
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_2
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : Nonempty ι
y : E := ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x)
proj_x : ∀ (i : ι), ↑(orthogonalProjection (U i)) x = ↑(orthogonalProjection (U i)) y
⊢ ∀ (ε : ℝ), ε > 0 → ∃ I, ∀ (i : ι), i ≥ I → ‖↑(↑(orthogonalProjection (U i)) y) - y‖ < ε

tactic: obtain ⟨a, ha, hay⟩ : ∃ a ∈ ⨆ i, U i, dist y a < ε := by
  have y_mem : y ∈ (⨆ i, U i).topologicalClosure := Submodule.coe_mem _
  rw [← SetLike.mem_coe, Submodule.topologicalClosure_coe, Metric.mem_closure_iff] at y_mem
  exact y_mem ε hε
state_before: case inr
𝕜 : Type u_3
E : Type u_1
F : Type ?u.850669
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_2
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : Nonempty ι
y : E := ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x)
proj_x : ∀ (i : ι), ↑(orthogonalProjection (U i)) x = ↑(orthogonalProjection (U i)) y
ε : ℝ
hε : ε > 0
⊢ ∃ I, ∀ (i : ι), i ≥ I → ‖↑(↑(orthogonalProjection (U i)) y) - y‖ < ε

tactic: rw [dist_eq_norm] at hay
state_before: case inr.intro.intro
𝕜 : Type u_3
E : Type u_1
F : Type ?u.850669
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_2
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : Nonempty ι
y : E := ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x)
proj_x : ∀ (i : ι), ↑(orthogonalProjection (U i)) x = ↑(orthogonalProjection (U i)) y
ε : ℝ
hε : ε > 0
a : E
ha : a ∈ ⨆ (i : ι), U i
hay : dist y a < ε
⊢ ∃ I, ∀ (i : ι), i ≥ I → ‖↑(↑(orthogonalProjection (U i)) y) - y‖ < ε

tactic: obtain ⟨I, hI⟩ : ∃ I, a ∈ U I := by rwa [Submodule.mem_iSup_of_directed _ hU.directed_le] at ha
state_before: case inr.intro.intro
𝕜 : Type u_3
E : Type u_1
F : Type ?u.850669
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_2
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : Nonempty ι
y : E := ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x)
proj_x : ∀ (i : ι), ↑(orthogonalProjection (U i)) x = ↑(orthogonalProjection (U i)) y
ε : ℝ
hε : ε > 0
a : E
ha : a ∈ ⨆ (i : ι), U i
hay : ‖y - a‖ < ε
⊢ ∃ I, ∀ (i : ι), i ≥ I → ‖↑(↑(orthogonalProjection (U i)) y) - y‖ < ε

tactic: refine' ⟨I, fun i (hi : I ≤ i) => _⟩
state_before: case inr.intro.intro.intro
𝕜 : Type u_3
E : Type u_1
F : Type ?u.850669
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_2
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : Nonempty ι
y : E := ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x)
proj_x : ∀ (i : ι), ↑(orthogonalProjection (U i)) x = ↑(orthogonalProjection (U i)) y
ε : ℝ
hε : ε > 0
a : E
ha : a ∈ ⨆ (i : ι), U i
hay : ‖y - a‖ < ε
I : ι
hI : a ∈ U I
⊢ ∃ I, ∀ (i : ι), i ≥ I → ‖↑(↑(orthogonalProjection (U i)) y) - y‖ < ε

tactic: rw [norm_sub_rev, orthogonalProjection_minimal]
state_before: case inr.intro.intro.intro
𝕜 : Type u_3
E : Type u_1
F : Type ?u.850669
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_2
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : Nonempty ι
y : E := ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x)
proj_x : ∀ (i : ι), ↑(orthogonalProjection (U i)) x = ↑(orthogonalProjection (U i)) y
ε : ℝ
hε : ε > 0
a : E
ha : a ∈ ⨆ (i : ι), U i
hay : ‖y - a‖ < ε
I : ι
hI : a ∈ U I
i : ι
hi : I ≤ i
⊢ ‖↑(↑(orthogonalProjection (U i)) y) - y‖ < ε

tactic: refine' lt_of_le_of_lt _ hay
state_before: case inr.intro.intro.intro
𝕜 : Type u_3
E : Type u_1
F : Type ?u.850669
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_2
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : Nonempty ι
y : E := ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x)
proj_x : ∀ (i : ι), ↑(orthogonalProjection (U i)) x = ↑(orthogonalProjection (U i)) y
ε : ℝ
hε : ε > 0
a : E
ha : a ∈ ⨆ (i : ι), U i
hay : ‖y - a‖ < ε
I : ι
hI : a ∈ U I
i : ι
hi : I ≤ i
⊢ (⨅ (x : { x // x ∈ U i }), ‖y - ↑x‖) < ε

tactic: change _ ≤ ‖y - (⟨a, hU hi hI⟩ : U i)‖
state_before: case inr.intro.intro.intro
𝕜 : Type u_3
E : Type u_1
F : Type ?u.850669
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_2
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : Nonempty ι
y : E := ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x)
proj_x : ∀ (i : ι), ↑(orthogonalProjection (U i)) x = ↑(orthogonalProjection (U i)) y
ε : ℝ
hε : ε > 0
a : E
ha : a ∈ ⨆ (i : ι), U i
hay : ‖y - a‖ < ε
I : ι
hI : a ∈ U I
i : ι
hi : I ≤ i
⊢ (⨅ (x : { x // x ∈ U i }), ‖y - ↑x‖) ≤ ‖y - a‖

tactic: exact ciInf_le ⟨0, Set.forall_range_iff.mpr fun _ => norm_nonneg _⟩ _
state_before: case inr.intro.intro.intro
𝕜 : Type u_3
E : Type u_1
F : Type ?u.850669
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_2
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : Nonempty ι
y : E := ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x)
proj_x : ∀ (i : ι), ↑(orthogonalProjection (U i)) x = ↑(orthogonalProjection (U i)) y
ε : ℝ
hε : ε > 0
a : E
ha : a ∈ ⨆ (i : ι), U i
hay : ‖y - a‖ < ε
I : ι
hI : a ∈ U I
i : ι
hi : I ≤ i
⊢ (⨅ (x : { x // x ∈ U i }), ‖y - ↑x‖) ≤ ‖y - ↑{ val := a, property := (_ : a ∈ U i) }‖

tactic: rw [filter_eq_bot_of_isEmpty (atTop : Filter ι)]
state_before: case inl
𝕜 : Type u_3
E : Type u_1
F : Type ?u.850669
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_2
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : IsEmpty ι
⊢ Tendsto (fun i => ↑(↑(orthogonalProjection (U i)) x)) atTop
    (𝓝 ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x))

tactic: exact tendsto_bot
state_before: case inl
𝕜 : Type u_3
E : Type u_1
F : Type ?u.850669
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_2
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : IsEmpty ι
⊢ Tendsto (fun i => ↑(↑(orthogonalProjection (U i)) x)) ⊥
    (𝓝 ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x))

tactic: simpa only [proj_x, NormedAddCommGroup.tendsto_atTop] using this
state_before: 𝕜 : Type u_3
E : Type u_1
F : Type ?u.850669
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_2
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : Nonempty ι
y : E := ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x)
proj_x : ∀ (i : ι), ↑(orthogonalProjection (U i)) x = ↑(orthogonalProjection (U i)) y
this : ∀ (ε : ℝ), ε > 0 → ∃ I, ∀ (i : ι), i ≥ I → ‖↑(↑(orthogonalProjection (U i)) y) - y‖ < ε
⊢ Tendsto (fun i => ↑(↑(orthogonalProjection (U i)) x)) atTop
    (𝓝 ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x))

tactic: have y_mem : y ∈ (⨆ i, U i).topologicalClosure := Submodule.coe_mem _
state_before: 𝕜 : Type u_3
E : Type u_1
F : Type ?u.850669
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_2
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : Nonempty ι
y : E := ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x)
proj_x : ∀ (i : ι), ↑(orthogonalProjection (U i)) x = ↑(orthogonalProjection (U i)) y
ε : ℝ
hε : ε > 0
⊢ ∃ a, (a ∈ ⨆ (i : ι), U i) ∧ dist y a < ε

tactic: rw [← SetLike.mem_coe, Submodule.topologicalClosure_coe, Metric.mem_closure_iff] at y_mem
state_before: 𝕜 : Type u_3
E : Type u_1
F : Type ?u.850669
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_2
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : Nonempty ι
y : E := ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x)
proj_x : ∀ (i : ι), ↑(orthogonalProjection (U i)) x = ↑(orthogonalProjection (U i)) y
ε : ℝ
hε : ε > 0
y_mem : y ∈ Submodule.topologicalClosure (⨆ (i : ι), U i)
⊢ ∃ a, (a ∈ ⨆ (i : ι), U i) ∧ dist y a < ε

tactic: exact y_mem ε hε
state_before: 𝕜 : Type u_3
E : Type u_1
F : Type ?u.850669
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_2
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : Nonempty ι
y : E := ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x)
proj_x : ∀ (i : ι), ↑(orthogonalProjection (U i)) x = ↑(orthogonalProjection (U i)) y
ε : ℝ
hε : ε > 0
y_mem : ∀ (ε : ℝ), ε > 0 → ∃ b, b ∈ ↑(⨆ (i : ι), U i) ∧ dist y b < ε
⊢ ∃ a, (a ∈ ⨆ (i : ι), U i) ∧ dist y a < ε

tactic: rwa [Submodule.mem_iSup_of_directed _ hU.directed_le] at ha
state_before: 𝕜 : Type u_3
E : Type u_1
F : Type ?u.850669
inst✝⁷ : IsROrC 𝕜
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : InnerProductSpace 𝕜 E
inst✝³ : InnerProductSpace ℝ F
K : Submodule 𝕜 E
inst✝² : CompleteSpace E
ι : Type u_2
inst✝¹ : SemilatticeSup ι
U : ι → Submodule 𝕜 E
inst✝ : ∀ (i : ι), CompleteSpace { x // x ∈ U i }
hU : Monotone U
x : E
h✝ : Nonempty ι
y : E := ↑(↑(orthogonalProjection (Submodule.topologicalClosure (⨆ (i : ι), U i))) x)
proj_x : ∀ (i : ι), ↑(orthogonalProjection (U i)) x = ↑(orthogonalProjection (U i)) y
ε : ℝ
hε : ε > 0
a : E
ha : a ∈ ⨆ (i : ι), U i
hay : ‖y - a‖ < ε
⊢ ∃ I, a ∈ U I