Documentation

Mathlib.Geometry.Diffeology.Basic

Diffeological spaces #

A diffeological space is a concrete sheaf on the site of cartesian spaces ℝⁿ and smooth maps between them, or equivalently a type X with a well-behaved notion of smoothness for functions from the spaces ℝⁿ to X - see https://ncatlab.org/nlab/show/diffeological+space. In this file we focus on the latter viewpoint and define some of the basic notions of diffeology, like diffeological spaces and smooth maps between them.

Concretely, this means that for our purposes a diffeological space is a type X together with a set plots n of maps ℝⁿ → X for each n (called plots), such that the following three properties hold:

In addition to this notion of smoothness, every diffeological space X also comes equipped with a natural diffeology, called the D-topology; it is the finest topology on X that makes all plots continuous, and consists precisely of those sets whose preimages under plots are all open. This recovers the standard topology of e.g. normed spaces and manifolds, and makes all smooth maps continuous. We provide this as a definition but not as an instance, for reasons outlined in the implementation details below.

Main definitions / results #

Implementation notes #

Choice of test spaces #

Instead of defining diffeologies as collections of plots ℝⁿ → X whose domains are the spaces ℝⁿ, we could have also defined them in terms of maps from some other collection of test spaces; for example:

All of these result in equivalent notions of diffeologies and smooth maps; the abstract way to see this is that the corresponding sites are all dense subsites of the site of finite-dimensional smooth manifolds, and hence give rise to equivalent sheaf topoi. Which of those sites / collections of test spaces to use is hence mainly a matter of convenience; we have gone with the cartesian spaces ℝⁿ mainly for two reasons:

One downside of this choice compared to that of all open subsets of ℝⁿ is however that it makes the sheaf condition / locality condition of diffeologies ("any map that is locally a plot is also globally a plot") somewhat awkward to state and prove. To mitigate this, we provide DiffeologicalSpace.ofPlotsOn as a way to construct a diffeology from plots whose domains are subsets of ℝⁿ. See the definition of NormedSpace.toDiffeology for an example where this is used.

D-Topology #

While the D-topology is quite well-behaved in some regards, it does unfortunately not always commute with e.g. products. This means that it can not be registered as an instance - otherwise, there would be two TopologicalSpace-instances on binary products, the product topology of the D-topologies on the factors and the D-topology of the product diffeology. For emphasis we repeat: in general these topologies can be mathematically distinct not just non-defeq. We thus instead define a typeclass IsDTopologyCompatible X to express when the topology on X does match the D-topology, and also give the D-topology the short name dTopology to enable use of notations such as Continuous[_, dTopology] for continuity with respect to the D-topology.

In order to make it easier to work with diffeological spaces whose natural diffeology does match the D-topology, we also include the D-topology as part of the data of DiffeologicalSpace X. This allows the diffeologies on e.g. ℝⁿ, manifolds and quotients of diffeological spaces to be defined in such a way that the D-topology is defeq to the topology that the space already carries.

Diffeologies on normed spaces #

Every normed spaces carries a natural diffeology consisting of all smooth maps from ℝⁿ. While this "normed space diffeology" does commute with arbitrary products, we can't register it as an instance because it wouldn't be defeq to the product diffeology on products of normed spaces. We thus only give it as a definition (NormedSpace.toDiffeology) instead of an instance, and instead provide a typeclass IsContDiffCompatible X for talking about normed spaces equipped with the normed space diffeology.

To make working with finite-dimensional spaces easier, NormedSpace.toDiffeology is defined in such a way that its D-topology is defeq to the topology induced by the norm - however, this currently comes at the cost of making the definition work only on finite-dimensional spaces. It should be possible to extend this to all normed spaces though in the future.

TODO #

Much of the basic theory of diffeological spaces has already been formalised at https://github.com/peabrainiac/lean-orbifolds and just needs to be upstreamed. However, some TODOs that haven't been formalised at all yet and only depend on the material here are:

References #

Tags #

diffeology, diffeological space, smoothness, smooth function

class DiffeologicalSpace (X : Type u_1) :
Type u_1

A diffeology on X, given by the smooth functions (or "plots") from ℝⁿ to X.

Instances

    Alias of DiffeologicalSpace.dTopology.


    The D-topology of the diffeology. This is included as part of the data in order to give control over what the D-topology is defeq to. See also note [forgetful inheritance].

    Equations
    Instances For
      def Diffeology.IsPlot {X : Type u_1} [DiffeologicalSpace X] {n : } (p : EuclideanSpace (Fin n)X) :

      A map p : EuclideanSpace ℝ (Fin n) → X is called a plot iff it is part of the diffeology on X. This is equivalent to p being smooth with respect to the standard diffeology on EuclideanSpace ℝ (Fin n).

      Equations
      Instances For
        def Diffeology.DSmooth {X : Type u_1} {Y : Type u_2} [DiffeologicalSpace X] [DiffeologicalSpace Y] (f : XY) :

        A function between diffeological spaces is smooth iff composition with it preserves smoothness of plots.

        Equations
        Instances For
          theorem DiffeologicalSpace.ext {X : Type u_4} {d₁ d₂ : DiffeologicalSpace X} (h : @Diffeology.IsPlot X d₁ = @Diffeology.IsPlot X d₂) :
          d₁ = d₂
          theorem DiffeologicalSpace.ext_iff {X : Type u_4} {d₁ d₂ : DiffeologicalSpace X} :
          d₁ = d₂ @Diffeology.IsPlot X d₁ = @Diffeology.IsPlot X d₂
          theorem Diffeology.isPlot_const {X : Type u_1} [DiffeologicalSpace X] {n : } {x : X} :
          IsPlot fun (x_1 : EuclideanSpace (Fin n)) => x
          theorem Diffeology.isPlot_reparam {X : Type u_1} [DiffeologicalSpace X] {n m : } {p : EuclideanSpace (Fin m)X} {f : EuclideanSpace (Fin n)EuclideanSpace (Fin m)} (hp : IsPlot p) (hf : ContDiff (↑) f) :
          IsPlot (p f)
          theorem Diffeology.IsPlot.dSmooth_comp {X : Type u_1} {Y : Type u_2} [DiffeologicalSpace X] [DiffeologicalSpace Y] {n : } {p : EuclideanSpace (Fin n)X} {f : XY} (hp : IsPlot p) (hf : DSmooth f) :
          IsPlot (f p)
          theorem Diffeology.IsPlot.dSmooth_comp' {X : Type u_1} {Y : Type u_2} [DiffeologicalSpace X] [DiffeologicalSpace Y] {n : } {p : EuclideanSpace (Fin n)X} {f : XY} (hp : IsPlot p) (hf : DSmooth f) :
          IsPlot fun (x : EuclideanSpace (Fin n)) => f (p x)
          theorem Diffeology.isOpen_iff_preimages_plots {X : Type u_1} [DiffeologicalSpace X] {u : Set X} :
          IsOpen u ∀ (n : ) (p : EuclideanSpace (Fin n)X), IsPlot pIsOpen (p ⁻¹' u)
          theorem Diffeology.IsPlot.continuous {X : Type u_1} [DiffeologicalSpace X] {n : } {p : EuclideanSpace (Fin n)X} (hp : IsPlot p) :
          theorem Diffeology.DSmooth.continuous {X : Type u_1} {Y : Type u_2} [DiffeologicalSpace X] [DiffeologicalSpace Y] {f : XY} (hf : DSmooth f) :
          theorem Diffeology.dSmooth_iff {X : Type u_1} {Y : Type u_2} [DiffeologicalSpace X] [DiffeologicalSpace Y] {f : XY} :
          DSmooth f ∀ (n : ) (p : EuclideanSpace (Fin n)X), IsPlot pIsPlot (f p)
          theorem Diffeology.dSmooth_id' {X : Type u_1} [DiffeologicalSpace X] :
          DSmooth fun (x : X) => x
          theorem Diffeology.DSmooth.comp {X : Type u_1} {Y : Type u_2} {Z : Type u_3} [DiffeologicalSpace X] [DiffeologicalSpace Y] [DiffeologicalSpace Z] {f : XY} {g : YZ} (hg : DSmooth g) (hf : DSmooth f) :
          DSmooth (g f)
          theorem Diffeology.DSmooth.comp' {X : Type u_1} {Y : Type u_2} {Z : Type u_3} [DiffeologicalSpace X] [DiffeologicalSpace Y] [DiffeologicalSpace Z] {f : XY} {g : YZ} (hg : DSmooth g) (hf : DSmooth f) :
          DSmooth fun (x : X) => g (f x)
          theorem Diffeology.dSmooth_const {X : Type u_1} {Y : Type u_2} [DiffeologicalSpace X] [DiffeologicalSpace Y] {y : Y} :
          DSmooth fun (x : X) => y

          Replaces the D-topology of a diffeology with another topology equal to it. Useful to construct diffeologies with better definitional equalities.

          Equations
          Instances For
            structure DiffeologicalSpace.CorePlotsOn (X : Type u_1) :
            Type u_1

            A structure with plots specified on open subsets of ℝⁿ rather than ℝⁿ itself. Useful for constructing diffeologies, as it often makes the locality condition easier to prove.

            Instances For

              Constructs a diffeology from plots defined on open subsets or ℝⁿ rather than ℝⁿ itself, organised in the form of the auxiliary CorePlotsOn structure. This is more involved in most regards, but also often makes it quite a lot easier to prove the locality condition.

              Equations
              • One or more equations did not get rendered due to their size.
              Instances For

                Technical condition saying that the topology on a type agrees with the D-topology. Necessary because the D-topologies on for example products and subspaces don't agree with the product and subspace topologies.

                Instances

                  A smooth function between spaces that are equipped with the D-topology is continuous.

                  Technical condition saying that the diffeology on a space is the one coming from smoothness in the sense of ContDiff ℝ ∞. Necessary as a hypothesis for some theorems because some normed spaces carry a diffeology that is equal but not defeq to the normed space diffeology (for example the product diffeology in the case of Fin n → ℝ), so the information that these theorems still holds needs to be made available via this typeclass.

                  Instances

                    Diffeology on a finite-dimensional normed space. We make this a definition instead of an instance because we also want to have product diffeologies as an instance, and having both would cause instance diamonds on spaces like Fin n → ℝ.

                    Equations
                    • One or more equations did not get rendered due to their size.
                    Instances For
                      theorem Diffeology.IsPlot.dSmooth {X : Type u_1} [DiffeologicalSpace X] {n : } {p : EuclideanSpace (Fin n)X} (hp : IsPlot p) :
                      theorem Diffeology.DSmooth.isPlot {X : Type u_1} [DiffeologicalSpace X] {n : } {p : EuclideanSpace (Fin n)X} (hp : DSmooth p) :
                      theorem Diffeology.isPlot_id' {n : } :
                      IsPlot fun (x : EuclideanSpace (Fin n)) => x