Analysis II (Tao, 2022) -- Chapter 04 -- Section 02 -- Part 1

open Classicalsection Chap04section Section02

Definition 4.2.1 (Real analytic at a point): let failed to synthesize HasSubset Type Hint: Additional diagnostic information may be available using the `set_option diagnostics true` command.Unknown identifier `E`E , , and Unknown identifier `a`sorry sorry : Propa Unknown identifier `E`E be an interior point of Unknown identifier `E`E. The function Unknown identifier `f`f is real analytic at Unknown identifier `a`a if there exist Unknown identifier `r`sorry > 0 : Propr > 0 and coefficients such that failed to synthesize HasSubset (?m.3 × ?m.4) Hint: Additional diagnostic information may be available using the `set_option diagnostics true` command.(Unknown identifier `a`a-Unknown identifier `r`r, Unknown identifier `a`a+Unknown identifier `r`r) Unknown identifier `E`E, the power series converges for every failed to synthesize Membership ?m.1 (?m.4 × ?m.5) Hint: Additional diagnostic information may be available using the `set_option diagnostics true` command.Unknown identifier `x`x (Unknown identifier `a`a-Unknown identifier `r`r, Unknown identifier `a`a+Unknown identifier `r`r) (encoding radius of convergence at least Unknown identifier `r`r), and Unknown identifier `f`f x equals that series on (sorry - sorry, sorry + sorry) : ?m.1 × ?m.2(Unknown identifier `a`a-Unknown identifier `r`r, Unknown identifier `a`a+Unknown identifier `r`r).

def IsRealAnalyticAt (E : Set ) (f : E ) (a : E) : Prop := (a : ) interior E r : , 0 < r hI : Set.Ioo ((a : ) - r) ((a : ) + r) E, c : , ( x Set.Ioo ((a : ) - r) ((a : ) + r), Summable (fun n : => c n * (x - (a : )) ^ n)) x (hx : x Set.Ioo ((a : ) - r) ((a : ) + r)), f x, hI hx = ∑' n : , c n * (x - (a : )) ^ n

A function on Unknown identifier `E`E is real analytic on Unknown identifier `E`E when Unknown identifier `E`E is open and the function is real analytic at each point of Unknown identifier `E`E.

def IsRealAnalyticOn (E : Set ) (f : E ) : Prop := IsOpen E a : E, IsRealAnalyticAt E f a

A set of real numbers has no isolated points if every Unknown identifier `x`sorry sorry : Propx Unknown identifier `E`E is a limit point of Unknown identifier `E`E.

def HasNoIsolatedPoints (E : Set ) : Prop := x E, x closure (E \ {x})

Canonical extension of to : Type, taking value 0 : 0 off Unknown identifier `E`E.

noncomputable def SubtypeExtension (E : Set ) (f : E ) : := fun x => if hx : x E then f x, hx else 0

The first derivative , defined by the within-set derivative on Unknown identifier `E`E.

noncomputable def FirstDerivativeSub (E : Set ) (f : E ) : E := fun x => derivWithin (SubtypeExtension E f) E x

Iterated derivatives on Unknown identifier `E`E: Unknown identifier `f`sorry ^ 0 = sorry : Propf^(0)=Unknown identifier `f`f and Unknown identifier `f`sorry ^ (sorry + 1) : ?m.11f^(Unknown identifier `n`n+1) is the first derivative of Unknown identifier `f`sorry ^ sorry : ?m.5f^(Unknown identifier `n`n).

noncomputable def IteratedDerivativeSub (E : Set ) (f : E ) : E | 0 => f | n + 1 => FirstDerivativeSub E (IteratedDerivativeSub E f n)

A function is once differentiable on Unknown identifier `E`E when it is differentiable within Unknown identifier `E`E at every point of Unknown identifier `E`E.

def IsOnceDifferentiableSub (E : Set ) (f : E ) : Prop := x : E, DifferentiableWithinAt (SubtypeExtension E f) E (x : )

Definition 4.2.2 (Unknown identifier `k`k-times differentiability on a set).

(i) once differentiable means differentiable at every point of Unknown identifier `E`E; (ii) for Unknown identifier `k`sorry 2 : Propk 2, Unknown identifier `k`k-times differentiable is defined recursively via the derivative; (iii) iterated derivatives are Unknown identifier `f`sorry ^ 0 = sorry : Propf^(0)=Unknown identifier `f`f, Unknown identifier `f`sorry ^ 1 = sorry : Propf^(1)=Unknown identifier `f'`f', ; (iv) infinitely differentiable (smooth) means Unknown identifier `k`k-times differentiable for every Unknown identifier `k`sorry 0 : Propk 0.

The standing hypothesis that every point of Unknown identifier `E`E is a limit point of Unknown identifier `E`E is recorded by HasNoIsolatedPoints sorry : PropHasNoIsolatedPoints Unknown identifier `E`E as part of the definition.

def IsKTimesDifferentiableSub (E : Set ) (f : E ) : Prop := fun k => HasNoIsolatedPoints E Nat.rec (motive := fun _ => Prop) True (fun n ih => IsOnceDifferentiableSub E (IteratedDerivativeSub E f n) ih) k

A function on Unknown identifier `E`E is smooth when it is Unknown identifier `k`k-times differentiable for every .

def IsSmoothSub (E : Set ) (f : E ) : Prop := k : , IsKTimesDifferentiableSub E f k

The function on : Type.

def absCube : := fun x => |x| ^ (3 : )

Helper for Proposition 4.2.1: rewrite absCube : absCube using real powers.

lemma helperForProposition_4_2_1_absCube_eq_absRpowThree : absCube = fun x : => |x| ^ (3 : ) := by funext x simp [absCube]

Helper for Proposition 4.2.1: derivative formula for .

lemma helperForProposition_4_2_1_hasDerivAt_absCube (x : ) : HasDerivAt absCube (3 * x * |x|) x := by have hRpow := hasDerivAt_abs_rpow x (by norm_num : (1 : ) < 3) have hDerivEq : 3 * |x| ^ ((3 : ) - 2) * x = 3 * x * |x| := by calc 3 * |x| ^ ((3 : ) - 2) * x = 3 * |x| ^ (1 : ) * x := by norm_num _ = 3 * |x| * x := by simp [Real.rpow_one] _ = 3 * x * |x| := by ring have hMain : HasDerivAt (fun y : => |y| ^ (3 : )) (3 * x * |x|) x := hRpow.congr_deriv hDerivEq simpa [helperForProposition_4_2_1_absCube_eq_absRpowThree] using hMain

Helper for Proposition 4.2.1: derivative formula for .

lemma helperForProposition_4_2_1_hasDerivAt_xMulAbs (x : ) : HasDerivAt (fun y : => y * |y|) (2 * |x|) x := by by_cases hx0 : x = 0 · subst hx0 have hZero : HasDerivAt (fun y : => y * |y|) 0 0 := by refine (hasDerivAt_iff_tendsto_slope_zero).2 ?_ have hAbs : Filter.Tendsto (fun t : => |t|) (nhdsWithin (0 : ) ({0})) (nhds (0 : )) := by have hcont : Continuous (fun t : => |t|) := continuous_abs simpa using hcont.continuousAt.tendsto.mono_left (nhdsWithin_le_nhds : nhdsWithin (0 : ) ({0}) nhds (0 : )) have hEq : (fun t : => t⁻¹ ((0 + t) * |0 + t| - 0 * |0|)) =ᶠ[nhdsWithin (0 : ) ({0})] (fun t : => |t|) := by filter_upwards [self_mem_nhdsWithin] with t ht have ht0 : t 0 := by simpa using ht calc t⁻¹ ((0 + t) * |0 + t| - 0 * |0|) = t⁻¹ * (t * |t|) := by simp [smul_eq_mul] _ = (t⁻¹ * t) * |t| := by ring _ = |t| := by simp [ht0] have hSlope : Filter.Tendsto (fun t : => t⁻¹ ((0 + t) * |0 + t| - 0 * |0|)) (nhdsWithin (0 : ) ({0})) (nhds (0 : )) := Filter.Tendsto.congr' hEq.symm hAbs exact hSlope exact hZero.congr_deriv (by simp) · by_cases hxpos : 0 < x · have hMul : HasDerivAt (fun y : => y * |y|) (1 * |x| + x * 1) x := by exact (hasDerivAt_id x).mul (hasDerivAt_abs_pos hxpos) have hDerivEq : 1 * |x| + x * 1 = 2 * |x| := by rw [abs_of_pos hxpos] ring exact hMul.congr_deriv hDerivEq · have hxneg : x < 0 := lt_of_le_of_ne (le_of_not_gt hxpos) hx0 have hMul : HasDerivAt (fun y : => y * |y|) (1 * |x| + x * (-1)) x := by exact (hasDerivAt_id x).mul (hasDerivAt_abs_neg hxneg) have hDerivEq : 1 * |x| + x * (-1) = 2 * |x| := by rw [abs_of_neg hxneg] ring exact hMul.congr_deriv hDerivEq

Helper for Proposition 4.2.1: derivative formula for deriv absCube : deriv absCube.

lemma helperForProposition_4_2_1_hasDerivAt_derivAbsCube (x : ) : HasDerivAt (deriv absCube) (6 * |x|) x := by have hDerivAbsCube : deriv absCube = fun y : => 3 * y * |y| := by funext y exact (helperForProposition_4_2_1_hasDerivAt_absCube y).deriv have hCore : HasDerivAt (fun y : => 3 * y * |y|) (3 * (2 * |x|)) x := by simpa [mul_assoc] using (helperForProposition_4_2_1_hasDerivAt_xMulAbs x).const_mul 3 have hMain : HasDerivAt (deriv absCube) (3 * (2 * |x|)) x := by simpa [hDerivAbsCube] using hCore exact hMain.congr_deriv (by ring)

Helper for Proposition 4.2.1: the second derivative is not differentiable at 0 : 0.

lemma helperForProposition_4_2_1_notDifferentiableAt_zero_secondDeriv : ¬DifferentiableAt (fun x : => 6 * |x|) 0 := by intro h have hAbs : DifferentiableAt (fun x : => |x|) 0 := by simpa [mul_assoc] using h.const_mul (1 / (6 : )) exact not_differentiableAt_abs_zero hAbs

Proposition 4.2.1: for , one has and for all failed to synthesize Membership ?m.1 Type Hint: Additional diagnostic information may be available using the `set_option diagnostics true` command.Unknown identifier `x`x ; hence Unknown identifier `f`f is twice differentiable on : Type, while Unknown identifier `f''`f'' is not differentiable at 0 : 0 (equivalently, Unknown identifier `f`f is not three times differentiable at 0 : 0).

theorem absCube_twiceDifferentiable_and_not_threeTimesDifferentiableAt_zero : Differentiable absCube Differentiable (deriv absCube) ( x : , deriv absCube x = 3 * x * |x|) ( x : , deriv (deriv absCube) x = 6 * |x|) ¬DifferentiableAt (deriv (deriv absCube)) 0 := by have hDiffAbsCube : Differentiable absCube := by intro x exact (helperForProposition_4_2_1_hasDerivAt_absCube x).differentiableAt have hDerivFormula : x : , deriv absCube x = 3 * x * |x| := by intro x exact (helperForProposition_4_2_1_hasDerivAt_absCube x).deriv have hHasDerivDerivAbsCube : x : , HasDerivAt (deriv absCube) (6 * |x|) x := by intro x exact helperForProposition_4_2_1_hasDerivAt_derivAbsCube x have hDiffDerivAbsCube : Differentiable (deriv absCube) := by intro x exact (hHasDerivDerivAbsCube x).differentiableAt have hSecondDerivFormula : x : , deriv (deriv absCube) x = 6 * |x| := by intro x exact (hHasDerivDerivAbsCube x).deriv have hNotDiffAtZero : ¬DifferentiableAt (deriv (deriv absCube)) 0 := by intro h have hEq : deriv (deriv absCube) = fun x : => 6 * |x| := by funext x exact hSecondDerivFormula x have hContradiction : DifferentiableAt (fun x : => 6 * |x|) 0 := by simpa [hEq] using h exact helperForProposition_4_2_1_notDifferentiableAt_zero_secondDeriv hContradiction exact hDiffAbsCube, hDiffDerivAbsCube, hDerivFormula, hSecondDerivFormula, hNotDiffAtZero

Helper for Proposition 4.2.2: open intervals in : Type have no isolated points.

lemma helperForProposition_4_2_2_interval_hasNoIsolatedPoints (a r : ) : HasNoIsolatedPoints (Set.Ioo (a - r) (a + r)) := by intro x hx rw [Metric.mem_closure_iff] intro ε rcases hx with hx_left, hx_right let t : := min (ε / 2) ((a + r - x) / 2) have ht_pos : 0 < t := by unfold t refine lt_min ?_ ?_ · linarith · linarith refine x + t, ?_, ?_ · refine ?_, ?_ · constructor · linarith · have ht_lt : t < a + r - x := by have hhalf_pos : 0 < (a + r - x) / 2 := by linarith have hle : t (a + r - x) / 2 := by unfold t exact min_le_right _ _ linarith linarith · have hx_ne : x + t x := by linarith simpa [Set.mem_singleton_iff] using hx_ne · have hdist : dist x (x + t) = |t| := by rw [Real.dist_eq] ring_nf simp rw [hdist, abs_of_nonneg (le_of_lt ht_pos)] have hle : t ε / 2 := by unfold t exact min_le_left _ _ linarith

Helper for Proposition 4.2.2: the Unknown identifier `k`sorry = 0 : Propk = 0 termwise coefficient factor is 1 : 1.

lemma helperForProposition_4_2_2_kZero_seriesTerm_eq (c : ) (a x : ) : (fun n : => c (n + 0) * ((Nat.factorial (n + 0) : ) / (Nat.factorial n : )) * (x - a) ^ n) = (fun n : => c n * (x - a) ^ n) := by funext n have hne : (Nat.factorial n : ) 0 := by exact_mod_cast Nat.factorial_ne_zero n calc c (n + 0) * ((Nat.factorial (n + 0) : ) / (Nat.factorial n : )) * (x - a) ^ n = c n * ((Nat.factorial n : ) / (Nat.factorial n : )) * (x - a) ^ n := by simp _ = c n * 1 * (x - a) ^ n := by rw [div_self hne] _ = c n * (x - a) ^ n := by simp

Helper for Proposition 4.2.2: the target series identity for Unknown identifier `k`sorry = 0 : Propk = 0.

lemma helperForProposition_4_2_2_seriesFormula_kZero {a r : } (f : Set.Ioo (a - r) (a + r) ) (c : ) (hc : x (hx : x Set.Ioo (a - r) (a + r)), Summable (fun n : => c n * (x - a) ^ n) f x, hx = ∑' n : , c n * (x - a) ^ n) : x (hx : x Set.Ioo (a - r) (a + r)), Summable (fun n : => c (n + 0) * ((Nat.factorial (n + 0) : ) / (Nat.factorial n : )) * (x - a) ^ n) IteratedDerivativeSub (Set.Ioo (a - r) (a + r)) f 0 x, hx = ∑' n : , c (n + 0) * ((Nat.factorial (n + 0) : ) / (Nat.factorial n : )) * (x - a) ^ n := by intro x hx rcases hc x hx with hsum, hEq have hterm : (fun n : => c (n + 0) * ((Nat.factorial (n + 0) : ) / (Nat.factorial n : )) * (x - a) ^ n) = (fun n : => c n * (x - a) ^ n) := helperForProposition_4_2_2_kZero_seriesTerm_eq c a x have hterm_pointwise : n : , c (n + 0) * ((Nat.factorial (n + 0) : ) / (Nat.factorial n : )) * (x - a) ^ n = c n * (x - a) ^ n := by intro n exact congrFun hterm n have hterm_pointwise_symm : n : , c n * (x - a) ^ n = c (n + 0) * ((Nat.factorial (n + 0) : ) / (Nat.factorial n : )) * (x - a) ^ n := by intro n exact (hterm_pointwise n).symm constructor · exact hsum.congr hterm_pointwise_symm · calc IteratedDerivativeSub (Set.Ioo (a - r) (a + r)) f 0 x, hx = ∑' n : , c n * (x - a) ^ n := by simpa [IteratedDerivativeSub] using hEq _ = ∑' n : , c (n + 0) * ((Nat.factorial (n + 0) : ) / (Nat.factorial n : )) * (x - a) ^ n := by have htsum : (∑' n : , c (n + 0) * ((Nat.factorial (n + 0) : ) / (Nat.factorial n : )) * (x - a) ^ n) = (∑' n : , c n * (x - a) ^ n) := by exact tsum_congr hterm_pointwise exact htsum.symm

Helper for Proposition 4.2.2: IteratedDerivativeSub (E : Set ) (f : E ) : E IteratedDerivativeSub agrees pointwise with iteratedDerivWithin.{u_1, u_2} {𝕜 : Type u_1} [NontriviallyNormedField 𝕜] {F : Type u_2} [NormedAddCommGroup F] [NormedSpace 𝕜 F] (n : ) (f : 𝕜 F) (s : Set 𝕜) (x : 𝕜) : FiteratedDerivWithin on the underlying set.

lemma helperForProposition_4_2_2_iteratedDerivativeSub_eq_iteratedDerivWithin (E : Set ) (f : E ) : k x (hx : x E), IteratedDerivativeSub E f k x, hx = iteratedDerivWithin k (SubtypeExtension E f) E x := by intro k induction k with | zero => intro x hx simp [IteratedDerivativeSub, iteratedDerivWithin_zero, SubtypeExtension, hx] | succ k ih => intro x hx have hEqOn : Set.EqOn (SubtypeExtension E (IteratedDerivativeSub E f k)) (iteratedDerivWithin k (SubtypeExtension E f) E) E := by intro y hy have hyEq := ih y hy simpa [SubtypeExtension, hy] using hyEq have hEqAt : (SubtypeExtension E (IteratedDerivativeSub E f k)) x = iteratedDerivWithin k (SubtypeExtension E f) E x := by have hxEq := ih x hx simpa [SubtypeExtension, hx] using hxEq calc IteratedDerivativeSub E f (k + 1) x, hx = derivWithin (SubtypeExtension E (IteratedDerivativeSub E f k)) E x := by rfl _ = derivWithin (iteratedDerivWithin k (SubtypeExtension E f) E) E x := by exact derivWithin_congr hEqOn hEqAt _ = iteratedDerivWithin (k + 1) (SubtypeExtension E f) E x := by rw [iteratedDerivWithin_succ]

Helper for Proposition 4.2.2: smoothness of the ambient extension implies that every iterated subtype derivative is once differentiable on the set.

lemma helperForProposition_4_2_2_isOnceDifferentiableSub_of_contDiffOn {E : Set } (f : E ) (hcont : ContDiffOn (SubtypeExtension E f) E) (hunique : UniqueDiffOn E) : n : , IsOnceDifferentiableSub E (IteratedDerivativeSub E f n) := by intro n x have hDiff : DifferentiableWithinAt (iteratedDerivWithin n (SubtypeExtension E f) E) E x := by exact (hcont.differentiableOn_iteratedDerivWithin (by try 'simp' instead of 'simpa' Note: This linter can be disabled with `set_option linter.unnecessarySimpa false`simpa using (WithTop.coe_lt_top : ((n : ℕ∞) : WithTop ℕ∞) < )) hunique) x x.property have hEqOn : Set.EqOn (SubtypeExtension E (IteratedDerivativeSub E f n)) (iteratedDerivWithin n (SubtypeExtension E f) E) E := by intro y hy have hyEq := helperForProposition_4_2_2_iteratedDerivativeSub_eq_iteratedDerivWithin E f n y hy simpa [SubtypeExtension, hy] using hyEq have hEqAt : (SubtypeExtension E (IteratedDerivativeSub E f n)) x = iteratedDerivWithin n (SubtypeExtension E f) E x := by have hxEq := helperForProposition_4_2_2_iteratedDerivativeSub_eq_iteratedDerivWithin E f n x x.property simpa [SubtypeExtension, x.property] using hxEq exact hDiff.congr hEqOn hEqAt

Helper for Proposition 4.2.2: if all iterated derivatives are once differentiable, then the recursive notion of Unknown identifier `k`k-times differentiability holds for every Unknown identifier `k`k.

lemma helperForProposition_4_2_2_isKTimesDifferentiableSub_of_allOnceDifferentiable {E : Set } (f : E ) (hNoIso : HasNoIsolatedPoints E) (hOnce : n : , IsOnceDifferentiableSub E (IteratedDerivativeSub E f n)) : k : , IsKTimesDifferentiableSub E f k := by intro k refine hNoIso, ?_ induction k with | zero => simp [This simp argument is unused: IsKTimesDifferentiableSub Hint: Omit it from the simp argument list. simp ̵[̵I̵s̵K̵T̵i̵m̵e̵s̵D̵i̵f̵f̵e̵r̵e̵n̵t̵i̵a̵b̵l̵e̵S̵u̵b̵]̵ Note: This linter can be disabled with `set_option linter.unusedSimpArgs false`IsKTimesDifferentiableSub] | succ k ih => simpa [IsKTimesDifferentiableSub] using And.intro (hOnce k) ih

Helper for Proposition 4.2.2: the interval series data gives HasFPowerSeriesWithinOnBall.{u_1, u_2, u_3} {𝕜 : Type u_1} {E : Type u_2} {F : Type u_3} [NontriviallyNormedField 𝕜] [NormedAddCommGroup E] [NormedSpace 𝕜 E] [NormedAddCommGroup F] [NormedSpace 𝕜 F] (f : E F) (p : FormalMultilinearSeries 𝕜 E F) (s : Set E) (x : E) (r : ENNReal) : PropHasFPowerSeriesWithinOnBall for the canonical extension.

lemma helperForProposition_4_2_2_hasFPowerSeriesWithinOnBall_of_seriesData {a r : } (hr : 0 < r) (f : Set.Ioo (a - r) (a + r) ) (c : ) (hc : x (hx : x Set.Ioo (a - r) (a + r)), Summable (fun n : => c n * (x - a) ^ n) f x, hx = ∑' n : , c n * (x - a) ^ n) : HasFPowerSeriesWithinOnBall (SubtypeExtension (Set.Ioo (a - r) (a + r)) f) (FormalMultilinearSeries.ofScalars c) (Set.Ioo (a - r) (a + r)) a (ENNReal.ofReal r) := by refine HasFPowerSeriesWithinOnBall.mk ?_ (ENNReal.ofReal_pos.2 hr) ?_ · refine ENNReal.le_of_forall_nnreal_lt ?_ intro q hq have hq_real : (q : ) < r := by have hq_top : (q : ENNReal) := by simp exact (ENNReal.lt_ofReal_iff_toReal_lt hq_top).1 hq have hq_nonneg : 0 (q : ) := by exact q.2 have hqx : a + (q : ) Set.Ioo (a - r) (a + r) := by constructor · linarith · linarith rcases hc (a + (q : )) hqx with hsum_q, hEq_q have hsummable_q : Summable (fun n : => c n * (q : ) ^ n) := by simpa [sub_eq_add_neg, add_assoc, add_left_comm, add_comm] using hsum_q have hsummable_norm_q : Summable (fun n : => c n * (q : ) ^ n) := by refine (hsummable_q.norm).congr ?_ intro n rw [norm_mul, Real.norm_of_nonneg (pow_nonneg hq_nonneg n)] have hsummable_norm_series : Summable (fun n : => (FormalMultilinearSeries.ofScalars c n) * (q : ) ^ n) := by refine hsummable_norm_q.congr ?_ intro n simp exact FormalMultilinearSeries.le_radius_of_summable_norm (FormalMultilinearSeries.ofScalars c) hsummable_norm_series · intro y hy_mem hy_ball have hy_abs : |y| < r := by rw [EMetric.mem_ball, edist_dist] at hy_ball have hy_dist : dist y 0 < r := (ENNReal.ofReal_lt_ofReal_iff hr).1 hy_ball simpa [Real.dist_eq] using hy_dist have hy_lt : -r < y y < r := by exact abs_lt.1 hy_abs have hxy : a + y Set.Ioo (a - r) (a + r) := by constructor <;> linarith rcases hc (a + y) hxy with hsummable_xy, hEq_xy have hSubtype : SubtypeExtension (Set.Ioo (a - r) (a + r)) f (a + y) = f a + y, hxy := by simp [SubtypeExtension, hxy] have hHasSum_xy : HasSum (fun n : => c n * ((a + y) - a) ^ n) (SubtypeExtension (Set.Ioo (a - r) (a + r)) f (a + y)) := by rw [hSubtype, hEq_xy] exact hsummable_xy.hasSum have hHasSum_y : HasSum (fun n : => c n * y ^ n) (SubtypeExtension (Set.Ioo (a - r) (a + r)) f (a + y)) := by simpa [sub_eq_add_neg, add_assoc, add_left_comm, add_comm] using hHasSum_xy exact hHasSum_y.congr (by intro n simp [smul_eq_mul, mul_comm])

Helper for Proposition 4.2.2: one-step coefficient recursion for Unknown identifier `iteratedFDerivSeries`iteratedFDerivSeries evaluated at all-ones.

lemma helperForProposition_4_2_2_iteratedFDerivSeriesCoeffOnes_step (c : ) (k n : ) : (((FormalMultilinearSeries.ofScalars c).iteratedFDerivSeries (k + 1)).coeff n) (fun _ : Fin (k + 1) => (1 : )) = (n + 1 : ) * (((FormalMultilinearSeries.ofScalars c).iteratedFDerivSeries k).coeff (n + 1)) (fun _ : Fin k => (1 : )) := by have htail : Fin.tail (fun _ : Fin (k + 1) => (1 : )) = fun _ : Fin k => (1 : ) := by funext i simp [Fin.tail] rw [show ((FormalMultilinearSeries.ofScalars c).iteratedFDerivSeries (k + 1)).coeff n = (continuousMultilinearCurryLeftEquiv (fun _ : Fin (k + 1) => ) ).symm (((FormalMultilinearSeries.ofScalars c).iteratedFDerivSeries k).derivSeries.coeff n) by rfl] simp [continuousMultilinearCurryLeftEquiv_symm_apply, FormalMultilinearSeries.derivSeries_coeff_one, nsmul_eq_mul, htail]

Helper for Proposition 4.2.2: closed-form coefficients for Unknown identifier `iteratedFDerivSeries`iteratedFDerivSeries of Unknown identifier `ofScalars`ofScalars, evaluated at all-ones.

lemma helperForProposition_4_2_2_iteratedFDerivSeriesCoeffOnes_closedForm (c : ) (k n : ) : (((FormalMultilinearSeries.ofScalars c).iteratedFDerivSeries k).coeff n) (fun _ : Fin k => (1 : )) = c (n + k) * ((Nat.factorial (n + k) : ) / (Nat.factorial n : )) := by induction k generalizing n with | zero => have hn : (Nat.factorial n : ) 0 := by exact_mod_cast Nat.factorial_ne_zero n calc (((FormalMultilinearSeries.ofScalars c).iteratedFDerivSeries 0).coeff n) (fun _ : Fin 0 => (1 : )) = c n := by change (((FormalMultilinearSeries.ofScalars c).iteratedFDerivSeries 0) n (fun _ : Fin n => (1 : )) (fun _ : Fin 0 => (1 : ))) = c n simp [FormalMultilinearSeries.iteratedFDerivSeries, ContinuousLinearMap.compFormalMultilinearSeries_apply, continuousMultilinearCurryFin0_symm_apply, FormalMultilinearSeries.ofScalars] _ = c n * ((Nat.factorial n : ) / (Nat.factorial n : )) := by rw [div_self hn] ring _ = c (n + 0) * ((Nat.factorial (n + 0) : ) / (Nat.factorial n : )) := by simp | succ k ih => rw [helperForProposition_4_2_2_iteratedFDerivSeriesCoeffOnes_step c k n, ih (n + 1)] have hn : (Nat.factorial n : ) 0 := by exact_mod_cast Nat.factorial_ne_zero n have hfacn1 : (Nat.factorial (n + 1) : ) = (n + 1 : ) * (Nat.factorial n : ) := by norm_num [Nat.factorial_succ, Nat.cast_mul, Nat.cast_add, Nat.cast_one] have hratio : (n + 1 : ) * ((Nat.factorial (n + 1 + k) : ) / (Nat.factorial (n + 1) : )) = ((Nat.factorial (n + 1 + k) : ) / (Nat.factorial n : )) := by rw [hfacn1] field_simp [hn] calc (n + 1 : ) * (c (n + 1 + k) * ((Nat.factorial (n + 1 + k) : ) / (Nat.factorial (n + 1) : ))) = c (n + 1 + k) * ((n + 1 : ) * ((Nat.factorial (n + 1 + k) : ) / (Nat.factorial (n + 1) : ))) := by ring _ = c (n + 1 + k) * ((Nat.factorial (n + 1 + k) : ) / (Nat.factorial n : )) := by rw [hratio] _ = c (n + (k + 1)) * ((Nat.factorial (n + (k + 1)) : ) / (Nat.factorial n : )) := by simp [Nat.add_left_comm, Nat.add_comm]

Helper for Proposition 4.2.2: explicit term formula for Unknown identifier `iteratedFDerivSeries`iteratedFDerivSeries of Unknown identifier `ofScalars`ofScalars.

lemma helperForProposition_4_2_2_iteratedFDerivSeries_term_formula (c : ) (k n : ) (y : ) : (((FormalMultilinearSeries.ofScalars c).iteratedFDerivSeries k n) (fun _ : Fin n => y)) (fun _ : Fin k => (1 : )) = c (n + k) * ((Nat.factorial (n + k) : ) / (Nat.factorial n : )) * y ^ n := by let p : FormalMultilinearSeries := FormalMultilinearSeries.ofScalars c calc ((p.iteratedFDerivSeries k n) (fun _ : Fin n => y)) (fun _ : Fin k => (1 : )) = ((( i : Fin n, y) (p.iteratedFDerivSeries k).coeff n) (fun _ : Fin k => (1 : ))) := by try 'simp' instead of 'simpa' Note: This linter can be disabled with `set_option linter.unnecessarySimpa false`simpa [FormalMultilinearSeries.apply_eq_prod_smul_coeff] _ = ( i : Fin n, y) * (((p.iteratedFDerivSeries k).coeff n) (fun _ : Fin k => (1 : ))) := by simp [smul_eq_mul] _ = y ^ n * (((p.iteratedFDerivSeries k).coeff n) (fun _ : Fin k => (1 : ))) := by simp _ = y ^ n * (c (n + k) * ((Nat.factorial (n + k) : ) / (Nat.factorial n : ))) := by rw [helperForProposition_4_2_2_iteratedFDerivSeriesCoeffOnes_closedForm c k n] _ = c (n + k) * ((Nat.factorial (n + k) : ) / (Nat.factorial n : )) * y ^ n := by ring

Helper for Proposition 4.2.2: series formula for iteratedDerivWithin.{u_1, u_2} {𝕜 : Type u_1} [NontriviallyNormedField 𝕜] {F : Type u_2} [NormedAddCommGroup F] [NormedSpace 𝕜 F] (n : ) (f : 𝕜 F) (s : Set 𝕜) (x : 𝕜) : FiteratedDerivWithin on the interval.

lemma helperForProposition_4_2_2_iteratedDerivWithin_series_formula {a r : } (hr : 0 < r) (f : Set.Ioo (a - r) (a + r) ) (c : ) (hc : x (hx : x Set.Ioo (a - r) (a + r)), Summable (fun n : => c n * (x - a) ^ n) f x, hx = ∑' n : , c n * (x - a) ^ n) : k x (unused variable `hx` Note: This linter can be disabled with `set_option linter.unusedVariables false`hx : x Set.Ioo (a - r) (a + r)), Summable (fun n : => c (n + k) * ((Nat.factorial (n + k) : ) / (Nat.factorial n : )) * (x - a) ^ n) iteratedDerivWithin k (SubtypeExtension (Set.Ioo (a - r) (a + r)) f) (Set.Ioo (a - r) (a + r)) x = ∑' n : , c (n + k) * ((Nat.factorial (n + k) : ) / (Nat.factorial n : )) * (x - a) ^ n := by intro k x hx let E : Set := Set.Ioo (a - r) (a + r) let g : := SubtypeExtension E f let p : FormalMultilinearSeries := FormalMultilinearSeries.ofScalars c let hpow : HasFPowerSeriesWithinOnBall g p E a (ENNReal.ofReal r) := helperForProposition_4_2_2_hasFPowerSeriesWithinOnBall_of_seriesData hr f c hc have hSubsetBall : E EMetric.ball a (ENNReal.ofReal r) := by intro y hy rcases hy with hy_left, hy_right rw [EMetric.mem_ball, edist_dist, Real.dist_eq, abs_sub_comm, ENNReal.ofReal_lt_ofReal_iff hr] exact abs_lt.2 (by constructor <;> linarith) have ha_mem : a E := by change a Set.Ioo (a - r) (a + r) constructor <;> linarith have hAnalyticAux : AnalyticOn g (insert a E EMetric.ball a (ENNReal.ofReal r)) := hpow.analyticOn have hAnalytic : AnalyticOn g E := by refine hAnalyticAux.mono ?_ intro y hy exact Or.inr hy, hSubsetBall hy have hUnique : UniqueDiffOn E := by simpa [E] using uniqueDiffOn_Ioo (a - r) (a + r) have hpowk : HasFPowerSeriesWithinOnBall (iteratedFDerivWithin k g E) (p.iteratedFDerivSeries k) E a (ENNReal.ofReal r) := hpow.iteratedFDerivWithin hAnalytic k hUnique ha_mem have hxBall : x EMetric.ball a (ENNReal.ofReal r) := by rcases hx with hxL, hxR rw [EMetric.mem_ball, edist_dist, Real.dist_eq, ENNReal.ofReal_lt_ofReal_iff hr] exact abs_lt.2 (by constructor <;> linarith) have hHasSumMultilin : HasSum (fun n : => p.iteratedFDerivSeries k n (fun _ : Fin n => x - a)) (iteratedFDerivWithin k g E x) := by have hy : x (insert a E) EMetric.ball a (ENNReal.ofReal r) := Or.inr (by simpa [E] using hx), hxBall simpa [E] using hpowk.hasSum_sub (y := x) hy let evalOnes : ( k]→L[] ) →L[] := ContinuousMultilinearMap.apply (fun _ : Fin k => ) (fun _ : Fin k => (1 : )) have hHasSumScalar : HasSum (fun n : => (p.iteratedFDerivSeries k n (fun _ : Fin n => x - a)) (fun _ : Fin k => (1 : ))) ((iteratedFDerivWithin k g E x) (fun _ : Fin k => (1 : ))) := by simpa [evalOnes, Function.comp] using hHasSumMultilin.map evalOnes evalOnes.continuous have hTerm : (fun n : => (p.iteratedFDerivSeries k n (fun _ : Fin n => x - a)) (fun _ : Fin k => (1 : ))) = (fun n : => c (n + k) * ((Nat.factorial (n + k) : ) / (Nat.factorial n : )) * (x - a) ^ n) := by funext n simpa [p] using helperForProposition_4_2_2_iteratedFDerivSeries_term_formula c k n (x - a) have hHasSumTarget : HasSum (fun n : => c (n + k) * ((Nat.factorial (n + k) : ) / (Nat.factorial n : )) * (x - a) ^ n) ((iteratedFDerivWithin k g E x) (fun _ : Fin k => (1 : ))) := by rw [ hTerm] exact hHasSumScalar constructor · exact hHasSumTarget.summable · calc iteratedDerivWithin k g E x = (iteratedFDerivWithin k g E x) (fun _ : Fin k => (1 : )) := by symm exact iteratedDerivWithin_eq_iteratedFDerivWithin _ = ∑' n : , c (n + k) * ((Nat.factorial (n + k) : ) / (Nat.factorial n : )) * (x - a) ^ n := by exact hHasSumTarget.tsum_eq.symm

Helper for Proposition 4.2.2: the interval power-series representation implies that all iterated subtype derivatives are once differentiable.

lemma helperForProposition_4_2_2_onceDifferentiable_all_orders_of_analytic {a r : } (hr : 0 < r) (f : Set.Ioo (a - r) (a + r) ) (c : ) (hc : x (hx : x Set.Ioo (a - r) (a + r)), Summable (fun n : => c n * (x - a) ^ n) f x, hx = ∑' n : , c n * (x - a) ^ n) : n : , IsOnceDifferentiableSub (Set.Ioo (a - r) (a + r)) (IteratedDerivativeSub (Set.Ioo (a - r) (a + r)) f n) := by let E : Set := Set.Ioo (a - r) (a + r) let hpow : HasFPowerSeriesWithinOnBall (SubtypeExtension E f) (FormalMultilinearSeries.ofScalars c) E a (ENNReal.ofReal r) := helperForProposition_4_2_2_hasFPowerSeriesWithinOnBall_of_seriesData hr f c hc have ha_mem : a E := by change a Set.Ioo (a - r) (a + r) constructor <;> linarith have hSubsetBall : E EMetric.ball a (ENNReal.ofReal r) := by intro x hx rcases hx with hx_left, hx_right rw [EMetric.mem_ball, edist_dist, Real.dist_eq, abs_sub_comm, ENNReal.ofReal_lt_ofReal_iff hr] exact abs_lt.2 (by constructor <;> linarith) have hAnalyticAux : AnalyticOn (SubtypeExtension E f) (insert a E EMetric.ball a (ENNReal.ofReal r)) := hpow.analyticOn have hAnalytic : AnalyticOn (SubtypeExtension E f) E := by refine hAnalyticAux.mono ?_ intro x hx exact Or.inr hx, hSubsetBall hx have hUnique : UniqueDiffOn E := by simpa [E] using uniqueDiffOn_Ioo (a - r) (a + r) have hContDiff : ContDiffOn (SubtypeExtension E f) E := hAnalytic.contDiffOn hUnique simpa [E] using helperForProposition_4_2_2_isOnceDifferentiableSub_of_contDiffOn f hContDiff hUnique

Proposition 4.2.2 (Real analytic functions are Unknown identifier `k`k-times differentiable): if has a convergent power-series representation on (sorry - sorry, sorry + sorry) : ?m.1 × ?m.2(Unknown identifier `a`a-Unknown identifier `r`r, Unknown identifier `a`a+Unknown identifier `r`r), then for every , Unknown identifier `f`f is Unknown identifier `k`k-times differentiable on (sorry - sorry, sorry + sorry) : ?m.1 × ?m.2(Unknown identifier `a`a-Unknown identifier `r`r, Unknown identifier `a`a+Unknown identifier `r`r), and the Unknown identifier `k`k-th iterated derivative has the termwise differentiated series (equivalently using , with empty product 1 : 1 when Unknown identifier `k`sorry = 0 : Propk = 0).

theorem realAnalyticOnInterval_iteratedDerivative_eq_powerSeries {a r : } (hr : 0 < r) (f : Set.Ioo (a - r) (a + r) ) (hseries : c : , x (hx : x Set.Ioo (a - r) (a + r)), Summable (fun n : => c n * (x - a) ^ n) f x, hx = ∑' n : , c n * (x - a) ^ n) : c : , ( x (hx : x Set.Ioo (a - r) (a + r)), Summable (fun n : => c n * (x - a) ^ n) f x, hx = ∑' n : , c n * (x - a) ^ n) k : , IsKTimesDifferentiableSub (Set.Ioo (a - r) (a + r)) f k x (hx : x Set.Ioo (a - r) (a + r)), Summable (fun n : => c (n + k) * ((Nat.factorial (n + k) : ) / (Nat.factorial n : )) * (x - a) ^ n) IteratedDerivativeSub (Set.Ioo (a - r) (a + r)) f k x, hx = ∑' n : , c (n + k) * ((Nat.factorial (n + k) : ) / (Nat.factorial n : )) * (x - a) ^ n := by rcases hseries with c, hc refine c, hc, ?_ intro k cases k with | zero => constructor · have hNoIso : HasNoIsolatedPoints (Set.Ioo (a - r) (a + r)) := helperForProposition_4_2_2_interval_hasNoIsolatedPoints a r try 'simp' instead of 'simpa' Note: This linter can be disabled with `set_option linter.unnecessarySimpa false`simpa [IsKTimesDifferentiableSub, hNoIso] · intro x hx exact helperForProposition_4_2_2_seriesFormula_kZero f c hc x hx | succ k => constructor · have hNoIso : HasNoIsolatedPoints (Set.Ioo (a - r) (a + r)) := helperForProposition_4_2_2_interval_hasNoIsolatedPoints a r have hOnceAll : n : , IsOnceDifferentiableSub (Set.Ioo (a - r) (a + r)) (IteratedDerivativeSub (Set.Ioo (a - r) (a + r)) f n) := helperForProposition_4_2_2_onceDifferentiable_all_orders_of_analytic hr f c hc exact helperForProposition_4_2_2_isKTimesDifferentiableSub_of_allOnceDifferentiable f hNoIso hOnceAll (Nat.succ k) · intro x hx rcases helperForProposition_4_2_2_iteratedDerivWithin_series_formula hr f c hc (Nat.succ k) x hx with hsum, hSeriesWithin refine hsum, ?_ calc IteratedDerivativeSub (Set.Ioo (a - r) (a + r)) f (Nat.succ k) x, hx = iteratedDerivWithin (Nat.succ k) (SubtypeExtension (Set.Ioo (a - r) (a + r)) f) (Set.Ioo (a - r) (a + r)) x := by exact helperForProposition_4_2_2_iteratedDerivativeSub_eq_iteratedDerivWithin (Set.Ioo (a - r) (a + r)) f (Nat.succ k) x hx _ = ∑' n : , c (n + Nat.succ k) * ((Nat.factorial (n + Nat.succ k) : ) / (Nat.factorial n : )) * (x - a) ^ n := hSeriesWithin
end Section02end Chap04