nevanlinna/Nevanlinna/stronglyMeromorphicOn.lean

174 lines
4.8 KiB
Plaintext
Raw Normal View History

2024-11-21 17:15:32 +01:00
import Nevanlinna.meromorphicOn_divisor
2024-10-24 14:05:16 +02:00
import Nevanlinna.stronglyMeromorphicAt
2024-11-20 16:08:59 +01:00
import Mathlib.Algebra.BigOperators.Finprod
2024-10-24 14:05:16 +02:00
open Topology
/- Strongly MeromorphicOn -/
def StronglyMeromorphicOn
(f : )
(U : Set ) :=
∀ z ∈ U, StronglyMeromorphicAt f z
/- Strongly MeromorphicAt is Meromorphic -/
theorem StronglyMeromorphicOn.meromorphicOn
{f : }
{U : Set }
(hf : StronglyMeromorphicOn f U) :
MeromorphicOn f U := by
intro z hz
exact StronglyMeromorphicAt.meromorphicAt (hf z hz)
/- Strongly MeromorphicOn of non-negative order is analytic -/
theorem StronglyMeromorphicOn.analytic
{f : }
{U : Set }
(h₁f : StronglyMeromorphicOn f U)
(h₂f : ∀ x, (hx : x ∈ U) → 0 ≤ (h₁f x hx).meromorphicAt.order):
∀ z ∈ U, AnalyticAt f z := by
intro z hz
apply StronglyMeromorphicAt.analytic
exact h₂f z hz
exact h₁f z hz
/- Analytic functions are strongly meromorphic -/
theorem AnalyticOn.stronglyMeromorphicOn
{f : }
{U : Set }
2024-10-24 14:37:27 +02:00
(h₁f : AnalyticOnNhd f U) :
2024-10-24 14:05:16 +02:00
StronglyMeromorphicOn f U := by
intro z hz
apply AnalyticAt.stronglyMeromorphicAt
exact h₁f z hz
/- Make strongly MeromorphicAt -/
2024-10-24 14:37:27 +02:00
noncomputable def MeromorphicOn.makeStronglyMeromorphicOn
2024-10-24 14:05:16 +02:00
{f : }
2024-10-24 14:37:27 +02:00
{U : Set }
(hf : MeromorphicOn f U) :
2024-10-24 14:05:16 +02:00
:= by
intro z
2024-10-24 14:37:27 +02:00
by_cases hz : z ∈ U
· exact (hf z hz).makeStronglyMeromorphicAt z
2024-10-24 14:05:16 +02:00
· exact f z
2024-10-30 16:53:32 +01:00
theorem makeStronglyMeromorphicOn_changeDiscrete
{f : }
{U : Set }
{z₀ : }
(hf : MeromorphicOn f U)
(hz₀ : z₀ ∈ U) :
hf.makeStronglyMeromorphicOn =ᶠ[𝓝[≠] z₀] f := by
apply Filter.eventually_iff_exists_mem.2
let A := (hf z₀ hz₀).eventually_analyticAt
obtain ⟨V, h₁V, h₂V⟩ := Filter.eventually_iff_exists_mem.1 A
use V
constructor
· assumption
· intro v hv
unfold MeromorphicOn.makeStronglyMeromorphicOn
by_cases h₂v : v ∈ U
· simp [h₂v]
2024-11-19 11:31:24 +01:00
rw [← StronglyMeromorphicAt.makeStronglyMeromorphic_id]
2024-10-30 16:53:32 +01:00
exact AnalyticAt.stronglyMeromorphicAt (h₂V v hv)
· simp [h₂v]
2024-11-21 17:15:32 +01:00
theorem analyticAt_ratlPolynomial₁
{z : }
(d : )
(P : Finset ) :
z ∉ P → AnalyticAt (∏ u ∈ P, fun z ↦ (z - u) ^ d u) z := by
intro hz
rw [Finset.prod_fn]
apply Finset.analyticAt_prod
intro u hu
apply AnalyticAt.zpow
apply AnalyticAt.sub
apply analyticAt_id
apply analyticAt_const
rw [sub_ne_zero, ne_comm]
exact ne_of_mem_of_not_mem hu hz
theorem stronglyMeromorphicOn_ratlPolynomial₂
2024-11-20 16:08:59 +01:00
{U : Set }
2024-11-21 17:15:32 +01:00
(d : )
(P : Finset ) :
StronglyMeromorphicOn (∏ u ∈ P, fun z ↦ (z - u) ^ d u) U := by
intro z hz
by_cases h₂z : z ∈ P
· rw [← Finset.mul_prod_erase P _ h₂z]
right
use d z
use ∏ x ∈ P.erase z, fun z => (z - x) ^ d x
constructor
· have : z ∉ P.erase z := Finset.not_mem_erase z P
apply analyticAt_ratlPolynomial₁ d (P.erase z) this
· constructor
· simp only [Finset.prod_apply]
rw [Finset.prod_ne_zero_iff]
2024-11-20 16:08:59 +01:00
intro u hu
2024-11-21 17:15:32 +01:00
apply zpow_ne_zero
rw [sub_ne_zero]
2024-11-20 16:08:59 +01:00
by_contra hCon
2024-11-21 17:15:32 +01:00
rw [hCon] at hu
let A := Finset.not_mem_erase u P
2024-11-20 16:08:59 +01:00
tauto
2024-11-21 17:15:32 +01:00
· exact Filter.Eventually.of_forall (congrFun rfl)
· apply AnalyticAt.stronglyMeromorphicAt
exact analyticAt_ratlPolynomial₁ d P (z := z) h₂z
2024-11-20 16:08:59 +01:00
2024-11-21 17:15:32 +01:00
theorem stronglyMeromorphicOn_ratlPolynomial₃
{U : Set }
(d : ) :
StronglyMeromorphicOn (∏ᶠ u, fun z ↦ (z - u) ^ d u) U := by
by_cases hd : (Function.mulSupport fun u z => (z - u) ^ d u).Finite
· rw [finprod_eq_prod _ hd]
apply stronglyMeromorphicOn_ratlPolynomial₂ (U := U) d hd.toFinset
2024-11-20 16:08:59 +01:00
· rw [finprod_of_infinite_mulSupport hd]
apply AnalyticOn.stronglyMeromorphicOn
apply analyticOnNhd_const
2024-11-12 16:58:07 +01:00
2024-11-21 17:15:32 +01:00
theorem stronglyMeromorphicOn_divisor_ratlPolynomial
{U : Set }
(d : )
(hd : Set.Finite d.support) :
(stronglyMeromorphicOn_ratlPolynomial₃ d (U := U)).meromorphicOn.divisor = d := by
sorry
2024-10-30 16:53:32 +01:00
theorem makeStronglyMeromorphicOn_changeDiscrete'
{f : }
{U : Set }
{z₀ : }
(hf : MeromorphicOn f U)
(hz₀ : z₀ ∈ U) :
hf.makeStronglyMeromorphicOn =ᶠ[𝓝 z₀] (hf z₀ hz₀).makeStronglyMeromorphicAt := by
apply Mnhds
let A := makeStronglyMeromorphicOn_changeDiscrete hf hz₀
apply Filter.EventuallyEq.trans A
exact m₂ (hf z₀ hz₀)
unfold MeromorphicOn.makeStronglyMeromorphicOn
simp [hz₀]
2024-10-24 14:37:27 +02:00
theorem StronglyMeromorphicOn_of_makeStronglyMeromorphicOn
2024-10-24 14:05:16 +02:00
{f : }
2024-10-24 14:37:27 +02:00
{U : Set }
(hf : MeromorphicOn f U) :
StronglyMeromorphicOn hf.makeStronglyMeromorphicOn U := by
2024-10-30 16:53:32 +01:00
intro z₀ hz₀
rw [stronglyMeromorphicAt_congr (makeStronglyMeromorphicOn_changeDiscrete' hf hz₀)]
exact StronglyMeromorphicAt_of_makeStronglyMeromorphic (hf z₀ hz₀)