nevanlinna/Nevanlinna/meromorphicOn_integrability.lean

179 lines
6.5 KiB
Plaintext
Raw Normal View History

2024-12-11 12:36:44 +01:00
import Mathlib.Analysis.Analytic.Meromorphic
2024-12-13 16:03:00 +01:00
import Mathlib.MeasureTheory.Integral.CircleIntegral
import Mathlib.MeasureTheory.Integral.IntervalIntegral
2024-12-11 12:36:44 +01:00
import Nevanlinna.analyticAt
import Nevanlinna.divisor
2024-12-19 16:10:51 +01:00
import Nevanlinna.intervalIntegrability
import Nevanlinna.logpos
2024-12-11 12:36:44 +01:00
import Nevanlinna.meromorphicAt
import Nevanlinna.meromorphicOn_divisor
2024-12-19 16:10:51 +01:00
import Nevanlinna.specialFunctions_CircleIntegral_affine
2024-12-11 12:36:44 +01:00
import Nevanlinna.stronglyMeromorphicOn
2024-12-16 17:17:43 +01:00
import Nevanlinna.stronglyMeromorphicOn_eliminate
2024-12-11 12:36:44 +01:00
import Nevanlinna.mathlibAddOn
open scoped Interval Topology
open Real Filter MeasureTheory intervalIntegral
2024-12-19 21:24:13 +01:00
theorem MeromorphicOn.integrable_log_abs_f₀
2024-12-16 17:17:43 +01:00
{f : }
{r : }
2024-12-19 21:24:13 +01:00
-- WARNING: Not optimal. This needs to go
2024-12-16 17:17:43 +01:00
(hr : 0 < r)
2024-12-19 16:10:51 +01:00
-- WARNING: Not optimal. It suffices to be meromorphic on the Sphere
(h₁f : MeromorphicOn f (Metric.closedBall (0 : ) r)) :
2024-12-16 17:17:43 +01:00
IntervalIntegrable (fun z ↦ log ‖f (circleMap 0 r z)‖) MeasureTheory.volume 0 (2 * π) := by
2024-12-19 16:10:51 +01:00
by_cases h₂f : ∃ u : (Metric.closedBall (0 : ) r), (h₁f u u.2).order ≠
· have h₁U : IsCompact (Metric.closedBall (0 : ) r) := isCompact_closedBall 0 r
2024-12-19 16:10:51 +01:00
have h₂U : IsConnected (Metric.closedBall (0 : ) r) := by
constructor
· exact Metric.nonempty_closedBall.mpr (le_of_lt hr)
· exact (convex_closedBall (0 : ) r).isPreconnected
2024-12-19 16:10:51 +01:00
-- This is where we use 'ball' instead of sphere. However, better
-- results should make this assumption unnecessary.
have h₃U : interior (Metric.closedBall (0 : ) r) ≠ ∅ := by
rw [interior_closedBall, ← Set.nonempty_iff_ne_empty]
use 0; simp [hr];
repeat exact Ne.symm (ne_of_lt hr)
2024-12-19 16:10:51 +01:00
have h₃f : Set.Finite (Function.support h₁f.divisor) := by
exact Divisor.finiteSupport h₁U h₁f.divisor
2024-12-16 17:17:43 +01:00
2024-12-19 16:10:51 +01:00
obtain ⟨g, h₁g, h₂g, h₃g⟩ := MeromorphicOn.decompose_log h₁U h₂U h₃U h₁f h₂f
have : (fun z ↦ log ‖f (circleMap 0 r z)‖) = (fun z ↦ log ‖f z‖) ∘ (circleMap 0 r) := by
rfl
rw [this]
have : Metric.sphere (0 : ) |r| ⊆ Metric.closedBall (0 : ) r := by
rw [abs_of_pos hr]
apply Metric.sphere_subset_closedBall
rw [integrability_congr_changeDiscrete this h₃g]
apply IntervalIntegrable.add
--
apply Continuous.intervalIntegrable
apply continuous_iff_continuousAt.2
intro x
have : (fun x => log ‖g (circleMap 0 r x)‖) = log ∘ Complex.abs ∘ g ∘ (fun x ↦ circleMap 0 r x) :=
rfl
rw [this]
apply ContinuousAt.comp
apply Real.continuousAt_log
· simp
have : (circleMap 0 r x) ∈ (Metric.closedBall (0 : ) r) := by
apply circleMap_mem_closedBall
exact le_of_lt hr
exact h₂g ⟨(circleMap 0 r x), this⟩
apply ContinuousAt.comp
· apply Continuous.continuousAt Complex.continuous_abs
apply ContinuousAt.comp
· have : (circleMap 0 r x) ∈ (Metric.closedBall (0 : ) r) := by
apply circleMap_mem_closedBall (0 : ) (le_of_lt hr) x
apply (h₁g (circleMap 0 r x) this).continuousAt
apply Continuous.continuousAt (continuous_circleMap 0 r)
--
have h {x : } : (Function.support fun s => (h₁f.divisor s) * log ‖circleMap 0 r x - s‖) ⊆ h₃f.toFinset := by
intro x; simp; tauto
simp_rw [finsum_eq_sum_of_support_subset _ h]
have : (fun x => ∑ s ∈ h₃f.toFinset, (h₁f.divisor s) * log ‖circleMap 0 r x - s‖) = (∑ s ∈ h₃f.toFinset, fun x => (h₁f.divisor s) * log ‖circleMap 0 r x - s‖) := by
ext x; simp
rw [this]
apply IntervalIntegrable.sum h₃f.toFinset
intro s hs
apply IntervalIntegrable.const_mul
apply intervalIntegrable_logAbs_circleMap_sub_const
exact Ne.symm (ne_of_lt hr)
· push_neg at h₂f
let F := h₁f.makeStronglyMeromorphicOn
have : (fun z => log ‖f z‖) =ᶠ[Filter.codiscreteWithin (Metric.closedBall 0 r)] (fun z => log ‖F z‖) := by
-- WANT: apply Filter.eventuallyEq.congr
let A := (makeStronglyMeromorphicOn_changeDiscrete'' h₁f)
obtain ⟨s, h₁s, h₂s⟩ := eventuallyEq_iff_exists_mem.1 A
rw [eventuallyEq_iff_exists_mem]
use s
constructor
· exact h₁s
· intro x hx
simp_rw [h₂s hx]
have hU : Metric.sphere (0 : ) |r| ⊆ Metric.closedBall 0 r := by
rw [abs_of_pos hr]
exact Metric.sphere_subset_closedBall
have t₀ : (fun z => log ‖f (circleMap 0 r z)‖) = (fun z => log ‖f z‖) ∘ circleMap 0 r := by
rfl
rw [t₀]
clear t₀
rw [integrability_congr_changeDiscrete hU this]
have : ∀ x ∈ Metric.closedBall 0 r, F x = 0 := by
2024-12-19 21:24:13 +01:00
intro x hx
let A := h₂f ⟨x, hx⟩
rw [← makeStronglyMeromorphicOn_changeOrder h₁f hx] at A
let B := ((stronglyMeromorphicOn_of_makeStronglyMeromorphicOn h₁f) x hx).order_eq_zero_iff.not.1
simp [A] at B
assumption
have : (fun z => log ‖F z‖) ∘ circleMap 0 r = 0 := by
funext x
simp
left
apply this
simp [abs_of_pos hr]
simp_rw [this]
apply intervalIntegral.intervalIntegrable_const
theorem MeromorphicOn.integrable_log_abs_f
{f : }
{r : }
-- WARNING: Not optimal. It suffices to be meromorphic on the Sphere
(h₁f : MeromorphicOn f (Metric.closedBall (0 : ) |r|)) :
IntervalIntegrable (fun z ↦ log ‖f (circleMap 0 r z)‖) MeasureTheory.volume 0 (2 * π) := by
by_cases h₁r : r = 0
· rw [h₁r]
simp
· by_cases h₂r : 0 < r
· have : |r| = r := by
exact abs_of_pos h₂r
rw [this] at h₁f
exact MeromorphicOn.integrable_log_abs_f₀ h₂r h₁f
· have t₀ : 0 < -r := by
sorry
have : |r| = -r := by
apply abs_of_neg
exact Left.neg_pos_iff.mp t₀
rw [this] at h₁f
let A := MeromorphicOn.integrable_log_abs_f₀ t₀ h₁f
let B := integrability_congr_negRadius (f := fun z => log ‖f z‖) (r := -r)
let C := B A
simp at C
simpa
2024-12-19 16:10:51 +01:00
theorem MeromorphicOn.integrable_logpos_abs_f
{f : }
{r : }
(hr : 0 < r)
-- WARNING: Not optimal. It suffices to be meromorphic on the Sphere
(h₁f : MeromorphicOn f (Metric.closedBall (0 : ) r)) :
IntervalIntegrable (fun z ↦ logpos ‖f (circleMap 0 r z)‖) MeasureTheory.volume 0 (2 * π) := by
2024-12-19 16:10:51 +01:00
simp_rw [logpos_norm]
simp_rw [mul_add]
2024-12-16 17:17:43 +01:00
apply IntervalIntegrable.add
apply IntervalIntegrable.const_mul
2024-12-19 16:10:51 +01:00
exact MeromorphicOn.integrable_log_abs_f hr h₁f
2024-12-19 16:10:51 +01:00
apply IntervalIntegrable.const_mul
apply IntervalIntegrable.norm
exact MeromorphicOn.integrable_log_abs_f hr h₁f