88public import Mathlib.Geometry.Manifold.MFDeriv.Tangent
99public import Mathlib.Geometry.Manifold.ContMDiffMap
1010public 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-/
6768protected 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
196191parameters and `g = id`.
197192-/
198193theorem 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-/
215208theorem 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-/
233225protected 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
248239This 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-/
266257theorem 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
275265end 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
284274is `C^m` when `m+1 ≤ n`. -/
285275theorem 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
315299derivative 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.
399382open 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
410393end 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
430413tangent bundles is smooth. -/
431414lemma 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
440422product is smooth. -/
441423lemma 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