@@ -156,7 +156,7 @@ derivative, differentiability, higher derivative, `C^n`, multilinear, Taylor ser
156
156
-/
157
157
158
158
noncomputable theory
159
- open_locale classical big_operators nnreal topology
159
+ open_locale classical big_operators nnreal topology filter
160
160
161
161
local notation `∞` := (⊤ : ℕ∞)
162
162
@@ -645,19 +645,22 @@ lemma cont_diff_on.cont_diff_within_at (h : cont_diff_on 𝕜 n f s) (hx : x ∈
645
645
cont_diff_within_at 𝕜 n f s x :=
646
646
h x hx
647
647
648
- lemma cont_diff_within_at.cont_diff_on {m : ℕ}
648
+ lemma cont_diff_within_at.cont_diff_on' {m : ℕ}
649
649
(hm : (m : ℕ∞) ≤ n) (h : cont_diff_within_at 𝕜 n f s x) :
650
- ∃ u ∈ 𝓝[insert x s] x, u ⊆ insert x s ∧ cont_diff_on 𝕜 m f u :=
650
+ ∃ u, is_open u ∧ x ∈ u ∧ cont_diff_on 𝕜 m f (insert x s ∩ u) :=
651
651
begin
652
- rcases h m hm with ⟨u, u_nhd, p, hp⟩,
653
- refine ⟨u ∩ insert x s, filter.inter_mem u_nhd self_mem_nhds_within,
654
- inter_subset_right _ _, _⟩,
655
- assume y hy m' hm',
656
- refine ⟨u ∩ insert x s, _, p, (hp.mono (inter_subset_left _ _)).of_le hm'⟩,
657
- convert self_mem_nhds_within,
658
- exact insert_eq_of_mem hy
652
+ rcases h m hm with ⟨t, ht, p, hp⟩,
653
+ rcases mem_nhds_within.1 ht with ⟨u, huo, hxu, hut⟩,
654
+ rw [inter_comm] at hut,
655
+ exact ⟨u, huo, hxu, (hp.mono hut).cont_diff_on⟩
659
656
end
660
657
658
+ lemma cont_diff_within_at.cont_diff_on {m : ℕ}
659
+ (hm : (m : ℕ∞) ≤ n) (h : cont_diff_within_at 𝕜 n f s x) :
660
+ ∃ u ∈ 𝓝[insert x s] x, u ⊆ insert x s ∧ cont_diff_on 𝕜 m f u :=
661
+ let ⟨u, uo, xu, h⟩ := h.cont_diff_on' hm
662
+ in ⟨_, inter_mem_nhds_within _ (uo.mem_nhds xu), inter_subset_left _ _, h⟩
663
+
661
664
protected lemma cont_diff_within_at.eventually {n : ℕ}
662
665
(h : cont_diff_within_at 𝕜 n f s x) :
663
666
∀ᶠ y in 𝓝[insert x s] x, cont_diff_within_at 𝕜 n f s y :=
@@ -824,7 +827,7 @@ begin
824
827
: E → (E [×(n + 1 )]→L[𝕜] F)) (m 0 ) (tail m) : rfl
825
828
... = (fderiv_within 𝕜 (I ∘ (iterated_fderiv_within 𝕜 n (fderiv_within 𝕜 f s) s)) s x
826
829
: E → (E [×(n + 1 )]→L[𝕜] F)) (m 0 ) (tail m) :
827
- by rw fderiv_within_congr (hs x hx) A (A x hx)
830
+ by rw fderiv_within_congr A (A x hx)
828
831
... = (I ∘ fderiv_within 𝕜 ((iterated_fderiv_within 𝕜 n (fderiv_within 𝕜 f s) s)) s x
829
832
: E → (E [×(n + 1 )]→L[𝕜] F)) (m 0 ) (tail m) :
830
833
by { rw linear_isometry_equiv.comp_fderiv_within _ (hs x hx), refl }
@@ -849,72 +852,87 @@ lemma norm_iterated_fderiv_within_fderiv_within {n : ℕ} (hs : unique_diff_on
849
852
by rw [iterated_fderiv_within_succ_eq_comp_right hs hx, linear_isometry_equiv.norm_map]
850
853
851
854
@[simp] lemma iterated_fderiv_within_one_apply
852
- (hs : unique_diff_on 𝕜 s) (hx : x ∈ s ) (m : ( fin 1 ) → E) :
855
+ (h : unique_diff_within_at 𝕜 s x ) (m : fin 1 → E) :
853
856
(iterated_fderiv_within 𝕜 1 f s x : ((fin 1 ) → E) → F) m
854
857
= (fderiv_within 𝕜 f s x : E → F) (m 0 ) :=
855
- by { rw [iterated_fderiv_within_succ_apply_right hs hx, iterated_fderiv_within_zero_apply], refl }
858
+ begin
859
+ simp only [iterated_fderiv_within_succ_apply_left, iterated_fderiv_within_zero_eq_comp,
860
+ (continuous_multilinear_curry_fin0 𝕜 E F).symm.comp_fderiv_within h],
861
+ refl
862
+ end
856
863
857
- /-- If two functions coincide on a set `s` of unique differentiability, then their iterated
858
- differentials within this set coincide. -/
859
- lemma iterated_fderiv_within_congr {n : ℕ}
860
- (hs : unique_diff_on 𝕜 s) (hL : ∀y∈s, f₁ y = f y) (hx : x ∈ s) :
861
- iterated_fderiv_within 𝕜 n f₁ s x = iterated_fderiv_within 𝕜 n f s x :=
864
+ lemma filter.eventually_eq.iterated_fderiv_within' (h : f₁ =ᶠ[𝓝[s] x] f) (ht : t ⊆ s) (n : ℕ) :
865
+ iterated_fderiv_within 𝕜 n f₁ t =ᶠ[𝓝[s] x] iterated_fderiv_within 𝕜 n f t :=
862
866
begin
863
- induction n with n IH generalizing x,
864
- { ext m, simp [hL x hx] },
865
- { have : fderiv_within 𝕜 (λ y, iterated_fderiv_within 𝕜 n f₁ s y) s x
866
- = fderiv_within 𝕜 (λ y, iterated_fderiv_within 𝕜 n f s y) s x :=
867
- fderiv_within_congr (hs x hx) (λ y hy, IH hy) (IH hx),
868
- ext m,
869
- rw [iterated_fderiv_within_succ_apply_left, iterated_fderiv_within_succ_apply_left, this ] }
867
+ induction n with n ihn,
868
+ { exact h.mono (λ y hy, fun_like.ext _ _ $ λ _, hy) },
869
+ { have : fderiv_within 𝕜 _ t =ᶠ[𝓝[s] x] fderiv_within 𝕜 _ t := ihn.fderiv_within' ht,
870
+ apply this.mono,
871
+ intros y hy,
872
+ simp only [iterated_fderiv_within_succ_eq_comp_left, hy, (∘)] }
870
873
end
871
874
872
- /-- The iterated differential within a set `s` at a point `x` is not modified if one intersects
873
- `s` with an open set containing `x`. -/
874
- lemma iterated_fderiv_within_inter_open {n : ℕ} (hu : is_open u)
875
- (hs : unique_diff_on 𝕜 (s ∩ u)) (hx : x ∈ s ∩ u) :
876
- iterated_fderiv_within 𝕜 n f (s ∩ u) x = iterated_fderiv_within 𝕜 n f s x :=
875
+ protected lemma filter.eventually_eq.iterated_fderiv_within (h : f₁ =ᶠ[𝓝[s] x] f) (n : ℕ) :
876
+ iterated_fderiv_within 𝕜 n f₁ s =ᶠ[𝓝[s] x] iterated_fderiv_within 𝕜 n f s :=
877
+ h.iterated_fderiv_within' subset.rfl n
878
+
879
+ /-- If two functions coincide in a neighborhood of `x` within a set `s` and at `x`, then their
880
+ iterated differentials within this set at `x` coincide. -/
881
+ lemma filter.eventually_eq.iterated_fderiv_within_eq (h : f₁ =ᶠ[𝓝[s] x] f) (hx : f₁ x = f x)
882
+ (n : ℕ) : iterated_fderiv_within 𝕜 n f₁ s x = iterated_fderiv_within 𝕜 n f s x :=
883
+ have f₁ =ᶠ[𝓝[insert x s] x] f, by simpa [eventually_eq, hx],
884
+ (this.iterated_fderiv_within' (subset_insert _ _) n).self_of_nhds_within (mem_insert _ _)
885
+
886
+ /-- If two functions coincide on a set `s`, then their iterated differentials within this set
887
+ coincide. See also `filter.eventually_eq.iterated_fderiv_within_eq` and
888
+ `filter.eventually_eq.iterated_fderiv_within`. -/
889
+ lemma iterated_fderiv_within_congr (hs : eq_on f₁ f s) (hx : x ∈ s) (n : ℕ) :
890
+ iterated_fderiv_within 𝕜 n f₁ s x = iterated_fderiv_within 𝕜 n f s x :=
891
+ (hs.eventually_eq.filter_mono inf_le_right).iterated_fderiv_within_eq (hs hx) _
892
+
893
+ /-- If two functions coincide on a set `s`, then their iterated differentials within this set
894
+ coincide. See also `filter.eventually_eq.iterated_fderiv_within_eq` and
895
+ `filter.eventually_eq.iterated_fderiv_within`. -/
896
+ protected lemma set.eq_on.iterated_fderiv_within (hs : eq_on f₁ f s) (n : ℕ) :
897
+ eq_on (iterated_fderiv_within 𝕜 n f₁ s) (iterated_fderiv_within 𝕜 n f s) s :=
898
+ λ x hx, iterated_fderiv_within_congr hs hx n
899
+
900
+ lemma iterated_fderiv_within_eventually_congr_set' (y : E) (h : s =ᶠ[𝓝[{y}ᶜ] x] t) (n : ℕ) :
901
+ iterated_fderiv_within 𝕜 n f s =ᶠ[𝓝 x] iterated_fderiv_within 𝕜 n f t :=
877
902
begin
878
- induction n with n IH generalizing x,
879
- { ext m, simp },
880
- { have A : fderiv_within 𝕜 (λ y, iterated_fderiv_within 𝕜 n f (s ∩ u) y) (s ∩ u) x
881
- = fderiv_within 𝕜 (λ y, iterated_fderiv_within 𝕜 n f s y) (s ∩ u) x :=
882
- fderiv_within_congr (hs x hx) (λ y hy, IH hy) (IH hx),
883
- have B : fderiv_within 𝕜 (λ y, iterated_fderiv_within 𝕜 n f s y) (s ∩ u) x
884
- = fderiv_within 𝕜 (λ y, iterated_fderiv_within 𝕜 n f s y) s x :=
885
- fderiv_within_inter (is_open.mem_nhds hu hx.2 )
886
- ((unique_diff_within_at_inter (is_open.mem_nhds hu hx.2 )).1 (hs x hx)),
887
- ext m,
888
- rw [iterated_fderiv_within_succ_apply_left, iterated_fderiv_within_succ_apply_left, A, B] }
903
+ induction n with n ihn generalizing x,
904
+ { refl },
905
+ { refine (eventually_nhds_nhds_within.2 h).mono (λ y hy, _),
906
+ simp only [iterated_fderiv_within_succ_eq_comp_left, (∘)],
907
+ rw [(ihn hy).fderiv_within_eq_nhds, fderiv_within_congr_set' _ hy] }
889
908
end
890
909
910
+ lemma iterated_fderiv_within_eventually_congr_set (h : s =ᶠ[𝓝 x] t) (n : ℕ) :
911
+ iterated_fderiv_within 𝕜 n f s =ᶠ[𝓝 x] iterated_fderiv_within 𝕜 n f t :=
912
+ iterated_fderiv_within_eventually_congr_set' x (h.filter_mono inf_le_left) n
913
+
914
+ lemma iterated_fderiv_within_congr_set (h : s =ᶠ[𝓝 x] t) (n : ℕ) :
915
+ iterated_fderiv_within 𝕜 n f s x = iterated_fderiv_within 𝕜 n f t x :=
916
+ (iterated_fderiv_within_eventually_congr_set h n).self_of_nhds
917
+
891
918
/-- The iterated differential within a set `s` at a point `x` is not modified if one intersects
892
919
`s` with a neighborhood of `x` within `s`. -/
893
- lemma iterated_fderiv_within_inter' {n : ℕ}
894
- (hu : u ∈ 𝓝[s] x) (hs : unique_diff_on 𝕜 s) (xs : x ∈ s) :
920
+ lemma iterated_fderiv_within_inter' {n : ℕ} (hu : u ∈ 𝓝[s] x) :
895
921
iterated_fderiv_within 𝕜 n f (s ∩ u) x = iterated_fderiv_within 𝕜 n f s x :=
896
- begin
897
- obtain ⟨v, v_open, xv, vu⟩ : ∃ v, is_open v ∧ x ∈ v ∧ v ∩ s ⊆ u := mem_nhds_within.1 hu,
898
- have A : (s ∩ u) ∩ v = s ∩ v,
899
- { apply subset.antisymm (inter_subset_inter (inter_subset_left _ _) (subset.refl _)),
900
- exact λ y ⟨ys, yv⟩, ⟨⟨ys, vu ⟨yv, ys⟩⟩, yv⟩ },
901
- have : iterated_fderiv_within 𝕜 n f (s ∩ v) x = iterated_fderiv_within 𝕜 n f s x :=
902
- iterated_fderiv_within_inter_open v_open (hs.inter v_open) ⟨xs, xv⟩,
903
- rw ← this ,
904
- have : iterated_fderiv_within 𝕜 n f ((s ∩ u) ∩ v) x = iterated_fderiv_within 𝕜 n f (s ∩ u) x,
905
- { refine iterated_fderiv_within_inter_open v_open _ ⟨⟨xs, vu ⟨xv, xs⟩⟩, xv⟩,
906
- rw A,
907
- exact hs.inter v_open },
908
- rw A at this ,
909
- rw ← this
910
- end
922
+ iterated_fderiv_within_congr_set (nhds_within_eq_iff_eventually_eq.1 $ nhds_within_inter_of_mem' hu)
923
+ _
911
924
912
925
/-- The iterated differential within a set `s` at a point `x` is not modified if one intersects
913
926
`s` with a neighborhood of `x`. -/
914
- lemma iterated_fderiv_within_inter {n : ℕ}
915
- (hu : u ∈ 𝓝 x) (hs : unique_diff_on 𝕜 s) (xs : x ∈ s) :
927
+ lemma iterated_fderiv_within_inter {n : ℕ} (hu : u ∈ 𝓝 x) :
916
928
iterated_fderiv_within 𝕜 n f (s ∩ u) x = iterated_fderiv_within 𝕜 n f s x :=
917
- iterated_fderiv_within_inter' (mem_nhds_within_of_mem_nhds hu) hs xs
929
+ iterated_fderiv_within_inter' (mem_nhds_within_of_mem_nhds hu)
930
+
931
+ /-- The iterated differential within a set `s` at a point `x` is not modified if one intersects
932
+ `s` with an open set containing `x`. -/
933
+ lemma iterated_fderiv_within_inter_open {n : ℕ} (hu : is_open u) (hx : x ∈ u) :
934
+ iterated_fderiv_within 𝕜 n f (s ∩ u) x = iterated_fderiv_within 𝕜 n f s x :=
935
+ iterated_fderiv_within_inter (hu.mem_nhds hx)
918
936
919
937
@[simp] lemma cont_diff_on_zero :
920
938
cont_diff_on 𝕜 0 f s ↔ continuous_on f s :=
@@ -979,14 +997,14 @@ begin
979
997
rw inter_comm at ho,
980
998
have : p x m.succ = ftaylor_series_within 𝕜 f s x m.succ,
981
999
{ change p x m.succ = iterated_fderiv_within 𝕜 m.succ f s x,
982
- rw ← iterated_fderiv_within_inter (is_open.mem_nhds o_open xo) hs hx ,
1000
+ rw [← iterated_fderiv_within_inter_open o_open xo] ,
983
1001
exact (Hp.mono ho).eq_ftaylor_series_of_unique_diff_on le_rfl
984
1002
(hs.inter o_open) ⟨hx, xo⟩ },
985
1003
rw [← this , ← has_fderiv_within_at_inter (is_open.mem_nhds o_open xo)],
986
1004
have A : ∀ y ∈ s ∩ o, p y m = ftaylor_series_within 𝕜 f s y m,
987
1005
{ rintros y ⟨hy, yo⟩,
988
1006
change p y m = iterated_fderiv_within 𝕜 m f s y,
989
- rw ← iterated_fderiv_within_inter (is_open.mem_nhds o_open yo) hs hy ,
1007
+ rw [← iterated_fderiv_within_inter_open o_open yo] ,
990
1008
exact (Hp.mono ho).eq_ftaylor_series_of_unique_diff_on (with_top.coe_le_coe.2 (nat.le_succ m))
991
1009
(hs.inter o_open) ⟨hy, yo⟩ },
992
1010
exact ((Hp.mono ho).fderiv_within m (with_top.coe_lt_coe.2 (lt_add_one m)) x ⟨hx, xo⟩).congr
@@ -1002,7 +1020,7 @@ begin
1002
1020
have A : ∀ y ∈ s ∩ o, p y m = ftaylor_series_within 𝕜 f s y m,
1003
1021
{ rintros y ⟨hy, yo⟩,
1004
1022
change p y m = iterated_fderiv_within 𝕜 m f s y,
1005
- rw ← iterated_fderiv_within_inter (is_open.mem_nhds o_open yo) hs hy ,
1023
+ rw [← iterated_fderiv_within_inter_open o_open yo] ,
1006
1024
exact (Hp.mono ho).eq_ftaylor_series_of_unique_diff_on le_rfl
1007
1025
(hs.inter o_open) ⟨hy, yo⟩ },
1008
1026
exact ((Hp.mono ho).cont m le_rfl).congr (λ y hy, (A y hy).symm) }
@@ -1047,22 +1065,37 @@ lemma cont_diff_on.differentiable_on_iterated_fderiv_within {m : ℕ}
1047
1065
differentiable_on 𝕜 (iterated_fderiv_within 𝕜 m f s) s :=
1048
1066
λ x hx, ((h.ftaylor_series_within hs).fderiv_within m hmn x hx).differentiable_within_at
1049
1067
1068
+ lemma cont_diff_within_at.differentiable_within_at_iterated_fderiv_within {m : ℕ}
1069
+ (h : cont_diff_within_at 𝕜 n f s x) (hmn : (m : ℕ∞) < n)
1070
+ (hs : unique_diff_on 𝕜 (insert x s)) :
1071
+ differentiable_within_at 𝕜 (iterated_fderiv_within 𝕜 m f s) s x :=
1072
+ begin
1073
+ rcases h.cont_diff_on' (enat.add_one_le_of_lt hmn) with ⟨u, uo, xu, hu⟩,
1074
+ set t := insert x s ∩ u,
1075
+ have A : t =ᶠ[𝓝[≠] x] s,
1076
+ { simp only [set_eventually_eq_iff_inf_principal, ← nhds_within_inter'],
1077
+ rw [← inter_assoc, nhds_within_inter_of_mem', ← diff_eq_compl_inter, insert_diff_of_mem,
1078
+ diff_eq_compl_inter],
1079
+ exacts [rfl, mem_nhds_within_of_mem_nhds (uo.mem_nhds xu)] },
1080
+ have B : iterated_fderiv_within 𝕜 m f s =ᶠ[𝓝 x] iterated_fderiv_within 𝕜 m f t,
1081
+ from iterated_fderiv_within_eventually_congr_set' _ A.symm _,
1082
+ have C : differentiable_within_at 𝕜 (iterated_fderiv_within 𝕜 m f t) t x,
1083
+ from hu.differentiable_on_iterated_fderiv_within (nat.cast_lt.2 m.lt_succ_self) (hs.inter uo) x
1084
+ ⟨mem_insert _ _, xu⟩,
1085
+ rw [differentiable_within_at_congr_set' _ A] at C,
1086
+ exact C.congr_of_eventually_eq (B.filter_mono inf_le_left) B.self_of_nhds
1087
+ end
1088
+
1050
1089
lemma cont_diff_on_iff_continuous_on_differentiable_on
1051
1090
(hs : unique_diff_on 𝕜 s) :
1052
1091
cont_diff_on 𝕜 n f s ↔
1053
1092
(∀ (m : ℕ), (m : ℕ∞) ≤ n →
1054
1093
continuous_on (λ x, iterated_fderiv_within 𝕜 m f s x) s)
1055
1094
∧ (∀ (m : ℕ), (m : ℕ∞) < n →
1056
1095
differentiable_on 𝕜 (λ x, iterated_fderiv_within 𝕜 m f s x) s) :=
1057
- begin
1058
- split,
1059
- { assume h,
1060
- split,
1061
- { assume m hm, exact h.continuous_on_iterated_fderiv_within hm hs },
1062
- { assume m hm, exact h.differentiable_on_iterated_fderiv_within hm hs } },
1063
- { assume h,
1064
- exact cont_diff_on_of_continuous_on_differentiable_on h.1 h.2 }
1065
- end
1096
+ ⟨λ h, ⟨λ m hm, h.continuous_on_iterated_fderiv_within hm hs,
1097
+ λ m hm, h.differentiable_on_iterated_fderiv_within hm hs⟩,
1098
+ λ h, cont_diff_on_of_continuous_on_differentiable_on h.1 h.2 ⟩
1066
1099
1067
1100
lemma cont_diff_on_succ_of_fderiv_within {n : ℕ} (hf : differentiable_on 𝕜 f s)
1068
1101
(h : cont_diff_on 𝕜 n (λ y, fderiv_within 𝕜 f s y) s) :
@@ -1095,7 +1128,7 @@ begin
1095
1128
apply filter.eventually_eq_of_mem this (λ y hy, _),
1096
1129
have A : fderiv_within 𝕜 f (s ∩ o) y = f' y :=
1097
1130
((hff' y (ho hy)).mono ho).fderiv_within (hs.inter o_open y hy),
1098
- rwa fderiv_within_inter (is_open .mem_nhds o_open hy.2 ) (hs y hy. 1 ) at A
1131
+ rwa fderiv_within_inter (o_open .mem_nhds hy.2 ) at A
1099
1132
end
1100
1133
1101
1134
lemma cont_diff_on_succ_iff_has_fderiv_within {n : ℕ} (hs : unique_diff_on 𝕜 s) :
0 commit comments