Zulip Chat Archive

Stream: new members

Topic: Transition Maps on Smooth Manifold


Dominic Steinitz (Dec 11 2024 at 11:13):

I started trying to prove that transition maps are smooth but they should be by definition so where would I find that?

example (m : ) {M : Type*}
  [TopologicalSpace M]
  [ChartedSpace (EuclideanSpace  (Fin m)) M]
  [SmoothManifoldWithCorners (𝓡 m) M]
  (φ_α : PartialHomeomorph M (EuclideanSpace  (Fin m)))
  (hΦ_Α : φ_α  maximalAtlas (𝓡 m) M)
  (φ_β : PartialHomeomorph M (EuclideanSpace  (Fin m)))
  (hΦ_Β : φ_β  maximalAtlas (𝓡 m) M)
  (x : M) (hx : x   φ_α.source  φ_β.source) :
    ContMDiffWithinAt (𝓡 m) (𝓡 m)  (φ_α.symm.trans φ_β).toFun (φ_α.toFun '' (φ_α.source  φ_β.source))
    (φ_α x) := by
    have h1 : ContMDiffOn (𝓡 m) (𝓡 m)  φ_α φ_α.source := contMDiffOn_of_mem_maximalAtlas hΦ_Α
    sorry

Michael Rothgang (Dec 11 2024 at 11:59):

Indeed, in a smooth manifold, all transition maps are smooth by definition - so mathematically, you have nothing to prove. In Lean, this is formalised through a docs#contDiffGroupoid: a smooth manifold has an atlas whose transition maps from a contDiffGroupoid (meaning that they are C^n on their domain of definition).

Michael Rothgang (Dec 11 2024 at 12:00):

By the way, a short heads-up: the file SmoothManifoldsWithCorners.lean is being refactored now. If you're working on the latest mathlib version, you'll need to update your code when that lands (which should be within a week).

Michael Rothgang (Dec 11 2024 at 12:03):

A maximal atlas is defined in docs#StructureGroupoid.maximalAtlas

Sébastien Gouëzel (Dec 11 2024 at 12:06):

import Mathlib

open scoped Manifold
open SmoothManifoldWithCorners

example (m : ) {M : Type*}
    [TopologicalSpace M] [ChartedSpace (EuclideanSpace  (Fin m)) M]
    [SmoothManifoldWithCorners (𝓡 m) M]
    (φ_α : PartialHomeomorph M (EuclideanSpace  (Fin m)))
    (hΦ_Α : φ_α  maximalAtlas (𝓡 m) M)
    (φ_β : PartialHomeomorph M (EuclideanSpace  (Fin m)))
    (hΦ_Β : φ_β  maximalAtlas (𝓡 m) M)
    (x : M) (hx : x   φ_α.source  φ_β.source) :
    ContMDiffAt (𝓡 m) (𝓡 m)  (φ_α.symm.trans φ_β) (φ_α x) := by
  simp only [PartialHomeomorph.coe_trans]
  apply ContMDiffAt.comp (I' := 𝓡 m)
  · apply contMDiffAt_of_mem_maximalAtlas hΦ_Β
    simpa [hx.1] using hx.2
  · apply contMDiffAt_symm_of_mem_maximalAtlas hΦ_Α
    exact PartialHomeomorph.map_source φ_α hx.1

Michael Rothgang (Dec 11 2024 at 12:06):

StructureGroupoid is an abstraction describing the requirement on the maximal atlas. For merely topological manifolds, continuousGroupoid captures this. For C^n manifolds, docs#contDiffGroupoid describes this fact. For analytic manifolds, there's docs#analyticGroupoid. One could also imagine e.g. PLGroupoid for PL manifolds (which are not in mathlib so far).

Michael Rothgang (Dec 11 2024 at 12:07):

So, hopefully between this explanation of mathlib's design and the worked example, you have an answer to your question now :-)

Dominic Steinitz (Dec 12 2024 at 11:10):

That's great - thanks very much both. I assumed that the chart maps were members of the groupoid. What was not clear to me was how one knew that such a member was CnC^n. Given the code sample does not explicitly reference groupoids, I am guessing that e.g. contMDiffAt_of_mem_maximalAtlas uses them under the covers (I will go look shortly).

Of course this is still a derivation rather than a definition but there are many ways to define manifolds.

For my own edification, I re-wrote the proof

import Mathlib

open scoped Manifold
open SmoothManifoldWithCorners

example (m : ) {M : Type*}
    [TopologicalSpace M] [ChartedSpace (EuclideanSpace  (Fin m)) M]
    [SmoothManifoldWithCorners (𝓡 m) M]
    (φ_α : PartialHomeomorph M (EuclideanSpace  (Fin m)))
    (hΦ_Α : φ_α  maximalAtlas (𝓡 m) M)
    (φ_β : PartialHomeomorph M (EuclideanSpace  (Fin m)))
    (hΦ_Β : φ_β  maximalAtlas (𝓡 m) M)
    (x : M) (hx : x   φ_α.source  φ_β.source) :
    ContMDiffAt (𝓡 m) (𝓡 m)  (φ_α.symm.trans φ_β) (φ_α x) := by
  have h1 : (φ_α.symm.trans φ_β) = φ_β  φ_α.symm :=
   PartialHomeomorph.coe_trans φ_α.symm φ_β
  have h2 : ContMDiffAt (𝓡 m) (𝓡 m)  φ_β x :=
   contMDiffAt_of_mem_maximalAtlas hΦ_Β hx.2
  have h3 : ContMDiffAt (𝓡 m) (𝓡 m)  φ_α.symm (φ_α x) :=
   contMDiffAt_symm_of_mem_maximalAtlas hΦ_Α (PartialHomeomorph.map_source φ_α hx.1)
  have h4 : φ_α.symm (φ_α x) = x := PartialHomeomorph.left_inv φ_α hx.1
  have h5 : ContMDiffAt (𝓡 m) (𝓡 m)  φ_β (φ_α.symm (φ_α x)) := by
    rw [h4]
    exact h2
  have h7 : ContMDiffAt (𝓡 m) (𝓡 m)  (φ_β  φ_α.symm) (φ_α x) :=
   ContMDiffAt.comp (I' := 𝓡 m) (φ_α x) h5 h3
  have h8 : ContMDiffAt (𝓡 m) (𝓡 m)  (φ_α.symm.trans φ_β) (φ_α x) := by
    rw [h1]
    exact h7
  exact h8

Dominic Steinitz (Dec 12 2024 at 11:28):

One further thought: shouldn't this or something similar be a theorem in mathlib?

Sébastien Gouëzel (Dec 12 2024 at 12:30):

We have in mathlib the facts that members of the maximal atlas are smooth, and that composition of smooth maps is smooth. I don't think more is needed: the composition of two elements of the maximal atlas has nothing special in this respect (and the fact that it hasn't been needed until now is an indication that this lemma wouldn't bring much). On the other hand, if you have examples of theorems you are proving where this fact is used several times, then maybe we should reconsider indeed!


Last updated: May 02 2025 at 03:31 UTC