Skip to content

Commit b640e0b

Browse files
feat(NumberTheory/LSeries/*): add material on convergence (#10728)
This continues a series of PRs on L-series. Here we add `ArithmeticFunction.LSeriesHasSum` (in `NumberTheory.LSeries.Basic`) and `ArithmeticFunction.abscissaOfAbsConv` (in a new file `NumberTheory.LSeries.Convergence`), together with some results about these notions. See [here](https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/L-series/near/422275501) on Zulip.
1 parent c8ec7ab commit b640e0b

File tree

3 files changed

+256
-44
lines changed

3 files changed

+256
-44
lines changed

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2903,6 +2903,7 @@ import Mathlib.NumberTheory.FrobeniusNumber
29032903
import Mathlib.NumberTheory.FunctionField
29042904
import Mathlib.NumberTheory.KummerDedekind
29052905
import Mathlib.NumberTheory.LSeries.Basic
2906+
import Mathlib.NumberTheory.LSeries.Convergence
29062907
import Mathlib.NumberTheory.LegendreSymbol.AddCharacter
29072908
import Mathlib.NumberTheory.LegendreSymbol.Basic
29082909
import Mathlib.NumberTheory.LegendreSymbol.GaussEisensteinLemmas

Mathlib/NumberTheory/LSeries/Basic.lean

Lines changed: 144 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
/-
22
Copyright (c) 2021 Aaron Anderson. All rights reserved.
33
Released under Apache 2.0 license as described in the file LICENSE.
4-
Authors: Aaron Anderson
4+
Authors: Aaron Anderson, Michael Stoll
55
-/
6-
import Mathlib.Analysis.NormedSpace.FiniteDimension
76
import Mathlib.Analysis.PSeries
87
import Mathlib.NumberTheory.ArithmeticFunction
9-
import Mathlib.Topology.Algebra.InfiniteSum.Basic
8+
import Mathlib.Analysis.NormedSpace.FiniteDimension
109

1110
#align_import number_theory.l_series from "leanprover-community/mathlib"@"32253a1a1071173b33dc7d6a218cf722c6feb514"
1211

@@ -16,29 +15,44 @@ import Mathlib.Topology.Algebra.InfiniteSum.Basic
1615
Given an arithmetic function, we define the corresponding L-series.
1716
1817
## Main Definitions
18+
1919
* `ArithmeticFunction.LSeries` is the `LSeries` with a given arithmetic function as its
2020
coefficients. This is not the analytic continuation, just the infinite series.
21+
2122
* `ArithmeticFunction.LSeriesSummable` indicates that the `LSeries`
2223
converges at a given point.
2324
25+
* `ArithmeticFunction.LSeriesHasSum f s a` expresses that the L-series
26+
of `f : ArithmeticFunction ℂ` converges (absolutely) at `s : ℂ` to `a : ℂ`.
27+
2428
## Main Results
25-
* `ArithmeticFunction.LSeriesSummable_of_bounded_of_one_lt_real`: the `LSeries` of a bounded
26-
arithmetic function converges when `1 < z.re`.
29+
30+
* `ArithmeticFunction.LSeriesSummable_of_le_const_mul_rpow`: the `LSeries` of an
31+
arithmetic function bounded by a constant times `n^(x-1)` converges at `s` when `x < s.re`.
32+
2733
* `ArithmeticFunction.zeta_LSeriesSummable_iff_one_lt_re`: the `LSeries` of `ζ`
2834
(whose analytic continuation is the Riemann ζ) converges iff `1 < z.re`.
2935
30-
-/
36+
## Tags
37+
38+
L-series, abscissa of convergence
3139
40+
## TODO
41+
42+
* Move `zeta_LSeriesSummable_iff_one_lt_r` to a new file on L-series of specific functions
43+
44+
* Move `LSeries_add` to a new file on algebraic operations on L-series
45+
-/
3246

33-
noncomputable section
3447

3548
open scoped BigOperators
3649

3750
namespace ArithmeticFunction
3851

39-
open Nat
52+
open Complex Nat
4053

4154
/-- The L-series of an `ArithmeticFunction`. -/
55+
noncomputable
4256
def LSeries (f : ArithmeticFunction ℂ) (z : ℂ) : ℂ :=
4357
∑' n, f n / n ^ z
4458
#align nat.arithmetic_function.l_series ArithmeticFunction.LSeries
@@ -58,50 +72,136 @@ theorem LSeriesSummable_zero {z : ℂ} : LSeriesSummable 0 z := by
5872
simp [LSeriesSummable, summable_zero]
5973
#align nat.arithmetic_function.l_series_summable_zero ArithmeticFunction.LSeriesSummable_zero
6074

61-
theorem LSeriesSummable_of_bounded_of_one_lt_real {f : ArithmeticFunction ℂ} {m : ℝ}
62-
(h : ∀ n : ℕ, Complex.abs (f n) ≤ m) {z : ℝ} (hz : 1 < z) : f.LSeriesSummable z := by
63-
by_cases h0 : m = 0
64-
· subst h0
65-
have hf : f = 0 := ArithmeticFunction.ext fun n =>
66-
Complex.abs.eq_zero.1 (le_antisymm (h n) (Complex.abs.nonneg _))
67-
simp [hf]
68-
refine' .of_norm_bounded (fun n : ℕ => m / n ^ z) _ _
69-
· simp_rw [div_eq_mul_inv]
70-
exact (summable_mul_left_iff h0).2 (Real.summable_nat_rpow_inv.2 hz)
71-
· intro n
72-
have hm : 0 ≤ m := le_trans (Complex.abs.nonneg _) (h 0)
73-
cases' n with n
74-
· simp [hm, Real.zero_rpow (_root_.ne_of_gt (lt_trans Real.zero_lt_one hz))]
75-
simp only [map_div₀, Complex.norm_eq_abs]
76-
apply div_le_div hm (h _) (Real.rpow_pos_of_pos (Nat.cast_pos.2 n.succ_pos) _) (le_of_eq _)
77-
rw [Complex.abs_cpow_real, Complex.abs_natCast]
78-
#align nat.arithmetic_function.l_series_summable_of_bounded_of_one_lt_real ArithmeticFunction.LSeriesSummable_of_bounded_of_one_lt_real
75+
/-- This states that the L-series of the arithmetic function `f` converges at `s` to `a`. -/
76+
def LSeriesHasSum (f : ArithmeticFunction ℂ) (s a : ℂ) : Prop :=
77+
HasSum (fun (n : ℕ) => f n / n ^ s) a
78+
79+
lemma LSeriesHasSum.LSeriesSummable {f : ArithmeticFunction ℂ} {s a : ℂ}
80+
(h : LSeriesHasSum f s a) : LSeriesSummable f s :=
81+
h.summable
82+
83+
lemma LSeriesHasSum.LSeries_eq {f : ArithmeticFunction ℂ} {s a : ℂ}
84+
(h : LSeriesHasSum f s a) : LSeries f s = a :=
85+
h.tsum_eq
86+
87+
lemma LSeriesSummable.LSeriesHasSum {f : ArithmeticFunction ℂ} {s : ℂ} (h : LSeriesSummable f s) :
88+
LSeriesHasSum f s (LSeries f s) :=
89+
h.hasSum
90+
91+
lemma norm_LSeriesTerm_eq (f : ArithmeticFunction ℂ) (s : ℂ) (n : ℕ) :
92+
‖f n / n ^ s‖ = ‖f n‖ / n ^ s.re := by
93+
rcases n.eq_zero_or_pos with rfl | hn
94+
· simp only [map_zero, zero_div, norm_zero, zero_mul]
95+
rw [norm_div, norm_natCast_cpow_of_pos hn]
96+
97+
lemma norm_LSeriesTerm_le_of_re_le_re (f : ArithmeticFunction ℂ) {w : ℂ} {z : ℂ}
98+
(h : w.re ≤ z.re) (n : ℕ) : ‖f n / n ^ z‖ ≤ ‖f n / n ^ w‖ := by
99+
rcases n.eq_zero_or_pos with rfl | hn
100+
· simp only [map_zero, CharP.cast_eq_zero, zero_div, norm_zero, le_refl]
101+
have hn' := norm_natCast_cpow_pos_of_pos hn w
102+
simp_rw [norm_div]
103+
suffices H : ‖(n : ℂ) ^ w‖ ≤ ‖(n : ℂ) ^ z‖ from div_le_div (norm_nonneg _) le_rfl hn' H
104+
refine (one_le_div hn').mp ?_
105+
rw [← norm_div, ← cpow_sub _ _ <| cast_ne_zero.mpr hn.ne', norm_natCast_cpow_of_pos hn]
106+
exact Real.one_le_rpow (one_le_cast.mpr hn) <| by simp only [sub_re, sub_nonneg, h]
107+
108+
lemma LSeriesSummable.of_re_le_re {f : ArithmeticFunction ℂ} {w : ℂ} {z : ℂ} (h : w.re ≤ z.re)
109+
(hf : LSeriesSummable f w) : LSeriesSummable f z := by
110+
rw [LSeriesSummable, ← summable_norm_iff] at hf ⊢
111+
exact hf.of_nonneg_of_le (fun _ ↦ norm_nonneg _) (norm_LSeriesTerm_le_of_re_le_re f h)
79112

80113
theorem LSeriesSummable_iff_of_re_eq_re {f : ArithmeticFunction ℂ} {w z : ℂ} (h : w.re = z.re) :
81-
f.LSeriesSummable w ↔ f.LSeriesSummable z := by
82-
suffices h : ∀ n : ℕ,
83-
Complex.abs (f n) / Complex.abs (↑n ^ w) = Complex.abs (f n) / Complex.abs (↑n ^ z) by
84-
simp [LSeriesSummable, ← summable_norm_iff, h, Complex.norm_eq_abs]
85-
intro n
86-
cases' n with n; · simp
87-
apply congr rfl
88-
have h0 : (n.succ : ℂ) ≠ 0 := by
89-
rw [Ne.def, Nat.cast_eq_zero]
90-
apply n.succ_ne_zero
91-
rw [Complex.cpow_def, Complex.cpow_def, if_neg h0, if_neg h0, Complex.abs_exp_eq_iff_re_eq]
92-
simp only [h, Complex.mul_re, mul_eq_mul_left_iff, sub_right_inj]
93-
right
94-
rw [Complex.log_im, ← Complex.ofReal_nat_cast]
95-
exact Complex.arg_ofReal_of_nonneg (le_of_lt (cast_pos.2 n.succ_pos))
114+
f.LSeriesSummable w ↔ f.LSeriesSummable z :=
115+
fun H ↦ H.of_re_le_re h.le, fun H ↦ H.of_re_le_re h.symm.le⟩
96116
#align nat.arithmetic_function.l_series_summable_iff_of_re_eq_re ArithmeticFunction.LSeriesSummable_iff_of_re_eq_re
97117

118+
lemma LSeriesSummable.le_const_mul_rpow {f : ArithmeticFunction ℂ} {s : ℂ}
119+
(h : LSeriesSummable f s) : ∃ C, ∀ n, ‖f n‖ ≤ C * n ^ s.re := by
120+
replace h := h.norm
121+
by_contra! H
122+
obtain ⟨n, hn⟩ := H (tsum fun n ↦ ‖f n / n ^ s‖)
123+
have hn₀ : 0 < n := by
124+
refine n.eq_zero_or_pos.resolve_left ?_
125+
rintro rfl
126+
rw [map_zero, norm_zero, Nat.cast_zero, mul_neg_iff] at hn
127+
replace hn := hn.resolve_left <| fun hh ↦ hh.2.not_le <| Real.rpow_nonneg (le_refl 0) s.re
128+
exact hn.1.not_le <| tsum_nonneg (fun _ ↦ norm_nonneg _)
129+
have := le_tsum h n fun _ _ ↦ norm_nonneg _
130+
rw [norm_LSeriesTerm_eq, div_le_iff <| Real.rpow_pos_of_pos (Nat.cast_pos.mpr hn₀) _] at this
131+
exact (this.trans_lt hn).false.elim
132+
133+
open Filter in
134+
lemma LSeriesSummable.isBigO_rpow {f : ArithmeticFunction ℂ} {s : ℂ}
135+
(h : LSeriesSummable f s) : f =O[atTop] fun n ↦ (n : ℝ) ^ s.re := by
136+
obtain ⟨C, hC⟩ := h.le_const_mul_rpow
137+
refine Asymptotics.IsBigO.of_bound C ?_
138+
convert eventually_of_forall hC using 4 with n
139+
have hn₀ : (0 : ℝ) ≤ n := Nat.cast_nonneg _
140+
rw [Real.norm_eq_abs, Real.abs_rpow_of_nonneg hn₀, _root_.abs_of_nonneg hn₀]
141+
142+
lemma LSeriesSummable_of_le_const_mul_rpow {f : ArithmeticFunction ℂ} {x : ℝ} {s : ℂ}
143+
(hs : x < s.re) (h : ∃ C, ∀ n, ‖f n‖ ≤ C * n ^ (x - 1)) :
144+
LSeriesSummable f s := by
145+
obtain ⟨C, hC⟩ := h
146+
have hC₀ : 0 ≤ C := by
147+
specialize hC 1
148+
simp only [cast_one, Real.one_rpow, mul_one] at hC
149+
exact (norm_nonneg _).trans hC
150+
have hsum : Summable fun n : ℕ ↦ ‖(C : ℂ) / n ^ (s + (1 - x))‖ := by
151+
simp_rw [div_eq_mul_inv, norm_mul, ← cpow_neg]
152+
have hsx : -s.re + x - 1 < -1 := by linarith only [hs]
153+
refine Summable.mul_left _ <|
154+
Summable.of_norm_bounded_eventually_nat (fun n ↦ (n : ℝ) ^ (-s.re + x - 1)) ?_ ?_
155+
· simp only [Real.summable_nat_rpow, hsx]
156+
· simp only [neg_add_rev, neg_sub, norm_norm, Filter.eventually_atTop]
157+
refine ⟨1, fun n hn ↦ ?_⟩
158+
simp only [norm_natCast_cpow_of_pos hn, add_re, sub_re, neg_re, ofReal_re, one_re]
159+
convert le_refl ?_ using 2
160+
ring
161+
refine Summable.of_norm <| hsum.of_nonneg_of_le (fun _ ↦ norm_nonneg _) (fun n ↦ ?_)
162+
rcases n.eq_zero_or_pos with rfl | hn
163+
· simp only [map_zero, zero_div, norm_zero, norm_nonneg]
164+
have hn' : 0 < (n : ℝ) ^ s.re := Real.rpow_pos_of_pos (Nat.cast_pos.mpr hn) _
165+
simp_rw [norm_div, norm_natCast_cpow_of_pos hn, div_le_iff hn', add_re, sub_re, one_re,
166+
ofReal_re, Real.rpow_add <| Nat.cast_pos.mpr hn, div_eq_mul_inv, mul_inv]
167+
rw [mul_assoc, mul_comm _ ((n : ℝ) ^ s.re), ← mul_assoc ((n : ℝ) ^ s.re), mul_inv_cancel hn'.ne',
168+
← Real.rpow_neg n.cast_nonneg, norm_eq_abs (C : ℂ), abs_ofReal, _root_.abs_of_nonneg hC₀,
169+
neg_sub, one_mul]
170+
exact hC n
171+
172+
open Filter Finset Real Nat in
173+
lemma LSeriesSummable_of_isBigO_rpow {f : ArithmeticFunction ℂ} {x : ℝ} {s : ℂ}
174+
(hs : x < s.re) (h : f =O[atTop] fun n ↦ (n : ℝ) ^ (x - 1)) :
175+
LSeriesSummable f s := by
176+
obtain ⟨C, hC⟩ := Asymptotics.isBigO_iff.mp h
177+
obtain ⟨m, hm⟩ := eventually_atTop.mp hC
178+
let C' := max C (max' (insert 0 (image (fun n : ℕ ↦ ‖f n‖ / (n : ℝ) ^ (x - 1)) (range m)))
179+
(insert_nonempty 0 _))
180+
have hC'₀ : 0 ≤ C' := (le_max' _ _ (mem_insert.mpr (Or.inl rfl))).trans <| le_max_right ..
181+
have hCC' : C ≤ C' := le_max_left ..
182+
refine LSeriesSummable_of_le_const_mul_rpow hs ⟨C', fun n ↦ ?_⟩
183+
rcases le_or_lt m n with hn | hn
184+
· refine (hm n hn).trans ?_
185+
have hn₀ : (0 : ℝ) ≤ n := cast_nonneg _
186+
gcongr
187+
rw [Real.norm_eq_abs, abs_rpow_of_nonneg hn₀, _root_.abs_of_nonneg hn₀]
188+
· rcases n.eq_zero_or_pos with rfl | hn'
189+
· simpa only [map_zero, norm_zero, cast_zero] using mul_nonneg hC'₀ <| zero_rpow_nonneg _
190+
refine (div_le_iff <| rpow_pos_of_pos (cast_pos.mpr hn') _).mp ?_
191+
refine (le_max' _ _ <| mem_insert_of_mem ?_).trans <| le_max_right ..
192+
exact mem_image.mpr ⟨n, mem_range.mpr hn, rfl⟩
193+
98194
theorem LSeriesSummable_of_bounded_of_one_lt_re {f : ArithmeticFunction ℂ} {m : ℝ}
99195
(h : ∀ n : ℕ, Complex.abs (f n) ≤ m) {z : ℂ} (hz : 1 < z.re) : f.LSeriesSummable z := by
100-
rw [← LSeriesSummable_iff_of_re_eq_re (Complex.ofReal_re z.re)]
101-
apply LSeriesSummable_of_bounded_of_one_lt_real h
102-
exact hz
196+
refine LSeriesSummable_of_le_const_mul_rpow hz ⟨m, fun n ↦ ?_⟩
197+
simp only [norm_eq_abs, sub_self, Real.rpow_zero, mul_one, h n]
103198
#align nat.arithmetic_function.l_series_summable_of_bounded_of_one_lt_re ArithmeticFunction.LSeriesSummable_of_bounded_of_one_lt_re
104199

200+
theorem LSeriesSummable_of_bounded_of_one_lt_real {f : ArithmeticFunction ℂ} {m : ℝ}
201+
(h : ∀ n : ℕ, Complex.abs (f n) ≤ m) {z : ℝ} (hz : 1 < z) : f.LSeriesSummable z :=
202+
LSeriesSummable_of_bounded_of_one_lt_re h <| by simp only [ofReal_re, hz]
203+
#align nat.arithmetic_function.l_series_summable_of_bounded_of_one_lt_real ArithmeticFunction.LSeriesSummable_of_bounded_of_one_lt_real
204+
105205
open scoped ArithmeticFunction
106206

107207
theorem zeta_LSeriesSummable_iff_one_lt_re {z : ℂ} : LSeriesSummable ζ z ↔ 1 < z.re := by
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
/-
2+
Copyright (c) 2024 Michael Stoll. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Michael Stoll
5+
-/
6+
import Mathlib.NumberTheory.LSeries.Basic
7+
import Mathlib.Data.Real.EReal
8+
9+
/-!
10+
# Convergence of L-series
11+
12+
We define `ArithmeticFunction.abscissaOfAbsConv f` (as an `EReal`) to be the infimum
13+
of all real numbers `x` such that the L-series of `f` converges for complex arguments with
14+
real part `x` and provide some results about it.
15+
16+
## Tags
17+
18+
L-series, abscissa of convergence
19+
-/
20+
21+
namespace ArithmeticFunction
22+
23+
open Complex Nat
24+
25+
/-- The abscissa `x : EReal` of absolute convergence of the L-series associated to `f`:
26+
the series converges absolutely at `s` when `re s > x` and does not converge absolutely
27+
when `re s < x`. -/
28+
noncomputable def abscissaOfAbsConv (f : ArithmeticFunction ℂ) : EReal :=
29+
sInf <| Real.toEReal '' {x : ℝ | LSeriesSummable f x}
30+
31+
lemma LSeriesSummable_of_abscissaOfAbsConv_lt_re {f : ArithmeticFunction ℂ} {s : ℂ}
32+
(hs : abscissaOfAbsConv f < s.re) : LSeriesSummable f s := by
33+
simp only [abscissaOfAbsConv, sInf_lt_iff, Set.mem_image, Set.mem_setOf_eq,
34+
exists_exists_and_eq_and, EReal.coe_lt_coe_iff] at hs
35+
obtain ⟨y, hy, hys⟩ := hs
36+
exact hy.of_re_le_re <| ofReal_re y ▸ hys.le
37+
38+
lemma LSeriesSummable_lt_re_of_abscissaOfAbsConv_lt_re {f : ArithmeticFunction ℂ} {s : ℂ}
39+
(hs : abscissaOfAbsConv f < s.re) :
40+
∃ x : ℝ, x < s.re ∧ LSeriesSummable f x := by
41+
obtain ⟨x, hx₁, hx₂⟩ := EReal.exists_between_coe_real hs
42+
exact ⟨x, EReal.coe_lt_coe_iff.mp hx₂, LSeriesSummable_of_abscissaOfAbsConv_lt_re hx₁⟩
43+
44+
lemma LSeriesSummable.abscissaOfAbsConv_le {f : ArithmeticFunction ℂ} {s : ℂ}
45+
(h : LSeriesSummable f s) : abscissaOfAbsConv f ≤ s.re := by
46+
refine sInf_le <| Membership.mem.out ?_
47+
simp only [Set.mem_setOf_eq, Set.mem_image, EReal.coe_eq_coe_iff, exists_eq_right]
48+
exact h.of_re_le_re <| by simp only [ofReal_re, le_refl]
49+
50+
lemma abscissaOfAbsConv_le_of_forall_lt_LSeriesSummable {f : ArithmeticFunction ℂ} {x : ℝ}
51+
(h : ∀ y : ℝ, x < y → LSeriesSummable f y) :
52+
abscissaOfAbsConv f ≤ x := by
53+
refine sInf_le_iff.mpr fun y hy ↦ ?_
54+
simp only [mem_lowerBounds, Set.mem_image, Set.mem_setOf_eq, forall_exists_index, and_imp,
55+
forall_apply_eq_imp_iff₂] at hy
56+
have H (a : EReal) : x < a → y ≤ a := by
57+
induction' a using EReal.rec with a₀
58+
· simp only [not_lt_bot, le_bot_iff, IsEmpty.forall_iff]
59+
· exact_mod_cast fun ha ↦ hy a₀ (h a₀ ha)
60+
· simp only [EReal.coe_lt_top, le_top, forall_true_left]
61+
exact Set.Ioi_subset_Ici_iff.mp H
62+
63+
lemma abscissaOfAbsConv_le_of_forall_lt_LSeriesSummable' {f : ArithmeticFunction ℂ} {x : EReal}
64+
(h : ∀ y : ℝ, x < y → LSeriesSummable f y) :
65+
abscissaOfAbsConv f ≤ x := by
66+
induction' x using EReal.rec with y
67+
· refine le_of_eq <| sInf_eq_bot.mpr fun y hy ↦ ?_
68+
induction' y using EReal.rec with z
69+
· simp only [gt_iff_lt, lt_self_iff_false] at hy
70+
· exact ⟨z - 1, ⟨z-1, h (z - 1) <| EReal.bot_lt_coe _, rfl⟩, by norm_cast; exact sub_one_lt z⟩
71+
· exact ⟨0, ⟨0, h 0 <| EReal.bot_lt_coe 0, rfl⟩, EReal.zero_lt_top⟩
72+
· exact abscissaOfAbsConv_le_of_forall_lt_LSeriesSummable <| by exact_mod_cast h
73+
· exact le_top
74+
75+
/-- If `‖f n‖` is bounded by a constant times `n^x`, then the abscissa of absolute convergence
76+
of `f` is bounded by `x + 1`. -/
77+
lemma abscissaOfAbsConv_le_of_le_const_mul_rpow {f : ArithmeticFunction ℂ} {x : ℝ}
78+
(h : ∃ C, ∀ n, ‖f n‖ ≤ C * n ^ x) : abscissaOfAbsConv f ≤ x + 1 := by
79+
rw [show x = x + 1 - 1 by ring] at h
80+
by_contra! H
81+
obtain ⟨y, hy₁, hy₂⟩ := EReal.exists_between_coe_real H
82+
exact (LSeriesSummable_of_le_const_mul_rpow (s := y) (EReal.coe_lt_coe_iff.mp hy₁) h
83+
|>.abscissaOfAbsConv_le.trans_lt hy₂).false
84+
85+
open Filter in
86+
/-- If `‖f n‖` is `O(n^x)`, then the abscissa of absolute convergence
87+
of `f` is bounded by `x + 1`. -/
88+
lemma abscissaOfAbsConv_le_of_isBigO_rpow {f : ArithmeticFunction ℂ} {x : ℝ}
89+
(h : f =O[atTop] fun n ↦ (n : ℝ) ^ x) : abscissaOfAbsConv f ≤ x + 1 := by
90+
rw [show x = x + 1 - 1 by ring] at h
91+
by_contra! H
92+
obtain ⟨y, hy₁, hy₂⟩ := EReal.exists_between_coe_real H
93+
exact (LSeriesSummable_of_isBigO_rpow (s := y) (EReal.coe_lt_coe_iff.mp hy₁) h
94+
|>.abscissaOfAbsConv_le.trans_lt hy₂).false
95+
96+
/-- If `f` is bounded, then the abscissa of absolute convergence of `f` is bounded above by `1`. -/
97+
lemma abscissaOfAbsConv_le_of_le_const {f : ArithmeticFunction ℂ}
98+
(h : ∃ C, ∀ n, ‖f n‖ ≤ C) : abscissaOfAbsConv f ≤ 1 := by
99+
convert abscissaOfAbsConv_le_of_le_const_mul_rpow (x := 0) ?_
100+
· norm_num
101+
· simpa only [norm_eq_abs, Real.rpow_zero, mul_one] using h
102+
103+
open Filter in
104+
/-- If `f` is `O(1)`, then the abscissa of absolute convergence of `f` is bounded above by `1`. -/
105+
lemma abscissaOfAbsConv_le_one_of_isBigO_one {f : ArithmeticFunction ℂ}
106+
(h : f =O[atTop] fun _ ↦ (1 : ℝ)) : abscissaOfAbsConv f ≤ 1 := by
107+
convert abscissaOfAbsConv_le_of_isBigO_rpow (x := 0) ?_
108+
· norm_num
109+
· simpa only [Real.rpow_zero] using h
110+
111+
end ArithmeticFunction

0 commit comments

Comments
 (0)