@@ -47,15 +47,24 @@ open MeromorphicOn Metric Real Set
4747
4848namespace Function.locallyFinsuppWithin
4949
50+ variable {E : Type *} [NormedAddCommGroup E]
51+
5052/--
5153Shorthand notation for the restriction of a function with locally finite support within `Set.univ`
5254to the closed unit ball of radius `r`.
5355-/
54- noncomputable def toClosedBall {E : Type *} [NormedAddCommGroup E] (r : ℝ) :
56+ noncomputable def toClosedBall (r : ℝ) :
5557 locallyFinsuppWithin (univ : Set E) ℤ →+ locallyFinsuppWithin (closedBall (0 : E) |r|) ℤ := by
5658 apply restrictMonoidHom
5759 tauto
5860
61+ @[simp]
62+ lemma toClosedBall_eval_within {r : ℝ} {z : E} (f : locallyFinsuppWithin (univ : Set E) ℤ)
63+ (ha : z ∈ closedBall 0 |r|) :
64+ toClosedBall r f z = f z := by
65+ unfold toClosedBall
66+ simp_all [restrict_apply]
67+
5968/-!
6069## The Logarithmic Counting Function of a Function with Locally Finite Support
6170-/
@@ -104,6 +113,42 @@ Evaluation of the logarithmic counting function at zero yields zero.
104113 logCounting D 0 = 0 := by
105114 simp [logCounting]
106115
116+ /--
117+ For `1 ≤ r`, the counting function is non-negative.
118+ -/
119+ theorem logCounting_nonneg {E : Type *} [NormedAddCommGroup E] [ProperSpace E]
120+ {f : locallyFinsuppWithin (univ : Set E) ℤ} {r : ℝ} (h : 0 ≤ f) (hr : 1 ≤ r) :
121+ 0 ≤ logCounting f r := by
122+ have h₃r : 0 < r := by linarith
123+ suffices ∀ z, 0 ≤ (((toClosedBall r) f) z) * log (r * ‖z‖⁻¹) from
124+ add_nonneg (finsum_nonneg this) <| mul_nonneg (by simpa using h 0 ) (log_nonneg hr)
125+ intro a
126+ by_cases h₁a : a = 0
127+ · simp_all
128+ by_cases h₂a : a ∈ closedBall 0 |r|
129+ · refine mul_nonneg ?_ <| log_nonneg ?_
130+ · simpa [h₂a] using h a
131+ · simpa [mul_comm r, one_le_inv_mul₀ (norm_pos_iff.mpr h₁a), abs_of_pos h₃r] using h₂a
132+ · simp [apply_eq_zero_of_notMem ((toClosedBall r) _) h₂a]
133+
134+ /--
135+ For `1 ≤ r`, the counting function respects the `≤` relation.
136+ -/
137+ theorem logCounting_le {E : Type *} [NormedAddCommGroup E] [ProperSpace E]
138+ {f₁ f₂ : locallyFinsuppWithin (univ : Set E) ℤ} {r : ℝ} (h : f₁ ≤ f₂) (hr : 1 ≤ r) :
139+ logCounting f₁ r ≤ logCounting f₂ r := by
140+ rw [← sub_nonneg] at h ⊢
141+ simpa using logCounting_nonneg h hr
142+
143+ /--
144+ The counting function respects the `≤` relation asymptotically.
145+ -/
146+ theorem logCounting_eventually_le {E : Type *} [NormedAddCommGroup E] [ProperSpace E]
147+ {f₁ f₂ : locallyFinsuppWithin (univ : Set E) ℤ} (h : f₁ ≤ f₂) :
148+ logCounting f₁ ≤ᶠ[Filter.atTop] logCounting f₂ := by
149+ filter_upwards [Filter.eventually_ge_atTop 1 ]
150+ exact fun _ hr ↦ logCounting_le h hr
151+
107152end Function.locallyFinsuppWithin
108153
109154/-!
@@ -212,4 +257,70 @@ function counting poles.
212257 logCounting (f - fun _ ↦ a₀) ⊤ = logCounting f ⊤ := by
213258 simpa [sub_eq_add_neg] using logCounting_add_const hf
214259
260+ /-!
261+ ## Behaviour under Arithmetic Operations
262+ -/
263+
264+ /--
265+ For `1 ≤ r`, the counting function counting zeros of `f * g` is less than or equal to the sum of the
266+ counting functions counting zeros of `f` and `g`, respectively.
267+
268+ Note: The statement proven here is found at the top of page 169 of [Lang: Introduction to Complex
269+ Hyperbolic Spaces](https://link.springer.com/book/10.1007/978-1-4757-1945-1) where it is written as
270+ an inequality between functions. This could be interpreted as claiming that the inequality holds for
271+ ALL values of `r`, which is not true. For a counterexample, take `f₁ : z → z` and `f₂ : z → z⁻¹`.
272+ Then,
273+
274+ - `logCounting f₁ 0 = log`
275+ - `logCounting f₂ 0 = 0`
276+ - `logCounting (f₁ * f₂) 0 = 0`
277+
278+ But `log r` is negative for small `r`.
279+ -/
280+ theorem logCounting_zero_mul_le {f₁ f₂ : 𝕜 → 𝕜} {r : ℝ} (hr : 1 ≤ r)
281+ (h₁f₁ : MeromorphicOn f₁ Set.univ) (h₂f₁ : ∀ z, meromorphicOrderAt f₁ z ≠ ⊤)
282+ (h₁f₂ : MeromorphicOn f₂ Set.univ) (h₂f₂ : ∀ z, meromorphicOrderAt f₂ z ≠ ⊤) :
283+ logCounting (f₁ * f₂) 0 r ≤ (logCounting f₁ 0 + logCounting f₂ 0 ) r := by
284+ simp only [logCounting, WithTop.zero_ne_top, reduceDIte, WithTop.untop₀_zero, sub_zero]
285+ rw [divisor_mul h₁f₁ h₁f₂ (fun z _ ↦ h₂f₁ z) (fun z _ ↦ h₂f₂ z),
286+ ← Function.locallyFinsuppWithin.logCounting.map_add]
287+ apply Function.locallyFinsuppWithin.logCounting_le _ hr
288+ apply Function.locallyFinsuppWithin.posPart_add
289+
290+ /--
291+ Asymptotically, the counting function counting zeros of `f * g` is less than or equal to the sum of
292+ the counting functions counting zeros of `f` and `g`, respectively.
293+ -/
294+ theorem logCounting_zero_mul_eventually_le {f₁ f₂ : 𝕜 → 𝕜}
295+ (h₁f₁ : MeromorphicOn f₁ Set.univ) (h₂f₁ : ∀ z, meromorphicOrderAt f₁ z ≠ ⊤)
296+ (h₁f₂ : MeromorphicOn f₂ Set.univ) (h₂f₂ : ∀ z, meromorphicOrderAt f₂ z ≠ ⊤) :
297+ logCounting (f₁ * f₂) 0 ≤ᶠ[Filter.atTop] logCounting f₁ 0 + logCounting f₂ 0 := by
298+ filter_upwards [Filter.eventually_ge_atTop 1 ]
299+ exact fun _ hr ↦ logCounting_zero_mul_le hr h₁f₁ h₂f₁ h₁f₂ h₂f₂
300+
301+ /--
302+ For `1 ≤ r`, the counting function counting poles of `f * g` is less than or equal to the sum of the
303+ counting functions counting poles of `f` and `g`, respectively.
304+ -/
305+ theorem logCounting_top_mul_le {f₁ f₂ : 𝕜 → 𝕜} {r : ℝ} (hr : 1 ≤ r)
306+ (h₁f₁ : MeromorphicOn f₁ Set.univ) (h₂f₁ : ∀ z, meromorphicOrderAt f₁ z ≠ ⊤)
307+ (h₁f₂ : MeromorphicOn f₂ Set.univ) (h₂f₂ : ∀ z, meromorphicOrderAt f₂ z ≠ ⊤) :
308+ logCounting (f₁ * f₂) ⊤ r ≤ (logCounting f₁ ⊤ + logCounting f₂ ⊤) r := by
309+ simp only [logCounting, reduceDIte]
310+ rw [divisor_mul h₁f₁ h₁f₂ (fun z _ ↦ h₂f₁ z) (fun z _ ↦ h₂f₂ z),
311+ ← Function.locallyFinsuppWithin.logCounting.map_add]
312+ apply Function.locallyFinsuppWithin.logCounting_le _ hr
313+ apply Function.locallyFinsuppWithin.negPart_add
314+
315+ /--
316+ Asymptotically, the counting function counting zeros of `f * g` is less than or equal to the sum of
317+ the counting functions counting zeros of `f` and `g`, respectively.
318+ -/
319+ theorem logCounting_top_mul_eventually_le {f₁ f₂ : 𝕜 → 𝕜}
320+ (h₁f₁ : MeromorphicOn f₁ Set.univ) (h₂f₁ : ∀ z, meromorphicOrderAt f₁ z ≠ ⊤)
321+ (h₁f₂ : MeromorphicOn f₂ Set.univ) (h₂f₂ : ∀ z, meromorphicOrderAt f₂ z ≠ ⊤) :
322+ logCounting (f₁ * f₂) ⊤ ≤ᶠ[Filter.atTop] logCounting f₁ ⊤ + logCounting f₂ ⊤ := by
323+ filter_upwards [Filter.eventually_ge_atTop 1 ]
324+ exact fun _ hr ↦ logCounting_top_mul_le hr h₁f₁ h₂f₁ h₁f₂ h₂f₂
325+
215326end ValueDistribution
0 commit comments