Module docstring
{"# C^n manifolds (possibly with boundary or corners)
A C^n manifold is a manifold modelled on a normed vector space, or a subset like a
half-space (to get manifolds with boundaries) for which the changes of coordinates are C^n maps.
We define a model with corners as a map I : H β E embedding nicely the topological space H in
the vector space E (or more precisely as a structure containing all the relevant properties).
Given such a model with corners I on (E, H), we define the groupoid of local
homeomorphisms of H which are C^n when read in E (for any regularity n : WithTop ββ).
With this groupoid at hand and the general machinery of charted spaces, we thus get the notion
of C^n manifold with respect to any model with corners I on (E, H).
Some texts assume manifolds to be Hausdorff and second countable. We (in mathlib) assume neither, but add these assumptions later as needed. (Quite a few results still do not require them.)
Main definitions
ModelWithCorners π E H: a structure containing information on the way a spaceHembeds in a model vector space E over the fieldπ. This is all that is needed to define aC^nmanifold with model spaceH, and model vector spaceE.modelWithCornersSelf π E: trivial model with corners structure on the spaceEembedded in itself by the identity.contDiffGroupoid n I: whenIis a model with corners on(π, E, H), this is the groupoid of partial homeos ofHwhich are of classC^nover the normed fieldπ, when read inE.IsManifold I n M: a type class saying that the charted spaceM, modelled on the spaceH, hasC^nchanges of coordinates with respect to the model with cornersIon(π, E, H). This type class is just a shortcut forHasGroupoid M (contDiffGroupoid n I).
We define a few constructions of smooth manifolds: * every empty type is a smooth manifold * the product of two smooth manifolds * the disjoint union of two manifolds (over the same charted space)
As specific examples of models with corners, we define (in Geometry.Manifold.Instances.Real)
* modelWithCornersEuclideanHalfSpace n :
ModelWithCorners β (EuclideanSpace β (Fin n)) (EuclideanHalfSpace n) for the model space used to
define n-dimensional real manifolds without boundary
(with notation π‘ n in the locale Manifold)
* modelWithCornersEuclideanHalfSpace n :
ModelWithCorners β (EuclideanSpace β (Fin n)) (EuclideanHalfSpace n) for the model space
used to define n-dimensional real manifolds with boundary (with notation π‘β n in the locale
Manifold)
* modelWithCornersEuclideanQuadrant n :
ModelWithCorners β (EuclideanSpace β (Fin n)) (EuclideanQuadrant n) for the model space used
to define n-dimensional real manifolds with corners
With these definitions at hand, to invoke an n-dimensional C^β real manifold without boundary,
one could use
variable {n : β} {M : Type*} [TopologicalSpace M] [ChartedSpace (EuclideanSpace β (Fin n)) M]
[IsManifold (π‘ n) β M].
However, this is not the recommended way: a theorem proved using this assumption would not apply
for instance to the tangent space of such a manifold, which is modelled on
(EuclideanSpace β (Fin n)) Γ (EuclideanSpace β (Fin n))
and not on EuclideanSpace β (Fin (2 * n))!
In the same way, it would not apply to product manifolds, modelled on
(EuclideanSpace β (Fin n)) Γ (EuclideanSpace β (Fin m)).
The right invocation does not focus on one specific construction, but on all constructions sharing
the right properties, like
variable {E : Type*} [NormedAddCommGroup E] [NormedSpace β E] [FiniteDimensional β E]
{I : ModelWithCorners β E E} [I.Boundaryless]
{M : Type*} [TopologicalSpace M] [ChartedSpace E M] [IsManifold I β M]
Here, I.Boundaryless is a typeclass property ensuring that there is no boundary (this is for
instance the case for modelWithCornersSelf, or products of these). Note that one could consider
as a natural assumption to only use the trivial model with corners modelWithCornersSelf β E,
but again in product manifolds the natural model with corners will not be this one but the product
one (and they are not defeq as (fun p : E Γ F β¦ (p.1, p.2)) is not defeq to the identity).
So, it is important to use the above incantation to maximize the applicability of theorems.
Even better, if the result should apply in a parallel way to smooth manifolds and to analytic
manifolds, the last typeclass should be replaced with [IsManifold I n M]
for n : WithTop ββ.
We also define TangentSpace I (x : M) as a type synonym of E, and TangentBundle I M as a
type synonym for Ξ (x : M), TangentSpace I x (in the form of an
abbrev of Bundle.TotalSpace E (TangentSpace I : M β Type _)). Apart from basic typeclasses on
TangentSpace I x, nothing is proved about them in this file, but it is useful to have them
available as definitions early on to get a clean import structure below. The smooth bundle structure
is defined in VectorBundle.Tangent, while the definition is used to talk about manifold
derivatives in MFDeriv.Basic, and neither file needs import the other.
Implementation notes
We want to talk about manifolds modelled on a vector space, but also on manifolds with
boundary, modelled on a half space (or even manifolds with corners). For the latter examples,
we still want to define smooth functions, tangent bundles, and so on. As smooth functions are
well defined on vector spaces or subsets of these, one could take for model space a subtype of a
vector space. With the drawback that the whole vector space itself (which is the most basic
example) is not directly a subtype of itself: the inclusion of univ : Set E in Set E would
show up in the definition, instead of id.
A good abstraction covering both cases it to have a vector
space E (with basic example the Euclidean space), a model space H (with basic example the upper
half space), and an embedding of H into E (which can be the identity for H = E, or
Subtype.val for manifolds with corners). We say that the pair (E, H) with their embedding is a
model with corners, and we encompass all the relevant properties (in particular the fact that the
image of H in E should have unique differentials) in the definition of ModelWithCorners.
I have considered using the model with corners I as a typeclass argument, possibly outParam, to
get lighter notations later on, but it did not turn out right, as on E Γ F there are two natural
model with corners, the trivial (identity) one, and the product one, and they are not defeq and one
needs to indicate to Lean which one we want to use.
This means that when talking on objects on manifolds one will most often need to specify the model
with corners one is using. For instance, the tangent bundle will be TangentBundle I M and the
derivative will be mfderiv I I' f, instead of the more natural notations TangentBundle π M and
mfderiv π f (the field has to be explicit anyway, as some manifolds could be considered both as
real and complex manifolds).
","### Models with corners. ","### C^n functions on models with corners ","### C^n manifolds (possibly with boundary or corners) "}