Skip to content

Commit 8b7f7b6

Browse files
yuanyi-350Bergschaf
authored andcommitted
refactor(Analysis): golf Mathlib/Analysis/Complex/ValueDistribution/LogCounting/Asymptotic (leanprover-community#39171)
- shortens `one_isLittleO_logCounting_single` by deriving it from a theta estimate for `log r - log ‖e‖` - shortens `logCounting_isBigO_one_iff_analyticOnNhd` by reusing `divisor_nonneg_iff_analyticOnNhd` directly Extracted from leanprover-community#37968 [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/)
1 parent 756efa1 commit 8b7f7b6

1 file changed

Lines changed: 10 additions & 34 deletions

File tree

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

Lines changed: 10 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -46,28 +46,13 @@ is little o of the logarithmic counting function attached to `single e`.
4646
-/
4747
lemma one_isLittleO_logCounting_single [DecidableEq E] [ProperSpace E] {e : E} :
4848
(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
49+
have hΘ : (fun r ↦ log r - log ‖e‖) =Θ[atTop] log :=
50+
(IsEquivalent.sub_isLittleO IsEquivalent.refl isLittleO_const_log_atTop).isTheta
51+
have h₁ : (1 : ℝ → ℝ) =o[atTop] fun r ↦ log r - log ‖e‖ :=
52+
(hΘ.isLittleO_congr_right).2 isLittleO_const_log_atTop
53+
refine h₁.congr' EventuallyEq.rfl ?_
54+
filter_upwards [eventually_ge_atTop ‖e‖] with r hr
55+
simp [logCounting_single_eq_log_sub_const hr]
7156

7257
/--
7358
A non-negative function with locally finite support is zero if and only if its logarithmic counting
@@ -123,17 +108,8 @@ function for its pole divisor is asymptotically bounded.
123108
theorem logCounting_isBigO_one_iff_analyticOnNhd {f : 𝕜 → E} (h : Meromorphic f) :
124109
logCounting f ⊤ =O[atTop] (1 : ℝ → ℝ) ↔ AnalyticOnNhd 𝕜 (toMeromorphicNFOn f univ) univ := by
125110
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]
111+
rw [← locallyFinsuppWithin.zero_iff_logCounting_bounded (negPart_nonneg _), negPart_eq_zero,
112+
← h.meromorphicOn.divisor_of_toMeromorphicNFOn,
113+
(meromorphicNFOn_toMeromorphicNFOn _ _).divisor_nonneg_iff_analyticOnNhd]
138114

139115
end ValueDistribution

0 commit comments

Comments
 (0)