Zulip Chat Archive

Stream: maths

Topic: coordchange as function of base is smooth


Sam Lindauer (Nov 02 2024 at 09:55):

Hey there, in the project I am working on, I need to prove that the unitsection in the tangentbundle of the circle is smooth. I have defined the unitsection as follows:

import Mathlib

open scoped Manifold

notation "โ„ยน" => EuclideanSpace โ„ (Fin 1)
notation "๐•Šยน" => Metric.sphere (0 : EuclideanSpace โ„ (Fin 2)) 1

/- The unit section of the tangent bundle of the circle -/
def unitSection : ๐•Šยน โ†’ TangentBundle (๐“ก 1) (๐•Šยน) := (โŸจยท, fun _ โ†ฆ 1โŸฉ)

In the intuitive sense, this 'is' the product of the identity function and the constant function, which is clearly smooth. I have been able to reduce the proof to a statement on the smoothness of coordchanges between the tangent spaces, but I am not sure how to prove this...

/- Smooth coordchange function -/
lemma coordchange_smooth (x : ๐•Šยน) :
  SmoothAt ๐“˜(โ„, โ„ยน) ๐“˜(โ„, โ„ยน โ†’L[โ„] โ„ยน)
    (fun (s : ๐•Šยน) โ†ฆ
      (tangentBundleCore (๐“ก 1) (๐•Šยน)).coordChange
        ((tangentBundleCore (๐“ก 1) (๐•Šยน)).indexAt s)
        ((tangentBundleCore (๐“ก 1) (๐•Šยน)).indexAt x) s)
    x := by
      sorry

All help is much appreciated!
Sam

PS. For insight in how I have deduced the proof to this statement, the reduction is below.

/- unitSection is Smooth section -/
lemma smooth_unit : Smooth (๐“ก 1) ((๐“ก 1).prod (๐“ก 1)) unitSection := by
  -- Take arbitrary point `x` and trivialization at `x`
  intro x
  let e' := (trivializationAt (โ„ยน) (TangentSpace (๐“ก 1)) x)
  -- Show `unitSection x` is in the source of the trivialization
  have h1 : unitSection x โˆˆ e'.source := by
    refine (Trivialization.mem_source (trivializationAt (โ„ยน) (TangentSpace (๐“ก 1)) x)).mpr ?_
    exact FiberBundle.mem_baseSet_trivializationAt' (unitSection x).proj
  haveI : MemTrivializationAtlas e' := by
    exact instMemTrivializationAtlasTrivializationAt x
  -- join of two smooth maps `id` and `const`
  have h : SmoothAt (๐“ก 1) (๐“ก 1) (fun s โ†ฆ (e' (unitSection s)).1) x โˆง
    SmoothAt (๐“ก 1) (๐“ก 1) ((fun s โ†ฆ (e' (unitSection s)).2)) x := by
      constructor
      ยท -- `id` is smooth
        exact smooth_id x
      ยท refine ContMDiffAt.clm_apply ?right.hg ?right.hf
        ยท -- `coordchange function` is smooth
          apply coordchange_smooth
        ยท -- `const` is smooth
          exact smoothAt_const
  -- Finish proof using `h1` and `h`
  refine (Trivialization.smoothAt_iff (๐“ก 1) h1).mpr ?_
  constructor
  ยท exact h.left
  ยท exact h.right

Patrick Massot (Nov 02 2024 at 12:15):

@Floris van Doorn is our expert in manifold smoothness proofs.

Floris van Doorn (Nov 03 2024 at 10:06):

For proving that something is smooth into the total space, I recommend using docs#Trivialization.contMDiffAt_iff. The fact that the coordinate change of the tangent bundle is smooth is stated in docs#TangentBundle.smoothVectorBundle. Probably those coordinate changes are not exactly the same, but they should be the same within charts.
Hope this helps.

Sam Lindauer (Nov 04 2024 at 09:28):

Thanks for the replies! Will be working on it today.

Sam Lindauer (Nov 05 2024 at 10:59):

@Floris van Doorn I am still having some trouble with finishing this proof. I have used docs#Trivialization.contMDiffAt_iff and can't quite get the two coordinate transformations, the one above and the one received from docs#TangentBundle.smoothVectorBundle, to line up. This is the coordtransformation we get from docs#TangentBundle.smoothVectorBundle:

class SmoothVectorBundle : Prop where
  protected smoothOn_coordChangeL :
    โˆ€ (e e' : Trivialization F (ฯ€ F E)) [MemTrivializationAtlas e] [MemTrivializationAtlas e'],
      SmoothOn IB ๐“˜(๐•œ, F โ†’L[๐•œ] F) (fun b : B => (e.coordChangeL ๐•œ e' b : F โ†’L[๐•œ] F))
        (e.baseSet โˆฉ e'.baseSet)

which needs me to give two fixed trivializations. Now, the problem I am having is that the coordchange function that I need to prove has one of the charts as a variable in the function itself, see the variable s in the function coordchange_smooth above. My plan was to essentially shrink down the neighbourhood around x enough (say the baseSet of x using for example docs#ContMDiffAt.congr_of_eventuallyEq) and say that any chosen ((tangentBundleCore (๐“ก 1) (๐•Šยน)).indexAt s) within this neighbourhood is the same as ((tangentBundleCore (๐“ก 1) (๐•Šยน)).indexAt x), but I don't know how to make the claim that these charts are the same in such a neighbourhood....


Last updated: May 02 2025 at 03:31 UTC