Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 3a69562

Browse files
committed
feat(analysis/calculus): drop unneeded assumptions (#19045)
* Prove more precise congruence lemmas for derivatives. In particular, adding or removing a single point from `s` doesn't change anything about derivatives within `s`. * Drop `has_fderiv_within_at.antimono` and `has_deriv_within_at.antimono`, use stronger `*.mono_of_mem` lemmas instead. * Prove some equalities about `(f)deriv_within` by using `simp` instead of `slit_ifs`: if `has_fderiv_within_at f f' s x ↔ has_fderiv_within_at g g' t y`, then `fderiv_within f s x = fderiv_within g t y`.
1 parent d4f691b commit 3a69562

File tree

9 files changed

+295
-271
lines changed

9 files changed

+295
-271
lines changed

src/analysis/calculus/cont_diff.lean

Lines changed: 12 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,7 @@ begin
327327
have Z : fderiv_within 𝕜 (iterated_fderiv_within 𝕜 i (g ∘ f) s) s x =
328328
fderiv_within 𝕜 (λ y, g.comp_continuous_multilinear_mapL (λ (j : fin i), E)
329329
(iterated_fderiv_within 𝕜 i f s y)) s x,
330-
from fderiv_within_congr' (hs x hx) (λ y hy, IH hy) hx,
330+
from fderiv_within_congr' @IH hx,
331331
simp_rw Z,
332332
rw (g.comp_continuous_multilinear_mapL (λ (j : fin i), E)).comp_fderiv_within (hs x hx),
333333
simp only [continuous_linear_map.coe_comp', continuous_linear_equiv.coe_coe, comp_app,
@@ -495,7 +495,7 @@ begin
495495
have : fderiv_within 𝕜 (iterated_fderiv_within 𝕜 i (f ∘ ⇑g) (⇑g ⁻¹' s)) (⇑g ⁻¹' s) x
496496
= fderiv_within 𝕜 (λ y, continuous_multilinear_map.comp_continuous_linear_map_equivL _
497497
(λ (_x : fin i), g) (iterated_fderiv_within 𝕜 i f s (g y))) (g ⁻¹' s) x,
498-
from fderiv_within_congr' (g.unique_diff_on_preimage_iff.2 hs x hx) (λ y hy, IH hy) hx,
498+
from fderiv_within_congr' @IH hx,
499499
rw [this],
500500
rw continuous_linear_equiv.comp_fderiv_within _ (g.unique_diff_on_preimage_iff.2 hs x hx),
501501
simp only [continuous_linear_map.coe_comp', continuous_linear_equiv.coe_coe, comp_app,
@@ -1332,14 +1332,10 @@ begin
13321332
= fderiv_within 𝕜 (iterated_fderiv_within 𝕜 i (f + g) s) s x (h 0) (fin.tail h) : rfl
13331333
... = fderiv_within 𝕜 (iterated_fderiv_within 𝕜 i f s + iterated_fderiv_within 𝕜 i g s) s x
13341334
(h 0) (fin.tail h) :
1335-
begin
1336-
congr' 2,
1337-
exact fderiv_within_congr (hu x hx) (λ _, hi hcdf hcdg) (hi hcdf hcdg hx),
1338-
end
1335+
by { rw [fderiv_within_congr' (λ _, hi hcdf hcdg) hx], refl }
13391336
... = (fderiv_within 𝕜 (iterated_fderiv_within 𝕜 i f s) s +
1340-
fderiv_within 𝕜 (iterated_fderiv_within 𝕜 i g s) s)
1341-
x (h 0) (fin.tail h) :
1342-
by rw [pi.add_def, fderiv_within_add (hu x hx) (hdf x hx) (hdg x hx)]; refl
1337+
fderiv_within 𝕜 (iterated_fderiv_within 𝕜 i g s) s) x (h 0) (fin.tail h) :
1338+
by { rw [pi.add_def, fderiv_within_add (hu x hx) (hdf x hx) (hdg x hx)], refl }
13431339
... = (iterated_fderiv_within 𝕜 (i+1) f s + iterated_fderiv_within 𝕜 (i+1) g s) x h : rfl }
13441340
end
13451341

@@ -1409,14 +1405,10 @@ begin
14091405
with_top.coe_lt_coe.mpr (nat.lt_succ_self _),
14101406
calc iterated_fderiv_within 𝕜 (i+1) (-f) s x h
14111407
= fderiv_within 𝕜 (iterated_fderiv_within 𝕜 i (-f) s) s x (h 0) (fin.tail h) : rfl
1412-
... = fderiv_within 𝕜 (-iterated_fderiv_within 𝕜 i f s) s x
1413-
(h 0) (fin.tail h) :
1414-
begin
1415-
congr' 2,
1416-
exact fderiv_within_congr (hu x hx) (λ _, hi) (hi hx),
1417-
end
1408+
... = fderiv_within 𝕜 (-iterated_fderiv_within 𝕜 i f s) s x (h 0) (fin.tail h) :
1409+
by { rw [fderiv_within_congr' @hi hx], refl }
14181410
... = -(fderiv_within 𝕜 (iterated_fderiv_within 𝕜 i f s) s) x (h 0) (fin.tail h) :
1419-
by rw [pi.neg_def, fderiv_within_neg (hu x hx)]; refl
1411+
by { rw [pi.neg_def, fderiv_within_neg (hu x hx)], refl }
14201412
... = - (iterated_fderiv_within 𝕜 (i+1) f s) x h : rfl }
14211413
end
14221414

@@ -1675,12 +1667,9 @@ begin
16751667
calc iterated_fderiv_within 𝕜 (i+1) (a • f) s x h
16761668
= fderiv_within 𝕜 (iterated_fderiv_within 𝕜 i (a • f) s) s x (h 0) (fin.tail h) : rfl
16771669
... = fderiv_within 𝕜 (a • iterated_fderiv_within 𝕜 i f s) s x (h 0) (fin.tail h) :
1678-
begin
1679-
congr' 2,
1680-
exact fderiv_within_congr (hu x hx) (λ _, hi hcdf) (hi hcdf hx),
1681-
end
1670+
by { rw [fderiv_within_congr' (λ _, hi hcdf) hx], refl }
16821671
... = (a • fderiv_within 𝕜 (iterated_fderiv_within 𝕜 i f s)) s x (h 0) (fin.tail h) :
1683-
by rw [pi.smul_def, fderiv_within_const_smul (hu x hx) (hdf x hx)]; refl
1672+
by { rw [pi.smul_def, fderiv_within_const_smul (hu x hx) (hdf x hx)], refl }
16841673
... = a • iterated_fderiv_within 𝕜 (i+1) f s x h : rfl }
16851674
end
16861675

@@ -2432,7 +2421,7 @@ begin
24322421
(λ (y : Du), fderiv_within 𝕜 (λ (y : Du), B (f y) (g y)) s y) s x
24332422
= iterated_fderiv_within 𝕜 n (λ y, B.precompR Du (f y) (fderiv_within 𝕜 g s y)
24342423
+ B.precompL Du (fderiv_within 𝕜 f s y) (g y)) s x,
2435-
{ apply iterated_fderiv_within_congr hs (λ y hy, _) hx,
2424+
{ apply iterated_fderiv_within_congr (λ y hy, _) hx,
24362425
have L : (1 : ℕ∞) ≤ n.succ,
24372426
by simpa only [enat.coe_one, nat.one_le_cast] using nat.succ_pos n,
24382427
exact B.fderiv_within_of_bilinear (hf.differentiable_on L y hy)
@@ -2707,7 +2696,7 @@ begin
27072696
begin
27082697
have L : (1 : ℕ∞) ≤ n.succ, by simpa only [enat.coe_one, nat.one_le_cast] using n.succ_pos,
27092698
congr' 1,
2710-
apply iterated_fderiv_within_congr hs (λ y hy, _) hx,
2699+
refine iterated_fderiv_within_congr (λ y hy, _) hx _,
27112700
apply fderiv_within.comp _ _ _ hst (hs y hy),
27122701
{ exact hg.differentiable_on L _ (hst hy) },
27132702
{ exact hf.differentiable_on L _ hy }

src/analysis/calculus/cont_diff_def.lean

Lines changed: 107 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ derivative, differentiability, higher derivative, `C^n`, multilinear, Taylor ser
156156
-/
157157

158158
noncomputable theory
159-
open_locale classical big_operators nnreal topology
159+
open_locale classical big_operators nnreal topology filter
160160

161161
local notation `∞` := (⊤ : ℕ∞)
162162

@@ -645,19 +645,22 @@ lemma cont_diff_on.cont_diff_within_at (h : cont_diff_on 𝕜 n f s) (hx : x ∈
645645
cont_diff_within_at 𝕜 n f s x :=
646646
h x hx
647647

648-
lemma cont_diff_within_at.cont_diff_on {m : ℕ}
648+
lemma cont_diff_within_at.cont_diff_on' {m : ℕ}
649649
(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) :=
651651
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⟩
659656
end
660657

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+
661664
protected lemma cont_diff_within_at.eventually {n : ℕ}
662665
(h : cont_diff_within_at 𝕜 n f s x) :
663666
∀ᶠ y in 𝓝[insert x s] x, cont_diff_within_at 𝕜 n f s y :=
@@ -824,7 +827,7 @@ begin
824827
: E → (E [×(n + 1)]→L[𝕜] F)) (m 0) (tail m) : rfl
825828
... = (fderiv_within 𝕜 (I ∘ (iterated_fderiv_within 𝕜 n (fderiv_within 𝕜 f s) s)) s x
826829
: 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)
828831
... = (I ∘ fderiv_within 𝕜 ((iterated_fderiv_within 𝕜 n (fderiv_within 𝕜 f s) s)) s x
829832
: E → (E [×(n + 1)]→L[𝕜] F)) (m 0) (tail m) :
830833
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
849852
by rw [iterated_fderiv_within_succ_eq_comp_right hs hx, linear_isometry_equiv.norm_map]
850853

851854
@[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) :
853856
(iterated_fderiv_within 𝕜 1 f s x : ((fin 1) → E) → F) m
854857
= (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
856863

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 :=
862866
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, (∘)] }
870873
end
871874

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 :=
877902
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] }
889908
end
890909

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+
891918
/-- The iterated differential within a set `s` at a point `x` is not modified if one intersects
892919
`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) :
895921
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+
_
911924

912925
/-- The iterated differential within a set `s` at a point `x` is not modified if one intersects
913926
`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) :
916928
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)
918936

919937
@[simp] lemma cont_diff_on_zero :
920938
cont_diff_on 𝕜 0 f s ↔ continuous_on f s :=
@@ -979,14 +997,14 @@ begin
979997
rw inter_comm at ho,
980998
have : p x m.succ = ftaylor_series_within 𝕜 f s x m.succ,
981999
{ 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],
9831001
exact (Hp.mono ho).eq_ftaylor_series_of_unique_diff_on le_rfl
9841002
(hs.inter o_open) ⟨hx, xo⟩ },
9851003
rw [← this, ← has_fderiv_within_at_inter (is_open.mem_nhds o_open xo)],
9861004
have A : ∀ y ∈ s ∩ o, p y m = ftaylor_series_within 𝕜 f s y m,
9871005
{ rintros y ⟨hy, yo⟩,
9881006
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],
9901008
exact (Hp.mono ho).eq_ftaylor_series_of_unique_diff_on (with_top.coe_le_coe.2 (nat.le_succ m))
9911009
(hs.inter o_open) ⟨hy, yo⟩ },
9921010
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
10021020
have A : ∀ y ∈ s ∩ o, p y m = ftaylor_series_within 𝕜 f s y m,
10031021
{ rintros y ⟨hy, yo⟩,
10041022
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],
10061024
exact (Hp.mono ho).eq_ftaylor_series_of_unique_diff_on le_rfl
10071025
(hs.inter o_open) ⟨hy, yo⟩ },
10081026
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 : ℕ}
10471065
differentiable_on 𝕜 (iterated_fderiv_within 𝕜 m f s) s :=
10481066
λ x hx, ((h.ftaylor_series_within hs).fderiv_within m hmn x hx).differentiable_within_at
10491067

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+
10501089
lemma cont_diff_on_iff_continuous_on_differentiable_on
10511090
(hs : unique_diff_on 𝕜 s) :
10521091
cont_diff_on 𝕜 n f s ↔
10531092
(∀ (m : ℕ), (m : ℕ∞) ≤ n →
10541093
continuous_on (λ x, iterated_fderiv_within 𝕜 m f s x) s)
10551094
∧ (∀ (m : ℕ), (m : ℕ∞) < n →
10561095
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
10661099

10671100
lemma cont_diff_on_succ_of_fderiv_within {n : ℕ} (hf : differentiable_on 𝕜 f s)
10681101
(h : cont_diff_on 𝕜 n (λ y, fderiv_within 𝕜 f s y) s) :
@@ -1095,7 +1128,7 @@ begin
10951128
apply filter.eventually_eq_of_mem this (λ y hy, _),
10961129
have A : fderiv_within 𝕜 f (s ∩ o) y = f' y :=
10971130
((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
10991132
end
11001133

11011134
lemma cont_diff_on_succ_iff_has_fderiv_within {n : ℕ} (hs : unique_diff_on 𝕜 s) :

0 commit comments

Comments
 (0)