From ad2add5823c39e03d314cbb940bd1799f40ea6c5 Mon Sep 17 00:00:00 2001 From: Michael Rothgang Date: Mon, 1 Jun 2026 15:39:43 +0200 Subject: [PATCH 1/3] chore: use elaborators more --- SphereEversion/Global/OneJetBundle.lean | 37 ++++++++++------------ SphereEversion/Global/OneJetSec.lean | 8 ++--- SphereEversion/Global/SmoothEmbedding.lean | 6 ++-- 3 files changed, 23 insertions(+), 28 deletions(-) diff --git a/SphereEversion/Global/OneJetBundle.lean b/SphereEversion/Global/OneJetBundle.lean index 80eabca1..51f911cd 100644 --- a/SphereEversion/Global/OneJetBundle.lean +++ b/SphereEversion/Global/OneJetBundle.lean @@ -337,12 +337,12 @@ theorem contMDiff_oneJetBundle_proj : theorem ContMDiff.oneJetBundle_proj {f : N โ†’ JยนMM'} (hf : ContMDiff J ((I.prod I').prod ๐“˜(๐•œ, E โ†’L[๐•œ] E')) โˆž f) : - ContMDiff J (I.prod I') โˆž fun x โ†ฆ (f x).1 := + CMDiff โˆž fun x โ†ฆ (f x).1 := contMDiff_oneJetBundle_proj.comp hf theorem ContMDiffAt.oneJetBundle_proj {f : N โ†’ JยนMM'} {xโ‚€ : N} (hf : ContMDiffAt J ((I.prod I').prod ๐“˜(๐•œ, E โ†’L[๐•œ] E')) โˆž f xโ‚€) : - ContMDiffAt J (I.prod I') โˆž (fun x โ†ฆ (f x).1) xโ‚€ := + CMDiffAt โˆž (fun x โ†ฆ (f x).1) xโ‚€ := (contMDiff_oneJetBundle_proj _).comp xโ‚€ hf /-- The constructor of `OneJetBundle`, in case `Sigma.mk` will not give the right type. -/ @@ -365,11 +365,10 @@ theorem oneJetBundle_mk_snd {x : M} {y : M'} {f : OneJetSpace I I' (x, y)} : set_option backward.isDefEq.respectTransparency false in theorem contMDiffAt_oneJetBundle {f : N โ†’ JยนMM'} {xโ‚€ : N} : ContMDiffAt J ((I.prod I').prod ๐“˜(๐•œ, E โ†’L[๐•œ] E')) โˆž f xโ‚€ โ†” - CMDiffAt โˆž (fun x โ†ฆ (f x).1.1) xโ‚€ โˆง - CMDiffAt โˆž (fun x โ†ฆ (f x).1.2) xโ‚€ โˆง - ContMDiffAt J ๐“˜(๐•œ, E โ†’L[๐•œ] E') โˆž - (inTangentCoordinates I I' (fun x โ†ฆ (f x).1.1) (fun x โ†ฆ (f x).1.2) (fun x โ†ฆ (f x).2) - xโ‚€) xโ‚€ := by + CMDiffAt โˆž (fun x โ†ฆ (f x).1.1) xโ‚€ โˆง CMDiffAt โˆž (fun x โ†ฆ (f x).1.2) xโ‚€ โˆง + CMDiffAt โˆž + (inTangentCoordinates I I' (fun x โ†ฆ (f x).1.1) (fun x โ†ฆ (f x).1.2) (fun x โ†ฆ (f x).2) xโ‚€) + xโ‚€ := by simp_rw [Bundle.contMDiffAt_totalSpace, contMDiffAt_prod_iff, and_assoc, oneJetBundle_trivializationAt] rfl @@ -383,7 +382,7 @@ theorem contMDiffAt_oneJetBundle_mk {f : N โ†’ M} {g : N โ†’ M'} {ฯ• : N โ†’ E theorem ContMDiffAt.oneJetBundle_mk {f : N โ†’ M} {g : N โ†’ M'} {ฯ• : N โ†’ E โ†’L[๐•œ] E'} {xโ‚€ : N} (hf : CMDiffAt โˆž f xโ‚€) (hg : CMDiffAt โˆž g xโ‚€) - (hฯ• : ContMDiffAt J ๐“˜(๐•œ, E โ†’L[๐•œ] E') โˆž (inTangentCoordinates I I' f g ฯ• xโ‚€) xโ‚€) : + (hฯ• : CMDiffAt โˆž (inTangentCoordinates I I' f g ฯ• xโ‚€) xโ‚€) : ContMDiffAt J ((I.prod I').prod ๐“˜(๐•œ, E โ†’L[๐•œ] E')) โˆž (fun x โ†ฆ OneJetBundle.mk (f x) (g x) (ฯ• x) : N โ†’ JยนMM') xโ‚€ := contMDiffAt_oneJetBundle.mpr โŸจhf, hg, hฯ•โŸฉ @@ -421,9 +420,9 @@ theorem ContinuousAt.inTangentCoordinates_comp {f : N โ†’ M} {g : N โ†’ M'} {h : theorem ContMDiffAt.clm_comp_inTangentCoordinates {f : N โ†’ M} {g : N โ†’ M'} {h : N โ†’ N'} {ฯ•' : N โ†’ E' โ†’L[๐•œ] F'} {ฯ• : N โ†’ E โ†’L[๐•œ] E'} {n : N} (hg : ContinuousAt g n) - (hฯ•' : ContMDiffAt J ๐“˜(๐•œ, E' โ†’L[๐•œ] F') โˆž (inTangentCoordinates I' J' g h ฯ•' n) n) - (hฯ• : ContMDiffAt J ๐“˜(๐•œ, E โ†’L[๐•œ] E') โˆž (inTangentCoordinates I I' f g ฯ• n) n) : - ContMDiffAt J ๐“˜(๐•œ, E โ†’L[๐•œ] F') โˆž (inTangentCoordinates I J' f h (fun n โ†ฆ ฯ•' n โˆ˜L ฯ• n) n) n := + (hฯ•' : CMDiffAt โˆž (inTangentCoordinates I' J' g h ฯ•' n) n) + (hฯ• : CMDiffAt โˆž (inTangentCoordinates I I' f g ฯ• n) n) : + CMDiffAt โˆž (inTangentCoordinates I J' f h (fun n โ†ฆ ฯ•' n โˆ˜L ฯ• n) n) n := (hฯ•'.clm_comp hฯ•).congr_of_eventuallyEq hg.inTangentCoordinates_comp variable (I') @@ -518,13 +517,11 @@ theorem OneJetBundle.map_id (x : JยนMM') : theorem ContMDiffAt.oneJetBundle_map {f : M'' โ†’ M โ†’ N} {g : M'' โ†’ M' โ†’ N'} {xโ‚€ : M''} {Dfinv : โˆ€ (z : M'') (x : M), TangentSpace% (f z x) โ†’L[๐•œ] TangentSpace% x} {k : M'' โ†’ JยนMM'} - (hf : ContMDiffAt (I''.prod I) J โˆž f.uncurry (xโ‚€, (k xโ‚€).1.1)) - (hg : ContMDiffAt (I''.prod I') J' โˆž g.uncurry (xโ‚€, (k xโ‚€).1.2)) + (hf : CMDiffAt โˆž f.uncurry (xโ‚€, (k xโ‚€).1.1)) + (hg : CMDiffAt โˆž g.uncurry (xโ‚€, (k xโ‚€).1.2)) (hDfinv : - ContMDiffAt I'' ๐“˜(๐•œ, F โ†’L[๐•œ] E) โˆž - (inTangentCoordinates J I (fun x โ†ฆ f x (k x).1.1) (fun x โ†ฆ (k x).1.1) - (fun x โ†ฆ Dfinv x (k x).1.1) xโ‚€) - xโ‚€) + CMDiffAt โˆž (inTangentCoordinates J I (fun x โ†ฆ f x (k x).1.1) (fun x โ†ฆ (k x).1.1) + (fun x โ†ฆ Dfinv x (k x).1.1) xโ‚€) xโ‚€) (hk : ContMDiffAt I'' ((I.prod I').prod ๐“˜(๐•œ, E โ†’L[๐•œ] E')) โˆž k xโ‚€) : ContMDiffAt I'' ((J.prod J').prod ๐“˜(๐•œ, F โ†’L[๐•œ] F')) โˆž (fun z โ†ฆ OneJetBundle.map I' J' (f z) (g z) (Dfinv z) (k z)) xโ‚€ := by @@ -532,7 +529,7 @@ theorem ContMDiffAt.oneJetBundle_map {f : M'' โ†’ M โ†’ N} {g : M'' โ†’ M' โ†’ N refine ContMDiffAt.oneJet_comp _ _ ?_ ?_ ยท refine ContMDiffAt.oneJet_comp _ _ ?_ ?_ ยท refine hk.2.1.oneJetBundle_mk (hg.comp xโ‚€ (contMDiffAt_id.prodMk hk.2.1)) ?_ - exact ContMDiffAt.mfderiv g (fun x โ†ฆ (k x).1.2) hg hk.2.1 le_rfl + exact hg.mfderiv g (fun x โ†ฆ (k x).1.2) hk.2.1 le_rfl ยท exact hk.1.oneJetBundle_mk hk.2.1 hk.2.2 apply (hf.comp xโ‚€ (contMDiffAt_id.prodMk hk.1)).oneJetBundle_mk hk.1 apply hDfinv @@ -554,9 +551,9 @@ theorem mapLeft_eq_map (f : M โ†’ N) (Dfinv : โˆ€ x : M, TangentSpace% (f x) โ†’ theorem ContMDiffAt.mapLeft {f : N' โ†’ M โ†’ N} {xโ‚€ : N'} {Dfinv : โˆ€ (z : N') (x : M), TangentSpace% (f z x) โ†’L[๐•œ] TangentSpace% x} {g : N' โ†’ JยนMM'} - (hf : ContMDiffAt (J'.prod I) J โˆž f.uncurry (xโ‚€, (g xโ‚€).1.1)) + (hf : CMDiffAt โˆž f.uncurry (xโ‚€, (g xโ‚€).1.1)) (hDfinv : - ContMDiffAt J' ๐“˜(๐•œ, F โ†’L[๐•œ] E) โˆž + CMDiffAt โˆž (inTangentCoordinates J I (fun x โ†ฆ f x (g x).1.1) (fun x โ†ฆ (g x).1.1) (fun x โ†ฆ Dfinv x (g x).1.1) xโ‚€) xโ‚€) diff --git a/SphereEversion/Global/OneJetSec.lean b/SphereEversion/Global/OneJetSec.lean index 6e73c25e..892d0fae 100644 --- a/SphereEversion/Global/OneJetSec.lean +++ b/SphereEversion/Global/OneJetSec.lean @@ -224,7 +224,7 @@ protected theorem contMDiff (S : FamilyOneJetSec I M I' M' J N) : S.contMDiff' theorem contMDiff_bs (S : FamilyOneJetSec I M I' M' J N) : - ContMDiff (J.prod I) I' โˆž fun p : N ร— M โ†ฆ S.bs p.1 p.2 := + CMDiff โˆž fun p : N ร— M โ†ฆ S.bs p.1 p.2 := contMDiff_oneJetBundle_proj.snd.comp S.contMDiff theorem contMDiff_coe_bs (S : FamilyOneJetSec I M I' M' J N) {p : N} : CMDiff โˆž (S.bs p) := @@ -244,14 +244,12 @@ def reindex (S : FamilyOneJetSec I M I' M' J' N') (f : C^โˆžโŸฎJ, N; J', N'โŸฏ) def uncurry (S : FamilyOneJetSec I M I' M' IP P) : OneJetSec (IP.prod I) (P ร— M) I' M' where bs p := S.bs p.1 p.2 ฯ• p := - (mfderiv (IP.prod I) I' (fun z : P ร— M โ†ฆ S.bs z.1 p.2) p) + - S.ฯ• p.1 p.2 โˆ˜L mfderiv (IP.prod I) I Prod.snd p + (mfderiv% (fun z : P ร— M โ†ฆ S.bs z.1 p.2) p) + S.ฯ• p.1 p.2 โˆ˜L mfderiv (IP.prod I) I Prod.snd p contMDiff' := by refine ContMDiff.oneJet_add ?_ ?_ ยท intro y refine contMDiffAt_id.oneJetBundle_mk (S.contMDiff_bs y) ?_ - have : ContMDiffAt ((IP.prod I).prod (IP.prod I)) I' โˆž - (Function.uncurry fun x z : P ร— M โ†ฆ S.bs z.1 x.2) (y, y) := + have : CMDiffAt โˆž (Function.uncurry fun x z : P ร— M โ†ฆ S.bs z.1 x.2) (y, y) := S.contMDiff_bs.comp (contMDiff_snd.fst.prodMk contMDiff_fst.snd) (y, y) apply ContMDiffAt.mfderiv (fun x z : P ร— M โ†ฆ S.bs z.1 x.2) id this contMDiffAt_id (mod_cast le_top) diff --git a/SphereEversion/Global/SmoothEmbedding.lean b/SphereEversion/Global/SmoothEmbedding.lean index 1bdbb8a8..8062257f 100644 --- a/SphereEversion/Global/SmoothEmbedding.lean +++ b/SphereEversion/Global/SmoothEmbedding.lean @@ -86,7 +86,7 @@ variable [IsManifold I โˆž M] [IsManifold I' โˆž M'] /- Note that we are slightly abusing the fact that `TangentSpace I x` and `TangentSpace I (f.invFun (f x))` are both definitionally `E` below. -/ -def fderiv (x : M) : TangentSpace% x โ‰ƒL[๐•œ] TangentSpace% (f x) := +def fderiv (x : M) : TangentSpace I x โ‰ƒL[๐•œ] TangentSpace I' (f x) := have hโ‚ : MDiffAt f.invFun (f x) := ((f.contMDiffOn_inv (f x) (mem_range_self x)).mdifferentiableWithinAt (by simp)).mdifferentiableAt @@ -419,8 +419,8 @@ open Function /-- This is lemma `lem:smooth_updating` in the blueprint. -/ theorem contMDiff_update (f : M' โ†’ M โ†’ N) (g : M' โ†’ X โ†’ Y) {k : M' โ†’ M} {K : Set X} - (hK : IsClosed (ฯ† '' K)) (hf : ContMDiff (IM'.prod IM) IN โˆž (uncurry f)) - (hg : ContMDiff (IM'.prod IX) IY โˆž (uncurry g)) (hk : CMDiff โˆž k) + (hK : IsClosed (ฯ† '' K)) (hf : CMDiff โˆž (uncurry f)) + (hg : CMDiff โˆž (uncurry g)) (hk : CMDiff โˆž k) (hg' : โˆ€ y x, x โˆ‰ K โ†’ f y (ฯ† x) = ฯˆ (g y x)) : CMDiff โˆž fun x โ†ฆ update ฯ† ฯˆ (f x) (g x) (k x) := by have hK' : โˆ€ x, k x โˆ‰ ฯ† '' K โ†’ update ฯ† ฯˆ (f x) (g x) (k x) = f x (k x) := fun x hx โ†ฆ From 0150d4a53a999d24574ecf90730a232a8e44e000 Mon Sep 17 00:00:00 2001 From: Michael Rothgang Date: Sun, 26 Oct 2025 21:53:29 +0100 Subject: [PATCH 2/3] ExistsOfConvex: remove last use of local notation The new elaborators are similarly short --- SphereEversion/ToMathlib/ExistsOfConvex.lean | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/SphereEversion/ToMathlib/ExistsOfConvex.lean b/SphereEversion/ToMathlib/ExistsOfConvex.lean index eeb90b53..9113be1b 100644 --- a/SphereEversion/ToMathlib/ExistsOfConvex.lean +++ b/SphereEversion/ToMathlib/ExistsOfConvex.lean @@ -110,10 +110,6 @@ variable {Hโ‚ Mโ‚ Hโ‚‚ Mโ‚‚ : Type*} [TopologicalSpace Hโ‚‚] (Iโ‚‚ : ModelWithCorners โ„ Eโ‚‚ Hโ‚‚) [TopologicalSpace Mโ‚‚] [ChartedSpace Hโ‚‚ Mโ‚‚] [IsManifold Iโ‚‚ โˆž Mโ‚‚] -@[inherit_doc] local notation "๐“’" => ContMDiff (Iโ‚.prod Iโ‚‚) ๐“˜(โ„, F) - -@[inherit_doc] local notation "๐“’_on" => ContMDiffOn (Iโ‚.prod Iโ‚‚) ๐“˜(โ„, F) - omit [FiniteDimensional โ„ Eโ‚] [FiniteDimensional โ„ Eโ‚‚] [IsManifold Iโ‚ โˆž Mโ‚] [IsManifold Iโ‚‚ โˆž Mโ‚‚] in theorem reallyConvex_contMDiffAtProd {x : Mโ‚} (n : โ„•โˆž) : @@ -134,8 +130,8 @@ omit [FiniteDimensional โ„ Eโ‚‚] [IsManifold Iโ‚‚ โˆž Mโ‚‚] in theorem exists_contMDiff_of_convexโ‚‚ {P : Mโ‚ โ†’ (Mโ‚‚ โ†’ F) โ†’ Prop} [SigmaCompactSpace Mโ‚] [T2Space Mโ‚] (hP : โˆ€ x, Convex โ„ {f | P x f}) {n : โ„•โˆž} (hP' : โˆ€ x : Mโ‚, โˆƒ U โˆˆ ๐“ x, โˆƒ f : Mโ‚ โ†’ Mโ‚‚ โ†’ F, - ๐“’_on n (uncurry f) (U ร—หข (univ : Set Mโ‚‚)) โˆง โˆ€ y โˆˆ U, P y (f y)) : - โˆƒ f : Mโ‚ โ†’ Mโ‚‚ โ†’ F, ๐“’ n (uncurry f) โˆง โˆ€ x, P x (f x) := by + CMDiff[U ร—หข (univ : Set Mโ‚‚)] n (uncurry f) โˆง โˆ€ y โˆˆ U, P y (f y)) : + โˆƒ f : Mโ‚ โ†’ Mโ‚‚ โ†’ F, CMDiff n (uncurry f) โˆง โˆ€ x, P x (f x) := by let PP : (ฮฃ x : Mโ‚, Germ (๐“ x) (Mโ‚‚ โ†’ F)) โ†’ Prop := fun p โ†ฆ p.2.ContMDiffAtProd Iโ‚ Iโ‚‚ n โˆง P p.1 p.2.value have hPP : โˆ€ x : Mโ‚, ReallyConvex (smoothGerm Iโ‚ x) {ฯ† | PP โŸจx, ฯ†โŸฉ} := fun x โ†ฆ by From 07940fe500b39833bb9e174227c430e3b579c47a Mon Sep 17 00:00:00 2001 From: Michael Rothgang Date: Mon, 1 Jun 2026 15:55:55 +0200 Subject: [PATCH 3/3] Use more --- SphereEversion/Global/Gromov.lean | 5 ++-- SphereEversion/Global/Immersion.lean | 24 +++++++++---------- SphereEversion/Global/OneJetBundle.lean | 3 +-- .../Global/ParametricityForFree.lean | 10 ++++---- SphereEversion/Global/Relation.lean | 4 ++-- SphereEversion/Global/TwistOneJetSec.lean | 15 ++++++------ 6 files changed, 28 insertions(+), 33 deletions(-) diff --git a/SphereEversion/Global/Gromov.lean b/SphereEversion/Global/Gromov.lean index beeeaf67..67910282 100644 --- a/SphereEversion/Global/Gromov.lean +++ b/SphereEversion/Global/Gromov.lean @@ -68,9 +68,8 @@ theorem RelMfld.Ample.satisfiesHPrinciple (hRample : R.Ample) (hRopen : IsOpen R change ContMDiffAt _ _ _ (f โˆ˜ fun p : โ„ ร— M โ†ฆ (a * p.1 + b, p.2)) (t, x) change ContMDiffAt _ _ _ f ((fun p : โ„ ร— M โ†ฆ (a * p.1 + b, p.2)) (t, x)) at h have : - ContMDiffAt (๐“˜(โ„, โ„).prod IM) (๐“˜(โ„, โ„).prod IM) โˆž (fun p : โ„ ร— M โ†ฆ (a * p.1 + b, p.2)) - (t, x) := - haveI hโ‚ : ContMDiffAt ๐“˜(โ„, โ„) ๐“˜(โ„, โ„) โˆž (fun t โ†ฆ a * t + b) t := + CMDiffAt โˆž (fun p : โ„ ร— M โ†ฆ (a * p.1 + b, p.2)) (t, x) := + haveI hโ‚ : CMDiffAt โˆž (fun t โ†ฆ a * t + b) t := contMDiffAt_iff_contDiffAt.mpr (((contDiffAt_id : ContDiffAt โ„ โˆž id t).const_smul a).add contDiffAt_const) hโ‚.prodMap contMDiffAt_id diff --git a/SphereEversion/Global/Immersion.lean b/SphereEversion/Global/Immersion.lean index 2abc9f9d..29dbb9be 100644 --- a/SphereEversion/Global/Immersion.lean +++ b/SphereEversion/Global/Immersion.lean @@ -142,7 +142,7 @@ theorem immersion_antipodal_sphere : Immersion (๐“ก n) ๐“˜(โ„, E) -- The other direction elaborates much worse. (contDiff_neg.contMDiff).comp (contMDiff_coe_sphere.of_le le_top) diff_injective x := by - change Injective (mfderiv (๐“ก n) ๐“˜(โ„, E) (-fun x : sphere (0 : E) 1 โ†ฆ (x : E)) x) + change Injective (mfderiv% (-fun x : sphere (0 : E) 1 โ†ฆ (x : E)) x) rw [mfderiv_neg] exact neg_injective.comp (mfderiv_coe_sphere_injective x) @@ -168,8 +168,7 @@ variable (ฯ‰ : Orientation โ„ E (Fin 3)) -- this result holds mutatis mutandis in `โ„^n` theorem smooth_bs : - ContMDiff (๐“˜(โ„, โ„).prod (๐“ก 2)) ๐“˜(โ„, E) โˆž - fun p : โ„ ร— (sphere (0 : E) 1) โ†ฆ (1 - p.1) โ€ข (p.2 : E) + p.1 โ€ข -(p.2: E) := by + CMDiff โˆž fun p : โ„ ร— (sphere (0 : E) 1) โ†ฆ (1 - p.1) โ€ข (p.2 : E) + p.1 โ€ข -(p.2: E) := by refine (ContMDiff.smul (I := ๐“˜(โ„)) ?_ ?_).add (contMDiff_fst.smul ?_) ยท exact (contDiff_const.sub contDiff_id).contMDiff.comp contMDiff_fst ยท exact (contMDiff_coe_sphere.of_le le_top).comp contMDiff_snd @@ -181,6 +180,8 @@ def formalEversionAux : FamilyOneJetSec (๐“ก 2) ๐•Šยฒ ๐“˜(โ„, E) E ๐“˜(โ„, (fun p : โ„ ร— ๐•Šยฒ โ†ฆ ฯ‰.rot (p.1, p.2)) (by intro p + -- Note: elaborators would infer another model on the domain, namely `๐“˜(โ„, โ„).prod ๐“˜(โ„, E)` + -- In any case, this should not work, as we have a product of normed spaces? have : ContMDiffAt ๐“˜(โ„, โ„ ร— E) ๐“˜(โ„, E โ†’L[โ„] E) โˆž ฯ‰.rot (p.1, p.2) := by refine ((ฯ‰.contDiff_rot ?_).of_le le_top).contMDiffAt exact ne_zero_of_mem_unit_sphere p.2 @@ -209,9 +210,9 @@ theorem formalEversionHolAtZero {t : โ„} (ht : t < 1 / 4) : (formalEversion E ฯ‰ t).toOneJetSec.IsHolonomic := by intro x change - mfderiv (๐“ก 2) ๐“˜(โ„, E) (fun y : ๐•Šยฒ โ†ฆ ((1 : โ„) - smoothStep t) โ€ข (y : E) + + mfderiv% (fun y : ๐•Šยฒ โ†ฆ ((1 : โ„) - smoothStep t) โ€ข (y : E) + smoothStep t โ€ข -(y : E)) x = - (ฯ‰.rot (smoothStep t, x)).comp (mfderiv (๐“ก 2) ๐“˜(โ„, E) (fun y : ๐•Šยฒ โ†ฆ (y : E)) x) + (ฯ‰.rot (smoothStep t, x)).comp (mfderiv% (fun y : ๐•Šยฒ โ†ฆ (y : E)) x) simp_rw [smoothStep.of_lt ht, ฯ‰.rot_zero, ContinuousLinearMap.id_comp] congr with y simp [smoothStep.of_lt ht] @@ -221,10 +222,10 @@ theorem formalEversionHolAtOne {t : โ„} (ht : 3 / 4 < t) : (formalEversion E ฯ‰ t).toOneJetSec.IsHolonomic := by intro x change - mfderiv (๐“ก 2) ๐“˜(โ„, E) (fun y : ๐•Šยฒ โ†ฆ ((1 : โ„) - smoothStep t) โ€ข (y : E) + + mfderiv% (fun y : ๐•Šยฒ โ†ฆ ((1 : โ„) - smoothStep t) โ€ข (y : E) + smoothStep t โ€ข -(y : E)) x = - (ฯ‰.rot (smoothStep t, x)).comp (mfderiv (๐“ก 2) ๐“˜(โ„, E) (fun y : ๐•Šยฒ โ†ฆ (y : E)) x) - trans mfderiv (๐“ก 2) ๐“˜(โ„, E) (-fun y : ๐•Šยฒ โ†ฆ (y : E)) x + (ฯ‰.rot (smoothStep t, x)).comp (mfderiv% (fun y : ๐•Šยฒ โ†ฆ (y : E)) x) + trans mfderiv% (-fun y : ๐•Šยฒ โ†ฆ (y : E)) x ยท congr 2 with y simp [smoothStep.of_gt ht] ext v @@ -285,13 +286,13 @@ variable {๐•œ : Type*} [NontriviallyNormedField ๐•œ] -- move to Mathlib.Geometry.Manifold.ContMDiff.Product lemma ContMDiff.prod_left {n : โ„•โˆž} (x : M) : - ContMDiff I' (I.prod I') n fun p : M' โ†ฆ (โŸจx, pโŸฉ : M ร— M') := by + CMDiff n fun p : M' โ†ฆ (โŸจx, pโŸฉ : M ร— M') := by rw [contMDiff_prod_iff] exact โŸจcontMDiff_const, contMDiff_idโŸฉ -- move to Mathlib.Geometry.Manifold.ContMDiff.Product theorem ContMDiff.uncurry_left {n : โ„•โˆž} {f : M โ†’ M' โ†’ P} - (hf : ContMDiff (I.prod I') IP n โ†ฟf) (x : M) : CMDiff n (f x) := by + (hf : CMDiff n โ†ฟf) (x : M) : CMDiff n (f x) := by have : f x = (uncurry f) โˆ˜ fun p : M' โ†ฆ โŸจx, pโŸฉ := by ext; simp -- or just `apply hf.comp (ContMDiff.prod_left I I' x)` rw [this]; exact hf.comp (ContMDiff.prod_left I I' x) @@ -300,8 +301,7 @@ end helper theorem sphere_eversion : โˆƒ f : โ„ โ†’ ๐•Šยฒ โ†’ E, - ContMDiff (๐“˜(โ„, โ„).prod (๐“ก 2)) ๐“˜(โ„, E) โˆž โ†ฟf โˆง - (f 0 = fun x : ๐•Šยฒ โ†ฆ (x : E)) โˆง (f 1 = fun x : ๐•Šยฒ โ†ฆ -(x : E)) โˆง + CMDiff โˆž โ†ฟf โˆง (f 0 = fun x : ๐•Šยฒ โ†ฆ (x : E)) โˆง (f 1 = fun x : ๐•Šยฒ โ†ฆ -(x : E)) โˆง โˆ€ t, Immersion (๐“ก 2) ๐“˜(โ„, E) (f t) โˆž := by classical let ฯ‰ : Orientation โ„ E (Fin 3) := diff --git a/SphereEversion/Global/OneJetBundle.lean b/SphereEversion/Global/OneJetBundle.lean index 51f911cd..651331d0 100644 --- a/SphereEversion/Global/OneJetBundle.lean +++ b/SphereEversion/Global/OneJetBundle.lean @@ -376,8 +376,7 @@ theorem contMDiffAt_oneJetBundle {f : N โ†’ JยนMM'} {xโ‚€ : N} : theorem contMDiffAt_oneJetBundle_mk {f : N โ†’ M} {g : N โ†’ M'} {ฯ• : N โ†’ E โ†’L[๐•œ] E'} {xโ‚€ : N} : ContMDiffAt J ((I.prod I').prod ๐“˜(๐•œ, E โ†’L[๐•œ] E')) โˆž (fun x โ†ฆ OneJetBundle.mk (f x) (g x) (ฯ• x) : N โ†’ JยนMM') xโ‚€ โ†” - CMDiffAt โˆž f xโ‚€ โˆง CMDiffAt โˆž g xโ‚€ โˆง - ContMDiffAt J ๐“˜(๐•œ, E โ†’L[๐•œ] E') โˆž (inTangentCoordinates I I' f g ฯ• xโ‚€) xโ‚€ := + CMDiffAt โˆž f xโ‚€ โˆง CMDiffAt โˆž g xโ‚€ โˆง CMDiffAt โˆž (inTangentCoordinates I I' f g ฯ• xโ‚€) xโ‚€ := contMDiffAt_oneJetBundle theorem ContMDiffAt.oneJetBundle_mk {f : N โ†’ M} {g : N โ†’ M'} {ฯ• : N โ†’ E โ†’L[๐•œ] E'} {xโ‚€ : N} diff --git a/SphereEversion/Global/ParametricityForFree.lean b/SphereEversion/Global/ParametricityForFree.lean index d125dff7..65fa455d 100644 --- a/SphereEversion/Global/ParametricityForFree.lean +++ b/SphereEversion/Global/ParametricityForFree.lean @@ -156,7 +156,7 @@ def FamilyFormalSol.uncurry (S : FamilyFormalSol IP P R) : FormalSol (R.relativi theorem FamilyFormalSol.uncurry_ฯ•' (S : FamilyFormalSol IP P R) (p : P ร— M) : S.uncurry.ฯ• p = - mfderiv IP I' (fun z โ†ฆ S.bs z p.2) p.1 โˆ˜L ContinuousLinearMap.fst โ„ EP E + + mfderiv% (fun z โ†ฆ S.bs z p.2) p.1 โˆ˜L ContinuousLinearMap.fst โ„ EP E + S.ฯ• p.1 p.2 โˆ˜L ContinuousLinearMap.snd โ„ EP E := S.toFamilyOneJetSec.uncurry_ฯ•' p @@ -169,17 +169,15 @@ def FamilyOneJetSec.curry (S : FamilyOneJetSec (IP.prod I) (P ร— M) I' M' J N) : rintro โŸจโŸจt, sโŸฉ, xโŸฉ refine contMDiffAt_snd.oneJetBundle_mk (S.contMDiff_bs.comp contMDiff_prod_assoc _) ?_ have h1 : - ContMDiffAt ((J.prod IP).prod I) ๐“˜(โ„, EP ร— E โ†’L[โ„] E') โˆž - (inTangentCoordinates (IP.prod I) I' (fun p : (N ร— P) ร— M โ†ฆ (p.1.2, p.2)) + CMDiffAt โˆž (inTangentCoordinates (IP.prod I) I' (fun p : (N ร— P) ร— M โ†ฆ (p.1.2, p.2)) (fun p : (N ร— P) ร— M โ†ฆ (S p.1.1).bs (p.1.2, p.2)) (fun p : (N ร— P) ร— M โ†ฆ (S p.1.1).ฯ• (p.1.2, p.2)) ((t, s), x)) ((t, s), x) := by apply (contMDiffAt_oneJetBundle.mp <| (S.contMDiff (t, (s, x))).comp ((t, s), x) (contMDiff_prod_assoc ((t, s), x))).2.2 have h2 : - ContMDiffAt ((J.prod IP).prod I) ๐“˜(โ„, E โ†’L[โ„] EP ร— E) โˆž - (inTangentCoordinates I (IP.prod I) Prod.snd (fun p : (N ร— P) ร— M โ†ฆ (p.1.2, p.2)) - (fun p : (N ร— P) ร— M โ†ฆ mfderiv I (IP.prod I) (fun x : M โ†ฆ (p.1.2, x)) p.2) ((t, s), x)) + CMDiffAt โˆž (inTangentCoordinates I (IP.prod I) Prod.snd (fun p : (N ร— P) ร— M โ†ฆ (p.1.2, p.2)) + (fun p : (N ร— P) ร— M โ†ฆ mfderiv% (fun x : M โ†ฆ (p.1.2, x)) p.2) ((t, s), x)) ((t, s), x) := by apply ContMDiffAt.mfderiv (fun (p : (N ร— P) ร— M) (x : M) โ†ฆ (p.1.2, x)) Prod.snd diff --git a/SphereEversion/Global/Relation.lean b/SphereEversion/Global/Relation.lean index 1438ed24..1b68ffe7 100644 --- a/SphereEversion/Global/Relation.lean +++ b/SphereEversion/Global/Relation.lean @@ -385,13 +385,13 @@ theorem RelMfld.SatisfiesHPrincipleWith.bs {R : RelMfld I M IX X} {C : Set (P ร— (h : R.SatisfiesHPrincipleWith IP C ฮต) (๐“•โ‚€ : FamilyFormalSol IP P R) (h2 : โˆ€แถ  p : P ร— M near C, (๐“•โ‚€ p.1).toOneJetSec.IsHolonomicAt p.2) : โˆƒ f : P โ†’ M โ†’ X, - (ContMDiff (IP.prod I) IX โˆž <| uncurry f) โˆง + (CMDiff โˆž (uncurry f)) โˆง (โˆ€แถ  p : P ร— M near C, f p.1 p.2 = ๐“•โ‚€.bs p.1 p.2) โˆง (โˆ€ p m, dist (f p m) ((๐“•โ‚€ p).bs m) โ‰ค ฮต m) โˆง โˆ€ p m, oneJetExt I IX (f p) m โˆˆ R := by rcases h ๐“•โ‚€ h2 with โŸจ๐“•, _, hโ‚‚, hโ‚ƒ, hโ‚„โŸฉ refine โŸจfun s โ†ฆ (๐“• (1, s)).bs, ?_, ?_, ?_, ?_โŸฉ ยท let j : C^โˆžโŸฎIP, P; ๐“˜(โ„, โ„).prod IP, โ„ ร— PโŸฏ := - โŸจfun p โ†ฆ (1, p), ContMDiff.prodMk contMDiff_const contMDiff_idโŸฉ + โŸจfun p โ†ฆ (1, p), contMDiff_const.prodMk contMDiff_idโŸฉ rw [show (uncurry fun s โ†ฆ (๐“• (1, s)).bs) = Prod.snd โˆ˜ ฯ€ _ (OneJetSpace I IX) โˆ˜ fun p : P ร— M โ†ฆ ๐“•.reindex j p.1 p.2 diff --git a/SphereEversion/Global/TwistOneJetSec.lean b/SphereEversion/Global/TwistOneJetSec.lean index 6a82186c..542e9ea7 100644 --- a/SphereEversion/Global/TwistOneJetSec.lean +++ b/SphereEversion/Global/TwistOneJetSec.lean @@ -33,7 +33,7 @@ variable {f : N โ†’ Jยน[๐•œ, E, I, M, V]} -- todo: remove or use to prove `contMDiff_one_jet_eucl_bundle` theorem contMDiffAt_one_jet_eucl_bundle' {xโ‚€ : N} : ContMDiffAt J (I.prod ๐“˜(๐•œ, E โ†’L[๐•œ] V)) โˆž f xโ‚€ โ†” CMDiffAt โˆž (fun x โ†ฆ (f x).1) xโ‚€ โˆง - ContMDiffAt J ๐“˜(๐•œ, E โ†’L[๐•œ] V) โˆž (fun x โ†ฆ show E โ†’L[๐•œ] V from + CMDiffAt โˆž (fun x โ†ฆ show E โ†’L[๐•œ] V from (f x).2 โˆ˜L (trivializationAt E (TangentSpace I : M โ†’ _) (f xโ‚€).1).symmL ๐•œ (f x).1) xโ‚€ := by simp_rw [contMDiffAt_hom_bundle, inCoordinates, Trivial.trivializationAt, Trivial.trivialization_continuousLinearMapAt] @@ -43,7 +43,7 @@ theorem contMDiffAt_one_jet_eucl_bundle' {xโ‚€ : N} : theorem contMDiffAt_one_jet_eucl_bundle {xโ‚€ : N} : ContMDiffAt J (I.prod ๐“˜(๐•œ, E โ†’L[๐•œ] V)) โˆž f xโ‚€ โ†” CMDiffAt โˆž (fun x โ†ฆ (f x).1) xโ‚€ โˆง - ContMDiffAt J ๐“˜(๐•œ, E โ†’L[๐•œ] V) โˆž (fun x โ†ฆ show E โ†’L[๐•œ] V from + CMDiffAt โˆž (fun x โ†ฆ show E โ†’L[๐•œ] V from (f x).2 โˆ˜L (trivializationAt E (TangentSpace I) (f xโ‚€).proj).symmL ๐•œ (f x).proj) xโ‚€ := by rw [contMDiffAt_hom_bundle, and_congr_right_iff] intro hf @@ -60,7 +60,7 @@ theorem contMDiffAt_one_jet_eucl_bundle {xโ‚€ : N} : theorem ContMDiffAt.one_jet_eucl_bundle_mk' {f : N โ†’ M} {ฯ• : N โ†’ E โ†’L[๐•œ] V} {xโ‚€ : N} (hf : CMDiffAt โˆž f xโ‚€) - (hฯ• : ContMDiffAt J ๐“˜(๐•œ, E โ†’L[๐•œ] V) โˆž (fun x โ†ฆ show E โ†’L[๐•œ] V from + (hฯ• : CMDiffAt โˆž (fun x โ†ฆ show E โ†’L[๐•œ] V from ฯ• x โˆ˜L (trivializationAt E (TangentSpace I : M โ†’ _) (f xโ‚€)).symmL ๐•œ (f x)) xโ‚€) : ContMDiffAt J (I.prod ๐“˜(๐•œ, E โ†’L[๐•œ] V)) โˆž (fun x โ†ฆ Bundle.TotalSpace.mk (f x) (ฯ• x) : N โ†’ Jยน[๐•œ, E, I, M, V]) xโ‚€ := @@ -68,7 +68,7 @@ theorem ContMDiffAt.one_jet_eucl_bundle_mk' {f : N โ†’ M} {ฯ• : N โ†’ E โ†’L[ theorem ContMDiffAt.one_jet_eucl_bundle_mk {f : N โ†’ M} {ฯ• : N โ†’ E โ†’L[๐•œ] V} {xโ‚€ : N} (hf : CMDiffAt โˆž f xโ‚€) - (hฯ• : ContMDiffAt J ๐“˜(๐•œ, E โ†’L[๐•œ] V) โˆž (fun x โ†ฆ show E โ†’L[๐•œ] V from + (hฯ• : CMDiffAt โˆž (fun x โ†ฆ show E โ†’L[๐•œ] V from ฯ• x โˆ˜L (trivializationAt E (TangentSpace I) (f xโ‚€)).symmL ๐•œ (f x)) xโ‚€) : ContMDiffAt J (I.prod ๐“˜(๐•œ, E โ†’L[๐•œ] V)) โˆž (fun x โ†ฆ Bundle.TotalSpace.mk (f x) (ฯ• x) : N โ†’ Jยน[๐•œ, E, I, M, V]) xโ‚€ := @@ -208,7 +208,7 @@ theorem FamilyOneJetEuclSec.contMDiff (s : FamilyOneJetEuclSec I M V J N) : variable {V'} -def familyJoin {f : N ร— M โ†’ V} (hf : ContMDiff (J.prod I) ๐“˜(โ„, V) โˆž f) +def familyJoin {f : N ร— M โ†’ V} (hf : CMDiff โˆž f) (s : FamilyOneJetEuclSec I M V J N) : FamilyOneJetSec I M ๐“˜(โ„, V) V J N where bs n m := (incl I M V (s (n, m), f (n, m))).1.2 @@ -219,9 +219,8 @@ def familyJoin {f : N ร— M โ†’ V} (hf : ContMDiff (J.prod I) ๐“˜(โ„, V) โˆž f) set_option backward.isDefEq.respectTransparency false in def familyTwist (s : OneJetEuclSec I M V) (i : N ร— M โ†’ V โ†’L[โ„] V') - (hi : โˆ€ xโ‚€ : N ร— M, ContMDiffAt (J.prod I) ๐“˜(โ„, V โ†’L[โ„] V') โˆž i xโ‚€) : - FamilyOneJetEuclSec I M V' J N - where + (hi : โˆ€ xโ‚€ : N ร— M, CMDiffAt โˆž i xโ‚€) : + FamilyOneJetEuclSec I M V' J N where toFun p := โŸจp.2, (i p).comp (s p.2).2โŸฉ is_sec' p := rfl contMDiff' := by