Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions SphereEversion/Global/Gromov.lean
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
24 changes: 12 additions & 12 deletions SphereEversion/Global/Immersion.lean
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand All @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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]
Expand All @@ -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
Expand Down Expand Up @@ -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)
Expand All @@ -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) :=
Expand Down
40 changes: 18 additions & 22 deletions SphereEversion/Global/OneJetBundle.lean
Original file line number Diff line number Diff line change
Expand Up @@ -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. -/
Expand All @@ -365,25 +365,23 @@ 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

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}
(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ϕ⟩
Expand Down Expand Up @@ -421,9 +419,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')
Expand Down Expand Up @@ -518,21 +516,19 @@ 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
rw [contMDiffAt_oneJetBundle] at hk
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
Expand All @@ -554,9 +550,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₀)
Expand Down
8 changes: 3 additions & 5 deletions SphereEversion/Global/OneJetSec.lean
Original file line number Diff line number Diff line change
Expand Up @@ -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) :=
Expand All @@ -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)
Expand Down
10 changes: 4 additions & 6 deletions SphereEversion/Global/ParametricityForFree.lean
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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
Expand Down
4 changes: 2 additions & 2 deletions SphereEversion/Global/Relation.lean
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 3 additions & 3 deletions SphereEversion/Global/SmoothEmbedding.lean
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 ↦
Expand Down
15 changes: 7 additions & 8 deletions SphereEversion/Global/TwistOneJetSec.lean
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand All @@ -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
Expand All @@ -60,15 +60,15 @@ 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₀ :=
contMDiffAt_one_jet_eucl_bundle'.mpr ⟨hf, hϕ⟩

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₀ :=
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down
Loading
Loading