Zulip Chat Archive
Stream: maths
Topic: Last step; Smoothness of vector bundle of alternating maps
Sam Lindauer (Feb 17 2025 at 16:40):
Hey all,
I am working on differential forms. They are defined using the smooth vector bundle of continuous alternating maps. Definitionally, this is finished. I am only missing a part of the proof of smoothness for the vector bundle of continuous alternating maps. See #mwe below (it is quite long because some of the necessary definitions and instances are not yet in mathlib).
Any help or insight is sincerely appreciated!
Sam
import Mathlib
noncomputable section
open scoped Manifold
variable {π ΞΉ E F G : Type*}
[NontriviallyNormedField π] [Fintype ΞΉ]
[NormedAddCommGroup E] [NormedSpace π E]
[NormedAddCommGroup F] [NormedSpace π F]
[NormedAddCommGroup G] [NormedSpace π G]
/- Additional setup from different Mathlib branch -/
instance instSeminormedAddCommGroup : SeminormedAddCommGroup (E [β^ΞΉ]βL[π] F) where
toPseudoMetricSpace := .induced ContinuousAlternatingMap.toContinuousMultilinearMap inferInstance
__ := SeminormedAddCommGroup.induced _ _ (ContinuousAlternatingMap.toMultilinearAddHom : E [β^ΞΉ]βL[π] F β+ _)
norm f := βf.toContinuousMultilinearMapβ
@[simp] theorem norm_toContinuousMultilinearMap (f : E [β^ΞΉ]βL[π] F) : βf.1β = βfβ := rfl
theorem ContinuousAlternatingMap.norm_compContinuousLinearMap_le (f : F [β^ΞΉ]βL[π] G)
(g : E βL[π] F) : βf.compContinuousLinearMap gβ β€ βfβ * (βgβ ^ Fintype.card ΞΉ) :=
(f.1.norm_compContinuousLinearMap_le _).trans_eq <| by simp
instance normedAddCommGroup : NormedAddCommGroup (E [β^ΞΉ]βL[π] F) :=
NormedAddCommGroup.ofSeparation fun _f hf β¦
ContinuousAlternatingMap.toContinuousMultilinearMap_injective <| norm_eq_zero.mp hf
instance instNormedSpace {π' : Type*} [NormedField π'] [NormedSpace π' F] [SMulCommClass π π' F] :
NormedSpace π' (E [β^ΞΉ]βL[π] F) :=
β¨fun c f β¦ f.1.opNorm_smul_le cβ©
/- Function definition -/
def ContinuousAlternatingMap.compContinuousLinearMapCLM (f : E βL[π] F) :
(F [β^ΞΉ]βL[π] G) βL[π] (E [β^ΞΉ]βL[π] G) :=
LinearMap.mkContinuous
(ContinuousAlternatingMap.compContinuousLinearMapβ f) (βfβ ^ Fintype.card ΞΉ) fun g β¦
(g.norm_compContinuousLinearMap_le f).trans_eq (mul_comm _ _)
/- Proof of smoothness -/
theorem ContinuousAlternatingMap.compContinuousLinearMapCLM_contMDiff :
ContMDiff π(π, (E βL[π] E)) π(π, ((E [β^ΞΉ]βL[π] G) βL[π] (E [β^ΞΉ]βL[π] G))) β€
(fun (p : (E βL[π] E)) β¦ (ContinuousAlternatingMap.compContinuousLinearMapCLM p :
((E [β^ΞΉ]βL[π] G) βL[π] (E [β^ΞΉ]βL[π] G)))) := by
sorry
Patrick Massot (Feb 17 2025 at 16:46):
@Floris van Doorn or @Heather Macbeth can probably help.
SΓ©bastien GouΓ«zel (Feb 17 2025 at 16:57):
I'm working on this.
SΓ©bastien GouΓ«zel (Feb 19 2025 at 16:39):
In #22089, there is the following theorem:
lemma analyticOn_uncurry_compContinuousLinearMap :
AnalyticOn π (fun (p : (Ξ i, Fm i βL[π] Em i) Γ (ContinuousMultilinearMap π Em G))
β¦ p.2.compContinuousLinearMap p.1) t := ...
Hopefully, you can proceed from there (taking inspiration from the proof if needed, or writing your map as the composition of this one, and linear maps).
Unfortunately, #22089 uncovered some API gaps, so it will take some time (and I will need to split it into several PRs) before it can get in.
SΓ©bastien GouΓ«zel (Feb 19 2025 at 20:46):
The first PR towards this is #22102, which splits the file CPolynomial.lean
in two. This is necessary before further refactors. This is purely a splitting PR, so essentially trivial.
Sam Lindauer (Feb 20 2025 at 11:03):
I'll try to implement this at a later date, you'll hear from me if I managed or not. Thanks immensely for your time, this will surely help!
SΓ©bastien GouΓ«zel (Feb 21 2025 at 10:36):
The analyticity is proved in #22089. I can split it if it helps, but since it's only +317/-53, I think it makes sense to keep everyting in one single PR.
Patrick Massot (Feb 21 2025 at 11:19):
I am surprised to see no fun_prop
annotation anywhere in this PR. Is there something that blocks fun_prop
here?
SΓ©bastien GouΓ«zel (Feb 21 2025 at 12:09):
As far as I can tell, fun_prop
is not used for CPolynomialAt
, which is the bulk of the PR. More importantly, what I prove is
AnalyticAt π (fun (p : (Ξ i, Fm i βL[π] Em i) Γ (ContinuousMultilinearMap π Em G))
β¦ p.2.compContinuousLinearMap p.1) q
but this one is not a good candidate for fun_prop
: it should rather be the compositional version saying that, if f
and g
are analytic, then x β¦ (f x).compContinuousLinearMap (g x)
is analytic. Except that the original poster doesn't need this version, but rather the version in C^k
smoothness. It would make sense to add all these, but the PR is already pretty long. Tell me if you want me to add them to the PR nevertheless!
Patrick Massot (Feb 21 2025 at 13:46):
Yes, my question is precisely: why donβt we use fun_prop
for CPolynomialAt
?
SΓ©bastien GouΓ«zel (Feb 21 2025 at 14:21):
That's a good question, but that would be for another PR.
Sam Lindauer (Mar 21 2025 at 12:08):
I have the feeling I am almost there, @SΓ©bastien GouΓ«zel . At this point, I have proven an auxiliary lemma that proves a close relative to what we want to prove for continuous multilinear maps, namely the following (it fits into the #mwe above)
theorem ContinuousMultilinearMap.compContinuousLinearMapL_diag_contDiff :
ContDiff π β€ (fun p : E βL[π] E β¦
(ContinuousMultilinearMap.compContinuousLinearMapL (fun _ : ΞΉ β¦ p) :
ContinuousMultilinearMap π (fun _ β¦ E) G βL[π] ContinuousMultilinearMap π (fun _ β¦ E) G)) := by
let Ο : ContinuousMultilinearMap π (fun _ : ΞΉ β¦ E βL[π] E) _ :=
ContinuousMultilinearMap.compContinuousLinearMapContinuousMultilinear
π (fun _ : ΞΉ β¦ E) (fun _ : ΞΉ β¦ E) G
show ContDiff π β€ (fun p : E βL[π] E β¦ Ο (fun _ : ΞΉ β¦ p))
apply ContDiff.comp
Β· apply ContinuousMultilinearMap.contDiff
Β· apply contDiff_pi.mpr
intro _
apply contDiff_id
Then, I have created a linear equivalence between alternating and multilinear maps using the inclusion and the alternatization as follows (not fully proven yet, fits into #mwe above if [DecidableEq ΞΉ]
is added).
def _root_.ContinuousLinearEquiv.ContinuousAlternatingMapContinuousMultilinearMapEquiv :
(E [β^ΞΉ]βL[π] G) βL[π] (ContinuousMultilinearMap π (ΞΉ := ΞΉ) (fun x β¦ E) G) where
toFun := ContinuousAlternatingMap.toContinuousMultilinearMap
invFun := ContinuousMultilinearMap.alternatization
map_add' _ _ := rfl
map_smul' _ _ := rfl
left_inv := sorry
right_inv := sorry
continuous_toFun := ContinuousAlternatingMap.continuous_toContinuousMultilinearMap
continuous_invFun := sorry
Finally, I have gotten the proof of the theorem up to a similar statement to ContinuousMultilinearMap.compContinuousLinearMapL_diag_contDiff
but the closing step eludes me. This is the proof so far (also needs [DecidableEq ΞΉ]
to fit into #mwe):
theorem ContinuousAlternatingMap.compContinuousLinearMapCLM_contMDiff :
ContMDiff π(π, (E βL[π] E)) π(π, ((E [β^ΞΉ]βL[π] G) βL[π] (E [β^ΞΉ]βL[π] G))) β€
(fun (p : (E βL[π] E)) β¦ (ContinuousAlternatingMap.compContinuousLinearMapCLM p :
((E [β^ΞΉ]βL[π] G) βL[π] (E [β^ΞΉ]βL[π] G)))) := by
rw [contMDiff_iff_contDiff]
let ΞΈ : (E [β^ΞΉ]βL[π] G) βL[π] (ContinuousMultilinearMap π (ΞΉ := ΞΉ) (fun x β¦ E) G) :=
ContinuousLinearEquiv.ContinuousAlternatingMapContinuousMultilinearMapEquiv
let Ξ : ((E [β^ΞΉ]βL[π] G) βL[π] (E [β^ΞΉ]βL[π] G)) βL[π]
((ContinuousMultilinearMap π (ΞΉ := ΞΉ) (fun x β¦ E) G) βL[π]
(ContinuousMultilinearMap π (ΞΉ := ΞΉ) (fun x β¦ E) G)) :=
ContinuousLinearEquiv.arrowCongr ΞΈ ΞΈ
rw[β ContinuousLinearEquiv.comp_contDiff_iff (π := π)
(F := ((E [β^ΞΉ]βL[π] G) βL[π] (E [β^ΞΉ]βL[π] G)))
(G := ((ContinuousMultilinearMap π (ΞΉ := ΞΉ) (fun x β¦ E) G) βL[π]
(ContinuousMultilinearMap π (ΞΉ := ΞΉ) (fun x β¦ E) G))) Ξ]
sorry
Thanks in advance!
Sam Lindauer (Mar 21 2025 at 12:09):
In case that helps, here is the full #mwe :
import Mathlib
noncomputable section
open scoped Manifold
variable {π ΞΉ E F G : Type*}
[NontriviallyNormedField π]
[Fintype ΞΉ]
[NormedAddCommGroup E] [NormedSpace π E]
[NormedAddCommGroup F] [NormedSpace π F]
[NormedAddCommGroup G] [NormedSpace π G]
/- Additional setup from different Mathlib branch -/
instance instSeminormedAddCommGroup : SeminormedAddCommGroup (E [β^ΞΉ]βL[π] F) where
toPseudoMetricSpace := .induced ContinuousAlternatingMap.toContinuousMultilinearMap inferInstance
__ := SeminormedAddCommGroup.induced _ _ (ContinuousAlternatingMap.toMultilinearAddHom : E [β^ΞΉ]βL[π] F β+ _)
norm f := βf.toContinuousMultilinearMapβ
@[simp] theorem norm_toContinuousMultilinearMap (f : E [β^ΞΉ]βL[π] F) : βf.1β = βfβ := rfl
theorem ContinuousAlternatingMap.norm_compContinuousLinearMap_le (f : F [β^ΞΉ]βL[π] G)
(g : E βL[π] F) : βf.compContinuousLinearMap gβ β€ βfβ * (βgβ ^ Fintype.card ΞΉ) :=
(f.1.norm_compContinuousLinearMap_le _).trans_eq <| by simp
instance normedAddCommGroup : NormedAddCommGroup (E [β^ΞΉ]βL[π] F) :=
NormedAddCommGroup.ofSeparation fun _f hf β¦
ContinuousAlternatingMap.toContinuousMultilinearMap_injective <| norm_eq_zero.mp hf
instance instNormedSpace {π' : Type*} [NormedField π'] [NormedSpace π' F] [SMulCommClass π π' F] :
NormedSpace π' (E [β^ΞΉ]βL[π] F) :=
β¨fun c f β¦ f.1.opNorm_smul_le cβ©
/- Function definition -/
def ContinuousAlternatingMap.compContinuousLinearMapCLM (f : E βL[π] F) :
(F [β^ΞΉ]βL[π] G) βL[π] (E [β^ΞΉ]βL[π] G) :=
LinearMap.mkContinuous
(ContinuousAlternatingMap.compContinuousLinearMapβ f) (βfβ ^ Fintype.card ΞΉ) fun g β¦
(g.norm_compContinuousLinearMap_le f).trans_eq (mul_comm _ _)
theorem ContinuousMultilinearMap.compContinuousLinearMapL_diag_contDiff :
ContDiff π β€ (fun p : E βL[π] E β¦
(ContinuousMultilinearMap.compContinuousLinearMapL (fun _ : ΞΉ β¦ p) :
ContinuousMultilinearMap π (fun _ β¦ E) G βL[π] ContinuousMultilinearMap π (fun _ β¦ E) G)) := by
let Ο : ContinuousMultilinearMap π (fun _ : ΞΉ β¦ E βL[π] E) _ :=
ContinuousMultilinearMap.compContinuousLinearMapContinuousMultilinear
π (fun _ : ΞΉ β¦ E) (fun _ : ΞΉ β¦ E) G
show ContDiff π β€ (fun p : E βL[π] E β¦ Ο (fun _ : ΞΉ β¦ p))
apply ContDiff.comp
Β· apply ContinuousMultilinearMap.contDiff
Β· apply contDiff_pi.mpr
intro _
apply contDiff_id
variable [DecidableEq ΞΉ]
def _root_.ContinuousLinearEquiv.ContinuousAlternatingMapContinuousMultilinearMapEquiv :
(E [β^ΞΉ]βL[π] G) βL[π] (ContinuousMultilinearMap π (ΞΉ := ΞΉ) (fun x β¦ E) G) where
toFun := ContinuousAlternatingMap.toContinuousMultilinearMap
invFun := ContinuousMultilinearMap.alternatization
map_add' _ _ := rfl
map_smul' _ _ := rfl
left_inv := sorry
right_inv := sorry
continuous_toFun := ContinuousAlternatingMap.continuous_toContinuousMultilinearMap
continuous_invFun := sorry
/- Proof of smoothness -/
theorem ContinuousAlternatingMap.compContinuousLinearMapCLM_contMDiff :
ContMDiff π(π, (E βL[π] E)) π(π, ((E [β^ΞΉ]βL[π] G) βL[π] (E [β^ΞΉ]βL[π] G))) β€
(fun (p : (E βL[π] E)) β¦ (ContinuousAlternatingMap.compContinuousLinearMapCLM p :
((E [β^ΞΉ]βL[π] G) βL[π] (E [β^ΞΉ]βL[π] G)))) := by
rw [contMDiff_iff_contDiff]
let ΞΈ : (E [β^ΞΉ]βL[π] G) βL[π] (ContinuousMultilinearMap π (ΞΉ := ΞΉ) (fun x β¦ E) G) :=
ContinuousLinearEquiv.ContinuousAlternatingMapContinuousMultilinearMapEquiv
let Ξ : ((E [β^ΞΉ]βL[π] G) βL[π] (E [β^ΞΉ]βL[π] G)) βL[π]
((ContinuousMultilinearMap π (ΞΉ := ΞΉ) (fun x β¦ E) G) βL[π]
(ContinuousMultilinearMap π (ΞΉ := ΞΉ) (fun x β¦ E) G)) :=
ContinuousLinearEquiv.arrowCongr ΞΈ ΞΈ
rw[β ContinuousLinearEquiv.comp_contDiff_iff (π := π)
(F := ((E [β^ΞΉ]βL[π] G) βL[π] (E [β^ΞΉ]βL[π] G)))
(G := ((ContinuousMultilinearMap π (ΞΉ := ΞΉ) (fun x β¦ E) G) βL[π]
(ContinuousMultilinearMap π (ΞΉ := ΞΉ) (fun x β¦ E) G))) Ξ]
sorry
SΓ©bastien GouΓ«zel (Mar 21 2025 at 12:23):
Sam Lindauer said:
Then, I have created a linear equivalence between alternating and multilinear maps using the inclusion and the alternatization as follows (not fully proven yet, fits into #mwe above if
[DecidableEq ΞΉ]
is added).
This can not be correct, unfortunately: there are more multilinear maps than alternating maps, so you can't have such an equivalence (for dimension reasons, for instance). What you should do instead is build on the space of alternative maps the analogues of the results we have for multilinear maps (possibly using the multilinear maps version, and then proving that what you get is alternating).
Sam Lindauer (Mar 21 2025 at 13:01):
SΓ©bastien GouΓ«zel said:
Sam Lindauer said:
Then, I have created a linear equivalence between alternating and multilinear maps using the inclusion and the alternatization as follows (not fully proven yet, fits into #mwe above if
[DecidableEq ΞΉ]
is added).This can not be correct, unfortunately: there are more multilinear maps than alternating maps, so you can't have such an equivalence (for dimension reasons, for instance). What you should do instead is build on the space of alternative maps the analogues of the results we have for multilinear maps (possibly using the multilinear maps version, and then proving that what you get is alternating).
I see, I was bit skeptical already, but good to have it assured. It's a bit bigger of a task than I initially expected then. Thanks for your quick reply!
Last updated: May 02 2025 at 03:31 UTC