|
| 1 | +/- |
| 2 | +Copyright (c) 2026 Stefan Kebekus. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Stefan Kebekus |
| 5 | +-/ |
| 6 | +module |
| 7 | + |
| 8 | +public import Mathlib.Analysis.Complex.ValueDistribution.LogCounting.Basic |
| 9 | + |
| 10 | +/-! |
| 11 | +# Asymptotic Behavior of the Logarithmic Counting Function |
| 12 | +
|
| 13 | +If `f` is meromorphic over a field `𝕜`, we show that the logarithmic counting function for the |
| 14 | +poles of `f` is asymptotically bounded if and only if `f` has only removable singularities. See |
| 15 | +Page 170f of [Lang, *Introduction to Complex Hyperbolic Spaces*][MR886677] for a detailed |
| 16 | +discussion. |
| 17 | +
|
| 18 | +## Implementation Notes |
| 19 | +
|
| 20 | +We establish the result first for the logarithmic counting function for functions with locally |
| 21 | +finite support on `𝕜` and then specialize to the setting where the function with locally finite |
| 22 | +support is the pole or zero-divisor of a meromorphic function. |
| 23 | +
|
| 24 | +## TODO |
| 25 | +
|
| 26 | +Establish the analogous characterization of meromorphic functions with finite set of poles, as |
| 27 | +functions whose logarithmic counting function is big-O of `log`. |
| 28 | +-/ |
| 29 | + |
| 30 | +@[expose] public section |
| 31 | + |
| 32 | +open Asymptotics Filter Function Real Set |
| 33 | + |
| 34 | +namespace Function.locallyFinsuppWithin |
| 35 | + |
| 36 | +variable |
| 37 | + {E : Type*} [NormedAddCommGroup E] |
| 38 | + |
| 39 | +/-! |
| 40 | +## Logarithmic Counting Functions for Functions with Locally Finite Support |
| 41 | +-/ |
| 42 | + |
| 43 | +/-- |
| 44 | +Qualitative consequence of `logCounting_single_eq_log_sub_const`. The constant function `1 : ℝ → ℝ` |
| 45 | +is little o of the logarithmic counting function attached to `single e`. |
| 46 | +-/ |
| 47 | +lemma one_isLittleO_logCounting_single [DecidableEq E] [ProperSpace E] {e : E} : |
| 48 | + (1 : ℝ → ℝ) =o[atTop] logCounting (single e 1) := by |
| 49 | + rw [isLittleO_iff] |
| 50 | + intro c hc |
| 51 | + simp only [Pi.one_apply, norm_eq_abs, eventually_atTop, abs_one] |
| 52 | + use exp (|log ‖e‖| + c⁻¹) |
| 53 | + intro b hb |
| 54 | + have h₁b : 1 ≤ b := by |
| 55 | + calc 1 |
| 56 | + _ ≤ exp (|log ‖e‖| + c⁻¹) := one_le_exp (by positivity) |
| 57 | + _ ≤ b := hb |
| 58 | + have h₁c : ‖e‖ ≤ exp (|log ‖e‖| + c⁻¹) := by |
| 59 | + calc ‖e‖ |
| 60 | + _ ≤ exp (log ‖e‖) := le_exp_log ‖e‖ |
| 61 | + _ ≤ exp (|log ‖e‖| + c⁻¹) := |
| 62 | + exp_monotone (le_add_of_le_of_nonneg (le_abs_self _) (inv_pos.2 hc).le) |
| 63 | + rw [← inv_mul_le_iff₀ hc, mul_one, abs_of_nonneg (logCounting_nonneg |
| 64 | + (single_pos.2 Int.one_pos).le h₁b)] |
| 65 | + calc c⁻¹ |
| 66 | + _ ≤ logCounting (single e 1) (exp (|log ‖e‖| + c⁻¹)) := by |
| 67 | + simp [logCounting_single_eq_log_sub_const h₁c, le_sub_iff_add_le', le_abs_self (log ‖e‖)] |
| 68 | + _ ≤ logCounting (single e 1) b := by |
| 69 | + apply logCounting_mono (single_pos.2 Int.one_pos).le (mem_Ioi.2 (exp_pos _)) _ hb |
| 70 | + simpa [mem_Ioi] using one_pos.trans_le h₁b |
| 71 | + |
| 72 | +/-- |
| 73 | +A non-negative function with locally finite support is zero if and only if its logarithmic counting |
| 74 | +functions is asymptotically bounded. |
| 75 | +-/ |
| 76 | +lemma zero_iff_logCounting_bounded [ProperSpace E] |
| 77 | + {D : locallyFinsuppWithin (univ : Set E) ℤ} (h : 0 ≤ D) : |
| 78 | + D = 0 ↔ logCounting D =O[atTop] (1 : ℝ → ℝ) := by |
| 79 | + classical |
| 80 | + refine ⟨fun h₂ ↦ by simp [isBigO_of_le' (c := 0), h₂], ?_⟩ |
| 81 | + contrapose |
| 82 | + intro h₁ |
| 83 | + obtain ⟨e, he⟩ := exists_single_le_pos (lt_of_le_of_ne h (h₁ ·.symm)) |
| 84 | + rw [isBigO_iff''] |
| 85 | + push_neg |
| 86 | + intro a ha |
| 87 | + simp only [Pi.one_apply, norm_eq_abs, frequently_atTop, abs_one] |
| 88 | + intro b |
| 89 | + obtain ⟨c, hc⟩ := eventually_atTop.1 |
| 90 | + (isLittleO_iff.1 (one_isLittleO_logCounting_single (e := e)) ha) |
| 91 | + let ℓ := 1 + max ‖e‖ (max |b| |c|) |
| 92 | + have h₁ℓ : c ≤ ℓ := by grind |
| 93 | + have h₂ℓ : 1 ≤ ℓ := by simp [ℓ] |
| 94 | + use 1 + ℓ, (show b ≤ 1 + ℓ by grind) |
| 95 | + calc 1 |
| 96 | + _ ≤ (a * |logCounting (single e 1) ℓ|) := by simpa [h₁ℓ] using hc ℓ |
| 97 | + _ ≤ (a * |logCounting D ℓ|) := by |
| 98 | + gcongr |
| 99 | + · apply logCounting_nonneg (single_pos.2 Int.one_pos).le h₂ℓ |
| 100 | + · apply logCounting_le he h₂ℓ |
| 101 | + _ < a * |logCounting D (1 + ℓ)| := by |
| 102 | + gcongr 2 |
| 103 | + rw [abs_of_nonneg (logCounting_nonneg h h₂ℓ), |
| 104 | + abs_of_nonneg (logCounting_nonneg h (by grind))] |
| 105 | + apply logCounting_strictMono he <;> grind |
| 106 | + |
| 107 | +end Function.locallyFinsuppWithin |
| 108 | + |
| 109 | +namespace ValueDistribution |
| 110 | + |
| 111 | +variable |
| 112 | + {𝕜 : Type*} [NontriviallyNormedField 𝕜] [ProperSpace 𝕜] |
| 113 | + {E : Type*} [NormedAddCommGroup E] [NormedSpace 𝕜 E] |
| 114 | + |
| 115 | +/-! |
| 116 | +## Logarithmic Counting Functions for the Poles of a Meromorphic Function |
| 117 | +-/ |
| 118 | + |
| 119 | +/-- |
| 120 | +A meromorphic function has only removable singularities if and only if the logarithmic counting |
| 121 | +function for its pole divisor is asymptotically bounded. |
| 122 | +-/ |
| 123 | +theorem logCounting_isBigO_one_iff_analyticOnNhd {f : 𝕜 → E} (h : Meromorphic f) : |
| 124 | + logCounting f ⊤ =O[atTop] (1 : ℝ → ℝ) ↔ AnalyticOnNhd 𝕜 (toMeromorphicNFOn f univ) univ := by |
| 125 | + simp only [logCounting, reduceDIte] |
| 126 | + rw [← Function.locallyFinsuppWithin.zero_iff_logCounting_bounded (negPart_nonneg _)] |
| 127 | + constructor |
| 128 | + · intro h₁f z hz |
| 129 | + apply (meromorphicNFOn_toMeromorphicNFOn f univ |
| 130 | + trivial).meromorphicOrderAt_nonneg_iff_analyticAt.1 |
| 131 | + rw [meromorphicOrderAt_toMeromorphicNFOn h.meromorphicOn (by trivial), ← WithTop.untop₀_nonneg, |
| 132 | + ← h.meromorphicOn.divisor_apply (by trivial), ← negPart_eq_zero, |
| 133 | + ← locallyFinsuppWithin.negPart_apply] |
| 134 | + aesop |
| 135 | + · intro h₁f |
| 136 | + rwa [negPart_eq_zero, ← h.meromorphicOn.divisor_of_toMeromorphicNFOn, |
| 137 | + (meromorphicNFOn_toMeromorphicNFOn _ _).divisor_nonneg_iff_analyticOnNhd] |
| 138 | + |
| 139 | +end ValueDistribution |
0 commit comments