analysis.analytic.basic
β·
Mathlib.Analysis.Analytic.Basic
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -532,7 +532,7 @@ theorem HasFPowerSeriesOnBall.hasSum_sub (hf : HasFPowerSeriesOnBall f p x r) {y
(hy : y β EMetric.ball x r) : HasSum (fun n : β => p n fun i => y - x) (f y) :=
by
have : y - x β EMetric.ball (0 : E) r := by simpa [edist_eq_coe_nnnorm_sub] using hy
- simpa only [add_sub_cancel'_right] using hf.has_sum this
+ simpa only [add_sub_cancel] using hf.has_sum this
#align has_fpower_series_on_ball.has_sum_sub HasFPowerSeriesOnBall.hasSum_sub
-/
@@ -736,7 +736,7 @@ theorem AnalyticOn.sub {s : Set E} (hf : AnalyticOn π f s) (hg : AnalyticOn
#align analytic_on.sub AnalyticOn.sub
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (i Β«expr β Β» 0) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (i Β«expr β Β» 0) -/
#print HasFPowerSeriesOnBall.coeff_zero /-
theorem HasFPowerSeriesOnBall.coeff_zero (hf : HasFPowerSeriesOnBall f pf x r) (v : Fin 0 β E) :
pf 0 v = f x := by
@@ -912,12 +912,12 @@ theorem HasFPowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
Prod.fst_sub, Prod.snd_sub, sub_sub_sub_cancel_right] using
(p <| n + 2).norm_image_sub_le (fun _ => y.1 - x) fun _ => y.2 - x
_ = βp (n + 2)β * βy - (x, x)β ^ n * (β(n + 2) * βy - (x, x)β * βy.1 - y.2β) := by
- rw [pow_succ βy - (x, x)β]; ring
+ rw [pow_succ' βy - (x, x)β]; ring
_ β€ C * a ^ (n + 2) / r' ^ (n + 2) * r' ^ n * (β(n + 2) * βy - (x, x)β * βy.1 - y.2β) := by
apply_rules [mul_le_mul_of_nonneg_right, mul_le_mul, hp, pow_le_pow_left, hy'.le,
norm_nonneg, pow_nonneg, div_nonneg, mul_nonneg, Nat.cast_nonneg, hC.le, r'.coe_nonneg,
ha.1.le]
- _ = B n := by field_simp [B, pow_succ, hr'0.ne'];
+ _ = B n := by field_simp [B, pow_succ', hr'0.ne'];
simp only [mul_assoc, mul_comm, mul_left_comm]
have hBL : HasSum B (L y) := by
apply HasSum.mul_left
@@ -937,7 +937,7 @@ theorem HasFPowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
#align has_fpower_series_on_ball.is_O_image_sub_image_sub_deriv_principal HasFPowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (y z Β«expr β Β» emetric.ball[emetric.ball] x r') -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:642:2: warning: expanding binder collection (y z Β«expr β Β» emetric.ball[emetric.ball] x r') -/
#print HasFPowerSeriesOnBall.image_sub_sub_deriv_le /-
/-- If `f` has formal power series `β n, pβ` on a ball of radius `r`, then for `y, z` in any smaller
ball, the norm of the difference `f y - f z - p 1 (Ξ» _, y - z)` is bounded above by
@@ -1150,7 +1150,7 @@ theorem Asymptotics.IsBigO.continuousMultilinearMap_apply_eq_zero {n : β} {p :
βp fun i => k β’ yβ β€ c * βk β’ yβ ^ (n.succ + 1) := by
simpa only [norm_pow, norm_norm] using ht (k β’ y) (δΡ (mem_ball_zero_iff.mpr hβ))
_ = βkβ ^ n.succ * (βkβ * (c * βyβ ^ (n.succ + 1))) := by simp only [norm_smul, mul_pow];
- rw [pow_succ]; ring
+ rw [pow_succ']; ring
have hβ : βkβ * (c * βyβ ^ (n.succ + 1)) < Ξ΅ :=
inv_mul_cancel_rightβ hβ.ne.symm Ξ΅ βΈ
mul_lt_mul_of_pos_right (lt_of_lt_of_le k_norm (min_le_right _ _)) hβ
@@ -1612,7 +1612,7 @@ theorem HasFPowerSeriesOnBall.analyticAt_of_mem (hf : HasFPowerSeriesOnBall f p
by
have : (βy - xββ : ββ₯0β) < r := by simpa [edist_eq_coe_nnnorm_sub] using h
have := hf.change_origin this
- rw [add_sub_cancel'_right] at this
+ rw [add_sub_cancel] at this
exact this.analytic_at
#align has_fpower_series_on_ball.analytic_at_of_mem HasFPowerSeriesOnBall.analyticAt_of_mem
-/
@@ -1683,7 +1683,7 @@ theorem hasFPowerSeriesAt_iff' :
rw [β map_add_left_nhds_zero, eventually_map, hasFPowerSeriesAt_iff]
trace
"./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `congrm #[[expr Β«exprβαΆ in , Β»((z), (nhds() 0 : filter π), has_sum (Ξ» n, _) (f Β«expr + Β»(zβ, z)))]]"
- rw [add_sub_cancel']
+ rw [add_sub_cancel_left]
#align has_fpower_series_at_iff' hasFPowerSeriesAt_iff'
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -175,7 +175,7 @@ theorem le_radius_of_summable_nnnorm (h : Summable fun n => βp nββ * r ^ n
#print FormalMultilinearSeries.le_radius_of_summable /-
theorem le_radius_of_summable (h : Summable fun n => βp nβ * r ^ n) : βr β€ p.radius :=
- p.le_radius_of_summable_nnnorm <| by simp only [β coe_nnnorm] at h ; exact_mod_cast h
+ p.le_radius_of_summable_nnnorm <| by simp only [β coe_nnnorm] at h; exact_mod_cast h
#align formal_multilinear_series.le_radius_of_summable FormalMultilinearSeries.le_radius_of_summable
-/
@@ -217,11 +217,11 @@ theorem isLittleO_of_lt_radius (h : βr < p.radius) :
β a β Ioo (0 : β) 1, (fun n => βp nβ * r ^ n) =o[atTop] pow a :=
by
rw [(TFAE_exists_lt_isLittleO_pow (fun n => βp nβ * r ^ n) 1).out 1 4]
- simp only [radius, lt_iSup_iff] at h
+ simp only [radius, lt_iSup_iff] at h
rcases h with β¨t, C, hC, rtβ©
- rw [ENNReal.coe_lt_coe, β NNReal.coe_lt_coe] at rt
+ rw [ENNReal.coe_lt_coe, β NNReal.coe_lt_coe] at rt
have : 0 < (t : β) := r.coe_nonneg.trans_lt rt
- rw [β div_lt_one this] at rt
+ rw [β div_lt_one this] at rt
refine' β¨_, rt, C, Or.inr zero_lt_one, fun n => _β©
calc
|βp nβ * r ^ n| = βp nβ * t ^ n * (r / t) ^ n := by
@@ -259,12 +259,12 @@ theorem lt_radius_of_isBigO (hβ : r β 0) {a : β} (ha : a β Ioo (-1 : β
by
rcases((TFAE_exists_lt_isLittleO_pow (fun n => βp nβ * r ^ n) 1).out 2 5).mp β¨a, ha, hpβ© with
β¨a, ha, C, hC, hpβ©
- rw [β pos_iff_ne_zero, β NNReal.coe_pos] at hβ
+ rw [β pos_iff_ne_zero, β NNReal.coe_pos] at hβ
lift a to ββ₯0 using ha.1.le
have : (r : β) < r / a := by
simpa only [div_one] using (div_lt_div_left hβ zero_lt_one ha.1).2 ha.2
- norm_cast at this
- rw [β ENNReal.coe_lt_coe] at this
+ norm_cast at this
+ rw [β ENNReal.coe_lt_coe] at this
refine' this.trans_le (p.le_radius_of_bound C fun n => _)
rw [NNReal.coe_div, div_pow, β mul_div_assoc, div_le_iff (pow_pos ha.1 n)]
exact (le_abs_self _).trans (hp n)
@@ -334,7 +334,7 @@ theorem summable_norm_mul_pow (p : FormalMultilinearSeries π E F) {r : ββ₯
theorem summable_norm_apply (p : FormalMultilinearSeries π E F) {x : E}
(hx : x β EMetric.ball (0 : E) p.radius) : Summable fun n : β => βp n fun _ => xβ :=
by
- rw [mem_emetric_ball_zero_iff] at hx
+ rw [mem_emetric_ball_zero_iff] at hx
refine'
Summable.of_nonneg_of_le (fun _ => norm_nonneg _) (fun n => ((p n).le_opNorm _).trans_eq _)
(p.summable_norm_mul_pow hx)
@@ -401,7 +401,7 @@ theorem min_radius_le_radius_add (p q : FormalMultilinearSeries π E F) :
min p.radius q.radius β€ (p + q).radius :=
by
refine' ENNReal.le_of_forall_nnreal_lt fun r hr => _
- rw [lt_min_iff] at hr
+ rw [lt_min_iff] at hr
have := ((p.is_o_one_of_lt_radius hr.1).add (q.is_o_one_of_lt_radius hr.2)).IsBigO
refine' (p + q).le_radius_of_isBigO ((is_O_of_le _ fun n => _).trans this)
rw [β add_mul, norm_mul, norm_mul, norm_norm]
@@ -802,7 +802,7 @@ theorem HasFPowerSeriesOnBall.uniform_geometric_approx' {r' : ββ₯0}
obtain β¨a, ha, C, hC, hpβ© : β a β Ioo (0 : β) 1, β C > 0, β n, βp nβ * r' ^ n β€ C * a ^ n :=
p.norm_mul_pow_le_mul_pow_of_lt_radius (h.trans_le hf.r_le)
refine' β¨a, ha, C / (1 - a), div_pos hC (sub_pos.2 ha.2), fun y hy n => _β©
- have yr' : βyβ < r' := by rw [ball_zero_eq] at hy ; exact hy
+ have yr' : βyβ < r' := by rw [ball_zero_eq] at hy; exact hy
have hr'0 : 0 < (r' : β) := (norm_nonneg _).trans_lt yr'
have : y β EMetric.ball (0 : E) r :=
by
@@ -814,7 +814,7 @@ theorem HasFPowerSeriesOnBall.uniform_geometric_approx' {r' : ββ₯0}
suffices βp.partial_sum n y - f (x + y)β β€ C * (a * (βyβ / r')) ^ n / (1 - a * (βyβ / r'))
by
refine' this.trans _
- apply_rules [div_le_div_of_le_left, sub_pos.2, div_nonneg, mul_nonneg, pow_nonneg, hC.lt.le,
+ apply_rules [div_le_div_of_nonneg_left, sub_pos.2, div_nonneg, mul_nonneg, pow_nonneg, hC.lt.le,
ha.1.le, norm_nonneg, NNReal.coe_nonneg, ha.2, (sub_le_sub_iff_left _).2] <;>
infer_instance
apply norm_sub_le_of_geometric_bound_of_hasSum (ya.trans_lt ha.2) _ (hf.has_sum this)
@@ -843,7 +843,7 @@ theorem HasFPowerSeriesOnBall.uniform_geometric_approx {r' : ββ₯0}
β n, βf (x + y) - p.partial_sum n yβ β€ C * (a * (βyβ / r')) ^ n
exact hf.uniform_geometric_approx' h
refine' β¨a, ha, C, hC, fun y hy n => (hp y hy n).trans _β©
- have yr' : βyβ < r' := by rwa [ball_zero_eq] at hy
+ have yr' : βyβ < r' := by rwa [ball_zero_eq] at hy
refine' mul_le_mul_of_nonneg_left (pow_le_pow_left _ _ _) hC.lt.le
exacts [mul_nonneg ha.1.le (div_nonneg (norm_nonneg y) r'.coe_nonneg),
mul_le_of_le_one_right ha.1.le (div_le_one_of_le yr'.le r'.coe_nonneg)]
@@ -887,7 +887,7 @@ theorem HasFPowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
obtain β¨a, ha, C, hC : 0 < C, hpβ© :
β a β Ioo (0 : β) 1, β C > 0, β n : β, βp nβ * βr' ^ n β€ C * a ^ n
exact p.norm_mul_pow_le_mul_pow_of_lt_radius (hr.trans_le hf.r_le)
- simp only [β le_div_iff (pow_pos (NNReal.coe_pos.2 hr'0) _)] at hp
+ simp only [β le_div_iff (pow_pos (NNReal.coe_pos.2 hr'0) _)] at hp
set L : E Γ E β β := fun y =>
C * (a / r') ^ 2 * (βy - (x, x)β * βy.1 - y.2β) * (a / (1 - a) ^ 2 + 2 / (1 - a))
have hL : β y β EMetric.ball (x, x) r', βf y.1 - f y.2 - p 1 fun _ => y.1 - y.2β β€ L y :=
@@ -903,7 +903,7 @@ theorem HasFPowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
zero_add, β Subsingleton.pi_single_eq (0 : Fin 1) (y.1 - x), Pi.single, β
Subsingleton.pi_single_eq (0 : Fin 1) (y.2 - x), Pi.single, β (p 1).map_sub, β Pi.single,
Subsingleton.pi_single_eq, sub_sub_sub_cancel_right]
- rw [EMetric.mem_ball, edist_eq_coe_nnnorm_sub, ENNReal.coe_lt_coe] at hy'
+ rw [EMetric.mem_ball, edist_eq_coe_nnnorm_sub, ENNReal.coe_lt_coe] at hy'
set B : β β β := fun n => C * (a / r') ^ 2 * (βy - (x, x)β * βy.1 - y.2β) * ((n + 2) * a ^ n)
have hAB : β n, βA (n + 2)β β€ B n := fun n =>
calc
@@ -985,7 +985,7 @@ theorem HasFPowerSeriesOnBall.tendstoUniformlyOn {r' : ββ₯0} (hf : HasFPowerS
refine' Metric.tendstoUniformlyOn_iff.2 fun Ξ΅ Ξ΅pos => _
have L : tendsto (fun n => (C : β) * a ^ n) at_top (π ((C : β) * 0)) :=
tendsto_const_nhds.mul (tendsto_pow_atTop_nhds_zero_of_lt_one ha.1.le ha.2)
- rw [MulZeroClass.mul_zero] at L
+ rw [MulZeroClass.mul_zero] at L
refine' (L.eventually (gt_mem_nhds Ξ΅pos)).mono fun n hn y hy => _
rw [dist_eq_norm]
exact (hp y hy n).trans_lt hn
@@ -1182,7 +1182,7 @@ theorem HasFPowerSeriesAt.apply_eq_zero {p : FormalMultilinearSeries π E F} {
simp only [hk b (this.lt_of_ne hnb), Pi.zero_apply, zero_apply]
Β· exact False.elim (hn (finset.mem_range.mpr (lt_add_one k)))
replace h := h.is_O_sub_partial_sum_pow k.succ
- simp only [psum_eq, zero_sub, Pi.zero_apply, Asymptotics.isBigO_neg_left] at h
+ simp only [psum_eq, zero_sub, Pi.zero_apply, Asymptotics.isBigO_neg_left] at h
exact h.continuous_multilinear_map_apply_eq_zero
#align has_fpower_series_at.apply_eq_zero HasFPowerSeriesAt.apply_eq_zero
-/
@@ -1490,7 +1490,7 @@ convergence.-/
theorem changeOrigin_radius : p.radius - βxββ β€ (p.changeOrigin x).radius :=
by
refine' ENNReal.le_of_forall_pos_nnreal_lt fun r h0 hr => _
- rw [lt_tsub_iff_right, add_comm] at hr
+ rw [lt_tsub_iff_right, add_comm] at hr
have hr' : (βxββ : ββ₯0β) < p.radius := (le_add_right le_rfl).trans_lt hr
apply le_radius_of_summable_nnnorm
have :
@@ -1548,7 +1548,7 @@ theorem changeOrigin_eval (h : (βxββ + βyββ : ββ₯0β) < p.radius
Β· dsimp only [f]
refine' ContinuousMultilinearMap.hasSum_eval _ _
have := (p.has_fpower_series_on_ball_change_origin k radius_pos).HasSum x_mem_ball
- rw [zero_add] at this
+ rw [zero_add] at this
refine' HasSum.sigma_of_hasSum this (fun l => _) _
Β· simp only [change_origin_series, ContinuousMultilinearMap.sum_apply]
apply hasSum_fintype
@@ -1595,7 +1595,7 @@ theorem HasFPowerSeriesOnBall.changeOrigin (hf : HasFPowerSeriesOnBall f p x r)
r_pos := by simp [h]
HasSum := fun z hz => by
convert (p.change_origin y).HasSum _
- Β· rw [mem_emetric_ball_zero_iff, lt_tsub_iff_right, add_comm] at hz
+ Β· rw [mem_emetric_ball_zero_iff, lt_tsub_iff_right, add_comm] at hz
rw [p.change_origin_eval (hz.trans_le hf.r_le), add_assoc, hf.sum]
refine' mem_emetric_ball_zero_iff.2 (lt_of_le_of_lt _ hz)
exact_mod_cast nnnorm_add_le y z
@@ -1612,7 +1612,7 @@ theorem HasFPowerSeriesOnBall.analyticAt_of_mem (hf : HasFPowerSeriesOnBall f p
by
have : (βy - xββ : ββ₯0β) < r := by simpa [edist_eq_coe_nnnorm_sub] using h
have := hf.change_origin this
- rw [add_sub_cancel'_right] at this
+ rw [add_sub_cancel'_right] at this
exact this.analytic_at
#align has_fpower_series_on_ball.analytic_at_of_mem HasFPowerSeriesOnBall.analyticAt_of_mem
-/
@@ -1661,7 +1661,7 @@ theorem hasFPowerSeriesAt_iff :
obtain β¨z, z_pos, le_zβ© := NormedField.exists_norm_lt π r_pos.lt
have : (βzββ : ENNReal) β€ p.radius :=
by
- simp only [dist_zero_right] at h
+ simp only [dist_zero_right] at h
apply FormalMultilinearSeries.le_radius_of_tendsto
convert tendsto_norm.comp (h le_z).Summable.tendsto_atTop_zero
funext <;> simp [norm_smul, mul_comm]
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -336,7 +336,7 @@ theorem summable_norm_apply (p : FormalMultilinearSeries π E F) {x : E}
by
rw [mem_emetric_ball_zero_iff] at hx
refine'
- Summable.of_nonneg_of_le (fun _ => norm_nonneg _) (fun n => ((p n).le_op_norm _).trans_eq _)
+ Summable.of_nonneg_of_le (fun _ => norm_nonneg _) (fun n => ((p n).le_opNorm _).trans_eq _)
(p.summable_norm_mul_pow hx)
simp
#align formal_multilinear_series.summable_norm_apply FormalMultilinearSeries.summable_norm_apply
@@ -820,7 +820,7 @@ theorem HasFPowerSeriesOnBall.uniform_geometric_approx' {r' : ββ₯0}
apply norm_sub_le_of_geometric_bound_of_hasSum (ya.trans_lt ha.2) _ (hf.has_sum this)
intro n
calc
- β(p n) fun i : Fin n => yβ β€ βp nβ * β i : Fin n, βyβ := ContinuousMultilinearMap.le_op_norm _ _
+ β(p n) fun i : Fin n => yβ β€ βp nβ * β i : Fin n, βyβ := ContinuousMultilinearMap.le_opNorm _ _
_ = βp nβ * r' ^ n * (βyβ / r') ^ n := by field_simp [hr'0.ne', mul_right_comm]
_ β€ C * a ^ n * (βyβ / r') ^ n :=
(mul_le_mul_of_nonneg_right (hp n) (pow_nonneg (div_nonneg (norm_nonneg _) r'.coe_nonneg) _))
@@ -1331,8 +1331,8 @@ theorem nnnorm_changeOriginSeriesTerm_apply_le (k l : β) (s : Finset (Fin (k +
βp (k + l)ββ * βxββ ^ l * βyββ ^ k :=
by
rw [β p.nnnorm_change_origin_series_term k l s hs, β Fin.prod_const, β Fin.prod_const]
- apply ContinuousMultilinearMap.le_of_op_nnnorm_le
- apply ContinuousMultilinearMap.le_op_nnnorm
+ apply ContinuousMultilinearMap.le_of_opNNNorm_le
+ apply ContinuousMultilinearMap.le_opNNNorm
#align formal_multilinear_series.nnnorm_change_origin_series_term_apply_le FormalMultilinearSeries.nnnorm_changeOriginSeriesTerm_apply_le
-/
@@ -1361,8 +1361,7 @@ theorem nnnorm_changeOriginSeries_apply_le_tsum (k l : β) (x : E) :
β' s : { s : Finset (Fin (k + l)) // s.card = l }, βp (k + l)ββ * βxββ ^ l :=
by
rw [NNReal.tsum_mul_right, β Fin.prod_const]
- exact
- (p.change_origin_series k l).le_of_op_nnnorm_le _ (p.nnnorm_change_origin_series_le_tsum _ _)
+ exact (p.change_origin_series k l).le_of_opNNNorm_le _ (p.nnnorm_change_origin_series_le_tsum _ _)
#align formal_multilinear_series.nnnorm_change_origin_series_apply_le_tsum FormalMultilinearSeries.nnnorm_changeOriginSeries_apply_le_tsum
-/
@@ -1557,7 +1556,7 @@ theorem changeOrigin_eval (h : (βxββ + βyββ : ββ₯0β) < p.radius
Summable.of_nnnorm_bounded _
(p.change_origin_series_summable_auxβ (mem_emetric_ball_zero_iff.1 x_mem_ball) k)
fun s => _
- refine' (ContinuousMultilinearMap.le_op_nnnorm _ _).trans_eq _
+ refine' (ContinuousMultilinearMap.le_opNNNorm _ _).trans_eq _
simp
refine' hf.unique (change_origin_index_equiv.symm.has_sum_iff.1 _)
refine'
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -326,7 +326,7 @@ theorem summable_norm_mul_pow (p : FormalMultilinearSeries π E F) {r : ββ₯
obtain β¨a, ha : a β Ioo (0 : β) 1, C, hC : 0 < C, hpβ© := p.norm_mul_pow_le_mul_pow_of_lt_radius h
exact
Summable.of_nonneg_of_le (fun n => mul_nonneg (norm_nonneg _) (pow_nonneg r.coe_nonneg _)) hp
- ((summable_geometric_of_lt_1 ha.1.le ha.2).hMul_left _)
+ ((summable_geometric_of_lt_one ha.1.le ha.2).hMul_left _)
#align formal_multilinear_series.summable_norm_mul_pow FormalMultilinearSeries.summable_norm_mul_pow
-/
@@ -374,7 +374,7 @@ theorem radius_eq_top_iff_summable_norm (p : FormalMultilinearSeries π E F) :
(show (r : ββ₯0β) < p.radius from h.symm βΈ ENNReal.coe_lt_top)
refine'
Summable.of_norm_bounded (fun n => (C : β) * a ^ n)
- ((summable_geometric_of_lt_1 ha.1.le ha.2).hMul_left _) fun n => _
+ ((summable_geometric_of_lt_one ha.1.le ha.2).hMul_left _) fun n => _
specialize hp n
rwa [Real.norm_of_nonneg (mul_nonneg (norm_nonneg _) (pow_nonneg r.coe_nonneg n))]
Β· exact p.radius_eq_top_of_summable_norm
@@ -924,8 +924,8 @@ theorem HasFPowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
simp only [add_mul]
have : βaβ < 1 := by simp only [Real.norm_eq_abs, abs_of_pos ha.1, ha.2]
convert
- (hasSum_coe_mul_geometric_of_norm_lt_1 this).add
- ((hasSum_geometric_of_norm_lt_1 this).hMul_left 2)
+ (hasSum_coe_mul_geometric_of_norm_lt_one this).add
+ ((hasSum_geometric_of_norm_lt_one this).hMul_left 2)
exact hA.norm_le_of_bounded hBL hAB
suffices L =O[π (EMetric.ball (x, x) r')] fun y => βy - (x, x)β * βy.1 - y.2β
by
@@ -984,7 +984,7 @@ theorem HasFPowerSeriesOnBall.tendstoUniformlyOn {r' : ββ₯0} (hf : HasFPowerS
exact hf.uniform_geometric_approx h
refine' Metric.tendstoUniformlyOn_iff.2 fun Ξ΅ Ξ΅pos => _
have L : tendsto (fun n => (C : β) * a ^ n) at_top (π ((C : β) * 0)) :=
- tendsto_const_nhds.mul (tendsto_pow_atTop_nhds_0_of_lt_1 ha.1.le ha.2)
+ tendsto_const_nhds.mul (tendsto_pow_atTop_nhds_zero_of_lt_one ha.1.le ha.2)
rw [MulZeroClass.mul_zero] at L
refine' (L.eventually (gt_mem_nhds Ξ΅pos)).mono fun n hn y hy => _
rw [dist_eq_norm]
@@ -1130,7 +1130,7 @@ theorem Asymptotics.IsBigO.continuousMultilinearMap_apply_eq_zero {n : β} {p :
exact
norm_eq_zero.mp
(by
- simpa only [fin0_apply_norm, norm_eq_zero, norm_zero, zero_pow', Ne.def, Nat.one_ne_zero,
+ simpa only [fin0_apply_norm, norm_eq_zero, norm_zero, zero_pow, Ne.def, Nat.one_ne_zero,
not_false_iff, MulZeroClass.mul_zero, norm_le_zero_iff] using
ht 0 (δΡ (Metric.mem_ball_self δ_pos)))
Β· refine' Or.elim (em (y = 0)) (fun hy => by simpa only [hy] using p.map_zero) fun hy => _
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -844,7 +844,7 @@ theorem HasFPowerSeriesOnBall.uniform_geometric_approx {r' : ββ₯0}
exact hf.uniform_geometric_approx' h
refine' β¨a, ha, C, hC, fun y hy n => (hp y hy n).trans _β©
have yr' : βyβ < r' := by rwa [ball_zero_eq] at hy
- refine' mul_le_mul_of_nonneg_left (pow_le_pow_of_le_left _ _ _) hC.lt.le
+ refine' mul_le_mul_of_nonneg_left (pow_le_pow_left _ _ _) hC.lt.le
exacts [mul_nonneg ha.1.le (div_nonneg (norm_nonneg y) r'.coe_nonneg),
mul_le_of_le_one_right ha.1.le (div_le_one_of_le yr'.le r'.coe_nonneg)]
#align has_fpower_series_on_ball.uniform_geometric_approx HasFPowerSeriesOnBall.uniform_geometric_approx
@@ -914,7 +914,7 @@ theorem HasFPowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
_ = βp (n + 2)β * βy - (x, x)β ^ n * (β(n + 2) * βy - (x, x)β * βy.1 - y.2β) := by
rw [pow_succ βy - (x, x)β]; ring
_ β€ C * a ^ (n + 2) / r' ^ (n + 2) * r' ^ n * (β(n + 2) * βy - (x, x)β * βy.1 - y.2β) := by
- apply_rules [mul_le_mul_of_nonneg_right, mul_le_mul, hp, pow_le_pow_of_le_left, hy'.le,
+ apply_rules [mul_le_mul_of_nonneg_right, mul_le_mul, hp, pow_le_pow_left, hy'.le,
norm_nonneg, pow_nonneg, div_nonneg, mul_nonneg, Nat.cast_nonneg, hC.le, r'.coe_nonneg,
ha.1.le]
_ = B n := by field_simp [B, pow_succ, hr'0.ne'];
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -344,7 +344,7 @@ theorem summable_norm_apply (p : FormalMultilinearSeries π E F) {x : E}
#print FormalMultilinearSeries.summable_nnnorm_mul_pow /-
theorem summable_nnnorm_mul_pow (p : FormalMultilinearSeries π E F) {r : ββ₯0} (h : βr < p.radius) :
- Summable fun n : β => βp nββ * r ^ n := by rw [β NNReal.summable_coe]; push_cast ;
+ Summable fun n : β => βp nββ * r ^ n := by rw [β NNReal.summable_coe]; push_cast;
exact p.summable_norm_mul_pow h
#align formal_multilinear_series.summable_nnnorm_mul_pow FormalMultilinearSeries.summable_nnnorm_mul_pow
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -325,7 +325,7 @@ theorem summable_norm_mul_pow (p : FormalMultilinearSeries π E F) {r : ββ₯
by
obtain β¨a, ha : a β Ioo (0 : β) 1, C, hC : 0 < C, hpβ© := p.norm_mul_pow_le_mul_pow_of_lt_radius h
exact
- summable_of_nonneg_of_le (fun n => mul_nonneg (norm_nonneg _) (pow_nonneg r.coe_nonneg _)) hp
+ Summable.of_nonneg_of_le (fun n => mul_nonneg (norm_nonneg _) (pow_nonneg r.coe_nonneg _)) hp
((summable_geometric_of_lt_1 ha.1.le ha.2).hMul_left _)
#align formal_multilinear_series.summable_norm_mul_pow FormalMultilinearSeries.summable_norm_mul_pow
-/
@@ -336,7 +336,7 @@ theorem summable_norm_apply (p : FormalMultilinearSeries π E F) {x : E}
by
rw [mem_emetric_ball_zero_iff] at hx
refine'
- summable_of_nonneg_of_le (fun _ => norm_nonneg _) (fun n => ((p n).le_op_norm _).trans_eq _)
+ Summable.of_nonneg_of_le (fun _ => norm_nonneg _) (fun n => ((p n).le_op_norm _).trans_eq _)
(p.summable_norm_mul_pow hx)
simp
#align formal_multilinear_series.summable_norm_apply FormalMultilinearSeries.summable_norm_apply
@@ -352,7 +352,7 @@ theorem summable_nnnorm_mul_pow (p : FormalMultilinearSeries π E F) {r : β
#print FormalMultilinearSeries.summable /-
protected theorem summable [CompleteSpace F] (p : FormalMultilinearSeries π E F) {x : E}
(hx : x β EMetric.ball (0 : E) p.radius) : Summable fun n : β => p n fun _ => x :=
- summable_of_summable_norm (p.summable_norm_apply hx)
+ Summable.of_norm (p.summable_norm_apply hx)
#align formal_multilinear_series.summable FormalMultilinearSeries.summable
-/
@@ -373,7 +373,7 @@ theorem radius_eq_top_iff_summable_norm (p : FormalMultilinearSeries π E F) :
p.norm_mul_pow_le_mul_pow_of_lt_radius
(show (r : ββ₯0β) < p.radius from h.symm βΈ ENNReal.coe_lt_top)
refine'
- summable_of_norm_bounded (fun n => (C : β) * a ^ n)
+ Summable.of_norm_bounded (fun n => (C : β) * a ^ n)
((summable_geometric_of_lt_1 ha.1.le ha.2).hMul_left _) fun n => _
specialize hp n
rwa [Real.norm_of_nonneg (mul_nonneg (norm_nonneg _) (pow_nonneg r.coe_nonneg n))]
@@ -1540,7 +1540,7 @@ theorem changeOrigin_eval (h : (βxββ + βyββ : ββ₯0β) < p.radius
p.change_origin_series_term s.1 s.2.1 s.2.2 s.2.2.2 (fun _ => x) fun _ => y
have hsf : Summable f :=
by
- refine' summable_of_nnnorm_bounded _ (p.change_origin_series_summable_auxβ h) _
+ refine' Summable.of_nnnorm_bounded _ (p.change_origin_series_summable_auxβ h) _
rintro β¨k, l, s, hsβ©; dsimp only [Subtype.coe_mk]
exact p.nnnorm_change_origin_series_term_apply_le _ _ _ _ _ _
have hf : HasSum f ((p.change_origin x).Sum y) :=
@@ -1554,7 +1554,7 @@ theorem changeOrigin_eval (h : (βxββ + βyββ : ββ₯0β) < p.radius
Β· simp only [change_origin_series, ContinuousMultilinearMap.sum_apply]
apply hasSum_fintype
Β· refine'
- summable_of_nnnorm_bounded _
+ Summable.of_nnnorm_bounded _
(p.change_origin_series_summable_auxβ (mem_emetric_ball_zero_iff.1 x_mem_ball) k)
fun s => _
refine' (ContinuousMultilinearMap.le_op_nnnorm _ _).trans_eq _
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,10 +3,10 @@ Copyright (c) 2020 SΓ©bastien GouΓ«zel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: SΓ©bastien GouΓ«zel, Yury Kudryashov
-/
-import Mathbin.Analysis.Calculus.FormalMultilinearSeries
-import Mathbin.Analysis.SpecificLimits.Normed
-import Mathbin.Logic.Equiv.Fin
-import Mathbin.Topology.Algebra.InfiniteSum.Module
+import Analysis.Calculus.FormalMultilinearSeries
+import Analysis.SpecificLimits.Normed
+import Logic.Equiv.Fin
+import Topology.Algebra.InfiniteSum.Module
#align_import analysis.analytic.basic from "leanprover-community/mathlib"@"2ebc1d6c2fed9f54c95bbc3998eaa5570527129a"
@@ -736,7 +736,7 @@ theorem AnalyticOn.sub {s : Set E} (hf : AnalyticOn π f s) (hg : AnalyticOn
#align analytic_on.sub AnalyticOn.sub
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (i Β«expr β Β» 0) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (i Β«expr β Β» 0) -/
#print HasFPowerSeriesOnBall.coeff_zero /-
theorem HasFPowerSeriesOnBall.coeff_zero (hf : HasFPowerSeriesOnBall f pf x r) (v : Fin 0 β E) :
pf 0 v = f x := by
@@ -937,7 +937,7 @@ theorem HasFPowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
#align has_fpower_series_on_ball.is_O_image_sub_image_sub_deriv_principal HasFPowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (y z Β«expr β Β» emetric.ball[emetric.ball] x r') -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:641:2: warning: expanding binder collection (y z Β«expr β Β» emetric.ball[emetric.ball] x r') -/
#print HasFPowerSeriesOnBall.image_sub_sub_deriv_le /-
/-- If `f` has formal power series `β n, pβ` on a ball of radius `r`, then for `y, z` in any smaller
ball, the norm of the difference `f y - f z - p 1 (Ξ» _, y - z)` is bounded above by
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -326,7 +326,7 @@ theorem summable_norm_mul_pow (p : FormalMultilinearSeries π E F) {r : ββ₯
obtain β¨a, ha : a β Ioo (0 : β) 1, C, hC : 0 < C, hpβ© := p.norm_mul_pow_le_mul_pow_of_lt_radius h
exact
summable_of_nonneg_of_le (fun n => mul_nonneg (norm_nonneg _) (pow_nonneg r.coe_nonneg _)) hp
- ((summable_geometric_of_lt_1 ha.1.le ha.2).mul_left _)
+ ((summable_geometric_of_lt_1 ha.1.le ha.2).hMul_left _)
#align formal_multilinear_series.summable_norm_mul_pow FormalMultilinearSeries.summable_norm_mul_pow
-/
@@ -374,7 +374,7 @@ theorem radius_eq_top_iff_summable_norm (p : FormalMultilinearSeries π E F) :
(show (r : ββ₯0β) < p.radius from h.symm βΈ ENNReal.coe_lt_top)
refine'
summable_of_norm_bounded (fun n => (C : β) * a ^ n)
- ((summable_geometric_of_lt_1 ha.1.le ha.2).mul_left _) fun n => _
+ ((summable_geometric_of_lt_1 ha.1.le ha.2).hMul_left _) fun n => _
specialize hp n
rwa [Real.norm_of_nonneg (mul_nonneg (norm_nonneg _) (pow_nonneg r.coe_nonneg n))]
Β· exact p.radius_eq_top_of_summable_norm
@@ -925,7 +925,7 @@ theorem HasFPowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
have : βaβ < 1 := by simp only [Real.norm_eq_abs, abs_of_pos ha.1, ha.2]
convert
(hasSum_coe_mul_geometric_of_norm_lt_1 this).add
- ((hasSum_geometric_of_norm_lt_1 this).mul_left 2)
+ ((hasSum_geometric_of_norm_lt_1 this).hMul_left 2)
exact hA.norm_le_of_bounded hBL hAB
suffices L =O[π (EMetric.ball (x, x) r')] fun y => βy - (x, x)β * βy.1 - y.2β
by
@@ -1435,7 +1435,7 @@ theorem changeOriginSeries_summable_auxβ {r r' : ββ₯0} (hr : (r + r' : β
convert_to HasSum (fun s : Finset (Fin n) => βp nββ * (r ^ s.card * r' ^ (n - s.card))) _
Β· ext1 s; rw [tsub_add_cancel_of_le (card_finset_fin_le _), mul_assoc]
rw [β Fin.sum_pow_mul_eq_add_pow]
- exact (hasSum_fintype _).mul_left _
+ exact (hasSum_fintype _).hMul_left _
refine' NNReal.summable_sigma.2 β¨fun n => (this n).Summable, _β©
simp only [(this _).tsum_eq]
exact p.summable_nnnorm_mul_pow hr
@@ -1449,7 +1449,7 @@ theorem changeOriginSeries_summable_auxβ (hr : (r : ββ₯0β) < p.radius) (k
by
rcases ENNReal.lt_iff_exists_add_pos_lt.1 hr with β¨r', h0, hr'β©
simpa only [mul_inv_cancel_rightβ (pow_pos h0 _).ne'] using
- ((NNReal.summable_sigma.1 (p.change_origin_series_summable_auxβ hr')).1 k).mul_right (r' ^ k)β»ΒΉ
+ ((NNReal.summable_sigma.1 (p.change_origin_series_summable_auxβ hr')).1 k).hMul_right (r' ^ k)β»ΒΉ
#align formal_multilinear_series.change_origin_series_summable_auxβ FormalMultilinearSeries.changeOriginSeries_summable_auxβ
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,17 +2,14 @@
Copyright (c) 2020 SΓ©bastien GouΓ«zel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: SΓ©bastien GouΓ«zel, Yury Kudryashov
-
-! This file was ported from Lean 3 source module analysis.analytic.basic
-! leanprover-community/mathlib commit 2ebc1d6c2fed9f54c95bbc3998eaa5570527129a
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Analysis.Calculus.FormalMultilinearSeries
import Mathbin.Analysis.SpecificLimits.Normed
import Mathbin.Logic.Equiv.Fin
import Mathbin.Topology.Algebra.InfiniteSum.Module
+#align_import analysis.analytic.basic from "leanprover-community/mathlib"@"2ebc1d6c2fed9f54c95bbc3998eaa5570527129a"
+
/-!
# Analytic functions
@@ -739,7 +736,7 @@ theorem AnalyticOn.sub {s : Set E} (hf : AnalyticOn π f s) (hg : AnalyticOn
#align analytic_on.sub AnalyticOn.sub
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (i Β«expr β Β» 0) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (i Β«expr β Β» 0) -/
#print HasFPowerSeriesOnBall.coeff_zero /-
theorem HasFPowerSeriesOnBall.coeff_zero (hf : HasFPowerSeriesOnBall f pf x r) (v : Fin 0 β E) :
pf 0 v = f x := by
@@ -940,7 +937,7 @@ theorem HasFPowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
#align has_fpower_series_on_ball.is_O_image_sub_image_sub_deriv_principal HasFPowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
-/
-/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (y z Β«expr β Β» emetric.ball[emetric.ball] x r') -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (y z Β«expr β Β» emetric.ball[emetric.ball] x r') -/
#print HasFPowerSeriesOnBall.image_sub_sub_deriv_le /-
/-- If `f` has formal power series `β n, pβ` on a ball of radius `r`, then for `y, z` in any smaller
ball, the norm of the difference `f y - f z - p 1 (Ξ» _, y - z)` is bounded above by
mathlib commit https://github.com/leanprover-community/mathlib/commit/728ef9dbb281241906f25cbeb30f90d83e0bb451
@@ -1394,7 +1394,8 @@ def changeOriginIndexEquiv :
invFun s :=
β¨s.1 - s.2.card, s.2.card,
β¨s.2.map
- (Fin.cast <| (tsub_add_cancel_of_le <| card_finset_fin_le s.2).symm).toEquiv.toEmbedding,
+ (Fin.castIso <|
+ (tsub_add_cancel_of_le <| card_finset_fin_le s.2).symm).toEquiv.toEmbedding,
Finset.card_map _β©β©
left_inv := by
rintro β¨k, l, β¨s : Finset (Fin <| k + l), hs : s.card = lβ©β©
@@ -1406,16 +1407,16 @@ def changeOriginIndexEquiv :
k' = k β
l' = l β
β (hkl : k + l = k' + l') (hs'),
- (β¨k', l', β¨Finset.map (Fin.cast hkl).toEquiv.toEmbedding s, hs'β©β© :
+ (β¨k', l', β¨Finset.map (Fin.castIso hkl).toEquiv.toEmbedding s, hs'β©β© :
Ξ£ k l : β, { s : Finset (Fin (k + l)) // s.card = l }) =
β¨k, l, β¨s, hsβ©β©
by apply this <;> simp only [hs, add_tsub_cancel_right]
rintro _ _ rfl rfl hkl hs'
- simp only [Equiv.refl_toEmbedding, Fin.cast_refl, Finset.map_refl, eq_self_iff_true,
+ simp only [Equiv.refl_toEmbedding, Fin.castIso_refl, Finset.map_refl, eq_self_iff_true,
OrderIso.refl_toEquiv, and_self_iff, heq_iff_eq]
right_inv := by
rintro β¨n, sβ©
- simp [tsub_add_cancel_of_le (card_finset_fin_le s), Fin.cast_to_equiv]
+ simp [tsub_add_cancel_of_le (card_finset_fin_le s), Fin.castIso_to_equiv]
#align formal_multilinear_series.change_origin_index_equiv FormalMultilinearSeries.changeOriginIndexEquiv
-/
@@ -1574,7 +1575,7 @@ theorem changeOrigin_eval (h : (βxββ + βyββ : ββ₯0β) < p.radius
have :
β (m) (hm : n = m),
p n (s.piecewise (fun _ => x) fun _ => y) =
- p m ((s.map (Fin.cast hm).toEquiv.toEmbedding).piecewise (fun _ => x) fun _ => y) :=
+ p m ((s.map (Fin.castIso hm).toEquiv.toEmbedding).piecewise (fun _ => x) fun _ => y) :=
by rintro m rfl; simp
apply this
#align formal_multilinear_series.change_origin_eval FormalMultilinearSeries.changeOrigin_eval
mathlib commit https://github.com/leanprover-community/mathlib/commit/2a0ce625dbb0ffbc7d1316597de0b25c1ec75303
@@ -1193,8 +1193,8 @@ theorem HasFPowerSeriesAt.apply_eq_zero {p : FormalMultilinearSeries π E F} {
#print HasFPowerSeriesAt.eq_zero /-
/-- A one-dimensional formal multilinear series representing the zero function is zero. -/
theorem HasFPowerSeriesAt.eq_zero {p : FormalMultilinearSeries π π E} {x : π}
- (h : HasFPowerSeriesAt 0 p x) : p = 0 := by ext (n x);
- rw [β mk_pi_field_apply_one_eq_self (p n)]; simp [h.apply_eq_zero n 1]
+ (h : HasFPowerSeriesAt 0 p x) : p = 0 := by ext n x; rw [β mk_pi_field_apply_one_eq_self (p n)];
+ simp [h.apply_eq_zero n 1]
#align has_fpower_series_at.eq_zero HasFPowerSeriesAt.eq_zero
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -111,10 +111,12 @@ def partialSum (p : FormalMultilinearSeries π E F) (n : β) (x : E) : F :=
#align formal_multilinear_series.partial_sum FormalMultilinearSeries.partialSum
-/
+#print FormalMultilinearSeries.partialSum_continuous /-
/-- The partial sums of a formal multilinear series are continuous. -/
theorem partialSum_continuous (p : FormalMultilinearSeries π E F) (n : β) :
Continuous (p.partialSum n) := by continuity
#align formal_multilinear_series.partial_sum_continuous FormalMultilinearSeries.partialSum_continuous
+-/
end FormalMultilinearSeries
@@ -137,60 +139,81 @@ def radius (p : FormalMultilinearSeries π E F) : ββ₯0β :=
#align formal_multilinear_series.radius FormalMultilinearSeries.radius
-/
+#print FormalMultilinearSeries.le_radius_of_bound /-
/-- If `βpββ rβΏ` is bounded in `n`, then the radius of `p` is at least `r`. -/
theorem le_radius_of_bound (C : β) {r : ββ₯0} (h : β n : β, βp nβ * r ^ n β€ C) :
(r : ββ₯0β) β€ p.radius :=
le_iSup_of_le r <| le_iSup_of_le C <| le_iSup (fun _ => (r : ββ₯0β)) h
#align formal_multilinear_series.le_radius_of_bound FormalMultilinearSeries.le_radius_of_bound
+-/
+#print FormalMultilinearSeries.le_radius_of_bound_nnreal /-
/-- If `βpββ rβΏ` is bounded in `n`, then the radius of `p` is at least `r`. -/
theorem le_radius_of_bound_nnreal (C : ββ₯0) {r : ββ₯0} (h : β n : β, βp nββ * r ^ n β€ C) :
(r : ββ₯0β) β€ p.radius :=
p.le_radius_of_bound C fun n => by exact_mod_cast h n
#align formal_multilinear_series.le_radius_of_bound_nnreal FormalMultilinearSeries.le_radius_of_bound_nnreal
+-/
+#print FormalMultilinearSeries.le_radius_of_isBigO /-
/-- If `βpββ rβΏ = O(1)`, as `n β β`, then the radius of `p` is at least `r`. -/
theorem le_radius_of_isBigO (h : (fun n => βp nβ * r ^ n) =O[atTop] fun n => (1 : β)) :
βr β€ p.radius :=
Exists.elim (isBigO_one_nat_atTop_iff.1 h) fun C hC =>
p.le_radius_of_bound C fun n => (le_abs_self _).trans (hC n)
#align formal_multilinear_series.le_radius_of_is_O FormalMultilinearSeries.le_radius_of_isBigO
+-/
+#print FormalMultilinearSeries.le_radius_of_eventually_le /-
theorem le_radius_of_eventually_le (C) (h : βαΆ n in atTop, βp nβ * r ^ n β€ C) : βr β€ p.radius :=
p.le_radius_of_isBigO <| IsBigO.of_bound C <| h.mono fun n hn => by simpa
#align formal_multilinear_series.le_radius_of_eventually_le FormalMultilinearSeries.le_radius_of_eventually_le
+-/
+#print FormalMultilinearSeries.le_radius_of_summable_nnnorm /-
theorem le_radius_of_summable_nnnorm (h : Summable fun n => βp nββ * r ^ n) : βr β€ p.radius :=
p.le_radius_of_bound_nnreal (β' n, βp nββ * r ^ n) fun n => le_tsum' h _
#align formal_multilinear_series.le_radius_of_summable_nnnorm FormalMultilinearSeries.le_radius_of_summable_nnnorm
+-/
+#print FormalMultilinearSeries.le_radius_of_summable /-
theorem le_radius_of_summable (h : Summable fun n => βp nβ * r ^ n) : βr β€ p.radius :=
p.le_radius_of_summable_nnnorm <| by simp only [β coe_nnnorm] at h ; exact_mod_cast h
#align formal_multilinear_series.le_radius_of_summable FormalMultilinearSeries.le_radius_of_summable
+-/
+#print FormalMultilinearSeries.radius_eq_top_of_forall_nnreal_isBigO /-
theorem radius_eq_top_of_forall_nnreal_isBigO
(h : β r : ββ₯0, (fun n => βp nβ * r ^ n) =O[atTop] fun n => (1 : β)) : p.radius = β :=
ENNReal.eq_top_of_forall_nnreal_le fun r => p.le_radius_of_isBigO (h r)
#align formal_multilinear_series.radius_eq_top_of_forall_nnreal_is_O FormalMultilinearSeries.radius_eq_top_of_forall_nnreal_isBigO
+-/
+#print FormalMultilinearSeries.radius_eq_top_of_eventually_eq_zero /-
theorem radius_eq_top_of_eventually_eq_zero (h : βαΆ n in atTop, p n = 0) : p.radius = β :=
p.radius_eq_top_of_forall_nnreal_isBigO fun r =>
(isBigO_zero _ _).congr' (h.mono fun n hn => by simp [hn]) EventuallyEq.rfl
#align formal_multilinear_series.radius_eq_top_of_eventually_eq_zero FormalMultilinearSeries.radius_eq_top_of_eventually_eq_zero
+-/
+#print FormalMultilinearSeries.radius_eq_top_of_forall_image_add_eq_zero /-
theorem radius_eq_top_of_forall_image_add_eq_zero (n : β) (hn : β m, p (m + n) = 0) :
p.radius = β :=
p.radius_eq_top_of_eventually_eq_zero <|
mem_atTop_sets.2 β¨n, fun k hk => tsub_add_cancel_of_le hk βΈ hn _β©
#align formal_multilinear_series.radius_eq_top_of_forall_image_add_eq_zero FormalMultilinearSeries.radius_eq_top_of_forall_image_add_eq_zero
+-/
+#print FormalMultilinearSeries.constFormalMultilinearSeries_radius /-
@[simp]
theorem constFormalMultilinearSeries_radius {v : F} :
(constFormalMultilinearSeries π E v).radius = β€ :=
(constFormalMultilinearSeries π E v).radius_eq_top_of_forall_image_add_eq_zero 1
(by simp [constFormalMultilinearSeries])
#align formal_multilinear_series.const_formal_multilinear_series_radius FormalMultilinearSeries.constFormalMultilinearSeries_radius
+-/
+#print FormalMultilinearSeries.isLittleO_of_lt_radius /-
/-- For `r` strictly smaller than the radius of `p`, then `βpββ rβΏ` tends to zero exponentially:
for some `0 < a < 1`, `βp nβ rβΏ = o(aβΏ)`. -/
theorem isLittleO_of_lt_radius (h : βr < p.radius) :
@@ -208,14 +231,18 @@ theorem isLittleO_of_lt_radius (h : βr < p.radius) :
field_simp [mul_right_comm, abs_mul, this.ne']
_ β€ C * (r / t) ^ n := mul_le_mul_of_nonneg_right (hC n) (pow_nonneg (div_nonneg r.2 t.2) _)
#align formal_multilinear_series.is_o_of_lt_radius FormalMultilinearSeries.isLittleO_of_lt_radius
+-/
+#print FormalMultilinearSeries.isLittleO_one_of_lt_radius /-
/-- For `r` strictly smaller than the radius of `p`, then `βpββ rβΏ = o(1)`. -/
theorem isLittleO_one_of_lt_radius (h : βr < p.radius) :
(fun n => βp nβ * r ^ n) =o[atTop] (fun _ => 1 : β β β) :=
let β¨a, ha, hpβ© := p.isLittleO_of_lt_radius h
hp.trans <| (isLittleO_pow_pow_of_lt_left ha.1.le ha.2).congr (fun n => rfl) one_pow
#align formal_multilinear_series.is_o_one_of_lt_radius FormalMultilinearSeries.isLittleO_one_of_lt_radius
+-/
+#print FormalMultilinearSeries.norm_mul_pow_le_mul_pow_of_lt_radius /-
/-- For `r` strictly smaller than the radius of `p`, then `βpββ rβΏ` tends to zero exponentially:
for some `0 < a < 1` and `C > 0`, `βp nβ * r ^ n β€ C * a ^ n`. -/
theorem norm_mul_pow_le_mul_pow_of_lt_radius (h : βr < p.radius) :
@@ -226,7 +253,9 @@ theorem norm_mul_pow_le_mul_pow_of_lt_radius (h : βr < p.radius) :
β¨a, ha, C, hC, Hβ©
exact β¨a, ha, C, hC, fun n => (le_abs_self _).trans (H n)β©
#align formal_multilinear_series.norm_mul_pow_le_mul_pow_of_lt_radius FormalMultilinearSeries.norm_mul_pow_le_mul_pow_of_lt_radius
+-/
+#print FormalMultilinearSeries.lt_radius_of_isBigO /-
/-- If `r β 0` and `βpββ rβΏ = O(aβΏ)` for some `-1 < a < 1`, then `r < p.radius`. -/
theorem lt_radius_of_isBigO (hβ : r β 0) {a : β} (ha : a β Ioo (-1 : β) 1)
(hp : (fun n => βp nβ * r ^ n) =O[atTop] pow a) : βr < p.radius :=
@@ -243,43 +272,57 @@ theorem lt_radius_of_isBigO (hβ : r β 0) {a : β} (ha : a β Ioo (-1 : β
rw [NNReal.coe_div, div_pow, β mul_div_assoc, div_le_iff (pow_pos ha.1 n)]
exact (le_abs_self _).trans (hp n)
#align formal_multilinear_series.lt_radius_of_is_O FormalMultilinearSeries.lt_radius_of_isBigO
+-/
+#print FormalMultilinearSeries.norm_mul_pow_le_of_lt_radius /-
/-- For `r` strictly smaller than the radius of `p`, then `βpββ rβΏ` is bounded. -/
theorem norm_mul_pow_le_of_lt_radius (p : FormalMultilinearSeries π E F) {r : ββ₯0}
(h : (r : ββ₯0β) < p.radius) : β C > 0, β n, βp nβ * r ^ n β€ C :=
let β¨a, ha, C, hC, hβ© := p.norm_mul_pow_le_mul_pow_of_lt_radius h
β¨C, hC, fun n => (h n).trans <| mul_le_of_le_one_right hC.lt.le (pow_le_one _ ha.1.le ha.2.le)β©
#align formal_multilinear_series.norm_mul_pow_le_of_lt_radius FormalMultilinearSeries.norm_mul_pow_le_of_lt_radius
+-/
+#print FormalMultilinearSeries.norm_le_div_pow_of_pos_of_lt_radius /-
/-- For `r` strictly smaller than the radius of `p`, then `βpββ rβΏ` is bounded. -/
theorem norm_le_div_pow_of_pos_of_lt_radius (p : FormalMultilinearSeries π E F) {r : ββ₯0}
(h0 : 0 < r) (h : (r : ββ₯0β) < p.radius) : β C > 0, β n, βp nβ β€ C / r ^ n :=
let β¨C, hC, hpβ© := p.norm_mul_pow_le_of_lt_radius h
β¨C, hC, fun n => Iff.mpr (le_div_iff (pow_pos h0 _)) (hp n)β©
#align formal_multilinear_series.norm_le_div_pow_of_pos_of_lt_radius FormalMultilinearSeries.norm_le_div_pow_of_pos_of_lt_radius
+-/
+#print FormalMultilinearSeries.nnnorm_mul_pow_le_of_lt_radius /-
/-- For `r` strictly smaller than the radius of `p`, then `βpββ rβΏ` is bounded. -/
theorem nnnorm_mul_pow_le_of_lt_radius (p : FormalMultilinearSeries π E F) {r : ββ₯0}
(h : (r : ββ₯0β) < p.radius) : β C > 0, β n, βp nββ * r ^ n β€ C :=
let β¨C, hC, hpβ© := p.norm_mul_pow_le_of_lt_radius h
β¨β¨C, hC.lt.leβ©, hC, by exact_mod_cast hpβ©
#align formal_multilinear_series.nnnorm_mul_pow_le_of_lt_radius FormalMultilinearSeries.nnnorm_mul_pow_le_of_lt_radius
+-/
+#print FormalMultilinearSeries.le_radius_of_tendsto /-
theorem le_radius_of_tendsto (p : FormalMultilinearSeries π E F) {l : β}
(h : Tendsto (fun n => βp nβ * r ^ n) atTop (π l)) : βr β€ p.radius :=
p.le_radius_of_isBigO (h.isBigO_one _)
#align formal_multilinear_series.le_radius_of_tendsto FormalMultilinearSeries.le_radius_of_tendsto
+-/
+#print FormalMultilinearSeries.le_radius_of_summable_norm /-
theorem le_radius_of_summable_norm (p : FormalMultilinearSeries π E F)
(hs : Summable fun n => βp nβ * r ^ n) : βr β€ p.radius :=
p.le_radius_of_tendsto hs.tendsto_atTop_zero
#align formal_multilinear_series.le_radius_of_summable_norm FormalMultilinearSeries.le_radius_of_summable_norm
+-/
+#print FormalMultilinearSeries.not_summable_norm_of_radius_lt_nnnorm /-
theorem not_summable_norm_of_radius_lt_nnnorm (p : FormalMultilinearSeries π E F) {x : E}
(h : p.radius < βxββ) : Β¬Summable fun n => βp nβ * βxβ ^ n := fun hs =>
not_le_of_lt h (p.le_radius_of_summable_norm hs)
#align formal_multilinear_series.not_summable_norm_of_radius_lt_nnnorm FormalMultilinearSeries.not_summable_norm_of_radius_lt_nnnorm
+-/
+#print FormalMultilinearSeries.summable_norm_mul_pow /-
theorem summable_norm_mul_pow (p : FormalMultilinearSeries π E F) {r : ββ₯0} (h : βr < p.radius) :
Summable fun n : β => βp nβ * r ^ n :=
by
@@ -288,7 +331,9 @@ theorem summable_norm_mul_pow (p : FormalMultilinearSeries π E F) {r : ββ₯
summable_of_nonneg_of_le (fun n => mul_nonneg (norm_nonneg _) (pow_nonneg r.coe_nonneg _)) hp
((summable_geometric_of_lt_1 ha.1.le ha.2).mul_left _)
#align formal_multilinear_series.summable_norm_mul_pow FormalMultilinearSeries.summable_norm_mul_pow
+-/
+#print FormalMultilinearSeries.summable_norm_apply /-
theorem summable_norm_apply (p : FormalMultilinearSeries π E F) {x : E}
(hx : x β EMetric.ball (0 : E) p.radius) : Summable fun n : β => βp n fun _ => xβ :=
by
@@ -298,22 +343,30 @@ theorem summable_norm_apply (p : FormalMultilinearSeries π E F) {x : E}
(p.summable_norm_mul_pow hx)
simp
#align formal_multilinear_series.summable_norm_apply FormalMultilinearSeries.summable_norm_apply
+-/
+#print FormalMultilinearSeries.summable_nnnorm_mul_pow /-
theorem summable_nnnorm_mul_pow (p : FormalMultilinearSeries π E F) {r : ββ₯0} (h : βr < p.radius) :
Summable fun n : β => βp nββ * r ^ n := by rw [β NNReal.summable_coe]; push_cast ;
exact p.summable_norm_mul_pow h
#align formal_multilinear_series.summable_nnnorm_mul_pow FormalMultilinearSeries.summable_nnnorm_mul_pow
+-/
+#print FormalMultilinearSeries.summable /-
protected theorem summable [CompleteSpace F] (p : FormalMultilinearSeries π E F) {x : E}
(hx : x β EMetric.ball (0 : E) p.radius) : Summable fun n : β => p n fun _ => x :=
summable_of_summable_norm (p.summable_norm_apply hx)
#align formal_multilinear_series.summable FormalMultilinearSeries.summable
+-/
+#print FormalMultilinearSeries.radius_eq_top_of_summable_norm /-
theorem radius_eq_top_of_summable_norm (p : FormalMultilinearSeries π E F)
(hs : β r : ββ₯0, Summable fun n => βp nβ * r ^ n) : p.radius = β :=
ENNReal.eq_top_of_forall_nnreal_le fun r => p.le_radius_of_summable_norm (hs r)
#align formal_multilinear_series.radius_eq_top_of_summable_norm FormalMultilinearSeries.radius_eq_top_of_summable_norm
+-/
+#print FormalMultilinearSeries.radius_eq_top_iff_summable_norm /-
theorem radius_eq_top_iff_summable_norm (p : FormalMultilinearSeries π E F) :
p.radius = β β β r : ββ₯0, Summable fun n => βp nβ * r ^ n :=
by
@@ -329,7 +382,9 @@ theorem radius_eq_top_iff_summable_norm (p : FormalMultilinearSeries π E F) :
rwa [Real.norm_of_nonneg (mul_nonneg (norm_nonneg _) (pow_nonneg r.coe_nonneg n))]
Β· exact p.radius_eq_top_of_summable_norm
#align formal_multilinear_series.radius_eq_top_iff_summable_norm FormalMultilinearSeries.radius_eq_top_iff_summable_norm
+-/
+#print FormalMultilinearSeries.le_mul_pow_of_radius_pos /-
/-- If the radius of `p` is positive, then `βpββ` grows at most geometrically. -/
theorem le_mul_pow_of_radius_pos (p : FormalMultilinearSeries π E F) (h : 0 < p.radius) :
β (C r : _) (hC : 0 < C) (hr : 0 < r), β n, βp nβ β€ C * r ^ n :=
@@ -341,7 +396,9 @@ theorem le_mul_pow_of_radius_pos (p : FormalMultilinearSeries π E F) (h : 0 <
convert hCp n
exact inv_pow _ _
#align formal_multilinear_series.le_mul_pow_of_radius_pos FormalMultilinearSeries.le_mul_pow_of_radius_pos
+-/
+#print FormalMultilinearSeries.min_radius_le_radius_add /-
/-- The radius of the sum of two formal series is at least the minimum of their two radii. -/
theorem min_radius_le_radius_add (p q : FormalMultilinearSeries π E F) :
min p.radius q.radius β€ (p + q).radius :=
@@ -353,16 +410,22 @@ theorem min_radius_le_radius_add (p q : FormalMultilinearSeries π E F) :
rw [β add_mul, norm_mul, norm_mul, norm_norm]
exact mul_le_mul_of_nonneg_right ((norm_add_le _ _).trans (le_abs_self _)) (norm_nonneg _)
#align formal_multilinear_series.min_radius_le_radius_add FormalMultilinearSeries.min_radius_le_radius_add
+-/
+#print FormalMultilinearSeries.radius_neg /-
@[simp]
theorem radius_neg (p : FormalMultilinearSeries π E F) : (-p).radius = p.radius := by simp [radius]
#align formal_multilinear_series.radius_neg FormalMultilinearSeries.radius_neg
+-/
+#print FormalMultilinearSeries.hasSum /-
protected theorem hasSum [CompleteSpace F] (p : FormalMultilinearSeries π E F) {x : E}
(hx : x β EMetric.ball (0 : E) p.radius) : HasSum (fun n : β => p n fun _ => x) (p.Sum x) :=
(p.Summable hx).HasSum
#align formal_multilinear_series.has_sum FormalMultilinearSeries.hasSum
+-/
+#print FormalMultilinearSeries.radius_le_radius_continuousLinearMap_comp /-
theorem radius_le_radius_continuousLinearMap_comp (p : FormalMultilinearSeries π E F)
(f : F βL[π] G) : p.radius β€ (f.compFormalMultilinearSeries p).radius :=
by
@@ -373,6 +436,7 @@ theorem radius_le_radius_continuousLinearMap_comp (p : FormalMultilinearSeries
apply is_O_with.of_bound (eventually_of_forall fun n => _)
simpa only [norm_norm] using f.norm_comp_continuous_multilinear_map_le (p n)
#align formal_multilinear_series.radius_le_radius_continuous_linear_map_comp FormalMultilinearSeries.radius_le_radius_continuousLinearMap_comp
+-/
end FormalMultilinearSeries
@@ -424,19 +488,26 @@ def AnalyticOn (f : E β F) (s : Set E) :=
variable {π}
+#print HasFPowerSeriesOnBall.hasFPowerSeriesAt /-
theorem HasFPowerSeriesOnBall.hasFPowerSeriesAt (hf : HasFPowerSeriesOnBall f p x r) :
HasFPowerSeriesAt f p x :=
β¨r, hfβ©
#align has_fpower_series_on_ball.has_fpower_series_at HasFPowerSeriesOnBall.hasFPowerSeriesAt
+-/
+#print HasFPowerSeriesAt.analyticAt /-
theorem HasFPowerSeriesAt.analyticAt (hf : HasFPowerSeriesAt f p x) : AnalyticAt π f x :=
β¨p, hfβ©
#align has_fpower_series_at.analytic_at HasFPowerSeriesAt.analyticAt
+-/
+#print HasFPowerSeriesOnBall.analyticAt /-
theorem HasFPowerSeriesOnBall.analyticAt (hf : HasFPowerSeriesOnBall f p x r) : AnalyticAt π f x :=
hf.HasFPowerSeriesAt.AnalyticAt
#align has_fpower_series_on_ball.analytic_at HasFPowerSeriesOnBall.analyticAt
+-/
+#print HasFPowerSeriesOnBall.congr /-
theorem HasFPowerSeriesOnBall.congr (hf : HasFPowerSeriesOnBall f p x r)
(hg : EqOn f g (EMetric.ball x r)) : HasFPowerSeriesOnBall g p x r :=
{ r_le := hf.r_le
@@ -446,7 +517,9 @@ theorem HasFPowerSeriesOnBall.congr (hf : HasFPowerSeriesOnBall f p x r)
apply hg.symm
simpa [edist_eq_coe_nnnorm_sub] using hy }
#align has_fpower_series_on_ball.congr HasFPowerSeriesOnBall.congr
+-/
+#print HasFPowerSeriesOnBall.comp_sub /-
/-- If a function `f` has a power series `p` around `x`, then the function `z β¦ f (z - y)` has the
same power series around `x + y`. -/
theorem HasFPowerSeriesOnBall.comp_sub (hf : HasFPowerSeriesOnBall f p x r) (y : E) :
@@ -455,28 +528,38 @@ theorem HasFPowerSeriesOnBall.comp_sub (hf : HasFPowerSeriesOnBall f p x r) (y :
r_pos := hf.r_pos
HasSum := fun z hz => by convert hf.has_sum hz; abel }
#align has_fpower_series_on_ball.comp_sub HasFPowerSeriesOnBall.comp_sub
+-/
+#print HasFPowerSeriesOnBall.hasSum_sub /-
theorem HasFPowerSeriesOnBall.hasSum_sub (hf : HasFPowerSeriesOnBall f p x r) {y : E}
(hy : y β EMetric.ball x r) : HasSum (fun n : β => p n fun i => y - x) (f y) :=
by
have : y - x β EMetric.ball (0 : E) r := by simpa [edist_eq_coe_nnnorm_sub] using hy
simpa only [add_sub_cancel'_right] using hf.has_sum this
#align has_fpower_series_on_ball.has_sum_sub HasFPowerSeriesOnBall.hasSum_sub
+-/
+#print HasFPowerSeriesOnBall.radius_pos /-
theorem HasFPowerSeriesOnBall.radius_pos (hf : HasFPowerSeriesOnBall f p x r) : 0 < p.radius :=
lt_of_lt_of_le hf.r_pos hf.r_le
#align has_fpower_series_on_ball.radius_pos HasFPowerSeriesOnBall.radius_pos
+-/
+#print HasFPowerSeriesAt.radius_pos /-
theorem HasFPowerSeriesAt.radius_pos (hf : HasFPowerSeriesAt f p x) : 0 < p.radius :=
let β¨r, hrβ© := hf
hr.radius_pos
#align has_fpower_series_at.radius_pos HasFPowerSeriesAt.radius_pos
+-/
+#print HasFPowerSeriesOnBall.mono /-
theorem HasFPowerSeriesOnBall.mono (hf : HasFPowerSeriesOnBall f p x r) (r'_pos : 0 < r')
(hr : r' β€ r) : HasFPowerSeriesOnBall f p x r' :=
β¨le_trans hr hf.1, r'_pos, fun y hy => hf.HasSum (EMetric.ball_subset_ball hr hy)β©
#align has_fpower_series_on_ball.mono HasFPowerSeriesOnBall.mono
+-/
+#print HasFPowerSeriesAt.congr /-
theorem HasFPowerSeriesAt.congr (hf : HasFPowerSeriesAt f p x) (hg : f =αΆ [π x] g) :
HasFPowerSeriesAt g p x := by
rcases hf with β¨rβ, hββ©
@@ -486,130 +569,178 @@ theorem HasFPowerSeriesAt.congr (hf : HasFPowerSeriesAt f p x) (hg : f =αΆ [π
(hβ.mono (lt_min hβ.r_pos hβpos) inf_le_left).congr fun y hy =>
hβ (EMetric.ball_subset_ball inf_le_right hy)β©
#align has_fpower_series_at.congr HasFPowerSeriesAt.congr
+-/
+#print HasFPowerSeriesAt.eventually /-
protected theorem HasFPowerSeriesAt.eventually (hf : HasFPowerSeriesAt f p x) :
βαΆ r : ββ₯0β in π[>] 0, HasFPowerSeriesOnBall f p x r :=
let β¨r, hrβ© := hf
mem_of_superset (Ioo_mem_nhdsWithin_Ioi (left_mem_Ico.2 hr.r_pos)) fun r' hr' =>
hr.mono hr'.1 hr'.2.le
#align has_fpower_series_at.eventually HasFPowerSeriesAt.eventually
+-/
+#print HasFPowerSeriesOnBall.eventually_hasSum /-
theorem HasFPowerSeriesOnBall.eventually_hasSum (hf : HasFPowerSeriesOnBall f p x r) :
βαΆ y in π 0, HasSum (fun n : β => p n fun i : Fin n => y) (f (x + y)) := by
filter_upwards [EMetric.ball_mem_nhds (0 : E) hf.r_pos] using fun _ => hf.has_sum
#align has_fpower_series_on_ball.eventually_has_sum HasFPowerSeriesOnBall.eventually_hasSum
+-/
+#print HasFPowerSeriesAt.eventually_hasSum /-
theorem HasFPowerSeriesAt.eventually_hasSum (hf : HasFPowerSeriesAt f p x) :
βαΆ y in π 0, HasSum (fun n : β => p n fun i : Fin n => y) (f (x + y)) :=
let β¨r, hrβ© := hf
hr.eventually_hasSum
#align has_fpower_series_at.eventually_has_sum HasFPowerSeriesAt.eventually_hasSum
+-/
+#print HasFPowerSeriesOnBall.eventually_hasSum_sub /-
theorem HasFPowerSeriesOnBall.eventually_hasSum_sub (hf : HasFPowerSeriesOnBall f p x r) :
βαΆ y in π x, HasSum (fun n : β => p n fun i : Fin n => y - x) (f y) := by
filter_upwards [EMetric.ball_mem_nhds x hf.r_pos] with y using hf.has_sum_sub
#align has_fpower_series_on_ball.eventually_has_sum_sub HasFPowerSeriesOnBall.eventually_hasSum_sub
+-/
+#print HasFPowerSeriesAt.eventually_hasSum_sub /-
theorem HasFPowerSeriesAt.eventually_hasSum_sub (hf : HasFPowerSeriesAt f p x) :
βαΆ y in π x, HasSum (fun n : β => p n fun i : Fin n => y - x) (f y) :=
let β¨r, hrβ© := hf
hr.eventually_hasSum_sub
#align has_fpower_series_at.eventually_has_sum_sub HasFPowerSeriesAt.eventually_hasSum_sub
+-/
+#print HasFPowerSeriesOnBall.eventually_eq_zero /-
theorem HasFPowerSeriesOnBall.eventually_eq_zero
(hf : HasFPowerSeriesOnBall f (0 : FormalMultilinearSeries π E F) x r) : βαΆ z in π x, f z = 0 :=
by filter_upwards [hf.eventually_has_sum_sub] with z hz using hz.unique hasSum_zero
#align has_fpower_series_on_ball.eventually_eq_zero HasFPowerSeriesOnBall.eventually_eq_zero
+-/
+#print HasFPowerSeriesAt.eventually_eq_zero /-
theorem HasFPowerSeriesAt.eventually_eq_zero
(hf : HasFPowerSeriesAt f (0 : FormalMultilinearSeries π E F) x) : βαΆ z in π x, f z = 0 :=
let β¨r, hrβ© := hf
hr.eventually_eq_zero
#align has_fpower_series_at.eventually_eq_zero HasFPowerSeriesAt.eventually_eq_zero
+-/
+#print hasFPowerSeriesOnBall_const /-
theorem hasFPowerSeriesOnBall_const {c : F} {e : E} :
HasFPowerSeriesOnBall (fun _ => c) (constFormalMultilinearSeries π E c) e β€ :=
by
refine' β¨by simp, WithTop.zero_lt_top, fun y hy => hasSum_single 0 fun n hn => _β©
simp [constFormalMultilinearSeries_apply hn]
#align has_fpower_series_on_ball_const hasFPowerSeriesOnBall_const
+-/
+#print hasFPowerSeriesAt_const /-
theorem hasFPowerSeriesAt_const {c : F} {e : E} :
HasFPowerSeriesAt (fun _ => c) (constFormalMultilinearSeries π E c) e :=
β¨β€, hasFPowerSeriesOnBall_constβ©
#align has_fpower_series_at_const hasFPowerSeriesAt_const
+-/
+#print analyticAt_const /-
theorem analyticAt_const {v : F} : AnalyticAt π (fun _ => v) x :=
β¨constFormalMultilinearSeries π E v, hasFPowerSeriesAt_constβ©
#align analytic_at_const analyticAt_const
+-/
+#print analyticOn_const /-
theorem analyticOn_const {v : F} {s : Set E} : AnalyticOn π (fun _ => v) s := fun z _ =>
analyticAt_const
#align analytic_on_const analyticOn_const
+-/
+#print HasFPowerSeriesOnBall.add /-
theorem HasFPowerSeriesOnBall.add (hf : HasFPowerSeriesOnBall f pf x r)
(hg : HasFPowerSeriesOnBall g pg x r) : HasFPowerSeriesOnBall (f + g) (pf + pg) x r :=
{ r_le := le_trans (le_min_iff.2 β¨hf.r_le, hg.r_leβ©) (pf.min_radius_le_radius_add pg)
r_pos := hf.r_pos
HasSum := fun y hy => (hf.HasSum hy).add (hg.HasSum hy) }
#align has_fpower_series_on_ball.add HasFPowerSeriesOnBall.add
+-/
+#print HasFPowerSeriesAt.add /-
theorem HasFPowerSeriesAt.add (hf : HasFPowerSeriesAt f pf x) (hg : HasFPowerSeriesAt g pg x) :
HasFPowerSeriesAt (f + g) (pf + pg) x :=
by
rcases(hf.eventually.and hg.eventually).exists with β¨r, hrβ©
exact β¨r, hr.1.add hr.2β©
#align has_fpower_series_at.add HasFPowerSeriesAt.add
+-/
+#print AnalyticAt.add /-
theorem AnalyticAt.add (hf : AnalyticAt π f x) (hg : AnalyticAt π g x) : AnalyticAt π (f + g) x :=
let β¨pf, hpfβ© := hf
let β¨qf, hqfβ© := hg
(hpf.add hqf).AnalyticAt
#align analytic_at.add AnalyticAt.add
+-/
+#print HasFPowerSeriesOnBall.neg /-
theorem HasFPowerSeriesOnBall.neg (hf : HasFPowerSeriesOnBall f pf x r) :
HasFPowerSeriesOnBall (-f) (-pf) x r :=
{ r_le := by rw [pf.radius_neg]; exact hf.r_le
r_pos := hf.r_pos
HasSum := fun y hy => (hf.HasSum hy).neg }
#align has_fpower_series_on_ball.neg HasFPowerSeriesOnBall.neg
+-/
+#print HasFPowerSeriesAt.neg /-
theorem HasFPowerSeriesAt.neg (hf : HasFPowerSeriesAt f pf x) : HasFPowerSeriesAt (-f) (-pf) x :=
let β¨rf, hrfβ© := hf
hrf.neg.HasFPowerSeriesAt
#align has_fpower_series_at.neg HasFPowerSeriesAt.neg
+-/
+#print AnalyticAt.neg /-
theorem AnalyticAt.neg (hf : AnalyticAt π f x) : AnalyticAt π (-f) x :=
let β¨pf, hpfβ© := hf
hpf.neg.AnalyticAt
#align analytic_at.neg AnalyticAt.neg
+-/
+#print HasFPowerSeriesOnBall.sub /-
theorem HasFPowerSeriesOnBall.sub (hf : HasFPowerSeriesOnBall f pf x r)
(hg : HasFPowerSeriesOnBall g pg x r) : HasFPowerSeriesOnBall (f - g) (pf - pg) x r := by
simpa only [sub_eq_add_neg] using hf.add hg.neg
#align has_fpower_series_on_ball.sub HasFPowerSeriesOnBall.sub
+-/
+#print HasFPowerSeriesAt.sub /-
theorem HasFPowerSeriesAt.sub (hf : HasFPowerSeriesAt f pf x) (hg : HasFPowerSeriesAt g pg x) :
HasFPowerSeriesAt (f - g) (pf - pg) x := by simpa only [sub_eq_add_neg] using hf.add hg.neg
#align has_fpower_series_at.sub HasFPowerSeriesAt.sub
+-/
+#print AnalyticAt.sub /-
theorem AnalyticAt.sub (hf : AnalyticAt π f x) (hg : AnalyticAt π g x) : AnalyticAt π (f - g) x :=
by simpa only [sub_eq_add_neg] using hf.add hg.neg
#align analytic_at.sub AnalyticAt.sub
+-/
+#print AnalyticOn.mono /-
theorem AnalyticOn.mono {s t : Set E} (hf : AnalyticOn π f t) (hst : s β t) : AnalyticOn π f s :=
fun z hz => hf z (hst hz)
#align analytic_on.mono AnalyticOn.mono
+-/
+#print AnalyticOn.add /-
theorem AnalyticOn.add {s : Set E} (hf : AnalyticOn π f s) (hg : AnalyticOn π g s) :
AnalyticOn π (f + g) s := fun z hz => (hf z hz).add (hg z hz)
#align analytic_on.add AnalyticOn.add
+-/
+#print AnalyticOn.sub /-
theorem AnalyticOn.sub {s : Set E} (hf : AnalyticOn π f s) (hg : AnalyticOn π g s) :
AnalyticOn π (f - g) s := fun z hz => (hf z hz).sub (hg z hz)
#align analytic_on.sub AnalyticOn.sub
+-/
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (i Β«expr β Β» 0) -/
+#print HasFPowerSeriesOnBall.coeff_zero /-
theorem HasFPowerSeriesOnBall.coeff_zero (hf : HasFPowerSeriesOnBall f pf x r) (v : Fin 0 β E) :
pf 0 v = f x := by
have v_eq : v = fun i => 0 := Subsingleton.elim _ _
@@ -622,13 +753,17 @@ theorem HasFPowerSeriesOnBall.coeff_zero (hf : HasFPowerSeriesOnBall f pf x r) (
have A := (hf.has_sum zero_mem).unique (hasSum_single _ this)
simpa [v_eq] using A.symm
#align has_fpower_series_on_ball.coeff_zero HasFPowerSeriesOnBall.coeff_zero
+-/
+#print HasFPowerSeriesAt.coeff_zero /-
theorem HasFPowerSeriesAt.coeff_zero (hf : HasFPowerSeriesAt f pf x) (v : Fin 0 β E) :
pf 0 v = f x :=
let β¨rf, hrfβ© := hf
hrf.coeff_zero v
#align has_fpower_series_at.coeff_zero HasFPowerSeriesAt.coeff_zero
+-/
+#print ContinuousLinearMap.comp_hasFPowerSeriesOnBall /-
/-- If a function `f` has a power series `p` on a ball and `g` is linear, then `g β f` has the
power series `g β p` on the same ball. -/
theorem ContinuousLinearMap.comp_hasFPowerSeriesOnBall (g : F βL[π] G)
@@ -641,7 +776,9 @@ theorem ContinuousLinearMap.comp_hasFPowerSeriesOnBall (g : F βL[π] G)
ContinuousLinearMap.compContinuousMultilinearMap_coe, Function.comp_apply] using
g.has_sum (h.has_sum hy) }
#align continuous_linear_map.comp_has_fpower_series_on_ball ContinuousLinearMap.comp_hasFPowerSeriesOnBall
+-/
+#print ContinuousLinearMap.comp_analyticOn /-
/-- If a function `f` is analytic on a set `s` and `g` is linear, then `g β f` is analytic
on `s`. -/
theorem ContinuousLinearMap.comp_analyticOn {s : Set E} (g : F βL[π] G) (h : AnalyticOn π f s) :
@@ -650,7 +787,9 @@ theorem ContinuousLinearMap.comp_analyticOn {s : Set E} (g : F βL[π] G) (h
rcases h x hx with β¨p, r, hpβ©
exact β¨g.comp_formal_multilinear_series p, r, g.comp_has_fpower_series_on_ball hpβ©
#align continuous_linear_map.comp_analytic_on ContinuousLinearMap.comp_analyticOn
+-/
+#print HasFPowerSeriesOnBall.uniform_geometric_approx' /-
/-- If a function admits a power series expansion, then it is exponentially close to the partial
sums of this power series on strict subdisks of the disk of convergence.
@@ -690,7 +829,9 @@ theorem HasFPowerSeriesOnBall.uniform_geometric_approx' {r' : ββ₯0}
(mul_le_mul_of_nonneg_right (hp n) (pow_nonneg (div_nonneg (norm_nonneg _) r'.coe_nonneg) _))
_ β€ C * (a * (βyβ / r')) ^ n := by rw [mul_pow, mul_assoc]
#align has_fpower_series_on_ball.uniform_geometric_approx' HasFPowerSeriesOnBall.uniform_geometric_approx'
+-/
+#print HasFPowerSeriesOnBall.uniform_geometric_approx /-
/-- If a function admits a power series expansion, then it is exponentially close to the partial
sums of this power series on strict subdisks of the disk of convergence. -/
theorem HasFPowerSeriesOnBall.uniform_geometric_approx {r' : ββ₯0}
@@ -710,7 +851,9 @@ theorem HasFPowerSeriesOnBall.uniform_geometric_approx {r' : ββ₯0}
exacts [mul_nonneg ha.1.le (div_nonneg (norm_nonneg y) r'.coe_nonneg),
mul_le_of_le_one_right ha.1.le (div_le_one_of_le yr'.le r'.coe_nonneg)]
#align has_fpower_series_on_ball.uniform_geometric_approx HasFPowerSeriesOnBall.uniform_geometric_approx
+-/
+#print HasFPowerSeriesAt.isBigO_sub_partialSum_pow /-
/-- Taylor formula for an analytic function, `is_O` version. -/
theorem HasFPowerSeriesAt.isBigO_sub_partialSum_pow (hf : HasFPowerSeriesAt f p x) (n : β) :
(fun y : E => f (x + y) - p.partialSum n y) =O[π 0] fun y => βyβ ^ n :=
@@ -728,8 +871,10 @@ theorem HasFPowerSeriesAt.isBigO_sub_partialSum_pow (hf : HasFPowerSeriesAt f p
filter_upwards [Metric.ball_mem_nhds (0 : E) r'0] with y hy
simpa [mul_pow, mul_div_assoc, mul_assoc, div_mul_eq_mul_div] using hp y hy n
#align has_fpower_series_at.is_O_sub_partial_sum_pow HasFPowerSeriesAt.isBigO_sub_partialSum_pow
+-/
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print HasFPowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal /-
/-- If `f` has formal power series `β n, pβ` on a ball of radius `r`, then for `y, z` in any smaller
ball, the norm of the difference `f y - f z - p 1 (Ξ» _, y - z)` is bounded above by
`C * (max βy - xβ βz - xβ) * βy - zβ`. This lemma formulates this property using `is_O` and
@@ -793,8 +938,10 @@ theorem HasFPowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
simp_rw [L, mul_right_comm _ (_ * _)]
exact (is_O_refl _ _).const_mul_left _
#align has_fpower_series_on_ball.is_O_image_sub_image_sub_deriv_principal HasFPowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
+-/
/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (y z Β«expr β Β» emetric.ball[emetric.ball] x r') -/
+#print HasFPowerSeriesOnBall.image_sub_sub_deriv_le /-
/-- If `f` has formal power series `β n, pβ` on a ball of radius `r`, then for `y, z` in any smaller
ball, the norm of the difference `f y - f z - p 1 (Ξ» _, y - z)` is bounded above by
`C * (max βy - xβ βz - xβ) * βy - zβ`. -/
@@ -808,7 +955,9 @@ theorem HasFPowerSeriesOnBall.image_sub_sub_deriv_le (hf : HasFPowerSeriesOnBall
Prod.edist_eq, max_lt_iff, and_imp, @forall_swap (_ < _) E] using
hf.is_O_image_sub_image_sub_deriv_principal hr
#align has_fpower_series_on_ball.image_sub_sub_deriv_le HasFPowerSeriesOnBall.image_sub_sub_deriv_le
+-/
+#print HasFPowerSeriesAt.isBigO_image_sub_norm_mul_norm_sub /-
/-- If `f` has formal power series `β n, pβ` at `x`, then
`f y - f z - p 1 (Ξ» _, y - z) = O(β(y, z) - (x, x)β * βy - zβ)` as `(y, z) β (x, x)`.
In particular, `f` is strictly differentiable at `x`. -/
@@ -821,7 +970,9 @@ theorem HasFPowerSeriesAt.isBigO_image_sub_norm_mul_norm_sub (hf : HasFPowerSeri
refine' (hf.is_O_image_sub_image_sub_deriv_principal h).mono _
exact le_principal_iff.2 (EMetric.ball_mem_nhds _ r'0)
#align has_fpower_series_at.is_O_image_sub_norm_mul_norm_sub HasFPowerSeriesAt.isBigO_image_sub_norm_mul_norm_sub
+-/
+#print HasFPowerSeriesOnBall.tendstoUniformlyOn /-
/-- If a function admits a power series expansion at `x`, then it is the uniform limit of the
partial sums of this power series on strict subdisks of the disk of convergence, i.e., `f (x + y)`
is the uniform limit of `p.partial_sum n y` there. -/
@@ -842,7 +993,9 @@ theorem HasFPowerSeriesOnBall.tendstoUniformlyOn {r' : ββ₯0} (hf : HasFPowerS
rw [dist_eq_norm]
exact (hp y hy n).trans_lt hn
#align has_fpower_series_on_ball.tendsto_uniformly_on HasFPowerSeriesOnBall.tendstoUniformlyOn
+-/
+#print HasFPowerSeriesOnBall.tendstoLocallyUniformlyOn /-
/-- If a function admits a power series expansion at `x`, then it is the locally uniform limit of
the partial sums of this power series on the disk of convergence, i.e., `f (x + y)`
is the locally uniform limit of `p.partial_sum n y` there. -/
@@ -856,7 +1009,9 @@ theorem HasFPowerSeriesOnBall.tendstoLocallyUniformlyOn (hf : HasFPowerSeriesOnB
refine' β¨EMetric.ball (0 : E) r', mem_nhdsWithin_of_mem_nhds this, _β©
simpa [Metric.emetric_ball_nnreal] using hf.tendsto_uniformly_on hr' u hu
#align has_fpower_series_on_ball.tendsto_locally_uniformly_on HasFPowerSeriesOnBall.tendstoLocallyUniformlyOn
+-/
+#print HasFPowerSeriesOnBall.tendstoUniformlyOn' /-
/-- If a function admits a power series expansion at `x`, then it is the uniform limit of the
partial sums of this power series on strict subdisks of the disk of convergence, i.e., `f y`
is the uniform limit of `p.partial_sum n (y - x)` there. -/
@@ -868,7 +1023,9 @@ theorem HasFPowerSeriesOnBall.tendstoUniformlyOn' {r' : ββ₯0} (hf : HasFPower
Β· simp [(Β· β Β·)]
Β· ext z; simp [dist_eq_norm]
#align has_fpower_series_on_ball.tendsto_uniformly_on' HasFPowerSeriesOnBall.tendstoUniformlyOn'
+-/
+#print HasFPowerSeriesOnBall.tendstoLocallyUniformlyOn' /-
/-- If a function admits a power series expansion at `x`, then it is the locally uniform limit of
the partial sums of this power series on the disk of convergence, i.e., `f y`
is the locally uniform limit of `p.partial_sum n (y - x)` there. -/
@@ -882,7 +1039,9 @@ theorem HasFPowerSeriesOnBall.tendstoLocallyUniformlyOn' (hf : HasFPowerSeriesOn
Β· ext z; simp
Β· intro z; simp [edist_eq_coe_nnnorm, edist_eq_coe_nnnorm_sub]
#align has_fpower_series_on_ball.tendsto_locally_uniformly_on' HasFPowerSeriesOnBall.tendstoLocallyUniformlyOn'
+-/
+#print HasFPowerSeriesOnBall.continuousOn /-
/-- If a function admits a power series expansion on a disk, then it is continuous there. -/
protected theorem HasFPowerSeriesOnBall.continuousOn (hf : HasFPowerSeriesOnBall f p x r) :
ContinuousOn f (EMetric.ball x r) :=
@@ -890,22 +1049,30 @@ protected theorem HasFPowerSeriesOnBall.continuousOn (hf : HasFPowerSeriesOnBall
eventually_of_forall fun n =>
((p.partialSum_continuous n).comp (continuous_id.sub continuous_const)).ContinuousOn
#align has_fpower_series_on_ball.continuous_on HasFPowerSeriesOnBall.continuousOn
+-/
+#print HasFPowerSeriesAt.continuousAt /-
protected theorem HasFPowerSeriesAt.continuousAt (hf : HasFPowerSeriesAt f p x) :
ContinuousAt f x :=
let β¨r, hrβ© := hf
hr.ContinuousOn.ContinuousAt (EMetric.ball_mem_nhds x hr.r_pos)
#align has_fpower_series_at.continuous_at HasFPowerSeriesAt.continuousAt
+-/
+#print AnalyticAt.continuousAt /-
protected theorem AnalyticAt.continuousAt (hf : AnalyticAt π f x) : ContinuousAt f x :=
let β¨p, hpβ© := hf
hp.ContinuousAt
#align analytic_at.continuous_at AnalyticAt.continuousAt
+-/
+#print AnalyticOn.continuousOn /-
protected theorem AnalyticOn.continuousOn {s : Set E} (hf : AnalyticOn π f s) : ContinuousOn f s :=
fun x hx => (hf x hx).ContinuousAt.ContinuousWithinAt
#align analytic_on.continuous_on AnalyticOn.continuousOn
+-/
+#print FormalMultilinearSeries.hasFPowerSeriesOnBall /-
/-- In a complete space, the sum of a converging power series `p` admits `p` as a power series.
This is not totally obvious as we need to check the convergence of the series. -/
protected theorem FormalMultilinearSeries.hasFPowerSeriesOnBall [CompleteSpace F]
@@ -915,12 +1082,16 @@ protected theorem FormalMultilinearSeries.hasFPowerSeriesOnBall [CompleteSpace F
r_pos := h
HasSum := fun y hy => by rw [zero_add]; exact p.has_sum hy }
#align formal_multilinear_series.has_fpower_series_on_ball FormalMultilinearSeries.hasFPowerSeriesOnBall
+-/
+#print HasFPowerSeriesOnBall.sum /-
theorem HasFPowerSeriesOnBall.sum (h : HasFPowerSeriesOnBall f p x r) {y : E}
(hy : y β EMetric.ball (0 : E) r) : f (x + y) = p.Sum y :=
(h.HasSum hy).tsum_eq.symm
#align has_fpower_series_on_ball.sum HasFPowerSeriesOnBall.sum
+-/
+#print FormalMultilinearSeries.continuousOn /-
/-- The sum of a converging power series is continuous in its disk of convergence. -/
protected theorem FormalMultilinearSeries.continuousOn [CompleteSpace F] :
ContinuousOn p.Sum (EMetric.ball 0 p.radius) :=
@@ -929,6 +1100,7 @@ protected theorem FormalMultilinearSeries.continuousOn [CompleteSpace F] :
Β· simp [β h, continuousOn_empty]
Β· exact (p.has_fpower_series_on_ball h).ContinuousOn
#align formal_multilinear_series.continuous_on FormalMultilinearSeries.continuousOn
+-/
end
@@ -948,6 +1120,7 @@ section Uniqueness
open ContinuousMultilinearMap
+#print Asymptotics.IsBigO.continuousMultilinearMap_apply_eq_zero /-
theorem Asymptotics.IsBigO.continuousMultilinearMap_apply_eq_zero {n : β} {p : E[Γn]βL[π] F}
(h : (fun y => p fun i => y) =O[π 0] fun y => βyβ ^ (n + 1)) (y : E) : (p fun i => y) = 0 :=
by
@@ -995,7 +1168,9 @@ theorem Asymptotics.IsBigO.continuousMultilinearMap_apply_eq_zero {n : β} {p :
simp [norm_mul, mul_pow]
_ β€ 0 + Ξ΅ := by rw [inv_mul_cancel (norm_pos_iff.mp k_pos)]; simpa using hβ.le
#align asymptotics.is_O.continuous_multilinear_map_apply_eq_zero Asymptotics.IsBigO.continuousMultilinearMap_apply_eq_zero
+-/
+#print HasFPowerSeriesAt.apply_eq_zero /-
/-- If a formal multilinear series `p` represents the zero function at `x : E`, then the
terms `p n (Ξ» i, y)` appearing the in sum are zero for any `n : β`, `y : E`. -/
theorem HasFPowerSeriesAt.apply_eq_zero {p : FormalMultilinearSeries π E F} {x : E}
@@ -1013,31 +1188,41 @@ theorem HasFPowerSeriesAt.apply_eq_zero {p : FormalMultilinearSeries π E F} {
simp only [psum_eq, zero_sub, Pi.zero_apply, Asymptotics.isBigO_neg_left] at h
exact h.continuous_multilinear_map_apply_eq_zero
#align has_fpower_series_at.apply_eq_zero HasFPowerSeriesAt.apply_eq_zero
+-/
+#print HasFPowerSeriesAt.eq_zero /-
/-- A one-dimensional formal multilinear series representing the zero function is zero. -/
theorem HasFPowerSeriesAt.eq_zero {p : FormalMultilinearSeries π π E} {x : π}
(h : HasFPowerSeriesAt 0 p x) : p = 0 := by ext (n x);
rw [β mk_pi_field_apply_one_eq_self (p n)]; simp [h.apply_eq_zero n 1]
#align has_fpower_series_at.eq_zero HasFPowerSeriesAt.eq_zero
+-/
+#print HasFPowerSeriesAt.eq_formalMultilinearSeries /-
/-- One-dimensional formal multilinear series representing the same function are equal. -/
theorem HasFPowerSeriesAt.eq_formalMultilinearSeries {pβ pβ : FormalMultilinearSeries π π E}
{f : π β E} {x : π} (hβ : HasFPowerSeriesAt f pβ x) (hβ : HasFPowerSeriesAt f pβ x) : pβ = pβ :=
sub_eq_zero.mp (HasFPowerSeriesAt.eq_zero (by simpa only [sub_self] using hβ.sub hβ))
#align has_fpower_series_at.eq_formal_multilinear_series HasFPowerSeriesAt.eq_formalMultilinearSeries
+-/
+#print HasFPowerSeriesAt.eq_formalMultilinearSeries_of_eventually /-
theorem HasFPowerSeriesAt.eq_formalMultilinearSeries_of_eventually
{p q : FormalMultilinearSeries π π E} {f g : π β E} {x : π} (hp : HasFPowerSeriesAt f p x)
(hq : HasFPowerSeriesAt g q x) (heq : βαΆ z in π x, f z = g z) : p = q :=
(hp.congr HEq).eq_formalMultilinearSeries hq
#align has_fpower_series_at.eq_formal_multilinear_series_of_eventually HasFPowerSeriesAt.eq_formalMultilinearSeries_of_eventually
+-/
+#print HasFPowerSeriesAt.eq_zero_of_eventually /-
/-- A one-dimensional formal multilinear series representing a locally zero function is zero. -/
theorem HasFPowerSeriesAt.eq_zero_of_eventually {p : FormalMultilinearSeries π π E} {f : π β E}
{x : π} (hp : HasFPowerSeriesAt f p x) (hf : f =αΆ [π x] 0) : p = 0 :=
(hp.congr hf).eq_zero
#align has_fpower_series_at.eq_zero_of_eventually HasFPowerSeriesAt.eq_zero_of_eventually
+-/
+#print HasFPowerSeriesOnBall.exchange_radius /-
/-- If a function `f : π β E` has two power series representations at `x`, then the given radii in
which convergence is guaranteed may be interchanged. This can be useful when the formal multilinear
series in one representation has a particularly nice form, but the other has a larger radius. -/
@@ -1046,7 +1231,9 @@ theorem HasFPowerSeriesOnBall.exchange_radius {pβ pβ : FormalMultilinearSeri
(hβ : HasFPowerSeriesOnBall f pβ x rβ) : HasFPowerSeriesOnBall f pβ x rβ :=
hβ.HasFPowerSeriesAt.eq_formalMultilinearSeries hβ.HasFPowerSeriesAt βΈ hβ
#align has_fpower_series_on_ball.exchange_radius HasFPowerSeriesOnBall.exchange_radius
+-/
+#print HasFPowerSeriesOnBall.r_eq_top_of_exists /-
/-- If a function `f : π β E` has power series representation `p` on a ball of some radius and for
each positive radius it has some power series representation, then `p` converges to `f` on the whole
`π`. -/
@@ -1066,6 +1253,7 @@ theorem HasFPowerSeriesOnBall.r_eq_top_of_exists {f : π β E} {r : ββ₯0
let β¨p', hp'β© := h' r' hr'.ne_bot.bot_lt
(h.exchange_radius hp').HasSum <| mem_emetric_ball_zero_iff.mpr (ENNReal.coe_lt_coe.2 hr') }
#align has_fpower_series_on_ball.r_eq_top_of_exists HasFPowerSeriesOnBall.r_eq_top_of_exists
+-/
end Uniqueness
@@ -1114,25 +1302,32 @@ def changeOriginSeriesTerm (k l : β) (s : Finset (Fin (k + l))) (hs : s.card =
#align formal_multilinear_series.change_origin_series_term FormalMultilinearSeries.changeOriginSeriesTerm
-/
+#print FormalMultilinearSeries.changeOriginSeriesTerm_apply /-
theorem changeOriginSeriesTerm_apply (k l : β) (s : Finset (Fin (k + l))) (hs : s.card = l)
(x y : E) :
(p.changeOriginSeriesTerm k l s hs (fun _ => x) fun _ => y) =
p (k + l) (s.piecewise (fun _ => x) fun _ => y) :=
ContinuousMultilinearMap.curryFinFinset_apply_const _ _ _ _ _
#align formal_multilinear_series.change_origin_series_term_apply FormalMultilinearSeries.changeOriginSeriesTerm_apply
+-/
+#print FormalMultilinearSeries.norm_changeOriginSeriesTerm /-
@[simp]
theorem norm_changeOriginSeriesTerm (k l : β) (s : Finset (Fin (k + l))) (hs : s.card = l) :
βp.changeOriginSeriesTerm k l s hsβ = βp (k + l)β := by
simp only [change_origin_series_term, LinearIsometryEquiv.norm_map]
#align formal_multilinear_series.norm_change_origin_series_term FormalMultilinearSeries.norm_changeOriginSeriesTerm
+-/
+#print FormalMultilinearSeries.nnnorm_changeOriginSeriesTerm /-
@[simp]
theorem nnnorm_changeOriginSeriesTerm (k l : β) (s : Finset (Fin (k + l))) (hs : s.card = l) :
βp.changeOriginSeriesTerm k l s hsββ = βp (k + l)ββ := by
simp only [change_origin_series_term, LinearIsometryEquiv.nnnorm_map]
#align formal_multilinear_series.nnnorm_change_origin_series_term FormalMultilinearSeries.nnnorm_changeOriginSeriesTerm
+-/
+#print FormalMultilinearSeries.nnnorm_changeOriginSeriesTerm_apply_le /-
theorem nnnorm_changeOriginSeriesTerm_apply_le (k l : β) (s : Finset (Fin (k + l)))
(hs : s.card = l) (x y : E) :
βp.changeOriginSeriesTerm k l s hs (fun _ => x) fun _ => yββ β€
@@ -1142,6 +1337,7 @@ theorem nnnorm_changeOriginSeriesTerm_apply_le (k l : β) (s : Finset (Fin (k +
apply ContinuousMultilinearMap.le_of_op_nnnorm_le
apply ContinuousMultilinearMap.le_op_nnnorm
#align formal_multilinear_series.nnnorm_change_origin_series_term_apply_le FormalMultilinearSeries.nnnorm_changeOriginSeriesTerm_apply_le
+-/
#print FormalMultilinearSeries.changeOriginSeries /-
/-- The power series for `f.change_origin k`.
@@ -1155,11 +1351,14 @@ def changeOriginSeries (k : β) : FormalMultilinearSeries π E (E[Γk]βL[
#align formal_multilinear_series.change_origin_series FormalMultilinearSeries.changeOriginSeries
-/
+#print FormalMultilinearSeries.nnnorm_changeOriginSeries_le_tsum /-
theorem nnnorm_changeOriginSeries_le_tsum (k l : β) :
βp.changeOriginSeries k lββ β€ β' x : { s : Finset (Fin (k + l)) // s.card = l }, βp (k + l)ββ :=
(nnnorm_sum_le _ _).trans_eq <| by simp only [tsum_fintype, nnnorm_change_origin_series_term]
#align formal_multilinear_series.nnnorm_change_origin_series_le_tsum FormalMultilinearSeries.nnnorm_changeOriginSeries_le_tsum
+-/
+#print FormalMultilinearSeries.nnnorm_changeOriginSeries_apply_le_tsum /-
theorem nnnorm_changeOriginSeries_apply_le_tsum (k l : β) (x : E) :
βp.changeOriginSeries k l fun _ => xββ β€
β' s : { s : Finset (Fin (k + l)) // s.card = l }, βp (k + l)ββ * βxββ ^ l :=
@@ -1168,6 +1367,7 @@ theorem nnnorm_changeOriginSeries_apply_le_tsum (k l : β) (x : E) :
exact
(p.change_origin_series k l).le_of_op_nnnorm_le _ (p.nnnorm_change_origin_series_le_tsum _ _)
#align formal_multilinear_series.nnnorm_change_origin_series_apply_le_tsum FormalMultilinearSeries.nnnorm_changeOriginSeries_apply_le_tsum
+-/
#print FormalMultilinearSeries.changeOrigin /-
/-- Changing the origin of a formal multilinear series `p`, so that
@@ -1219,6 +1419,7 @@ def changeOriginIndexEquiv :
#align formal_multilinear_series.change_origin_index_equiv FormalMultilinearSeries.changeOriginIndexEquiv
-/
+#print FormalMultilinearSeries.changeOriginSeries_summable_auxβ /-
theorem changeOriginSeries_summable_auxβ {r r' : ββ₯0} (hr : (r + r' : ββ₯0β) < p.radius) :
Summable fun s : Ξ£ k l : β, { s : Finset (Fin (k + l)) // s.card = l } =>
βp (s.1 + s.2.1)ββ * r ^ s.2.1 * r' ^ s.1 :=
@@ -1241,7 +1442,9 @@ theorem changeOriginSeries_summable_auxβ {r r' : ββ₯0} (hr : (r + r' : β
simp only [(this _).tsum_eq]
exact p.summable_nnnorm_mul_pow hr
#align formal_multilinear_series.change_origin_series_summable_auxβ FormalMultilinearSeries.changeOriginSeries_summable_auxβ
+-/
+#print FormalMultilinearSeries.changeOriginSeries_summable_auxβ /-
theorem changeOriginSeries_summable_auxβ (hr : (r : ββ₯0β) < p.radius) (k : β) :
Summable fun s : Ξ£ l : β, { s : Finset (Fin (k + l)) // s.card = l } =>
βp (k + s.1)ββ * r ^ s.1 :=
@@ -1250,7 +1453,9 @@ theorem changeOriginSeries_summable_auxβ (hr : (r : ββ₯0β) < p.radius) (k
simpa only [mul_inv_cancel_rightβ (pow_pos h0 _).ne'] using
((NNReal.summable_sigma.1 (p.change_origin_series_summable_auxβ hr')).1 k).mul_right (r' ^ k)β»ΒΉ
#align formal_multilinear_series.change_origin_series_summable_auxβ FormalMultilinearSeries.changeOriginSeries_summable_auxβ
+-/
+#print FormalMultilinearSeries.changeOriginSeries_summable_auxβ /-
theorem changeOriginSeries_summable_auxβ {r : ββ₯0} (hr : βr < p.radius) (k : β) :
Summable fun l : β => βp.changeOriginSeries k lββ * r ^ l :=
by
@@ -1260,12 +1465,16 @@ theorem changeOriginSeries_summable_auxβ {r : ββ₯0} (hr : βr < p.radius)
simp only [NNReal.tsum_mul_right]
exact mul_le_mul' (p.nnnorm_change_origin_series_le_tsum _ _) le_rfl
#align formal_multilinear_series.change_origin_series_summable_auxβ FormalMultilinearSeries.changeOriginSeries_summable_auxβ
+-/
+#print FormalMultilinearSeries.le_changeOriginSeries_radius /-
theorem le_changeOriginSeries_radius (k : β) : p.radius β€ (p.changeOriginSeries k).radius :=
ENNReal.le_of_forall_nnreal_lt fun r hr =>
le_radius_of_summable_nnnorm _ (p.changeOriginSeries_summable_auxβ hr k)
#align formal_multilinear_series.le_change_origin_series_radius FormalMultilinearSeries.le_changeOriginSeries_radius
+-/
+#print FormalMultilinearSeries.nnnorm_changeOrigin_le /-
theorem nnnorm_changeOrigin_le (k : β) (h : (βxββ : ββ₯0β) < p.radius) :
βp.changeOrigin x kββ β€
β' s : Ξ£ l : β, { s : Finset (Fin (k + l)) // s.card = l }, βp (k + s.1)ββ * βxββ ^ s.1 :=
@@ -1275,7 +1484,9 @@ theorem nnnorm_changeOrigin_le (k : β) (h : (βxββ : ββ₯0β) < p.radi
refine' HasSum.sigma this.has_sum fun l => _
exact ((NNReal.summable_sigma.1 this).1 l).HasSum
#align formal_multilinear_series.nnnorm_change_origin_le FormalMultilinearSeries.nnnorm_changeOrigin_le
+-/
+#print FormalMultilinearSeries.changeOrigin_radius /-
/-- The radius of convergence of `p.change_origin x` is at least `p.radius - βxβ`. In other words,
`p.change_origin x` is well defined on the largest ball contained in the original ball of
convergence.-/
@@ -1295,6 +1506,7 @@ theorem changeOrigin_radius : p.radius - βxββ β€ (p.changeOrigin x).radiu
simpa only [β NNReal.tsum_mul_right] using
(NNReal.summable_sigma.1 (p.change_origin_series_summable_auxβ hr)).2
#align formal_multilinear_series.change_origin_radius FormalMultilinearSeries.changeOrigin_radius
+-/
end
@@ -1302,12 +1514,15 @@ end
-- in norm also converge in `F`.
variable [CompleteSpace F] (p : FormalMultilinearSeries π E F) {x y : E} {r R : ββ₯0}
+#print FormalMultilinearSeries.hasFPowerSeriesOnBall_changeOrigin /-
theorem hasFPowerSeriesOnBall_changeOrigin (k : β) (hr : 0 < p.radius) :
HasFPowerSeriesOnBall (fun x => p.changeOrigin x k) (p.changeOriginSeries k) 0 p.radius :=
have := p.le_changeOriginSeries_radius k
((p.changeOriginSeries k).HasFPowerSeriesOnBall (hr.trans_le this)).mono hr this
#align formal_multilinear_series.has_fpower_series_on_ball_change_origin FormalMultilinearSeries.hasFPowerSeriesOnBall_changeOrigin
+-/
+#print FormalMultilinearSeries.changeOrigin_eval /-
/-- Summing the series `p.change_origin x` at a point `y` gives back `p (x + y)`-/
theorem changeOrigin_eval (h : (βxββ + βyββ : ββ₯0β) < p.radius) :
(p.changeOrigin x).Sum y = p.Sum (x + y) :=
@@ -1363,6 +1578,7 @@ theorem changeOrigin_eval (h : (βxββ + βyββ : ββ₯0β) < p.radius
by rintro m rfl; simp
apply this
#align formal_multilinear_series.change_origin_eval FormalMultilinearSeries.changeOrigin_eval
+-/
end FormalMultilinearSeries
@@ -1370,6 +1586,7 @@ section
variable [CompleteSpace F] {f : E β F} {p : FormalMultilinearSeries π E F} {x y : E} {r : ββ₯0β}
+#print HasFPowerSeriesOnBall.changeOrigin /-
/-- If a function admits a power series expansion `p` on a ball `B (x, r)`, then it also admits a
power series on any subball of this ball (even with a different center), given by `p.change_origin`.
-/
@@ -1388,7 +1605,9 @@ theorem HasFPowerSeriesOnBall.changeOrigin (hf : HasFPowerSeriesOnBall f p x r)
Β· refine' EMetric.ball_subset_ball (le_trans _ p.change_origin_radius) hz
exact tsub_le_tsub hf.r_le le_rfl }
#align has_fpower_series_on_ball.change_origin HasFPowerSeriesOnBall.changeOrigin
+-/
+#print HasFPowerSeriesOnBall.analyticAt_of_mem /-
/-- If a function admits a power series expansion `p` on an open ball `B (x, r)`, then
it is analytic at every point of this ball. -/
theorem HasFPowerSeriesOnBall.analyticAt_of_mem (hf : HasFPowerSeriesOnBall f p x r)
@@ -1399,13 +1618,17 @@ theorem HasFPowerSeriesOnBall.analyticAt_of_mem (hf : HasFPowerSeriesOnBall f p
rw [add_sub_cancel'_right] at this
exact this.analytic_at
#align has_fpower_series_on_ball.analytic_at_of_mem HasFPowerSeriesOnBall.analyticAt_of_mem
+-/
+#print HasFPowerSeriesOnBall.analyticOn /-
theorem HasFPowerSeriesOnBall.analyticOn (hf : HasFPowerSeriesOnBall f p x r) :
AnalyticOn π f (EMetric.ball x r) := fun y hy => hf.analyticAt_of_mem hy
#align has_fpower_series_on_ball.analytic_on HasFPowerSeriesOnBall.analyticOn
+-/
variable (π f)
+#print isOpen_analyticAt /-
/-- For any function `f` from a normed vector space to a Banach space, the set of points `x` such
that `f` is analytic at `x` is open. -/
theorem isOpen_analyticAt : IsOpen {x | AnalyticAt π f x} :=
@@ -1414,6 +1637,7 @@ theorem isOpen_analyticAt : IsOpen {x | AnalyticAt π f x} :=
rintro x β¨p, r, hrβ©
exact mem_of_superset (EMetric.ball_mem_nhds _ hr.r_pos) fun y hy => hr.analytic_at_of_mem hy
#align is_open_analytic_at isOpen_analyticAt
+-/
end
@@ -1423,6 +1647,7 @@ open FormalMultilinearSeries
variable {p : FormalMultilinearSeries π π E} {f : π β E} {zβ : π}
+#print hasFPowerSeriesAt_iff /-
/-- A function `f : π β E` has `p` as power series expansion at a point `zβ` iff it is the sum of
`p` in a neighborhood of `zβ`. This makes some proofs easier by hiding the fact that
`has_fpower_series_at` depends on `p.radius`. -/
@@ -1451,8 +1676,10 @@ theorem hasFPowerSeriesAt_iff :
refine' fun y hyp hyr => h _
simpa [nndist_eq_nnnorm, Real.lt_toNNReal_iff_coe_lt] using hyr
#align has_fpower_series_at_iff hasFPowerSeriesAt_iff
+-/
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `congrm #[[expr Β«exprβαΆ in , Β»((z), (nhds() 0 : filter π), has_sum (Ξ» n, _) (f Β«expr + Β»(zβ, z)))]] -/
+#print hasFPowerSeriesAt_iff' /-
theorem hasFPowerSeriesAt_iff' :
HasFPowerSeriesAt f p zβ β βαΆ z in π zβ, HasSum (fun n => (z - zβ) ^ n β’ p.coeff n) (f z) :=
by
@@ -1461,6 +1688,7 @@ theorem hasFPowerSeriesAt_iff' :
"./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `congrm #[[expr Β«exprβαΆ in , Β»((z), (nhds() 0 : filter π), has_sum (Ξ» n, _) (f Β«expr + Β»(zβ, z)))]]"
rw [add_sub_cancel']
#align has_fpower_series_at_iff' hasFPowerSeriesAt_iff'
+-/
end
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -207,7 +207,6 @@ theorem isLittleO_of_lt_radius (h : βr < p.radius) :
|βp nβ * r ^ n| = βp nβ * t ^ n * (r / t) ^ n := by
field_simp [mul_right_comm, abs_mul, this.ne']
_ β€ C * (r / t) ^ n := mul_le_mul_of_nonneg_right (hC n) (pow_nonneg (div_nonneg r.2 t.2) _)
-
#align formal_multilinear_series.is_o_of_lt_radius FormalMultilinearSeries.isLittleO_of_lt_radius
/-- For `r` strictly smaller than the radius of `p`, then `βpββ rβΏ = o(1)`. -/
@@ -690,7 +689,6 @@ theorem HasFPowerSeriesOnBall.uniform_geometric_approx' {r' : ββ₯0}
_ β€ C * a ^ n * (βyβ / r') ^ n :=
(mul_le_mul_of_nonneg_right (hp n) (pow_nonneg (div_nonneg (norm_nonneg _) r'.coe_nonneg) _))
_ β€ C * (a * (βyβ / r')) ^ n := by rw [mul_pow, mul_assoc]
-
#align has_fpower_series_on_ball.uniform_geometric_approx' HasFPowerSeriesOnBall.uniform_geometric_approx'
/-- If a function admits a power series expansion, then it is exponentially close to the partial
@@ -779,7 +777,6 @@ theorem HasFPowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
ha.1.le]
_ = B n := by field_simp [B, pow_succ, hr'0.ne'];
simp only [mul_assoc, mul_comm, mul_left_comm]
-
have hBL : HasSum B (L y) := by
apply HasSum.mul_left
simp only [add_mul]
@@ -984,7 +981,6 @@ theorem Asymptotics.IsBigO.continuousMultilinearMap_apply_eq_zero {n : β} {p :
simpa only [norm_pow, norm_norm] using ht (k β’ y) (δΡ (mem_ball_zero_iff.mpr hβ))
_ = βkβ ^ n.succ * (βkβ * (c * βyβ ^ (n.succ + 1))) := by simp only [norm_smul, mul_pow];
rw [pow_succ]; ring
-
have hβ : βkβ * (c * βyβ ^ (n.succ + 1)) < Ξ΅ :=
inv_mul_cancel_rightβ hβ.ne.symm Ξ΅ βΈ
mul_lt_mul_of_pos_right (lt_of_lt_of_le k_norm (min_le_right _ _)) hβ
@@ -998,7 +994,6 @@ theorem Asymptotics.IsBigO.continuousMultilinearMap_apply_eq_zero {n : β} {p :
_ = β(kβ»ΒΉ * k) ^ n.succβ * (βkβ * (c * βyβ ^ (n.succ + 1))) := by rw [β mul_assoc];
simp [norm_mul, mul_pow]
_ β€ 0 + Ξ΅ := by rw [inv_mul_cancel (norm_pos_iff.mp k_pos)]; simpa using hβ.le
-
#align asymptotics.is_O.continuous_multilinear_map_apply_eq_zero Asymptotics.IsBigO.continuousMultilinearMap_apply_eq_zero
/-- If a formal multilinear series `p` represents the zero function at `x : E`, then the
mathlib commit https://github.com/leanprover-community/mathlib/commit/31c24aa72e7b3e5ed97a8412470e904f82b81004
@@ -610,7 +610,7 @@ theorem AnalyticOn.sub {s : Set E} (hf : AnalyticOn π f s) (hg : AnalyticOn
AnalyticOn π (f - g) s := fun z hz => (hf z hz).sub (hg z hz)
#align analytic_on.sub AnalyticOn.sub
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (i Β«expr β Β» 0) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (i Β«expr β Β» 0) -/
theorem HasFPowerSeriesOnBall.coeff_zero (hf : HasFPowerSeriesOnBall f pf x r) (v : Fin 0 β E) :
pf 0 v = f x := by
have v_eq : v = fun i => 0 := Subsingleton.elim _ _
@@ -797,7 +797,7 @@ theorem HasFPowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
exact (is_O_refl _ _).const_mul_left _
#align has_fpower_series_on_ball.is_O_image_sub_image_sub_deriv_principal HasFPowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
-/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (y z Β«expr β Β» emetric.ball[emetric.ball] x r') -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:638:2: warning: expanding binder collection (y z Β«expr β Β» emetric.ball[emetric.ball] x r') -/
/-- If `f` has formal power series `β n, pβ` on a ball of radius `r`, then for `y, z` in any smaller
ball, the norm of the difference `f y - f z - p 1 (Ξ» _, y - z)` is bounded above by
`C * (max βy - xβ βz - xβ) * βy - zβ`. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: SΓ©bastien GouΓ«zel, Yury Kudryashov
! This file was ported from Lean 3 source module analysis.analytic.basic
-! leanprover-community/mathlib commit 32253a1a1071173b33dc7d6a218cf722c6feb514
+! leanprover-community/mathlib commit 2ebc1d6c2fed9f54c95bbc3998eaa5570527129a
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -16,6 +16,9 @@ import Mathbin.Topology.Algebra.InfiniteSum.Module
/-!
# Analytic functions
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
A function is analytic in one dimension around `0` if it can be written as a converging power series
`Ξ£ pβ zβΏ`. This definition can be extended to any dimension (even in infinite dimension) by
requiring that `pβ` is a continuous `n`-multilinear map. In general, `pβ` is not unique (in two
@@ -235,7 +238,7 @@ theorem lt_radius_of_isBigO (hβ : r β 0) {a : β} (ha : a β Ioo (-1 : β
lift a to ββ₯0 using ha.1.le
have : (r : β) < r / a := by
simpa only [div_one] using (div_lt_div_left hβ zero_lt_one ha.1).2 ha.2
- norm_cast at this
+ norm_cast at this
rw [β ENNReal.coe_lt_coe] at this
refine' this.trans_le (p.le_radius_of_bound C fun n => _)
rw [NNReal.coe_div, div_pow, β mul_div_assoc, div_le_iff (pow_pos ha.1 n)]
@@ -494,7 +497,7 @@ protected theorem HasFPowerSeriesAt.eventually (hf : HasFPowerSeriesAt f p x) :
theorem HasFPowerSeriesOnBall.eventually_hasSum (hf : HasFPowerSeriesOnBall f p x r) :
βαΆ y in π 0, HasSum (fun n : β => p n fun i : Fin n => y) (f (x + y)) := by
- filter_upwards [EMetric.ball_mem_nhds (0 : E) hf.r_pos]using fun _ => hf.has_sum
+ filter_upwards [EMetric.ball_mem_nhds (0 : E) hf.r_pos] using fun _ => hf.has_sum
#align has_fpower_series_on_ball.eventually_has_sum HasFPowerSeriesOnBall.eventually_hasSum
theorem HasFPowerSeriesAt.eventually_hasSum (hf : HasFPowerSeriesAt f p x) :
@@ -505,7 +508,7 @@ theorem HasFPowerSeriesAt.eventually_hasSum (hf : HasFPowerSeriesAt f p x) :
theorem HasFPowerSeriesOnBall.eventually_hasSum_sub (hf : HasFPowerSeriesOnBall f p x r) :
βαΆ y in π x, HasSum (fun n : β => p n fun i : Fin n => y - x) (f y) := by
- filter_upwards [EMetric.ball_mem_nhds x hf.r_pos]with y using hf.has_sum_sub
+ filter_upwards [EMetric.ball_mem_nhds x hf.r_pos] with y using hf.has_sum_sub
#align has_fpower_series_on_ball.eventually_has_sum_sub HasFPowerSeriesOnBall.eventually_hasSum_sub
theorem HasFPowerSeriesAt.eventually_hasSum_sub (hf : HasFPowerSeriesAt f p x) :
@@ -516,7 +519,7 @@ theorem HasFPowerSeriesAt.eventually_hasSum_sub (hf : HasFPowerSeriesAt f p x) :
theorem HasFPowerSeriesOnBall.eventually_eq_zero
(hf : HasFPowerSeriesOnBall f (0 : FormalMultilinearSeries π E F) x r) : βαΆ z in π x, f z = 0 :=
- by filter_upwards [hf.eventually_has_sum_sub]with z hz using hz.unique hasSum_zero
+ by filter_upwards [hf.eventually_has_sum_sub] with z hz using hz.unique hasSum_zero
#align has_fpower_series_on_ball.eventually_eq_zero HasFPowerSeriesOnBall.eventually_eq_zero
theorem HasFPowerSeriesAt.eventually_eq_zero
@@ -724,7 +727,7 @@ theorem HasFPowerSeriesAt.isBigO_sub_partialSum_pow (hf : HasFPowerSeriesAt f p
exact hf.uniform_geometric_approx' h
refine' is_O_iff.2 β¨C * (a / r') ^ n, _β©
replace r'0 : 0 < (r' : β); Β· exact_mod_cast r'0
- filter_upwards [Metric.ball_mem_nhds (0 : E) r'0]with y hy
+ filter_upwards [Metric.ball_mem_nhds (0 : E) r'0] with y hy
simpa [mul_pow, mul_div_assoc, mul_assoc, div_mul_eq_mul_div] using hp y hy n
#align has_fpower_series_at.is_O_sub_partial_sum_pow HasFPowerSeriesAt.isBigO_sub_partialSum_pow
@@ -755,7 +758,7 @@ theorem HasFPowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
set A : β β F := fun n => (p n fun _ => y.1 - x) - p n fun _ => y.2 - x
have hA : HasSum (fun n => A (n + 2)) (f y.1 - f y.2 - p 1 fun _ => y.1 - y.2) :=
by
- convert(hasSum_nat_add_iff' 2).2 ((hf.has_sum_sub hy.1).sub (hf.has_sum_sub hy.2)) using 1
+ convert (hasSum_nat_add_iff' 2).2 ((hf.has_sum_sub hy.1).sub (hf.has_sum_sub hy.2)) using 1
rw [Finset.sum_range_succ, Finset.sum_range_one, hf.coeff_zero, hf.coeff_zero, sub_self,
zero_add, β Subsingleton.pi_single_eq (0 : Fin 1) (y.1 - x), Pi.single, β
Subsingleton.pi_single_eq (0 : Fin 1) (y.2 - x), Pi.single, β (p 1).map_sub, β Pi.single,
@@ -781,7 +784,8 @@ theorem HasFPowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
apply HasSum.mul_left
simp only [add_mul]
have : βaβ < 1 := by simp only [Real.norm_eq_abs, abs_of_pos ha.1, ha.2]
- convert(hasSum_coe_mul_geometric_of_norm_lt_1 this).add
+ convert
+ (hasSum_coe_mul_geometric_of_norm_lt_1 this).add
((hasSum_geometric_of_norm_lt_1 this).mul_left 2)
exact hA.norm_le_of_bounded hBL hAB
suffices L =O[π (EMetric.ball (x, x) r')] fun y => βy - (x, x)β * βy.1 - y.2β
@@ -863,7 +867,7 @@ theorem HasFPowerSeriesOnBall.tendstoUniformlyOn' {r' : ββ₯0} (hf : HasFPower
(h : (r' : ββ₯0β) < r) :
TendstoUniformlyOn (fun n y => p.partialSum n (y - x)) f atTop (Metric.ball (x : E) r') :=
by
- convert(hf.tendsto_uniformly_on h).comp fun y => y - x
+ convert (hf.tendsto_uniformly_on h).comp fun y => y - x
Β· simp [(Β· β Β·)]
Β· ext z; simp [dist_eq_norm]
#align has_fpower_series_on_ball.tendsto_uniformly_on' HasFPowerSeriesOnBall.tendstoUniformlyOn'
@@ -1381,7 +1385,7 @@ theorem HasFPowerSeriesOnBall.changeOrigin (hf : HasFPowerSeriesOnBall f p x r)
exact tsub_le_tsub hf.r_le le_rfl
r_pos := by simp [h]
HasSum := fun z hz => by
- convert(p.change_origin y).HasSum _
+ convert (p.change_origin y).HasSum _
Β· rw [mem_emetric_ball_zero_iff, lt_tsub_iff_right, add_comm] at hz
rw [p.change_origin_eval (hz.trans_le hf.r_le), add_assoc, hf.sum]
refine' mem_emetric_ball_zero_iff.2 (lt_of_le_of_lt _ hz)
@@ -1409,7 +1413,7 @@ variable (π f)
/-- For any function `f` from a normed vector space to a Banach space, the set of points `x` such
that `f` is analytic at `x` is open. -/
-theorem isOpen_analyticAt : IsOpen { x | AnalyticAt π f x } :=
+theorem isOpen_analyticAt : IsOpen {x | AnalyticAt π f x} :=
by
rw [isOpen_iff_mem_nhds]
rintro x β¨p, r, hrβ©
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -92,17 +92,21 @@ variable [TopologicalAddGroup E] [TopologicalAddGroup F]
variable [ContinuousConstSMul π E] [ContinuousConstSMul π F]
+#print FormalMultilinearSeries.sum /-
/-- Given a formal multilinear series `p` and a vector `x`, then `p.sum x` is the sum `Ξ£ pβ xβΏ`. A
priori, it only behaves well when `βxβ < p.radius`. -/
protected def sum (p : FormalMultilinearSeries π E F) (x : E) : F :=
β' n : β, p n fun i => x
#align formal_multilinear_series.sum FormalMultilinearSeries.sum
+-/
+#print FormalMultilinearSeries.partialSum /-
/-- Given a formal multilinear series `p` and a vector `x`, then `p.partial_sum n x` is the sum
`Ξ£ pβ xα΅` for `k β {0,..., n-1}`. -/
def partialSum (p : FormalMultilinearSeries π E F) (n : β) (x : E) : F :=
β k in Finset.range n, p k fun i : Fin k => x
#align formal_multilinear_series.partial_sum FormalMultilinearSeries.partialSum
+-/
/-- The partial sums of a formal multilinear series are continuous. -/
theorem partialSum_continuous (p : FormalMultilinearSeries π E F) (n : β) :
@@ -121,12 +125,14 @@ namespace FormalMultilinearSeries
variable (p : FormalMultilinearSeries π E F) {r : ββ₯0}
+#print FormalMultilinearSeries.radius /-
/-- The radius of a formal multilinear series is the largest `r` such that the sum `Ξ£ βpββ βyββΏ`
converges for all `βyβ < r`. This implies that `Ξ£ pβ yβΏ` converges for all `βyβ < r`, but these
definitions are *not* equivalent in general. -/
def radius (p : FormalMultilinearSeries π E F) : ββ₯0β :=
β¨ (r : ββ₯0) (C : β) (hr : β n, βp nβ * r ^ n β€ C), (r : ββ₯0β)
#align formal_multilinear_series.radius FormalMultilinearSeries.radius
+-/
/-- If `βpββ rβΏ` is bounded in `n`, then the radius of `p` is at least `r`. -/
theorem le_radius_of_bound (C : β) {r : ββ₯0} (h : β n : β, βp nβ * r ^ n β€ C) :
@@ -135,10 +141,10 @@ theorem le_radius_of_bound (C : β) {r : ββ₯0} (h : β n : β, βp nβ *
#align formal_multilinear_series.le_radius_of_bound FormalMultilinearSeries.le_radius_of_bound
/-- If `βpββ rβΏ` is bounded in `n`, then the radius of `p` is at least `r`. -/
-theorem le_radius_of_bound_nNReal (C : ββ₯0) {r : ββ₯0} (h : β n : β, βp nββ * r ^ n β€ C) :
+theorem le_radius_of_bound_nnreal (C : ββ₯0) {r : ββ₯0} (h : β n : β, βp nββ * r ^ n β€ C) :
(r : ββ₯0β) β€ p.radius :=
p.le_radius_of_bound C fun n => by exact_mod_cast h n
-#align formal_multilinear_series.le_radius_of_bound_nnreal FormalMultilinearSeries.le_radius_of_bound_nNReal
+#align formal_multilinear_series.le_radius_of_bound_nnreal FormalMultilinearSeries.le_radius_of_bound_nnreal
/-- If `βpββ rβΏ = O(1)`, as `n β β`, then the radius of `p` is at least `r`. -/
theorem le_radius_of_isBigO (h : (fun n => βp nβ * r ^ n) =O[atTop] fun n => (1 : β)) :
@@ -152,20 +158,20 @@ theorem le_radius_of_eventually_le (C) (h : βαΆ n in atTop, βp nβ * r ^ n
#align formal_multilinear_series.le_radius_of_eventually_le FormalMultilinearSeries.le_radius_of_eventually_le
theorem le_radius_of_summable_nnnorm (h : Summable fun n => βp nββ * r ^ n) : βr β€ p.radius :=
- p.le_radius_of_bound_nNReal (β' n, βp nββ * r ^ n) fun n => le_tsum' h _
+ p.le_radius_of_bound_nnreal (β' n, βp nββ * r ^ n) fun n => le_tsum' h _
#align formal_multilinear_series.le_radius_of_summable_nnnorm FormalMultilinearSeries.le_radius_of_summable_nnnorm
theorem le_radius_of_summable (h : Summable fun n => βp nβ * r ^ n) : βr β€ p.radius :=
p.le_radius_of_summable_nnnorm <| by simp only [β coe_nnnorm] at h ; exact_mod_cast h
#align formal_multilinear_series.le_radius_of_summable FormalMultilinearSeries.le_radius_of_summable
-theorem radius_eq_top_of_forall_nNReal_isBigO
+theorem radius_eq_top_of_forall_nnreal_isBigO
(h : β r : ββ₯0, (fun n => βp nβ * r ^ n) =O[atTop] fun n => (1 : β)) : p.radius = β :=
ENNReal.eq_top_of_forall_nnreal_le fun r => p.le_radius_of_isBigO (h r)
-#align formal_multilinear_series.radius_eq_top_of_forall_nnreal_is_O FormalMultilinearSeries.radius_eq_top_of_forall_nNReal_isBigO
+#align formal_multilinear_series.radius_eq_top_of_forall_nnreal_is_O FormalMultilinearSeries.radius_eq_top_of_forall_nnreal_isBigO
theorem radius_eq_top_of_eventually_eq_zero (h : βαΆ n in atTop, p n = 0) : p.radius = β :=
- p.radius_eq_top_of_forall_nNReal_isBigO fun r =>
+ p.radius_eq_top_of_forall_nnreal_isBigO fun r =>
(isBigO_zero _ _).congr' (h.mono fun n hn => by simp [hn]) EventuallyEq.rfl
#align formal_multilinear_series.radius_eq_top_of_eventually_eq_zero FormalMultilinearSeries.radius_eq_top_of_eventually_eq_zero
@@ -375,175 +381,183 @@ section
variable {f g : E β F} {p pf pg : FormalMultilinearSeries π E F} {x : E} {r r' : ββ₯0β}
+#print HasFPowerSeriesOnBall /-
/-- Given a function `f : E β F` and a formal multilinear series `p`, we say that `f` has `p` as
a power series on the ball of radius `r > 0` around `x` if `f (x + y) = β' pβ yβΏ` for all `βyβ < r`.
-/
-structure HasFpowerSeriesOnBall (f : E β F) (p : FormalMultilinearSeries π E F) (x : E) (r : ββ₯0β) :
+structure HasFPowerSeriesOnBall (f : E β F) (p : FormalMultilinearSeries π E F) (x : E) (r : ββ₯0β) :
Prop where
r_le : r β€ p.radius
r_pos : 0 < r
HasSum :
β {y}, y β EMetric.ball (0 : E) r β HasSum (fun n : β => p n fun i : Fin n => y) (f (x + y))
-#align has_fpower_series_on_ball HasFpowerSeriesOnBall
+#align has_fpower_series_on_ball HasFPowerSeriesOnBall
+-/
+#print HasFPowerSeriesAt /-
/-- Given a function `f : E β F` and a formal multilinear series `p`, we say that `f` has `p` as
a power series around `x` if `f (x + y) = β' pβ yβΏ` for all `y` in a neighborhood of `0`. -/
-def HasFpowerSeriesAt (f : E β F) (p : FormalMultilinearSeries π E F) (x : E) :=
- β r, HasFpowerSeriesOnBall f p x r
-#align has_fpower_series_at HasFpowerSeriesAt
+def HasFPowerSeriesAt (f : E β F) (p : FormalMultilinearSeries π E F) (x : E) :=
+ β r, HasFPowerSeriesOnBall f p x r
+#align has_fpower_series_at HasFPowerSeriesAt
+-/
variable (π)
+#print AnalyticAt /-
/-- Given a function `f : E β F`, we say that `f` is analytic at `x` if it admits a convergent power
series expansion around `x`. -/
def AnalyticAt (f : E β F) (x : E) :=
- β p : FormalMultilinearSeries π E F, HasFpowerSeriesAt f p x
+ β p : FormalMultilinearSeries π E F, HasFPowerSeriesAt f p x
#align analytic_at AnalyticAt
+-/
+#print AnalyticOn /-
/-- Given a function `f : E β F`, we say that `f` is analytic on a set `s` if it is analytic around
every point of `s`. -/
def AnalyticOn (f : E β F) (s : Set E) :=
β x, x β s β AnalyticAt π f x
#align analytic_on AnalyticOn
+-/
variable {π}
-theorem HasFpowerSeriesOnBall.hasFpowerSeriesAt (hf : HasFpowerSeriesOnBall f p x r) :
- HasFpowerSeriesAt f p x :=
+theorem HasFPowerSeriesOnBall.hasFPowerSeriesAt (hf : HasFPowerSeriesOnBall f p x r) :
+ HasFPowerSeriesAt f p x :=
β¨r, hfβ©
-#align has_fpower_series_on_ball.has_fpower_series_at HasFpowerSeriesOnBall.hasFpowerSeriesAt
+#align has_fpower_series_on_ball.has_fpower_series_at HasFPowerSeriesOnBall.hasFPowerSeriesAt
-theorem HasFpowerSeriesAt.analyticAt (hf : HasFpowerSeriesAt f p x) : AnalyticAt π f x :=
+theorem HasFPowerSeriesAt.analyticAt (hf : HasFPowerSeriesAt f p x) : AnalyticAt π f x :=
β¨p, hfβ©
-#align has_fpower_series_at.analytic_at HasFpowerSeriesAt.analyticAt
+#align has_fpower_series_at.analytic_at HasFPowerSeriesAt.analyticAt
-theorem HasFpowerSeriesOnBall.analyticAt (hf : HasFpowerSeriesOnBall f p x r) : AnalyticAt π f x :=
- hf.HasFpowerSeriesAt.AnalyticAt
-#align has_fpower_series_on_ball.analytic_at HasFpowerSeriesOnBall.analyticAt
+theorem HasFPowerSeriesOnBall.analyticAt (hf : HasFPowerSeriesOnBall f p x r) : AnalyticAt π f x :=
+ hf.HasFPowerSeriesAt.AnalyticAt
+#align has_fpower_series_on_ball.analytic_at HasFPowerSeriesOnBall.analyticAt
-theorem HasFpowerSeriesOnBall.congr (hf : HasFpowerSeriesOnBall f p x r)
- (hg : EqOn f g (EMetric.ball x r)) : HasFpowerSeriesOnBall g p x r :=
+theorem HasFPowerSeriesOnBall.congr (hf : HasFPowerSeriesOnBall f p x r)
+ (hg : EqOn f g (EMetric.ball x r)) : HasFPowerSeriesOnBall g p x r :=
{ r_le := hf.r_le
r_pos := hf.r_pos
HasSum := fun y hy => by
convert hf.has_sum hy
apply hg.symm
simpa [edist_eq_coe_nnnorm_sub] using hy }
-#align has_fpower_series_on_ball.congr HasFpowerSeriesOnBall.congr
+#align has_fpower_series_on_ball.congr HasFPowerSeriesOnBall.congr
/-- If a function `f` has a power series `p` around `x`, then the function `z β¦ f (z - y)` has the
same power series around `x + y`. -/
-theorem HasFpowerSeriesOnBall.compSub (hf : HasFpowerSeriesOnBall f p x r) (y : E) :
- HasFpowerSeriesOnBall (fun z => f (z - y)) p (x + y) r :=
+theorem HasFPowerSeriesOnBall.comp_sub (hf : HasFPowerSeriesOnBall f p x r) (y : E) :
+ HasFPowerSeriesOnBall (fun z => f (z - y)) p (x + y) r :=
{ r_le := hf.r_le
r_pos := hf.r_pos
HasSum := fun z hz => by convert hf.has_sum hz; abel }
-#align has_fpower_series_on_ball.comp_sub HasFpowerSeriesOnBall.compSub
+#align has_fpower_series_on_ball.comp_sub HasFPowerSeriesOnBall.comp_sub
-theorem HasFpowerSeriesOnBall.hasSum_sub (hf : HasFpowerSeriesOnBall f p x r) {y : E}
+theorem HasFPowerSeriesOnBall.hasSum_sub (hf : HasFPowerSeriesOnBall f p x r) {y : E}
(hy : y β EMetric.ball x r) : HasSum (fun n : β => p n fun i => y - x) (f y) :=
by
have : y - x β EMetric.ball (0 : E) r := by simpa [edist_eq_coe_nnnorm_sub] using hy
simpa only [add_sub_cancel'_right] using hf.has_sum this
-#align has_fpower_series_on_ball.has_sum_sub HasFpowerSeriesOnBall.hasSum_sub
+#align has_fpower_series_on_ball.has_sum_sub HasFPowerSeriesOnBall.hasSum_sub
-theorem HasFpowerSeriesOnBall.radius_pos (hf : HasFpowerSeriesOnBall f p x r) : 0 < p.radius :=
+theorem HasFPowerSeriesOnBall.radius_pos (hf : HasFPowerSeriesOnBall f p x r) : 0 < p.radius :=
lt_of_lt_of_le hf.r_pos hf.r_le
-#align has_fpower_series_on_ball.radius_pos HasFpowerSeriesOnBall.radius_pos
+#align has_fpower_series_on_ball.radius_pos HasFPowerSeriesOnBall.radius_pos
-theorem HasFpowerSeriesAt.radius_pos (hf : HasFpowerSeriesAt f p x) : 0 < p.radius :=
+theorem HasFPowerSeriesAt.radius_pos (hf : HasFPowerSeriesAt f p x) : 0 < p.radius :=
let β¨r, hrβ© := hf
hr.radius_pos
-#align has_fpower_series_at.radius_pos HasFpowerSeriesAt.radius_pos
+#align has_fpower_series_at.radius_pos HasFPowerSeriesAt.radius_pos
-theorem HasFpowerSeriesOnBall.mono (hf : HasFpowerSeriesOnBall f p x r) (r'_pos : 0 < r')
- (hr : r' β€ r) : HasFpowerSeriesOnBall f p x r' :=
+theorem HasFPowerSeriesOnBall.mono (hf : HasFPowerSeriesOnBall f p x r) (r'_pos : 0 < r')
+ (hr : r' β€ r) : HasFPowerSeriesOnBall f p x r' :=
β¨le_trans hr hf.1, r'_pos, fun y hy => hf.HasSum (EMetric.ball_subset_ball hr hy)β©
-#align has_fpower_series_on_ball.mono HasFpowerSeriesOnBall.mono
+#align has_fpower_series_on_ball.mono HasFPowerSeriesOnBall.mono
-theorem HasFpowerSeriesAt.congr (hf : HasFpowerSeriesAt f p x) (hg : f =αΆ [π x] g) :
- HasFpowerSeriesAt g p x := by
+theorem HasFPowerSeriesAt.congr (hf : HasFPowerSeriesAt f p x) (hg : f =αΆ [π x] g) :
+ HasFPowerSeriesAt g p x := by
rcases hf with β¨rβ, hββ©
rcases emetric.mem_nhds_iff.mp hg with β¨rβ, hβpos, hββ©
exact
β¨min rβ rβ,
(hβ.mono (lt_min hβ.r_pos hβpos) inf_le_left).congr fun y hy =>
hβ (EMetric.ball_subset_ball inf_le_right hy)β©
-#align has_fpower_series_at.congr HasFpowerSeriesAt.congr
+#align has_fpower_series_at.congr HasFPowerSeriesAt.congr
-protected theorem HasFpowerSeriesAt.eventually (hf : HasFpowerSeriesAt f p x) :
- βαΆ r : ββ₯0β in π[>] 0, HasFpowerSeriesOnBall f p x r :=
+protected theorem HasFPowerSeriesAt.eventually (hf : HasFPowerSeriesAt f p x) :
+ βαΆ r : ββ₯0β in π[>] 0, HasFPowerSeriesOnBall f p x r :=
let β¨r, hrβ© := hf
mem_of_superset (Ioo_mem_nhdsWithin_Ioi (left_mem_Ico.2 hr.r_pos)) fun r' hr' =>
hr.mono hr'.1 hr'.2.le
-#align has_fpower_series_at.eventually HasFpowerSeriesAt.eventually
+#align has_fpower_series_at.eventually HasFPowerSeriesAt.eventually
-theorem HasFpowerSeriesOnBall.eventually_hasSum (hf : HasFpowerSeriesOnBall f p x r) :
+theorem HasFPowerSeriesOnBall.eventually_hasSum (hf : HasFPowerSeriesOnBall f p x r) :
βαΆ y in π 0, HasSum (fun n : β => p n fun i : Fin n => y) (f (x + y)) := by
filter_upwards [EMetric.ball_mem_nhds (0 : E) hf.r_pos]using fun _ => hf.has_sum
-#align has_fpower_series_on_ball.eventually_has_sum HasFpowerSeriesOnBall.eventually_hasSum
+#align has_fpower_series_on_ball.eventually_has_sum HasFPowerSeriesOnBall.eventually_hasSum
-theorem HasFpowerSeriesAt.eventually_hasSum (hf : HasFpowerSeriesAt f p x) :
+theorem HasFPowerSeriesAt.eventually_hasSum (hf : HasFPowerSeriesAt f p x) :
βαΆ y in π 0, HasSum (fun n : β => p n fun i : Fin n => y) (f (x + y)) :=
let β¨r, hrβ© := hf
hr.eventually_hasSum
-#align has_fpower_series_at.eventually_has_sum HasFpowerSeriesAt.eventually_hasSum
+#align has_fpower_series_at.eventually_has_sum HasFPowerSeriesAt.eventually_hasSum
-theorem HasFpowerSeriesOnBall.eventually_hasSum_sub (hf : HasFpowerSeriesOnBall f p x r) :
+theorem HasFPowerSeriesOnBall.eventually_hasSum_sub (hf : HasFPowerSeriesOnBall f p x r) :
βαΆ y in π x, HasSum (fun n : β => p n fun i : Fin n => y - x) (f y) := by
filter_upwards [EMetric.ball_mem_nhds x hf.r_pos]with y using hf.has_sum_sub
-#align has_fpower_series_on_ball.eventually_has_sum_sub HasFpowerSeriesOnBall.eventually_hasSum_sub
+#align has_fpower_series_on_ball.eventually_has_sum_sub HasFPowerSeriesOnBall.eventually_hasSum_sub
-theorem HasFpowerSeriesAt.eventually_hasSum_sub (hf : HasFpowerSeriesAt f p x) :
+theorem HasFPowerSeriesAt.eventually_hasSum_sub (hf : HasFPowerSeriesAt f p x) :
βαΆ y in π x, HasSum (fun n : β => p n fun i : Fin n => y - x) (f y) :=
let β¨r, hrβ© := hf
hr.eventually_hasSum_sub
-#align has_fpower_series_at.eventually_has_sum_sub HasFpowerSeriesAt.eventually_hasSum_sub
+#align has_fpower_series_at.eventually_has_sum_sub HasFPowerSeriesAt.eventually_hasSum_sub
-theorem HasFpowerSeriesOnBall.eventually_eq_zero
- (hf : HasFpowerSeriesOnBall f (0 : FormalMultilinearSeries π E F) x r) : βαΆ z in π x, f z = 0 :=
+theorem HasFPowerSeriesOnBall.eventually_eq_zero
+ (hf : HasFPowerSeriesOnBall f (0 : FormalMultilinearSeries π E F) x r) : βαΆ z in π x, f z = 0 :=
by filter_upwards [hf.eventually_has_sum_sub]with z hz using hz.unique hasSum_zero
-#align has_fpower_series_on_ball.eventually_eq_zero HasFpowerSeriesOnBall.eventually_eq_zero
+#align has_fpower_series_on_ball.eventually_eq_zero HasFPowerSeriesOnBall.eventually_eq_zero
-theorem HasFpowerSeriesAt.eventually_eq_zero
- (hf : HasFpowerSeriesAt f (0 : FormalMultilinearSeries π E F) x) : βαΆ z in π x, f z = 0 :=
+theorem HasFPowerSeriesAt.eventually_eq_zero
+ (hf : HasFPowerSeriesAt f (0 : FormalMultilinearSeries π E F) x) : βαΆ z in π x, f z = 0 :=
let β¨r, hrβ© := hf
hr.eventually_eq_zero
-#align has_fpower_series_at.eventually_eq_zero HasFpowerSeriesAt.eventually_eq_zero
+#align has_fpower_series_at.eventually_eq_zero HasFPowerSeriesAt.eventually_eq_zero
-theorem hasFpowerSeriesOnBallConst {c : F} {e : E} :
- HasFpowerSeriesOnBall (fun _ => c) (constFormalMultilinearSeries π E c) e β€ :=
+theorem hasFPowerSeriesOnBall_const {c : F} {e : E} :
+ HasFPowerSeriesOnBall (fun _ => c) (constFormalMultilinearSeries π E c) e β€ :=
by
refine' β¨by simp, WithTop.zero_lt_top, fun y hy => hasSum_single 0 fun n hn => _β©
simp [constFormalMultilinearSeries_apply hn]
-#align has_fpower_series_on_ball_const hasFpowerSeriesOnBallConst
+#align has_fpower_series_on_ball_const hasFPowerSeriesOnBall_const
-theorem hasFpowerSeriesAtConst {c : F} {e : E} :
- HasFpowerSeriesAt (fun _ => c) (constFormalMultilinearSeries π E c) e :=
- β¨β€, hasFpowerSeriesOnBallConstβ©
-#align has_fpower_series_at_const hasFpowerSeriesAtConst
+theorem hasFPowerSeriesAt_const {c : F} {e : E} :
+ HasFPowerSeriesAt (fun _ => c) (constFormalMultilinearSeries π E c) e :=
+ β¨β€, hasFPowerSeriesOnBall_constβ©
+#align has_fpower_series_at_const hasFPowerSeriesAt_const
theorem analyticAt_const {v : F} : AnalyticAt π (fun _ => v) x :=
- β¨constFormalMultilinearSeries π E v, hasFpowerSeriesAtConstβ©
+ β¨constFormalMultilinearSeries π E v, hasFPowerSeriesAt_constβ©
#align analytic_at_const analyticAt_const
theorem analyticOn_const {v : F} {s : Set E} : AnalyticOn π (fun _ => v) s := fun z _ =>
analyticAt_const
#align analytic_on_const analyticOn_const
-theorem HasFpowerSeriesOnBall.add (hf : HasFpowerSeriesOnBall f pf x r)
- (hg : HasFpowerSeriesOnBall g pg x r) : HasFpowerSeriesOnBall (f + g) (pf + pg) x r :=
+theorem HasFPowerSeriesOnBall.add (hf : HasFPowerSeriesOnBall f pf x r)
+ (hg : HasFPowerSeriesOnBall g pg x r) : HasFPowerSeriesOnBall (f + g) (pf + pg) x r :=
{ r_le := le_trans (le_min_iff.2 β¨hf.r_le, hg.r_leβ©) (pf.min_radius_le_radius_add pg)
r_pos := hf.r_pos
HasSum := fun y hy => (hf.HasSum hy).add (hg.HasSum hy) }
-#align has_fpower_series_on_ball.add HasFpowerSeriesOnBall.add
+#align has_fpower_series_on_ball.add HasFPowerSeriesOnBall.add
-theorem HasFpowerSeriesAt.add (hf : HasFpowerSeriesAt f pf x) (hg : HasFpowerSeriesAt g pg x) :
- HasFpowerSeriesAt (f + g) (pf + pg) x :=
+theorem HasFPowerSeriesAt.add (hf : HasFPowerSeriesAt f pf x) (hg : HasFPowerSeriesAt g pg x) :
+ HasFPowerSeriesAt (f + g) (pf + pg) x :=
by
rcases(hf.eventually.and hg.eventually).exists with β¨r, hrβ©
exact β¨r, hr.1.add hr.2β©
-#align has_fpower_series_at.add HasFpowerSeriesAt.add
+#align has_fpower_series_at.add HasFPowerSeriesAt.add
theorem AnalyticAt.add (hf : AnalyticAt π f x) (hg : AnalyticAt π g x) : AnalyticAt π (f + g) x :=
let β¨pf, hpfβ© := hf
@@ -551,31 +565,31 @@ theorem AnalyticAt.add (hf : AnalyticAt π f x) (hg : AnalyticAt π g x) : A
(hpf.add hqf).AnalyticAt
#align analytic_at.add AnalyticAt.add
-theorem HasFpowerSeriesOnBall.neg (hf : HasFpowerSeriesOnBall f pf x r) :
- HasFpowerSeriesOnBall (-f) (-pf) x r :=
+theorem HasFPowerSeriesOnBall.neg (hf : HasFPowerSeriesOnBall f pf x r) :
+ HasFPowerSeriesOnBall (-f) (-pf) x r :=
{ r_le := by rw [pf.radius_neg]; exact hf.r_le
r_pos := hf.r_pos
HasSum := fun y hy => (hf.HasSum hy).neg }
-#align has_fpower_series_on_ball.neg HasFpowerSeriesOnBall.neg
+#align has_fpower_series_on_ball.neg HasFPowerSeriesOnBall.neg
-theorem HasFpowerSeriesAt.neg (hf : HasFpowerSeriesAt f pf x) : HasFpowerSeriesAt (-f) (-pf) x :=
+theorem HasFPowerSeriesAt.neg (hf : HasFPowerSeriesAt f pf x) : HasFPowerSeriesAt (-f) (-pf) x :=
let β¨rf, hrfβ© := hf
- hrf.neg.HasFpowerSeriesAt
-#align has_fpower_series_at.neg HasFpowerSeriesAt.neg
+ hrf.neg.HasFPowerSeriesAt
+#align has_fpower_series_at.neg HasFPowerSeriesAt.neg
theorem AnalyticAt.neg (hf : AnalyticAt π f x) : AnalyticAt π (-f) x :=
let β¨pf, hpfβ© := hf
hpf.neg.AnalyticAt
#align analytic_at.neg AnalyticAt.neg
-theorem HasFpowerSeriesOnBall.sub (hf : HasFpowerSeriesOnBall f pf x r)
- (hg : HasFpowerSeriesOnBall g pg x r) : HasFpowerSeriesOnBall (f - g) (pf - pg) x r := by
+theorem HasFPowerSeriesOnBall.sub (hf : HasFPowerSeriesOnBall f pf x r)
+ (hg : HasFPowerSeriesOnBall g pg x r) : HasFPowerSeriesOnBall (f - g) (pf - pg) x r := by
simpa only [sub_eq_add_neg] using hf.add hg.neg
-#align has_fpower_series_on_ball.sub HasFpowerSeriesOnBall.sub
+#align has_fpower_series_on_ball.sub HasFPowerSeriesOnBall.sub
-theorem HasFpowerSeriesAt.sub (hf : HasFpowerSeriesAt f pf x) (hg : HasFpowerSeriesAt g pg x) :
- HasFpowerSeriesAt (f - g) (pf - pg) x := by simpa only [sub_eq_add_neg] using hf.add hg.neg
-#align has_fpower_series_at.sub HasFpowerSeriesAt.sub
+theorem HasFPowerSeriesAt.sub (hf : HasFPowerSeriesAt f pf x) (hg : HasFPowerSeriesAt g pg x) :
+ HasFPowerSeriesAt (f - g) (pf - pg) x := by simpa only [sub_eq_add_neg] using hf.add hg.neg
+#align has_fpower_series_at.sub HasFPowerSeriesAt.sub
theorem AnalyticAt.sub (hf : AnalyticAt π f x) (hg : AnalyticAt π g x) : AnalyticAt π (f - g) x :=
by simpa only [sub_eq_add_neg] using hf.add hg.neg
@@ -594,7 +608,7 @@ theorem AnalyticOn.sub {s : Set E} (hf : AnalyticOn π f s) (hg : AnalyticOn
#align analytic_on.sub AnalyticOn.sub
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (i Β«expr β Β» 0) -/
-theorem HasFpowerSeriesOnBall.coeff_zero (hf : HasFpowerSeriesOnBall f pf x r) (v : Fin 0 β E) :
+theorem HasFPowerSeriesOnBall.coeff_zero (hf : HasFPowerSeriesOnBall f pf x r) (v : Fin 0 β E) :
pf 0 v = f x := by
have v_eq : v = fun i => 0 := Subsingleton.elim _ _
have zero_mem : (0 : E) β EMetric.ball (0 : E) r := by simp [hf.r_pos]
@@ -605,26 +619,26 @@ theorem HasFpowerSeriesOnBall.coeff_zero (hf : HasFpowerSeriesOnBall f pf x r) (
exact ContinuousMultilinearMap.map_coord_zero _ (β¨0, thisβ© : Fin i) rfl
have A := (hf.has_sum zero_mem).unique (hasSum_single _ this)
simpa [v_eq] using A.symm
-#align has_fpower_series_on_ball.coeff_zero HasFpowerSeriesOnBall.coeff_zero
+#align has_fpower_series_on_ball.coeff_zero HasFPowerSeriesOnBall.coeff_zero
-theorem HasFpowerSeriesAt.coeff_zero (hf : HasFpowerSeriesAt f pf x) (v : Fin 0 β E) :
+theorem HasFPowerSeriesAt.coeff_zero (hf : HasFPowerSeriesAt f pf x) (v : Fin 0 β E) :
pf 0 v = f x :=
let β¨rf, hrfβ© := hf
hrf.coeff_zero v
-#align has_fpower_series_at.coeff_zero HasFpowerSeriesAt.coeff_zero
+#align has_fpower_series_at.coeff_zero HasFPowerSeriesAt.coeff_zero
/-- If a function `f` has a power series `p` on a ball and `g` is linear, then `g β f` has the
power series `g β p` on the same ball. -/
-theorem ContinuousLinearMap.compHasFpowerSeriesOnBall (g : F βL[π] G)
- (h : HasFpowerSeriesOnBall f p x r) :
- HasFpowerSeriesOnBall (g β f) (g.compFormalMultilinearSeries p) x r :=
+theorem ContinuousLinearMap.comp_hasFPowerSeriesOnBall (g : F βL[π] G)
+ (h : HasFPowerSeriesOnBall f p x r) :
+ HasFPowerSeriesOnBall (g β f) (g.compFormalMultilinearSeries p) x r :=
{ r_le := h.r_le.trans (p.radius_le_radius_continuousLinearMap_comp _)
r_pos := h.r_pos
HasSum := fun y hy => by
simpa only [ContinuousLinearMap.compFormalMultilinearSeries_apply,
ContinuousLinearMap.compContinuousMultilinearMap_coe, Function.comp_apply] using
g.has_sum (h.has_sum hy) }
-#align continuous_linear_map.comp_has_fpower_series_on_ball ContinuousLinearMap.compHasFpowerSeriesOnBall
+#align continuous_linear_map.comp_has_fpower_series_on_ball ContinuousLinearMap.comp_hasFPowerSeriesOnBall
/-- If a function `f` is analytic on a set `s` and `g` is linear, then `g β f` is analytic
on `s`. -/
@@ -640,8 +654,8 @@ sums of this power series on strict subdisks of the disk of convergence.
This version provides an upper estimate that decreases both in `βyβ` and `n`. See also
`has_fpower_series_on_ball.uniform_geometric_approx` for a weaker version. -/
-theorem HasFpowerSeriesOnBall.uniform_geometric_approx' {r' : ββ₯0}
- (hf : HasFpowerSeriesOnBall f p x r) (h : (r' : ββ₯0β) < r) :
+theorem HasFPowerSeriesOnBall.uniform_geometric_approx' {r' : ββ₯0}
+ (hf : HasFPowerSeriesOnBall f p x r) (h : (r' : ββ₯0β) < r) :
β a β Ioo (0 : β) 1,
β C > 0,
β y β Metric.ball (0 : E) r',
@@ -674,12 +688,12 @@ theorem HasFpowerSeriesOnBall.uniform_geometric_approx' {r' : ββ₯0}
(mul_le_mul_of_nonneg_right (hp n) (pow_nonneg (div_nonneg (norm_nonneg _) r'.coe_nonneg) _))
_ β€ C * (a * (βyβ / r')) ^ n := by rw [mul_pow, mul_assoc]
-#align has_fpower_series_on_ball.uniform_geometric_approx' HasFpowerSeriesOnBall.uniform_geometric_approx'
+#align has_fpower_series_on_ball.uniform_geometric_approx' HasFPowerSeriesOnBall.uniform_geometric_approx'
/-- If a function admits a power series expansion, then it is exponentially close to the partial
sums of this power series on strict subdisks of the disk of convergence. -/
-theorem HasFpowerSeriesOnBall.uniform_geometric_approx {r' : ββ₯0}
- (hf : HasFpowerSeriesOnBall f p x r) (h : (r' : ββ₯0β) < r) :
+theorem HasFPowerSeriesOnBall.uniform_geometric_approx {r' : ββ₯0}
+ (hf : HasFPowerSeriesOnBall f p x r) (h : (r' : ββ₯0β) < r) :
β a β Ioo (0 : β) 1,
β C > 0, β y β Metric.ball (0 : E) r', β n, βf (x + y) - p.partialSum n yβ β€ C * a ^ n :=
by
@@ -694,10 +708,10 @@ theorem HasFpowerSeriesOnBall.uniform_geometric_approx {r' : ββ₯0}
refine' mul_le_mul_of_nonneg_left (pow_le_pow_of_le_left _ _ _) hC.lt.le
exacts [mul_nonneg ha.1.le (div_nonneg (norm_nonneg y) r'.coe_nonneg),
mul_le_of_le_one_right ha.1.le (div_le_one_of_le yr'.le r'.coe_nonneg)]
-#align has_fpower_series_on_ball.uniform_geometric_approx HasFpowerSeriesOnBall.uniform_geometric_approx
+#align has_fpower_series_on_ball.uniform_geometric_approx HasFPowerSeriesOnBall.uniform_geometric_approx
/-- Taylor formula for an analytic function, `is_O` version. -/
-theorem HasFpowerSeriesAt.isBigO_sub_partialSum_pow (hf : HasFpowerSeriesAt f p x) (n : β) :
+theorem HasFPowerSeriesAt.isBigO_sub_partialSum_pow (hf : HasFPowerSeriesAt f p x) (n : β) :
(fun y : E => f (x + y) - p.partialSum n y) =O[π 0] fun y => βyβ ^ n :=
by
rcases hf with β¨r, hfβ©
@@ -712,15 +726,15 @@ theorem HasFpowerSeriesAt.isBigO_sub_partialSum_pow (hf : HasFpowerSeriesAt f p
replace r'0 : 0 < (r' : β); Β· exact_mod_cast r'0
filter_upwards [Metric.ball_mem_nhds (0 : E) r'0]with y hy
simpa [mul_pow, mul_div_assoc, mul_assoc, div_mul_eq_mul_div] using hp y hy n
-#align has_fpower_series_at.is_O_sub_partial_sum_pow HasFpowerSeriesAt.isBigO_sub_partialSum_pow
+#align has_fpower_series_at.is_O_sub_partial_sum_pow HasFPowerSeriesAt.isBigO_sub_partialSum_pow
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/-- If `f` has formal power series `β n, pβ` on a ball of radius `r`, then for `y, z` in any smaller
ball, the norm of the difference `f y - f z - p 1 (Ξ» _, y - z)` is bounded above by
`C * (max βy - xβ βz - xβ) * βy - zβ`. This lemma formulates this property using `is_O` and
`filter.principal` on `E Γ E`. -/
-theorem HasFpowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
- (hf : HasFpowerSeriesOnBall f p x r) (hr : r' < r) :
+theorem HasFPowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
+ (hf : HasFPowerSeriesOnBall f p x r) (hr : r' < r) :
(fun y : E Γ E => f y.1 - f y.2 - p 1 fun _ => y.1 - y.2) =O[π (EMetric.ball (x, x) r')]
fun y => βy - (x, x)β * βy.1 - y.2β :=
by
@@ -777,13 +791,13 @@ theorem HasFpowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
exact (hL y hy).trans (le_abs_self _)
simp_rw [L, mul_right_comm _ (_ * _)]
exact (is_O_refl _ _).const_mul_left _
-#align has_fpower_series_on_ball.is_O_image_sub_image_sub_deriv_principal HasFpowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
+#align has_fpower_series_on_ball.is_O_image_sub_image_sub_deriv_principal HasFPowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (y z Β«expr β Β» emetric.ball[emetric.ball] x r') -/
/-- If `f` has formal power series `β n, pβ` on a ball of radius `r`, then for `y, z` in any smaller
ball, the norm of the difference `f y - f z - p 1 (Ξ» _, y - z)` is bounded above by
`C * (max βy - xβ βz - xβ) * βy - zβ`. -/
-theorem HasFpowerSeriesOnBall.image_sub_sub_deriv_le (hf : HasFpowerSeriesOnBall f p x r)
+theorem HasFPowerSeriesOnBall.image_sub_sub_deriv_le (hf : HasFPowerSeriesOnBall f p x r)
(hr : r' < r) :
β C,
β (y) (_ : y β EMetric.ball x r') (z) (_ : z β EMetric.ball x r'),
@@ -792,12 +806,12 @@ theorem HasFpowerSeriesOnBall.image_sub_sub_deriv_le (hf : HasFpowerSeriesOnBall
simpa only [is_O_principal, mul_assoc, norm_mul, norm_norm, Prod.forall, EMetric.mem_ball,
Prod.edist_eq, max_lt_iff, and_imp, @forall_swap (_ < _) E] using
hf.is_O_image_sub_image_sub_deriv_principal hr
-#align has_fpower_series_on_ball.image_sub_sub_deriv_le HasFpowerSeriesOnBall.image_sub_sub_deriv_le
+#align has_fpower_series_on_ball.image_sub_sub_deriv_le HasFPowerSeriesOnBall.image_sub_sub_deriv_le
/-- If `f` has formal power series `β n, pβ` at `x`, then
`f y - f z - p 1 (Ξ» _, y - z) = O(β(y, z) - (x, x)β * βy - zβ)` as `(y, z) β (x, x)`.
In particular, `f` is strictly differentiable at `x`. -/
-theorem HasFpowerSeriesAt.isBigO_image_sub_norm_mul_norm_sub (hf : HasFpowerSeriesAt f p x) :
+theorem HasFPowerSeriesAt.isBigO_image_sub_norm_mul_norm_sub (hf : HasFPowerSeriesAt f p x) :
(fun y : E Γ E => f y.1 - f y.2 - p 1 fun _ => y.1 - y.2) =O[π (x, x)] fun y =>
βy - (x, x)β * βy.1 - y.2β :=
by
@@ -805,12 +819,12 @@ theorem HasFpowerSeriesAt.isBigO_image_sub_norm_mul_norm_sub (hf : HasFpowerSeri
rcases ENNReal.lt_iff_exists_nnreal_btwn.1 hf.r_pos with β¨r', r'0, hβ©
refine' (hf.is_O_image_sub_image_sub_deriv_principal h).mono _
exact le_principal_iff.2 (EMetric.ball_mem_nhds _ r'0)
-#align has_fpower_series_at.is_O_image_sub_norm_mul_norm_sub HasFpowerSeriesAt.isBigO_image_sub_norm_mul_norm_sub
+#align has_fpower_series_at.is_O_image_sub_norm_mul_norm_sub HasFPowerSeriesAt.isBigO_image_sub_norm_mul_norm_sub
/-- If a function admits a power series expansion at `x`, then it is the uniform limit of the
partial sums of this power series on strict subdisks of the disk of convergence, i.e., `f (x + y)`
is the uniform limit of `p.partial_sum n y` there. -/
-theorem HasFpowerSeriesOnBall.tendstoUniformlyOn {r' : ββ₯0} (hf : HasFpowerSeriesOnBall f p x r)
+theorem HasFPowerSeriesOnBall.tendstoUniformlyOn {r' : ββ₯0} (hf : HasFPowerSeriesOnBall f p x r)
(h : (r' : ββ₯0β) < r) :
TendstoUniformlyOn (fun n y => p.partialSum n y) (fun y => f (x + y)) atTop
(Metric.ball (0 : E) r') :=
@@ -826,12 +840,12 @@ theorem HasFpowerSeriesOnBall.tendstoUniformlyOn {r' : ββ₯0} (hf : HasFpowerS
refine' (L.eventually (gt_mem_nhds Ξ΅pos)).mono fun n hn y hy => _
rw [dist_eq_norm]
exact (hp y hy n).trans_lt hn
-#align has_fpower_series_on_ball.tendsto_uniformly_on HasFpowerSeriesOnBall.tendstoUniformlyOn
+#align has_fpower_series_on_ball.tendsto_uniformly_on HasFPowerSeriesOnBall.tendstoUniformlyOn
/-- If a function admits a power series expansion at `x`, then it is the locally uniform limit of
the partial sums of this power series on the disk of convergence, i.e., `f (x + y)`
is the locally uniform limit of `p.partial_sum n y` there. -/
-theorem HasFpowerSeriesOnBall.tendstoLocallyUniformlyOn (hf : HasFpowerSeriesOnBall f p x r) :
+theorem HasFPowerSeriesOnBall.tendstoLocallyUniformlyOn (hf : HasFPowerSeriesOnBall f p x r) :
TendstoLocallyUniformlyOn (fun n y => p.partialSum n y) (fun y => f (x + y)) atTop
(EMetric.ball (0 : E) r) :=
by
@@ -840,24 +854,24 @@ theorem HasFpowerSeriesOnBall.tendstoLocallyUniformlyOn (hf : HasFpowerSeriesOnB
have : EMetric.ball (0 : E) r' β π x := IsOpen.mem_nhds EMetric.isOpen_ball xr'
refine' β¨EMetric.ball (0 : E) r', mem_nhdsWithin_of_mem_nhds this, _β©
simpa [Metric.emetric_ball_nnreal] using hf.tendsto_uniformly_on hr' u hu
-#align has_fpower_series_on_ball.tendsto_locally_uniformly_on HasFpowerSeriesOnBall.tendstoLocallyUniformlyOn
+#align has_fpower_series_on_ball.tendsto_locally_uniformly_on HasFPowerSeriesOnBall.tendstoLocallyUniformlyOn
/-- If a function admits a power series expansion at `x`, then it is the uniform limit of the
partial sums of this power series on strict subdisks of the disk of convergence, i.e., `f y`
is the uniform limit of `p.partial_sum n (y - x)` there. -/
-theorem HasFpowerSeriesOnBall.tendsto_uniformly_on' {r' : ββ₯0} (hf : HasFpowerSeriesOnBall f p x r)
+theorem HasFPowerSeriesOnBall.tendstoUniformlyOn' {r' : ββ₯0} (hf : HasFPowerSeriesOnBall f p x r)
(h : (r' : ββ₯0β) < r) :
TendstoUniformlyOn (fun n y => p.partialSum n (y - x)) f atTop (Metric.ball (x : E) r') :=
by
convert(hf.tendsto_uniformly_on h).comp fun y => y - x
Β· simp [(Β· β Β·)]
Β· ext z; simp [dist_eq_norm]
-#align has_fpower_series_on_ball.tendsto_uniformly_on' HasFpowerSeriesOnBall.tendsto_uniformly_on'
+#align has_fpower_series_on_ball.tendsto_uniformly_on' HasFPowerSeriesOnBall.tendstoUniformlyOn'
/-- If a function admits a power series expansion at `x`, then it is the locally uniform limit of
the partial sums of this power series on the disk of convergence, i.e., `f y`
is the locally uniform limit of `p.partial_sum n (y - x)` there. -/
-theorem HasFpowerSeriesOnBall.tendsto_locally_uniformly_on' (hf : HasFpowerSeriesOnBall f p x r) :
+theorem HasFPowerSeriesOnBall.tendstoLocallyUniformlyOn' (hf : HasFPowerSeriesOnBall f p x r) :
TendstoLocallyUniformlyOn (fun n y => p.partialSum n (y - x)) f atTop
(EMetric.ball (x : E) r) :=
by
@@ -866,21 +880,21 @@ theorem HasFpowerSeriesOnBall.tendsto_locally_uniformly_on' (hf : HasFpowerSerie
convert hf.tendsto_locally_uniformly_on.comp (fun y : E => y - x) _ A
Β· ext z; simp
Β· intro z; simp [edist_eq_coe_nnnorm, edist_eq_coe_nnnorm_sub]
-#align has_fpower_series_on_ball.tendsto_locally_uniformly_on' HasFpowerSeriesOnBall.tendsto_locally_uniformly_on'
+#align has_fpower_series_on_ball.tendsto_locally_uniformly_on' HasFPowerSeriesOnBall.tendstoLocallyUniformlyOn'
/-- If a function admits a power series expansion on a disk, then it is continuous there. -/
-protected theorem HasFpowerSeriesOnBall.continuousOn (hf : HasFpowerSeriesOnBall f p x r) :
+protected theorem HasFPowerSeriesOnBall.continuousOn (hf : HasFPowerSeriesOnBall f p x r) :
ContinuousOn f (EMetric.ball x r) :=
- hf.tendsto_locally_uniformly_on'.ContinuousOn <|
+ hf.tendstoLocallyUniformlyOn'.ContinuousOn <|
eventually_of_forall fun n =>
((p.partialSum_continuous n).comp (continuous_id.sub continuous_const)).ContinuousOn
-#align has_fpower_series_on_ball.continuous_on HasFpowerSeriesOnBall.continuousOn
+#align has_fpower_series_on_ball.continuous_on HasFPowerSeriesOnBall.continuousOn
-protected theorem HasFpowerSeriesAt.continuousAt (hf : HasFpowerSeriesAt f p x) :
+protected theorem HasFPowerSeriesAt.continuousAt (hf : HasFPowerSeriesAt f p x) :
ContinuousAt f x :=
let β¨r, hrβ© := hf
hr.ContinuousOn.ContinuousAt (EMetric.ball_mem_nhds x hr.r_pos)
-#align has_fpower_series_at.continuous_at HasFpowerSeriesAt.continuousAt
+#align has_fpower_series_at.continuous_at HasFPowerSeriesAt.continuousAt
protected theorem AnalyticAt.continuousAt (hf : AnalyticAt π f x) : ContinuousAt f x :=
let β¨p, hpβ© := hf
@@ -893,18 +907,18 @@ protected theorem AnalyticOn.continuousOn {s : Set E} (hf : AnalyticOn π f s)
/-- In a complete space, the sum of a converging power series `p` admits `p` as a power series.
This is not totally obvious as we need to check the convergence of the series. -/
-protected theorem FormalMultilinearSeries.hasFpowerSeriesOnBall [CompleteSpace F]
+protected theorem FormalMultilinearSeries.hasFPowerSeriesOnBall [CompleteSpace F]
(p : FormalMultilinearSeries π E F) (h : 0 < p.radius) :
- HasFpowerSeriesOnBall p.Sum p 0 p.radius :=
+ HasFPowerSeriesOnBall p.Sum p 0 p.radius :=
{ r_le := le_rfl
r_pos := h
HasSum := fun y hy => by rw [zero_add]; exact p.has_sum hy }
-#align formal_multilinear_series.has_fpower_series_on_ball FormalMultilinearSeries.hasFpowerSeriesOnBall
+#align formal_multilinear_series.has_fpower_series_on_ball FormalMultilinearSeries.hasFPowerSeriesOnBall
-theorem HasFpowerSeriesOnBall.sum (h : HasFpowerSeriesOnBall f p x r) {y : E}
+theorem HasFPowerSeriesOnBall.sum (h : HasFPowerSeriesOnBall f p x r) {y : E}
(hy : y β EMetric.ball (0 : E) r) : f (x + y) = p.Sum y :=
(h.HasSum hy).tsum_eq.symm
-#align has_fpower_series_on_ball.sum HasFpowerSeriesOnBall.sum
+#align has_fpower_series_on_ball.sum HasFPowerSeriesOnBall.sum
/-- The sum of a converging power series is continuous in its disk of convergence. -/
protected theorem FormalMultilinearSeries.continuousOn [CompleteSpace F] :
@@ -985,8 +999,8 @@ theorem Asymptotics.IsBigO.continuousMultilinearMap_apply_eq_zero {n : β} {p :
/-- If a formal multilinear series `p` represents the zero function at `x : E`, then the
terms `p n (Ξ» i, y)` appearing the in sum are zero for any `n : β`, `y : E`. -/
-theorem HasFpowerSeriesAt.apply_eq_zero {p : FormalMultilinearSeries π E F} {x : E}
- (h : HasFpowerSeriesAt 0 p x) (n : β) : β y : E, (p n fun i => y) = 0 :=
+theorem HasFPowerSeriesAt.apply_eq_zero {p : FormalMultilinearSeries π E F} {x : E}
+ (h : HasFPowerSeriesAt 0 p x) (n : β) : β y : E, (p n fun i => y) = 0 :=
by
refine' Nat.strongRecOn n fun k hk => _
have psum_eq : p.partial_sum (k + 1) = fun y => p k fun i => y :=
@@ -999,60 +1013,60 @@ theorem HasFpowerSeriesAt.apply_eq_zero {p : FormalMultilinearSeries π E F} {
replace h := h.is_O_sub_partial_sum_pow k.succ
simp only [psum_eq, zero_sub, Pi.zero_apply, Asymptotics.isBigO_neg_left] at h
exact h.continuous_multilinear_map_apply_eq_zero
-#align has_fpower_series_at.apply_eq_zero HasFpowerSeriesAt.apply_eq_zero
+#align has_fpower_series_at.apply_eq_zero HasFPowerSeriesAt.apply_eq_zero
/-- A one-dimensional formal multilinear series representing the zero function is zero. -/
-theorem HasFpowerSeriesAt.eq_zero {p : FormalMultilinearSeries π π E} {x : π}
- (h : HasFpowerSeriesAt 0 p x) : p = 0 := by ext (n x);
+theorem HasFPowerSeriesAt.eq_zero {p : FormalMultilinearSeries π π E} {x : π}
+ (h : HasFPowerSeriesAt 0 p x) : p = 0 := by ext (n x);
rw [β mk_pi_field_apply_one_eq_self (p n)]; simp [h.apply_eq_zero n 1]
-#align has_fpower_series_at.eq_zero HasFpowerSeriesAt.eq_zero
+#align has_fpower_series_at.eq_zero HasFPowerSeriesAt.eq_zero
/-- One-dimensional formal multilinear series representing the same function are equal. -/
-theorem HasFpowerSeriesAt.eq_formalMultilinearSeries {pβ pβ : FormalMultilinearSeries π π E}
- {f : π β E} {x : π} (hβ : HasFpowerSeriesAt f pβ x) (hβ : HasFpowerSeriesAt f pβ x) : pβ = pβ :=
- sub_eq_zero.mp (HasFpowerSeriesAt.eq_zero (by simpa only [sub_self] using hβ.sub hβ))
-#align has_fpower_series_at.eq_formal_multilinear_series HasFpowerSeriesAt.eq_formalMultilinearSeries
-
-theorem HasFpowerSeriesAt.eq_formalMultilinearSeries_of_eventually
- {p q : FormalMultilinearSeries π π E} {f g : π β E} {x : π} (hp : HasFpowerSeriesAt f p x)
- (hq : HasFpowerSeriesAt g q x) (heq : βαΆ z in π x, f z = g z) : p = q :=
+theorem HasFPowerSeriesAt.eq_formalMultilinearSeries {pβ pβ : FormalMultilinearSeries π π E}
+ {f : π β E} {x : π} (hβ : HasFPowerSeriesAt f pβ x) (hβ : HasFPowerSeriesAt f pβ x) : pβ = pβ :=
+ sub_eq_zero.mp (HasFPowerSeriesAt.eq_zero (by simpa only [sub_self] using hβ.sub hβ))
+#align has_fpower_series_at.eq_formal_multilinear_series HasFPowerSeriesAt.eq_formalMultilinearSeries
+
+theorem HasFPowerSeriesAt.eq_formalMultilinearSeries_of_eventually
+ {p q : FormalMultilinearSeries π π E} {f g : π β E} {x : π} (hp : HasFPowerSeriesAt f p x)
+ (hq : HasFPowerSeriesAt g q x) (heq : βαΆ z in π x, f z = g z) : p = q :=
(hp.congr HEq).eq_formalMultilinearSeries hq
-#align has_fpower_series_at.eq_formal_multilinear_series_of_eventually HasFpowerSeriesAt.eq_formalMultilinearSeries_of_eventually
+#align has_fpower_series_at.eq_formal_multilinear_series_of_eventually HasFPowerSeriesAt.eq_formalMultilinearSeries_of_eventually
/-- A one-dimensional formal multilinear series representing a locally zero function is zero. -/
-theorem HasFpowerSeriesAt.eq_zero_of_eventually {p : FormalMultilinearSeries π π E} {f : π β E}
- {x : π} (hp : HasFpowerSeriesAt f p x) (hf : f =αΆ [π x] 0) : p = 0 :=
+theorem HasFPowerSeriesAt.eq_zero_of_eventually {p : FormalMultilinearSeries π π E} {f : π β E}
+ {x : π} (hp : HasFPowerSeriesAt f p x) (hf : f =αΆ [π x] 0) : p = 0 :=
(hp.congr hf).eq_zero
-#align has_fpower_series_at.eq_zero_of_eventually HasFpowerSeriesAt.eq_zero_of_eventually
+#align has_fpower_series_at.eq_zero_of_eventually HasFPowerSeriesAt.eq_zero_of_eventually
/-- If a function `f : π β E` has two power series representations at `x`, then the given radii in
which convergence is guaranteed may be interchanged. This can be useful when the formal multilinear
series in one representation has a particularly nice form, but the other has a larger radius. -/
-theorem HasFpowerSeriesOnBall.exchangeRadius {pβ pβ : FormalMultilinearSeries π π E} {f : π β E}
- {rβ rβ : ββ₯0β} {x : π} (hβ : HasFpowerSeriesOnBall f pβ x rβ)
- (hβ : HasFpowerSeriesOnBall f pβ x rβ) : HasFpowerSeriesOnBall f pβ x rβ :=
- hβ.HasFpowerSeriesAt.eq_formalMultilinearSeries hβ.HasFpowerSeriesAt βΈ hβ
-#align has_fpower_series_on_ball.exchange_radius HasFpowerSeriesOnBall.exchangeRadius
+theorem HasFPowerSeriesOnBall.exchange_radius {pβ pβ : FormalMultilinearSeries π π E} {f : π β E}
+ {rβ rβ : ββ₯0β} {x : π} (hβ : HasFPowerSeriesOnBall f pβ x rβ)
+ (hβ : HasFPowerSeriesOnBall f pβ x rβ) : HasFPowerSeriesOnBall f pβ x rβ :=
+ hβ.HasFPowerSeriesAt.eq_formalMultilinearSeries hβ.HasFPowerSeriesAt βΈ hβ
+#align has_fpower_series_on_ball.exchange_radius HasFPowerSeriesOnBall.exchange_radius
/-- If a function `f : π β E` has power series representation `p` on a ball of some radius and for
each positive radius it has some power series representation, then `p` converges to `f` on the whole
`π`. -/
-theorem HasFpowerSeriesOnBall.rEqTopOfExists {f : π β E} {r : ββ₯0β} {x : π}
- {p : FormalMultilinearSeries π π E} (h : HasFpowerSeriesOnBall f p x r)
+theorem HasFPowerSeriesOnBall.r_eq_top_of_exists {f : π β E} {r : ββ₯0β} {x : π}
+ {p : FormalMultilinearSeries π π E} (h : HasFPowerSeriesOnBall f p x r)
(h' :
β (r' : ββ₯0) (hr : 0 < r'),
- β p' : FormalMultilinearSeries π π E, HasFpowerSeriesOnBall f p' x r') :
- HasFpowerSeriesOnBall f p x β :=
+ β p' : FormalMultilinearSeries π π E, HasFPowerSeriesOnBall f p' x r') :
+ HasFPowerSeriesOnBall f p x β :=
{ r_le :=
ENNReal.le_of_forall_pos_nnreal_lt fun r hr hr' =>
let β¨p', hp'β© := h' r hr
- (h.exchangeRadius hp').r_le
+ (h.exchange_radius hp').r_le
r_pos := ENNReal.coe_lt_top
HasSum := fun y hy =>
let β¨r', hr'β© := exists_gt βyββ
let β¨p', hp'β© := h' r' hr'.ne_bot.bot_lt
- (h.exchangeRadius hp').HasSum <| mem_emetric_ball_zero_iff.mpr (ENNReal.coe_lt_coe.2 hr') }
-#align has_fpower_series_on_ball.r_eq_top_of_exists HasFpowerSeriesOnBall.rEqTopOfExists
+ (h.exchange_radius hp').HasSum <| mem_emetric_ball_zero_iff.mpr (ENNReal.coe_lt_coe.2 hr') }
+#align has_fpower_series_on_ball.r_eq_top_of_exists HasFPowerSeriesOnBall.r_eq_top_of_exists
end Uniqueness
@@ -1083,6 +1097,7 @@ section
variable (p : FormalMultilinearSeries π E F) {x y : E} {r R : ββ₯0}
+#print FormalMultilinearSeries.changeOriginSeriesTerm /-
/-- A term of `formal_multilinear_series.change_origin_series`.
Given a formal multilinear series `p` and a point `x` in its ball of convergence,
@@ -1098,6 +1113,7 @@ def changeOriginSeriesTerm (k l : β) (s : Finset (Fin (k + l))) (hs : s.card =
ContinuousMultilinearMap.curryFinFinset π E F hs
(by erw [Finset.card_compl, Fintype.card_fin, hs, add_tsub_cancel_right]) (p <| k + l)
#align formal_multilinear_series.change_origin_series_term FormalMultilinearSeries.changeOriginSeriesTerm
+-/
theorem changeOriginSeriesTerm_apply (k l : β) (s : Finset (Fin (k + l))) (hs : s.card = l)
(x y : E) :
@@ -1128,6 +1144,7 @@ theorem nnnorm_changeOriginSeriesTerm_apply_le (k l : β) (s : Finset (Fin (k +
apply ContinuousMultilinearMap.le_op_nnnorm
#align formal_multilinear_series.nnnorm_change_origin_series_term_apply_le FormalMultilinearSeries.nnnorm_changeOriginSeriesTerm_apply_le
+#print FormalMultilinearSeries.changeOriginSeries /-
/-- The power series for `f.change_origin k`.
Given a formal multilinear series `p` and a point `x` in its ball of convergence,
@@ -1137,6 +1154,7 @@ the series `p.change_origin_series k`. -/
def changeOriginSeries (k : β) : FormalMultilinearSeries π E (E[Γk]βL[π] F) := fun l =>
β s : { s : Finset (Fin (k + l)) // Finset.card s = l }, p.changeOriginSeriesTerm k l s s.2
#align formal_multilinear_series.change_origin_series FormalMultilinearSeries.changeOriginSeries
+-/
theorem nnnorm_changeOriginSeries_le_tsum (k l : β) :
βp.changeOriginSeries k lββ β€ β' x : { s : Finset (Fin (k + l)) // s.card = l }, βp (k + l)ββ :=
@@ -1152,12 +1170,15 @@ theorem nnnorm_changeOriginSeries_apply_le_tsum (k l : β) (x : E) :
(p.change_origin_series k l).le_of_op_nnnorm_le _ (p.nnnorm_change_origin_series_le_tsum _ _)
#align formal_multilinear_series.nnnorm_change_origin_series_apply_le_tsum FormalMultilinearSeries.nnnorm_changeOriginSeries_apply_le_tsum
+#print FormalMultilinearSeries.changeOrigin /-
/-- Changing the origin of a formal multilinear series `p`, so that
`p.sum (x+y) = (p.change_origin x).sum y` when this makes sense.
-/
def changeOrigin (x : E) : FormalMultilinearSeries π E F := fun k => (p.changeOriginSeries k).Sum x
#align formal_multilinear_series.change_origin FormalMultilinearSeries.changeOrigin
+-/
+#print FormalMultilinearSeries.changeOriginIndexEquiv /-
/-- An auxiliary equivalence useful in the proofs about
`formal_multilinear_series.change_origin_series`: the set of triples `(k, l, s)`, where `s` is a
`finset (fin (k + l))` of cardinality `l` is equivalent to the set of pairs `(n, s)`, where `s` is a
@@ -1197,8 +1218,9 @@ def changeOriginIndexEquiv :
rintro β¨n, sβ©
simp [tsub_add_cancel_of_le (card_finset_fin_le s), Fin.cast_to_equiv]
#align formal_multilinear_series.change_origin_index_equiv FormalMultilinearSeries.changeOriginIndexEquiv
+-/
-theorem change_origin_series_summable_auxβ {r r' : ββ₯0} (hr : (r + r' : ββ₯0β) < p.radius) :
+theorem changeOriginSeries_summable_auxβ {r r' : ββ₯0} (hr : (r + r' : ββ₯0β) < p.radius) :
Summable fun s : Ξ£ k l : β, { s : Finset (Fin (k + l)) // s.card = l } =>
βp (s.1 + s.2.1)ββ * r ^ s.2.1 * r' ^ s.1 :=
by
@@ -1219,16 +1241,16 @@ theorem change_origin_series_summable_auxβ {r r' : ββ₯0} (hr : (r + r' :
refine' NNReal.summable_sigma.2 β¨fun n => (this n).Summable, _β©
simp only [(this _).tsum_eq]
exact p.summable_nnnorm_mul_pow hr
-#align formal_multilinear_series.change_origin_series_summable_auxβ FormalMultilinearSeries.change_origin_series_summable_auxβ
+#align formal_multilinear_series.change_origin_series_summable_auxβ FormalMultilinearSeries.changeOriginSeries_summable_auxβ
-theorem change_origin_series_summable_auxβ (hr : (r : ββ₯0β) < p.radius) (k : β) :
+theorem changeOriginSeries_summable_auxβ (hr : (r : ββ₯0β) < p.radius) (k : β) :
Summable fun s : Ξ£ l : β, { s : Finset (Fin (k + l)) // s.card = l } =>
βp (k + s.1)ββ * r ^ s.1 :=
by
rcases ENNReal.lt_iff_exists_add_pos_lt.1 hr with β¨r', h0, hr'β©
simpa only [mul_inv_cancel_rightβ (pow_pos h0 _).ne'] using
((NNReal.summable_sigma.1 (p.change_origin_series_summable_auxβ hr')).1 k).mul_right (r' ^ k)β»ΒΉ
-#align formal_multilinear_series.change_origin_series_summable_auxβ FormalMultilinearSeries.change_origin_series_summable_auxβ
+#align formal_multilinear_series.change_origin_series_summable_auxβ FormalMultilinearSeries.changeOriginSeries_summable_auxβ
theorem changeOriginSeries_summable_auxβ {r : ββ₯0} (hr : βr < p.radius) (k : β) :
Summable fun l : β => βp.changeOriginSeries k lββ * r ^ l :=
@@ -1281,11 +1303,11 @@ end
-- in norm also converge in `F`.
variable [CompleteSpace F] (p : FormalMultilinearSeries π E F) {x y : E} {r R : ββ₯0}
-theorem hasFpowerSeriesOnBallChangeOrigin (k : β) (hr : 0 < p.radius) :
- HasFpowerSeriesOnBall (fun x => p.changeOrigin x k) (p.changeOriginSeries k) 0 p.radius :=
+theorem hasFPowerSeriesOnBall_changeOrigin (k : β) (hr : 0 < p.radius) :
+ HasFPowerSeriesOnBall (fun x => p.changeOrigin x k) (p.changeOriginSeries k) 0 p.radius :=
have := p.le_changeOriginSeries_radius k
- ((p.changeOriginSeries k).HasFpowerSeriesOnBall (hr.trans_le this)).mono hr this
-#align formal_multilinear_series.has_fpower_series_on_ball_change_origin FormalMultilinearSeries.hasFpowerSeriesOnBallChangeOrigin
+ ((p.changeOriginSeries k).HasFPowerSeriesOnBall (hr.trans_le this)).mono hr this
+#align formal_multilinear_series.has_fpower_series_on_ball_change_origin FormalMultilinearSeries.hasFPowerSeriesOnBall_changeOrigin
/-- Summing the series `p.change_origin x` at a point `y` gives back `p (x + y)`-/
theorem changeOrigin_eval (h : (βxββ + βyββ : ββ₯0β) < p.radius) :
@@ -1352,8 +1374,8 @@ variable [CompleteSpace F] {f : E β F} {p : FormalMultilinearSeries π E F}
/-- If a function admits a power series expansion `p` on a ball `B (x, r)`, then it also admits a
power series on any subball of this ball (even with a different center), given by `p.change_origin`.
-/
-theorem HasFpowerSeriesOnBall.changeOrigin (hf : HasFpowerSeriesOnBall f p x r)
- (h : (βyββ : ββ₯0β) < r) : HasFpowerSeriesOnBall f (p.changeOrigin y) (x + y) (r - βyββ) :=
+theorem HasFPowerSeriesOnBall.changeOrigin (hf : HasFPowerSeriesOnBall f p x r)
+ (h : (βyββ : ββ₯0β) < r) : HasFPowerSeriesOnBall f (p.changeOrigin y) (x + y) (r - βyββ) :=
{ r_le := by
apply le_trans _ p.change_origin_radius
exact tsub_le_tsub hf.r_le le_rfl
@@ -1366,22 +1388,22 @@ theorem HasFpowerSeriesOnBall.changeOrigin (hf : HasFpowerSeriesOnBall f p x r)
exact_mod_cast nnnorm_add_le y z
Β· refine' EMetric.ball_subset_ball (le_trans _ p.change_origin_radius) hz
exact tsub_le_tsub hf.r_le le_rfl }
-#align has_fpower_series_on_ball.change_origin HasFpowerSeriesOnBall.changeOrigin
+#align has_fpower_series_on_ball.change_origin HasFPowerSeriesOnBall.changeOrigin
/-- If a function admits a power series expansion `p` on an open ball `B (x, r)`, then
it is analytic at every point of this ball. -/
-theorem HasFpowerSeriesOnBall.analyticAt_of_mem (hf : HasFpowerSeriesOnBall f p x r)
+theorem HasFPowerSeriesOnBall.analyticAt_of_mem (hf : HasFPowerSeriesOnBall f p x r)
(h : y β EMetric.ball x r) : AnalyticAt π f y :=
by
have : (βy - xββ : ββ₯0β) < r := by simpa [edist_eq_coe_nnnorm_sub] using h
have := hf.change_origin this
rw [add_sub_cancel'_right] at this
exact this.analytic_at
-#align has_fpower_series_on_ball.analytic_at_of_mem HasFpowerSeriesOnBall.analyticAt_of_mem
+#align has_fpower_series_on_ball.analytic_at_of_mem HasFPowerSeriesOnBall.analyticAt_of_mem
-theorem HasFpowerSeriesOnBall.analyticOn (hf : HasFpowerSeriesOnBall f p x r) :
+theorem HasFPowerSeriesOnBall.analyticOn (hf : HasFPowerSeriesOnBall f p x r) :
AnalyticOn π f (EMetric.ball x r) := fun y hy => hf.analyticAt_of_mem hy
-#align has_fpower_series_on_ball.analytic_on HasFpowerSeriesOnBall.analyticOn
+#align has_fpower_series_on_ball.analytic_on HasFPowerSeriesOnBall.analyticOn
variable (π f)
@@ -1405,8 +1427,8 @@ variable {p : FormalMultilinearSeries π π E} {f : π β E} {zβ : π
/-- A function `f : π β E` has `p` as power series expansion at a point `zβ` iff it is the sum of
`p` in a neighborhood of `zβ`. This makes some proofs easier by hiding the fact that
`has_fpower_series_at` depends on `p.radius`. -/
-theorem hasFpowerSeriesAt_iff :
- HasFpowerSeriesAt f p zβ β βαΆ z in π 0, HasSum (fun n => z ^ n β’ p.coeff n) (f (zβ + z)) :=
+theorem hasFPowerSeriesAt_iff :
+ HasFPowerSeriesAt f p zβ β βαΆ z in π 0, HasSum (fun n => z ^ n β’ p.coeff n) (f (zβ + z)) :=
by
refine'
β¨fun β¨r, r_le, r_pos, hβ© =>
@@ -1429,17 +1451,17 @@ theorem hasFpowerSeriesAt_iff :
dist_zero_right] at h β’
refine' fun y hyp hyr => h _
simpa [nndist_eq_nnnorm, Real.lt_toNNReal_iff_coe_lt] using hyr
-#align has_fpower_series_at_iff hasFpowerSeriesAt_iff
+#align has_fpower_series_at_iff hasFPowerSeriesAt_iff
/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `congrm #[[expr Β«exprβαΆ in , Β»((z), (nhds() 0 : filter π), has_sum (Ξ» n, _) (f Β«expr + Β»(zβ, z)))]] -/
-theorem hasFpowerSeriesAt_iff' :
- HasFpowerSeriesAt f p zβ β βαΆ z in π zβ, HasSum (fun n => (z - zβ) ^ n β’ p.coeff n) (f z) :=
+theorem hasFPowerSeriesAt_iff' :
+ HasFPowerSeriesAt f p zβ β βαΆ z in π zβ, HasSum (fun n => (z - zβ) ^ n β’ p.coeff n) (f z) :=
by
- rw [β map_add_left_nhds_zero, eventually_map, hasFpowerSeriesAt_iff]
+ rw [β map_add_left_nhds_zero, eventually_map, hasFPowerSeriesAt_iff]
trace
"./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `congrm #[[expr Β«exprβαΆ in , Β»((z), (nhds() 0 : filter π), has_sum (Ξ» n, _) (f Β«expr + Β»(zβ, z)))]]"
rw [add_sub_cancel']
-#align has_fpower_series_at_iff' hasFpowerSeriesAt_iff'
+#align has_fpower_series_at_iff' hasFPowerSeriesAt_iff'
end
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -156,7 +156,7 @@ theorem le_radius_of_summable_nnnorm (h : Summable fun n => βp nββ * r ^ n
#align formal_multilinear_series.le_radius_of_summable_nnnorm FormalMultilinearSeries.le_radius_of_summable_nnnorm
theorem le_radius_of_summable (h : Summable fun n => βp nβ * r ^ n) : βr β€ p.radius :=
- p.le_radius_of_summable_nnnorm <| by simp only [β coe_nnnorm] at h; exact_mod_cast h
+ p.le_radius_of_summable_nnnorm <| by simp only [β coe_nnnorm] at h ; exact_mod_cast h
#align formal_multilinear_series.le_radius_of_summable FormalMultilinearSeries.le_radius_of_summable
theorem radius_eq_top_of_forall_nNReal_isBigO
@@ -188,11 +188,11 @@ theorem isLittleO_of_lt_radius (h : βr < p.radius) :
β a β Ioo (0 : β) 1, (fun n => βp nβ * r ^ n) =o[atTop] pow a :=
by
rw [(TFAE_exists_lt_isLittleO_pow (fun n => βp nβ * r ^ n) 1).out 1 4]
- simp only [radius, lt_iSup_iff] at h
+ simp only [radius, lt_iSup_iff] at h
rcases h with β¨t, C, hC, rtβ©
- rw [ENNReal.coe_lt_coe, β NNReal.coe_lt_coe] at rt
+ rw [ENNReal.coe_lt_coe, β NNReal.coe_lt_coe] at rt
have : 0 < (t : β) := r.coe_nonneg.trans_lt rt
- rw [β div_lt_one this] at rt
+ rw [β div_lt_one this] at rt
refine' β¨_, rt, C, Or.inr zero_lt_one, fun n => _β©
calc
|βp nβ * r ^ n| = βp nβ * t ^ n * (r / t) ^ n := by
@@ -225,12 +225,12 @@ theorem lt_radius_of_isBigO (hβ : r β 0) {a : β} (ha : a β Ioo (-1 : β
by
rcases((TFAE_exists_lt_isLittleO_pow (fun n => βp nβ * r ^ n) 1).out 2 5).mp β¨a, ha, hpβ© with
β¨a, ha, C, hC, hpβ©
- rw [β pos_iff_ne_zero, β NNReal.coe_pos] at hβ
+ rw [β pos_iff_ne_zero, β NNReal.coe_pos] at hβ
lift a to ββ₯0 using ha.1.le
have : (r : β) < r / a := by
simpa only [div_one] using (div_lt_div_left hβ zero_lt_one ha.1).2 ha.2
- norm_cast at this
- rw [β ENNReal.coe_lt_coe] at this
+ norm_cast at this
+ rw [β ENNReal.coe_lt_coe] at this
refine' this.trans_le (p.le_radius_of_bound C fun n => _)
rw [NNReal.coe_div, div_pow, β mul_div_assoc, div_le_iff (pow_pos ha.1 n)]
exact (le_abs_self _).trans (hp n)
@@ -284,7 +284,7 @@ theorem summable_norm_mul_pow (p : FormalMultilinearSeries π E F) {r : ββ₯
theorem summable_norm_apply (p : FormalMultilinearSeries π E F) {x : E}
(hx : x β EMetric.ball (0 : E) p.radius) : Summable fun n : β => βp n fun _ => xβ :=
by
- rw [mem_emetric_ball_zero_iff] at hx
+ rw [mem_emetric_ball_zero_iff] at hx
refine'
summable_of_nonneg_of_le (fun _ => norm_nonneg _) (fun n => ((p n).le_op_norm _).trans_eq _)
(p.summable_norm_mul_pow hx)
@@ -324,7 +324,7 @@ theorem radius_eq_top_iff_summable_norm (p : FormalMultilinearSeries π E F) :
/-- If the radius of `p` is positive, then `βpββ` grows at most geometrically. -/
theorem le_mul_pow_of_radius_pos (p : FormalMultilinearSeries π E F) (h : 0 < p.radius) :
- β (C r : _)(hC : 0 < C)(hr : 0 < r), β n, βp nβ β€ C * r ^ n :=
+ β (C r : _) (hC : 0 < C) (hr : 0 < r), β n, βp nβ β€ C * r ^ n :=
by
rcases ENNReal.lt_iff_exists_nnreal_btwn.1 h with β¨r, r0, rltβ©
have rpos : 0 < (r : β) := by simp [ENNReal.coe_pos.1 r0]
@@ -339,7 +339,7 @@ theorem min_radius_le_radius_add (p q : FormalMultilinearSeries π E F) :
min p.radius q.radius β€ (p + q).radius :=
by
refine' ENNReal.le_of_forall_nnreal_lt fun r hr => _
- rw [lt_min_iff] at hr
+ rw [lt_min_iff] at hr
have := ((p.is_o_one_of_lt_radius hr.1).add (q.is_o_one_of_lt_radius hr.2)).IsBigO
refine' (p + q).le_radius_of_isBigO ((is_O_of_le _ fun n => _).trans this)
rw [β add_mul, norm_mul, norm_mul, norm_norm]
@@ -379,7 +379,7 @@ variable {f g : E β F} {p pf pg : FormalMultilinearSeries π E F} {x : E} {r
a power series on the ball of radius `r > 0` around `x` if `f (x + y) = β' pβ yβΏ` for all `βyβ < r`.
-/
structure HasFpowerSeriesOnBall (f : E β F) (p : FormalMultilinearSeries π E F) (x : E) (r : ββ₯0β) :
- Prop where
+ Prop where
r_le : r β€ p.radius
r_pos : 0 < r
HasSum :
@@ -650,7 +650,7 @@ theorem HasFpowerSeriesOnBall.uniform_geometric_approx' {r' : ββ₯0}
obtain β¨a, ha, C, hC, hpβ© : β a β Ioo (0 : β) 1, β C > 0, β n, βp nβ * r' ^ n β€ C * a ^ n :=
p.norm_mul_pow_le_mul_pow_of_lt_radius (h.trans_le hf.r_le)
refine' β¨a, ha, C / (1 - a), div_pos hC (sub_pos.2 ha.2), fun y hy n => _β©
- have yr' : βyβ < r' := by rw [ball_zero_eq] at hy; exact hy
+ have yr' : βyβ < r' := by rw [ball_zero_eq] at hy ; exact hy
have hr'0 : 0 < (r' : β) := (norm_nonneg _).trans_lt yr'
have : y β EMetric.ball (0 : E) r :=
by
@@ -690,9 +690,9 @@ theorem HasFpowerSeriesOnBall.uniform_geometric_approx {r' : ββ₯0}
β n, βf (x + y) - p.partial_sum n yβ β€ C * (a * (βyβ / r')) ^ n
exact hf.uniform_geometric_approx' h
refine' β¨a, ha, C, hC, fun y hy n => (hp y hy n).trans _β©
- have yr' : βyβ < r' := by rwa [ball_zero_eq] at hy
+ have yr' : βyβ < r' := by rwa [ball_zero_eq] at hy
refine' mul_le_mul_of_nonneg_left (pow_le_pow_of_le_left _ _ _) hC.lt.le
- exacts[mul_nonneg ha.1.le (div_nonneg (norm_nonneg y) r'.coe_nonneg),
+ exacts [mul_nonneg ha.1.le (div_nonneg (norm_nonneg y) r'.coe_nonneg),
mul_le_of_le_one_right ha.1.le (div_le_one_of_le yr'.le r'.coe_nonneg)]
#align has_fpower_series_on_ball.uniform_geometric_approx HasFpowerSeriesOnBall.uniform_geometric_approx
@@ -730,7 +730,7 @@ theorem HasFpowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
obtain β¨a, ha, C, hC : 0 < C, hpβ© :
β a β Ioo (0 : β) 1, β C > 0, β n : β, βp nβ * βr' ^ n β€ C * a ^ n
exact p.norm_mul_pow_le_mul_pow_of_lt_radius (hr.trans_le hf.r_le)
- simp only [β le_div_iff (pow_pos (NNReal.coe_pos.2 hr'0) _)] at hp
+ simp only [β le_div_iff (pow_pos (NNReal.coe_pos.2 hr'0) _)] at hp
set L : E Γ E β β := fun y =>
C * (a / r') ^ 2 * (βy - (x, x)β * βy.1 - y.2β) * (a / (1 - a) ^ 2 + 2 / (1 - a))
have hL : β y β EMetric.ball (x, x) r', βf y.1 - f y.2 - p 1 fun _ => y.1 - y.2β β€ L y :=
@@ -746,7 +746,7 @@ theorem HasFpowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
zero_add, β Subsingleton.pi_single_eq (0 : Fin 1) (y.1 - x), Pi.single, β
Subsingleton.pi_single_eq (0 : Fin 1) (y.2 - x), Pi.single, β (p 1).map_sub, β Pi.single,
Subsingleton.pi_single_eq, sub_sub_sub_cancel_right]
- rw [EMetric.mem_ball, edist_eq_coe_nnnorm_sub, ENNReal.coe_lt_coe] at hy'
+ rw [EMetric.mem_ball, edist_eq_coe_nnnorm_sub, ENNReal.coe_lt_coe] at hy'
set B : β β β := fun n => C * (a / r') ^ 2 * (βy - (x, x)β * βy.1 - y.2β) * ((n + 2) * a ^ n)
have hAB : β n, βA (n + 2)β β€ B n := fun n =>
calc
@@ -760,7 +760,7 @@ theorem HasFpowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
apply_rules [mul_le_mul_of_nonneg_right, mul_le_mul, hp, pow_le_pow_of_le_left, hy'.le,
norm_nonneg, pow_nonneg, div_nonneg, mul_nonneg, Nat.cast_nonneg, hC.le, r'.coe_nonneg,
ha.1.le]
- _ = B n := by field_simp [B, pow_succ, hr'0.ne'] ;
+ _ = B n := by field_simp [B, pow_succ, hr'0.ne'];
simp only [mul_assoc, mul_comm, mul_left_comm]
have hBL : HasSum B (L y) := by
@@ -822,7 +822,7 @@ theorem HasFpowerSeriesOnBall.tendstoUniformlyOn {r' : ββ₯0} (hf : HasFpowerS
refine' Metric.tendstoUniformlyOn_iff.2 fun Ξ΅ Ξ΅pos => _
have L : tendsto (fun n => (C : β) * a ^ n) at_top (π ((C : β) * 0)) :=
tendsto_const_nhds.mul (tendsto_pow_atTop_nhds_0_of_lt_1 ha.1.le ha.2)
- rw [MulZeroClass.mul_zero] at L
+ rw [MulZeroClass.mul_zero] at L
refine' (L.eventually (gt_mem_nhds Ξ΅pos)).mono fun n hn y hy => _
rw [dist_eq_norm]
exact (hp y hy n).trans_lt hn
@@ -997,7 +997,7 @@ theorem HasFpowerSeriesAt.apply_eq_zero {p : FormalMultilinearSeries π E F} {
simp only [hk b (this.lt_of_ne hnb), Pi.zero_apply, zero_apply]
Β· exact False.elim (hn (finset.mem_range.mpr (lt_add_one k)))
replace h := h.is_O_sub_partial_sum_pow k.succ
- simp only [psum_eq, zero_sub, Pi.zero_apply, Asymptotics.isBigO_neg_left] at h
+ simp only [psum_eq, zero_sub, Pi.zero_apply, Asymptotics.isBigO_neg_left] at h
exact h.continuous_multilinear_map_apply_eq_zero
#align has_fpower_series_at.apply_eq_zero HasFpowerSeriesAt.apply_eq_zero
@@ -1168,7 +1168,7 @@ The forward map sends `(k, l, s)` to `(k + l, s)` and the inverse map sends `(n,
with non-definitional equalities. -/
@[simps]
def changeOriginIndexEquiv :
- (Ξ£k l : β, { s : Finset (Fin (k + l)) // s.card = l }) β Ξ£n : β, Finset (Fin n)
+ (Ξ£ k l : β, { s : Finset (Fin (k + l)) // s.card = l }) β Ξ£ n : β, Finset (Fin n)
where
toFun s := β¨s.1 + s.2.1, s.2.2β©
invFun s :=
@@ -1187,7 +1187,7 @@ def changeOriginIndexEquiv :
l' = l β
β (hkl : k + l = k' + l') (hs'),
(β¨k', l', β¨Finset.map (Fin.cast hkl).toEquiv.toEmbedding s, hs'β©β© :
- Ξ£k l : β, { s : Finset (Fin (k + l)) // s.card = l }) =
+ Ξ£ k l : β, { s : Finset (Fin (k + l)) // s.card = l }) =
β¨k, l, β¨s, hsβ©β©
by apply this <;> simp only [hs, add_tsub_cancel_right]
rintro _ _ rfl rfl hkl hs'
@@ -1199,7 +1199,7 @@ def changeOriginIndexEquiv :
#align formal_multilinear_series.change_origin_index_equiv FormalMultilinearSeries.changeOriginIndexEquiv
theorem change_origin_series_summable_auxβ {r r' : ββ₯0} (hr : (r + r' : ββ₯0β) < p.radius) :
- Summable fun s : Ξ£k l : β, { s : Finset (Fin (k + l)) // s.card = l } =>
+ Summable fun s : Ξ£ k l : β, { s : Finset (Fin (k + l)) // s.card = l } =>
βp (s.1 + s.2.1)ββ * r ^ s.2.1 * r' ^ s.1 :=
by
rw [β change_origin_index_equiv.symm.summable_iff]
@@ -1222,7 +1222,7 @@ theorem change_origin_series_summable_auxβ {r r' : ββ₯0} (hr : (r + r' :
#align formal_multilinear_series.change_origin_series_summable_auxβ FormalMultilinearSeries.change_origin_series_summable_auxβ
theorem change_origin_series_summable_auxβ (hr : (r : ββ₯0β) < p.radius) (k : β) :
- Summable fun s : Ξ£l : β, { s : Finset (Fin (k + l)) // s.card = l } =>
+ Summable fun s : Ξ£ l : β, { s : Finset (Fin (k + l)) // s.card = l } =>
βp (k + s.1)ββ * r ^ s.1 :=
by
rcases ENNReal.lt_iff_exists_add_pos_lt.1 hr with β¨r', h0, hr'β©
@@ -1247,7 +1247,7 @@ theorem le_changeOriginSeries_radius (k : β) : p.radius β€ (p.changeOriginSer
theorem nnnorm_changeOrigin_le (k : β) (h : (βxββ : ββ₯0β) < p.radius) :
βp.changeOrigin x kββ β€
- β' s : Ξ£l : β, { s : Finset (Fin (k + l)) // s.card = l }, βp (k + s.1)ββ * βxββ ^ s.1 :=
+ β' s : Ξ£ l : β, { s : Finset (Fin (k + l)) // s.card = l }, βp (k + s.1)ββ * βxββ ^ s.1 :=
by
refine' tsum_of_nnnorm_bounded _ fun l => p.nnnorm_change_origin_series_apply_le_tsum k l x
have := p.change_origin_series_summable_auxβ h k
@@ -1261,13 +1261,13 @@ convergence.-/
theorem changeOrigin_radius : p.radius - βxββ β€ (p.changeOrigin x).radius :=
by
refine' ENNReal.le_of_forall_pos_nnreal_lt fun r h0 hr => _
- rw [lt_tsub_iff_right, add_comm] at hr
+ rw [lt_tsub_iff_right, add_comm] at hr
have hr' : (βxββ : ββ₯0β) < p.radius := (le_add_right le_rfl).trans_lt hr
apply le_radius_of_summable_nnnorm
have :
β k : β,
βp.change_origin x kββ * r ^ k β€
- (β' s : Ξ£l : β, { s : Finset (Fin (k + l)) // s.card = l }, βp (k + s.1)ββ * βxββ ^ s.1) *
+ (β' s : Ξ£ l : β, { s : Finset (Fin (k + l)) // s.card = l }, βp (k + s.1)ββ * βxββ ^ s.1) *
r ^ k :=
fun k => mul_le_mul_right' (p.nnnorm_change_origin_le k hr') (r ^ k)
refine' NNReal.summable_of_le this _
@@ -1302,7 +1302,7 @@ theorem changeOrigin_eval (h : (βxββ + βyββ : ββ₯0β) < p.radius
by
refine' mem_emetric_ball_zero_iff.2 (lt_of_le_of_lt _ h)
exact_mod_cast nnnorm_add_le x y
- set f : (Ξ£k l : β, { s : Finset (Fin (k + l)) // s.card = l }) β F := fun s =>
+ set f : (Ξ£ k l : β, { s : Finset (Fin (k + l)) // s.card = l }) β F := fun s =>
p.change_origin_series_term s.1 s.2.1 s.2.2 s.2.2.2 (fun _ => x) fun _ => y
have hsf : Summable f :=
by
@@ -1315,7 +1315,7 @@ theorem changeOrigin_eval (h : (βxββ + βyββ : ββ₯0β) < p.radius
Β· dsimp only [f]
refine' ContinuousMultilinearMap.hasSum_eval _ _
have := (p.has_fpower_series_on_ball_change_origin k radius_pos).HasSum x_mem_ball
- rw [zero_add] at this
+ rw [zero_add] at this
refine' HasSum.sigma_of_hasSum this (fun l => _) _
Β· simp only [change_origin_series, ContinuousMultilinearMap.sum_apply]
apply hasSum_fintype
@@ -1360,7 +1360,7 @@ theorem HasFpowerSeriesOnBall.changeOrigin (hf : HasFpowerSeriesOnBall f p x r)
r_pos := by simp [h]
HasSum := fun z hz => by
convert(p.change_origin y).HasSum _
- Β· rw [mem_emetric_ball_zero_iff, lt_tsub_iff_right, add_comm] at hz
+ Β· rw [mem_emetric_ball_zero_iff, lt_tsub_iff_right, add_comm] at hz
rw [p.change_origin_eval (hz.trans_le hf.r_le), add_assoc, hf.sum]
refine' mem_emetric_ball_zero_iff.2 (lt_of_le_of_lt _ hz)
exact_mod_cast nnnorm_add_le y z
@@ -1375,7 +1375,7 @@ theorem HasFpowerSeriesOnBall.analyticAt_of_mem (hf : HasFpowerSeriesOnBall f p
by
have : (βy - xββ : ββ₯0β) < r := by simpa [edist_eq_coe_nnnorm_sub] using h
have := hf.change_origin this
- rw [add_sub_cancel'_right] at this
+ rw [add_sub_cancel'_right] at this
exact this.analytic_at
#align has_fpower_series_on_ball.analytic_at_of_mem HasFpowerSeriesOnBall.analyticAt_of_mem
@@ -1418,7 +1418,7 @@ theorem hasFpowerSeriesAt_iff :
obtain β¨z, z_pos, le_zβ© := NormedField.exists_norm_lt π r_pos.lt
have : (βzββ : ENNReal) β€ p.radius :=
by
- simp only [dist_zero_right] at h
+ simp only [dist_zero_right] at h
apply FormalMultilinearSeries.le_radius_of_tendsto
convert tendsto_norm.comp (h le_z).Summable.tendsto_atTop_zero
funext <;> simp [norm_smul, mul_comm]
@@ -1426,7 +1426,7 @@ theorem hasFpowerSeriesAt_iff :
simp only [ENNReal.coe_pos]
exact zero_lt_iff.mpr (nnnorm_ne_zero_iff.mpr (norm_pos_iff.mp z_pos))
Β· simp only [EMetric.mem_ball, lt_inf_iff, edist_lt_coe, apply_eq_pow_smul_coeff, and_imp,
- dist_zero_right] at hβ’
+ dist_zero_right] at h β’
refine' fun y hyp hyr => h _
simpa [nndist_eq_nnnorm, Real.lt_toNNReal_iff_coe_lt] using hyr
#align has_fpower_series_at_iff hasFpowerSeriesAt_iff
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -78,7 +78,7 @@ noncomputable section
variable {π E F G : Type _}
-open Topology Classical BigOperators NNReal Filter ENNReal
+open scoped Topology Classical BigOperators NNReal Filter ENNReal
open Set Filter Asymptotics
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -156,9 +156,7 @@ theorem le_radius_of_summable_nnnorm (h : Summable fun n => βp nββ * r ^ n
#align formal_multilinear_series.le_radius_of_summable_nnnorm FormalMultilinearSeries.le_radius_of_summable_nnnorm
theorem le_radius_of_summable (h : Summable fun n => βp nβ * r ^ n) : βr β€ p.radius :=
- p.le_radius_of_summable_nnnorm <| by
- simp only [β coe_nnnorm] at h
- exact_mod_cast h
+ p.le_radius_of_summable_nnnorm <| by simp only [β coe_nnnorm] at h; exact_mod_cast h
#align formal_multilinear_series.le_radius_of_summable FormalMultilinearSeries.le_radius_of_summable
theorem radius_eq_top_of_forall_nNReal_isBigO
@@ -294,10 +292,7 @@ theorem summable_norm_apply (p : FormalMultilinearSeries π E F) {x : E}
#align formal_multilinear_series.summable_norm_apply FormalMultilinearSeries.summable_norm_apply
theorem summable_nnnorm_mul_pow (p : FormalMultilinearSeries π E F) {r : ββ₯0} (h : βr < p.radius) :
- Summable fun n : β => βp nββ * r ^ n :=
- by
- rw [β NNReal.summable_coe]
- push_cast
+ Summable fun n : β => βp nββ * r ^ n := by rw [β NNReal.summable_coe]; push_cast ;
exact p.summable_norm_mul_pow h
#align formal_multilinear_series.summable_nnnorm_mul_pow FormalMultilinearSeries.summable_nnnorm_mul_pow
@@ -442,9 +437,7 @@ theorem HasFpowerSeriesOnBall.compSub (hf : HasFpowerSeriesOnBall f p x r) (y :
HasFpowerSeriesOnBall (fun z => f (z - y)) p (x + y) r :=
{ r_le := hf.r_le
r_pos := hf.r_pos
- HasSum := fun z hz => by
- convert hf.has_sum hz
- abel }
+ HasSum := fun z hz => by convert hf.has_sum hz; abel }
#align has_fpower_series_on_ball.comp_sub HasFpowerSeriesOnBall.compSub
theorem HasFpowerSeriesOnBall.hasSum_sub (hf : HasFpowerSeriesOnBall f p x r) {y : E}
@@ -560,9 +553,7 @@ theorem AnalyticAt.add (hf : AnalyticAt π f x) (hg : AnalyticAt π g x) : A
theorem HasFpowerSeriesOnBall.neg (hf : HasFpowerSeriesOnBall f pf x r) :
HasFpowerSeriesOnBall (-f) (-pf) x r :=
- { r_le := by
- rw [pf.radius_neg]
- exact hf.r_le
+ { r_le := by rw [pf.radius_neg]; exact hf.r_le
r_pos := hf.r_pos
HasSum := fun y hy => (hf.HasSum hy).neg }
#align has_fpower_series_on_ball.neg HasFpowerSeriesOnBall.neg
@@ -659,9 +650,7 @@ theorem HasFpowerSeriesOnBall.uniform_geometric_approx' {r' : ββ₯0}
obtain β¨a, ha, C, hC, hpβ© : β a β Ioo (0 : β) 1, β C > 0, β n, βp nβ * r' ^ n β€ C * a ^ n :=
p.norm_mul_pow_le_mul_pow_of_lt_radius (h.trans_le hf.r_le)
refine' β¨a, ha, C / (1 - a), div_pos hC (sub_pos.2 ha.2), fun y hy n => _β©
- have yr' : βyβ < r' := by
- rw [ball_zero_eq] at hy
- exact hy
+ have yr' : βyβ < r' := by rw [ball_zero_eq] at hy; exact hy
have hr'0 : 0 < (r' : β) := (norm_nonneg _).trans_lt yr'
have : y β EMetric.ball (0 : E) r :=
by
@@ -747,9 +736,7 @@ theorem HasFpowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
have hL : β y β EMetric.ball (x, x) r', βf y.1 - f y.2 - p 1 fun _ => y.1 - y.2β β€ L y :=
by
intro y hy'
- have hy : y β EMetric.ball x r ΓΛ’ EMetric.ball x r :=
- by
- rw [EMetric.ball_prod_same]
+ have hy : y β EMetric.ball x r ΓΛ’ EMetric.ball x r := by rw [EMetric.ball_prod_same];
exact EMetric.ball_subset_ball hr.le hy'
set A : β β F := fun n => (p n fun _ => y.1 - x) - p n fun _ => y.2 - x
have hA : HasSum (fun n => A (n + 2)) (f y.1 - f y.2 - p 1 fun _ => y.1 - y.2) :=
@@ -767,16 +754,13 @@ theorem HasFpowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
simpa only [Fintype.card_fin, pi_norm_const (_ : E), Prod.norm_def, Pi.sub_def,
Prod.fst_sub, Prod.snd_sub, sub_sub_sub_cancel_right] using
(p <| n + 2).norm_image_sub_le (fun _ => y.1 - x) fun _ => y.2 - x
- _ = βp (n + 2)β * βy - (x, x)β ^ n * (β(n + 2) * βy - (x, x)β * βy.1 - y.2β) :=
- by
- rw [pow_succ βy - (x, x)β]
- ring
+ _ = βp (n + 2)β * βy - (x, x)β ^ n * (β(n + 2) * βy - (x, x)β * βy.1 - y.2β) := by
+ rw [pow_succ βy - (x, x)β]; ring
_ β€ C * a ^ (n + 2) / r' ^ (n + 2) * r' ^ n * (β(n + 2) * βy - (x, x)β * βy.1 - y.2β) := by
apply_rules [mul_le_mul_of_nonneg_right, mul_le_mul, hp, pow_le_pow_of_le_left, hy'.le,
norm_nonneg, pow_nonneg, div_nonneg, mul_nonneg, Nat.cast_nonneg, hC.le, r'.coe_nonneg,
ha.1.le]
- _ = B n := by
- field_simp [B, pow_succ, hr'0.ne']
+ _ = B n := by field_simp [B, pow_succ, hr'0.ne'] ;
simp only [mul_assoc, mul_comm, mul_left_comm]
have hBL : HasSum B (L y) := by
@@ -867,8 +851,7 @@ theorem HasFpowerSeriesOnBall.tendsto_uniformly_on' {r' : ββ₯0} (hf : HasFpow
by
convert(hf.tendsto_uniformly_on h).comp fun y => y - x
Β· simp [(Β· β Β·)]
- Β· ext z
- simp [dist_eq_norm]
+ Β· ext z; simp [dist_eq_norm]
#align has_fpower_series_on_ball.tendsto_uniformly_on' HasFpowerSeriesOnBall.tendsto_uniformly_on'
/-- If a function admits a power series expansion at `x`, then it is the locally uniform limit of
@@ -881,10 +864,8 @@ theorem HasFpowerSeriesOnBall.tendsto_locally_uniformly_on' (hf : HasFpowerSerie
have A : ContinuousOn (fun y : E => y - x) (EMetric.ball (x : E) r) :=
(continuous_id.sub continuous_const).ContinuousOn
convert hf.tendsto_locally_uniformly_on.comp (fun y : E => y - x) _ A
- Β· ext z
- simp
- Β· intro z
- simp [edist_eq_coe_nnnorm, edist_eq_coe_nnnorm_sub]
+ Β· ext z; simp
+ Β· intro z; simp [edist_eq_coe_nnnorm, edist_eq_coe_nnnorm_sub]
#align has_fpower_series_on_ball.tendsto_locally_uniformly_on' HasFpowerSeriesOnBall.tendsto_locally_uniformly_on'
/-- If a function admits a power series expansion on a disk, then it is continuous there. -/
@@ -917,9 +898,7 @@ protected theorem FormalMultilinearSeries.hasFpowerSeriesOnBall [CompleteSpace F
HasFpowerSeriesOnBall p.Sum p 0 p.radius :=
{ r_le := le_rfl
r_pos := h
- HasSum := fun y hy => by
- rw [zero_add]
- exact p.has_sum hy }
+ HasSum := fun y hy => by rw [zero_add]; exact p.has_sum hy }
#align formal_multilinear_series.has_fpower_series_on_ball FormalMultilinearSeries.hasFpowerSeriesOnBall
theorem HasFpowerSeriesOnBall.sum (h : HasFpowerSeriesOnBall f p x r) {y : E}
@@ -985,11 +964,8 @@ theorem Asymptotics.IsBigO.continuousMultilinearMap_apply_eq_zero {n : β} {p :
calc
βp fun i => k β’ yβ β€ c * βk β’ yβ ^ (n.succ + 1) := by
simpa only [norm_pow, norm_norm] using ht (k β’ y) (δΡ (mem_ball_zero_iff.mpr hβ))
- _ = βkβ ^ n.succ * (βkβ * (c * βyβ ^ (n.succ + 1))) :=
- by
- simp only [norm_smul, mul_pow]
- rw [pow_succ]
- ring
+ _ = βkβ ^ n.succ * (βkβ * (c * βyβ ^ (n.succ + 1))) := by simp only [norm_smul, mul_pow];
+ rw [pow_succ]; ring
have hβ : βkβ * (c * βyβ ^ (n.succ + 1)) < Ξ΅ :=
inv_mul_cancel_rightβ hβ.ne.symm Ξ΅ βΈ
@@ -1001,13 +977,9 @@ theorem Asymptotics.IsBigO.continuousMultilinearMap_apply_eq_zero {n : β} {p :
congr_arg norm (p.map_smul_univ (fun i : Fin n.succ => kβ»ΒΉ) fun i : Fin n.succ => k β’ y)
_ β€ βkβ»ΒΉ ^ n.succβ * (βkβ ^ n.succ * (βkβ * (c * βyβ ^ (n.succ + 1)))) :=
(mul_le_mul_of_nonneg_left hβ (norm_nonneg _))
- _ = β(kβ»ΒΉ * k) ^ n.succβ * (βkβ * (c * βyβ ^ (n.succ + 1))) :=
- by
- rw [β mul_assoc]
+ _ = β(kβ»ΒΉ * k) ^ n.succβ * (βkβ * (c * βyβ ^ (n.succ + 1))) := by rw [β mul_assoc];
simp [norm_mul, mul_pow]
- _ β€ 0 + Ξ΅ := by
- rw [inv_mul_cancel (norm_pos_iff.mp k_pos)]
- simpa using hβ.le
+ _ β€ 0 + Ξ΅ := by rw [inv_mul_cancel (norm_pos_iff.mp k_pos)]; simpa using hβ.le
#align asymptotics.is_O.continuous_multilinear_map_apply_eq_zero Asymptotics.IsBigO.continuousMultilinearMap_apply_eq_zero
@@ -1031,10 +1003,8 @@ theorem HasFpowerSeriesAt.apply_eq_zero {p : FormalMultilinearSeries π E F} {
/-- A one-dimensional formal multilinear series representing the zero function is zero. -/
theorem HasFpowerSeriesAt.eq_zero {p : FormalMultilinearSeries π π E} {x : π}
- (h : HasFpowerSeriesAt 0 p x) : p = 0 := by
- ext (n x)
- rw [β mk_pi_field_apply_one_eq_self (p n)]
- simp [h.apply_eq_zero n 1]
+ (h : HasFpowerSeriesAt 0 p x) : p = 0 := by ext (n x);
+ rw [β mk_pi_field_apply_one_eq_self (p n)]; simp [h.apply_eq_zero n 1]
#align has_fpower_series_at.eq_zero HasFpowerSeriesAt.eq_zero
/-- One-dimensional formal multilinear series representing the same function are equal. -/
@@ -1243,8 +1213,7 @@ theorem change_origin_series_summable_auxβ {r r' : ββ₯0} (hr : (r + r' :
intro n
-- TODO: why `simp only [tsub_add_cancel_of_le (card_finset_fin_le _)]` fails?
convert_to HasSum (fun s : Finset (Fin n) => βp nββ * (r ^ s.card * r' ^ (n - s.card))) _
- Β· ext1 s
- rw [tsub_add_cancel_of_le (card_finset_fin_le _), mul_assoc]
+ Β· ext1 s; rw [tsub_add_cancel_of_le (card_finset_fin_le _), mul_assoc]
rw [β Fin.sum_pow_mul_eq_add_pow]
exact (hasSum_fintype _).mul_left _
refine' NNReal.summable_sigma.2 β¨fun n => (this n).Summable, _β©
@@ -1338,8 +1307,7 @@ theorem changeOrigin_eval (h : (βxββ + βyββ : ββ₯0β) < p.radius
have hsf : Summable f :=
by
refine' summable_of_nnnorm_bounded _ (p.change_origin_series_summable_auxβ h) _
- rintro β¨k, l, s, hsβ©
- dsimp only [Subtype.coe_mk]
+ rintro β¨k, l, s, hsβ©; dsimp only [Subtype.coe_mk]
exact p.nnnorm_change_origin_series_term_apply_le _ _ _ _ _ _
have hf : HasSum f ((p.change_origin x).Sum y) :=
by
@@ -1371,9 +1339,7 @@ theorem changeOrigin_eval (h : (βxββ + βyββ : ββ₯0β) < p.radius
β (m) (hm : n = m),
p n (s.piecewise (fun _ => x) fun _ => y) =
p m ((s.map (Fin.cast hm).toEquiv.toEmbedding).piecewise (fun _ => x) fun _ => y) :=
- by
- rintro m rfl
- simp
+ by rintro m rfl; simp
apply this
#align formal_multilinear_series.change_origin_eval FormalMultilinearSeries.changeOrigin_eval
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -131,7 +131,7 @@ def radius (p : FormalMultilinearSeries π E F) : ββ₯0β :=
/-- If `βpββ rβΏ` is bounded in `n`, then the radius of `p` is at least `r`. -/
theorem le_radius_of_bound (C : β) {r : ββ₯0} (h : β n : β, βp nβ * r ^ n β€ C) :
(r : ββ₯0β) β€ p.radius :=
- le_supα΅’_of_le r <| le_supα΅’_of_le C <| le_supα΅’ (fun _ => (r : ββ₯0β)) h
+ le_iSup_of_le r <| le_iSup_of_le C <| le_iSup (fun _ => (r : ββ₯0β)) h
#align formal_multilinear_series.le_radius_of_bound FormalMultilinearSeries.le_radius_of_bound
/-- If `βpββ rβΏ` is bounded in `n`, then the radius of `p` is at least `r`. -/
@@ -190,7 +190,7 @@ theorem isLittleO_of_lt_radius (h : βr < p.radius) :
β a β Ioo (0 : β) 1, (fun n => βp nβ * r ^ n) =o[atTop] pow a :=
by
rw [(TFAE_exists_lt_isLittleO_pow (fun n => βp nβ * r ^ n) 1).out 1 4]
- simp only [radius, lt_supα΅’_iff] at h
+ simp only [radius, lt_iSup_iff] at h
rcases h with β¨t, C, hC, rtβ©
rw [ENNReal.coe_lt_coe, β NNReal.coe_lt_coe] at rt
have : 0 < (t : β) := r.coe_nonneg.trans_lt rt
mathlib commit https://github.com/leanprover-community/mathlib/commit/08e1d8d4d989df3a6df86f385e9053ec8a372cc1
@@ -189,7 +189,7 @@ for some `0 < a < 1`, `βp nβ rβΏ = o(aβΏ)`. -/
theorem isLittleO_of_lt_radius (h : βr < p.radius) :
β a β Ioo (0 : β) 1, (fun n => βp nβ * r ^ n) =o[atTop] pow a :=
by
- rw [(tFAE_exists_lt_isLittleO_pow (fun n => βp nβ * r ^ n) 1).out 1 4]
+ rw [(TFAE_exists_lt_isLittleO_pow (fun n => βp nβ * r ^ n) 1).out 1 4]
simp only [radius, lt_supα΅’_iff] at h
rcases h with β¨t, C, hC, rtβ©
rw [ENNReal.coe_lt_coe, β NNReal.coe_lt_coe] at rt
@@ -215,7 +215,7 @@ for some `0 < a < 1` and `C > 0`, `βp nβ * r ^ n β€ C * a ^ n`. -/
theorem norm_mul_pow_le_mul_pow_of_lt_radius (h : βr < p.radius) :
β a β Ioo (0 : β) 1, β C > 0, β n, βp nβ * r ^ n β€ C * a ^ n :=
by
- rcases((tFAE_exists_lt_isLittleO_pow (fun n => βp nβ * r ^ n) 1).out 1 5).mp
+ rcases((TFAE_exists_lt_isLittleO_pow (fun n => βp nβ * r ^ n) 1).out 1 5).mp
(p.is_o_of_lt_radius h) with
β¨a, ha, C, hC, Hβ©
exact β¨a, ha, C, hC, fun n => (le_abs_self _).trans (H n)β©
@@ -225,7 +225,7 @@ theorem norm_mul_pow_le_mul_pow_of_lt_radius (h : βr < p.radius) :
theorem lt_radius_of_isBigO (hβ : r β 0) {a : β} (ha : a β Ioo (-1 : β) 1)
(hp : (fun n => βp nβ * r ^ n) =O[atTop] pow a) : βr < p.radius :=
by
- rcases((tFAE_exists_lt_isLittleO_pow (fun n => βp nβ * r ^ n) 1).out 2 5).mp β¨a, ha, hpβ© with
+ rcases((TFAE_exists_lt_isLittleO_pow (fun n => βp nβ * r ^ n) 1).out 2 5).mp β¨a, ha, hpβ© with
β¨a, ha, C, hC, hpβ©
rw [β pos_iff_ne_zero, β NNReal.coe_pos] at hβ
lift a to ββ₯0 using ha.1.le
mathlib commit https://github.com/leanprover-community/mathlib/commit/039ef89bef6e58b32b62898dd48e9d1a4312bb65
@@ -141,14 +141,14 @@ theorem le_radius_of_bound_nNReal (C : ββ₯0) {r : ββ₯0} (h : β n : β,
#align formal_multilinear_series.le_radius_of_bound_nnreal FormalMultilinearSeries.le_radius_of_bound_nNReal
/-- If `βpββ rβΏ = O(1)`, as `n β β`, then the radius of `p` is at least `r`. -/
-theorem le_radius_of_isO (h : (fun n => βp nβ * r ^ n) =O[atTop] fun n => (1 : β)) :
+theorem le_radius_of_isBigO (h : (fun n => βp nβ * r ^ n) =O[atTop] fun n => (1 : β)) :
βr β€ p.radius :=
- Exists.elim (isO_one_nat_atTop_iff.1 h) fun C hC =>
+ Exists.elim (isBigO_one_nat_atTop_iff.1 h) fun C hC =>
p.le_radius_of_bound C fun n => (le_abs_self _).trans (hC n)
-#align formal_multilinear_series.le_radius_of_is_O FormalMultilinearSeries.le_radius_of_isO
+#align formal_multilinear_series.le_radius_of_is_O FormalMultilinearSeries.le_radius_of_isBigO
theorem le_radius_of_eventually_le (C) (h : βαΆ n in atTop, βp nβ * r ^ n β€ C) : βr β€ p.radius :=
- p.le_radius_of_isO <| IsO.of_bound C <| h.mono fun n hn => by simpa
+ p.le_radius_of_isBigO <| IsBigO.of_bound C <| h.mono fun n hn => by simpa
#align formal_multilinear_series.le_radius_of_eventually_le FormalMultilinearSeries.le_radius_of_eventually_le
theorem le_radius_of_summable_nnnorm (h : Summable fun n => βp nββ * r ^ n) : βr β€ p.radius :=
@@ -161,14 +161,14 @@ theorem le_radius_of_summable (h : Summable fun n => βp nβ * r ^ n) : βr
exact_mod_cast h
#align formal_multilinear_series.le_radius_of_summable FormalMultilinearSeries.le_radius_of_summable
-theorem radius_eq_top_of_forall_nNReal_isO
+theorem radius_eq_top_of_forall_nNReal_isBigO
(h : β r : ββ₯0, (fun n => βp nβ * r ^ n) =O[atTop] fun n => (1 : β)) : p.radius = β :=
- ENNReal.eq_top_of_forall_nnreal_le fun r => p.le_radius_of_isO (h r)
-#align formal_multilinear_series.radius_eq_top_of_forall_nnreal_is_O FormalMultilinearSeries.radius_eq_top_of_forall_nNReal_isO
+ ENNReal.eq_top_of_forall_nnreal_le fun r => p.le_radius_of_isBigO (h r)
+#align formal_multilinear_series.radius_eq_top_of_forall_nnreal_is_O FormalMultilinearSeries.radius_eq_top_of_forall_nNReal_isBigO
theorem radius_eq_top_of_eventually_eq_zero (h : βαΆ n in atTop, p n = 0) : p.radius = β :=
- p.radius_eq_top_of_forall_nNReal_isO fun r =>
- (isO_zero _ _).congr' (h.mono fun n hn => by simp [hn]) EventuallyEq.rfl
+ p.radius_eq_top_of_forall_nNReal_isBigO fun r =>
+ (isBigO_zero _ _).congr' (h.mono fun n hn => by simp [hn]) EventuallyEq.rfl
#align formal_multilinear_series.radius_eq_top_of_eventually_eq_zero FormalMultilinearSeries.radius_eq_top_of_eventually_eq_zero
theorem radius_eq_top_of_forall_image_add_eq_zero (n : β) (hn : β m, p (m + n) = 0) :
@@ -186,10 +186,10 @@ theorem constFormalMultilinearSeries_radius {v : F} :
/-- For `r` strictly smaller than the radius of `p`, then `βpββ rβΏ` tends to zero exponentially:
for some `0 < a < 1`, `βp nβ rβΏ = o(aβΏ)`. -/
-theorem isOCat_of_lt_radius (h : βr < p.radius) :
+theorem isLittleO_of_lt_radius (h : βr < p.radius) :
β a β Ioo (0 : β) 1, (fun n => βp nβ * r ^ n) =o[atTop] pow a :=
by
- rw [(tFAE_exists_lt_isOCat_pow (fun n => βp nβ * r ^ n) 1).out 1 4]
+ rw [(tFAE_exists_lt_isLittleO_pow (fun n => βp nβ * r ^ n) 1).out 1 4]
simp only [radius, lt_supα΅’_iff] at h
rcases h with β¨t, C, hC, rtβ©
rw [ENNReal.coe_lt_coe, β NNReal.coe_lt_coe] at rt
@@ -201,31 +201,31 @@ theorem isOCat_of_lt_radius (h : βr < p.radius) :
field_simp [mul_right_comm, abs_mul, this.ne']
_ β€ C * (r / t) ^ n := mul_le_mul_of_nonneg_right (hC n) (pow_nonneg (div_nonneg r.2 t.2) _)
-#align formal_multilinear_series.is_o_of_lt_radius FormalMultilinearSeries.isOCat_of_lt_radius
+#align formal_multilinear_series.is_o_of_lt_radius FormalMultilinearSeries.isLittleO_of_lt_radius
/-- For `r` strictly smaller than the radius of `p`, then `βpββ rβΏ = o(1)`. -/
-theorem isOCat_one_of_lt_radius (h : βr < p.radius) :
+theorem isLittleO_one_of_lt_radius (h : βr < p.radius) :
(fun n => βp nβ * r ^ n) =o[atTop] (fun _ => 1 : β β β) :=
- let β¨a, ha, hpβ© := p.isOCat_of_lt_radius h
- hp.trans <| (isOCat_pow_pow_of_lt_left ha.1.le ha.2).congr (fun n => rfl) one_pow
-#align formal_multilinear_series.is_o_one_of_lt_radius FormalMultilinearSeries.isOCat_one_of_lt_radius
+ let β¨a, ha, hpβ© := p.isLittleO_of_lt_radius h
+ hp.trans <| (isLittleO_pow_pow_of_lt_left ha.1.le ha.2).congr (fun n => rfl) one_pow
+#align formal_multilinear_series.is_o_one_of_lt_radius FormalMultilinearSeries.isLittleO_one_of_lt_radius
/-- For `r` strictly smaller than the radius of `p`, then `βpββ rβΏ` tends to zero exponentially:
for some `0 < a < 1` and `C > 0`, `βp nβ * r ^ n β€ C * a ^ n`. -/
theorem norm_mul_pow_le_mul_pow_of_lt_radius (h : βr < p.radius) :
β a β Ioo (0 : β) 1, β C > 0, β n, βp nβ * r ^ n β€ C * a ^ n :=
by
- rcases((tFAE_exists_lt_isOCat_pow (fun n => βp nβ * r ^ n) 1).out 1 5).mp
+ rcases((tFAE_exists_lt_isLittleO_pow (fun n => βp nβ * r ^ n) 1).out 1 5).mp
(p.is_o_of_lt_radius h) with
β¨a, ha, C, hC, Hβ©
exact β¨a, ha, C, hC, fun n => (le_abs_self _).trans (H n)β©
#align formal_multilinear_series.norm_mul_pow_le_mul_pow_of_lt_radius FormalMultilinearSeries.norm_mul_pow_le_mul_pow_of_lt_radius
/-- If `r β 0` and `βpββ rβΏ = O(aβΏ)` for some `-1 < a < 1`, then `r < p.radius`. -/
-theorem lt_radius_of_isO (hβ : r β 0) {a : β} (ha : a β Ioo (-1 : β) 1)
+theorem lt_radius_of_isBigO (hβ : r β 0) {a : β} (ha : a β Ioo (-1 : β) 1)
(hp : (fun n => βp nβ * r ^ n) =O[atTop] pow a) : βr < p.radius :=
by
- rcases((tFAE_exists_lt_isOCat_pow (fun n => βp nβ * r ^ n) 1).out 2 5).mp β¨a, ha, hpβ© with
+ rcases((tFAE_exists_lt_isLittleO_pow (fun n => βp nβ * r ^ n) 1).out 2 5).mp β¨a, ha, hpβ© with
β¨a, ha, C, hC, hpβ©
rw [β pos_iff_ne_zero, β NNReal.coe_pos] at hβ
lift a to ββ₯0 using ha.1.le
@@ -236,7 +236,7 @@ theorem lt_radius_of_isO (hβ : r β 0) {a : β} (ha : a β Ioo (-1 : β) 1
refine' this.trans_le (p.le_radius_of_bound C fun n => _)
rw [NNReal.coe_div, div_pow, β mul_div_assoc, div_le_iff (pow_pos ha.1 n)]
exact (le_abs_self _).trans (hp n)
-#align formal_multilinear_series.lt_radius_of_is_O FormalMultilinearSeries.lt_radius_of_isO
+#align formal_multilinear_series.lt_radius_of_is_O FormalMultilinearSeries.lt_radius_of_isBigO
/-- For `r` strictly smaller than the radius of `p`, then `βpββ rβΏ` is bounded. -/
theorem norm_mul_pow_le_of_lt_radius (p : FormalMultilinearSeries π E F) {r : ββ₯0}
@@ -261,7 +261,7 @@ theorem nnnorm_mul_pow_le_of_lt_radius (p : FormalMultilinearSeries π E F) {r
theorem le_radius_of_tendsto (p : FormalMultilinearSeries π E F) {l : β}
(h : Tendsto (fun n => βp nβ * r ^ n) atTop (π l)) : βr β€ p.radius :=
- p.le_radius_of_isO (h.isO_one _)
+ p.le_radius_of_isBigO (h.isBigO_one _)
#align formal_multilinear_series.le_radius_of_tendsto FormalMultilinearSeries.le_radius_of_tendsto
theorem le_radius_of_summable_norm (p : FormalMultilinearSeries π E F)
@@ -345,8 +345,8 @@ theorem min_radius_le_radius_add (p q : FormalMultilinearSeries π E F) :
by
refine' ENNReal.le_of_forall_nnreal_lt fun r hr => _
rw [lt_min_iff] at hr
- have := ((p.is_o_one_of_lt_radius hr.1).add (q.is_o_one_of_lt_radius hr.2)).IsO
- refine' (p + q).le_radius_of_isO ((is_O_of_le _ fun n => _).trans this)
+ have := ((p.is_o_one_of_lt_radius hr.1).add (q.is_o_one_of_lt_radius hr.2)).IsBigO
+ refine' (p + q).le_radius_of_isBigO ((is_O_of_le _ fun n => _).trans this)
rw [β add_mul, norm_mul, norm_mul, norm_norm]
exact mul_le_mul_of_nonneg_right ((norm_add_le _ _).trans (le_abs_self _)) (norm_nonneg _)
#align formal_multilinear_series.min_radius_le_radius_add FormalMultilinearSeries.min_radius_le_radius_add
@@ -365,7 +365,7 @@ theorem radius_le_radius_continuousLinearMap_comp (p : FormalMultilinearSeries
by
refine' ENNReal.le_of_forall_nnreal_lt fun r hr => _
apply le_radius_of_is_O
- apply (is_O.trans_is_o _ (p.is_o_one_of_lt_radius hr)).IsO
+ apply (is_O.trans_is_o _ (p.is_o_one_of_lt_radius hr)).IsBigO
refine' is_O.mul (@is_O_with.is_O _ _ _ _ _ βfβ _ _ _ _) (is_O_refl _ _)
apply is_O_with.of_bound (eventually_of_forall fun n => _)
simpa only [norm_norm] using f.norm_comp_continuous_multilinear_map_le (p n)
@@ -708,7 +708,7 @@ theorem HasFpowerSeriesOnBall.uniform_geometric_approx {r' : ββ₯0}
#align has_fpower_series_on_ball.uniform_geometric_approx HasFpowerSeriesOnBall.uniform_geometric_approx
/-- Taylor formula for an analytic function, `is_O` version. -/
-theorem HasFpowerSeriesAt.isO_sub_partialSum_pow (hf : HasFpowerSeriesAt f p x) (n : β) :
+theorem HasFpowerSeriesAt.isBigO_sub_partialSum_pow (hf : HasFpowerSeriesAt f p x) (n : β) :
(fun y : E => f (x + y) - p.partialSum n y) =O[π 0] fun y => βyβ ^ n :=
by
rcases hf with β¨r, hfβ©
@@ -723,14 +723,14 @@ theorem HasFpowerSeriesAt.isO_sub_partialSum_pow (hf : HasFpowerSeriesAt f p x)
replace r'0 : 0 < (r' : β); Β· exact_mod_cast r'0
filter_upwards [Metric.ball_mem_nhds (0 : E) r'0]with y hy
simpa [mul_pow, mul_div_assoc, mul_assoc, div_mul_eq_mul_div] using hp y hy n
-#align has_fpower_series_at.is_O_sub_partial_sum_pow HasFpowerSeriesAt.isO_sub_partialSum_pow
+#align has_fpower_series_at.is_O_sub_partial_sum_pow HasFpowerSeriesAt.isBigO_sub_partialSum_pow
/- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
/-- If `f` has formal power series `β n, pβ` on a ball of radius `r`, then for `y, z` in any smaller
ball, the norm of the difference `f y - f z - p 1 (Ξ» _, y - z)` is bounded above by
`C * (max βy - xβ βz - xβ) * βy - zβ`. This lemma formulates this property using `is_O` and
`filter.principal` on `E Γ E`. -/
-theorem HasFpowerSeriesOnBall.isO_image_sub_image_sub_deriv_principal
+theorem HasFpowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
(hf : HasFpowerSeriesOnBall f p x r) (hr : r' < r) :
(fun y : E Γ E => f y.1 - f y.2 - p 1 fun _ => y.1 - y.2) =O[π (EMetric.ball (x, x) r')]
fun y => βy - (x, x)β * βy.1 - y.2β :=
@@ -793,7 +793,7 @@ theorem HasFpowerSeriesOnBall.isO_image_sub_image_sub_deriv_principal
exact (hL y hy).trans (le_abs_self _)
simp_rw [L, mul_right_comm _ (_ * _)]
exact (is_O_refl _ _).const_mul_left _
-#align has_fpower_series_on_ball.is_O_image_sub_image_sub_deriv_principal HasFpowerSeriesOnBall.isO_image_sub_image_sub_deriv_principal
+#align has_fpower_series_on_ball.is_O_image_sub_image_sub_deriv_principal HasFpowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (y z Β«expr β Β» emetric.ball[emetric.ball] x r') -/
/-- If `f` has formal power series `β n, pβ` on a ball of radius `r`, then for `y, z` in any smaller
@@ -813,7 +813,7 @@ theorem HasFpowerSeriesOnBall.image_sub_sub_deriv_le (hf : HasFpowerSeriesOnBall
/-- If `f` has formal power series `β n, pβ` at `x`, then
`f y - f z - p 1 (Ξ» _, y - z) = O(β(y, z) - (x, x)β * βy - zβ)` as `(y, z) β (x, x)`.
In particular, `f` is strictly differentiable at `x`. -/
-theorem HasFpowerSeriesAt.isO_image_sub_norm_mul_norm_sub (hf : HasFpowerSeriesAt f p x) :
+theorem HasFpowerSeriesAt.isBigO_image_sub_norm_mul_norm_sub (hf : HasFpowerSeriesAt f p x) :
(fun y : E Γ E => f y.1 - f y.2 - p 1 fun _ => y.1 - y.2) =O[π (x, x)] fun y =>
βy - (x, x)β * βy.1 - y.2β :=
by
@@ -821,7 +821,7 @@ theorem HasFpowerSeriesAt.isO_image_sub_norm_mul_norm_sub (hf : HasFpowerSeriesA
rcases ENNReal.lt_iff_exists_nnreal_btwn.1 hf.r_pos with β¨r', r'0, hβ©
refine' (hf.is_O_image_sub_image_sub_deriv_principal h).mono _
exact le_principal_iff.2 (EMetric.ball_mem_nhds _ r'0)
-#align has_fpower_series_at.is_O_image_sub_norm_mul_norm_sub HasFpowerSeriesAt.isO_image_sub_norm_mul_norm_sub
+#align has_fpower_series_at.is_O_image_sub_norm_mul_norm_sub HasFpowerSeriesAt.isBigO_image_sub_norm_mul_norm_sub
/-- If a function admits a power series expansion at `x`, then it is the uniform limit of the
partial sums of this power series on strict subdisks of the disk of convergence, i.e., `f (x + y)`
@@ -954,7 +954,7 @@ section Uniqueness
open ContinuousMultilinearMap
-theorem Asymptotics.IsO.continuousMultilinearMap_apply_eq_zero {n : β} {p : E[Γn]βL[π] F}
+theorem Asymptotics.IsBigO.continuousMultilinearMap_apply_eq_zero {n : β} {p : E[Γn]βL[π] F}
(h : (fun y => p fun i => y) =O[π 0] fun y => βyβ ^ (n + 1)) (y : E) : (p fun i => y) = 0 :=
by
obtain β¨c, c_pos, hcβ© := h.exists_pos
@@ -1009,7 +1009,7 @@ theorem Asymptotics.IsO.continuousMultilinearMap_apply_eq_zero {n : β} {p : E[
rw [inv_mul_cancel (norm_pos_iff.mp k_pos)]
simpa using hβ.le
-#align asymptotics.is_O.continuous_multilinear_map_apply_eq_zero Asymptotics.IsO.continuousMultilinearMap_apply_eq_zero
+#align asymptotics.is_O.continuous_multilinear_map_apply_eq_zero Asymptotics.IsBigO.continuousMultilinearMap_apply_eq_zero
/-- If a formal multilinear series `p` represents the zero function at `x : E`, then the
terms `p n (Ξ» i, y)` appearing the in sum are zero for any `n : β`, `y : E`. -/
@@ -1025,7 +1025,7 @@ theorem HasFpowerSeriesAt.apply_eq_zero {p : FormalMultilinearSeries π E F} {
simp only [hk b (this.lt_of_ne hnb), Pi.zero_apply, zero_apply]
Β· exact False.elim (hn (finset.mem_range.mpr (lt_add_one k)))
replace h := h.is_O_sub_partial_sum_pow k.succ
- simp only [psum_eq, zero_sub, Pi.zero_apply, Asymptotics.isO_neg_left] at h
+ simp only [psum_eq, zero_sub, Pi.zero_apply, Asymptotics.isBigO_neg_left] at h
exact h.continuous_multilinear_map_apply_eq_zero
#align has_fpower_series_at.apply_eq_zero HasFpowerSeriesAt.apply_eq_zero
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -754,7 +754,7 @@ theorem HasFpowerSeriesOnBall.isO_image_sub_image_sub_deriv_principal
set A : β β F := fun n => (p n fun _ => y.1 - x) - p n fun _ => y.2 - x
have hA : HasSum (fun n => A (n + 2)) (f y.1 - f y.2 - p 1 fun _ => y.1 - y.2) :=
by
- convert (hasSum_nat_add_iff' 2).2 ((hf.has_sum_sub hy.1).sub (hf.has_sum_sub hy.2)) using 1
+ convert(hasSum_nat_add_iff' 2).2 ((hf.has_sum_sub hy.1).sub (hf.has_sum_sub hy.2)) using 1
rw [Finset.sum_range_succ, Finset.sum_range_one, hf.coeff_zero, hf.coeff_zero, sub_self,
zero_add, β Subsingleton.pi_single_eq (0 : Fin 1) (y.1 - x), Pi.single, β
Subsingleton.pi_single_eq (0 : Fin 1) (y.2 - x), Pi.single, β (p 1).map_sub, β Pi.single,
@@ -783,8 +783,7 @@ theorem HasFpowerSeriesOnBall.isO_image_sub_image_sub_deriv_principal
apply HasSum.mul_left
simp only [add_mul]
have : βaβ < 1 := by simp only [Real.norm_eq_abs, abs_of_pos ha.1, ha.2]
- convert
- (hasSum_coe_mul_geometric_of_norm_lt_1 this).add
+ convert(hasSum_coe_mul_geometric_of_norm_lt_1 this).add
((hasSum_geometric_of_norm_lt_1 this).mul_left 2)
exact hA.norm_le_of_bounded hBL hAB
suffices L =O[π (EMetric.ball (x, x) r')] fun y => βy - (x, x)β * βy.1 - y.2β
@@ -866,7 +865,7 @@ theorem HasFpowerSeriesOnBall.tendsto_uniformly_on' {r' : ββ₯0} (hf : HasFpow
(h : (r' : ββ₯0β) < r) :
TendstoUniformlyOn (fun n y => p.partialSum n (y - x)) f atTop (Metric.ball (x : E) r') :=
by
- convert (hf.tendsto_uniformly_on h).comp fun y => y - x
+ convert(hf.tendsto_uniformly_on h).comp fun y => y - x
Β· simp [(Β· β Β·)]
Β· ext z
simp [dist_eq_norm]
@@ -1394,7 +1393,7 @@ theorem HasFpowerSeriesOnBall.changeOrigin (hf : HasFpowerSeriesOnBall f p x r)
exact tsub_le_tsub hf.r_le le_rfl
r_pos := by simp [h]
HasSum := fun z hz => by
- convert (p.change_origin y).HasSum _
+ convert(p.change_origin y).HasSum _
Β· rw [mem_emetric_ball_zero_iff, lt_tsub_iff_right, add_comm] at hz
rw [p.change_origin_eval (hz.trans_le hf.r_le), add_assoc, hf.sum]
refine' mem_emetric_ball_zero_iff.2 (lt_of_le_of_lt _ hz)
mathlib commit https://github.com/leanprover-community/mathlib/commit/3180fab693e2cee3bff62675571264cb8778b212
@@ -839,7 +839,7 @@ theorem HasFpowerSeriesOnBall.tendstoUniformlyOn {r' : ββ₯0} (hf : HasFpowerS
refine' Metric.tendstoUniformlyOn_iff.2 fun Ξ΅ Ξ΅pos => _
have L : tendsto (fun n => (C : β) * a ^ n) at_top (π ((C : β) * 0)) :=
tendsto_const_nhds.mul (tendsto_pow_atTop_nhds_0_of_lt_1 ha.1.le ha.2)
- rw [mul_zero] at L
+ rw [MulZeroClass.mul_zero] at L
refine' (L.eventually (gt_mem_nhds Ξ΅pos)).mono fun n hn y hy => _
rw [dist_eq_norm]
exact (hp y hy n).trans_lt hn
@@ -968,7 +968,8 @@ theorem Asymptotics.IsO.continuousMultilinearMap_apply_eq_zero {n : β} {p : E[
norm_eq_zero.mp
(by
simpa only [fin0_apply_norm, norm_eq_zero, norm_zero, zero_pow', Ne.def, Nat.one_ne_zero,
- not_false_iff, mul_zero, norm_le_zero_iff] using ht 0 (δΡ (Metric.mem_ball_self δ_pos)))
+ not_false_iff, MulZeroClass.mul_zero, norm_le_zero_iff] using
+ ht 0 (δΡ (Metric.mem_ball_self δ_pos)))
Β· refine' Or.elim (em (y = 0)) (fun hy => by simpa only [hy] using p.map_zero) fun hy => _
replace hy := norm_pos_iff.mpr hy
refine' norm_eq_zero.mp (le_antisymm (le_of_forall_pos_le_add fun Ξ΅ Ξ΅_pos => _) (norm_nonneg _))
mathlib commit https://github.com/leanprover-community/mathlib/commit/195fcd60ff2bfe392543bceb0ec2adcdb472db4c
@@ -856,7 +856,7 @@ theorem HasFpowerSeriesOnBall.tendstoLocallyUniformlyOn (hf : HasFpowerSeriesOnB
rcases ENNReal.lt_iff_exists_nnreal_btwn.1 hx with β¨r', xr', hr'β©
have : EMetric.ball (0 : E) r' β π x := IsOpen.mem_nhds EMetric.isOpen_ball xr'
refine' β¨EMetric.ball (0 : E) r', mem_nhdsWithin_of_mem_nhds this, _β©
- simpa [Metric.emetric_ball_nNReal] using hf.tendsto_uniformly_on hr' u hu
+ simpa [Metric.emetric_ball_nnreal] using hf.tendsto_uniformly_on hr' u hu
#align has_fpower_series_on_ball.tendsto_locally_uniformly_on HasFpowerSeriesOnBall.tendstoLocallyUniformlyOn
/-- If a function admits a power series expansion at `x`, then it is the uniform limit of the
mathlib commit https://github.com/leanprover-community/mathlib/commit/195fcd60ff2bfe392543bceb0ec2adcdb472db4c
@@ -284,7 +284,7 @@ theorem summable_norm_mul_pow (p : FormalMultilinearSeries π E F) {r : ββ₯
#align formal_multilinear_series.summable_norm_mul_pow FormalMultilinearSeries.summable_norm_mul_pow
theorem summable_norm_apply (p : FormalMultilinearSeries π E F) {x : E}
- (hx : x β Emetric.ball (0 : E) p.radius) : Summable fun n : β => βp n fun _ => xβ :=
+ (hx : x β EMetric.ball (0 : E) p.radius) : Summable fun n : β => βp n fun _ => xβ :=
by
rw [mem_emetric_ball_zero_iff] at hx
refine'
@@ -302,7 +302,7 @@ theorem summable_nnnorm_mul_pow (p : FormalMultilinearSeries π E F) {r : β
#align formal_multilinear_series.summable_nnnorm_mul_pow FormalMultilinearSeries.summable_nnnorm_mul_pow
protected theorem summable [CompleteSpace F] (p : FormalMultilinearSeries π E F) {x : E}
- (hx : x β Emetric.ball (0 : E) p.radius) : Summable fun n : β => p n fun _ => x :=
+ (hx : x β EMetric.ball (0 : E) p.radius) : Summable fun n : β => p n fun _ => x :=
summable_of_summable_norm (p.summable_norm_apply hx)
#align formal_multilinear_series.summable FormalMultilinearSeries.summable
@@ -356,7 +356,7 @@ theorem radius_neg (p : FormalMultilinearSeries π E F) : (-p).radius = p.radi
#align formal_multilinear_series.radius_neg FormalMultilinearSeries.radius_neg
protected theorem hasSum [CompleteSpace F] (p : FormalMultilinearSeries π E F) {x : E}
- (hx : x β Emetric.ball (0 : E) p.radius) : HasSum (fun n : β => p n fun _ => x) (p.Sum x) :=
+ (hx : x β EMetric.ball (0 : E) p.radius) : HasSum (fun n : β => p n fun _ => x) (p.Sum x) :=
(p.Summable hx).HasSum
#align formal_multilinear_series.has_sum FormalMultilinearSeries.hasSum
@@ -388,7 +388,7 @@ structure HasFpowerSeriesOnBall (f : E β F) (p : FormalMultilinearSeries π
r_le : r β€ p.radius
r_pos : 0 < r
HasSum :
- β {y}, y β Emetric.ball (0 : E) r β HasSum (fun n : β => p n fun i : Fin n => y) (f (x + y))
+ β {y}, y β EMetric.ball (0 : E) r β HasSum (fun n : β => p n fun i : Fin n => y) (f (x + y))
#align has_fpower_series_on_ball HasFpowerSeriesOnBall
/-- Given a function `f : E β F` and a formal multilinear series `p`, we say that `f` has `p` as
@@ -427,7 +427,7 @@ theorem HasFpowerSeriesOnBall.analyticAt (hf : HasFpowerSeriesOnBall f p x r) :
#align has_fpower_series_on_ball.analytic_at HasFpowerSeriesOnBall.analyticAt
theorem HasFpowerSeriesOnBall.congr (hf : HasFpowerSeriesOnBall f p x r)
- (hg : EqOn f g (Emetric.ball x r)) : HasFpowerSeriesOnBall g p x r :=
+ (hg : EqOn f g (EMetric.ball x r)) : HasFpowerSeriesOnBall g p x r :=
{ r_le := hf.r_le
r_pos := hf.r_pos
HasSum := fun y hy => by
@@ -448,9 +448,9 @@ theorem HasFpowerSeriesOnBall.compSub (hf : HasFpowerSeriesOnBall f p x r) (y :
#align has_fpower_series_on_ball.comp_sub HasFpowerSeriesOnBall.compSub
theorem HasFpowerSeriesOnBall.hasSum_sub (hf : HasFpowerSeriesOnBall f p x r) {y : E}
- (hy : y β Emetric.ball x r) : HasSum (fun n : β => p n fun i => y - x) (f y) :=
+ (hy : y β EMetric.ball x r) : HasSum (fun n : β => p n fun i => y - x) (f y) :=
by
- have : y - x β Emetric.ball (0 : E) r := by simpa [edist_eq_coe_nnnorm_sub] using hy
+ have : y - x β EMetric.ball (0 : E) r := by simpa [edist_eq_coe_nnnorm_sub] using hy
simpa only [add_sub_cancel'_right] using hf.has_sum this
#align has_fpower_series_on_ball.has_sum_sub HasFpowerSeriesOnBall.hasSum_sub
@@ -465,7 +465,7 @@ theorem HasFpowerSeriesAt.radius_pos (hf : HasFpowerSeriesAt f p x) : 0 < p.radi
theorem HasFpowerSeriesOnBall.mono (hf : HasFpowerSeriesOnBall f p x r) (r'_pos : 0 < r')
(hr : r' β€ r) : HasFpowerSeriesOnBall f p x r' :=
- β¨le_trans hr hf.1, r'_pos, fun y hy => hf.HasSum (Emetric.ball_subset_ball hr hy)β©
+ β¨le_trans hr hf.1, r'_pos, fun y hy => hf.HasSum (EMetric.ball_subset_ball hr hy)β©
#align has_fpower_series_on_ball.mono HasFpowerSeriesOnBall.mono
theorem HasFpowerSeriesAt.congr (hf : HasFpowerSeriesAt f p x) (hg : f =αΆ [π x] g) :
@@ -475,7 +475,7 @@ theorem HasFpowerSeriesAt.congr (hf : HasFpowerSeriesAt f p x) (hg : f =αΆ [π
exact
β¨min rβ rβ,
(hβ.mono (lt_min hβ.r_pos hβpos) inf_le_left).congr fun y hy =>
- hβ (Emetric.ball_subset_ball inf_le_right hy)β©
+ hβ (EMetric.ball_subset_ball inf_le_right hy)β©
#align has_fpower_series_at.congr HasFpowerSeriesAt.congr
protected theorem HasFpowerSeriesAt.eventually (hf : HasFpowerSeriesAt f p x) :
@@ -487,7 +487,7 @@ protected theorem HasFpowerSeriesAt.eventually (hf : HasFpowerSeriesAt f p x) :
theorem HasFpowerSeriesOnBall.eventually_hasSum (hf : HasFpowerSeriesOnBall f p x r) :
βαΆ y in π 0, HasSum (fun n : β => p n fun i : Fin n => y) (f (x + y)) := by
- filter_upwards [Emetric.ball_mem_nhds (0 : E) hf.r_pos]using fun _ => hf.has_sum
+ filter_upwards [EMetric.ball_mem_nhds (0 : E) hf.r_pos]using fun _ => hf.has_sum
#align has_fpower_series_on_ball.eventually_has_sum HasFpowerSeriesOnBall.eventually_hasSum
theorem HasFpowerSeriesAt.eventually_hasSum (hf : HasFpowerSeriesAt f p x) :
@@ -498,7 +498,7 @@ theorem HasFpowerSeriesAt.eventually_hasSum (hf : HasFpowerSeriesAt f p x) :
theorem HasFpowerSeriesOnBall.eventually_hasSum_sub (hf : HasFpowerSeriesOnBall f p x r) :
βαΆ y in π x, HasSum (fun n : β => p n fun i : Fin n => y - x) (f y) := by
- filter_upwards [Emetric.ball_mem_nhds x hf.r_pos]with y using hf.has_sum_sub
+ filter_upwards [EMetric.ball_mem_nhds x hf.r_pos]with y using hf.has_sum_sub
#align has_fpower_series_on_ball.eventually_has_sum_sub HasFpowerSeriesOnBall.eventually_hasSum_sub
theorem HasFpowerSeriesAt.eventually_hasSum_sub (hf : HasFpowerSeriesAt f p x) :
@@ -606,7 +606,7 @@ theorem AnalyticOn.sub {s : Set E} (hf : AnalyticOn π f s) (hg : AnalyticOn
theorem HasFpowerSeriesOnBall.coeff_zero (hf : HasFpowerSeriesOnBall f pf x r) (v : Fin 0 β E) :
pf 0 v = f x := by
have v_eq : v = fun i => 0 := Subsingleton.elim _ _
- have zero_mem : (0 : E) β Emetric.ball (0 : E) r := by simp [hf.r_pos]
+ have zero_mem : (0 : E) β EMetric.ball (0 : E) r := by simp [hf.r_pos]
have : β (i) (_ : i β 0), (pf i fun j => 0) = 0 :=
by
intro i hi
@@ -663,7 +663,7 @@ theorem HasFpowerSeriesOnBall.uniform_geometric_approx' {r' : ββ₯0}
rw [ball_zero_eq] at hy
exact hy
have hr'0 : 0 < (r' : β) := (norm_nonneg _).trans_lt yr'
- have : y β Emetric.ball (0 : E) r :=
+ have : y β EMetric.ball (0 : E) r :=
by
refine' mem_emetric_ball_zero_iff.2 (lt_trans _ h)
exact_mod_cast yr'
@@ -732,25 +732,25 @@ ball, the norm of the difference `f y - f z - p 1 (Ξ» _, y - z)` is bounded abov
`filter.principal` on `E Γ E`. -/
theorem HasFpowerSeriesOnBall.isO_image_sub_image_sub_deriv_principal
(hf : HasFpowerSeriesOnBall f p x r) (hr : r' < r) :
- (fun y : E Γ E => f y.1 - f y.2 - p 1 fun _ => y.1 - y.2) =O[π (Emetric.ball (x, x) r')]
+ (fun y : E Γ E => f y.1 - f y.2 - p 1 fun _ => y.1 - y.2) =O[π (EMetric.ball (x, x) r')]
fun y => βy - (x, x)β * βy.1 - y.2β :=
by
lift r' to ββ₯0 using ne_top_of_lt hr
rcases(zero_le r').eq_or_lt with (rfl | hr'0)
- Β· simp only [is_O_bot, Emetric.ball_zero, principal_empty, ENNReal.coe_zero]
+ Β· simp only [is_O_bot, EMetric.ball_zero, principal_empty, ENNReal.coe_zero]
obtain β¨a, ha, C, hC : 0 < C, hpβ© :
β a β Ioo (0 : β) 1, β C > 0, β n : β, βp nβ * βr' ^ n β€ C * a ^ n
exact p.norm_mul_pow_le_mul_pow_of_lt_radius (hr.trans_le hf.r_le)
simp only [β le_div_iff (pow_pos (NNReal.coe_pos.2 hr'0) _)] at hp
set L : E Γ E β β := fun y =>
C * (a / r') ^ 2 * (βy - (x, x)β * βy.1 - y.2β) * (a / (1 - a) ^ 2 + 2 / (1 - a))
- have hL : β y β Emetric.ball (x, x) r', βf y.1 - f y.2 - p 1 fun _ => y.1 - y.2β β€ L y :=
+ have hL : β y β EMetric.ball (x, x) r', βf y.1 - f y.2 - p 1 fun _ => y.1 - y.2β β€ L y :=
by
intro y hy'
- have hy : y β Emetric.ball x r ΓΛ’ Emetric.ball x r :=
+ have hy : y β EMetric.ball x r ΓΛ’ EMetric.ball x r :=
by
- rw [Emetric.ball_prod_same]
- exact Emetric.ball_subset_ball hr.le hy'
+ rw [EMetric.ball_prod_same]
+ exact EMetric.ball_subset_ball hr.le hy'
set A : β β F := fun n => (p n fun _ => y.1 - x) - p n fun _ => y.2 - x
have hA : HasSum (fun n => A (n + 2)) (f y.1 - f y.2 - p 1 fun _ => y.1 - y.2) :=
by
@@ -759,7 +759,7 @@ theorem HasFpowerSeriesOnBall.isO_image_sub_image_sub_deriv_principal
zero_add, β Subsingleton.pi_single_eq (0 : Fin 1) (y.1 - x), Pi.single, β
Subsingleton.pi_single_eq (0 : Fin 1) (y.2 - x), Pi.single, β (p 1).map_sub, β Pi.single,
Subsingleton.pi_single_eq, sub_sub_sub_cancel_right]
- rw [Emetric.mem_ball, edist_eq_coe_nnnorm_sub, ENNReal.coe_lt_coe] at hy'
+ rw [EMetric.mem_ball, edist_eq_coe_nnnorm_sub, ENNReal.coe_lt_coe] at hy'
set B : β β β := fun n => C * (a / r') ^ 2 * (βy - (x, x)β * βy.1 - y.2β) * ((n + 2) * a ^ n)
have hAB : β n, βA (n + 2)β β€ B n := fun n =>
calc
@@ -787,7 +787,7 @@ theorem HasFpowerSeriesOnBall.isO_image_sub_image_sub_deriv_principal
(hasSum_coe_mul_geometric_of_norm_lt_1 this).add
((hasSum_geometric_of_norm_lt_1 this).mul_left 2)
exact hA.norm_le_of_bounded hBL hAB
- suffices L =O[π (Emetric.ball (x, x) r')] fun y => βy - (x, x)β * βy.1 - y.2β
+ suffices L =O[π (EMetric.ball (x, x) r')] fun y => βy - (x, x)β * βy.1 - y.2β
by
refine' (is_O.of_bound 1 (eventually_principal.2 fun y hy => _)).trans this
rw [one_mul]
@@ -803,10 +803,10 @@ ball, the norm of the difference `f y - f z - p 1 (Ξ» _, y - z)` is bounded abov
theorem HasFpowerSeriesOnBall.image_sub_sub_deriv_le (hf : HasFpowerSeriesOnBall f p x r)
(hr : r' < r) :
β C,
- β (y) (_ : y β Emetric.ball x r') (z) (_ : z β Emetric.ball x r'),
+ β (y) (_ : y β EMetric.ball x r') (z) (_ : z β EMetric.ball x r'),
βf y - f z - p 1 fun _ => y - zβ β€ C * max βy - xβ βz - xβ * βy - zβ :=
by
- simpa only [is_O_principal, mul_assoc, norm_mul, norm_norm, Prod.forall, Emetric.mem_ball,
+ simpa only [is_O_principal, mul_assoc, norm_mul, norm_norm, Prod.forall, EMetric.mem_ball,
Prod.edist_eq, max_lt_iff, and_imp, @forall_swap (_ < _) E] using
hf.is_O_image_sub_image_sub_deriv_principal hr
#align has_fpower_series_on_ball.image_sub_sub_deriv_le HasFpowerSeriesOnBall.image_sub_sub_deriv_le
@@ -821,7 +821,7 @@ theorem HasFpowerSeriesAt.isO_image_sub_norm_mul_norm_sub (hf : HasFpowerSeriesA
rcases hf with β¨r, hfβ©
rcases ENNReal.lt_iff_exists_nnreal_btwn.1 hf.r_pos with β¨r', r'0, hβ©
refine' (hf.is_O_image_sub_image_sub_deriv_principal h).mono _
- exact le_principal_iff.2 (Emetric.ball_mem_nhds _ r'0)
+ exact le_principal_iff.2 (EMetric.ball_mem_nhds _ r'0)
#align has_fpower_series_at.is_O_image_sub_norm_mul_norm_sub HasFpowerSeriesAt.isO_image_sub_norm_mul_norm_sub
/-- If a function admits a power series expansion at `x`, then it is the uniform limit of the
@@ -850,12 +850,12 @@ the partial sums of this power series on the disk of convergence, i.e., `f (x +
is the locally uniform limit of `p.partial_sum n y` there. -/
theorem HasFpowerSeriesOnBall.tendstoLocallyUniformlyOn (hf : HasFpowerSeriesOnBall f p x r) :
TendstoLocallyUniformlyOn (fun n y => p.partialSum n y) (fun y => f (x + y)) atTop
- (Emetric.ball (0 : E) r) :=
+ (EMetric.ball (0 : E) r) :=
by
intro u hu x hx
rcases ENNReal.lt_iff_exists_nnreal_btwn.1 hx with β¨r', xr', hr'β©
- have : Emetric.ball (0 : E) r' β π x := IsOpen.mem_nhds Emetric.isOpen_ball xr'
- refine' β¨Emetric.ball (0 : E) r', mem_nhdsWithin_of_mem_nhds this, _β©
+ have : EMetric.ball (0 : E) r' β π x := IsOpen.mem_nhds EMetric.isOpen_ball xr'
+ refine' β¨EMetric.ball (0 : E) r', mem_nhdsWithin_of_mem_nhds this, _β©
simpa [Metric.emetric_ball_nNReal] using hf.tendsto_uniformly_on hr' u hu
#align has_fpower_series_on_ball.tendsto_locally_uniformly_on HasFpowerSeriesOnBall.tendstoLocallyUniformlyOn
@@ -877,9 +877,9 @@ the partial sums of this power series on the disk of convergence, i.e., `f y`
is the locally uniform limit of `p.partial_sum n (y - x)` there. -/
theorem HasFpowerSeriesOnBall.tendsto_locally_uniformly_on' (hf : HasFpowerSeriesOnBall f p x r) :
TendstoLocallyUniformlyOn (fun n y => p.partialSum n (y - x)) f atTop
- (Emetric.ball (x : E) r) :=
+ (EMetric.ball (x : E) r) :=
by
- have A : ContinuousOn (fun y : E => y - x) (Emetric.ball (x : E) r) :=
+ have A : ContinuousOn (fun y : E => y - x) (EMetric.ball (x : E) r) :=
(continuous_id.sub continuous_const).ContinuousOn
convert hf.tendsto_locally_uniformly_on.comp (fun y : E => y - x) _ A
Β· ext z
@@ -890,7 +890,7 @@ theorem HasFpowerSeriesOnBall.tendsto_locally_uniformly_on' (hf : HasFpowerSerie
/-- If a function admits a power series expansion on a disk, then it is continuous there. -/
protected theorem HasFpowerSeriesOnBall.continuousOn (hf : HasFpowerSeriesOnBall f p x r) :
- ContinuousOn f (Emetric.ball x r) :=
+ ContinuousOn f (EMetric.ball x r) :=
hf.tendsto_locally_uniformly_on'.ContinuousOn <|
eventually_of_forall fun n =>
((p.partialSum_continuous n).comp (continuous_id.sub continuous_const)).ContinuousOn
@@ -899,7 +899,7 @@ protected theorem HasFpowerSeriesOnBall.continuousOn (hf : HasFpowerSeriesOnBall
protected theorem HasFpowerSeriesAt.continuousAt (hf : HasFpowerSeriesAt f p x) :
ContinuousAt f x :=
let β¨r, hrβ© := hf
- hr.ContinuousOn.ContinuousAt (Emetric.ball_mem_nhds x hr.r_pos)
+ hr.ContinuousOn.ContinuousAt (EMetric.ball_mem_nhds x hr.r_pos)
#align has_fpower_series_at.continuous_at HasFpowerSeriesAt.continuousAt
protected theorem AnalyticAt.continuousAt (hf : AnalyticAt π f x) : ContinuousAt f x :=
@@ -924,13 +924,13 @@ protected theorem FormalMultilinearSeries.hasFpowerSeriesOnBall [CompleteSpace F
#align formal_multilinear_series.has_fpower_series_on_ball FormalMultilinearSeries.hasFpowerSeriesOnBall
theorem HasFpowerSeriesOnBall.sum (h : HasFpowerSeriesOnBall f p x r) {y : E}
- (hy : y β Emetric.ball (0 : E) r) : f (x + y) = p.Sum y :=
+ (hy : y β EMetric.ball (0 : E) r) : f (x + y) = p.Sum y :=
(h.HasSum hy).tsum_eq.symm
#align has_fpower_series_on_ball.sum HasFpowerSeriesOnBall.sum
/-- The sum of a converging power series is continuous in its disk of convergence. -/
protected theorem FormalMultilinearSeries.continuousOn [CompleteSpace F] :
- ContinuousOn p.Sum (Emetric.ball 0 p.radius) :=
+ ContinuousOn p.Sum (EMetric.ball 0 p.radius) :=
by
cases' (zero_le p.radius).eq_or_lt with h h
Β· simp [β h, continuousOn_empty]
@@ -1323,13 +1323,13 @@ theorem changeOrigin_eval (h : (βxββ + βyββ : ββ₯0β) < p.radius
(p.changeOrigin x).Sum y = p.Sum (x + y) :=
by
have radius_pos : 0 < p.radius := lt_of_le_of_lt (zero_le _) h
- have x_mem_ball : x β Emetric.ball (0 : E) p.radius :=
+ have x_mem_ball : x β EMetric.ball (0 : E) p.radius :=
mem_emetric_ball_zero_iff.2 ((le_add_right le_rfl).trans_lt h)
- have y_mem_ball : y β Emetric.ball (0 : E) (p.change_origin x).radius :=
+ have y_mem_ball : y β EMetric.ball (0 : E) (p.change_origin x).radius :=
by
refine' mem_emetric_ball_zero_iff.2 (lt_of_lt_of_le _ p.change_origin_radius)
rwa [lt_tsub_iff_right, add_comm]
- have x_add_y_mem_ball : x + y β Emetric.ball (0 : E) p.radius :=
+ have x_add_y_mem_ball : x + y β EMetric.ball (0 : E) p.radius :=
by
refine' mem_emetric_ball_zero_iff.2 (lt_of_le_of_lt _ h)
exact_mod_cast nnnorm_add_le x y
@@ -1398,14 +1398,14 @@ theorem HasFpowerSeriesOnBall.changeOrigin (hf : HasFpowerSeriesOnBall f p x r)
rw [p.change_origin_eval (hz.trans_le hf.r_le), add_assoc, hf.sum]
refine' mem_emetric_ball_zero_iff.2 (lt_of_le_of_lt _ hz)
exact_mod_cast nnnorm_add_le y z
- Β· refine' Emetric.ball_subset_ball (le_trans _ p.change_origin_radius) hz
+ Β· refine' EMetric.ball_subset_ball (le_trans _ p.change_origin_radius) hz
exact tsub_le_tsub hf.r_le le_rfl }
#align has_fpower_series_on_ball.change_origin HasFpowerSeriesOnBall.changeOrigin
/-- If a function admits a power series expansion `p` on an open ball `B (x, r)`, then
it is analytic at every point of this ball. -/
theorem HasFpowerSeriesOnBall.analyticAt_of_mem (hf : HasFpowerSeriesOnBall f p x r)
- (h : y β Emetric.ball x r) : AnalyticAt π f y :=
+ (h : y β EMetric.ball x r) : AnalyticAt π f y :=
by
have : (βy - xββ : ββ₯0β) < r := by simpa [edist_eq_coe_nnnorm_sub] using h
have := hf.change_origin this
@@ -1414,7 +1414,7 @@ theorem HasFpowerSeriesOnBall.analyticAt_of_mem (hf : HasFpowerSeriesOnBall f p
#align has_fpower_series_on_ball.analytic_at_of_mem HasFpowerSeriesOnBall.analyticAt_of_mem
theorem HasFpowerSeriesOnBall.analyticOn (hf : HasFpowerSeriesOnBall f p x r) :
- AnalyticOn π f (Emetric.ball x r) := fun y hy => hf.analyticAt_of_mem hy
+ AnalyticOn π f (EMetric.ball x r) := fun y hy => hf.analyticAt_of_mem hy
#align has_fpower_series_on_ball.analytic_on HasFpowerSeriesOnBall.analyticOn
variable (π f)
@@ -1425,7 +1425,7 @@ theorem isOpen_analyticAt : IsOpen { x | AnalyticAt π f x } :=
by
rw [isOpen_iff_mem_nhds]
rintro x β¨p, r, hrβ©
- exact mem_of_superset (Emetric.ball_mem_nhds _ hr.r_pos) fun y hy => hr.analytic_at_of_mem hy
+ exact mem_of_superset (EMetric.ball_mem_nhds _ hr.r_pos) fun y hy => hr.analytic_at_of_mem hy
#align is_open_analytic_at isOpen_analyticAt
end
@@ -1444,7 +1444,7 @@ theorem hasFpowerSeriesAt_iff :
by
refine'
β¨fun β¨r, r_le, r_pos, hβ© =>
- eventually_of_mem (Emetric.ball_mem_nhds 0 r_pos) fun _ => by simpa using h, _β©
+ eventually_of_mem (EMetric.ball_mem_nhds 0 r_pos) fun _ => by simpa using h, _β©
simp only [Metric.eventually_nhds_iff]
rintro β¨r, r_pos, hβ©
refine' β¨p.radius β r.to_nnreal, by simp, _, _β©
@@ -1459,7 +1459,7 @@ theorem hasFpowerSeriesAt_iff :
refine' lt_of_lt_of_le _ this
simp only [ENNReal.coe_pos]
exact zero_lt_iff.mpr (nnnorm_ne_zero_iff.mpr (norm_pos_iff.mp z_pos))
- Β· simp only [Emetric.mem_ball, lt_inf_iff, edist_lt_coe, apply_eq_pow_smul_coeff, and_imp,
+ Β· simp only [EMetric.mem_ball, lt_inf_iff, edist_lt_coe, apply_eq_pow_smul_coeff, and_imp,
dist_zero_right] at hβ’
refine' fun y hyp hyr => h _
simpa [nndist_eq_nnnorm, Real.lt_toNNReal_iff_coe_lt] using hyr
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -602,7 +602,7 @@ theorem AnalyticOn.sub {s : Set E} (hf : AnalyticOn π f s) (hg : AnalyticOn
AnalyticOn π (f - g) s := fun z hz => (hf z hz).sub (hg z hz)
#align analytic_on.sub AnalyticOn.sub
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (i Β«expr β Β» 0) -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (i Β«expr β Β» 0) -/
theorem HasFpowerSeriesOnBall.coeff_zero (hf : HasFpowerSeriesOnBall f pf x r) (v : Fin 0 β E) :
pf 0 v = f x := by
have v_eq : v = fun i => 0 := Subsingleton.elim _ _
@@ -682,7 +682,7 @@ theorem HasFpowerSeriesOnBall.uniform_geometric_approx' {r' : ββ₯0}
β(p n) fun i : Fin n => yβ β€ βp nβ * β i : Fin n, βyβ := ContinuousMultilinearMap.le_op_norm _ _
_ = βp nβ * r' ^ n * (βyβ / r') ^ n := by field_simp [hr'0.ne', mul_right_comm]
_ β€ C * a ^ n * (βyβ / r') ^ n :=
- mul_le_mul_of_nonneg_right (hp n) (pow_nonneg (div_nonneg (norm_nonneg _) r'.coe_nonneg) _)
+ (mul_le_mul_of_nonneg_right (hp n) (pow_nonneg (div_nonneg (norm_nonneg _) r'.coe_nonneg) _))
_ β€ C * (a * (βyβ / r')) ^ n := by rw [mul_pow, mul_assoc]
#align has_fpower_series_on_ball.uniform_geometric_approx' HasFpowerSeriesOnBall.uniform_geometric_approx'
@@ -796,7 +796,7 @@ theorem HasFpowerSeriesOnBall.isO_image_sub_image_sub_deriv_principal
exact (is_O_refl _ _).const_mul_left _
#align has_fpower_series_on_ball.is_O_image_sub_image_sub_deriv_principal HasFpowerSeriesOnBall.isO_image_sub_image_sub_deriv_principal
-/- ./././Mathport/Syntax/Translate/Basic.lean:628:2: warning: expanding binder collection (y z Β«expr β Β» emetric.ball[emetric.ball] x r') -/
+/- ./././Mathport/Syntax/Translate/Basic.lean:635:2: warning: expanding binder collection (y z Β«expr β Β» emetric.ball[emetric.ball] x r') -/
/-- If `f` has formal power series `β n, pβ` on a ball of radius `r`, then for `y, z` in any smaller
ball, the norm of the difference `f y - f z - p 1 (Ξ» _, y - z)` is bounded above by
`C * (max βy - xβ βz - xβ) * βy - zβ`. -/
@@ -1000,7 +1000,7 @@ theorem Asymptotics.IsO.continuousMultilinearMap_apply_eq_zero {n : β} {p : E[
Finset.card_fin] using
congr_arg norm (p.map_smul_univ (fun i : Fin n.succ => kβ»ΒΉ) fun i : Fin n.succ => k β’ y)
_ β€ βkβ»ΒΉ ^ n.succβ * (βkβ ^ n.succ * (βkβ * (c * βyβ ^ (n.succ + 1)))) :=
- mul_le_mul_of_nonneg_left hβ (norm_nonneg _)
+ (mul_le_mul_of_nonneg_left hβ (norm_nonneg _))
_ = β(kβ»ΒΉ * k) ^ n.succβ * (βkβ * (c * βyβ ^ (n.succ + 1))) :=
by
rw [β mul_assoc]
@@ -1465,13 +1465,13 @@ theorem hasFpowerSeriesAt_iff :
simpa [nndist_eq_nnnorm, Real.lt_toNNReal_iff_coe_lt] using hyr
#align has_fpower_series_at_iff hasFpowerSeriesAt_iff
-/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:76:14: unsupported tactic `congrm #[[expr Β«exprβαΆ in , Β»((z), (nhds() 0 : filter π), has_sum (Ξ» n, _) (f Β«expr + Β»(zβ, z)))]] -/
+/- ./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `congrm #[[expr Β«exprβαΆ in , Β»((z), (nhds() 0 : filter π), has_sum (Ξ» n, _) (f Β«expr + Β»(zβ, z)))]] -/
theorem hasFpowerSeriesAt_iff' :
HasFpowerSeriesAt f p zβ β βαΆ z in π zβ, HasSum (fun n => (z - zβ) ^ n β’ p.coeff n) (f z) :=
by
rw [β map_add_left_nhds_zero, eventually_map, hasFpowerSeriesAt_iff]
trace
- "./././Mathport/Syntax/Translate/Tactic/Builtin.lean:76:14: unsupported tactic `congrm #[[expr Β«exprβαΆ in , Β»((z), (nhds() 0 : filter π), has_sum (Ξ» n, _) (f Β«expr + Β»(zβ, z)))]]"
+ "./././Mathport/Syntax/Translate/Tactic/Builtin.lean:73:14: unsupported tactic `congrm #[[expr Β«exprβαΆ in , Β»((z), (nhds() 0 : filter π), has_sum (Ξ» n, _) (f Β«expr + Β»(zβ, z)))]]"
rw [add_sub_cancel']
#align has_fpower_series_at_iff' hasFpowerSeriesAt_iff'
mathlib commit https://github.com/leanprover-community/mathlib/commit/eb0cb4511aaef0da2462207b67358a0e1fe1e2ee
@@ -78,7 +78,7 @@ noncomputable section
variable {π E F G : Type _}
-open Topology Classical BigOperators NNReal Filter Ennreal
+open Topology Classical BigOperators NNReal Filter ENNReal
open Set Filter Asymptotics
@@ -163,7 +163,7 @@ theorem le_radius_of_summable (h : Summable fun n => βp nβ * r ^ n) : βr
theorem radius_eq_top_of_forall_nNReal_isO
(h : β r : ββ₯0, (fun n => βp nβ * r ^ n) =O[atTop] fun n => (1 : β)) : p.radius = β :=
- Ennreal.eq_top_of_forall_nNReal_le fun r => p.le_radius_of_isO (h r)
+ ENNReal.eq_top_of_forall_nnreal_le fun r => p.le_radius_of_isO (h r)
#align formal_multilinear_series.radius_eq_top_of_forall_nnreal_is_O FormalMultilinearSeries.radius_eq_top_of_forall_nNReal_isO
theorem radius_eq_top_of_eventually_eq_zero (h : βαΆ n in atTop, p n = 0) : p.radius = β :=
@@ -192,7 +192,7 @@ theorem isOCat_of_lt_radius (h : βr < p.radius) :
rw [(tFAE_exists_lt_isOCat_pow (fun n => βp nβ * r ^ n) 1).out 1 4]
simp only [radius, lt_supα΅’_iff] at h
rcases h with β¨t, C, hC, rtβ©
- rw [Ennreal.coe_lt_coe, β NNReal.coe_lt_coe] at rt
+ rw [ENNReal.coe_lt_coe, β NNReal.coe_lt_coe] at rt
have : 0 < (t : β) := r.coe_nonneg.trans_lt rt
rw [β div_lt_one this] at rt
refine' β¨_, rt, C, Or.inr zero_lt_one, fun n => _β©
@@ -232,7 +232,7 @@ theorem lt_radius_of_isO (hβ : r β 0) {a : β} (ha : a β Ioo (-1 : β) 1
have : (r : β) < r / a := by
simpa only [div_one] using (div_lt_div_left hβ zero_lt_one ha.1).2 ha.2
norm_cast at this
- rw [β Ennreal.coe_lt_coe] at this
+ rw [β ENNReal.coe_lt_coe] at this
refine' this.trans_le (p.le_radius_of_bound C fun n => _)
rw [NNReal.coe_div, div_pow, β mul_div_assoc, div_le_iff (pow_pos ha.1 n)]
exact (le_abs_self _).trans (hp n)
@@ -308,7 +308,7 @@ protected theorem summable [CompleteSpace F] (p : FormalMultilinearSeries π E
theorem radius_eq_top_of_summable_norm (p : FormalMultilinearSeries π E F)
(hs : β r : ββ₯0, Summable fun n => βp nβ * r ^ n) : p.radius = β :=
- Ennreal.eq_top_of_forall_nNReal_le fun r => p.le_radius_of_summable_norm (hs r)
+ ENNReal.eq_top_of_forall_nnreal_le fun r => p.le_radius_of_summable_norm (hs r)
#align formal_multilinear_series.radius_eq_top_of_summable_norm FormalMultilinearSeries.radius_eq_top_of_summable_norm
theorem radius_eq_top_iff_summable_norm (p : FormalMultilinearSeries π E F) :
@@ -318,7 +318,7 @@ theorem radius_eq_top_iff_summable_norm (p : FormalMultilinearSeries π E F) :
Β· intro h r
obtain β¨a, ha : a β Ioo (0 : β) 1, C, hC : 0 < C, hpβ© :=
p.norm_mul_pow_le_mul_pow_of_lt_radius
- (show (r : ββ₯0β) < p.radius from h.symm βΈ Ennreal.coe_lt_top)
+ (show (r : ββ₯0β) < p.radius from h.symm βΈ ENNReal.coe_lt_top)
refine'
summable_of_norm_bounded (fun n => (C : β) * a ^ n)
((summable_geometric_of_lt_1 ha.1.le ha.2).mul_left _) fun n => _
@@ -331,8 +331,8 @@ theorem radius_eq_top_iff_summable_norm (p : FormalMultilinearSeries π E F) :
theorem le_mul_pow_of_radius_pos (p : FormalMultilinearSeries π E F) (h : 0 < p.radius) :
β (C r : _)(hC : 0 < C)(hr : 0 < r), β n, βp nβ β€ C * r ^ n :=
by
- rcases Ennreal.lt_iff_exists_nNReal_btwn.1 h with β¨r, r0, rltβ©
- have rpos : 0 < (r : β) := by simp [Ennreal.coe_pos.1 r0]
+ rcases ENNReal.lt_iff_exists_nnreal_btwn.1 h with β¨r, r0, rltβ©
+ have rpos : 0 < (r : β) := by simp [ENNReal.coe_pos.1 r0]
rcases norm_le_div_pow_of_pos_of_lt_radius p rpos rlt with β¨C, Cpos, hCpβ©
refine' β¨C, rβ»ΒΉ, Cpos, by simp [rpos], fun n => _β©
convert hCp n
@@ -343,7 +343,7 @@ theorem le_mul_pow_of_radius_pos (p : FormalMultilinearSeries π E F) (h : 0 <
theorem min_radius_le_radius_add (p q : FormalMultilinearSeries π E F) :
min p.radius q.radius β€ (p + q).radius :=
by
- refine' Ennreal.le_of_forall_nNReal_lt fun r hr => _
+ refine' ENNReal.le_of_forall_nnreal_lt fun r hr => _
rw [lt_min_iff] at hr
have := ((p.is_o_one_of_lt_radius hr.1).add (q.is_o_one_of_lt_radius hr.2)).IsO
refine' (p + q).le_radius_of_isO ((is_O_of_le _ fun n => _).trans this)
@@ -363,7 +363,7 @@ protected theorem hasSum [CompleteSpace F] (p : FormalMultilinearSeries π E F
theorem radius_le_radius_continuousLinearMap_comp (p : FormalMultilinearSeries π E F)
(f : F βL[π] G) : p.radius β€ (f.compFormalMultilinearSeries p).radius :=
by
- refine' Ennreal.le_of_forall_nNReal_lt fun r hr => _
+ refine' ENNReal.le_of_forall_nnreal_lt fun r hr => _
apply le_radius_of_is_O
apply (is_O.trans_is_o _ (p.is_o_one_of_lt_radius hr)).IsO
refine' is_O.mul (@is_O_with.is_O _ _ _ _ _ βfβ _ _ _ _) (is_O_refl _ _)
@@ -712,7 +712,7 @@ theorem HasFpowerSeriesAt.isO_sub_partialSum_pow (hf : HasFpowerSeriesAt f p x)
(fun y : E => f (x + y) - p.partialSum n y) =O[π 0] fun y => βyβ ^ n :=
by
rcases hf with β¨r, hfβ©
- rcases Ennreal.lt_iff_exists_nNReal_btwn.1 hf.r_pos with β¨r', r'0, hβ©
+ rcases ENNReal.lt_iff_exists_nnreal_btwn.1 hf.r_pos with β¨r', r'0, hβ©
obtain β¨a, ha, C, hC, hpβ© :
β a β Ioo (0 : β) 1,
β C > 0,
@@ -737,7 +737,7 @@ theorem HasFpowerSeriesOnBall.isO_image_sub_image_sub_deriv_principal
by
lift r' to ββ₯0 using ne_top_of_lt hr
rcases(zero_le r').eq_or_lt with (rfl | hr'0)
- Β· simp only [is_O_bot, Emetric.ball_zero, principal_empty, Ennreal.coe_zero]
+ Β· simp only [is_O_bot, Emetric.ball_zero, principal_empty, ENNReal.coe_zero]
obtain β¨a, ha, C, hC : 0 < C, hpβ© :
β a β Ioo (0 : β) 1, β C > 0, β n : β, βp nβ * βr' ^ n β€ C * a ^ n
exact p.norm_mul_pow_le_mul_pow_of_lt_radius (hr.trans_le hf.r_le)
@@ -759,7 +759,7 @@ theorem HasFpowerSeriesOnBall.isO_image_sub_image_sub_deriv_principal
zero_add, β Subsingleton.pi_single_eq (0 : Fin 1) (y.1 - x), Pi.single, β
Subsingleton.pi_single_eq (0 : Fin 1) (y.2 - x), Pi.single, β (p 1).map_sub, β Pi.single,
Subsingleton.pi_single_eq, sub_sub_sub_cancel_right]
- rw [Emetric.mem_ball, edist_eq_coe_nnnorm_sub, Ennreal.coe_lt_coe] at hy'
+ rw [Emetric.mem_ball, edist_eq_coe_nnnorm_sub, ENNReal.coe_lt_coe] at hy'
set B : β β β := fun n => C * (a / r') ^ 2 * (βy - (x, x)β * βy.1 - y.2β) * ((n + 2) * a ^ n)
have hAB : β n, βA (n + 2)β β€ B n := fun n =>
calc
@@ -819,7 +819,7 @@ theorem HasFpowerSeriesAt.isO_image_sub_norm_mul_norm_sub (hf : HasFpowerSeriesA
βy - (x, x)β * βy.1 - y.2β :=
by
rcases hf with β¨r, hfβ©
- rcases Ennreal.lt_iff_exists_nNReal_btwn.1 hf.r_pos with β¨r', r'0, hβ©
+ rcases ENNReal.lt_iff_exists_nnreal_btwn.1 hf.r_pos with β¨r', r'0, hβ©
refine' (hf.is_O_image_sub_image_sub_deriv_principal h).mono _
exact le_principal_iff.2 (Emetric.ball_mem_nhds _ r'0)
#align has_fpower_series_at.is_O_image_sub_norm_mul_norm_sub HasFpowerSeriesAt.isO_image_sub_norm_mul_norm_sub
@@ -853,7 +853,7 @@ theorem HasFpowerSeriesOnBall.tendstoLocallyUniformlyOn (hf : HasFpowerSeriesOnB
(Emetric.ball (0 : E) r) :=
by
intro u hu x hx
- rcases Ennreal.lt_iff_exists_nNReal_btwn.1 hx with β¨r', xr', hr'β©
+ rcases ENNReal.lt_iff_exists_nnreal_btwn.1 hx with β¨r', xr', hr'β©
have : Emetric.ball (0 : E) r' β π x := IsOpen.mem_nhds Emetric.isOpen_ball xr'
refine' β¨Emetric.ball (0 : E) r', mem_nhdsWithin_of_mem_nhds this, _β©
simpa [Metric.emetric_ball_nNReal] using hf.tendsto_uniformly_on hr' u hu
@@ -1074,14 +1074,14 @@ theorem HasFpowerSeriesOnBall.rEqTopOfExists {f : π β E} {r : ββ₯0β} {
β p' : FormalMultilinearSeries π π E, HasFpowerSeriesOnBall f p' x r') :
HasFpowerSeriesOnBall f p x β :=
{ r_le :=
- Ennreal.le_of_forall_pos_nNReal_lt fun r hr hr' =>
+ ENNReal.le_of_forall_pos_nnreal_lt fun r hr hr' =>
let β¨p', hp'β© := h' r hr
(h.exchangeRadius hp').r_le
- r_pos := Ennreal.coe_lt_top
+ r_pos := ENNReal.coe_lt_top
HasSum := fun y hy =>
let β¨r', hr'β© := exists_gt βyββ
let β¨p', hp'β© := h' r' hr'.ne_bot.bot_lt
- (h.exchangeRadius hp').HasSum <| mem_emetric_ball_zero_iff.mpr (Ennreal.coe_lt_coe.2 hr') }
+ (h.exchangeRadius hp').HasSum <| mem_emetric_ball_zero_iff.mpr (ENNReal.coe_lt_coe.2 hr') }
#align has_fpower_series_on_ball.r_eq_top_of_exists HasFpowerSeriesOnBall.rEqTopOfExists
end Uniqueness
@@ -1256,7 +1256,7 @@ theorem change_origin_series_summable_auxβ (hr : (r : ββ₯0β) < p.radius)
Summable fun s : Ξ£l : β, { s : Finset (Fin (k + l)) // s.card = l } =>
βp (k + s.1)ββ * r ^ s.1 :=
by
- rcases Ennreal.lt_iff_exists_add_pos_lt.1 hr with β¨r', h0, hr'β©
+ rcases ENNReal.lt_iff_exists_add_pos_lt.1 hr with β¨r', h0, hr'β©
simpa only [mul_inv_cancel_rightβ (pow_pos h0 _).ne'] using
((NNReal.summable_sigma.1 (p.change_origin_series_summable_auxβ hr')).1 k).mul_right (r' ^ k)β»ΒΉ
#align formal_multilinear_series.change_origin_series_summable_auxβ FormalMultilinearSeries.change_origin_series_summable_auxβ
@@ -1272,7 +1272,7 @@ theorem changeOriginSeries_summable_auxβ {r : ββ₯0} (hr : βr < p.radius)
#align formal_multilinear_series.change_origin_series_summable_auxβ FormalMultilinearSeries.changeOriginSeries_summable_auxβ
theorem le_changeOriginSeries_radius (k : β) : p.radius β€ (p.changeOriginSeries k).radius :=
- Ennreal.le_of_forall_nNReal_lt fun r hr =>
+ ENNReal.le_of_forall_nnreal_lt fun r hr =>
le_radius_of_summable_nnnorm _ (p.changeOriginSeries_summable_auxβ hr k)
#align formal_multilinear_series.le_change_origin_series_radius FormalMultilinearSeries.le_changeOriginSeries_radius
@@ -1291,7 +1291,7 @@ theorem nnnorm_changeOrigin_le (k : β) (h : (βxββ : ββ₯0β) < p.radi
convergence.-/
theorem changeOrigin_radius : p.radius - βxββ β€ (p.changeOrigin x).radius :=
by
- refine' Ennreal.le_of_forall_pos_nNReal_lt fun r h0 hr => _
+ refine' ENNReal.le_of_forall_pos_nnreal_lt fun r h0 hr => _
rw [lt_tsub_iff_right, add_comm] at hr
have hr' : (βxββ : ββ₯0β) < p.radius := (le_add_right le_rfl).trans_lt hr
apply le_radius_of_summable_nnnorm
@@ -1448,16 +1448,16 @@ theorem hasFpowerSeriesAt_iff :
simp only [Metric.eventually_nhds_iff]
rintro β¨r, r_pos, hβ©
refine' β¨p.radius β r.to_nnreal, by simp, _, _β©
- Β· simp only [r_pos.lt, lt_inf_iff, Ennreal.coe_pos, Real.toNNReal_pos, and_true_iff]
+ Β· simp only [r_pos.lt, lt_inf_iff, ENNReal.coe_pos, Real.toNNReal_pos, and_true_iff]
obtain β¨z, z_pos, le_zβ© := NormedField.exists_norm_lt π r_pos.lt
- have : (βzββ : Ennreal) β€ p.radius :=
+ have : (βzββ : ENNReal) β€ p.radius :=
by
simp only [dist_zero_right] at h
apply FormalMultilinearSeries.le_radius_of_tendsto
convert tendsto_norm.comp (h le_z).Summable.tendsto_atTop_zero
funext <;> simp [norm_smul, mul_comm]
refine' lt_of_lt_of_le _ this
- simp only [Ennreal.coe_pos]
+ simp only [ENNReal.coe_pos]
exact zero_lt_iff.mpr (nnnorm_ne_zero_iff.mpr (norm_pos_iff.mp z_pos))
Β· simp only [Emetric.mem_ball, lt_inf_iff, edist_lt_coe, apply_eq_pow_smul_coeff, and_imp,
dist_zero_right] at hβ’
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -1022,9 +1022,7 @@ theorem HasFPowerSeriesAt.eq_zero {p : FormalMultilinearSeries π π E} {x :
funext n
ext x
rw [β mkPiRing_apply_one_eq_self (p n)]
- -- Porting note: nasty hack, was `simp [h.apply_eq_zero n 1]`
- have := Or.intro_right ?_ (h.apply_eq_zero n 1)
- simpa using this
+ simp [h.apply_eq_zero n 1]
#align has_fpower_series_at.eq_zero HasFPowerSeriesAt.eq_zero
/-- One-dimensional formal multilinear series representing the same function are equal. -/
mul
-div
cancellation lemmas (#11530)
Lemma names around cancellation of multiplication and division are a mess.
This PR renames a handful of them according to the following table (each big row contains the multiplicative statement, then the three rows contain the GroupWithZero
lemma name, the Group
lemma, the AddGroup
lemma name).
| Statement | New name | Old name | |
@@ -441,7 +441,7 @@ theorem HasFPowerSeriesOnBall.comp_sub (hf : HasFPowerSeriesOnBall f p x r) (y :
theorem HasFPowerSeriesOnBall.hasSum_sub (hf : HasFPowerSeriesOnBall f p x r) {y : E}
(hy : y β EMetric.ball x r) : HasSum (fun n : β => p n fun _ => y - x) (f y) := by
have : y - x β EMetric.ball (0 : E) r := by simpa [edist_eq_coe_nnnorm_sub] using hy
- simpa only [add_sub_cancel'_right] using hf.hasSum this
+ simpa only [add_sub_cancel] using hf.hasSum this
#align has_fpower_series_on_ball.has_sum_sub HasFPowerSeriesOnBall.hasSum_sub
theorem HasFPowerSeriesOnBall.radius_pos (hf : HasFPowerSeriesOnBall f p x r) : 0 < p.radius :=
@@ -1387,7 +1387,7 @@ theorem HasFPowerSeriesOnBall.analyticAt_of_mem (hf : HasFPowerSeriesOnBall f p
(h : y β EMetric.ball x r) : AnalyticAt π f y := by
have : (βy - xββ : ββ₯0β) < r := by simpa [edist_eq_coe_nnnorm_sub] using h
have := hf.changeOrigin this
- rw [add_sub_cancel'_right] at this
+ rw [add_sub_cancel] at this
exact this.analyticAt
#align has_fpower_series_on_ball.analytic_at_of_mem HasFPowerSeriesOnBall.analyticAt_of_mem
@@ -1458,7 +1458,7 @@ theorem hasFPowerSeriesAt_iff :
theorem hasFPowerSeriesAt_iff' :
HasFPowerSeriesAt f p zβ β βαΆ z in π zβ, HasSum (fun n => (z - zβ) ^ n β’ p.coeff n) (f z) := by
rw [β map_add_left_nhds_zero, eventually_map, hasFPowerSeriesAt_iff]
- simp_rw [add_sub_cancel']
+ simp_rw [add_sub_cancel_left]
#align has_fpower_series_at_iff' hasFPowerSeriesAt_iff'
end
Empty lines were removed by executing the following Python script twice
import os
import re
# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
for filename in files:
if filename.endswith('.lean'):
file_path = os.path.join(dir_path, filename)
# Open the file and read its contents
with open(file_path, 'r') as file:
content = file.read()
# Use a regular expression to replace sequences of "variable" lines separated by empty lines
# with sequences without empty lines
modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)
# Write the modified content back to the file
with open(file_path, 'w') as file:
file.write(modified_content)
@@ -82,11 +82,8 @@ open Set Filter Asymptotics
namespace FormalMultilinearSeries
variable [Ring π] [AddCommGroup E] [AddCommGroup F] [Module π E] [Module π F]
-
variable [TopologicalSpace E] [TopologicalSpace F]
-
variable [TopologicalAddGroup E] [TopologicalAddGroup F]
-
variable [ContinuousConstSMul π E] [ContinuousConstSMul π F]
/-- Given a formal multilinear series `p` and a vector `x`, then `p.sum x` is the sum `Ξ£ pβ xβΏ`. A
I removed some of the tactics that were not used and are hopefully uncontroversial arising from the linter at #11308.
As the commit messages should convey, the removed tactics are, essentially,
push_cast
norm_cast
congr
norm_num
dsimp
funext
intro
infer_instance
@@ -1448,7 +1448,6 @@ theorem hasFPowerSeriesAt_iff :
simp only [dist_zero_right] at h
apply FormalMultilinearSeries.le_radius_of_tendsto
convert tendsto_norm.comp (h le_z).summable.tendsto_atTop_zero
- funext
simp [norm_smul, mul_comm]
refine' lt_of_lt_of_le _ this
simp only [ENNReal.coe_pos]
open Classical
(#11199)
We remove all but one open Classical
s, instead preferring to use open scoped Classical
. The only real side-effect this led to is moving a couple declarations to use Exists.choose
instead of Classical.choose
.
The first few commits are explicitly labelled regex replaces for ease of review.
@@ -74,7 +74,8 @@ noncomputable section
variable {π E F G : Type*}
-open Topology Classical BigOperators NNReal Filter ENNReal
+open scoped Classical
+open Topology BigOperators NNReal Filter ENNReal
open Set Filter Asymptotics
This is a very large PR, but it has been reviewed piecemeal already in PRs to the bump/v4.7.0
branch as we update to intermediate nightlies.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: damiano <adomani@gmail.com>
@@ -776,9 +776,7 @@ theorem HasFPowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
Β· apply hp
Β· apply hy'.le
_ = B n := by
- -- Porting note: in the original, `B` was in the `field_simp`, but now Lean does not
- -- accept it. The current proof works in Lean 4, but does not in Lean 3.
- field_simp [pow_succ]
+ field_simp [B, pow_succ]
simp only [mul_assoc, mul_comm, mul_left_comm]
have hBL : HasSum B (L y) := by
apply HasSum.mul_left
@@ -792,7 +790,7 @@ theorem HasFPowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
refine' (IsBigO.of_bound 1 (eventually_principal.2 fun y hy => _)).trans this
rw [one_mul]
exact (hL y hy).trans (le_abs_self _)
- simp_rw [mul_right_comm _ (_ * _)] -- Porting note: there was an `L` inside the `simp_rw`.
+ simp_rw [L, mul_right_comm _ (_ * _)]
exact (isBigO_refl _ _).const_mul_left _
set_option linter.uppercaseLean3 false in
#align has_fpower_series_on_ball.is_O_image_sub_image_sub_deriv_principal HasFPowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
@@ -1333,7 +1331,7 @@ theorem changeOrigin_eval (h : (βxββ + βyββ : ββ₯0β) < p.radius
exact p.nnnorm_changeOriginSeriesTerm_apply_le _ _ _ _ _ _
have hf : HasSum f ((p.changeOrigin x).sum y) := by
refine' HasSum.sigma_of_hasSum ((p.changeOrigin x).summable y_mem_ball).hasSum (fun k => _) hsf
- Β· dsimp only
+ Β· dsimp only [f]
refine' ContinuousMultilinearMap.hasSum_eval _ _
have := (p.hasFPowerSeriesOnBall_changeOrigin k radius_pos).hasSum x_mem_ball
rw [zero_add] at this
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -760,14 +760,14 @@ theorem HasFPowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
have hAB : β n, βA (n + 2)β β€ B n := fun n =>
calc
βA (n + 2)β β€ βp (n + 2)β * β(n + 2) * βy - (x, x)β ^ (n + 1) * βy.1 - y.2β := by
- -- porting note: `pi_norm_const` was `pi_norm_const (_ : E)`
+ -- Porting note: `pi_norm_const` was `pi_norm_const (_ : E)`
simpa only [Fintype.card_fin, pi_norm_const, Prod.norm_def, Pi.sub_def,
Prod.fst_sub, Prod.snd_sub, sub_sub_sub_cancel_right] using
(p <| n + 2).norm_image_sub_le (fun _ => y.1 - x) fun _ => y.2 - x
_ = βp (n + 2)β * βy - (x, x)β ^ n * (β(n + 2) * βy - (x, x)β * βy.1 - y.2β) := by
rw [pow_succ βy - (x, x)β]
ring
- -- porting note: the two `β` in `βr'` are new, without them, Lean fails to synthesize
+ -- Porting note: the two `β` in `βr'` are new, without them, Lean fails to synthesize
-- instances `HDiv β ββ₯0 ?m` or `HMul β ββ₯0 ?m`
_ β€ C * a ^ (n + 2) / βr' ^ (n + 2)
* βr' ^ n * (β(n + 2) * βy - (x, x)β * βy.1 - y.2β) := by
@@ -776,7 +776,7 @@ theorem HasFPowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
Β· apply hp
Β· apply hy'.le
_ = B n := by
- -- porting note: in the original, `B` was in the `field_simp`, but now Lean does not
+ -- Porting note: in the original, `B` was in the `field_simp`, but now Lean does not
-- accept it. The current proof works in Lean 4, but does not in Lean 3.
field_simp [pow_succ]
simp only [mul_assoc, mul_comm, mul_left_comm]
@@ -785,14 +785,14 @@ theorem HasFPowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
simp only [add_mul]
have : βaβ < 1 := by simp only [Real.norm_eq_abs, abs_of_pos ha.1, ha.2]
rw [div_eq_mul_inv, div_eq_mul_inv]
- exact (hasSum_coe_mul_geometric_of_norm_lt_one this).add -- porting note: was `convert`!
+ exact (hasSum_coe_mul_geometric_of_norm_lt_one this).add -- Porting note: was `convert`!
((hasSum_geometric_of_norm_lt_one this).mul_left 2)
exact hA.norm_le_of_bounded hBL hAB
suffices L =O[π (EMetric.ball (x, x) r')] fun y => βy - (x, x)β * βy.1 - y.2β by
refine' (IsBigO.of_bound 1 (eventually_principal.2 fun y hy => _)).trans this
rw [one_mul]
exact (hL y hy).trans (le_abs_self _)
- simp_rw [mul_right_comm _ (_ * _)] -- porting note: there was an `L` inside the `simp_rw`.
+ simp_rw [mul_right_comm _ (_ * _)] -- Porting note: there was an `L` inside the `simp_rw`.
exact (isBigO_refl _ _).const_mul_left _
set_option linter.uppercaseLean3 false in
#align has_fpower_series_on_ball.is_O_image_sub_image_sub_deriv_principal HasFPowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
@@ -958,7 +958,7 @@ theorem Asymptotics.IsBigO.continuousMultilinearMap_apply_eq_zero {n : β} {p :
clear h hc z_mem
cases' n with n
Β· exact norm_eq_zero.mp (by
- -- porting note: the symmetric difference of the `simpa only` sets:
+ -- Porting note: the symmetric difference of the `simpa only` sets:
-- added `Nat.zero_eq, zero_add, pow_one`
-- removed `zero_pow, Ne.def, Nat.one_ne_zero, not_false_iff`
simpa only [Nat.zero_eq, fin0_apply_norm, norm_eq_zero, norm_zero, zero_add, pow_one,
@@ -977,13 +977,13 @@ theorem Asymptotics.IsBigO.continuousMultilinearMap_apply_eq_zero {n : β} {p :
have hβ :=
calc
βp fun _ => k β’ yβ β€ c * βk β’ yβ ^ (n.succ + 1) := by
- -- porting note: now Lean wants `_root_.`
+ -- Porting note: now Lean wants `_root_.`
simpa only [norm_pow, _root_.norm_norm] using ht (k β’ y) (δΡ (mem_ball_zero_iff.mpr hβ))
--simpa only [norm_pow, norm_norm] using ht (k β’ y) (δΡ (mem_ball_zero_iff.mpr hβ))
_ = βkβ ^ n.succ * (βkβ * (c * βyβ ^ (n.succ + 1))) := by
- -- porting note: added `Nat.succ_eq_add_one` since otherwise `ring` does not conclude.
+ -- Porting note: added `Nat.succ_eq_add_one` since otherwise `ring` does not conclude.
simp only [norm_smul, mul_pow, Nat.succ_eq_add_one]
- -- porting note: removed `rw [pow_succ]`, since it now becomes superfluous.
+ -- Porting note: removed `rw [pow_succ]`, since it now becomes superfluous.
ring
have hβ : βkβ * (c * βyβ ^ (n.succ + 1)) < Ξ΅ :=
inv_mul_cancel_rightβ hβ.ne.symm Ξ΅ βΈ
@@ -1022,11 +1022,11 @@ theorem HasFPowerSeriesAt.apply_eq_zero {p : FormalMultilinearSeries π E F} {
/-- A one-dimensional formal multilinear series representing the zero function is zero. -/
theorem HasFPowerSeriesAt.eq_zero {p : FormalMultilinearSeries π π E} {x : π}
(h : HasFPowerSeriesAt 0 p x) : p = 0 := by
- -- porting note: `funext; ext` was `ext (n x)`
+ -- Porting note: `funext; ext` was `ext (n x)`
funext n
ext x
rw [β mkPiRing_apply_one_eq_self (p n)]
- -- porting note: nasty hack, was `simp [h.apply_eq_zero n 1]`
+ -- Porting note: nasty hack, was `simp [h.apply_eq_zero n 1]`
have := Or.intro_right ?_ (h.apply_eq_zero n 1)
simpa using this
#align has_fpower_series_at.eq_zero HasFPowerSeriesAt.eq_zero
@@ -738,8 +738,8 @@ theorem HasFPowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
rcases (zero_le r').eq_or_lt with (rfl | hr'0)
Β· simp only [isBigO_bot, EMetric.ball_zero, principal_empty, ENNReal.coe_zero]
obtain β¨a, ha, C, hC : 0 < C, hpβ© :
- β a β Ioo (0 : β) 1, β C > 0, β n : β, βp nβ * (r' : β) ^ n β€ C * a ^ n
- exact p.norm_mul_pow_le_mul_pow_of_lt_radius (hr.trans_le hf.r_le)
+ β a β Ioo (0 : β) 1, β C > 0, β n : β, βp nβ * (r' : β) ^ n β€ C * a ^ n :=
+ p.norm_mul_pow_le_mul_pow_of_lt_radius (hr.trans_le hf.r_le)
simp only [β le_div_iff (pow_pos (NNReal.coe_pos.2 hr'0) _)] at hp
set L : E Γ E β β := fun y =>
C * (a / r') ^ 2 * (βy - (x, x)β * βy.1 - y.2β) * (a / (1 - a) ^ 2 + 2 / (1 - a))
@@ -830,8 +830,7 @@ theorem HasFPowerSeriesOnBall.tendstoUniformlyOn {r' : ββ₯0} (hf : HasFPowerS
TendstoUniformlyOn (fun n y => p.partialSum n y) (fun y => f (x + y)) atTop
(Metric.ball (0 : E) r') := by
obtain β¨a, ha, C, -, hpβ© : β a β Ioo (0 : β) 1, β C > 0, β y β Metric.ball (0 : E) r', β n,
- βf (x + y) - p.partialSum n yβ β€ C * a ^ n
- exact hf.uniform_geometric_approx h
+ βf (x + y) - p.partialSum n yβ β€ C * a ^ n := hf.uniform_geometric_approx h
refine' Metric.tendstoUniformlyOn_iff.2 fun Ξ΅ Ξ΅pos => _
have L : Tendsto (fun n => (C : β) * a ^ n) atTop (π ((C : β) * 0)) :=
tendsto_const_nhds.mul (tendsto_pow_atTop_nhds_zero_of_lt_one ha.1.le ha.2)
have
, replace
and suffices
(#10640)
No changes to tactic file, it's just boring fixes throughout the library.
This follows on from #6964.
Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -720,7 +720,7 @@ theorem HasFPowerSeriesAt.isBigO_sub_partialSum_pow (hf : HasFPowerSeriesAt f p
βf (x + y) - p.partialSum n yβ β€ C * (a * (βyβ / r')) ^ n :=
hf.uniform_geometric_approx' h
refine' isBigO_iff.2 β¨C * (a / r') ^ n, _β©
- replace r'0 : 0 < (r' : β); Β· exact mod_cast r'0
+ replace r'0 : 0 < (r' : β) := mod_cast r'0
filter_upwards [Metric.ball_mem_nhds (0 : E) r'0] with y hy
simpa [mul_pow, mul_div_assoc, mul_assoc, div_mul_eq_mul_div] using hp y hy n
set_option linter.uppercaseLean3 false in
ContinuousMultilinearLinearMap.mkPiField
to mkPiRing
(#9910)
This matches the generality of the non-continuous versions.
The norm_smulRight
lemma is the only new result.
@@ -941,7 +941,7 @@ If a function `f : E β F` has two representations as power series at a point `
to formal multilinear series `pβ` and `pβ`, then these representations agree term-by-term. That is,
for any `n : β` and `y : E`, `pβ n (fun i β¦ y) = pβ n (fun i β¦ y)`. In the one-dimensional case,
when `f : π β E`, the continuous multilinear maps `pβ n` and `pβ n` are given by
-`ContinuousMultilinearMap.mkPiField`, and hence are determined completely by the value of
+`ContinuousMultilinearMap.mkPiRing`, and hence are determined completely by the value of
`pβ n (fun i β¦ 1)`, so `pβ = pβ`. Consequently, the radius of convergence for one series can be
transferred to the other.
-/
@@ -1026,7 +1026,7 @@ theorem HasFPowerSeriesAt.eq_zero {p : FormalMultilinearSeries π π E} {x :
-- porting note: `funext; ext` was `ext (n x)`
funext n
ext x
- rw [β mkPiField_apply_one_eq_self (p n)]
+ rw [β mkPiRing_apply_one_eq_self (p n)]
-- porting note: nasty hack, was `simp [h.apply_eq_zero n 1]`
have := Or.intro_right ?_ (h.apply_eq_zero n 1)
simpa using this
@@ -1297,7 +1297,6 @@ theorem changeOrigin_radius : p.radius - βxββ β€ (p.changeOrigin x).radiu
/-- `derivSeries p` is a power series for `fderiv π f` if `p` is a power series for `f`,
see `HasFPowerSeriesOnBall.fderiv`. -/
-noncomputable
def derivSeries : FormalMultilinearSeries π E (E βL[π] F) :=
(continuousMultilinearCurryFin1 π E F : (E[Γ1]βL[π] F) βL[π] E βL[π] F)
|>.compFormalMultilinearSeries (p.changeOriginSeries 1)
@@ -287,7 +287,7 @@ theorem summable_norm_apply (p : FormalMultilinearSeries π E F) {x : E}
(hx : x β EMetric.ball (0 : E) p.radius) : Summable fun n : β => βp n fun _ => xβ := by
rw [mem_emetric_ball_zero_iff] at hx
refine' .of_nonneg_of_le
- (fun _ β¦ norm_nonneg _) (fun n β¦ ((p n).le_op_norm _).trans_eq _) (p.summable_norm_mul_pow hx)
+ (fun _ β¦ norm_nonneg _) (fun n β¦ ((p n).le_opNorm _).trans_eq _) (p.summable_norm_mul_pow hx)
simp
#align formal_multilinear_series.summable_norm_apply FormalMultilinearSeries.summable_norm_apply
@@ -689,7 +689,7 @@ theorem HasFPowerSeriesOnBall.uniform_geometric_approx' {r' : ββ₯0}
intro n
calc
β(p n) fun _ : Fin n => yβ
- _ β€ βp nβ * β _i : Fin n, βyβ := ContinuousMultilinearMap.le_op_norm _ _
+ _ β€ βp nβ * β _i : Fin n, βyβ := ContinuousMultilinearMap.le_opNorm _ _
_ = βp nβ * (r' : β) ^ n * (βyβ / r') ^ n := by field_simp [mul_right_comm]
_ β€ C * a ^ n * (βyβ / r') ^ n := by gcongr ?_ * _; apply hp
_ β€ C * (a * (βyβ / r')) ^ n := by rw [mul_pow, mul_assoc]
@@ -1147,8 +1147,8 @@ theorem nnnorm_changeOriginSeriesTerm_apply_le (k l : β) (s : Finset (Fin (k +
βp.changeOriginSeriesTerm k l s hs (fun _ => x) fun _ => yββ β€
βp (k + l)ββ * βxββ ^ l * βyββ ^ k := by
rw [β p.nnnorm_changeOriginSeriesTerm k l s hs, β Fin.prod_const, β Fin.prod_const]
- apply ContinuousMultilinearMap.le_of_op_nnnorm_le
- apply ContinuousMultilinearMap.le_op_nnnorm
+ apply ContinuousMultilinearMap.le_of_opNNNorm_le
+ apply ContinuousMultilinearMap.le_opNNNorm
#align formal_multilinear_series.nnnorm_change_origin_series_term_apply_le FormalMultilinearSeries.nnnorm_changeOriginSeriesTerm_apply_le
/-- The power series for `f.changeOrigin k`.
@@ -1172,7 +1172,7 @@ theorem nnnorm_changeOriginSeries_apply_le_tsum (k l : β) (x : E) :
βp.changeOriginSeries k l fun _ => xββ β€
β' _ : { s : Finset (Fin (k + l)) // s.card = l }, βp (k + l)ββ * βxββ ^ l := by
rw [NNReal.tsum_mul_right, β Fin.prod_const]
- exact (p.changeOriginSeries k l).le_of_op_nnnorm_le _ (p.nnnorm_changeOriginSeries_le_tsum _ _)
+ exact (p.changeOriginSeries k l).le_of_opNNNorm_le _ (p.nnnorm_changeOriginSeries_le_tsum _ _)
#align formal_multilinear_series.nnnorm_change_origin_series_apply_le_tsum FormalMultilinearSeries.nnnorm_changeOriginSeries_apply_le_tsum
/-- Changing the origin of a formal multilinear series `p`, so that
@@ -1344,7 +1344,7 @@ theorem changeOrigin_eval (h : (βxββ + βyββ : ββ₯0β) < p.radius
apply hasSum_fintype
Β· refine' .of_nnnorm_bounded _
(p.changeOriginSeries_summable_auxβ (mem_emetric_ball_zero_iff.1 x_mem_ball) k) fun s => _
- refine' (ContinuousMultilinearMap.le_op_nnnorm _ _).trans_eq _
+ refine' (ContinuousMultilinearMap.le_opNNNorm _ _).trans_eq _
simp
refine' hf.unique (changeOriginIndexEquiv.symm.hasSum_iff.1 _)
refine' HasSum.sigma_of_hasSum
See here on Zulip.
This adds some general lemmas due to Junyan Xu, culminating in
theorem HasFPowerSeriesOnBall.hasSum_iteratedFDeriv {π : Type*} [NontriviallyNormedField π] {E : Type*}
[ NormedAddCommGroup E] [NormedSpace π E] {F : Type*} [NormedAddCommGroup F]
[NormedSpace π F] {p : FormalMultilinearSeries π E F} {f : E β F} {x : E} {r : ββ₯0β}
(h : HasFPowerSeriesOnBall f p x r) [CompleteSpace F] [CharZero π] {y : E} (hy : y β EMetric.ball 0 r) :+1:
HasSum (fun n β¦ (n ! : π)β»ΒΉβ’ (iteratedFDeriv π n f x) fun x β¦ y) (f (x + y))
and uses this to show that the Taylor series of a function that is complex differentiable on an open ball in β converges there to the function; similarly for functions that are holomorphic on all of β:
lemma Complex.hasSum_taylorSeries_on_ball {E : Type*} [NormedAddCommGroup E] [NormedSpace β E]
[CompleteSpace E] β¦f : β β Eβ¦ β¦c : ββ¦ β¦r : NNRealβ¦ (hf : DifferentiableOn β f (Metric.ball c βr)) β¦z : ββ¦
(hz : z β Metric.ball c βr) :
HasSum (fun n β¦ (n ! : β)β»ΒΉ β’ (z - c) ^ n β’ iteratedDeriv n f c) (f z)
lemma Complex.taylorSeries_eq_on_ball {E : Type*} [NormedAddCommGroup E] [NormedSpace β E]
[CompleteSpace E] β¦f : β β Eβ¦ β¦c : ββ¦ β¦r : NNRealβ¦ (hf : DifferentiableOn β f (Metric.ball c βr)) β¦z : ββ¦
(hz : z β Metric.ball c βr) :
β' (n : β), (n ! : β)β»ΒΉ β’ (z - c) ^ n β’ iteratedDeriv n f c = f z
lemma Complex.taylorSeries_eq_on_ball' β¦c : ββ¦ β¦r : NNRealβ¦ β¦z : ββ¦ (hz : z β Metric.ball c βr) {f : β β β}
(hf : DifferentiableOn β f (Metric.ball c βr)) :
β' (n : β), (n ! : β)β»ΒΉ * iteratedDeriv n f c * (z - c) ^ n = f z
and similar lemmas for EMetric.ball
s and entire functions.
@@ -1295,6 +1295,13 @@ theorem changeOrigin_radius : p.radius - βxββ β€ (p.changeOrigin x).radiu
(NNReal.summable_sigma.1 (p.changeOriginSeries_summable_auxβ hr)).2
#align formal_multilinear_series.change_origin_radius FormalMultilinearSeries.changeOrigin_radius
+/-- `derivSeries p` is a power series for `fderiv π f` if `p` is a power series for `f`,
+see `HasFPowerSeriesOnBall.fderiv`. -/
+noncomputable
+def derivSeries : FormalMultilinearSeries π E (E βL[π] F) :=
+ (continuousMultilinearCurryFin1 π E F : (E[Γ1]βL[π] F) βL[π] E βL[π] F)
+ |>.compFormalMultilinearSeries (p.changeOriginSeries 1)
+
end
-- From this point on, assume that the space is complete, to make sure that series that converge
@@ -280,14 +280,14 @@ theorem summable_norm_mul_pow (p : FormalMultilinearSeries π E F) {r : ββ₯
Summable fun n : β => βp nβ * (r : β) ^ n := by
obtain β¨a, ha : a β Ioo (0 : β) 1, C, - : 0 < C, hpβ© := p.norm_mul_pow_le_mul_pow_of_lt_radius h
exact .of_nonneg_of_le (fun n => mul_nonneg (norm_nonneg _) (pow_nonneg r.coe_nonneg _))
- hp ((summable_geometric_of_lt_1 ha.1.le ha.2).mul_left _)
+ hp ((summable_geometric_of_lt_one ha.1.le ha.2).mul_left _)
#align formal_multilinear_series.summable_norm_mul_pow FormalMultilinearSeries.summable_norm_mul_pow
theorem summable_norm_apply (p : FormalMultilinearSeries π E F) {x : E}
(hx : x β EMetric.ball (0 : E) p.radius) : Summable fun n : β => βp n fun _ => xβ := by
rw [mem_emetric_ball_zero_iff] at hx
refine' .of_nonneg_of_le
- (fun _ => norm_nonneg _) (fun n => ((p n).le_op_norm _).trans_eq _) (p.summable_norm_mul_pow hx)
+ (fun _ β¦ norm_nonneg _) (fun n β¦ ((p n).le_op_norm _).trans_eq _) (p.summable_norm_mul_pow hx)
simp
#align formal_multilinear_series.summable_norm_apply FormalMultilinearSeries.summable_norm_apply
@@ -315,7 +315,7 @@ theorem radius_eq_top_iff_summable_norm (p : FormalMultilinearSeries π E F) :
obtain β¨a, ha : a β Ioo (0 : β) 1, C, - : 0 < C, hpβ© := p.norm_mul_pow_le_mul_pow_of_lt_radius
(show (r : ββ₯0β) < p.radius from h.symm βΈ ENNReal.coe_lt_top)
refine' .of_norm_bounded
- (fun n => (C : β) * a ^ n) ((summable_geometric_of_lt_1 ha.1.le ha.2).mul_left _) fun n => _
+ (fun n β¦ (C : β) * a ^ n) ((summable_geometric_of_lt_one ha.1.le ha.2).mul_left _) fun n β¦ _
specialize hp n
rwa [Real.norm_of_nonneg (mul_nonneg (norm_nonneg _) (pow_nonneg r.coe_nonneg n))]
Β· exact p.radius_eq_top_of_summable_norm
@@ -785,8 +785,8 @@ theorem HasFPowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
simp only [add_mul]
have : βaβ < 1 := by simp only [Real.norm_eq_abs, abs_of_pos ha.1, ha.2]
rw [div_eq_mul_inv, div_eq_mul_inv]
- exact (hasSum_coe_mul_geometric_of_norm_lt_1 this).add -- porting note: was `convert`!
- ((hasSum_geometric_of_norm_lt_1 this).mul_left 2)
+ exact (hasSum_coe_mul_geometric_of_norm_lt_one this).add -- porting note: was `convert`!
+ ((hasSum_geometric_of_norm_lt_one this).mul_left 2)
exact hA.norm_le_of_bounded hBL hAB
suffices L =O[π (EMetric.ball (x, x) r')] fun y => βy - (x, x)β * βy.1 - y.2β by
refine' (IsBigO.of_bound 1 (eventually_principal.2 fun y hy => _)).trans this
@@ -834,7 +834,7 @@ theorem HasFPowerSeriesOnBall.tendstoUniformlyOn {r' : ββ₯0} (hf : HasFPowerS
exact hf.uniform_geometric_approx h
refine' Metric.tendstoUniformlyOn_iff.2 fun Ξ΅ Ξ΅pos => _
have L : Tendsto (fun n => (C : β) * a ^ n) atTop (π ((C : β) * 0)) :=
- tendsto_const_nhds.mul (tendsto_pow_atTop_nhds_0_of_lt_1 ha.1.le ha.2)
+ tendsto_const_nhds.mul (tendsto_pow_atTop_nhds_zero_of_lt_one ha.1.le ha.2)
rw [mul_zero] at L
refine' (L.eventually (gt_mem_nhds Ξ΅pos)).mono fun n hn y hy => _
rw [dist_eq_norm]
f ^ n
(#9617)
This involves moving lemmas from Algebra.GroupPower.Ring
to Algebra.GroupWithZero.Basic
and changing some 0 < n
assumptions to n β 0
.
From LeanAPAP
@@ -961,7 +961,7 @@ theorem Asymptotics.IsBigO.continuousMultilinearMap_apply_eq_zero {n : β} {p :
Β· exact norm_eq_zero.mp (by
-- porting note: the symmetric difference of the `simpa only` sets:
-- added `Nat.zero_eq, zero_add, pow_one`
- -- removed `zero_pow', Ne.def, Nat.one_ne_zero, not_false_iff`
+ -- removed `zero_pow, Ne.def, Nat.one_ne_zero, not_false_iff`
simpa only [Nat.zero_eq, fin0_apply_norm, norm_eq_zero, norm_zero, zero_add, pow_one,
mul_zero, norm_le_zero_iff] using ht 0 (δΡ (Metric.mem_ball_self δ_pos)))
Β· refine' Or.elim (Classical.em (y = 0))
This defines "continuously polynomial" (shortened to "cpolynomial") functions as a special cases of analytic functions: they are the functions that admit a development as a finite formal multilinear series. Then we prove their basic properties. The point of doing is this is that finite series are always summable, so we can remove the completeness assumptions in some results about analytic functions (differentiability for example). Examples of continuously polynomial functions include continuous multilinear maps, and functions defined by polynomials.
Co-authored-by: smorel394 <67864981+smorel394@users.noreply.github.com> Co-authored-by: morel <smorel@math.princeton.edu>
@@ -1192,7 +1192,7 @@ The forward map sends `(k, l, s)` to `(k + l, s)` and the inverse map sends `(n,
with non-definitional equalities. -/
@[simps]
def changeOriginIndexEquiv :
- (Ξ£k l : β, { s : Finset (Fin (k + l)) // s.card = l }) β Ξ£n : β, Finset (Fin n) where
+ (Ξ£ k l : β, { s : Finset (Fin (k + l)) // s.card = l }) β Ξ£ n : β, Finset (Fin n) where
toFun s := β¨s.1 + s.2.1, s.2.2β©
invFun s :=
β¨s.1 - s.2.card, s.2.card,
@@ -1216,6 +1216,16 @@ def changeOriginIndexEquiv :
simp [tsub_add_cancel_of_le (card_finset_fin_le s), Fin.castIso_to_equiv]
#align formal_multilinear_series.change_origin_index_equiv FormalMultilinearSeries.changeOriginIndexEquiv
+lemma changeOriginSeriesTerm_changeOriginIndexEquiv_symm (n t) :
+ let s := changeOriginIndexEquiv.symm β¨n, tβ©
+ p.changeOriginSeriesTerm s.1 s.2.1 s.2.2 s.2.2.2 (fun _ β¦ x) (fun _ β¦ y) =
+ p n (t.piecewise (fun _ β¦ x) fun _ β¦ y) := by
+ have : β (m) (hm : n = m), p n (t.piecewise (fun _ β¦ x) fun _ β¦ y) =
+ p m ((t.map (Fin.castIso hm).toEmbedding).piecewise (fun _ β¦ x) fun _ β¦ y) := by
+ rintro m rfl
+ simp (config := { unfoldPartialApp := true }) [Finset.piecewise]
+ simp_rw [changeOriginSeriesTerm_apply, eq_comm]; apply this
+
theorem changeOriginSeries_summable_auxβ {r r' : ββ₯0} (hr : (r + r' : ββ₯0β) < p.radius) :
Summable fun s : Ξ£k l : β, { s : Finset (Fin (k + l)) // s.card = l } =>
βp (s.1 + s.2.1)ββ * r ^ s.2.1 * r' ^ s.1 := by
@@ -1309,7 +1319,7 @@ theorem changeOrigin_eval (h : (βxββ + βyββ : ββ₯0β) < p.radius
have x_add_y_mem_ball : x + y β EMetric.ball (0 : E) p.radius := by
refine' mem_emetric_ball_zero_iff.2 (lt_of_le_of_lt _ h)
exact mod_cast nnnorm_add_le x y
- set f : (Ξ£k l : β, { s : Finset (Fin (k + l)) // s.card = l }) β F := fun s =>
+ set f : (Ξ£ k l : β, { s : Finset (Fin (k + l)) // s.card = l }) β F := fun s =>
p.changeOriginSeriesTerm s.1 s.2.1 s.2.2 s.2.2.2 (fun _ => x) fun _ => y
have hsf : Summable f := by
refine' .of_nnnorm_bounded _ (p.changeOriginSeries_summable_auxβ h) _
@@ -1333,17 +1343,8 @@ theorem changeOrigin_eval (h : (βxββ + βyββ : ββ₯0β) < p.radius
refine' HasSum.sigma_of_hasSum
(p.hasSum x_add_y_mem_ball) (fun n => _) (changeOriginIndexEquiv.symm.summable_iff.2 hsf)
erw [(p n).map_add_univ (fun _ => x) fun _ => y]
- -- porting note: added explicit function
- convert hasSum_fintype (fun c : Finset (Fin n) => f (changeOriginIndexEquiv.symm β¨n, cβ©))
- rename_i s _
- dsimp only [changeOriginSeriesTerm, (Β· β Β·), changeOriginIndexEquiv_symm_apply_fst,
- changeOriginIndexEquiv_symm_apply_snd_fst, changeOriginIndexEquiv_symm_apply_snd_snd_coe]
- rw [ContinuousMultilinearMap.curryFinFinset_apply_const]
- have : β (m) (hm : n = m), p n (s.piecewise (fun _ => x) fun _ => y) =
- p m ((s.map (Fin.castIso hm).toEquiv.toEmbedding).piecewise (fun _ => x) fun _ => y) := by
- rintro m rfl
- simp (config := { unfoldPartialApp := true }) [Finset.piecewise]
- apply this
+ simp_rw [β changeOriginSeriesTerm_changeOriginIndexEquiv_symm]
+ exact hasSum_fintype (fun c => f (changeOriginIndexEquiv.symm β¨n, cβ©))
#align formal_multilinear_series.change_origin_eval FormalMultilinearSeries.changeOrigin_eval
/-- Power series terms are analytic as we vary the origin -/
@@ -706,9 +706,9 @@ theorem HasFPowerSeriesOnBall.uniform_geometric_approx {r' : ββ₯0}
hf.uniform_geometric_approx' h
refine' β¨a, ha, C, hC, fun y hy n => (hp y hy n).trans _β©
have yr' : βyβ < r' := by rwa [ball_zero_eq] at hy
+ have := ha.1.le -- needed to discharge a side goal on the next line
gcongr
- exacts [mul_nonneg ha.1.le (div_nonneg (norm_nonneg y) r'.coe_nonneg),
- mul_le_of_le_one_right ha.1.le (div_le_one_of_le yr'.le r'.coe_nonneg)]
+ exact mul_le_of_le_one_right ha.1.le (div_le_one_of_le yr'.le r'.coe_nonneg)
#align has_fpower_series_on_ball.uniform_geometric_approx HasFPowerSeriesOnBall.uniform_geometric_approx
/-- Taylor formula for an analytic function, `IsBigO` version. -/
$
with <|
(#9319)
See Zulip thread for the discussion.
@@ -602,7 +602,7 @@ theorem analyticOn_congr' {s : Set E} (h : f =αΆ [πΛ’ s] g) : AnalyticOn π
theorem AnalyticOn.congr {s : Set E} (hs : IsOpen s) (hf : AnalyticOn π f s) (hg : s.EqOn f g) :
AnalyticOn π g s :=
- hf.congr' $ mem_nhdsSet_iff_forall.mpr
+ hf.congr' <| mem_nhdsSet_iff_forall.mpr
(fun _ hz => eventuallyEq_iff_exists_mem.mpr β¨s, hs.mem_nhds hz, hgβ©)
theorem analyticOn_congr {s : Set E} (hs : IsOpen s) (h : s.EqOn f g) : AnalyticOn π f s β
β x β s, _
instead of β (x) (_ : x β s), _
(#9184)
Search for [ββ].*(_
and manually replace some occurrences with more readable versions.
In case of β
, the new expressions are defeq to the old ones.
In case of β
, they differ by exists_prop
.
In some rare cases, golf proofs that needed fixing.
@@ -802,7 +802,7 @@ ball, the norm of the difference `f y - f z - p 1 (fun _ β¦ y - z)` is bounded
`C * (max βy - xβ βz - xβ) * βy - zβ`. -/
theorem HasFPowerSeriesOnBall.image_sub_sub_deriv_le (hf : HasFPowerSeriesOnBall f p x r)
(hr : r' < r) :
- β C, β (y) (_ : y β EMetric.ball x r') (z) (_ : z β EMetric.ball x r'),
+ β C, βα΅ (y β EMetric.ball x r') (z β EMetric.ball x r'),
βf y - f z - p 1 fun _ => y - zβ β€ C * max βy - xβ βz - xβ * βy - zβ := by
simpa only [isBigO_principal, mul_assoc, norm_mul, norm_norm, Prod.forall, EMetric.mem_ball,
Prod.edist_eq, max_lt_iff, and_imp, @forall_swap (_ < _) E] using
cases'
(#9171)
I literally went through and regex'd some uses of cases'
, replacing them with rcases
; this is meant to be a low effort PR as I hope that tools can do this in the future.
rcases
is an easier replacement than cases
, though with better tools we could in future do a second pass converting simple rcases
added here (and existing ones) to cases
.
@@ -928,7 +928,7 @@ theorem HasFPowerSeriesOnBall.sum (h : HasFPowerSeriesOnBall f p x r) {y : E}
/-- The sum of a converging power series is continuous in its disk of convergence. -/
protected theorem FormalMultilinearSeries.continuousOn [CompleteSpace F] :
ContinuousOn p.sum (EMetric.ball 0 p.radius) := by
- cases' (zero_le p.radius).eq_or_lt with h h
+ rcases (zero_le p.radius).eq_or_lt with h | h
Β· simp [β h, continuousOn_empty]
Β· exact (p.hasFPowerSeriesOnBall h).continuousOn
#align formal_multilinear_series.continuous_on FormalMultilinearSeries.continuousOn
exact_mod_cast
tactic with mod_cast
elaborator where possible (#8404)
We still have the exact_mod_cast
tactic, used in a few places, which somehow (?) works a little bit harder to prevent the expected type influencing the elaboration of the term. I would like to get to the bottom of this, and it will be easier once the only usages of exact_mod_cast
are the ones that don't work using the term elaborator by itself.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -134,7 +134,7 @@ theorem le_radius_of_bound (C : β) {r : ββ₯0} (h : β n : β, βp nβ *
/-- If `βpββ rβΏ` is bounded in `n`, then the radius of `p` is at least `r`. -/
theorem le_radius_of_bound_nnreal (C : ββ₯0) {r : ββ₯0} (h : β n : β, βp nββ * r ^ n β€ C) :
(r : ββ₯0β) β€ p.radius :=
- p.le_radius_of_bound C fun n => by exact_mod_cast h n
+ p.le_radius_of_bound C fun n => mod_cast h n
#align formal_multilinear_series.le_radius_of_bound_nnreal FormalMultilinearSeries.le_radius_of_bound_nnreal
/-- If `βpββ rβΏ = O(1)`, as `n β β`, then the radius of `p` is at least `r`. -/
@@ -157,7 +157,7 @@ theorem le_radius_of_summable_nnnorm (h : Summable fun n => βp nββ * r ^ n
theorem le_radius_of_summable (h : Summable fun n => βp nβ * (r : β) ^ n) : βr β€ p.radius :=
p.le_radius_of_summable_nnnorm <| by
simp only [β coe_nnnorm] at h
- exact_mod_cast h
+ exact mod_cast h
#align formal_multilinear_series.le_radius_of_summable FormalMultilinearSeries.le_radius_of_summable
theorem radius_eq_top_of_forall_nnreal_isBigO
@@ -258,7 +258,7 @@ theorem norm_le_div_pow_of_pos_of_lt_radius (p : FormalMultilinearSeries π E
theorem nnnorm_mul_pow_le_of_lt_radius (p : FormalMultilinearSeries π E F) {r : ββ₯0}
(h : (r : ββ₯0β) < p.radius) : β C > 0, β n, βp nββ * r ^ n β€ C :=
let β¨C, hC, hpβ© := p.norm_mul_pow_le_of_lt_radius h
- β¨β¨C, hC.lt.leβ©, hC, by exact_mod_cast hpβ©
+ β¨β¨C, hC.lt.leβ©, hC, mod_cast hpβ©
#align formal_multilinear_series.nnnorm_mul_pow_le_of_lt_radius FormalMultilinearSeries.nnnorm_mul_pow_le_of_lt_radius
theorem le_radius_of_tendsto (p : FormalMultilinearSeries π E F) {l : β}
@@ -676,7 +676,7 @@ theorem HasFPowerSeriesOnBall.uniform_geometric_approx' {r' : ββ₯0}
have hr'0 : 0 < (r' : β) := (norm_nonneg _).trans_lt yr'
have : y β EMetric.ball (0 : E) r := by
refine' mem_emetric_ball_zero_iff.2 (lt_trans _ h)
- exact_mod_cast yr'
+ exact mod_cast yr'
rw [norm_sub_rev, β mul_div_right_comm]
have ya : a * (βyβ / βr') β€ a :=
mul_le_of_le_one_right ha.1.le (div_le_one_of_le yr'.le r'.coe_nonneg)
@@ -720,7 +720,7 @@ theorem HasFPowerSeriesAt.isBigO_sub_partialSum_pow (hf : HasFPowerSeriesAt f p
βf (x + y) - p.partialSum n yβ β€ C * (a * (βyβ / r')) ^ n :=
hf.uniform_geometric_approx' h
refine' isBigO_iff.2 β¨C * (a / r') ^ n, _β©
- replace r'0 : 0 < (r' : β); Β· exact_mod_cast r'0
+ replace r'0 : 0 < (r' : β); Β· exact mod_cast r'0
filter_upwards [Metric.ball_mem_nhds (0 : E) r'0] with y hy
simpa [mul_pow, mul_div_assoc, mul_assoc, div_mul_eq_mul_div] using hp y hy n
set_option linter.uppercaseLean3 false in
@@ -1308,7 +1308,7 @@ theorem changeOrigin_eval (h : (βxββ + βyββ : ββ₯0β) < p.radius
rwa [lt_tsub_iff_right, add_comm]
have x_add_y_mem_ball : x + y β EMetric.ball (0 : E) p.radius := by
refine' mem_emetric_ball_zero_iff.2 (lt_of_le_of_lt _ h)
- exact_mod_cast nnnorm_add_le x y
+ exact mod_cast nnnorm_add_le x y
set f : (Ξ£k l : β, { s : Finset (Fin (k + l)) // s.card = l }) β F := fun s =>
p.changeOriginSeriesTerm s.1 s.2.1 s.2.2 s.2.2.2 (fun _ => x) fun _ => y
have hsf : Summable f := by
@@ -1372,7 +1372,7 @@ theorem HasFPowerSeriesOnBall.changeOrigin (hf : HasFPowerSeriesOnBall f p x r)
rw [mem_emetric_ball_zero_iff, lt_tsub_iff_right, add_comm] at hz
rw [p.changeOrigin_eval (hz.trans_le hf.r_le), add_assoc, hf.sum]
refine' mem_emetric_ball_zero_iff.2 (lt_of_le_of_lt _ hz)
- exact_mod_cast nnnorm_add_le y z
+ exact mod_cast nnnorm_add_le y z
rw [this]
apply (p.changeOrigin y).hasSum
refine' EMetric.ball_subset_ball (le_trans _ p.changeOrigin_radius) hz
This is the supremum of
along with some minor fixes from failures on nightly-testing as Mathlib master
is merged into it.
Note that some PRs for changes that are already compatible with the current toolchain and will be necessary have already been split out: #8380.
I am hopeful that in future we will be able to progressively merge adaptation PRs into a bump/v4.X.0
branch, so we never end up with a "big merge" like this. However one of these adaptation PRs (#8056) predates my new scheme for combined CI, and it wasn't possible to keep that PR viable in the meantime.
In particular this includes adjustments for the Lean PRs
We can get rid of all the
local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue [lean4#2220](https://github.com/leanprover/lean4/pull/2220)
macros across Mathlib (and in any projects that want to write natural number powers of reals).
Changes the default behaviour of simp
to (config := {decide := false})
. This makes simp
(and consequentially norm_num
) less powerful, but also more consistent, and less likely to blow up in long failures. This requires a variety of changes: changing some previously by simp
or norm_num
to decide
or rfl
, or adding (config := {decide := true})
.
This changed the behaviour of simp
so that simp [f]
will only unfold "fully applied" occurrences of f
. The old behaviour can be recovered with simp (config := { unfoldPartialApp := true })
. We may in future add a syntax for this, e.g. simp [!f]
; please provide feedback! In the meantime, we have made the following changes:
(config := { unfoldPartialApp := true })
in some places, to recover the old behaviour@[eqns]
to manually adjust the equation lemmas for a particular definition, recovering the old behaviour just for that definition. See #8371, where we do this for Function.comp
and Function.flip
.This change in Lean may require further changes down the line (e.g. adding the !f
syntax, and/or upstreaming the special treatment for Function.comp
and Function.flip
, and/or removing this special treatment). Please keep an open and skeptical mind about these changes!
Co-authored-by: leanprover-community-mathlib4-bot <leanprover-community-mathlib4-bot@users.noreply.github.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Mauricio Collares <mauricio@collares.org>
@@ -323,7 +323,7 @@ theorem radius_eq_top_iff_summable_norm (p : FormalMultilinearSeries π E F) :
/-- If the radius of `p` is positive, then `βpββ` grows at most geometrically. -/
theorem le_mul_pow_of_radius_pos (p : FormalMultilinearSeries π E F) (h : 0 < p.radius) :
- β (C r : _) (hC : 0 < C) (hr : 0 < r), β n, βp nβ β€ C * r ^ n := by
+ β (C r : _) (hC : 0 < C) (_ : 0 < r), β n, βp nβ β€ C * r ^ n := by
rcases ENNReal.lt_iff_exists_nnreal_btwn.1 h with β¨r, r0, rltβ©
have rpos : 0 < (r : β) := by simp [ENNReal.coe_pos.1 r0]
rcases norm_le_div_pow_of_pos_of_lt_radius p rpos rlt with β¨C, Cpos, hCpβ©
@@ -1220,7 +1220,7 @@ theorem changeOriginSeries_summable_auxβ {r r' : ββ₯0} (hr : (r + r' : β
Summable fun s : Ξ£k l : β, { s : Finset (Fin (k + l)) // s.card = l } =>
βp (s.1 + s.2.1)ββ * r ^ s.2.1 * r' ^ s.1 := by
rw [β changeOriginIndexEquiv.symm.summable_iff]
- dsimp only [(Β· β Β·), changeOriginIndexEquiv_symm_apply_fst,
+ dsimp only [Function.comp_def, changeOriginIndexEquiv_symm_apply_fst,
changeOriginIndexEquiv_symm_apply_snd_fst]
have : β n : β,
HasSum (fun s : Finset (Fin n) => βp (n - s.card + s.card)ββ * r ^ s.card * r' ^ (n - s.card))
@@ -1342,7 +1342,7 @@ theorem changeOrigin_eval (h : (βxββ + βyββ : ββ₯0β) < p.radius
have : β (m) (hm : n = m), p n (s.piecewise (fun _ => x) fun _ => y) =
p m ((s.map (Fin.castIso hm).toEquiv.toEmbedding).piecewise (fun _ => x) fun _ => y) := by
rintro m rfl
- simp [Finset.piecewise]
+ simp (config := { unfoldPartialApp := true }) [Finset.piecewise]
apply this
#align formal_multilinear_series.change_origin_eval FormalMultilinearSeries.changeOrigin_eval
summable_of_norm_bounded
-> Summable.of_norm_bounded
;summable_of_norm_bounded_eventually
-> Summable.of_norm_bounded_eventually
;summable_of_nnnorm_bounded
-> Summable.of_nnnorm_bounded
;summable_of_summable_norm
-> Summable.of_norm
;summable_of_summable_nnnorm
-> Summable.of_nnnorm
;Summable.of_norm_bounded_eventually_nat
Summable.norm
@@ -279,14 +279,14 @@ theorem not_summable_norm_of_radius_lt_nnnorm (p : FormalMultilinearSeries π
theorem summable_norm_mul_pow (p : FormalMultilinearSeries π E F) {r : ββ₯0} (h : βr < p.radius) :
Summable fun n : β => βp nβ * (r : β) ^ n := by
obtain β¨a, ha : a β Ioo (0 : β) 1, C, - : 0 < C, hpβ© := p.norm_mul_pow_le_mul_pow_of_lt_radius h
- exact summable_of_nonneg_of_le (fun n => mul_nonneg (norm_nonneg _) (pow_nonneg r.coe_nonneg _))
+ exact .of_nonneg_of_le (fun n => mul_nonneg (norm_nonneg _) (pow_nonneg r.coe_nonneg _))
hp ((summable_geometric_of_lt_1 ha.1.le ha.2).mul_left _)
#align formal_multilinear_series.summable_norm_mul_pow FormalMultilinearSeries.summable_norm_mul_pow
theorem summable_norm_apply (p : FormalMultilinearSeries π E F) {x : E}
(hx : x β EMetric.ball (0 : E) p.radius) : Summable fun n : β => βp n fun _ => xβ := by
rw [mem_emetric_ball_zero_iff] at hx
- refine' summable_of_nonneg_of_le
+ refine' .of_nonneg_of_le
(fun _ => norm_nonneg _) (fun n => ((p n).le_op_norm _).trans_eq _) (p.summable_norm_mul_pow hx)
simp
#align formal_multilinear_series.summable_norm_apply FormalMultilinearSeries.summable_norm_apply
@@ -300,7 +300,7 @@ theorem summable_nnnorm_mul_pow (p : FormalMultilinearSeries π E F) {r : β
protected theorem summable [CompleteSpace F] (p : FormalMultilinearSeries π E F) {x : E}
(hx : x β EMetric.ball (0 : E) p.radius) : Summable fun n : β => p n fun _ => x :=
- summable_of_summable_norm (p.summable_norm_apply hx)
+ (p.summable_norm_apply hx).of_norm
#align formal_multilinear_series.summable FormalMultilinearSeries.summable
theorem radius_eq_top_of_summable_norm (p : FormalMultilinearSeries π E F)
@@ -314,7 +314,7 @@ theorem radius_eq_top_iff_summable_norm (p : FormalMultilinearSeries π E F) :
Β· intro h r
obtain β¨a, ha : a β Ioo (0 : β) 1, C, - : 0 < C, hpβ© := p.norm_mul_pow_le_mul_pow_of_lt_radius
(show (r : ββ₯0β) < p.radius from h.symm βΈ ENNReal.coe_lt_top)
- refine' summable_of_norm_bounded
+ refine' .of_norm_bounded
(fun n => (C : β) * a ^ n) ((summable_geometric_of_lt_1 ha.1.le ha.2).mul_left _) fun n => _
specialize hp n
rwa [Real.norm_of_nonneg (mul_nonneg (norm_nonneg _) (pow_nonneg r.coe_nonneg n))]
@@ -1312,7 +1312,7 @@ theorem changeOrigin_eval (h : (βxββ + βyββ : ββ₯0β) < p.radius
set f : (Ξ£k l : β, { s : Finset (Fin (k + l)) // s.card = l }) β F := fun s =>
p.changeOriginSeriesTerm s.1 s.2.1 s.2.2 s.2.2.2 (fun _ => x) fun _ => y
have hsf : Summable f := by
- refine' summable_of_nnnorm_bounded _ (p.changeOriginSeries_summable_auxβ h) _
+ refine' .of_nnnorm_bounded _ (p.changeOriginSeries_summable_auxβ h) _
rintro β¨k, l, s, hsβ©
dsimp only [Subtype.coe_mk]
exact p.nnnorm_changeOriginSeriesTerm_apply_le _ _ _ _ _ _
@@ -1325,7 +1325,7 @@ theorem changeOrigin_eval (h : (βxββ + βyββ : ββ₯0β) < p.radius
refine' HasSum.sigma_of_hasSum this (fun l => _) _
Β· simp only [changeOriginSeries, ContinuousMultilinearMap.sum_apply]
apply hasSum_fintype
- Β· refine' summable_of_nnnorm_bounded _
+ Β· refine' .of_nnnorm_bounded _
(p.changeOriginSeries_summable_auxβ (mem_emetric_ball_zero_iff.1 x_mem_ball) k) fun s => _
refine' (ContinuousMultilinearMap.le_op_nnnorm _ _).trans_eq _
simp
AnalyticAt.{smul,mul,pow}
, do AnalyticOn.{smul,mul,pow}
Also change AnalyticAt.smul
and AnalyticAt.pow
to use pointwise smul
and pow
rather than function smul
and pow
, as I think this is more ergonomic when used in practice (from experience with https://github.com/girving/ray).
@@ -1414,6 +1414,11 @@ theorem AnalyticAt.exists_mem_nhds_analyticOn {f : E β F} {x : E} (h : Analyti
β s β π x, AnalyticOn π f s :=
h.eventually_analyticAt.exists_mem
+/-- If we're analytic at a point, we're analytic in a nonempty ball -/
+theorem AnalyticAt.exists_ball_analyticOn {f : E β F} {x : E} (h : AnalyticAt π f x) :
+ β r : β, 0 < r β§ AnalyticOn π f (Metric.ball x r) :=
+ Metric.isOpen_iff.mp (isOpen_analyticAt _ _) _ h
+
end
section
We record various simple lemmas that things are analyticAt
or analyticOn
. There's no hard work here, just corollaries of other results:
id
, fst
, snd
.analyticAt_changeOrigin
corollaryx β¦ (f x, g x)
We also add a few lemmas for dealing with curried analytic functions. Starting with AnalyticOn π (uncurry h) s
,
AnalyticOn.curry_comp
composes it with two input analytic functionsAnalyticOn.along_fst/snd
show analyticity along each coordinateCo-authored-by: Mario Carneiro <di.gama@gmail.com> Co-authored-by: David Loeffler <d.loeffler.01@cantab.net>
@@ -364,62 +364,8 @@ theorem radius_le_radius_continuousLinearMap_comp (p : FormalMultilinearSeries
simpa only [norm_norm] using f.norm_compContinuousMultilinearMap_le (p n)
#align formal_multilinear_series.radius_le_radius_continuous_linear_map_comp FormalMultilinearSeries.radius_le_radius_continuousLinearMap_comp
-/-- The radius of the Cartesian product of two formal series is the minimum of their radii. --/
-lemma radius_prod_eq_min
- (p : FormalMultilinearSeries π E F) (q : FormalMultilinearSeries π E G) :
- (p.prod q).radius = min p.radius q.radius := by
- apply le_antisymm
- Β· refine ENNReal.le_of_forall_nnreal_lt fun r hr => ?_
- rw [le_min_iff]
- have := (p.prod q).isLittleO_one_of_lt_radius hr
- constructor
- all_goals { -- kludge, there is no "work_on_goal" in Lean 4?
- apply FormalMultilinearSeries.le_radius_of_isBigO
- refine (isBigO_of_le _ fun n β¦ ?_).trans this.isBigO
- rw [norm_mul, norm_norm, norm_mul, norm_norm]
- refine mul_le_mul_of_nonneg_right ?_ (norm_nonneg _)
- rw [FormalMultilinearSeries.prod, ContinuousMultilinearMap.op_norm_prod]
- try apply le_max_left
- try apply le_max_right }
- Β· refine ENNReal.le_of_forall_nnreal_lt fun r hr => ?_
- rw [lt_min_iff] at hr
- have := ((p.isLittleO_one_of_lt_radius hr.1).add
- (q.isLittleO_one_of_lt_radius hr.2)).isBigO
- refine (p.prod q).le_radius_of_isBigO ((isBigO_of_le _ Ξ» n β¦ ?_).trans this)
- rw [norm_mul, norm_norm, βadd_mul, norm_mul]
- refine mul_le_mul_of_nonneg_right ?_ (norm_nonneg _)
- rw [FormalMultilinearSeries.prod, ContinuousMultilinearMap.op_norm_prod]
- refine (max_le_add_of_nonneg (norm_nonneg _) (norm_nonneg _)).trans ?_
- apply Real.le_norm_self
-
end FormalMultilinearSeries
-lemma formalMultilinearSeries_geometric_radius (π) [NontriviallyNormedField π]
- (A : Type*) [NormedRing A] [NormOneClass A] [NormedAlgebra π A] :
- (formalMultilinearSeries_geometric π A).radius = 1 := by
- apply le_antisymm
- Β· refine le_of_forall_nnreal_lt (fun r hr β¦ ?_)
- rw [βcoe_one, ENNReal.coe_le_coe]
- have := FormalMultilinearSeries.isLittleO_one_of_lt_radius _ hr
- simp_rw [formalMultilinearSeries_geometric_apply_norm, one_mul] at this
- contrapose! this
- simp_rw [IsLittleO, IsBigOWith, not_forall, norm_one, mul_one,
- not_eventually]
- refine β¨1, one_pos, ?_β©
- refine ((eventually_ne_atTop 0).mp (eventually_of_forall ?_)).frequently
- intro n hn
- push_neg
- rwa [norm_pow, one_lt_pow_iff_of_nonneg (norm_nonneg _) hn,
- Real.norm_of_nonneg (NNReal.coe_nonneg _), βNNReal.coe_one,
- NNReal.coe_lt_coe]
- Β· refine le_of_forall_nnreal_lt (fun r hr β¦ ?_)
- rw [βNat.cast_one, ENNReal.coe_lt_coe_nat, Nat.cast_one] at hr
- apply FormalMultilinearSeries.le_radius_of_isBigO
- simp_rw [formalMultilinearSeries_geometric_apply_norm, one_mul]
- refine isBigO_of_le atTop (fun n β¦ ?_)
- rw [norm_one, Real.norm_of_nonneg (pow_nonneg (coe_nonneg r) _)]
- exact (pow_le_one _ (coe_nonneg r) hr.le)
-
/-! ### Expanding a function as a power series -/
@@ -438,54 +384,12 @@ structure HasFPowerSeriesOnBall (f : E β F) (p : FormalMultilinearSeries π
β {y}, y β EMetric.ball (0 : E) r β HasSum (fun n : β => p n fun _ : Fin n => y) (f (x + y))
#align has_fpower_series_on_ball HasFPowerSeriesOnBall
-lemma HasFPowerSeriesOnBall.prod {e : E} {f : E β F} {g : E β G} {r s : ββ₯0β}
- {p : FormalMultilinearSeries π E F} {q : FormalMultilinearSeries π E G}
- (hf : HasFPowerSeriesOnBall f p e r) (hg : HasFPowerSeriesOnBall g q e s) :
- HasFPowerSeriesOnBall (fun x β¦ (f x, g x)) (p.prod q) e (min r s) where
- r_le := by
- rw [p.radius_prod_eq_min]
- exact min_le_min hf.r_le hg.r_le
- r_pos := lt_min hf.r_pos hg.r_pos
- hasSum := by
- intro y hy
- simp_rw [FormalMultilinearSeries.prod, ContinuousMultilinearMap.prod_apply]
- refine (hf.hasSum ?_).prod_mk (hg.hasSum ?_)
- Β· exact EMetric.mem_ball.mpr (lt_of_lt_of_le hy (min_le_left _ _))
- Β· exact EMetric.mem_ball.mpr (lt_of_lt_of_le hy (min_le_right _ _))
-
-variable (π)
-
-lemma hasFPowerSeriesOnBall_inv_one_sub
- (π : Type*) [NontriviallyNormedField π] [NormedAlgebra π π] :
- HasFPowerSeriesOnBall (fun x : π β¦ (1 - x)β»ΒΉ) (formalMultilinearSeries_geometric π π) 0 1 := by
- constructor
- Β· exact le_of_eq (formalMultilinearSeries_geometric_radius π π).symm
- Β· exact one_pos
- Β· intro y hy
- simp_rw [zero_add, formalMultilinearSeries_geometric,
- ContinuousMultilinearMap.mkPiAlgebraFin_apply,
- List.prod_ofFn, Finset.prod_const,
- Finset.card_univ, Fintype.card_fin]
- apply hasSum_geometric_of_norm_lt_1
- simpa only [βofReal_one, Metric.emetric_ball, Metric.ball,
- dist_eq_norm, sub_zero] using hy
-
-variable {π}
-
/-- Given a function `f : E β F` and a formal multilinear series `p`, we say that `f` has `p` as
a power series around `x` if `f (x + y) = β' pβ yβΏ` for all `y` in a neighborhood of `0`. -/
def HasFPowerSeriesAt (f : E β F) (p : FormalMultilinearSeries π E F) (x : E) :=
β r, HasFPowerSeriesOnBall f p x r
#align has_fpower_series_at HasFPowerSeriesAt
-lemma HasFPowerSeriesAt.prod {e : E} {f : E β F} {g : E β G}
- {p : FormalMultilinearSeries π E F} {q : FormalMultilinearSeries π E G}
- (hf : HasFPowerSeriesAt f p e) (hg : HasFPowerSeriesAt g q e) :
- HasFPowerSeriesAt (fun x β¦ (f x, g x)) (p.prod q) e := by
- rcases hf with β¨_, hfβ©
- rcases hg with β¨_, hgβ©
- exact β¨_, hf.prod hgβ©
-
variable (π)
/-- Given a function `f : E β F`, we say that `f` is analytic at `x` if it admits a convergent power
@@ -502,20 +406,6 @@ def AnalyticOn (f : E β F) (s : Set E) :=
variable {π}
-/-- The Cartesian product of analytic functions is analytic. -/
-lemma AnalyticAt.prod {e : E} {f : E β F} {g : E β G}
- (hf : AnalyticAt π f e) (hg : AnalyticAt π g e) :
- AnalyticAt π (fun x β¦ (f x, g x)) e := by
- rcases hf with β¨_, hfβ©
- rcases hg with β¨_, hgβ©
- exact β¨_, hf.prod hgβ©
-
-/-- The Cartesian product of analytic functions is analytic. -/
-lemma AnalyticOn.prod {f : E β F} {g : E β G} {s : Set E}
- (hf : AnalyticOn π f s) (hg : AnalyticOn π g s) :
- AnalyticOn π (fun x β¦ (f x, g x)) s :=
- fun x hx β¦ (hf x hx).prod (hg x hx)
-
theorem HasFPowerSeriesOnBall.hasFPowerSeriesAt (hf : HasFPowerSeriesOnBall f p x r) :
HasFPowerSeriesAt f p x :=
β¨r, hfβ©
@@ -635,10 +525,6 @@ theorem analyticAt_const {v : F} : AnalyticAt π (fun _ => v) x :=
β¨constFormalMultilinearSeries π E v, hasFPowerSeriesAt_constβ©
#align analytic_at_const analyticAt_const
-lemma analyticAt_inv_one_sub (π : Type*) [NontriviallyNormedField π] [NormedAlgebra π π] :
- AnalyticAt π (fun x : π β¦ (1 - x)β»ΒΉ) 0 :=
- β¨_, β¨_, hasFPowerSeriesOnBall_inv_one_sub π πβ©β©
-
theorem analyticOn_const {v : F} {s : Set E} : AnalyticOn π (fun _ => v) s :=
fun _ _ => analyticAt_const
#align analytic_on_const analyticOn_const
@@ -1018,6 +904,10 @@ protected theorem AnalyticOn.continuousOn {s : Set E} (hf : AnalyticOn π f s)
fun x hx => (hf x hx).continuousAt.continuousWithinAt
#align analytic_on.continuous_on AnalyticOn.continuousOn
+/-- Analytic everywhere implies continuous -/
+theorem AnalyticOn.continuous {f : E β F} (fa : AnalyticOn π f univ) : Continuous f := by
+ rw [continuous_iff_continuousOn_univ]; exact fa.continuousOn
+
/-- In a complete space, the sum of a converging power series `p` admits `p` as a power series.
This is not totally obvious as we need to check the convergence of the series. -/
protected theorem FormalMultilinearSeries.hasFPowerSeriesOnBall [CompleteSpace F]
@@ -1456,6 +1346,11 @@ theorem changeOrigin_eval (h : (βxββ + βyββ : ββ₯0β) < p.radius
apply this
#align formal_multilinear_series.change_origin_eval FormalMultilinearSeries.changeOrigin_eval
+/-- Power series terms are analytic as we vary the origin -/
+theorem analyticAt_changeOrigin (p : FormalMultilinearSeries π E F) (rp : p.radius > 0) (n : β) :
+ AnalyticAt π (fun x β¦ p.changeOrigin x n) 0 :=
+ (FormalMultilinearSeries.hasFPowerSeriesOnBall_changeOrigin p n rp).analyticAt
+
end FormalMultilinearSeries
section
This PR adds some basic results about analytic functions: products of analytic functions are analytic, and the inverse map on a normed field is analytic away from 0.
@@ -70,7 +70,6 @@ notion, describing the polydisk of convergence. This notion is more specific, an
build the general theory. We do not define it here.
-/
-
noncomputable section
variable {π E F G : Type*}
@@ -112,7 +111,6 @@ end FormalMultilinearSeries
/-! ### The radius of a formal multilinear series -/
-
variable [NontriviallyNormedField π] [NormedAddCommGroup E] [NormedSpace π E] [NormedAddCommGroup F]
[NormedSpace π F] [NormedAddCommGroup G] [NormedSpace π G]
@@ -366,8 +364,62 @@ theorem radius_le_radius_continuousLinearMap_comp (p : FormalMultilinearSeries
simpa only [norm_norm] using f.norm_compContinuousMultilinearMap_le (p n)
#align formal_multilinear_series.radius_le_radius_continuous_linear_map_comp FormalMultilinearSeries.radius_le_radius_continuousLinearMap_comp
+/-- The radius of the Cartesian product of two formal series is the minimum of their radii. --/
+lemma radius_prod_eq_min
+ (p : FormalMultilinearSeries π E F) (q : FormalMultilinearSeries π E G) :
+ (p.prod q).radius = min p.radius q.radius := by
+ apply le_antisymm
+ Β· refine ENNReal.le_of_forall_nnreal_lt fun r hr => ?_
+ rw [le_min_iff]
+ have := (p.prod q).isLittleO_one_of_lt_radius hr
+ constructor
+ all_goals { -- kludge, there is no "work_on_goal" in Lean 4?
+ apply FormalMultilinearSeries.le_radius_of_isBigO
+ refine (isBigO_of_le _ fun n β¦ ?_).trans this.isBigO
+ rw [norm_mul, norm_norm, norm_mul, norm_norm]
+ refine mul_le_mul_of_nonneg_right ?_ (norm_nonneg _)
+ rw [FormalMultilinearSeries.prod, ContinuousMultilinearMap.op_norm_prod]
+ try apply le_max_left
+ try apply le_max_right }
+ Β· refine ENNReal.le_of_forall_nnreal_lt fun r hr => ?_
+ rw [lt_min_iff] at hr
+ have := ((p.isLittleO_one_of_lt_radius hr.1).add
+ (q.isLittleO_one_of_lt_radius hr.2)).isBigO
+ refine (p.prod q).le_radius_of_isBigO ((isBigO_of_le _ Ξ» n β¦ ?_).trans this)
+ rw [norm_mul, norm_norm, βadd_mul, norm_mul]
+ refine mul_le_mul_of_nonneg_right ?_ (norm_nonneg _)
+ rw [FormalMultilinearSeries.prod, ContinuousMultilinearMap.op_norm_prod]
+ refine (max_le_add_of_nonneg (norm_nonneg _) (norm_nonneg _)).trans ?_
+ apply Real.le_norm_self
+
end FormalMultilinearSeries
+lemma formalMultilinearSeries_geometric_radius (π) [NontriviallyNormedField π]
+ (A : Type*) [NormedRing A] [NormOneClass A] [NormedAlgebra π A] :
+ (formalMultilinearSeries_geometric π A).radius = 1 := by
+ apply le_antisymm
+ Β· refine le_of_forall_nnreal_lt (fun r hr β¦ ?_)
+ rw [βcoe_one, ENNReal.coe_le_coe]
+ have := FormalMultilinearSeries.isLittleO_one_of_lt_radius _ hr
+ simp_rw [formalMultilinearSeries_geometric_apply_norm, one_mul] at this
+ contrapose! this
+ simp_rw [IsLittleO, IsBigOWith, not_forall, norm_one, mul_one,
+ not_eventually]
+ refine β¨1, one_pos, ?_β©
+ refine ((eventually_ne_atTop 0).mp (eventually_of_forall ?_)).frequently
+ intro n hn
+ push_neg
+ rwa [norm_pow, one_lt_pow_iff_of_nonneg (norm_nonneg _) hn,
+ Real.norm_of_nonneg (NNReal.coe_nonneg _), βNNReal.coe_one,
+ NNReal.coe_lt_coe]
+ Β· refine le_of_forall_nnreal_lt (fun r hr β¦ ?_)
+ rw [βNat.cast_one, ENNReal.coe_lt_coe_nat, Nat.cast_one] at hr
+ apply FormalMultilinearSeries.le_radius_of_isBigO
+ simp_rw [formalMultilinearSeries_geometric_apply_norm, one_mul]
+ refine isBigO_of_le atTop (fun n β¦ ?_)
+ rw [norm_one, Real.norm_of_nonneg (pow_nonneg (coe_nonneg r) _)]
+ exact (pow_le_one _ (coe_nonneg r) hr.le)
+
/-! ### Expanding a function as a power series -/
@@ -386,12 +438,54 @@ structure HasFPowerSeriesOnBall (f : E β F) (p : FormalMultilinearSeries π
β {y}, y β EMetric.ball (0 : E) r β HasSum (fun n : β => p n fun _ : Fin n => y) (f (x + y))
#align has_fpower_series_on_ball HasFPowerSeriesOnBall
+lemma HasFPowerSeriesOnBall.prod {e : E} {f : E β F} {g : E β G} {r s : ββ₯0β}
+ {p : FormalMultilinearSeries π E F} {q : FormalMultilinearSeries π E G}
+ (hf : HasFPowerSeriesOnBall f p e r) (hg : HasFPowerSeriesOnBall g q e s) :
+ HasFPowerSeriesOnBall (fun x β¦ (f x, g x)) (p.prod q) e (min r s) where
+ r_le := by
+ rw [p.radius_prod_eq_min]
+ exact min_le_min hf.r_le hg.r_le
+ r_pos := lt_min hf.r_pos hg.r_pos
+ hasSum := by
+ intro y hy
+ simp_rw [FormalMultilinearSeries.prod, ContinuousMultilinearMap.prod_apply]
+ refine (hf.hasSum ?_).prod_mk (hg.hasSum ?_)
+ Β· exact EMetric.mem_ball.mpr (lt_of_lt_of_le hy (min_le_left _ _))
+ Β· exact EMetric.mem_ball.mpr (lt_of_lt_of_le hy (min_le_right _ _))
+
+variable (π)
+
+lemma hasFPowerSeriesOnBall_inv_one_sub
+ (π : Type*) [NontriviallyNormedField π] [NormedAlgebra π π] :
+ HasFPowerSeriesOnBall (fun x : π β¦ (1 - x)β»ΒΉ) (formalMultilinearSeries_geometric π π) 0 1 := by
+ constructor
+ Β· exact le_of_eq (formalMultilinearSeries_geometric_radius π π).symm
+ Β· exact one_pos
+ Β· intro y hy
+ simp_rw [zero_add, formalMultilinearSeries_geometric,
+ ContinuousMultilinearMap.mkPiAlgebraFin_apply,
+ List.prod_ofFn, Finset.prod_const,
+ Finset.card_univ, Fintype.card_fin]
+ apply hasSum_geometric_of_norm_lt_1
+ simpa only [βofReal_one, Metric.emetric_ball, Metric.ball,
+ dist_eq_norm, sub_zero] using hy
+
+variable {π}
+
/-- Given a function `f : E β F` and a formal multilinear series `p`, we say that `f` has `p` as
a power series around `x` if `f (x + y) = β' pβ yβΏ` for all `y` in a neighborhood of `0`. -/
def HasFPowerSeriesAt (f : E β F) (p : FormalMultilinearSeries π E F) (x : E) :=
β r, HasFPowerSeriesOnBall f p x r
#align has_fpower_series_at HasFPowerSeriesAt
+lemma HasFPowerSeriesAt.prod {e : E} {f : E β F} {g : E β G}
+ {p : FormalMultilinearSeries π E F} {q : FormalMultilinearSeries π E G}
+ (hf : HasFPowerSeriesAt f p e) (hg : HasFPowerSeriesAt g q e) :
+ HasFPowerSeriesAt (fun x β¦ (f x, g x)) (p.prod q) e := by
+ rcases hf with β¨_, hfβ©
+ rcases hg with β¨_, hgβ©
+ exact β¨_, hf.prod hgβ©
+
variable (π)
/-- Given a function `f : E β F`, we say that `f` is analytic at `x` if it admits a convergent power
@@ -408,6 +502,20 @@ def AnalyticOn (f : E β F) (s : Set E) :=
variable {π}
+/-- The Cartesian product of analytic functions is analytic. -/
+lemma AnalyticAt.prod {e : E} {f : E β F} {g : E β G}
+ (hf : AnalyticAt π f e) (hg : AnalyticAt π g e) :
+ AnalyticAt π (fun x β¦ (f x, g x)) e := by
+ rcases hf with β¨_, hfβ©
+ rcases hg with β¨_, hgβ©
+ exact β¨_, hf.prod hgβ©
+
+/-- The Cartesian product of analytic functions is analytic. -/
+lemma AnalyticOn.prod {f : E β F} {g : E β G} {s : Set E}
+ (hf : AnalyticOn π f s) (hg : AnalyticOn π g s) :
+ AnalyticOn π (fun x β¦ (f x, g x)) s :=
+ fun x hx β¦ (hf x hx).prod (hg x hx)
+
theorem HasFPowerSeriesOnBall.hasFPowerSeriesAt (hf : HasFPowerSeriesOnBall f p x r) :
HasFPowerSeriesAt f p x :=
β¨r, hfβ©
@@ -527,6 +635,10 @@ theorem analyticAt_const {v : F} : AnalyticAt π (fun _ => v) x :=
β¨constFormalMultilinearSeries π E v, hasFPowerSeriesAt_constβ©
#align analytic_at_const analyticAt_const
+lemma analyticAt_inv_one_sub (π : Type*) [NontriviallyNormedField π] [NormedAlgebra π π] :
+ AnalyticAt π (fun x : π β¦ (1 - x)β»ΒΉ) 0 :=
+ β¨_, β¨_, hasFPowerSeriesOnBall_inv_one_sub π πβ©β©
+
theorem analyticOn_const {v : F} {s : Set E} : AnalyticOn π (fun _ => v) s :=
fun _ _ => analyticAt_const
#align analytic_on_const analyticOn_const
filter_upwards
(#7719)
mathport was forgetting a space in filter_upwards [...]with
instead of filter_upwards [...] with
.
@@ -480,7 +480,7 @@ protected theorem HasFPowerSeriesAt.eventually (hf : HasFPowerSeriesAt f p x) :
theorem HasFPowerSeriesOnBall.eventually_hasSum (hf : HasFPowerSeriesOnBall f p x r) :
βαΆ y in π 0, HasSum (fun n : β => p n fun _ : Fin n => y) (f (x + y)) := by
- filter_upwards [EMetric.ball_mem_nhds (0 : E) hf.r_pos]using fun _ => hf.hasSum
+ filter_upwards [EMetric.ball_mem_nhds (0 : E) hf.r_pos] using fun _ => hf.hasSum
#align has_fpower_series_on_ball.eventually_has_sum HasFPowerSeriesOnBall.eventually_hasSum
theorem HasFPowerSeriesAt.eventually_hasSum (hf : HasFPowerSeriesAt f p x) :
@@ -544,6 +544,13 @@ theorem HasFPowerSeriesAt.add (hf : HasFPowerSeriesAt f pf x) (hg : HasFPowerSer
exact β¨r, hr.1.add hr.2β©
#align has_fpower_series_at.add HasFPowerSeriesAt.add
+theorem AnalyticAt.congr (hf : AnalyticAt π f x) (hg : f =αΆ [π x] g) : AnalyticAt π g x :=
+ let β¨_, hpfβ© := hf
+ (hpf.congr hg).analyticAt
+
+theorem analyticAt_congr (h : f =αΆ [π x] g) : AnalyticAt π f x β AnalyticAt π g x :=
+ β¨fun hf β¦ hf.congr h, fun hg β¦ hg.congr h.symmβ©
+
theorem AnalyticAt.add (hf : AnalyticAt π f x) (hg : AnalyticAt π g x) : AnalyticAt π (f + g) x :=
let β¨_, hpfβ© := hf
let β¨_, hqfβ© := hg
@@ -588,6 +595,21 @@ theorem AnalyticOn.mono {s t : Set E} (hf : AnalyticOn π f t) (hst : s β t)
fun z hz => hf z (hst hz)
#align analytic_on.mono AnalyticOn.mono
+theorem AnalyticOn.congr' {s : Set E} (hf : AnalyticOn π f s) (hg : f =αΆ [πΛ’ s] g) :
+ AnalyticOn π g s :=
+ fun z hz => (hf z hz).congr (mem_nhdsSet_iff_forall.mp hg z hz)
+
+theorem analyticOn_congr' {s : Set E} (h : f =αΆ [πΛ’ s] g) : AnalyticOn π f s β AnalyticOn π g s :=
+ β¨fun hf => hf.congr' h, fun hg => hg.congr' h.symmβ©
+
+theorem AnalyticOn.congr {s : Set E} (hs : IsOpen s) (hf : AnalyticOn π f s) (hg : s.EqOn f g) :
+ AnalyticOn π g s :=
+ hf.congr' $ mem_nhdsSet_iff_forall.mpr
+ (fun _ hz => eventuallyEq_iff_exists_mem.mpr β¨s, hs.mem_nhds hz, hgβ©)
+
+theorem analyticOn_congr {s : Set E} (hs : IsOpen s) (h : s.EqOn f g) : AnalyticOn π f s β
+ AnalyticOn π g s := β¨fun hf => hf.congr hs h, fun hg => hg.congr hs h.symmβ©
+
theorem AnalyticOn.add {s : Set E} (hf : AnalyticOn π f s) (hg : AnalyticOn π g s) :
AnalyticOn π (f + g) s :=
fun z hz => (hf z hz).add (hg z hz)
@@ -602,7 +602,7 @@ theorem HasFPowerSeriesOnBall.coeff_zero (hf : HasFPowerSeriesOnBall f pf x r) (
pf 0 v = f x := by
have v_eq : v = fun i => 0 := Subsingleton.elim _ _
have zero_mem : (0 : E) β EMetric.ball (0 : E) r := by simp [hf.r_pos]
- have : β (i) (_ : i β 0), (pf i fun j => 0) = 0 := by
+ have : β i, i β 0 β (pf i fun j => 0) = 0 := by
intro i hi
have : 0 < i := pos_iff_ne_zero.2 hi
exact ContinuousMultilinearMap.map_coord_zero _ (β¨0, thisβ© : Fin i) rfl
The main reasons is that having h : 0 < denom
in the context should suffice for field_simp
to do its job, without the need to manually pass h.ne
or similar.
Quite a few have := β¦ β 0
could be dropped, and some field_simp
calls no longer need explicit arguments; this is promising.
This does break some proofs where field_simp
was not used as a closing tactic, and it now
shuffles terms around a bit different. These were fixed. Using field_simp
in the middle of a proof seems rather fragile anyways.
As a drive-by contribution, positivity
now knows about Ο > 0
.
fixes: #4835
Co-authored-by: Matthew Ballard <matt@mrb.email>
@@ -202,7 +202,7 @@ theorem isLittleO_of_lt_radius (h : βr < p.radius) :
refine' β¨_, rt, C, Or.inr zero_lt_one, fun n => _β©
calc
|βp nβ * (r : β) ^ n| = βp nβ * (t : β) ^ n * (r / t : β) ^ n := by
- field_simp [mul_right_comm, abs_mul, this.ne']
+ field_simp [mul_right_comm, abs_mul]
_ β€ C * (r / t : β) ^ n := by gcongr; apply hC
#align formal_multilinear_series.is_o_of_lt_radius FormalMultilinearSeries.isLittleO_of_lt_radius
@@ -670,7 +670,7 @@ theorem HasFPowerSeriesOnBall.uniform_geometric_approx' {r' : ββ₯0}
calc
β(p n) fun _ : Fin n => yβ
_ β€ βp nβ * β _i : Fin n, βyβ := ContinuousMultilinearMap.le_op_norm _ _
- _ = βp nβ * (r' : β) ^ n * (βyβ / r') ^ n := by field_simp [hr'0.ne', mul_right_comm]
+ _ = βp nβ * (r' : β) ^ n * (βyβ / r') ^ n := by field_simp [mul_right_comm]
_ β€ C * a ^ n * (βyβ / r') ^ n := by gcongr ?_ * _; apply hp
_ β€ C * (a * (βyβ / r')) ^ n := by rw [mul_pow, mul_assoc]
#align has_fpower_series_on_ball.uniform_geometric_approx' HasFPowerSeriesOnBall.uniform_geometric_approx'
@@ -758,7 +758,7 @@ theorem HasFPowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
_ = B n := by
-- porting note: in the original, `B` was in the `field_simp`, but now Lean does not
-- accept it. The current proof works in Lean 4, but does not in Lean 3.
- field_simp [pow_succ, hr'0.ne']
+ field_simp [pow_succ]
simp only [mul_assoc, mul_comm, mul_left_comm]
have hBL : HasSum B (L y) := by
apply HasSum.mul_left
MulZeroClass.
in mul_zero
/zero_mul
(#6682)
Search&replace MulZeroClass.mul_zero
-> mul_zero
, MulZeroClass.zero_mul
-> zero_mul
.
These were introduced by Mathport, as the full name of mul_zero
is actually MulZeroClass.mul_zero
(it's exported with the short name).
@@ -815,7 +815,7 @@ theorem HasFPowerSeriesOnBall.tendstoUniformlyOn {r' : ββ₯0} (hf : HasFPowerS
refine' Metric.tendstoUniformlyOn_iff.2 fun Ξ΅ Ξ΅pos => _
have L : Tendsto (fun n => (C : β) * a ^ n) atTop (π ((C : β) * 0)) :=
tendsto_const_nhds.mul (tendsto_pow_atTop_nhds_0_of_lt_1 ha.1.le ha.2)
- rw [MulZeroClass.mul_zero] at L
+ rw [mul_zero] at L
refine' (L.eventually (gt_mem_nhds Ξ΅pos)).mono fun n hn y hy => _
rw [dist_eq_norm]
exact (hp y hy n).trans_lt hn
@@ -1082,7 +1082,6 @@ section
variable (p : FormalMultilinearSeries π E F) {x y : E} {r R : ββ₯0}
-set_option synthInstance.maxHeartbeats 100000 in
/-- A term of `FormalMultilinearSeries.changeOriginSeries`.
Given a formal multilinear series `p` and a point `x` in its ball of convergence,
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -73,7 +73,7 @@ build the general theory. We do not define it here.
noncomputable section
-variable {π E F G : Type _}
+variable {π E F G : Type*}
open Topology Classical BigOperators NNReal Filter ENNReal
@@ -981,7 +981,7 @@ set_option linter.uppercaseLean3 false in
#align asymptotics.is_O.continuous_multilinear_map_apply_eq_zero Asymptotics.IsBigO.continuousMultilinearMap_apply_eq_zero
/-- If a formal multilinear series `p` represents the zero function at `x : E`, then the
-terms `p n (fun i β¦ y)` appearing the in sum are zero for any `n : β`, `y : E`. -/
+terms `p n (fun i β¦ y)` appearing in the sum are zero for any `n : β`, `y : E`. -/
theorem HasFPowerSeriesAt.apply_eq_zero {p : FormalMultilinearSeries π E F} {x : E}
(h : HasFPowerSeriesAt 0 p x) (n : β) : β y : E, (p n fun _ => y) = 0 := by
refine' Nat.strong_induction_on n fun k hk => _
@@ -2,17 +2,14 @@
Copyright (c) 2020 SΓ©bastien GouΓ«zel. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: SΓ©bastien GouΓ«zel, Yury Kudryashov
-
-! This file was ported from Lean 3 source module analysis.analytic.basic
-! leanprover-community/mathlib commit 32253a1a1071173b33dc7d6a218cf722c6feb514
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Analysis.Calculus.FormalMultilinearSeries
import Mathlib.Analysis.SpecificLimits.Normed
import Mathlib.Logic.Equiv.Fin
import Mathlib.Topology.Algebra.InfiniteSum.Module
+#align_import analysis.analytic.basic from "leanprover-community/mathlib"@"32253a1a1071173b33dc7d6a218cf722c6feb514"
+
/-!
# Analytic functions
@@ -1379,6 +1379,16 @@ theorem isOpen_analyticAt : IsOpen { x | AnalyticAt π f x } := by
exact mem_of_superset (EMetric.ball_mem_nhds _ hr.r_pos) fun y hy => hr.analyticAt_of_mem hy
#align is_open_analytic_at isOpen_analyticAt
+variable {π}
+
+theorem AnalyticAt.eventually_analyticAt {f : E β F} {x : E} (h : AnalyticAt π f x) :
+ βαΆ y in π x, AnalyticAt π f y :=
+(isOpen_analyticAt π f).mem_nhds h
+
+theorem AnalyticAt.exists_mem_nhds_analyticOn {f : E β F} {x : E} (h : AnalyticAt π f x) :
+ β s β π x, AnalyticOn π f s :=
+h.eventually_analyticAt.exists_mem
+
end
section
This is the second half of the changes originally in #5699, removing all occurrences of ;
after a space and implementing a linter rule to enforce it.
In most cases this 2-character substring has a space after it, so the following command was run first:
find . -type f -name "*.lean" -exec sed -i -E 's/ ; /; /g' {} \;
The remaining cases were few enough in number that they were done manually.
@@ -1002,7 +1002,7 @@ theorem HasFPowerSeriesAt.apply_eq_zero {p : FormalMultilinearSeries π E F} {
/-- A one-dimensional formal multilinear series representing the zero function is zero. -/
theorem HasFPowerSeriesAt.eq_zero {p : FormalMultilinearSeries π π E} {x : π}
(h : HasFPowerSeriesAt 0 p x) : p = 0 := by
- -- porting note: `funext ; ext` was `ext (n x)`
+ -- porting note: `funext; ext` was `ext (n x)`
funext n
ext x
rw [β mkPiField_apply_one_eq_self (p n)]
@@ -1177,7 +1177,7 @@ def changeOriginIndexEquiv :
invFun s :=
β¨s.1 - s.2.card, s.2.card,
β¨s.2.map
- (Fin.cast <| (tsub_add_cancel_of_le <| card_finset_fin_le s.2).symm).toEquiv.toEmbedding,
+ (Fin.castIso <| (tsub_add_cancel_of_le <| card_finset_fin_le s.2).symm).toEquiv.toEmbedding,
Finset.card_map _β©β©
left_inv := by
rintro β¨k, l, β¨s : Finset (Fin <| k + l), hs : s.card = lβ©β©
@@ -1185,15 +1185,15 @@ def changeOriginIndexEquiv :
-- Lean can't automatically generalize `k' = k + l - s.card`, `l' = s.card`, so we explicitly
-- formulate the generalized goal
suffices β k' l', k' = k β l' = l β β (hkl : k + l = k' + l') (hs'),
- (β¨k', l', β¨Finset.map (Fin.cast hkl).toEquiv.toEmbedding s, hs'β©β© :
+ (β¨k', l', β¨Finset.map (Fin.castIso hkl).toEquiv.toEmbedding s, hs'β©β© :
Ξ£k l : β, { s : Finset (Fin (k + l)) // s.card = l }) = β¨k, l, β¨s, hsβ©β© by
apply this <;> simp only [hs, add_tsub_cancel_right]
rintro _ _ rfl rfl hkl hs'
- simp only [Equiv.refl_toEmbedding, Fin.cast_refl, Finset.map_refl, eq_self_iff_true,
+ simp only [Equiv.refl_toEmbedding, Fin.castIso_refl, Finset.map_refl, eq_self_iff_true,
OrderIso.refl_toEquiv, and_self_iff, heq_iff_eq]
right_inv := by
rintro β¨n, sβ©
- simp [tsub_add_cancel_of_le (card_finset_fin_le s), Fin.cast_to_equiv]
+ simp [tsub_add_cancel_of_le (card_finset_fin_le s), Fin.castIso_to_equiv]
#align formal_multilinear_series.change_origin_index_equiv FormalMultilinearSeries.changeOriginIndexEquiv
theorem changeOriginSeries_summable_auxβ {r r' : ββ₯0} (hr : (r + r' : ββ₯0β) < p.radius) :
@@ -1320,7 +1320,7 @@ theorem changeOrigin_eval (h : (βxββ + βyββ : ββ₯0β) < p.radius
changeOriginIndexEquiv_symm_apply_snd_fst, changeOriginIndexEquiv_symm_apply_snd_snd_coe]
rw [ContinuousMultilinearMap.curryFinFinset_apply_const]
have : β (m) (hm : n = m), p n (s.piecewise (fun _ => x) fun _ => y) =
- p m ((s.map (Fin.cast hm).toEquiv.toEmbedding).piecewise (fun _ => x) fun _ => y) := by
+ p m ((s.map (Fin.castIso hm).toEquiv.toEmbedding).piecewise (fun _ => x) fun _ => y) := by
rintro m rfl
simp [Finset.piecewise]
apply this
at
and goals (#5387)
Changes are of the form
some_tactic at hβ’
-> some_tactic at h β’
some_tactic at h
-> some_tactic at h
@@ -1409,7 +1409,7 @@ theorem hasFPowerSeriesAt_iff :
simp only [ENNReal.coe_pos]
exact zero_lt_iff.mpr (nnnorm_ne_zero_iff.mpr (norm_pos_iff.mp z_pos))
Β· simp only [EMetric.mem_ball, lt_inf_iff, edist_lt_coe, apply_eq_pow_smul_coeff, and_imp,
- dist_zero_right] at hβ’
+ dist_zero_right] at h β’
refine' fun {y} _ hyr => h _
simpa [nndist_eq_nnnorm, Real.lt_toNNReal_iff_coe_lt] using hyr
#align has_fpower_series_at_iff hasFPowerSeriesAt_iff
@@ -206,7 +206,7 @@ theorem isLittleO_of_lt_radius (h : βr < p.radius) :
calc
|βp nβ * (r : β) ^ n| = βp nβ * (t : β) ^ n * (r / t : β) ^ n := by
field_simp [mul_right_comm, abs_mul, this.ne']
- _ β€ C * (r / t : β) ^ n := mul_le_mul_of_nonneg_right (hC n) (pow_nonneg (div_nonneg r.2 t.2) _)
+ _ β€ C * (r / t : β) ^ n := by gcongr; apply hC
#align formal_multilinear_series.is_o_of_lt_radius FormalMultilinearSeries.isLittleO_of_lt_radius
/-- For `r` strictly smaller than the radius of `p`, then `βpββ rβΏ = o(1)`. -/
@@ -665,16 +665,16 @@ theorem HasFPowerSeriesOnBall.uniform_geometric_approx' {r' : ββ₯0}
mul_le_of_le_one_right ha.1.le (div_le_one_of_le yr'.le r'.coe_nonneg)
suffices βp.partialSum n y - f (x + y)β β€ C * (a * (βyβ / r')) ^ n / (1 - a * (βyβ / r')) by
refine' this.trans _
- apply_rules [div_le_div_of_le_left, sub_pos.2, div_nonneg, mul_nonneg, pow_nonneg, hC.lt.le,
- ha.1.le, norm_nonneg, NNReal.coe_nonneg, ha.2, (sub_le_sub_iff_left _).2]
+ have : 0 < a := ha.1
+ gcongr
+ apply_rules [sub_pos.2, ha.2]
apply norm_sub_le_of_geometric_bound_of_hasSum (ya.trans_lt ha.2) _ (hf.hasSum this)
intro n
calc
β(p n) fun _ : Fin n => yβ
_ β€ βp nβ * β _i : Fin n, βyβ := ContinuousMultilinearMap.le_op_norm _ _
_ = βp nβ * (r' : β) ^ n * (βyβ / r') ^ n := by field_simp [hr'0.ne', mul_right_comm]
- _ β€ C * a ^ n * (βyβ / r') ^ n :=
- (mul_le_mul_of_nonneg_right (hp n) (pow_nonneg (div_nonneg (norm_nonneg _) r'.coe_nonneg) _))
+ _ β€ C * a ^ n * (βyβ / r') ^ n := by gcongr ?_ * _; apply hp
_ β€ C * (a * (βyβ / r')) ^ n := by rw [mul_pow, mul_assoc]
#align has_fpower_series_on_ball.uniform_geometric_approx' HasFPowerSeriesOnBall.uniform_geometric_approx'
@@ -689,7 +689,7 @@ theorem HasFPowerSeriesOnBall.uniform_geometric_approx {r' : ββ₯0}
hf.uniform_geometric_approx' h
refine' β¨a, ha, C, hC, fun y hy n => (hp y hy n).trans _β©
have yr' : βyβ < r' := by rwa [ball_zero_eq] at hy
- refine' mul_le_mul_of_nonneg_left (pow_le_pow_of_le_left _ _ _) hC.lt.le
+ gcongr
exacts [mul_nonneg ha.1.le (div_nonneg (norm_nonneg y) r'.coe_nonneg),
mul_le_of_le_one_right ha.1.le (div_le_one_of_le yr'.le r'.coe_nonneg)]
#align has_fpower_series_on_ball.uniform_geometric_approx HasFPowerSeriesOnBall.uniform_geometric_approx
@@ -752,10 +752,12 @@ theorem HasFPowerSeriesOnBall.isBigO_image_sub_image_sub_deriv_principal
ring
-- porting note: the two `β` in `βr'` are new, without them, Lean fails to synthesize
-- instances `HDiv β ββ₯0 ?m` or `HMul β ββ₯0 ?m`
- _ β€ C * a ^ (n + 2) / βr' ^ (n + 2) * βr' ^ n * (β(n + 2) * βy - (x, x)β * βy.1 - y.2β) :=
- by apply_rules [mul_le_mul_of_nonneg_right, mul_le_mul, hp, pow_le_pow_of_le_left, hy'.le,
- norm_nonneg, pow_nonneg, div_nonneg, mul_nonneg, Nat.cast_nonneg, hC.le, r'.coe_nonneg,
- ha.1.le]
+ _ β€ C * a ^ (n + 2) / βr' ^ (n + 2)
+ * βr' ^ n * (β(n + 2) * βy - (x, x)β * βy.1 - y.2β) := by
+ have : 0 < a := ha.1
+ gcongr
+ Β· apply hp
+ Β· apply hy'.le
_ = B n := by
-- porting note: in the original, `B` was in the `field_simp`, but now Lean does not
-- accept it. The current proof works in Lean 4, but does not in Lean 3.
@@ -971,8 +973,7 @@ theorem Asymptotics.IsBigO.continuousMultilinearMap_apply_eq_zero {n : β} {p :
simpa only [inv_smul_smulβ (norm_pos_iff.mp k_pos), norm_smul, Finset.prod_const,
Finset.card_fin] using
congr_arg norm (p.map_smul_univ (fun _ : Fin n.succ => kβ»ΒΉ) fun _ : Fin n.succ => k β’ y)
- _ β€ βkβ»ΒΉ ^ n.succβ * (βkβ ^ n.succ * (βkβ * (c * βyβ ^ (n.succ + 1)))) :=
- (mul_le_mul_of_nonneg_left hβ (norm_nonneg _))
+ _ β€ βkβ»ΒΉ ^ n.succβ * (βkβ ^ n.succ * (βkβ * (c * βyβ ^ (n.succ + 1)))) := by gcongr
_ = β(kβ»ΒΉ * k) ^ n.succβ * (βkβ * (c * βyβ ^ (n.succ + 1))) := by
rw [β mul_assoc]
simp [norm_mul, mul_pow]
@@ -127,7 +127,7 @@ variable (p : FormalMultilinearSeries π E F) {r : ββ₯0}
converges for all `βyβ < r`. This implies that `Ξ£ pβ yβΏ` converges for all `βyβ < r`, but these
definitions are *not* equivalent in general. -/
def radius (p : FormalMultilinearSeries π E F) : ββ₯0β :=
- β¨ (r : ββ₯0) (C : β) (_hr : β n, βp nβ * (r : β) ^ n β€ C), (r : ββ₯0β)
+ β¨ (r : ββ₯0) (C : β) (_ : β n, βp nβ * (r : β) ^ n β€ C), (r : ββ₯0β)
#align formal_multilinear_series.radius FormalMultilinearSeries.radius
/-- If `βpββ rβΏ` is bounded in `n`, then the radius of `p` is at least `r`. -/
@@ -1142,14 +1142,14 @@ def changeOriginSeries (k : β) : FormalMultilinearSeries π E (E[Γk]βL[
theorem nnnorm_changeOriginSeries_le_tsum (k l : β) :
βp.changeOriginSeries k lββ β€
- β' _x : { s : Finset (Fin (k + l)) // s.card = l }, βp (k + l)ββ :=
+ β' _ : { s : Finset (Fin (k + l)) // s.card = l }, βp (k + l)ββ :=
(nnnorm_sum_le _ (fun t => changeOriginSeriesTerm p k l (Subtype.val t) t.prop)).trans_eq <| by
simp_rw [tsum_fintype, nnnorm_changeOriginSeriesTerm (p := p) (k := k) (l := l)]
#align formal_multilinear_series.nnnorm_change_origin_series_le_tsum FormalMultilinearSeries.nnnorm_changeOriginSeries_le_tsum
theorem nnnorm_changeOriginSeries_apply_le_tsum (k l : β) (x : E) :
βp.changeOriginSeries k l fun _ => xββ β€
- β' _s : { s : Finset (Fin (k + l)) // s.card = l }, βp (k + l)ββ * βxββ ^ l := by
+ β' _ : { s : Finset (Fin (k + l)) // s.card = l }, βp (k + l)ββ * βxββ ^ l := by
rw [NNReal.tsum_mul_right, β Fin.prod_const]
exact (p.changeOriginSeries k l).le_of_op_nnnorm_le _ (p.nnnorm_changeOriginSeries_le_tsum _ _)
#align formal_multilinear_series.nnnorm_change_origin_series_apply_le_tsum FormalMultilinearSeries.nnnorm_changeOriginSeries_apply_le_tsum
The unported dependencies are
algebra.order.module
init.core
algebra.order.monoid.cancel.defs
algebra.abs
algebra.group_power.lemmas
init.data.list.basic
algebra.order.monoid.cancel.basic
init.data.list.default
topology.subset_properties
init.logic
The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file