Skip to content

Commit eccf962

Browse files
committed
chore: improve notation in log counting function of Value Distribution Theory (leanprover-community#34250)
On a suggestion of @j-loreaux, improve notation by writing `locallyFinsupp E ℤ` instead of `locallyFinsuppWithin (Set.univ : Set E) ℤ` throughout `Mathlib/Analysis/Complex/ValueDistribution/LogCounting/Basic.lean`. Compactify some of the code in that file a little through trivial golfing. Downgrade `Function.locallyFinsupp` in `Mathlib/Topology/LocallyFinsupp.lean` from a definition to an abbreviation, in order to use existing API without the constant need for typecast.
1 parent a786f33 commit eccf962

2 files changed

Lines changed: 34 additions & 37 deletions

File tree

Mathlib/Analysis/Complex/ValueDistribution/LogCounting/Basic.lean

Lines changed: 33 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -51,16 +51,16 @@ namespace Function.locallyFinsuppWithin
5151
variable {E : Type*} [NormedAddCommGroup E]
5252

5353
/--
54-
Shorthand notation for the restriction of a function with locally finite support within `Set.univ`
55-
to the closed unit ball of radius `r`.
54+
Shorthand notation for the restriction of a function with locally finite support to the closed unit
55+
ball of radius `r`.
5656
-/
5757
noncomputable def toClosedBall (r : ℝ) :
58-
locallyFinsuppWithin (univ : Set E) ℤ →+ locallyFinsuppWithin (closedBall (0 : E) |r|) ℤ := by
58+
locallyFinsupp E ℤ →+ locallyFinsuppWithin (closedBall (0 : E) |r|) ℤ := by
5959
apply restrictMonoidHom
6060
tauto
6161

6262
@[simp]
63-
lemma toClosedBall_eval_within {r : ℝ} {z : E} (f : locallyFinsuppWithin (univ : Set E) ℤ)
63+
lemma toClosedBall_eval_within {r : ℝ} {z : E} (f : locallyFinsupp E ℤ)
6464
(ha : z ∈ closedBall 0 |r|) :
6565
toClosedBall r f z = f z := by
6666
unfold toClosedBall
@@ -72,7 +72,7 @@ lemma toClosedBall_divisor {r : ℝ} {f : ℂ → ℂ} (h : Meromorphic f) :
7272
simp_all [locallyFinsuppWithin.toClosedBall]
7373

7474
lemma toClosedBall_support_subset_closedBall {E : Type*} [NormedAddCommGroup E] {r : ℝ}
75-
(f : locallyFinsuppWithin (univ : Set E) ℤ) :
75+
(f : locallyFinsupp E ℤ) :
7676
(toClosedBall r f).support ⊆ closedBall 0 |r| := by
7777
simp_all [toClosedBall, restrict_apply]
7878

@@ -94,7 +94,7 @@ to the lemma `countingFunction_finsum_eq_finsum_add` in
9494
`Mathlib/Analysis/Complex/JensenFormula.lean` for a formal statement.
9595
-/
9696
noncomputable def logCounting {E : Type*} [NormedAddCommGroup E] [ProperSpace E] :
97-
locallyFinsuppWithin (univ : Set E) ℤ →+ (ℝ → ℝ) where
97+
locallyFinsupp E ℤ →+ (ℝ → ℝ) where
9898
toFun D := fun r ↦ ∑ᶠ z, D.toClosedBall r z * log (r * ‖z‖⁻¹) + (D 0) * log r
9999
map_zero' := by aesop
100100
map_add' D₁ D₂ := by
@@ -120,20 +120,20 @@ noncomputable def logCounting {E : Type*} [NormedAddCommGroup E] [ProperSpace E]
120120
Evaluation of the logarithmic counting function at zero yields zero.
121121
-/
122122
@[simp] lemma logCounting_eval_zero {E : Type*} [NormedAddCommGroup E] [ProperSpace E]
123-
(D : locallyFinsuppWithin (univ : Set E) ℤ) :
123+
(D : locallyFinsupp E ℤ) :
124124
logCounting D 0 = 0 := by
125125
simp [logCounting]
126126

127127
/--
128128
The logarithmic counting function is even.
129129
-/
130-
lemma logCounting_even [ProperSpace E] (D : locallyFinsuppWithin (univ : Set E) ℤ) :
130+
lemma logCounting_even [ProperSpace E] (D : locallyFinsupp E ℤ) :
131131
(logCounting D).Even := fun r ↦ by simp [logCounting, toClosedBall, restrict_apply]
132132

133133
/--
134134
The logarithmic counting function is monotonous.
135135
-/
136-
lemma logCounting_mono [ProperSpace E] {D : locallyFinsuppWithin (univ : Set E) ℤ} (hD : 0 ≤ D) :
136+
lemma logCounting_mono [ProperSpace E] {D : locallyFinsupp E ℤ} (hD : 0 ≤ D) :
137137
MonotoneOn (logCounting D) (Ioi 0) := by
138138
intro a ha b hb _
139139
simp_all only [mem_Ioi, logCounting, AddMonoidHom.coe_mk, ZeroHom.coe_mk]
@@ -172,7 +172,7 @@ lemma logCounting_mono [ProperSpace E] {D : locallyFinsuppWithin (univ : Set E)
172172
For `1 ≤ r`, the logarithmic counting function is non-negative.
173173
-/
174174
theorem logCounting_nonneg {E : Type*} [NormedAddCommGroup E] [ProperSpace E]
175-
{f : locallyFinsuppWithin (univ : Set E) ℤ} {r : ℝ} (h : 0 ≤ f) (hr : 1 ≤ r) :
175+
{f : locallyFinsupp E ℤ} {r : ℝ} (h : 0 ≤ f) (hr : 1 ≤ r) :
176176
0 ≤ logCounting f r := by
177177
have h₃r : 0 < r := by linarith
178178
suffices ∀ z, 0 ≤ toClosedBall r f z * log (r * ‖z‖⁻¹) from
@@ -190,7 +190,7 @@ theorem logCounting_nonneg {E : Type*} [NormedAddCommGroup E] [ProperSpace E]
190190
For `1 ≤ r`, the logarithmic counting function respects the `≤` relation.
191191
-/
192192
theorem logCounting_le {E : Type*} [NormedAddCommGroup E] [ProperSpace E]
193-
{f₁ f₂ : locallyFinsuppWithin (univ : Set E) ℤ} {r : ℝ} (h : f₁ ≤ f₂) (hr : 1 ≤ r) :
193+
{f₁ f₂ : locallyFinsupp E ℤ} {r : ℝ} (h : f₁ ≤ f₂) (hr : 1 ≤ r) :
194194
logCounting f₁ r ≤ logCounting f₂ r := by
195195
rw [← sub_nonneg] at h ⊢
196196
simpa using logCounting_nonneg h hr
@@ -199,10 +199,9 @@ theorem logCounting_le {E : Type*} [NormedAddCommGroup E] [ProperSpace E]
199199
The logarithmic counting function respects the `≤` relation asymptotically.
200200
-/
201201
theorem logCounting_eventuallyLE {E : Type*} [NormedAddCommGroup E] [ProperSpace E]
202-
{f₁ f₂ : locallyFinsuppWithin (univ : Set E) ℤ} (h : f₁ ≤ f₂) :
203-
logCounting f₁ ≤ᶠ[Filter.atTop] logCounting f₂ := by
204-
filter_upwards [Filter.eventually_ge_atTop 1]
205-
exact fun _ hr ↦ logCounting_le h hr
202+
{f₁ f₂ : locallyFinsupp E ℤ} (h : f₁ ≤ f₂) :
203+
logCounting f₁ ≤ᶠ[atTop] logCounting f₂ := by
204+
filter_upwards [eventually_ge_atTop 1] using fun _ hr ↦ logCounting_le h hr
206205

207206
@[deprecated (since := "2025-12-11")] alias logCounting_eventually_le := logCounting_eventuallyLE
208207

@@ -230,7 +229,7 @@ taking multiplicities into account. In the special case where `a = ⊤`, it cou
230229
noncomputable def logCounting : ℝ → ℝ := by
231230
by_cases h : a = ⊤
232231
· exact (divisor f univ)⁻.logCounting
233-
· exact (divisor (fun z ↦ f z - a.untop₀) univ)⁺.logCounting
232+
· exact (divisor (f · - a.untop₀) univ)⁺.logCounting
234233

235234
/--
236235
Relation between `ValueDistribution.logCounting` and `locallyFinsuppWithin.logCounting`.
@@ -244,7 +243,7 @@ For finite values `a₀`, the logarithmic counting function `logCounting f a₀`
244243
counting function for the zeros of `f - a₀`.
245244
-/
246245
lemma logCounting_coe :
247-
logCounting f a₀ = (divisor (fun z ↦ f z - a₀) univ)⁺.logCounting := by
246+
logCounting f a₀ = (divisor (f · - a₀) univ)⁺.logCounting := by
248247
simp [logCounting]
249248

250249
/--
@@ -322,16 +321,16 @@ theorem logCounting_nonneg {r : ℝ} {f : 𝕜 → E} {e : WithTop E} (hr : 1
322321
0 ≤ logCounting f e r := by
323322
by_cases h : e = ⊤
324323
· simp [logCounting, h, locallyFinsuppWithin.logCounting_nonneg
325-
(negPart_nonneg (MeromorphicOn.divisor f univ)) hr]
324+
(negPart_nonneg (divisor f univ)) hr]
326325
· simp [logCounting, h, locallyFinsuppWithin.logCounting_nonneg
327-
(posPart_nonneg (MeromorphicOn.divisor (f · - e.untop₀) univ)) hr]
326+
(posPart_nonneg (divisor (f · - e.untop₀) univ)) hr]
328327

329328
/--
330329
The logarithmic counting function is asymptotically non-negative.
331330
-/
332331
theorem logCounting_eventually_nonneg {f : 𝕜 → E} {e : WithTop E} :
333-
0 ≤ᶠ[Filter.atTop] logCounting f e := by
334-
filter_upwards [Filter.eventually_ge_atTop 1] using fun _ hr ↦ by simp [logCounting_nonneg hr]
332+
0 ≤ᶠ[atTop] logCounting f e := by
333+
filter_upwards [eventually_ge_atTop 1] using fun _ hr ↦ by simp [logCounting_nonneg hr]
335334

336335
/-!
337336
## Elementary Properties of the Logarithmic Counting Function
@@ -407,9 +406,8 @@ the sum of the logarithmic counting functions for the poles of `f` and `g`, resp
407406
-/
408407
theorem logCounting_add_top_eventuallyLE {f₁ f₂ : 𝕜 → E} (h₁f₁ : Meromorphic f₁)
409408
(h₁f₂ : Meromorphic f₂) :
410-
logCounting (f₁ + f₂) ⊤ ≤ᶠ[Filter.atTop] logCounting f₁ ⊤ + logCounting f₂ ⊤ := by
411-
filter_upwards [Filter.eventually_ge_atTop 1]
412-
exact fun _ hr ↦ logCounting_add_top_le h₁f₁ h₁f₂ hr
409+
logCounting (f₁ + f₂) ⊤ ≤ᶠ[atTop] logCounting f₁ ⊤ + logCounting f₂ ⊤ := by
410+
filter_upwards [eventually_ge_atTop 1] using fun _ hr ↦ logCounting_add_top_le h₁f₁ h₁f₂ hr
413411

414412
/--
415413
For `1 ≤ r`, the logarithmic counting function for the poles of a sum `∑ a ∈ s, f a` is less than or
@@ -436,9 +434,8 @@ or equal to the sum of the logarithmic counting functions for the poles of the `
436434
-/
437435
theorem logCounting_sum_top_eventuallyLE {α : Type*} (s : Finset α) (f : α → 𝕜 → E)
438436
(h₁f : ∀ a, Meromorphic (f a)) :
439-
logCounting (∑ a ∈ s, f a) ⊤ ≤ᶠ[Filter.atTop] ∑ a ∈ s, (logCounting (f a) ⊤) := by
440-
filter_upwards [Filter.eventually_ge_atTop 1]
441-
exact fun _ hr ↦ logCounting_sum_top_le s f h₁f hr
437+
logCounting (∑ a ∈ s, f a) ⊤ ≤ᶠ[atTop] ∑ a ∈ s, (logCounting (f a) ⊤) := by
438+
filter_upwards [eventually_ge_atTop 1] using fun _ hr ↦ logCounting_sum_top_le s f h₁f hr
442439

443440
/--
444441
For `1 ≤ r`, the logarithmis counting function for the zeros of `f * g` is less than or equal to the
@@ -475,9 +472,9 @@ the sum of the logarithmic counting functions for the zeros of `f` and `g`, resp
475472
theorem logCounting_mul_zero_eventuallyLE {f₁ f₂ : 𝕜 → 𝕜}
476473
(h₁f₁ : Meromorphic f₁) (h₂f₁ : ∀ z, meromorphicOrderAt f₁ z ≠ ⊤)
477474
(h₁f₂ : Meromorphic f₂) (h₂f₂ : ∀ z, meromorphicOrderAt f₂ z ≠ ⊤) :
478-
logCounting (f₁ * f₂) 0 ≤ᶠ[Filter.atTop] logCounting f₁ 0 + logCounting f₂ 0 := by
479-
filter_upwards [Filter.eventually_ge_atTop 1]
480-
exact fun _ hr ↦ logCounting_mul_zero_le hr h₁f₁ h₂f₁ h₁f₂ h₂f₂
475+
logCounting (f₁ * f₂) 0 ≤ᶠ[atTop] logCounting f₁ 0 + logCounting f₂ 0 := by
476+
filter_upwards [eventually_ge_atTop 1] using
477+
fun _ hr ↦ logCounting_mul_zero_le hr h₁f₁ h₂f₁ h₁f₂ h₂f₂
481478

482479
@[deprecated (since := "2025-12-11")]
483480
alias logCounting_zero_mul_eventually_le := logCounting_mul_zero_eventuallyLE
@@ -505,9 +502,9 @@ the sum of the logarithmic counting functions for the zeros of `f` and `g`, resp
505502
theorem logCounting_mul_top_eventuallyLE {f₁ f₂ : 𝕜 → 𝕜}
506503
(h₁f₁ : Meromorphic f₁) (h₂f₁ : ∀ z, meromorphicOrderAt f₁ z ≠ ⊤)
507504
(h₁f₂ : Meromorphic f₂) (h₂f₂ : ∀ z, meromorphicOrderAt f₂ z ≠ ⊤) :
508-
logCounting (f₁ * f₂) ⊤ ≤ᶠ[Filter.atTop] logCounting f₁ ⊤ + logCounting f₂ ⊤ := by
509-
filter_upwards [Filter.eventually_ge_atTop 1]
510-
exact fun _ hr ↦ logCounting_mul_top_le hr h₁f₁ h₂f₁ h₁f₂ h₂f₂
505+
logCounting (f₁ * f₂) ⊤ ≤ᶠ[atTop] logCounting f₁ ⊤ + logCounting f₂ ⊤ := by
506+
filter_upwards [eventually_ge_atTop 1] using
507+
fun _ hr ↦ logCounting_mul_top_le hr h₁f₁ h₂f₁ h₁f₂ h₂f₂
511508

512509
@[deprecated (since := "2025-12-11")]
513510
alias logCounting_top_mul_eventually_le := logCounting_mul_top_eventuallyLE
@@ -546,11 +543,11 @@ This is a reformulation of Jensen's formula of complex analysis. See
546543
-/
547544
theorem Function.locallyFinsuppWithin.logCounting_divisor_eq_circleAverage_sub_const {R : ℝ}
548545
{f : ℂ → ℂ} (h : Meromorphic f) (hR : R ≠ 0) :
549-
locallyFinsuppWithin.logCounting (divisor f ⊤) R =
546+
logCounting (divisor f ⊤) R =
550547
circleAverage (log ‖f ·‖) 0 R - log ‖meromorphicTrailingCoeffAt f 0‖ := by
551548
have h₁f : MeromorphicOn f (closedBall 0 |R|) := by tauto
552-
simp only [MeromorphicOn.circleAverage_log_norm hR h₁f, locallyFinsuppWithin.logCounting,
553-
top_eq_univ, AddMonoidHom.coe_mk, ZeroHom.coe_mk, zero_sub, norm_neg, add_sub_cancel_right]
549+
simp only [MeromorphicOn.circleAverage_log_norm hR h₁f, logCounting, top_eq_univ,
550+
AddMonoidHom.coe_mk, ZeroHom.coe_mk, zero_sub, norm_neg, add_sub_cancel_right]
554551
congr 1
555552
· simp_all
556553
· rw [divisor_apply, divisor_apply]

Mathlib/Topology/LocallyFinsupp.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ variable (X Y) in
5555
A function with locally finite support is a function with locally finite support within
5656
`⊤ : Set X`.
5757
-/
58-
def Function.locallyFinsupp [Zero Y] := locallyFinsuppWithin ( : Set X) Y
58+
abbrev Function.locallyFinsupp [Zero Y] := locallyFinsuppWithin (Set.univ : Set X) Y
5959

6060
/--
6161
For T1 spaces, the condition `supportLocallyFiniteWithinDomain'` is equivalent to saying that the

0 commit comments

Comments
 (0)