@@ -210,6 +210,127 @@ end OpenPartialHomeomorph.MDifferentiable
210210
211211/-! ### Differentiability of `extChartAt` -/
212212
213+ section
214+
215+ open IsManifold
216+
217+ variable {e : OpenPartialHomeomorph M H}
218+
219+ theorem OpenPartialHomeomorph.mdifferentiableAt_extend
220+ {x : M} (he : e ∈ maximalAtlas I 1 M) (hx : x ∈ e.source) :
221+ MDiffAt (e.extend I) x :=
222+ e.contMDiffAt_extend he hx |>.mdifferentiableAt (by simp)
223+
224+ theorem OpenPartialHomeomorph.mdifferentiableOn_extend (he : e ∈ maximalAtlas I 1 M) :
225+ MDiff[e.source] (e.extend I) :=
226+ e.contMDiffOn_extend he |>.mdifferentiableOn (by simp)
227+
228+ variable {z : E}
229+
230+ theorem mdifferentiableWithinAt_extend_symm
231+ (he : e ∈ maximalAtlas I 1 M) (h : z ∈ (e.extend I).target) :
232+ MDiffAt[range I] (e.extend I).symm z := by
233+ have Z : MDiffAt[range ↑I] I.symm z :=
234+ I.mdifferentiableWithinAt_symm (e.extend_target_subset_range h)
235+ apply MDifferentiableAt.comp_mdifferentiableWithinAt _ _ Z
236+ exact mdifferentiableAt_symm_of_mem_maximalAtlas he (by simp_all)
237+
238+ theorem mdifferentiableOn_extend_symm (he : e ∈ maximalAtlas I 1 M) :
239+ MDiff[(e.extend I).target] (e.extend I).symm := by
240+ intro y hy
241+ exact mdifferentiableWithinAt_extend_symm he hy |>.mono (e.extend_target_subset_range)
242+
243+ /-- The composition of the derivative of an extended chart `e.extend I` with the derivative of its
244+ inverse `(e.extend I).symm` gives the identity.
245+ Version where the basepoint belongs to `(e.extend I).target`. -/
246+ lemma mfderiv_extend_comp_mfderivWithin_extend_symm
247+ {y : E} (he : e ∈ maximalAtlas I 1 M) (hy : y ∈ (e.extend I).target) :
248+ (mfderiv% (e.extend I) ((e.extend I).symm y)) ∘L
249+ (mfderiv[range I] (e.extend I).symm y) = ContinuousLinearMap.id _ _ := by
250+ have U : UniqueMDiffAt[range I] y := by
251+ apply I.uniqueMDiffOn
252+ apply e.extend_target_subset_range hy
253+ have h'y : (e.extend I).symm y ∈ e.source := PartialEquiv.map_target _ (by simp_all)
254+ rw [← mfderiv_comp_mfderivWithin]; rotate_left
255+ · exact e.mdifferentiableAt_extend he h'y
256+ · exact mdifferentiableWithinAt_extend_symm he hy
257+ · exact U
258+ rw [← mfderivWithin_id U]
259+ apply Filter.EventuallyEq.mfderivWithin_eq
260+ · have : (e.extend I) ((e.extend I).symm y) = y := (e.extend I).right_inv hy
261+ filter_upwards [this ▸ e.extend_target_mem_nhdsWithin h'y (I := I)] with z hz
262+ simp_all
263+ · simp_all
264+
265+ /-- The composition of the derivative of an extended chart `e.extend I` with the derivative of its
266+ inverse `(e.extend I).symm` gives the identity.
267+ Version where the basepoint belongs to `(e.extend).source`. -/
268+ lemma mfderiv_extend_comp_mfderivWithin_extend_symm'
269+ {y : M} (he : e ∈ maximalAtlas I 1 M) (hy : y ∈ (e.extend I).source) :
270+ (mfderiv% (e.extend I) y) ∘L (mfderiv[range I] (e.extend I).symm (e.extend I y))
271+ = ContinuousLinearMap.id _ _ := by
272+ convert! mfderiv_extend_comp_mfderivWithin_extend_symm he ((e.extend I).map_source hy)
273+ rw [(e.extend I).left_inv hy]
274+
275+ /-- The composition of the derivative of the inverse of an extended chart `e.extend I` with the
276+ derivative of `e.extend I` gives the identity.
277+ Version where the basepoint belongs to `(extChartAt I x).target`. -/
278+ lemma mfderivWithin_extend_symm_comp_mfderiv_extend
279+ {y : E} (he : e ∈ maximalAtlas I 1 M) (hy : y ∈ (e.extend I).target) :
280+ (mfderiv[range I] (e.extend I).symm y) ∘L
281+ (mfderiv% (e.extend I) ((e.extend I).symm y))
282+ = ContinuousLinearMap.id _ _ := by
283+ have h'y : (e.extend I).symm y ∈ e.source := by simp_all
284+ have U' : UniqueMDiffAt[(e.extend I).source] ((e.extend I).symm y) := by
285+ rw [e.extend_source]
286+ exact e.open_source.uniqueMDiffWithinAt h'y
287+ have : mfderiv% (e.extend I) ((e.extend I).symm y)
288+ = mfderiv[(e.extend I).source] (e.extend I) ((e.extend I).symm y) := by
289+ rw [mfderivWithin_eq_mfderiv U']
290+ exact e.mdifferentiableAt_extend he h'y
291+ rw [this, ← mfderivWithin_comp_of_eq]; rotate_left
292+ · exact mdifferentiableWithinAt_extend_symm he hy
293+ · exact (e.mdifferentiableAt_extend he h'y).mdifferentiableWithinAt
294+ · intro z hz
295+ exact e.extend_target_subset_range ((e.extend I).map_source hz)
296+ · exact U'
297+ · exact (e.extend I).right_inv hy
298+ rw [← mfderivWithin_id U']
299+ apply Filter.EventuallyEq.mfderivWithin_eq
300+ · filter_upwards [e.extend_source_mem_nhdsWithin (I := I) h'y] with z hz
301+ simp only [Function.comp_def, PartialEquiv.left_inv (e.extend I) hz, id_eq]
302+ · simp only [Function.comp_def, PartialEquiv.right_inv (e.extend I) hy, id_eq]
303+
304+ /-- The composition of the derivative of the inverse of an extended chart `e.extend I` with the
305+ derivative of `e.extend I` gives the identity.
306+ Version where the basepoint belongs to `e.source`. -/
307+ lemma mfderivWithin_extend_symm_comp_mfderiv_extend'
308+ {y : M} (he : e ∈ maximalAtlas I 1 M) (hy : y ∈ e.source) :
309+ (mfderiv[range I] (e.extend I).symm (e.extend I y)) ∘L (mfderiv% (e.extend I) y)
310+ = ContinuousLinearMap.id _ _ := by
311+ have : y = (e.extend I).symm (e.extend I y) := ((e.extend I).left_inv (by simpa using hy)).symm
312+ convert! mfderivWithin_extend_symm_comp_mfderiv_extend he
313+ ((e.extend I).map_source (by simpa using hy))
314+ rw [(e.extend I).left_inv (by simpa using hy)]
315+
316+ lemma isInvertible_mfderivWithin_extend_symm
317+ {y : E} (he : e ∈ maximalAtlas I 1 M) (hy : y ∈ (e.extend I).target) :
318+ (mfderiv[range I] (e.extend I).symm y).IsInvertible :=
319+ ContinuousLinearMap.IsInvertible.of_inverse
320+ (mfderivWithin_extend_symm_comp_mfderiv_extend he hy)
321+ (mfderiv_extend_comp_mfderivWithin_extend_symm he hy)
322+
323+ lemma isInvertible_mfderiv_extend {y : M} (he : e ∈ maximalAtlas I 1 M) (hy : y ∈ e.source) :
324+ (mfderiv% (e.extend I) y).IsInvertible := by
325+ have h'y : e.extend I y ∈ (e.extend I).target := (e.extend I).map_source (by simpa using hy)
326+ have Z := ContinuousLinearMap.IsInvertible.of_inverse
327+ (mfderiv_extend_comp_mfderivWithin_extend_symm he h'y)
328+ (mfderivWithin_extend_symm_comp_mfderiv_extend he h'y)
329+ have : (e.extend I).symm ((e.extend I) y) = y := (e.extend I).left_inv (by simpa using hy)
330+ rwa [this] at Z
331+
332+ end
333+
213334section extChartAt
214335
215336variable [IsManifold I 1 M] {s : Set M} {x y : M} {z : E}
@@ -230,42 +351,21 @@ theorem mdifferentiableOn_extChartAt : MDiff[(chartAt H x).source] (extChartAt I
230351 fun _y hy ↦ (hasMFDerivWithinAt_extChartAt hy).mdifferentiableWithinAt
231352
232353theorem mdifferentiableWithinAt_extChartAt_symm (h : z ∈ (extChartAt I x).target) :
233- MDiffAt[range I] (extChartAt I x).symm z := by
234- have Z := I.mdifferentiableWithinAt_symm (extChartAt_target_subset_range x h)
235- apply MDifferentiableAt.comp_mdifferentiableWithinAt (I' := I) _ _ Z
236- apply mdifferentiableAt_atlas_symm (ChartedSpace.chart_mem_atlas x)
237- simp only [extChartAt, OpenPartialHomeomorph.extend, PartialEquiv.trans_target,
238- ModelWithCorners.target_eq, ModelWithCorners.toPartialEquiv_coe_symm, mem_inter_iff, mem_range,
239- mem_preimage] at h
240- exact h.2
354+ MDiffAt[range I] (extChartAt I x).symm z :=
355+ mdifferentiableWithinAt_extend_symm (IsManifold.chart_mem_maximalAtlas x) h
241356
242357theorem mdifferentiableOn_extChartAt_symm :
243- MDiff[(extChartAt I x).target] (extChartAt I x).symm := by
244- intro y hy
245- exact (mdifferentiableWithinAt_extChartAt_symm hy).mono (extChartAt_target_subset_range x)
358+ MDiff[(extChartAt I x).target] (extChartAt I x).symm :=
359+ mdifferentiableOn_extend_symm (IsManifold.chart_mem_maximalAtlas x)
246360
247361/-- The composition of the derivative of `extChartAt` with the derivative of the inverse of
248362`extChartAt` gives the identity.
249363Version where the basepoint belongs to `(extChartAt I x).target`. -/
250364lemma mfderiv_extChartAt_comp_mfderivWithin_extChartAt_symm {x : M}
251365 {y : E} (hy : y ∈ (extChartAt I x).target) :
252366 (mfderiv% (extChartAt I x) ((extChartAt I x).symm y)) ∘L
253- (mfderiv[range I] (extChartAt I x).symm y) = ContinuousLinearMap.id _ _ := by
254- have U : UniqueMDiffAt[range I] y := by
255- apply I.uniqueMDiffOn
256- exact extChartAt_target_subset_range x hy
257- have h'y : (extChartAt I x).symm y ∈ (extChartAt I x).source := (extChartAt I x).map_target hy
258- have h''y : (extChartAt I x).symm y ∈ (chartAt H x).source := by
259- rwa [← extChartAt_source (I := I)]
260- rw [← mfderiv_comp_mfderivWithin]; rotate_left
261- · apply mdifferentiableAt_extChartAt h''y
262- · exact mdifferentiableWithinAt_extChartAt_symm hy
263- · exact U
264- rw [← mfderivWithin_id U]
265- apply Filter.EventuallyEq.mfderivWithin_eq
266- · filter_upwards [extChartAt_target_mem_nhdsWithin_of_mem hy] with z hz
267- simp only [Function.comp_def, PartialEquiv.right_inv (extChartAt I x) hz, id_eq]
268- · simp only [Function.comp_def, PartialEquiv.right_inv (extChartAt I x) hy, id_eq]
367+ (mfderiv[range I] (extChartAt I x).symm y) = ContinuousLinearMap.id _ _ :=
368+ mfderiv_extend_comp_mfderivWithin_extend_symm (IsManifold.chart_mem_maximalAtlas x) hy
269369
270370set_option backward.isDefEq.respectTransparency false in
271371/-- The composition of the derivative of `extChartAt` with the derivative of the inverse of
@@ -274,9 +374,8 @@ Version where the basepoint belongs to `(extChartAt I x).source`. -/
274374lemma mfderiv_extChartAt_comp_mfderivWithin_extChartAt_symm' {x : M}
275375 {y : M} (hy : y ∈ (extChartAt I x).source) :
276376 (mfderiv% (extChartAt I x) y) ∘L (mfderiv[range I] (extChartAt I x).symm (extChartAt I x y))
277- = ContinuousLinearMap.id _ _ := by
278- have : y = (extChartAt I x).symm (extChartAt I x y) := ((extChartAt I x).left_inv hy).symm
279- convert! mfderiv_extChartAt_comp_mfderivWithin_extChartAt_symm ((extChartAt I x).map_source hy)
377+ = ContinuousLinearMap.id _ _ :=
378+ mfderiv_extend_comp_mfderivWithin_extend_symm' (IsManifold.chart_mem_maximalAtlas x) hy
280379
281380/-- The composition of the derivative of the inverse of `extChartAt` with the derivative of
282381`extChartAt` gives the identity.
@@ -285,29 +384,8 @@ lemma mfderivWithin_extChartAt_symm_comp_mfderiv_extChartAt
285384 {y : E} (hy : y ∈ (extChartAt I x).target) :
286385 (mfderiv[range I] (extChartAt I x).symm y) ∘L
287386 (mfderiv% (extChartAt I x) ((extChartAt I x).symm y))
288- = ContinuousLinearMap.id _ _ := by
289- have h'y : (extChartAt I x).symm y ∈ (extChartAt I x).source := (extChartAt I x).map_target hy
290- have h''y : (extChartAt I x).symm y ∈ (chartAt H x).source := by
291- rwa [← extChartAt_source (I := I)]
292- have U' : UniqueMDiffAt[(extChartAt I x).source] ((extChartAt I x).symm y) :=
293- (isOpen_extChartAt_source x).uniqueMDiffWithinAt h'y
294- have : mfderiv% (extChartAt I x) ((extChartAt I x).symm y)
295- = mfderiv[(extChartAt I x).source] (extChartAt I x) ((extChartAt I x).symm y) := by
296- rw [mfderivWithin_eq_mfderiv U']
297- exact mdifferentiableAt_extChartAt h''y
298- rw [this, ← mfderivWithin_comp_of_eq]; rotate_left
299- · exact mdifferentiableWithinAt_extChartAt_symm hy
300- · exact (mdifferentiableAt_extChartAt h''y).mdifferentiableWithinAt
301- · intro z hz
302- apply extChartAt_target_subset_range x
303- exact PartialEquiv.map_source (extChartAt I x) hz
304- · exact U'
305- · exact PartialEquiv.right_inv (extChartAt I x) hy
306- rw [← mfderivWithin_id U']
307- apply Filter.EventuallyEq.mfderivWithin_eq
308- · filter_upwards [extChartAt_source_mem_nhdsWithin' h'y] with z hz
309- simp only [Function.comp_def, PartialEquiv.left_inv (extChartAt I x) hz, id_eq]
310- · simp only [Function.comp_def, PartialEquiv.right_inv (extChartAt I x) hy, id_eq]
387+ = ContinuousLinearMap.id _ _ :=
388+ mfderivWithin_extend_symm_comp_mfderiv_extend (IsManifold.chart_mem_maximalAtlas x) hy
311389
312390/-- The composition of the derivative of the inverse of `extChartAt` with the derivative of
313391`extChartAt` gives the identity.
@@ -322,18 +400,11 @@ lemma mfderivWithin_extChartAt_symm_comp_mfderiv_extChartAt'
322400
323401lemma isInvertible_mfderivWithin_extChartAt_symm {y : E} (hy : y ∈ (extChartAt I x).target) :
324402 (mfderiv[range I] (extChartAt I x).symm y).IsInvertible :=
325- ContinuousLinearMap.IsInvertible.of_inverse
326- (mfderivWithin_extChartAt_symm_comp_mfderiv_extChartAt hy)
327- (mfderiv_extChartAt_comp_mfderivWithin_extChartAt_symm hy)
403+ isInvertible_mfderivWithin_extend_symm (IsManifold.chart_mem_maximalAtlas x) hy
328404
329405lemma isInvertible_mfderiv_extChartAt {y : M} (hy : y ∈ (extChartAt I x).source) :
330- (mfderiv% (extChartAt I x) y).IsInvertible := by
331- have h'y : extChartAt I x y ∈ (extChartAt I x).target := (extChartAt I x).map_source hy
332- have Z := ContinuousLinearMap.IsInvertible.of_inverse
333- (mfderiv_extChartAt_comp_mfderivWithin_extChartAt_symm h'y)
334- (mfderivWithin_extChartAt_symm_comp_mfderiv_extChartAt h'y)
335- have : (extChartAt I x).symm ((extChartAt I x) y) = y := (extChartAt I x).left_inv hy
336- rwa [this] at Z
406+ (mfderiv% (extChartAt I x) y).IsInvertible :=
407+ isInvertible_mfderiv_extend (IsManifold.chart_mem_maximalAtlas x) (by simpa using hy)
337408
338409set_option backward.isDefEq.respectTransparency false in
339410/-- The trivialization of the tangent bundle at a point is the manifold derivative of the
0 commit comments