Skip to content

Commit bbd1294

Browse files
committed
chore(Geometry/Manifold/ContMDiffMFDeriv): golf using custom elaborators (#36008)
1 parent faa2693 commit bbd1294

File tree

1 file changed

+62
-82
lines changed

1 file changed

+62
-82
lines changed

Mathlib/Geometry/Manifold/ContMDiffMFDeriv.lean

Lines changed: 62 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ module
88
public import Mathlib.Geometry.Manifold.MFDeriv.Tangent
99
public import Mathlib.Geometry.Manifold.ContMDiffMap
1010
public import Mathlib.Geometry.Manifold.VectorBundle.Hom
11+
public import Mathlib.Geometry.Manifold.Notation
1112

1213
/-!
1314
### Interactions between differentiability, smoothness and manifold derivatives
@@ -66,33 +67,31 @@ Version within a set.
6667
-/
6768
protected theorem ContMDiffWithinAt.mfderivWithin {x₀ : N} {f : N → M → M'} {g : N → M}
6869
{t : Set N} {u : Set M}
69-
(hf : ContMDiffWithinAt (J.prod I) I' n (Function.uncurry f) (t ×ˢ u) (x₀, g x₀))
70-
(hg : ContMDiffWithinAt J I m g t x₀) (hx₀ : x₀ ∈ t)
70+
(hf : CMDiffAt[t ×ˢ u] n (Function.uncurry f) (x₀, g x₀))
71+
(hg : CMDiffAt[t] m g x₀) (hx₀ : x₀ ∈ t)
7172
(hu : MapsTo g t u) (hmn : m + 1 ≤ n) (h'u : UniqueMDiffOn I u) :
72-
ContMDiffWithinAt J 𝓘(𝕜, E →L[𝕜] E') m
73-
(inTangentCoordinates I I' g (fun x => f x (g x))
74-
(fun x => mfderivWithin I I' (f x) u (g x)) x₀) t x₀ := by
73+
CMDiffAt[t] m (inTangentCoordinates I I' g (fun x ↦ f x (g x))
74+
(fun x ↦ mfderiv[u] (f x) (g x)) x₀) x₀ := by
7575
-- first localize the result to a smaller set, to make sure everything happens in chart domains
7676
let t' := t ∩ g ⁻¹' ((extChartAt I (g x₀)).source)
7777
have ht't : t' ⊆ t := inter_subset_left
78-
suffices ContMDiffWithinAt J 𝓘(𝕜, E →L[𝕜] E') m
79-
(inTangentCoordinates I I' g (fun x ↦ f x (g x))
80-
(fun x ↦ mfderivWithin I I' (f x) u (g x)) x₀) t' x₀ by
78+
suffices CMDiffAt[t'] m (inTangentCoordinates I I' g (fun x ↦ f x (g x))
79+
(fun x ↦ mfderiv[u] (f x) (g x)) x₀) x₀ by
8180
apply ContMDiffWithinAt.mono_of_mem_nhdsWithin this
8281
apply inter_mem self_mem_nhdsWithin
8382
exact hg.continuousWithinAt.preimage_mem_nhdsWithin (extChartAt_source_mem_nhds (g x₀))
8483
-- register a few basic facts that maps send suitable neighborhoods to suitable neighborhoods,
8584
-- by continuity
8685
have hx₀gx₀ : (x₀, g x₀) ∈ t ×ˢ u := by simp [hx₀, hu hx₀]
87-
have h4f : ContinuousWithinAt (fun x => f x (g x)) t x₀ := by
86+
have h4f : ContinuousWithinAt (fun x f x (g x)) t x₀ := by
8887
change ContinuousWithinAt ((Function.uncurry f) ∘ (fun x ↦ (x, g x))) t x₀
8988
refine ContinuousWithinAt.comp hf.continuousWithinAt ?_ (fun y hy ↦ by simp [hy, hu hy])
9089
exact (continuousWithinAt_id.prodMk hg.continuousWithinAt)
9190
have h4f := h4f.preimage_mem_nhdsWithin (extChartAt_source_mem_nhds (I := I') (f x₀ (g x₀)))
9291
have h3f := (contMDiffWithinAt_iff_contMDiffWithinAt_nhdsWithin (by simp)).mp
9392
(hf.of_le <| (self_le_add_left 1 m).trans hmn)
9493
simp only [hx₀gx₀, insert_eq_of_mem] at h3f
95-
have h2f : ∀ᶠ x₂ in 𝓝[t] x₀, ContMDiffWithinAt I I' 1 (f x₂) u (g x₂) := by
94+
have h2f : ∀ᶠ x₂ in 𝓝[t] x₀, CMDiffAt[u] 1 (f x₂) (g x₂) := by
9695
have : MapsTo (fun x ↦ (x, g x)) t (t ×ˢ u) := fun y hy ↦ by simp [hy, hu hy]
9796
filter_upwards [((continuousWithinAt_id.prodMk hg.continuousWithinAt)
9897
|>.tendsto_nhdsWithin this).eventually h3f, self_mem_nhdsWithin] with x hx h'x
@@ -135,12 +134,10 @@ protected theorem ContMDiffWithinAt.mfderivWithin {x₀ : N} {f : N → M → M'
135134
· exact UniqueMDiffOn.uniqueDiffOn_target_inter h'u (g x₀)
136135
-- reformulate the previous point as `C^n` in the manifold sense (but still for a map between
137136
-- vector spaces)
138-
have :
139-
ContMDiffWithinAt J 𝓘(𝕜, E →L[𝕜] E') m
140-
(fun x =>
141-
fderivWithin 𝕜 (extChartAt I' (f x₀ (g x₀)) ∘ f x ∘ (extChartAt I (g x₀)).symm)
142-
((extChartAt I (g x₀)).target ∩ (extChartAt I (g x₀)).symm ⁻¹' u)
143-
(extChartAt I (g x₀) (g x))) t' x₀ := by
137+
have : CMDiffAt[t'] m (
138+
fun x ↦ fderivWithin 𝕜 (extChartAt I' (f x₀ (g x₀)) ∘ f x ∘ (extChartAt I (g x₀)).symm)
139+
((extChartAt I (g x₀)).target ∩ (extChartAt I (g x₀)).symm ⁻¹' u)
140+
(extChartAt I (g x₀) (g x))) x₀ := by
144141
simp_rw [contMDiffWithinAt_iff_source (x := x₀),
145142
contMDiffWithinAt_iff_contDiffWithinAt, Function.comp_def]
146143
exact this
@@ -158,11 +155,9 @@ protected theorem ContMDiffWithinAt.mfderivWithin {x₀ : N} {f : N → M → M'
158155
apply UniqueMDiffOn.uniqueDiffOn_target_inter h'u
159156
refine ⟨PartialEquiv.map_source _ h2, ?_⟩
160157
rwa [mem_preimage, PartialEquiv.left_inv _ h2]
161-
have A : mfderivWithin 𝓘(𝕜, E) I ((extChartAt I (g x₀)).symm)
162-
(range I) ((extChartAt I (g x₀)) (g x))
163-
= mfderivWithin 𝓘(𝕜, E) I ((extChartAt I (g x₀)).symm)
164-
((extChartAt I (g x₀)).target ∩ (extChartAt I (g x₀)).symm ⁻¹' u)
165-
((extChartAt I (g x₀)) (g x)) := by
158+
have A : mfderiv[range I] ((extChartAt I (g x₀)).symm) ((extChartAt I (g x₀)) (g x))
159+
= mfderiv[(extChartAt I (g x₀)).target ∩ (extChartAt I (g x₀)).symm ⁻¹' u]
160+
((extChartAt I (g x₀)).symm) ((extChartAt I (g x₀)) (g x)) := by
166161
apply (MDifferentiableWithinAt.mfderivWithin_mono _ h3 _).symm
167162
· apply mdifferentiableWithinAt_extChartAt_symm
168163
exact PartialEquiv.map_source (extChartAt I (g x₀)) h2
@@ -196,12 +191,10 @@ This is a special case of `ContMDiffWithinAt.mfderivWithin` where `f` does not c
196191
parameters and `g = id`.
197192
-/
198193
theorem ContMDiffWithinAt.mfderivWithin_const {x₀ : M} {f : M → M'}
199-
(hf : ContMDiffWithinAt I I' n f s x₀)
200-
(hmn : m + 1 ≤ n) (hx : x₀ ∈ s) (hs : UniqueMDiffOn I s) :
201-
ContMDiffWithinAt I 𝓘(𝕜, E →L[𝕜] E') m
202-
(inTangentCoordinates I I' id f (mfderivWithin I I' f s) x₀) s x₀ := by
203-
have : ContMDiffWithinAt (I.prod I) I' n (fun x : M × M => f x.2) (s ×ˢ s) (x₀, x₀) :=
204-
ContMDiffWithinAt.comp (x₀, x₀) hf contMDiffWithinAt_snd mapsTo_snd_prod
194+
(hf : CMDiffAt[s] n f x₀) (hmn : m + 1 ≤ n) (hx : x₀ ∈ s) (hs : UniqueMDiffOn I s) :
195+
CMDiffAt[s] m (inTangentCoordinates I I' id f (mfderiv[s] f) x₀) x₀ := by
196+
have : CMDiffAt[s ×ˢ s] n (fun x : M × M ↦ f x.2) (x₀, x₀) :=
197+
hf.comp (x₀, x₀) contMDiffWithinAt_snd mapsTo_snd_prod
205198
exact this.mfderivWithin contMDiffWithinAt_id hx (mapsTo_id _) hmn hs
206199

207200
/-- The function that sends `x` to the `y`-derivative of `f(x,y)` at `g(x)` applied to `g₂(x)` is
@@ -214,13 +207,12 @@ applied to a (variable) vector.
214207
-/
215208
theorem ContMDiffWithinAt.mfderivWithin_apply {x₀ : N'}
216209
{f : N → M → M'} {g : N → M} {g₁ : N' → N} {g₂ : N' → E} {t : Set N} {u : Set M} {v : Set N'}
217-
(hf : ContMDiffWithinAt (J.prod I) I' n (Function.uncurry f) (t ×ˢ u) (g₁ x₀, g (g₁ x₀)))
218-
(hg : ContMDiffWithinAt J I m g t (g₁ x₀)) (hg₁ : ContMDiffWithinAt J' J m g₁ v x₀)
219-
(hg₂ : ContMDiffWithinAt J' 𝓘(𝕜, E) m g₂ v x₀) (hmn : m + 1 ≤ n) (h'g₁ : MapsTo g₁ v t)
210+
(hf : CMDiffAt[t ×ˢ u] n (Function.uncurry f) (g₁ x₀, g (g₁ x₀)))
211+
(hg : CMDiffAt[t] m g (g₁ x₀)) (hg₁ : CMDiffAt[v] m g₁ x₀)
212+
(hg₂ : CMDiffAt[v] m g₂ x₀) (hmn : m + 1 ≤ n) (h'g₁ : MapsTo g₁ v t)
220213
(hg₁x₀ : g₁ x₀ ∈ t) (h'g : MapsTo g t u) (hu : UniqueMDiffOn I u) :
221-
ContMDiffWithinAt J' 𝓘(𝕜, E') m
222-
(fun x => (inTangentCoordinates I I' g (fun x => f x (g x))
223-
(fun x => mfderivWithin I I' (f x) u (g x)) (g₁ x₀) (g₁ x)) (g₂ x)) v x₀ :=
214+
CMDiffAt[v] m (fun x ↦ (inTangentCoordinates I I' g (fun x ↦ f x (g x))
215+
(fun x ↦ mfderiv[u] (f x) (g x)) (g₁ x₀) (g₁ x)) (g₂ x)) x₀ :=
224216
((hf.mfderivWithin hg hg₁x₀ h'g hmn hu).comp_of_eq hg₁ h'g₁ rfl).clm_apply hg₂
225217

226218
/-- The function that sends `x` to the `y`-derivative of `f (x, y)` at `g (x)` is `C^m` at `x₀`,
@@ -231,11 +223,10 @@ This result is used to show that maps into the 1-jet bundle and cotangent bundle
231223
`ContMDiffAt.mfderiv_const` is a special case of this.
232224
-/
233225
protected theorem ContMDiffAt.mfderiv {x₀ : N} (f : N → M → M') (g : N → M)
234-
(hf : ContMDiffAt (J.prod I) I' n (Function.uncurry f) (x₀, g x₀)) (hg : ContMDiffAt J I m g x₀)
226+
(hf : CMDiffAt n (Function.uncurry f) (x₀, g x₀)) (hg : CMDiffAt m g x₀)
235227
(hmn : m + 1 ≤ n) :
236-
ContMDiffAt J 𝓘(𝕜, E →L[𝕜] E') m
237-
(inTangentCoordinates I I' g (fun x ↦ f x (g x)) (fun x ↦ mfderiv I I' (f x) (g x)) x₀)
238-
x₀ := by
228+
CMDiffAt m
229+
(inTangentCoordinates I I' g (fun x ↦ f x (g x)) (fun x ↦ mfderiv% (f x) (g x)) x₀) x₀ := by
239230
rw [← contMDiffWithinAt_univ] at hf hg ⊢
240231
rw [← univ_prod_univ] at hf
241232
simp_rw [← mfderivWithin_univ]
@@ -248,12 +239,12 @@ We have to insert a coordinate change from `x₀` to `x` to make the derivative
248239
This is a special case of `ContMDiffAt.mfderiv` where `f` does not contain any parameters and
249240
`g = id`.
250241
-/
251-
theorem ContMDiffAt.mfderiv_const {x₀ : M} {f : M → M'} (hf : ContMDiffAt I I' n f x₀)
242+
theorem ContMDiffAt.mfderiv_const {x₀ : M} {f : M → M'} (hf : CMDiffAt n f x₀)
252243
(hmn : m + 1 ≤ n) :
253-
ContMDiffAt I 𝓘(𝕜, E →L[𝕜] E') m (inTangentCoordinates I I' id f (mfderiv I I' f) x₀) x₀ :=
254-
haveI : ContMDiffAt (I.prod I) I' n (fun x : M × M => f x.2) (x₀, x₀) :=
244+
CMDiffAt m (inTangentCoordinates I I' id f (mfderiv% f) x₀) x₀ :=
245+
haveI : CMDiffAt n (fun x : M × M f x.2) (x₀, x₀) :=
255246
ContMDiffAt.comp (x₀, x₀) hf contMDiffAt_snd
256-
this.mfderiv (fun _ => f) id contMDiffAt_id hmn
247+
this.mfderiv (fun _ f) id contMDiffAt_id hmn
257248

258249
/-- The function that sends `x` to the `y`-derivative of `f(x,y)` at `g(x)` applied to `g₂(x)` is
259250
`C^n` at `x₀`, where the derivative is taken as a continuous linear map.
@@ -264,12 +255,11 @@ This is similar to `ContMDiffAt.mfderiv`, but where the continuous linear map is
264255
(variable) vector.
265256
-/
266257
theorem ContMDiffAt.mfderiv_apply {x₀ : N'} (f : N → M → M') (g : N → M) (g₁ : N' → N) (g₂ : N' → E)
267-
(hf : ContMDiffAt (J.prod I) I' n (Function.uncurry f) (g₁ x₀, g (g₁ x₀)))
268-
(hg : ContMDiffAt J I m g (g₁ x₀)) (hg₁ : ContMDiffAt J' J m g₁ x₀)
269-
(hg₂ : ContMDiffAt J' 𝓘(𝕜, E) m g₂ x₀) (hmn : m + 1 ≤ n) :
270-
ContMDiffAt J' 𝓘(𝕜, E') m
271-
(fun x => inTangentCoordinates I I' g (fun x => f x (g x))
272-
(fun x => mfderiv I I' (f x) (g x)) (g₁ x₀) (g₁ x) (g₂ x)) x₀ :=
258+
(hf : CMDiffAt n (Function.uncurry f) (g₁ x₀, g (g₁ x₀)))
259+
(hg : CMDiffAt m g (g₁ x₀)) (hg₁ : CMDiffAt m g₁ x₀) (hg₂ : CMDiffAt m g₂ x₀)
260+
(hmn : m + 1 ≤ n) :
261+
CMDiffAt m (fun x ↦ inTangentCoordinates I I' g (fun x ↦ f x (g x))
262+
(fun x ↦ mfderiv% (f x) (g x)) (g₁ x₀) (g₁ x) (g₂ x)) x₀ :=
273263
((hf.mfderiv f g hg hmn).comp_of_eq hg₁ rfl).clm_apply hg₂
274264

275265
end mfderiv
@@ -283,53 +273,46 @@ variable [Is : IsManifold I 1 M] [I's : IsManifold I' 1 M']
283273
/-- If a function is `C^n` on a domain with unique derivatives, then its bundled derivative
284274
is `C^m` when `m+1 ≤ n`. -/
285275
theorem ContMDiffOn.contMDiffOn_tangentMapWithin
286-
(hf : ContMDiffOn I I' n f s) (hmn : m + 1 ≤ n)
287-
(hs : UniqueMDiffOn I s) :
288-
ContMDiffOn I.tangent I'.tangent m (tangentMapWithin I I' f s)
289-
(π E (TangentSpace I) ⁻¹' s) := by
276+
(hf : CMDiff[s] n f) (hmn : m + 1 ≤ n) (hs : UniqueMDiffOn I s) :
277+
CMDiff[(π E (TangentSpace I) ⁻¹' s)] m (tangentMapWithin I I' f s) := by
290278
intro x₀ hx₀
291279
let s' : Set (TangentBundle I M) := (π E (TangentSpace I) ⁻¹' s)
292280
let b₁ : TangentBundle I M → M := fun p ↦ p.1
293281
let v : Π (y : TangentBundle I M), TangentSpace I (b₁ y) := fun y ↦ y.2
294282
have hv : ContMDiffWithinAt I.tangent I.tangent m (fun y ↦ (v y : TangentBundle I M)) s' x₀ :=
295283
contMDiffWithinAt_id
296284
let b₂ : TangentBundle I M → M' := f ∘ b₁
297-
have hb₂ : ContMDiffWithinAt I.tangent I' m b₂ s' x₀ :=
285+
have hb₂ : CMDiffAt[s'] m b₂ x₀ :=
298286
((hf (b₁ x₀) hx₀).of_le (le_self_add.trans hmn)).comp _
299287
(contMDiffWithinAt_proj (TangentSpace I)) (fun x h ↦ h)
300288
let ϕ : Π (y : TangentBundle I M), TangentSpace I (b₁ y) →L[𝕜] TangentSpace I' (b₂ y) :=
301-
fun y ↦ mfderivWithin I I' f s (b₁ y)
302-
have hϕ : ContMDiffWithinAt I.tangent 𝓘(𝕜, E →L[𝕜] E') m
303-
(fun y ↦ ContinuousLinearMap.inCoordinates E (TangentSpace I (M := M)) E'
304-
(TangentSpace I' (M := M')) (b₁ x₀) (b₁ y) (b₂ x₀) (b₂ y) (ϕ y))
305-
s' x₀ := by
306-
have A : ContMDiffWithinAt I 𝓘(𝕜, E →L[𝕜] E') m
307-
(fun y ↦ ContinuousLinearMap.inCoordinates E (TangentSpace I (M := M)) E'
308-
(TangentSpace I' (M := M')) (b₁ x₀) y (b₂ x₀) (f y) (mfderivWithin I I' f s y))
309-
s (b₁ x₀) :=
310-
ContMDiffWithinAt.mfderivWithin_const (hf _ hx₀) hmn hx₀ hs
289+
fun y ↦ mfderiv[s] f (b₁ y)
290+
have hϕ : CMDiffAt[s'] m (fun y ↦ ContinuousLinearMap.inCoordinates E (TangentSpace I (M := M)) E'
291+
(TangentSpace I' (M := M')) (b₁ x₀) (b₁ y) (b₂ x₀) (b₂ y) (ϕ y)) x₀ := by
292+
have A : CMDiffAt[s] m (fun y ↦ ContinuousLinearMap.inCoordinates E (TangentSpace I (M := M)) E'
293+
(TangentSpace I' (M := M')) (b₁ x₀) y (b₂ x₀) (f y) (mfderiv[s] f y)) (b₁ x₀) :=
294+
.mfderivWithin_const (hf _ hx₀) hmn hx₀ hs
311295
exact A.comp _ (contMDiffWithinAt_proj (TangentSpace I)) (fun x h ↦ h)
312296
exact ContMDiffWithinAt.clm_apply_of_inCoordinates hϕ hv hb₂
313297

314298
/-- If a function is `C^n` on a domain with unique derivatives, with `1 ≤ n`, then its bundled
315299
derivative is continuous there. -/
316-
theorem ContMDiffOn.continuousOn_tangentMapWithin (hf : ContMDiffOn I I' n f s) (hmn : 1 ≤ n)
300+
theorem ContMDiffOn.continuousOn_tangentMapWithin (hf : CMDiff[s] n f) (hmn : 1 ≤ n)
317301
(hs : UniqueMDiffOn I s) :
318302
ContinuousOn (tangentMapWithin I I' f s) (π E (TangentSpace I) ⁻¹' s) := by
319-
have :
320-
ContMDiffOn I.tangent I'.tangent 0 (tangentMapWithin I I' f s) (π E (TangentSpace I) ⁻¹' s) :=
303+
have : CMDiff[π E (TangentSpace I) ⁻¹' s] 0 (tangentMapWithin I I' f s) :=
321304
hf.contMDiffOn_tangentMapWithin hmn hs
322305
exact this.continuousOn
323306

324307
/-- If a function is `C^n`, then its bundled derivative is `C^m` when `m+1 ≤ n`. -/
325-
theorem ContMDiff.contMDiff_tangentMap (hf : ContMDiff I I' n f) (hmn : m + 1 ≤ n) :
326-
ContMDiff I.tangent I'.tangent m (tangentMap I I' f) := by
308+
theorem ContMDiff.contMDiff_tangentMap (hf : CMDiff n f) (hmn : m + 1 ≤ n) :
309+
CMDiff m (tangentMap I I' f) := by
327310
rw [← contMDiffOn_univ] at hf ⊢
328311
convert hf.contMDiffOn_tangentMapWithin hmn uniqueMDiffOn_univ
329312
rw [tangentMapWithin_univ]
330313

331314
/-- If a function is `C^n`, with `1 ≤ n`, then its bundled derivative is continuous. -/
332-
theorem ContMDiff.continuous_tangentMap (hf : ContMDiff I I' n f) (hmn : 1 ≤ n) :
315+
theorem ContMDiff.continuous_tangentMap (hf : CMDiff n f) (hmn : 1 ≤ n) :
333316
Continuous (tangentMap I I' f) := by
334317
rw [← contMDiffOn_univ] at hf
335318
rw [← continuousOn_univ]
@@ -365,8 +348,8 @@ theorem tangentMap_tangentBundle_pure [Is : IsManifold I 1 M]
365348
apply IsOpen.mem_nhds
366349
· apply (OpenPartialHomeomorph.open_target _).preimage I.continuous_invFun
367350
· simp only [mfld_simps]
368-
have A : MDifferentiableAt I I.tangent (fun x => @TotalSpace.mk M E (TangentSpace I) x 0) x :=
369-
haveI : ContMDiff I (I.prod 𝓘(𝕜, E)) 1 (zeroSection E (TangentSpace I : M → Type _)) :=
351+
have A : MDiffAt (fun x TotalSpace.mk' E (x : M) (0 : TangentSpace I x)) x :=
352+
haveI : CMDiff 1 (zeroSection E (TangentSpace I : M → Type _)) :=
370353
Bundle.contMDiff_zeroSection 𝕜 (TangentSpace I : M → Type _)
371354
this.mdifferentiableAt one_ne_zero
372355
have B : fderivWithin 𝕜 (fun x' : E ↦ (x', (0 : E))) (Set.range I) (I ((chartAt H x) x)) v
@@ -383,7 +366,7 @@ theorem tangentMap_tangentBundle_pure [Is : IsManifold I 1 M]
383366
rw [← fderivWithin_inter N] at B
384367
rw [← fderivWithin_inter N, ← B]
385368
congr 1
386-
refine fderivWithin_congr (fun y hy => ?_) ?_
369+
refine fderivWithin_congr (fun y hy ?_) ?_
387370
· simp only [mfld_simps] at hy
388371
simp only [hy, mfld_simps]
389372
· simp only [mfld_simps]
@@ -398,13 +381,13 @@ namespace ContMDiffMap
398381
-- They could be moved to another file (perhaps a new file) if desired.
399382
open scoped Manifold ContDiff
400383

401-
protected theorem mdifferentiable' (f : C^n⟮I, M; I', M'⟯) (hn : n ≠ 0) : MDifferentiable I I' f :=
384+
protected theorem mdifferentiable' (f : C^n⟮I, M; I', M'⟯) (hn : n ≠ 0) : MDiff f :=
402385
f.contMDiff.mdifferentiable hn
403386

404-
protected theorem mdifferentiable (f : C^∞⟮I, M; I', M'⟯) : MDifferentiable I I' f :=
387+
protected theorem mdifferentiable (f : C^∞⟮I, M; I', M'⟯) : MDiff f :=
405388
f.mdifferentiable' (by simp)
406389

407-
protected theorem mdifferentiableAt (f : C^∞⟮I, M; I', M'⟯) {x} : MDifferentiableAt I I' f x :=
390+
protected theorem mdifferentiableAt (f : C^∞⟮I, M; I', M'⟯) {x} : MDiffAt f x :=
408391
f.mdifferentiable x
409392

410393
end ContMDiffMap
@@ -429,8 +412,7 @@ variable [IsManifold I 1 M] [IsManifold I' 1 M']
429412
/-- The canonical equivalence between the tangent bundle of a product and the product of
430413
tangent bundles is smooth. -/
431414
lemma contMDiff_equivTangentBundleProd :
432-
ContMDiff (I.prod I').tangent (I.tangent.prod I'.tangent) n
433-
(equivTangentBundleProd I M I' M') := by
415+
CMDiff n (equivTangentBundleProd I M I' M') := by
434416
rw [equivTangentBundleProd_eq_tangentMap_prod_tangentMap]
435417
exact (contMDiff_fst.contMDiff_tangentMap le_rfl).prodMk
436418
(contMDiff_snd.contMDiff_tangentMap le_rfl)
@@ -439,8 +421,7 @@ set_option backward.isDefEq.respectTransparency false in
439421
/-- The canonical equivalence between the product of tangent bundles and the tangent bundle of a
440422
product is smooth. -/
441423
lemma contMDiff_equivTangentBundleProd_symm :
442-
ContMDiff (I.tangent.prod I'.tangent) (I.prod I').tangent n
443-
(equivTangentBundleProd I M I' M').symm := by
424+
CMDiff n (equivTangentBundleProd I M I' M').symm := by
444425
/- Contrary to what one might expect, this proof is nontrivial. It is not a formalization issue:
445426
even on paper, I don't have a simple proof of the statement. The reason is that there is no nice
446427
functorial expression for the map from `TM × T'M` to `T (M × M')`, so I need to come back to
@@ -464,12 +445,11 @@ lemma contMDiff_equivTangentBundleProd_symm :
464445
simp only [equivTangentBundleProd, TangentBundle.trivializationAt_apply, mfld_simps,
465446
Equiv.coe_fn_symm_mk]
466447
refine ⟨?_, (contMDiffAt_prod_module_iff _).2 ⟨?_, ?_⟩⟩
467-
· exact ContMDiffAt.prodMap (contMDiffAt_proj (TangentSpace I))
468-
(contMDiffAt_proj (TangentSpace I'))
448+
· exact (contMDiffAt_proj (TangentSpace I)).prodMap (contMDiffAt_proj (TangentSpace I'))
469449
· /- check that the composition with the first projection in the target chart is smooth.
470450
For this, we check that it coincides locally with the projection `pM : TM × TM' → TM` read in
471451
the target chart, which is obviously smooth. -/
472-
have smooth_pM : ContMDiffAt (I.tangent.prod I'.tangent) I.tangent n Prod.fst (a, b) :=
452+
have smooth_pM : CMDiffAt n (Prod.fst : TangentBundle I M × TangentBundle I' M' → _) (a, b) :=
473453
contMDiffAt_fst
474454
apply (contMDiffAt_totalSpace.1 smooth_pM).2.congr_of_eventuallyEq
475455
filter_upwards [chart_source_mem_nhds (ModelProd (ModelProd H E) (ModelProd H' E')) (a, b)]
@@ -508,7 +488,7 @@ lemma contMDiff_equivTangentBundleProd_symm :
508488
· /- check that the composition with the second projection in the target chart is smooth.
509489
For this, we check that it coincides locally with the projection `pM' : TM × TM' → TM'` read in
510490
the target chart, which is obviously smooth. -/
511-
have smooth_pM' : ContMDiffAt (I.tangent.prod I'.tangent) I'.tangent n Prod.snd (a, b) :=
491+
have smooth_pM' : CMDiffAt n (Prod.snd : TangentBundle I M × TangentBundle I' M' → _) (a, b) :=
512492
contMDiffAt_snd
513493
apply (contMDiffAt_totalSpace.1 smooth_pM').2.congr_of_eventuallyEq
514494
filter_upwards [chart_source_mem_nhds (ModelProd (ModelProd H E) (ModelProd H' E')) (a, b)]

0 commit comments

Comments
 (0)