feat(Mathlib/Geometry/Manifold): Riemannian metrics exist II#33714
feat(Mathlib/Geometry/Manifold): Riemannian metrics exist II#33714idontgetoutmuch wants to merge 87 commits intoleanprover-community:masterfrom
Conversation
PR summary 0e708caf75Import changes for modified filesNo significant changes to the import graph Import changes for all files
|
|
From #33519 (comment)
@grunweg do you mean generalising this? /-
Overloading the use of π, let φ : π⁻¹(U) → U × ℝⁿ and ψ : π⁻¹(U) → U × (ℝⁿ ⊗ ℝⁿ →ₗ ℝ) be local
trivialisations of the tangent bundle and the bundle of bilinear forms respectively and
w ∈ π⁻¹(U) and (x, u) and (y, v) ∈ U × ℝⁿ then ψ(w)(u, v) = w(φ⁻¹(x, u), φ⁻¹(x, v))
-/
lemma trivializationAt_tangentSpace_bilinearForm_apply (x₀ x : B)
(w : (TangentSpace (M := B) IB) x →L[ℝ] (TangentSpace (M := B) IB) x →L[ℝ] ℝ)
(u v : EB)
(hx : x ∈ (trivializationAt EB (TangentSpace (M := B) IB) x₀).baseSet) :
(trivializationAt (EB →L[ℝ] EB →L[ℝ] ℝ)
(fun x ↦ (TangentSpace (M := B) IB) x →L[ℝ]
(TangentSpace (M := B) IB) x →L[ℝ]
ℝ) x₀).continuousLinearMapAt ℝ x w u v =
w ((trivializationAt EB (TangentSpace (M := B) IB) x₀).symm x u)
((trivializationAt EB (TangentSpace (M := B) IB) x₀).symm x v)Code here: |
|
You know what your comment refers to - but this seems about right. |
|
See also #28056 |
grunweg
left a comment
There was a problem hiding this comment.
Thanks for your PR; this result is sorely missing from mathlib.
I have two kinds of comments. The first one is that the code is not yet at mathlib's quality bar; it can be shortened significantly, for instance. I have made some example comments below. The second, higher-level, comment is that this result holds on any finite rank vector bundle --- hence should be proven in that generality. Would you like to attempt this generalisation also? As-is, this PR probably should not get merged.
Mathlib/Geometry/Manifold/ExistsRiemannianMetricTangentSpace.lean
Outdated
Show resolved
Hide resolved
Mathlib/Geometry/Manifold/ExistsRiemannianMetricTangentSpace.lean
Outdated
Show resolved
Hide resolved
Mathlib/Geometry/Manifold/ExistsRiemannianMetricTangentSpace.lean
Outdated
Show resolved
Hide resolved
Mathlib/Geometry/Manifold/ExistsRiemannianMetricTangentSpace.lean
Outdated
Show resolved
Hide resolved
Mathlib/Geometry/Manifold/ExistsRiemannianMetricTangentSpace.lean
Outdated
Show resolved
Hide resolved
Mathlib/Geometry/Manifold/ExistsRiemannianMetricTangentSpace.lean
Outdated
Show resolved
Hide resolved
Mathlib/Geometry/Manifold/ExistsRiemannianMetricTangentSpace.lean
Outdated
Show resolved
Hide resolved
Mathlib/Geometry/Manifold/ExistsRiemannianMetricTangentSpace.lean
Outdated
Show resolved
Hide resolved
Mathlib/Geometry/Manifold/ExistsRiemannianMetricTangentSpace.lean
Outdated
Show resolved
Hide resolved
Mathlib/Geometry/Manifold/ExistsRiemannianMetricTangentSpace.lean
Outdated
Show resolved
Hide resolved
|
I have been thinking about the comment on generalisation. But can this be generalised? What would the statement of a general theorem be? Existence of an n-form on a manifold? Moreover the proof relies on |
|
You want to prove the existence of a Riemannian metric, on any vector bundle. (Let's say finite-dimensional for now.) I don't see the issues with |
Thank you. I have been barking up the wrong generalisation tree (auf dem Holzweg). That feels like it should be easy enough. Yes |
|
@grunweg thanks for all the feedback - I am working through generalising everything and then I will address your feedback (which may no longer apply if we are lucky). |
[∀ x, TopologicalSpace (E x)] [∀ x, AddCommGroup (E x)] [∀ x, Module ℝ (E x)] is replaced by [∀ x, NormedAddCommGroup (E x)] [∀ x, NormedSpace ℝ (E x)]
grunweg
left a comment
There was a problem hiding this comment.
A few minor comments about style and golfing --- it's making good progress!
|
(I haven't gone over all your commits yet. I will do so soon.) |
Rida-Hamadani
left a comment
There was a problem hiding this comment.
Thank you for working on this! This PR needs some work before making it to mathlib, here are some comments:
|
|
||
| variable | ||
| [∀ x, NormedSpace ℝ (E x)] | ||
|
|
There was a problem hiding this comment.
Please move the other variables to this section, and also don't break lines immediately after the keyword variable.
There was a problem hiding this comment.
I don't know what you mean here. If I move the other global(?) variables into this section then they are not visible in the other sections. I have not broken lines by doing this
variable {B : Type*}
{E : B → Type*}
[∀ x, NormedAddCommGroup (E x)]
section tangentSpaceEquiv
variable [∀ x, NormedSpace ℝ (E x)]
Maybe there is a formatter for Lean to avoid problems like this?
There was a problem hiding this comment.
What I mean is that
instead of
variable
[∀ x, NormedSpace ℝ (E x)]
it must be:
variable [∀ x, NormedSpace ℝ (E x)]
There was a problem hiding this comment.
That bit is done :-)
| structure VectorSpaceAux | ||
| (x : B) (φ : E x →L[ℝ] E x →L[ℝ] ℝ) (hpos : ∀ v, 0 ≤ φ v v) | ||
| (hsymm : ∀ u v, φ u v = φ v u) (hdef : ∀ v, φ v v = 0 → v = 0) where | ||
| val : E x |
There was a problem hiding this comment.
Can you explain what does this structure do? Preferably as a doc comment.
| {HB : Type*} [TopologicalSpace HB] | ||
| {F : Type*} [NormedAddCommGroup F] [TopologicalSpace (TotalSpace F E)] | ||
|
|
||
| noncomputable section section1 |
There was a problem hiding this comment.
Can you rename this section or remove the name entirely?
| noncomputable section section1 | |
| noncomputable section |
| lemma g_bilin_1_smooth_on_chart (i : B) : | ||
| ContMDiffOn IB (IB.prod 𝓘(ℝ, F →L[ℝ] F →L[ℝ] ℝ)) ∞ | ||
| (g_bilin_1 (F := F) (E := E) i) | ||
| ((trivializationAt F E i).baseSet ∩ (chartAt HB i).source) := by |
There was a problem hiding this comment.
Can you please explain a bit what the proof strategy here is? Why do you need this lemma? It is a bit unclear at the moment.
There was a problem hiding this comment.
The idea is that there are two equivalent ways of defining a bilinear positive definite form: 1) pull back the inner product on
It turns out that using (1) makes proving smoothness straightforward and g_bilin_1_smooth_on_chart proves that locally g_bilini_1 is smooth (the trick is to make the set on which this is true small enough hence the intersection ((trivializationAt F E i).baseSet ∩ (chartAt HB i).source)). This can then be used to prove global smoothness via a partition of unity.
However it is not so clear (to me at any rate) how one uses (1) to prove positive definiteness. This is where (2) comes in. With this definition, it is straightforward to prove positivity, definiteness and symmetry.
I then prove that the two definitions are equal which allows me to prove that (1) is symmetric positive and definite.
But one is still not done. Mathlib's definition requires von Neumann boundedness which is true for finite dimensional manifolds.
I should add a lot of the code, and you comment tangentially (pun intended) about this, is to do with the fact that we have two norms and Mathlib via type classes only allows one so I created a structure VectorSpaceAux with its own norm and showed that they are equivalent (generate the same topology). It is well known that all norms on finite dimensional metric spaces are equivalent but it seems Mathlib does things differently.
Here's a bit more detail:
Mathlib's type class system doesn't support having multiple norm structures on the same type.
As the mathlib documentation states (Analysis.NormedSpace.FiniteDimension):
"The fact that all norms are equivalent is not written explicitly, as it would mean having
two norms on a single space, which is not the way type classes work. However, if one has a
finite-dimensional vector spaceEwith a norm, and a copyE'of this type with another
norm, then the identities fromEtoE'and fromE'toEare continuous thanks to
LinearMap.continuous_of_finiteDimensional. This gives the desired norm equivalence."
What this description elides is that "this gives the desired norm equivalence" requires
creating this auxiliary type plus substantial additional work (see tangentSpaceEquiv,
withSeminormsOfBilinearForm, and aux_tvs) to establish the equivalence and derive the needed
WithSeminorms and IsVonNBounded properties.
In classical mathematics, "all norms on a finite-dimensional space are equivalent" is a
one-line citation. In Mathlib, making this work requires explicit construction and proof.
I did toy with the idea of a blog post on the whole proof but I wanted feedback on it first (for which I am very grateful) and I am now distracted with trying to proved that the exponential map on Lie algebras is smooth.
I fear I am in danger of writing a blog post here and will stop now but please ask anything if I have been insufficiently clear.
| def evalAt (b : B) (v w : E b) : | ||
| (E b →L[ℝ] (E b →L[ℝ] ℝ)) →+ ℝ where | ||
| toFun := fun f => (f.toFun v).toFun w | ||
| map_zero' := by simp |
There was a problem hiding this comment.
This seems out of scope of this file, can you move it to a different file? Perhaps a file related to ContinuousLinearMap? All lemmas related to this also need to be moved.
| letI h : (j : B) → (E b →L[ℝ] (E b →L[ℝ] ℝ)) := fun j ↦ (f j) b • g_bilin_2 F j b | ||
| letI h' x := f x b * ((g_bilin_2 F x b).toFun v).toFun v |
There was a problem hiding this comment.
These need to be let instead of letIs since this is not a definition.
Co-authored-by: Rida Hamadani <mridahamadani@gmail.com>
Co-authored-by: Rida Hamadani <mridahamadani@gmail.com>
Co-authored-by: Rida Hamadani <mridahamadani@gmail.com>
Supersedes #33519