nevanlinna/Nevanlinna/firstMain.lean
Stefan Kebekus 08e963e801 Working…
2025-01-03 14:07:53 +01:00

408 lines
10 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import Mathlib.MeasureTheory.Integral.CircleIntegral
import Nevanlinna.divisor
import Nevanlinna.meromorphicOn_divisor
import Nevanlinna.meromorphicOn_integrability
import Nevanlinna.stronglyMeromorphicOn
import Nevanlinna.stronglyMeromorphic_JensenFormula
open Real
-- Lang p. 164
theorem MeromorphicOn.restrict
{f : }
(h₁f : MeromorphicOn f )
(r : ) :
MeromorphicOn f (Metric.closedBall 0 r) := by
exact fun x a => h₁f x trivial
theorem MeromorphicOn.restrict_inv
{f : }
(h₁f : MeromorphicOn f )
(r : ) :
h₁f.inv.restrict r = (h₁f.restrict r).inv := by
funext x
simp
noncomputable def MeromorphicOn.N_zero
{f : }
(hf : MeromorphicOn f ) :
:=
fun r ↦ ∑ᶠ z, (max 0 ((hf.restrict |r|).divisor z)) * log (r * ‖z‖⁻¹)
noncomputable def MeromorphicOn.N_infty
{f : }
(hf : MeromorphicOn f ) :
:=
fun r ↦ ∑ᶠ z, (max 0 (-((hf.restrict |r|).divisor z))) * log (r * ‖z‖⁻¹)
theorem Nevanlinna_counting₁₁
{f : }
(hf : MeromorphicOn f )
(a : ) :
(hf.add (MeromorphicOn.const a)).N_infty = hf.N_infty := by
funext r
unfold MeromorphicOn.N_infty
let A := (hf.restrict |r|).divisor.finiteSupport (isCompact_closedBall 0 |r|)
repeat
rw [finsum_eq_sum_of_support_subset (s := A.toFinset)]
apply Finset.sum_congr rfl
intro x hx; simp at hx
congr 2
by_cases h : 0 ≤ (hf.restrict |r|).divisor x
· simp [h]
let A := (hf.restrict |r|).divisor_add_const₁ a h
exact A
· simp at h
have h' : 0 ≤ -((hf.restrict |r|).divisor x) := by
apply Int.le_neg_of_le_neg
simp
exact Int.le_of_lt h
simp [h']
clear h'
have A := (hf.restrict |r|).divisor_add_const₂ a h
have A' : 0 ≤ -((MeromorphicOn.add (MeromorphicOn.restrict hf |r|) (MeromorphicOn.const a)).divisor x) := by
apply Int.le_neg_of_le_neg
simp
exact Int.le_of_lt A
simp [A']
clear A A'
exact (hf.restrict |r|).divisor_add_const₃ a h
--
intro x
contrapose
simp
intro hx
rw [hx]
tauto
--
intro x
contrapose
simp
intro hx
have : 0 ≤ (hf.restrict |r|).divisor x := by
rw [hx]
have G := (hf.restrict |r|).divisor_add_const₁ a this
clear this
simp [G]
theorem Nevanlinna_counting'₁₁
{f : }
(hf : MeromorphicOn f )
(a : ) :
(hf.sub (MeromorphicOn.const a)).N_infty = hf.N_infty := by
have : (f - fun x => a) = (f + fun x => -a) := by
funext x
simp; ring
have : (hf.sub (MeromorphicOn.const a)).N_infty = (hf.add (MeromorphicOn.const (-a))).N_infty := by
simp
rw [this]
exact Nevanlinna_counting₁₁ hf (-a)
theorem Nevanlinna_counting₀
{f : }
(hf : MeromorphicOn f ) :
hf.inv.N_infty = hf.N_zero := by
funext r
unfold MeromorphicOn.N_zero MeromorphicOn.N_infty
let A := (hf.restrict |r|).divisor.finiteSupport (isCompact_closedBall 0 |r|)
repeat
rw [finsum_eq_sum_of_support_subset (s := A.toFinset)]
apply Finset.sum_congr rfl
intro x hx
congr
let B := hf.restrict_inv |r|
rw [MeromorphicOn.divisor_inv]
simp
--
exact fun x a => hf x trivial
--
intro x
contrapose
simp
intro hx
rw [hx]
tauto
--
intro x
contrapose
simp
intro hx h₁x
rw [MeromorphicOn.divisor_inv (hf.restrict |r|)] at h₁x
simp at h₁x
rw [hx] at h₁x
tauto
theorem Nevanlinna_counting
{f : }
(hf : MeromorphicOn f ) :
hf.N_zero - hf.N_infty = fun r ↦ ∑ᶠ z, ((hf.restrict |r|).divisor z) * log (r * ‖z‖⁻¹) := by
funext r
simp only [Pi.sub_apply]
unfold MeromorphicOn.N_zero MeromorphicOn.N_infty
let A := (hf.restrict |r|).divisor.finiteSupport (isCompact_closedBall 0 |r|)
repeat
rw [finsum_eq_sum_of_support_subset (s := A.toFinset)]
rw [← Finset.sum_sub_distrib]
simp_rw [← sub_mul]
congr
funext x
congr
by_cases h : 0 ≤ (hf.restrict |r|).divisor x
· simp [h]
· have h' : 0 ≤ -((hf.restrict |r|).divisor x) := by
simp at h
apply Int.le_neg_of_le_neg
simp
exact Int.le_of_lt h
simp at h
simp [h']
linarith
--
repeat
intro x
contrapose
simp
intro hx
rw [hx]
tauto
--
noncomputable def MeromorphicOn.m_infty
{f : }
(_ : MeromorphicOn f ) :
:=
fun r ↦ (2 * π)⁻¹ * ∫ x in (0)..(2 * π), logpos ‖f (circleMap 0 r x)‖
theorem Nevanlinna_proximity
{f : }
{r : }
(h₁f : MeromorphicOn f ) :
(2 * π)⁻¹ * ∫ x in (0)..(2 * π), log ‖f (circleMap 0 r x)‖ = (h₁f.m_infty r) - (h₁f.inv.m_infty r) := by
unfold MeromorphicOn.m_infty
rw [← mul_sub]; congr
rw [← intervalIntegral.integral_sub]; congr
funext x
simp_rw [loglogpos]; congr
exact Eq.symm (IsAbsoluteValue.abv_inv Norm.norm (f (circleMap 0 r x)))
--
apply MeromorphicOn.integrable_logpos_abs_f
intro z hx
exact h₁f z trivial
--
apply MeromorphicOn.integrable_logpos_abs_f
exact MeromorphicOn.inv_iff.mpr fun x a => h₁f x trivial
noncomputable def MeromorphicOn.T_infty
{f : }
(hf : MeromorphicOn f ) :
:=
hf.m_infty + hf.N_infty
theorem Nevanlinna_firstMain₁
{f : }
(h₁f : MeromorphicOn f )
(h₂f : StronglyMeromorphicAt f 0)
(h₃f : f 0 ≠ 0) :
(fun _ ↦ log ‖f 0‖) + h₁f.inv.T_infty = h₁f.T_infty := by
rw [add_eq_of_eq_sub]
unfold MeromorphicOn.T_infty
have {A B C D : } : A + B - (C + D) = A - C - (D - B) := by
ring
rw [this]
clear this
rw [Nevanlinna_counting₀ h₁f]
rw [Nevanlinna_counting h₁f]
funext r
simp
rw [← Nevanlinna_proximity h₁f]
by_cases h₁r : r = 0
rw [h₁r]
simp
have : π⁻¹ * 2⁻¹ * (2 * π * log (Complex.abs (f 0))) = (π⁻¹ * (2⁻¹ * 2) * π) * log (Complex.abs (f 0)) := by
ring
rw [this]
clear this
simp [pi_ne_zero]
by_cases hr : 0 < r
let A := jensen hr f (h₁f.restrict r) h₂f h₃f
simp at A
rw [A]
clear A
simp
have {A B : } : -A + B = B - A := by ring
rw [this]
have : |r| = r := by
rw [← abs_of_pos hr]
simp
rw [this]
-- case 0 < -r
have h₂r : 0 < -r := by
simp [h₁r, hr]
by_contra hCon
-- Assume ¬(r < 0), which means r >= 0
push_neg at hCon
-- Now h is r ≥ 0, so we split into cases
rcases lt_or_eq_of_le hCon with h|h
· tauto
· tauto
let A := jensen h₂r f (h₁f.restrict (-r)) h₂f h₃f
simp at A
rw [A]
clear A
simp
have {A B : } : -A + B = B - A := by ring
rw [this]
congr 1
congr 1
let A := integrabl_congr_negRadius (f := (fun z ↦ log (Complex.abs (f z)))) (r := r)
rw [A]
have : |r| = -r := by
rw [← abs_of_pos h₂r]
simp
rw [this]
theorem Nevanlinna_firstMain₂
{f : }
{a : }
{r : }
(h₁f : MeromorphicOn f ) :
|(h₁f.T_infty r) - ((h₁f.sub (MeromorphicOn.const a)).T_infty r)| ≤ logpos ‖a‖ + log 2 := by
-- See Lang, p. 168
have : (h₁f.T_infty r) - ((h₁f.sub (MeromorphicOn.const a)).T_infty r) = (h₁f.m_infty r) - ((h₁f.sub (MeromorphicOn.const a)).m_infty r) := by
unfold MeromorphicOn.T_infty
rw [Nevanlinna_counting'₁₁ h₁f a]
simp
rw [this]
clear this
unfold MeromorphicOn.m_infty
rw [←mul_sub]
rw [←intervalIntegral.integral_sub]
let g := f - (fun _ ↦ a)
have t₀₀ (x : ) : log⁺ ‖f (circleMap 0 r x)‖ ≤ log⁺ ‖g (circleMap 0 r x)‖ + log⁺ ‖a‖ + log 2 := by
unfold g
simp only [Pi.sub_apply]
calc log⁺ ‖f (circleMap 0 r x)‖
_ = log⁺ ‖g (circleMap 0 r x) + a‖ := by
unfold g
simp
_ ≤ log⁺ (‖g (circleMap 0 r x)‖ + ‖a‖) := by
apply monoOn_logpos
refine Set.mem_Ici.mpr ?_
apply norm_nonneg
refine Set.mem_Ici.mpr ?_
apply add_nonneg
apply norm_nonneg
apply norm_nonneg
--
apply norm_add_le
_ ≤ log⁺ ‖g (circleMap 0 r x)‖ + log⁺ ‖a‖ + log 2 := by
apply logpos_add_le_add_logpos_add_log2
have t₁₀ (x : ) : log⁺ ‖f (circleMap 0 r x)‖ - log⁺ ‖g (circleMap 0 r x)‖ ≤ log⁺ ‖a‖ + log 2 := by
rw [sub_le_iff_le_add]
nth_rw 1 [add_comm]
rw [←add_assoc]
apply t₀₀ x
clear t₀₀
have t₀₁ (x : ) : log⁺ ‖g (circleMap 0 r x)‖ ≤ log⁺ ‖f (circleMap 0 r x)‖ + log⁺ ‖a‖ + log 2 := by
unfold g
simp only [Pi.sub_apply]
calc log⁺ ‖g (circleMap 0 r x)‖
_ = log⁺ ‖f (circleMap 0 r x) - a‖ := by
unfold g
simp
_ ≤ log⁺ (‖f (circleMap 0 r x)‖ + ‖a‖) := by
apply monoOn_logpos
refine Set.mem_Ici.mpr ?_
apply norm_nonneg
refine Set.mem_Ici.mpr ?_
apply add_nonneg
apply norm_nonneg
apply norm_nonneg
--
apply norm_sub_le
_ ≤ log⁺ ‖f (circleMap 0 r x)‖ + log⁺ ‖a‖ + log 2 := by
apply logpos_add_le_add_logpos_add_log2
have t₁₁ (x : ) : log⁺ ‖g (circleMap 0 r x)‖ - log⁺ ‖f (circleMap 0 r x)‖ ≤ log⁺ ‖a‖ + log 2 := by
rw [sub_le_iff_le_add]
nth_rw 1 [add_comm]
rw [←add_assoc]
apply t₀₁ x
clear t₀₁
have t₂ {x : } : ‖log⁺ ‖f (circleMap 0 r x)‖ - log⁺ ‖g (circleMap 0 r x)‖‖ ≤ log⁺ ‖a‖ + log 2 := by
by_cases h : 0 ≤ log⁺ ‖f (circleMap 0 r x)‖ - log⁺ ‖g (circleMap 0 r x)‖
· rw [norm_of_nonneg h]
exact t₁₀ x
· rw [norm_of_nonpos (by linarith)]
rw [neg_sub]
exact t₁₁ x
clear t₁₀ t₁₁
have : ‖∫ (x : ) in (0)..(2 * π), log⁺ ‖f (circleMap 0 r x)‖ - log⁺ ‖g (circleMap 0 r x)‖‖ ≤ (log⁺ ‖a‖ + log 2) * |2 * π - 0| := by
apply intervalIntegral.norm_integral_le_of_norm_le_const
intro x hx
exact t₂
clear t₂
simp only [norm_eq_abs, sub_zero] at this
rw [abs_mul]
calc |(2 * π)⁻¹| * |∫ (x : ) in (0)..(2 * π), log⁺ ‖f (circleMap 0 r x)‖ - log⁺ ‖g (circleMap 0 r x)‖|
_ = |(2 * π)⁻¹| * ‖∫ (x : ) in (0)..(2 * π), log⁺ ‖f (circleMap 0 r x)‖ - log⁺ ‖g (circleMap 0 r x)‖‖ := by
sorry
_ ≤ |(2 * π)⁻¹| * ((log⁺ ‖a‖ + log 2) * |2 * π|) := by
apply?
sorry
_ = log⁺ ‖a‖ + log 2 := by
simp [pi_ne_zero]
--
apply MeromorphicOn.integrable_logpos_abs_f
exact fun x a => h₁f x trivial
--
apply MeromorphicOn.integrable_logpos_abs_f
apply MeromorphicOn.sub
exact fun x a => h₁f x trivial
apply MeromorphicOn.const a