Skip to content

Commit c33fe04

Browse files
committed
feat(NumberTheory/LSeries): results involving partial sums of coefficients (part 1) (#20661)
We prove several results involving partial sums of coefficients (or norm of coefficients) of L-series. The two main results of this PR are: - `LSeriesSummable_of_sum_norm_bigO`: for `f : ℕ → ℂ`, if the partial sums `∑ k ∈ Icc 1 n, ‖f k‖` are `O(n ^ r)` for some real `0 ≤ r`, then the L-series `Lseries f` converges at `s : ℂ` for all `s` such that `r < s.re`. - `LSeries_eq_mul_integral` : for `f : ℕ → ℂ`, if the partial sums `∑ k ∈ Icc 1 n, f k` are `O(n ^ r)` for some real `0 ≤ r` and the L-series `LSeries f` converges at `s : ℂ` with `r < s.re`, then `LSeries f s = s * ∫ t in Set.Ioi 1, (∑ k ∈ Icc 1 ⌊t⌋₊, f k) * t ^ (- (s + 1))`. More results will be proved in #20660
1 parent 2bce15b commit c33fe04

File tree

11 files changed

+289
-24
lines changed

11 files changed

+289
-24
lines changed

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4020,6 +4020,7 @@ import Mathlib.NumberTheory.LSeries.Nonvanishing
40204020
import Mathlib.NumberTheory.LSeries.Positivity
40214021
import Mathlib.NumberTheory.LSeries.PrimesInAP
40224022
import Mathlib.NumberTheory.LSeries.RiemannZeta
4023+
import Mathlib.NumberTheory.LSeries.SumCoeff
40234024
import Mathlib.NumberTheory.LSeries.ZMod
40244025
import Mathlib.NumberTheory.LegendreSymbol.AddCharacter
40254026
import Mathlib.NumberTheory.LegendreSymbol.Basic

Mathlib/Analysis/Asymptotics/SpecificAsymptotics.lean

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@ Copyright (c) 2021 Anatole Dedecker. All rights reserved.
33
Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Anatole Dedecker
55
-/
6-
import Mathlib.Analysis.Normed.Order.Basic
7-
import Mathlib.Analysis.Asymptotics.Lemmas
8-
import Mathlib.Analysis.Normed.Module.Basic
6+
import Mathlib.Analysis.Asymptotics.AsymptoticEquivalent
7+
import Mathlib.Analysis.SpecificLimits.Basic
98

109
/-!
1110
# A collection of specific asymptotic results
@@ -143,3 +142,19 @@ theorem Filter.Tendsto.cesaro {u : ℕ → ℝ} {l : ℝ} (h : Tendsto u atTop (
143142
h.cesaro_smul
144143

145144
end Real
145+
146+
section NormedLinearOrderedField
147+
148+
variable {R : Type*} [NormedLinearOrderedField R] [OrderTopology R] [FloorRing R]
149+
150+
theorem Asymptotics.isEquivalent_nat_floor :
151+
(fun (x : R) ↦ ↑⌊x⌋₊) ~[atTop] (fun x ↦ x) := by
152+
refine isEquivalent_of_tendsto_one ?_ tendsto_nat_floor_div_atTop
153+
filter_upwards with x hx using by rw [hx, Nat.floor_zero, Nat.cast_eq_zero]
154+
155+
theorem Asymptotics.isEquivalent_nat_ceil :
156+
(fun (x : R) ↦ ↑⌈x⌉₊) ~[atTop] (fun x ↦ x) := by
157+
refine isEquivalent_of_tendsto_one ?_ tendsto_nat_ceil_div_atTop
158+
filter_upwards with x hx using by rw [hx, Nat.ceil_zero, Nat.cast_eq_zero]
159+
160+
end NormedLinearOrderedField

Mathlib/Analysis/SpecialFunctions/ImproperIntegrals.lean

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,14 @@ theorem integrableOn_Ioi_rpow_iff {s t : ℝ} (ht : 0 < t) :
8181
exact Real.rpow_le_rpow_of_exponent_le x_one h
8282
exact not_IntegrableOn_Ioi_inv this
8383

84+
theorem integrableAtFilter_rpow_atTop_iff {s : ℝ} :
85+
IntegrableAtFilter (fun x : ℝ ↦ x ^ s) atTop ↔ s < -1 := by
86+
refine ⟨fun ⟨t, ht, hint⟩ ↦ ?_, fun h ↦
87+
⟨Set.Ioi 1, Ioi_mem_atTop 1, (integrableOn_Ioi_rpow_iff zero_lt_one).mpr h⟩⟩
88+
obtain ⟨a, ha⟩ := mem_atTop_sets.mp ht
89+
refine (integrableOn_Ioi_rpow_iff (zero_lt_one.trans_le (le_max_right a 1))).mp ?_
90+
exact hint.mono_set <| fun x hx ↦ ha _ <| (le_max_left a 1).trans hx.le
91+
8492
/-- The real power function with any exponent is not integrable on `(0, +∞)`. -/
8593
theorem not_integrableOn_Ioi_rpow (s : ℝ) : ¬ IntegrableOn (fun x ↦ x ^ s) (Ioi (0 : ℝ)) := by
8694
intro h
@@ -127,6 +135,24 @@ theorem integrableOn_Ioi_cpow_iff {s : ℂ} {t : ℝ} (ht : 0 < t) :
127135
simp [Complex.abs_cpow_eq_rpow_re_of_pos this]
128136
rwa [integrableOn_Ioi_rpow_iff ht] at B
129137

138+
theorem integrableOn_Ioi_deriv_ofReal_cpow {s : ℂ} {t : ℝ} (ht : 0 < t) (hs : s.re < 0) :
139+
IntegrableOn (deriv fun x : ℝ ↦ (x : ℂ) ^ s) (Set.Ioi t) := by
140+
have h : IntegrableOn (fun x : ℝ ↦ s * x ^ (s - 1)) (Set.Ioi t) := by
141+
refine (integrableOn_Ioi_cpow_of_lt ?_ ht).const_mul _
142+
rwa [Complex.sub_re, Complex.one_re, sub_lt_iff_lt_add, neg_add_cancel]
143+
refine h.congr_fun (fun x hx ↦ ?_) measurableSet_Ioi
144+
rw [Complex.deriv_ofReal_cpow_const (ht.trans hx).ne' (fun h ↦ (Complex.zero_re ▸ h ▸ hs).false)]
145+
146+
theorem integrableOn_Ioi_deriv_norm_ofReal_cpow {s : ℂ} {t : ℝ} (ht : 0 < t) (hs : s.re ≤ 0):
147+
IntegrableOn (deriv fun x : ℝ ↦ ‖(x : ℂ) ^ s‖) (Set.Ioi t) := by
148+
rw [integrableOn_congr_fun (fun x hx ↦ by
149+
rw [deriv_norm_ofReal_cpow _ (ht.trans hx)]) measurableSet_Ioi]
150+
obtain hs | hs := eq_or_lt_of_le hs
151+
· simp_rw [hs, zero_mul]
152+
exact integrableOn_zero
153+
· replace hs : s.re - 1 < - 1 := by rwa [sub_lt_iff_lt_add, neg_add_cancel]
154+
exact (integrableOn_Ioi_rpow_of_lt hs ht).const_mul s.re
155+
130156
/-- The complex power function with any exponent is not integrable on `(0, +∞)`. -/
131157
theorem not_integrableOn_Ioi_cpow (s : ℂ) :
132158
¬ IntegrableOn (fun x : ℝ ↦ (x : ℂ) ^ s) (Ioi (0 : ℝ)) := by

Mathlib/Analysis/SpecialFunctions/Pow/Complex.lean

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,13 @@ theorem cpow_eq_zero_iff (x y : ℂ) : x ^ y = 0 ↔ x = 0 ∧ y ≠ 0 := by
4242
simp only [cpow_def]
4343
split_ifs <;> simp [*, exp_ne_zero]
4444

45+
theorem cpow_ne_zero_iff {x y : ℂ} :
46+
x ^ y ≠ 0 ↔ x ≠ 0 ∨ y = 0 := by
47+
rw [ne_eq, cpow_eq_zero_iff, not_and_or, ne_eq, not_not]
48+
49+
theorem cpow_ne_zero_iff_of_exponent_ne_zero {x y : ℂ} (hy : y ≠ 0) :
50+
x ^ y ≠ 0 ↔ x ≠ 0 := by simp [hy]
51+
4552
@[simp]
4653
theorem zero_cpow {x : ℂ} (h : x ≠ 0) : (0 : ℂ) ^ x = 0 := by simp [cpow_def, *]
4754

Mathlib/Analysis/SpecialFunctions/Pow/Deriv.lean

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -623,6 +623,13 @@ theorem deriv_rpow_const (hf : DifferentiableAt ℝ f x) (hx : f x ≠ 0 ∨ 1
623623
deriv (fun x => f x ^ p) x = deriv f x * p * f x ^ (p - 1) :=
624624
(hf.hasDerivAt.rpow_const hx).deriv
625625

626+
theorem deriv_norm_ofReal_cpow (c : ℂ) {t : ℝ} (ht : 0 < t) :
627+
(deriv fun x : ℝ ↦ ‖(x : ℂ) ^ c‖) t = c.re * t ^ (c.re - 1) := by
628+
rw [EventuallyEq.deriv_eq (f := fun x ↦ x ^ c.re)]
629+
· rw [Real.deriv_rpow_const (Or.inl ht.ne')]
630+
· filter_upwards [eventually_gt_nhds ht] with x hx
631+
rw [Complex.norm_eq_abs, Complex.abs_cpow_eq_rpow_re_of_pos hx]
632+
626633
lemma isTheta_deriv_rpow_const_atTop {p : ℝ} (hp : p ≠ 0) :
627634
deriv (fun (x : ℝ) => x ^ p) =Θ[atTop] fun x => x ^ (p-1) := by
628635
calc deriv (fun (x : ℝ) => x ^ p) =ᶠ[atTop] fun x => p * x ^ (p - 1) := by

Mathlib/Analysis/SpecialFunctions/Pow/Real.lean

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,12 @@ theorem abs_cpow_eq_rpow_re_of_nonneg {x : ℝ} (hx : 0 ≤ x) {y : ℂ} (hy : r
318318
abs (x ^ y) = x ^ re y := by
319319
rw [abs_cpow_of_imp] <;> simp [*, arg_ofReal_of_nonneg, _root_.abs_of_nonneg]
320320

321+
open Filter in
322+
lemma norm_ofReal_cpow_eventually_eq_atTop (c : ℂ) :
323+
(fun t : ℝ ↦ ‖(t : ℂ) ^ c‖) =ᶠ[atTop] fun t ↦ t ^ c.re := by
324+
filter_upwards [eventually_gt_atTop 0] with t ht
325+
rw [Complex.norm_eq_abs, abs_cpow_eq_rpow_re_of_pos ht]
326+
321327
lemma norm_natCast_cpow_of_re_ne_zero (n : ℕ) {s : ℂ} (hs : s.re ≠ 0) :
322328
‖(n : ℂ) ^ s‖ = (n : ℝ) ^ (s.re) := by
323329
rw [norm_eq_abs, ← ofReal_natCast, abs_cpow_eq_rpow_re_of_nonneg n.cast_nonneg hs]
@@ -962,6 +968,35 @@ lemma norm_log_natCast_le_rpow_div (n : ℕ) {ε : ℝ} (hε : 0 < ε) : ‖log
962968

963969
end Complex
964970

971+
namespace Asymptotics
972+
973+
open Filter
974+
975+
variable {E : Type*} [SeminormedRing E] (a b c : ℝ)
976+
977+
theorem IsBigO.mul_atTop_rpow_of_isBigO_rpow {f g : ℝ → E}
978+
(hf : f =O[atTop] fun t ↦ (t : ℝ) ^ a) (hg : g =O[atTop] fun t ↦ (t : ℝ) ^ b)
979+
(h : a + b ≤ c) :
980+
(f * g) =O[atTop] fun t ↦ (t : ℝ) ^ c := by
981+
refine (hf.mul hg).trans (Eventually.isBigO ?_)
982+
filter_upwards [eventually_ge_atTop 1] with t ht
983+
rw [← Real.rpow_add (zero_lt_one.trans_le ht), Real.norm_of_nonneg (Real.rpow_nonneg
984+
(zero_le_one.trans ht) (a + b))]
985+
exact Real.rpow_le_rpow_of_exponent_le ht h
986+
987+
theorem IsBigO.mul_atTop_rpow_natCast_of_isBigO_rpow {f g : ℕ → E}
988+
(hf : f =O[atTop] fun n ↦ (n : ℝ) ^ a) (hg : g =O[atTop] fun n ↦ (n : ℝ) ^ b)
989+
(h : a + b ≤ c) :
990+
(f * g) =O[atTop] fun n ↦ (n : ℝ) ^ c := by
991+
refine (hf.mul hg).trans (Eventually.isBigO ?_)
992+
filter_upwards [eventually_ge_atTop 1] with t ht
993+
replace ht : 1 ≤ (t : ℝ) := Nat.one_le_cast.mpr ht
994+
rw [← Real.rpow_add (zero_lt_one.trans_le ht), Real.norm_of_nonneg (Real.rpow_nonneg
995+
(zero_le_one.trans ht) (a + b))]
996+
exact Real.rpow_le_rpow_of_exponent_le ht h
997+
998+
end Asymptotics
999+
9651000
/-!
9661001
## Square roots of reals
9671002
-/

Mathlib/Data/Complex/Abs.lean

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -291,10 +291,16 @@ theorem lim_abs (f : CauSeq ℂ Complex.abs) : lim (cauSeqAbs f) = Complex.abs (
291291
let ⟨i, hi⟩ := equiv_lim f ε ε0
292292
⟨i, fun j hj => lt_of_le_of_lt (Complex.abs.abs_abv_sub_le_abv_sub _ _) (hi j hj)⟩
293293

294+
lemma ne_zero_of_re_pos {s : ℂ} (hs : 0 < s.re) : s ≠ 0 :=
295+
fun h ↦ (zero_re ▸ h ▸ hs).false
296+
294297
lemma ne_zero_of_one_lt_re {s : ℂ} (hs : 1 < s.re) : s ≠ 0 :=
295-
fun h ↦ ((zero_re ▸ h ▸ hs).trans zero_lt_one).false
298+
ne_zero_of_re_pos <| zero_lt_one.trans hs
299+
300+
lemma re_neg_ne_zero_of_re_pos {s : ℂ} (hs : 0 < s.re) : (-s).re ≠ 0 :=
301+
ne_iff_lt_or_gt.mpr <| Or.inl <| neg_re s ▸ (neg_lt_zero.mpr hs)
296302

297303
lemma re_neg_ne_zero_of_one_lt_re {s : ℂ} (hs : 1 < s.re) : (-s).re ≠ 0 :=
298-
ne_iff_lt_or_gt.mpr <| Or.inl <| neg_re s ▸ by linarith
304+
re_neg_ne_zero_of_re_pos <| zero_lt_one.trans hs
299305

300306
end Complex

Mathlib/NumberTheory/AbelSummation.lean

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ namespace abelSummationProof
5151

5252
open intervalIntegral IntervalIntegrable
5353

54-
private theorem sumlocc (n : ℕ) :
55-
∀ᵐ t, t ∈ Set.Icc (n : ℝ) (n + 1) → ∑ k ∈ Icc 0 ⌊t⌋₊, c k = ∑ k ∈ Icc 0 n, c k := by
54+
private theorem sumlocc {m : ℕ} (n : ℕ) :
55+
∀ᵐ t, t ∈ Set.Icc (n : ℝ) (n + 1) → ∑ k ∈ Icc m ⌊t⌋₊, c k = ∑ k ∈ Icc m n, c k := by
5656
filter_upwards [Ico_ae_eq_Icc] with t h ht
5757
rw [Nat.floor_eq_on_Ico _ _ (h.mpr ht)]
5858

@@ -83,19 +83,20 @@ private theorem ineqofmemIco' {k : ℕ} (hk : k ∈ Ico (⌊a⌋₊ + 1) ⌊b⌋
8383
a ≤ k ∧ k + 1 ≤ b :=
8484
ineqofmemIco (by rwa [← Finset.coe_Ico])
8585

86-
private theorem integrablemulsum (ha : 0 ≤ a) {g : ℝ → 𝕜} (hg_int : IntegrableOn g (Set.Icc a b)) :
87-
IntegrableOn (fun t ↦ g t * ∑ k ∈ Icc 0 ⌊t⌋₊, c k) (Set.Icc a b) := by
86+
theorem _root_.integrableOn_mul_sum_Icc {m : ℕ} (ha : 0 ≤ a) {g : ℝ → 𝕜}
87+
(hg_int : IntegrableOn g (Set.Icc a b)) :
88+
IntegrableOn (fun t ↦ g t * ∑ k ∈ Icc m ⌊t⌋₊, c k) (Set.Icc a b) := by
8889
obtain hab | hab := le_or_gt a b
8990
· obtain hb | hb := eq_or_lt_of_le (Nat.floor_le_floor hab)
90-
· have : ∀ᵐ t, t ∈ Set.Icc a b → ∑ k ∈ Icc 0 ⌊a⌋₊, c k = ∑ k ∈ Icc 0 ⌊t⌋₊, c k := by
91+
· have : ∀ᵐ t, t ∈ Set.Icc a b → ∑ k ∈ Icc m ⌊a⌋₊, c k = ∑ k ∈ Icc m ⌊t⌋₊, c k := by
9192
filter_upwards [sumlocc c ⌊a⌋₊] with t ht₁ ht₂
9293
rw [ht₁ ⟨(Nat.floor_le ha).trans ht₂.1, hb ▸ ht₂.2.trans (Nat.lt_floor_add_one b).le⟩]
9394
rw [← ae_restrict_iff' measurableSet_Icc] at this
9495
exact IntegrableOn.congr_fun_ae
9596
(hg_int.mul_const _) ((Filter.EventuallyEq.refl _ g).mul this)
9697
· have h_locint {t₁ t₂ : ℝ} {n : ℕ} (h : t₁ ≤ t₂) (h₁ : n ≤ t₁) (h₂ : t₂ ≤ n + 1)
9798
(h₃ : a ≤ t₁) (h₄ : t₂ ≤ b) :
98-
IntervalIntegrable (fun t ↦ g t * ∑ k ∈ Icc 0 ⌊t⌋₊, c k) volume t₁ t₂ := by
99+
IntervalIntegrable (fun t ↦ g t * ∑ k ∈ Icc m ⌊t⌋₊, c k) volume t₁ t₂ := by
99100
rw [intervalIntegrable_iff_integrableOn_Icc_of_le h]
100101
exact (IntegrableOn.mono_set (hg_int.mul_const _) (Set.Icc_subset_Icc h₃ h₄)).congr
101102
<| ae_restrict_of_ae_restrict_of_subset (Set.Icc_subset_Icc h₁ h₂)
@@ -154,15 +155,15 @@ theorem _root_.sum_mul_eq_sub_sub_integral_mul (ha : 0 ≤ a) (hab : a ≤ b)
154155
-- (Note we have 5 goals, but the 1st and 3rd are identical. TODO: find a non-hacky way of dealing
155156
-- with both at once.)
156157
· rw [intervalIntegrable_iff_integrableOn_Icc_of_le aux6]
157-
exact (integrablemulsum c ha hf_int).mono_set (Set.Icc_subset_Icc_right aux5)
158+
exact (integrableOn_mul_sum_Icc c ha hf_int).mono_set (Set.Icc_subset_Icc_right aux5)
158159
· rw [intervalIntegrable_iff_integrableOn_Icc_of_le aux5]
159-
exact (integrablemulsum c ha hf_int).mono_set (Set.Icc_subset_Icc_left aux6)
160+
exact (integrableOn_mul_sum_Icc c ha hf_int).mono_set (Set.Icc_subset_Icc_left aux6)
160161
· rw [intervalIntegrable_iff_integrableOn_Icc_of_le aux6]
161-
exact (integrablemulsum c ha hf_int).mono_set (Set.Icc_subset_Icc_right aux5)
162+
exact (integrableOn_mul_sum_Icc c ha hf_int).mono_set (Set.Icc_subset_Icc_right aux5)
162163
· rw [intervalIntegrable_iff_integrableOn_Icc_of_le aux3]
163-
exact (integrablemulsum c ha hf_int).mono_set (Set.Icc_subset_Icc_right aux4)
164+
exact (integrableOn_mul_sum_Icc c ha hf_int).mono_set (Set.Icc_subset_Icc_right aux4)
164165
· exact fun k hk ↦ (intervalIntegrable_iff_integrableOn_Icc_of_le (mod_cast k.le_succ)).mpr
165-
<| (integrablemulsum c ha hf_int).mono_set
166+
<| (integrableOn_mul_sum_Icc c ha hf_int).mono_set
166167
<| (Set.Icc_subset_Icc_iff (mod_cast k.le_succ)).mpr <| mod_cast (ineqofmemIco hk)
167168

168169
/-- A version of `sum_mul_eq_sub_sub_integral_mul` where the endpoints are `Nat`. -/
@@ -209,7 +210,7 @@ theorem sum_mul_eq_sub_integral_mul₀ (hc : c 0 = 0) (b : ℝ)
209210
f b * (∑ k ∈ Icc 0 ⌊b⌋₊, c k) - ∫ t in Set.Ioc 1 b, deriv f t * ∑ k ∈ Icc 0 ⌊t⌋₊, c k := by
210211
obtain hb | hb := le_or_gt 1 b
211212
· have : 1 ≤ ⌊b⌋₊ := (Nat.one_le_floor_iff _).mpr hb
212-
nth_rewrite 1 [Icc_eq_cons_Ioc (by omega), sum_cons, ← Nat.Icc_succ_left,
213+
nth_rewrite 1 [Icc_eq_cons_Ioc (Nat.zero_le _), sum_cons, ← Nat.Icc_succ_left,
213214
Icc_eq_cons_Ioc (by omega), sum_cons]
214215
rw [Nat.succ_eq_add_one, zero_add, ← Nat.floor_one (α := ℝ),
215216
sum_mul_eq_sub_sub_integral_mul c zero_le_one hb hf_diff hf_int, Nat.floor_one, Nat.cast_one,
@@ -235,13 +236,14 @@ section limit
235236

236237
open Filter Topology abelSummationProof intervalIntegral
237238

238-
private theorem locallyintegrablemulsum (ha : 0 ≤ a) {g : ℝ → 𝕜} (hg : IntegrableOn g (Set.Ici a)) :
239-
LocallyIntegrableOn (fun t ↦ g t * ∑ k ∈ Icc 0 ⌊t⌋₊, c k) (Set.Ici a) := by
239+
theorem locallyIntegrableOn_mul_sum_Icc {m : ℕ} (ha : 0 ≤ a) {g : ℝ → 𝕜}
240+
(hg : IntegrableOn g (Set.Ici a)) :
241+
LocallyIntegrableOn (fun t ↦ g t * ∑ k ∈ Icc m ⌊t⌋₊, c k) (Set.Ici a) := by
240242
refine (locallyIntegrableOn_iff isLocallyClosed_Ici).mpr fun K hK₁ hK₂ ↦ ?_
241243
by_cases hK₃ : K.Nonempty
242244
· have h_inf : a ≤ sInf K := (hK₁ (hK₂.sInf_mem hK₃))
243245
refine IntegrableOn.mono_set ?_ (Bornology.IsBounded.subset_Icc_sInf_sSup hK₂.isBounded)
244-
refine integrablemulsum _ (ha.trans h_inf) (hg.mono_set ?_)
246+
refine integrableOn_mul_sum_Icc _ (ha.trans h_inf) (hg.mono_set ?_)
245247
exact (Set.Icc_subset_Ici_iff (Real.sInf_le_sSup _ hK₂.bddBelow hK₂.bddAbove)).mpr h_inf
246248
· rw [Set.not_nonempty_iff_eq_empty.mp hK₃]
247249
exact integrableOn_empty
@@ -259,7 +261,8 @@ theorem tendsto_sum_mul_atTop_nhds_one_sub_integral
259261
refine Tendsto.congr (fun _ ↦ by rw [← integral_of_le (Nat.cast_nonneg _)]) ?_
260262
refine intervalIntegral_tendsto_integral_Ioi _ ?_ tendsto_natCast_atTop_atTop
261263
exact integrableOn_Ici_iff_integrableOn_Ioi.mp
262-
<| (locallyintegrablemulsum c le_rfl hf_int).integrableOn_of_isBigO_atTop hg_dom hg_int
264+
<| (locallyIntegrableOn_mul_sum_Icc c le_rfl hf_int).integrableOn_of_isBigO_atTop
265+
hg_dom hg_int
263266
refine (h_lim.sub h_lim').congr (fun _ ↦ ?_)
264267
rw [sum_mul_eq_sub_integral_mul' _ _ (fun t ht ↦ hf_diff _ ht.1)
265268
(hf_int.mono_set Set.Icc_subset_Ici_self)]
@@ -280,7 +283,8 @@ theorem tendsto_sum_mul_atTop_nhds_one_sub_integral₀ (hc : c 0 = 0)
280283
atTop (𝓝 (∫ t in Set.Ioi 1, deriv f t * ∑ k ∈ Icc 0 ⌊t⌋₊, c k)) := by
281284
refine Tendsto.congr' h (intervalIntegral_tendsto_integral_Ioi _ ?_ tendsto_natCast_atTop_atTop)
282285
exact integrableOn_Ici_iff_integrableOn_Ioi.mp
283-
<| (locallyintegrablemulsum c zero_le_one hf_int).integrableOn_of_isBigO_atTop hg_dom hg_int
286+
<| (locallyIntegrableOn_mul_sum_Icc c zero_le_one hf_int).integrableOn_of_isBigO_atTop
287+
hg_dom hg_int
284288
refine (h_lim.sub h_lim').congr (fun _ ↦ ?_)
285289
rw [sum_mul_eq_sub_integral_mul₀' _ hc _ (fun t ht ↦ hf_diff _ ht.1)
286290
(hf_int.mono_set Set.Icc_subset_Ici_self)]
@@ -325,9 +329,10 @@ private theorem summable_mul_of_bigO_atTop_aux (m : ℕ)
325329
· exact add_le_add_left
326330
(le_trans (neg_le_abs _) (Real.norm_eq_abs _ ▸ norm_integral_le_integral_norm _)) _
327331
· refine add_le_add_left (setIntegral_mono_set ?_ ?_ Set.Ioc_subset_Ioi_self.eventuallyLE) C₁
328-
· refine integrableOn_Ici_iff_integrableOn_Ioi.mp <|
332+
· exact integrableOn_Ici_iff_integrableOn_Ioi.mp <|
329333
(integrable_norm_iff h_mes.aestronglyMeasurable).mpr <|
330-
(locallyintegrablemulsum _ m.cast_nonneg hf_int).integrableOn_of_isBigO_atTop hg₁ hg₂
334+
(locallyIntegrableOn_mul_sum_Icc _ m.cast_nonneg hf_int).integrableOn_of_isBigO_atTop
335+
hg₁ hg₂
331336
· filter_upwards with t using norm_nonneg _
332337

333338
theorem summable_mul_of_bigO_atTop

Mathlib/NumberTheory/LSeries/Basic.lean

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,12 @@ lemma term_def (f : ℕ → ℂ) (s : ℂ) (n : ℕ) :
6868
term f s n = if n = 0 then 0 else f n / n ^ s :=
6969
rfl
7070

71+
/-- An alternate spelling of `term_def` for the case `f 0 = 0`. -/
72+
lemma term_def₀ {f : ℕ → ℂ} (hf : f 0 = 0) (s : ℂ) (n : ℕ) :
73+
LSeries.term f s n = f n * (n : ℂ) ^ (- s) := by
74+
rw [LSeries.term]
75+
split_ifs with h <;> simp [h, hf, cpow_neg, div_eq_inv_mul, mul_comm]
76+
7177
@[simp]
7278
lemma term_zero (f : ℕ → ℂ) (s : ℂ) : term f s 0 = 0 := rfl
7379

0 commit comments

Comments
 (0)