Documentation

CsdLean4.Mathlib.Geometry.Manifold.Darboux

Darboux's theorem by Moser's trick #

Category: 1-Mathlib (CSD-free; staged for upstream). BACKLOG #8 (Q31 = G18), the assembly.

A closed 2-form that is non-degenerate at a point is, near that point, the pullback of a constant form by a local diffeomorphism — Moser's proof. With ω₀ = ω(x₀), η = ω − ω₀ and the interpolation ω_t = ω₀ + tη:

Honest scope #

Order n. For ω of class C^n (1 ≤ n ≤ ∞) the Poincaré primitive is C^n (Analysis/Calculus/ContDiffParametricIntervalIntegral.lean), Moser's field is jointly C^n (contDiffOn_moserFieldJoint'), its flow is C^n in the initial point (contDiffOn_flow_of_contDiffOn, Analysis/ODE/FlowSmooth.lean), and so the chart Φ is C^n with C^n inverse; on a symplectic manifold the Darboux chart is C^∞ and a member of the C^∞ maximal atlas.

The constant form here; the standard form downstream. Moser's trick produces the constant form ω(x₀); Geometry/Manifold/DarbouxStandardForm.lean composes the chart with the coordinates of a symplectic basis of ω(x₀) (LinearAlgebra/BilinearForm/SymplecticBasis.lean) and states the textbook form ω = Ψ^* (∑ dpᵢ ∧ dqᵢ) on ℝ^{2n}, with finrank E = 2n.

References: J. Moser, On the volume elements on a manifold, Trans. AMS 120 (1965); A. Weinstein, Symplectic manifolds and their Lagrangian submanifolds, Adv. Math. 6 (1971); D. McDuff, D. Salamon, Introduction to Symplectic Topology, Thm 3.2.2; Analysis/Calculus/DifferentialForm/Poincare.lean; Analysis/ODE/FlowDerivative.lean; Geometry/Manifold/HamiltonianLieDerivative.lean; specs/BACKLOG.md #8; specs/generator-layer-scoping.md §9 (G18) and Q31.

Non-degeneracy is open #

curryLeft is a bounded linear map on 2-forms.

curryLeft is C^n on 2-forms.

Non-degeneracy of a 2-form is invertibility of curryLeft.

theorem isOpen_nondegenerate {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] [FiniteDimensional ℝ E] :
IsOpen {ξ : E [⋀^Fin 2]→L[ℝ] ℝ | ∀ (v : E), v ≠ 0 → ∃ (u : E), ξ ![v, u] ≠ 0}

Non-degeneracy is an open condition on 2-forms.

theorem exists_nondegenerate_of_norm_sub_lt {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] [FiniteDimensional ℝ E] {ξ₀ : E [⋀^Fin 2]→L[ℝ] ℝ} (h : ∀ (v : E), v ≠ 0 → ∃ (u : E), ξ₀ ![v, u] ≠ 0) :
∃ δ > 0, ∀ (ξ : E [⋀^Fin 2]→L[ℝ] ℝ), ‖ξ - ξ₀‖ < δ → ∀ (v : E), v ≠ 0 → ∃ (u : E), ξ ![v, u] ≠ 0

Every 2-form close to a non-degenerate one is non-degenerate.

Moser's data #

def moserDeviation {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] (ω : E → E [⋀^Fin 2]→L[ℝ] ℝ) (x₀ : E) :

The deviation η = ω − ω(x₀) of a 2-form from its value at the centre.

Equations
Instances For
    def moserForm {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] (ω : E → E [⋀^Fin 2]→L[ℝ] ℝ) (x₀ : E) (t : ℝ) (z : E) :

    Moser's interpolation ω_t = ω(x₀) + t (ω − ω(x₀)).

    Equations
    Instances For
      theorem moserForm_zero {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] {ω : E → E [⋀^Fin 2]→L[ℝ] ℝ} {x₀ : E} (z : E) :
      moserForm ω x₀ 0 z = ω x₀
      theorem moserForm_one {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] {ω : E → E [⋀^Fin 2]→L[ℝ] ℝ} {x₀ : E} (z : E) :
      moserForm ω x₀ 1 z = ω z
      theorem moserForm_self {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] {ω : E → E [⋀^Fin 2]→L[ℝ] ℝ} {x₀ : E} (t : ℝ) :
      moserForm ω x₀ t x₀ = ω x₀
      theorem moserForm_eq_add_smul {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] {ω : E → E [⋀^Fin 2]→L[ℝ] ℝ} {x₀ : E} (t : ℝ) (z : E) :
      moserForm ω x₀ t z = ω x₀ + t • moserDeviation ω x₀ z
      theorem norm_moserForm_sub {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] {ω : E → E [⋀^Fin 2]→L[ℝ] ℝ} {x₀ : E} (t : ℝ) (z : E) :
      ‖moserForm ω x₀ t z - ω x₀‖ = |t| * ‖ω z - ω x₀‖
      theorem contDiffOn_moserDeviation {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] {ω : E → E [⋀^Fin 2]→L[ℝ] ℝ} {x₀ : E} {R : ℝ} (hω : ContDiffOn ℝ 1 ω (Metric.ball x₀ R)) :
      theorem moserDeviation_self {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] {ω : E → E [⋀^Fin 2]→L[ℝ] ℝ} {x₀ : E} :
      moserDeviation ω x₀ x₀ = 0
      theorem extDeriv_moserDeviation {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] {ω : E → E [⋀^Fin 2]→L[ℝ] ℝ} {x₀ : E} {R : ℝ} (hω : ContDiffOn ℝ 1 ω (Metric.ball x₀ R)) (hclosed : ∀ y ∈ Metric.ball x₀ R, extDeriv ω y = 0) {y : E} (hy : y ∈ Metric.ball x₀ R) :
      extDeriv (moserDeviation ω x₀) y = 0
      noncomputable def moserPrimitive {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] (ω : E → E [⋀^Fin 2]→L[ℝ] ℝ) (x₀ : E) (R : ℝ) [FiniteDimensional ℝ E] :

      The radial primitive β of the deviation on the ball: dβ = ω − ω(x₀).

      Equations
      Instances For
        noncomputable def moserFieldJoint {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] (ω : E → E [⋀^Fin 2]→L[ℝ] ℝ) (x₀ : E) (R : ℝ) [FiniteDimensional ℝ E] (q : ℝ × E) :
        E

        Moser's vector field X_t = −(ω_t)^♭⁻¹ β, i.e. ι_{X_t} ω_t = −β where ω_t is non-degenerate (ContinuousLinearMap.inverse is 0 elsewhere), as a function of (t, z).

        Equations
        Instances For
          noncomputable def moserField {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] (ω : E → E [⋀^Fin 2]→L[ℝ] ℝ) (x₀ : E) (R : ℝ) [FiniteDimensional ℝ E] (t : ℝ) (z : E) :
          E

          Moser's vector field at time t.

          Equations
          Instances For
            theorem uncurry_moserField {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] {ω : E → E [⋀^Fin 2]→L[ℝ] ℝ} {x₀ : E} {R : ℝ} [FiniteDimensional ℝ E] :
            theorem contDiffOn_moserPrimitive {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] {ω : E → E [⋀^Fin 2]→L[ℝ] ℝ} {x₀ : E} {R : ℝ} [FiniteDimensional ℝ E] (hω : ContDiffOn ℝ 1 ω (Metric.ball x₀ R)) :
            ContDiffOn ℝ 1 (moserPrimitive ω x₀ R) (Metric.ball x₀ R)
            theorem contDiffOn_moserPrimitive' {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] {ω : E → E [⋀^Fin 2]→L[ℝ] ℝ} {x₀ : E} {R : ℝ} [FiniteDimensional ℝ E] {n : ℕ∞} (hn : 1 ≤ n) (hω : ContDiffOn ℝ (↑n) ω (Metric.ball x₀ R)) :
            ContDiffOn ℝ (↑n) (moserPrimitive ω x₀ R) (Metric.ball x₀ R)

            β is C^n on the ball for ω of class C^n, 1 ≤ n ≤ ∞.

            theorem moserPrimitive_self {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] {ω : E → E [⋀^Fin 2]→L[ℝ] ℝ} {x₀ : E} {R : ℝ} [FiniteDimensional ℝ E] (hω : ContDiffOn ℝ 1 ω (Metric.ball x₀ R)) (hR : 0 < R) :
            moserPrimitive ω x₀ R x₀ = 0
            theorem hasFDerivAt_moserPrimitive_self {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] {ω : E → E [⋀^Fin 2]→L[ℝ] ℝ} {x₀ : E} {R : ℝ} [FiniteDimensional ℝ E] (hω : ContDiffOn ℝ 1 ω (Metric.ball x₀ R)) (hR : 0 < R) :
            HasFDerivAt (moserPrimitive ω x₀ R) 0 x₀

            β vanishes to second order at the centre.

            theorem extDeriv_moserPrimitive {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] {ω : E → E [⋀^Fin 2]→L[ℝ] ℝ} {x₀ : E} {R : ℝ} [FiniteDimensional ℝ E] (hω : ContDiffOn ℝ 1 ω (Metric.ball x₀ R)) (hclosed : ∀ y ∈ Metric.ball x₀ R, extDeriv ω y = 0) {y : E} (hy : y ∈ Metric.ball x₀ R) :
            extDeriv (moserPrimitive ω x₀ R) y = moserDeviation ω x₀ y

            dβ = ω − ω(x₀) on the ball (the Poincaré lemma).

            theorem contDiffOn_moserForm_uncurry {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] {ω : E → E [⋀^Fin 2]→L[ℝ] ℝ} {x₀ : E} {R : ℝ} (hω : ContDiffOn ℝ 1 ω (Metric.ball x₀ R)) :

            The interpolation is jointly C¹ in (t, z).

            theorem contDiffOn_moserForm_uncurry' {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] {ω : E → E [⋀^Fin 2]→L[ℝ] ℝ} {x₀ : E} {R : ℝ} {n : ℕ∞} (hω : ContDiffOn ℝ (↑n) ω (Metric.ball x₀ R)) :

            The interpolation is jointly C^n in (t, z) for ω of class C^n.

            theorem extDeriv_moserForm {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] {ω : E → E [⋀^Fin 2]→L[ℝ] ℝ} {x₀ : E} {R : ℝ} (hω : ContDiffOn ℝ 1 ω (Metric.ball x₀ R)) (hclosed : ∀ y ∈ Metric.ball x₀ R, extDeriv ω y = 0) (t : ℝ) {y : E} (hy : y ∈ Metric.ball x₀ R) :
            extDeriv (moserForm ω x₀ t) y = 0
            theorem curryLeft_moserForm_moserField {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] {ω : E → E [⋀^Fin 2]→L[ℝ] ℝ} {x₀ : E} {R : ℝ} [FiniteDimensional ℝ E] {t : ℝ} {z : E} (h : ∀ (v : E), v ≠ 0 → ∃ (u : E), (moserForm ω x₀ t z) ![v, u] ≠ 0) :
            (moserForm ω x₀ t z).curryLeft (moserField ω x₀ R t z) = -moserPrimitive ω x₀ R z

            Where ω_t is non-degenerate, ι_{X_t} ω_t = −β.

            theorem moserField_self {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] {ω : E → E [⋀^Fin 2]→L[ℝ] ℝ} {x₀ : E} {R : ℝ} [FiniteDimensional ℝ E] (hω : ContDiffOn ℝ 1 ω (Metric.ball x₀ R)) (hR : 0 < R) (t : ℝ) :
            moserField ω x₀ R t x₀ = 0

            X_t(x₀) = 0.

            The assembly #

            theorem exists_moser_radius {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] [FiniteDimensional ℝ E] {ω : E → E [⋀^Fin 2]→L[ℝ] ℝ} {x₀ : E} {R : ℝ} (hω : ContDiffOn ℝ 1 ω (Metric.ball x₀ R)) (hR : 0 < R) (hnd : ∀ (v : E), v ≠ 0 → ∃ (u : E), (ω x₀) ![v, u] ≠ 0) :
            ∃ (r : ℝ), 0 < r ∧ r ≤ R ∧ ∀ t ∈ Set.Ioo (-2) 2, ∀ z ∈ Metric.ball x₀ r, ∀ (v : E), v ≠ 0 → ∃ (u : E), (moserForm ω x₀ t z) ![v, u] ≠ 0

            The ball on which Moser's interpolation stays non-degenerate for |t| < 2.

            theorem contDiffOn_moserFieldJoint {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] [FiniteDimensional ℝ E] {ω : E → E [⋀^Fin 2]→L[ℝ] ℝ} {x₀ : E} {R : ℝ} (hω : ContDiffOn ℝ 1 ω (Metric.ball x₀ R)) {r : ℝ} (hr : r ≤ R) (hnd : ∀ t ∈ Set.Ioo (-2) 2, ∀ z ∈ Metric.ball x₀ r, ∀ (v : E), v ≠ 0 → ∃ (u : E), (moserForm ω x₀ t z) ![v, u] ≠ 0) :
            ContDiffOn ℝ 1 (moserFieldJoint ω x₀ R) (Set.Ioo (-2) 2 ×ˢ Metric.ball x₀ r)

            Moser's field is jointly C¹ on Ioo (-2) 2 ×ˢ ball x₀ r where the interpolation is non-degenerate.

            theorem contDiffOn_moserFieldJoint' {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] [FiniteDimensional ℝ E] {ω : E → E [⋀^Fin 2]→L[ℝ] ℝ} {x₀ : E} {R : ℝ} {n : ℕ∞} (hn : 1 ≤ n) (hω : ContDiffOn ℝ (↑n) ω (Metric.ball x₀ R)) {r : ℝ} (hr : r ≤ R) (hnd : ∀ t ∈ Set.Ioo (-2) 2, ∀ z ∈ Metric.ball x₀ r, ∀ (v : E), v ≠ 0 → ∃ (u : E), (moserForm ω x₀ t z) ![v, u] ≠ 0) :
            ContDiffOn ℝ (↑n) (moserFieldJoint ω x₀ R) (Set.Ioo (-2) 2 ×ˢ Metric.ball x₀ r)

            Moser's field is jointly C^n on (-2, 2) × ball x₀ r for ω of class C^n, 1 ≤ n ≤ ∞, where the interpolation is non-degenerate.

            theorem contDiffAt_moserField_of_joint {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] [FiniteDimensional ℝ E] {ω : E → E [⋀^Fin 2]→L[ℝ] ℝ} {x₀ : E} {R r t : ℝ} {z : E} (hmf : ContDiffOn ℝ 1 (moserFieldJoint ω x₀ R) (Set.Ioo (-2) 2 ×ˢ Metric.ball x₀ r)) (ht : t ∈ Set.Ioo (-2) 2) (hz : z ∈ Metric.ball x₀ r) :
            ContDiffAt ℝ 1 (moserField ω x₀ R t) z

            X_t for fixed t is C¹ at a point where the joint field is.

            theorem fderiv_moserField_eq {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] [FiniteDimensional ℝ E] {ω : E → E [⋀^Fin 2]→L[ℝ] ℝ} {x₀ : E} {R r t : ℝ} {z : E} (hmf : ContDiffOn ℝ 1 (moserFieldJoint ω x₀ R) (Set.Ioo (-2) 2 ×ˢ Metric.ball x₀ r)) (ht : t ∈ Set.Ioo (-2) 2) (hz : z ∈ Metric.ball x₀ r) :

            The derivative of X_t in z is the partial derivative of the joint field.

            theorem hasFDerivAt_moserField_self {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] [FiniteDimensional ℝ E] {ω : E → E [⋀^Fin 2]→L[ℝ] ℝ} {x₀ : E} {R : ℝ} (hω : ContDiffOn ℝ 1 ω (Metric.ball x₀ R)) (hR : 0 < R) (hnd : ∀ (v : E), v ≠ 0 → ∃ (u : E), (ω x₀) ![v, u] ≠ 0) (t : ℝ) :
            HasFDerivAt (moserField ω x₀ R t) 0 x₀

            X_t vanishes to second order at x₀: D X_t (x₀) = 0.

            theorem exists_moser_small_ball {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] [FiniteDimensional ℝ E] {ω : E → E [⋀^Fin 2]→L[ℝ] ℝ} {x₀ : E} {R : ℝ} (hω : ContDiffOn ℝ 1 ω (Metric.ball x₀ R)) (hR : 0 < R) (hnd : ∀ (v : E), v ≠ 0 → ∃ (u : E), (ω x₀) ![v, u] ≠ 0) {r : ℝ} (hr0 : 0 < r) (hmf : ContDiffOn ℝ 1 (moserFieldJoint ω x₀ R) (Set.Ioo (-2) 2 ×ˢ Metric.ball x₀ r)) :
            ∃ (a : ℝ), 0 < a ∧ a < r ∧ ∀ t ∈ Set.Icc 0 1, ∀ z ∈ Metric.closedBall x₀ a, ‖fderiv ℝ (moserField ω x₀ R t) z‖ ≤ 1 / 4

            The small ball: a radius a on which ‖D X_t‖ ≤ ¼ for all t ∈ [0, 1], by the tube lemma along the compact [0, 1] × {x₀}.

            theorem approximatesLinearOn_flow {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] {x₀ : E} {f : ℝ → E → E} {a : ℝ} (hlip : ∀ t ∈ Set.Icc 0 1, LipschitzOnWith (1 / 4) (f t) (Metric.closedBall x₀ a)) {α : E → ℝ → E} (hα : ∀ x ∈ Metric.closedBall x₀ (a / 2), α x 0 = x ∧ (∀ t ∈ Set.Icc 0 1, HasDerivWithinAt (α x) (f t (α x t)) (Set.Icc 0 1) t) ∧ ∀ (t : ℝ), α x t ∈ Metric.closedBall x₀ a) (hsep : ∀ x ∈ Metric.closedBall x₀ (a / 2), ∀ y ∈ Metric.closedBall x₀ (a / 2), ∀ t ∈ Set.Icc 0 1, dist (α x t) (α y t) ≤ dist x y * Real.exp (1 / 4 * t)) :
            ApproximatesLinearOn (fun (x : E) => α x 1) 1 (Metric.ball x₀ (a / 2)) ⟨1 / 4 * Real.exp (1 / 4), approximatesLinearOn_flow._proof_1⟩

            The time-1 map of a flow whose field is ¼-Lipschitz on the trajectories' ball approximates the identity with constant ¼ e^{¼} (the mean value inequality on the difference of two trajectories, with the Grönwall separation).

            theorem quarter_exp_quarter_lt_one :
            1 / 4 * Real.exp (1 / 4) < 1

            The contraction constant ¼ e^{¼} is below the inverse norm of the identity.

            theorem injective_of_compContinuousLinearMap_eq {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] {ξ ξ₀ : E [⋀^Fin 2]→L[ℝ] ℝ} {D : E →L[ℝ] E} (hnd : ∀ (v : E), v ≠ 0 → ∃ (u : E), ξ₀ ![v, u] ≠ 0) (h : ξ.compContinuousLinearMap D = ξ₀) :

            The pullback of a non-degenerate form along D is non-degenerate only if D is injective: so a derivative D with ω(Φ x) ∘ D = ω(x₀) is a linear equivalence.

            Darboux's theorem on a ball #

            theorem exists_openPartialHomeomorph_pullback_eq {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] [FiniteDimensional ℝ E] {ω : E → E [⋀^Fin 2]→L[ℝ] ℝ} {x₀ : E} {R : ℝ} {n : ℕ∞} (hn : 1 ≤ n) (hω : ContDiffOn ℝ (↑n) ω (Metric.ball x₀ R)) (hR : 0 < R) (hclosed : ∀ y ∈ Metric.ball x₀ R, extDeriv ω y = 0) (hnd : ∀ (v : E), v ≠ 0 → ∃ (u : E), (ω x₀) ![v, u] ≠ 0) :
            ∃ (Φ : OpenPartialHomeomorph E E), Φ.source ⊆ Metric.ball x₀ R ∧ Φ.target ⊆ Metric.ball x₀ R ∧ x₀ ∈ Φ.source ∧ ↑Φ x₀ = x₀ ∧ ContDiffOn ℝ (↑n) (↑Φ) Φ.source ∧ ContDiffOn ℝ (↑n) (↑Φ.symm) Φ.target ∧ ∀ x ∈ Φ.source, ∃ (D : E ≃L[ℝ] E), HasFDerivAt (↑Φ) (↑D) x ∧ (ω (↑Φ x)).compContinuousLinearMap ↑D = ω x₀

            ★★ Darboux's theorem on a ball, by Moser's trick. If ω is C^n (1 ≤ n ≤ ∞) and closed on ball x₀ R and ω(x₀) is non-degenerate, there is an open partial homeomorphism Φ of E with x₀ ∈ Φ.source ⊆ ball x₀ R, Φ.target ⊆ ball x₀ R and Φ x₀ = x₀, C^n on its source with C^n inverse on its target, differentiable at every point x of its source with an invertible derivative D, such that ω(Φ x)(D u, D v) = ω(x₀)(u, v): Φ^* ω is the constant form ω(x₀). (The C^n regularity is contDiffOn_flow_of_contDiffOn: the time-1 map of the jointly C^n Moser field, on the half-ball where the flow is Lipschitz in the initial point.)

            theorem exists_openPartialHomeomorph_symm_pullback_eq {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] [FiniteDimensional ℝ E] {ω : E → E [⋀^Fin 2]→L[ℝ] ℝ} {x₀ : E} {R : ℝ} {n : ℕ∞} (hn : 1 ≤ n) (hω : ContDiffOn ℝ (↑n) ω (Metric.ball x₀ R)) (hR : 0 < R) (hclosed : ∀ y ∈ Metric.ball x₀ R, extDeriv ω y = 0) (hnd : ∀ (v : E), v ≠ 0 → ∃ (u : E), (ω x₀) ![v, u] ≠ 0) :
            ∃ (Φ : OpenPartialHomeomorph E E), Φ.source ⊆ Metric.ball x₀ R ∧ Φ.target ⊆ Metric.ball x₀ R ∧ x₀ ∈ Φ.source ∧ ↑Φ x₀ = x₀ ∧ ContDiffOn ℝ (↑n) (↑Φ) Φ.source ∧ ContDiffOn ℝ (↑n) (↑Φ.symm) Φ.target ∧ ∀ y ∈ Φ.target, ∃ (D : E ≃L[ℝ] E), HasFDerivAt (↑Φ.symm) (↑D) y ∧ ω y = (ω x₀).compContinuousLinearMap ↑D

            ★ Darboux's theorem, read on the chart: in the C^n chart Φ⁻¹ the form is constant — ω y (u, v) = ω(x₀)(D(Φ⁻¹)(y) u, D(Φ⁻¹)(y) v) at every y ∈ Φ.target.

            Charts of the C^n maximal atlas #

            An open partial homeomorphism of the model space E that is C^n on its source with a C^n inverse on its target belongs to the C^n groupoid of 𝓘(ℝ, E).

            A chart of the maximal atlas composed with a member of the groupoid on the model side stays in the maximal atlas.

            Darboux on a symplectic manifold #

            theorem DifferentialForm.IsSymplectic.exists_openPartialHomeomorph_localRep_pullback_eq {E : Type u_1} [NormedAddCommGroup E] [NormedSpace ℝ E] [FiniteDimensional ℝ E] {M : Type u_2} [TopologicalSpace M] [ChartedSpace E M] [IsManifold (modelWithCornersSelf ℝ E) (↑⊤) M] {α : DifferentialForm (modelWithCornersSelf ℝ E) M (↑⊤) (Fin 2) ℝ} (hα : α.IsSymplectic) (x₀ : M) :
            ∃ (Φ : OpenPartialHomeomorph E E), Φ.source ⊆ (chartAt E x₀).target ∧ Φ.target ⊆ (chartAt E x₀).target ∧ ↑(chartAt E x₀) x₀ ∈ Φ.source ∧ ↑Φ (↑(chartAt E x₀) x₀) = ↑(chartAt E x₀) x₀ ∧ ContDiffOn ℝ (↑⊤) (↑Φ) Φ.source ∧ ContDiffOn ℝ (↑⊤) (↑Φ.symm) Φ.target ∧ x₀ ∈ ((chartAt E x₀).trans Φ.symm).source ∧ (chartAt E x₀).trans Φ.symm ∈ IsManifold.maximalAtlas (modelWithCornersSelf ℝ E) (↑⊤) M ∧ ∀ w ∈ Φ.source, ∃ (D : E ≃L[ℝ] E), HasFDerivAt (↑Φ) (↑D) w ∧ (localRep (fun (x : M) => α x) x₀ (↑Φ w)).compContinuousLinearMap ↑D = localRep (fun (x : M) => α x) x₀ (↑(chartAt E x₀) x₀)

            ★★ Darboux's theorem on a symplectic manifold. At every point x₀ there is an open partial homeomorphism Φ of the model space, fixing chartAt E x₀ x₀ and contained in the chart's target, C^∞ with C^∞ inverse, along which the local representative of the form pulls back to the constant form ω_loc(chartAt E x₀ x₀): the Darboux chart Φ⁻¹ ∘ chartAt E x₀ contains x₀ and belongs to the C^∞ maximal atlas of M.