forked from leanprover-community/mathlib4
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathAsymptotic.lean
More file actions
115 lines (95 loc) · 4.32 KB
/
Asymptotic.lean
File metadata and controls
115 lines (95 loc) · 4.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/-
Copyright (c) 2026 Stefan Kebekus. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Stefan Kebekus
-/
module
public import Mathlib.Analysis.Complex.ValueDistribution.LogCounting.Basic
/-!
# Asymptotic Behavior of the Logarithmic Counting Function
If `f` is meromorphic over a field `𝕜`, we show that the logarithmic counting function for the
poles of `f` is asymptotically bounded if and only if `f` has only removable singularities. See
Page 170f of [Lang, *Introduction to Complex Hyperbolic Spaces*][MR886677] for a detailed
discussion.
## Implementation Notes
We establish the result first for the logarithmic counting function for functions with locally
finite support on `𝕜` and then specialize to the setting where the function with locally finite
support is the pole or zero-divisor of a meromorphic function.
## TODO
Establish the analogous characterization of meromorphic functions with finite set of poles, as
functions whose logarithmic counting function is big-O of `log`.
-/
@[expose] public section
open Asymptotics Filter Function Real Set
namespace Function.locallyFinsuppWithin
variable
{E : Type*} [NormedAddCommGroup E]
/-!
## Logarithmic Counting Functions for Functions with Locally Finite Support
-/
/--
Qualitative consequence of `logCounting_single_eq_log_sub_const`. The constant function `1 : ℝ → ℝ`
is little o of the logarithmic counting function attached to `single e`.
-/
lemma one_isLittleO_logCounting_single [DecidableEq E] [ProperSpace E] {e : E} :
(1 : ℝ → ℝ) =o[atTop] logCounting (single e 1) := by
have hΘ : (fun r : ℝ ↦ log r - log ‖e‖) =Θ[atTop] log :=
(IsEquivalent.refl.sub_isLittleO (Real.isLittleO_const_log_atTop (c := log ‖e‖))).isTheta
have h₁ : (1 : ℝ → ℝ) =o[atTop] fun r : ℝ ↦ log r - log ‖e‖ :=
(hΘ.isLittleO_congr_right).2 Real.isLittleO_const_log_atTop
refine h₁.congr' EventuallyEq.rfl ?_
filter_upwards [eventually_ge_atTop ‖e‖] with r hr
simp [logCounting_single_eq_log_sub_const hr]
/--
A non-negative function with locally finite support is zero if and only if its logarithmic counting
functions is asymptotically bounded.
-/
lemma zero_iff_logCounting_bounded [ProperSpace E]
{D : locallyFinsuppWithin (univ : Set E) ℤ} (h : 0 ≤ D) :
D = 0 ↔ logCounting D =O[atTop] (1 : ℝ → ℝ) := by
classical
refine ⟨fun h₂ ↦ by simp [isBigO_of_le' (c := 0), h₂], ?_⟩
contrapose
intro h₁
obtain ⟨e, he⟩ := exists_single_le_pos (lt_of_le_of_ne h (h₁ ·.symm))
rw [isBigO_iff'']
push Not
intro a ha
simp only [Pi.one_apply, norm_eq_abs, frequently_atTop, abs_one]
intro b
obtain ⟨c, hc⟩ := eventually_atTop.1
(isLittleO_iff.1 (one_isLittleO_logCounting_single (e := e)) ha)
let ℓ := 1 + max ‖e‖ (max |b| |c|)
have h₁ℓ : c ≤ ℓ := by grind
have h₂ℓ : 1 ≤ ℓ := by simp [ℓ]
use 1 + ℓ, (show b ≤ 1 + ℓ by grind)
calc 1
_ ≤ (a * |logCounting (single e 1) ℓ|) := by simpa [h₁ℓ] using hc ℓ
_ ≤ (a * |logCounting D ℓ|) := by
gcongr
· apply logCounting_nonneg (single_pos.2 Int.one_pos).le h₂ℓ
· apply logCounting_le he h₂ℓ
_ < a * |logCounting D (1 + ℓ)| := by
gcongr 2
rw [abs_of_nonneg (logCounting_nonneg h h₂ℓ),
abs_of_nonneg (logCounting_nonneg h (by grind))]
apply logCounting_strictMono he <;> grind
end Function.locallyFinsuppWithin
namespace ValueDistribution
variable
{𝕜 : Type*} [NontriviallyNormedField 𝕜] [ProperSpace 𝕜]
{E : Type*} [NormedAddCommGroup E] [NormedSpace 𝕜 E]
/-!
## Logarithmic Counting Functions for the Poles of a Meromorphic Function
-/
/--
A meromorphic function has only removable singularities if and only if the logarithmic counting
function for its pole divisor is asymptotically bounded.
-/
theorem logCounting_isBigO_one_iff_analyticOnNhd {f : 𝕜 → E} (h : Meromorphic f) :
logCounting f ⊤ =O[atTop] (1 : ℝ → ℝ) ↔ AnalyticOnNhd 𝕜 (toMeromorphicNFOn f univ) univ := by
simp only [logCounting, reduceDIte]
rw [← Function.locallyFinsuppWithin.zero_iff_logCounting_bounded (negPart_nonneg _)]
rw [negPart_eq_zero, ← h.meromorphicOn.divisor_of_toMeromorphicNFOn,
(meromorphicNFOn_toMeromorphicNFOn _ _).divisor_nonneg_iff_analyticOnNhd]
end ValueDistribution