Skip to content

Commit 8dd1361

Browse files
committed
feat: n-th derivative of C^{n+p} map is C^p (#6101)
1 parent fa24f8f commit 8dd1361

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

Mathlib/Analysis/Calculus/ContDiff.lean

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1034,6 +1034,18 @@ theorem ContDiffWithinAt.fderivWithin_right (hf : ContDiffWithinAt 𝕜 n f s x
10341034
contDiffWithinAt_id hs hmn hx₀s (by rw [preimage_id'])
10351035
#align cont_diff_within_at.fderiv_within_right ContDiffWithinAt.fderivWithin_right
10361036

1037+
-- TODO: can we make a version of `ContDiffWithinAt.fderivWithin` for iterated derivatives?
1038+
theorem ContDiffWithinAt.iteratedFderivWithin_right {i : ℕ} (hf : ContDiffWithinAt 𝕜 n f s x₀)
1039+
(hs : UniqueDiffOn 𝕜 s) (hmn : (m + i : ℕ∞) ≤ n) (hx₀s : x₀ ∈ s) :
1040+
ContDiffWithinAt 𝕜 m (iteratedFDerivWithin 𝕜 i f s) s x₀ := by
1041+
induction' i with i hi generalizing m
1042+
· rw [Nat.zero_eq, ENat.coe_zero, add_zero] at hmn
1043+
exact (hf.of_le hmn).continuousLinearMap_comp
1044+
((continuousMultilinearCurryFin0 𝕜 E F).symm : _ →L[𝕜] E [×0]→L[𝕜] F)
1045+
· rw [Nat.cast_succ, add_comm _ 1, ← add_assoc] at hmn
1046+
exact ((hi hmn).fderivWithin_right hs le_rfl hx₀s).continuousLinearMap_comp
1047+
(continuousMultilinearCurryLeftEquiv 𝕜 (fun _ : Fin (i+1) ↦ E) F : _ →L[𝕜] E [×(i+1)]→L[𝕜] F)
1048+
10371049
/-- `x ↦ fderiv 𝕜 (f x) (g x)` is smooth at `x₀`. -/
10381050
protected theorem ContDiffAt.fderiv {f : E → F → G} {g : E → F} {n : ℕ∞}
10391051
(hf : ContDiffAt 𝕜 n (Function.uncurry f) (x₀, g x₀)) (hg : ContDiffAt 𝕜 m g x₀)
@@ -1050,6 +1062,11 @@ theorem ContDiffAt.fderiv_right (hf : ContDiffAt 𝕜 n f x₀) (hmn : (m + 1 :
10501062
ContDiffAt.fderiv (ContDiffAt.comp (x₀, x₀) hf contDiffAt_snd) contDiffAt_id hmn
10511063
#align cont_diff_at.fderiv_right ContDiffAt.fderiv_right
10521064

1065+
theorem ContDiffAt.iteratedFDeriv_right {i : ℕ} (hf : ContDiffAt 𝕜 n f x₀)
1066+
(hmn : (m + i : ℕ∞) ≤ n) : ContDiffAt 𝕜 m (iteratedFDeriv 𝕜 i f) x₀ := by
1067+
rw [← iteratedFDerivWithin_univ, ← contDiffWithinAt_univ] at *
1068+
exact hf.iteratedFderivWithin_right uniqueDiffOn_univ hmn trivial
1069+
10531070
/-- `x ↦ fderiv 𝕜 (f x) (g x)` is smooth. -/
10541071
protected theorem ContDiff.fderiv {f : E → F → G} {g : E → F} {n m : ℕ∞}
10551072
(hf : ContDiff 𝕜 m <| Function.uncurry f) (hg : ContDiff 𝕜 n g) (hnm : n + 1 ≤ m) :
@@ -1063,6 +1080,10 @@ theorem ContDiff.fderiv_right (hf : ContDiff 𝕜 n f) (hmn : (m + 1 : ℕ∞)
10631080
contDiff_iff_contDiffAt.mpr fun _x => hf.contDiffAt.fderiv_right hmn
10641081
#align cont_diff.fderiv_right ContDiff.fderiv_right
10651082

1083+
theorem ContDiff.iteratedFDeriv_right {i : ℕ} (hf : ContDiff 𝕜 n f)
1084+
(hmn : (m + i : ℕ∞) ≤ n) : ContDiff 𝕜 m (iteratedFDeriv 𝕜 i f) :=
1085+
contDiff_iff_contDiffAt.mpr fun _x => hf.contDiffAt.iteratedFDeriv_right hmn
1086+
10661087
/-- `x ↦ fderiv 𝕜 (f x) (g x)` is continuous. -/
10671088
theorem Continuous.fderiv {f : E → F → G} {g : E → F} {n : ℕ∞}
10681089
(hf : ContDiff 𝕜 n <| Function.uncurry f) (hg : Continuous g) (hn : 1 ≤ n) :

Mathlib/Analysis/Calculus/ContDiffDef.lean

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -813,6 +813,14 @@ theorem iteratedFDerivWithin_succ_eq_comp_left {n : ℕ} :
813813
rfl
814814
#align iterated_fderiv_within_succ_eq_comp_left iteratedFDerivWithin_succ_eq_comp_left
815815

816+
theorem fderivWithin_iteratedFDerivWithin {s : Set E} {n : ℕ} :
817+
fderivWithin 𝕜 (iteratedFDerivWithin 𝕜 n f s) s =
818+
(continuousMultilinearCurryLeftEquiv 𝕜 (fun _ : Fin (n + 1) => E) F).symm ∘
819+
iteratedFDerivWithin 𝕜 (n + 1) f s := by
820+
rw [iteratedFDerivWithin_succ_eq_comp_left]
821+
ext1 x
822+
simp only [Function.comp_apply, LinearIsometryEquiv.symm_apply_apply]
823+
816824
theorem norm_fderivWithin_iteratedFDerivWithin {n : ℕ} :
817825
‖fderivWithin 𝕜 (iteratedFDerivWithin 𝕜 n f s) s x‖ =
818826
‖iteratedFDerivWithin 𝕜 (n + 1) f s x‖ := by

0 commit comments

Comments
 (0)