@@ -267,6 +267,140 @@ theorem gramSchmidtOrthonormalBasis_apply_of_orthonormal [Fintype ι]
267267
268268end VectorBundle
269269
270+ /-! The Gram-Schmidt process preserves continuity of sections -/
271+ section continuity
272+
273+ -- -- Let `V` be a smooth vector bundle with a `C^n` Riemannian structure over a `C^k` manifold `B`.
274+ -- variable
275+ -- {EB : Type*} [NormedAddCommGroup EB] [NormedSpace ℝ EB]
276+ -- {HB : Type*} [TopologicalSpace HB] {IB : ModelWithCorners ℝ EB HB} {n : WithTop ℕ∞}
277+ -- {B : Type*} [TopologicalSpace B] [ChartedSpace HB B]
278+ -- {F : Type*} [NormedAddCommGroup F] [NormedSpace ℝ F]
279+ -- {E : B → Type*} [TopologicalSpace (TotalSpace F E)] [∀ x, NormedAddCommGroup (E x)]
280+ -- [∀ x, InnerProductSpace ℝ (E x)] [FiberBundle F E] [VectorBundle ℝ F E]
281+ -- [IsManifold IB n B] [ContMDiffVectorBundle n F E IB]
282+ -- [IsContMDiffRiemannianBundle IB n F E]
283+
284+ --variable [IsContMDiffRiemannianBundle IB n F E]
285+
286+ -- section helper
287+
288+ -- variable {s t : (x : B) → E x} {u : Set B} {x : B}
289+
290+ -- -- TODO: give a much better name!
291+ -- lemma contMDiffWithinAt_aux
292+ -- (hs : CMDiffAt[ u ] n (T% s) x) (ht : CMDiffAt[ u ] n (T% t) x) (hs' : s x ≠ 0) :
293+ -- CMDiffAt[ u ] n (fun x ↦ ⟪s x, t x⟫ / (‖s x‖ ^ 2)) x := by
294+ -- have := (hs.inner_bundle ht).smul ((hs.inner_bundle hs).inv₀ (inner_self_ne_zero.mpr hs'))
295+ -- apply this.congr
296+ -- · intro y hy
297+ -- congr
298+ -- simp [ inner_self_eq_norm_sq_to_K ]
299+ -- · congr
300+ -- rw [← real_inner_self_eq_norm_sq]
301+
302+ -- lemma contMDiffAt_aux (hs : CMDiffAt n (T% s) x) (ht : CMDiffAt n (T% t) x) (hs' : s x ≠ 0) :
303+ -- CMDiffAt n (fun x ↦ ⟪s x, t x⟫ / (‖s x‖ ^ 2)) x := by
304+ -- rw [← contMDiffWithinAt_univ] at hs ht ⊢
305+ -- exact contMDiffWithinAt_aux hs ht hs'
306+
307+ -- def ContMDiffWithinAt.orthogonalProjection
308+ -- (hs : CMDiffAt[ u ] n (T% s) x) (ht : CMDiffAt[ u ] n (T% t) x) (hs' : s x ≠ 0) :
309+ -- -- TODO: leaving out the type ascription yields a horrible error message, add test and fix!
310+ -- letI S : (x : B) → E x := fun x ↦ (Submodule.span ℝ {s x}).orthogonalProjection (t x);
311+ -- CMDiffAt[ u ] n (T% S) x := by
312+ -- simp_rw [ Submodule.orthogonalProjection_singleton ]
313+ -- exact (contMDiffWithinAt_aux hs ht hs').smul_section hs
314+
315+ -- lemma contMDiffWithinAt_inner (hs : CMDiffAt[ u ] n (T% s) x) (hs' : s x ≠ 0) :
316+ -- CMDiffAt[ u ] n (‖s ·‖) x := by
317+ -- let F (x) := ⟪s x, s x⟫
318+ -- have aux : CMDiffAt[ u ] n (Real.sqrt ∘ F) x := by
319+ -- have h1 : CMDiffAt[(F '' u)] n (Real.sqrt) (F x) := by
320+ -- apply ContMDiffAt.contMDiffWithinAt
321+ -- rw [ contMDiffAt_iff_contDiffAt ]
322+ -- exact Real.contDiffAt_sqrt (by simp [F, hs'])
323+ -- exact h1.comp x (hs.inner_bundle hs) (Set.mapsTo_image _ u)
324+ -- convert aux
325+ -- simp [F, ← norm_eq_sqrt_real_inner]
326+
327+ -- end helper
328+
329+ variable {s : ι → (x : B) → E x} {u : Set B} {x : B} {i : ι}
330+
331+ attribute [local instance ] IsWellOrder.toHasWellFounded
332+
333+ -- TODO: need continuity analogues of ContMDiff.sub_section
334+
335+ lemma gramSchmidt_continuousWithinAt (hs : ∀ i, ContinuousWithinAt (T% (s i)) u x)
336+ {i : ι} (hs' : LinearIndependent ℝ ((s · x) ∘ ((↑) : Set.Iic i → ι))) :
337+ ContinuousWithinAt (T% (VectorBundle.gramSchmidt s i)) u x := by
338+ simp_rw [VectorBundle.gramSchmidt_def]
339+ sorry /-apply (hs i).sub_section
340+ apply ContMDiffWithinAt.sum_section
341+ intro i' hi'
342+ let aux : { x // x ∈ Set.Iic i' } → { x // x ∈ Set.Iic i } :=
343+ fun ⟨x, hx⟩ ↦ ⟨x, hx.trans (Finset.mem_Iio.mp hi').le⟩
344+ have : LinearIndependent ℝ ((fun x_1 ↦ s x_1 x) ∘ @Subtype.val ι fun x ↦ x ∈ Set.Iic i') := by
345+ apply hs'.comp aux
346+ intro ⟨x, hx⟩ ⟨x', hx'⟩ h
347+ simp_all only [Subtype.mk.injEq, aux]
348+ apply ContMDiffWithinAt.orthogonalProjection (gramSchmidt_contMDiffWithinAt hs this) (hs i)
349+ apply VectorBundle.gramSchmidt_ne_zero_coe _ this -/
350+ -- termination_by i
351+ -- decreasing_by exact (LocallyFiniteOrderBot.finset_mem_Iio i i').mp hi'
352+
353+ lemma gramSchmidt_continuousAt (hs : ∀ i, ContinuousAt (T% (s i)) x)
354+ (hs' : LinearIndependent ℝ ((s · x) ∘ ((↑) : Set.Iic i → ι))) :
355+ ContinuousAt (T% (VectorBundle.gramSchmidt s i)) x := by
356+ simp_rw [← continuousWithinAt_univ] at hs ⊢
357+ exact gramSchmidt_continuousWithinAt (fun i ↦ hs i) hs'
358+
359+ lemma gramSchmidt_contMDiffOn (hs : ∀ i, ContinuousOn (T% (s i)) u)
360+ (hs' : ∀ x ∈ u, LinearIndependent ℝ ((s · x) ∘ ((↑) : Set.Iic i → ι))) :
361+ ContinuousOn (T% (VectorBundle.gramSchmidt s i)) u :=
362+ fun x hx ↦ gramSchmidt_continuousWithinAt (fun i ↦ hs i x hx) (hs' _ hx)
363+
364+ lemma gramSchmidt_continuous (hs : ∀ i, Continuous (T% (s i)))
365+ (hs' : ∀ x, LinearIndependent ℝ ((s · x) ∘ ((↑) : Set.Iic i → ι))) :
366+ Continuous (T% (VectorBundle.gramSchmidt s i)) := by
367+ simp_rw [continuous_iff_continuousAt] at hs ⊢
368+ exact fun x ↦ gramSchmidt_continuousAt (fun i ↦ hs i x) (hs' x)
369+
370+ lemma gramSchmidtNormed_continuousWithinAt (hs : ∀ i, ContinuousWithinAt (T% (s i)) u x)
371+ (hs' : LinearIndependent ℝ ((s · x) ∘ ((↑) : Set.Iic i → ι))) :
372+ ContinuousWithinAt (T% (VectorBundle.gramSchmidtNormed s i)) u x := by
373+ have : ContinuousWithinAt (T%
374+ (fun x ↦ ‖VectorBundle.gramSchmidt s i x‖⁻¹ • VectorBundle.gramSchmidt s i x)) u x := by
375+ sorry
376+ -- refine ContMDiffWithinAt.smul_section ?_ (gramSchmidt_contMDiffWithinAt hs hs')
377+ -- refine ContMDiffWithinAt.inv₀ ?_ ?_
378+ -- · refine contMDiffWithinAt_inner (gramSchmidt_contMDiffWithinAt hs hs') ?_
379+ -- simpa using InnerProductSpace.gramSchmidt_ne_zero_coe i hs'
380+ -- · simpa using InnerProductSpace.gramSchmidt_ne_zero_coe i hs'
381+ exact this.congr (fun y hy ↦ by congr) (by congr)
382+
383+ lemma gramSchmidtNormed_continuousAt (hs : ∀ i, ContinuousAt (T% (s i)) x)
384+ (hs' : LinearIndependent ℝ ((s · x) ∘ ((↑) : Set.Iic i → ι))) :
385+ ContinuousAt (T% (VectorBundle.gramSchmidtNormed s i)) x := by
386+ simp_rw [← continuousWithinAt_univ] at hs ⊢
387+ exact gramSchmidtNormed_continuousWithinAt (fun i ↦ hs i) hs'
388+
389+ lemma gramSchmidtNormed_continuousOn (hs : ∀ i, ContinuousOn (T% (s i)) u)
390+ (hs' : ∀ x ∈ u, LinearIndependent ℝ ((s · x) ∘ ((↑) : Set.Iic i → ι))) :
391+ ContinuousOn (T% (VectorBundle.gramSchmidtNormed s i)) u :=
392+ fun x hx ↦ gramSchmidtNormed_continuousWithinAt (fun i ↦ hs i x hx) (hs' _ hx)
393+
394+ lemma gramSchmidtNormed_continuous (hs : ∀ i, Continuous (T% (s i)))
395+ (hs' : ∀ x, LinearIndependent ℝ ((s · x) ∘ ((↑) : Set.Iic i → ι))) :
396+ Continuous (T% (VectorBundle.gramSchmidtNormed s i)) := by
397+ simp_rw [continuous_iff_continuousAt] at hs ⊢
398+ exact fun x ↦ gramSchmidtNormed_continuousAt (fun i ↦ hs i x) (hs' x)
399+
400+ end continuity
401+
402+ #exit
403+
270404/-! The Gram-Schmidt process preserves smoothness of sections -/
271405section smoothness
272406
0 commit comments