nevanlinna/Nevanlinna/stronglyMeromorphicOn_ratlPolynomial.lean
Stefan Kebekus 8525ae1ece Working…
2024-11-27 11:54:31 +01:00

170 lines
4.8 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 Nevanlinna.stronglyMeromorphicOn
import Nevanlinna.meromorphicOn_divisor
import Nevanlinna.mathlibAddOn
open scoped Interval Topology
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₂
(d : )
(P : Finset ) :
StronglyMeromorphicOn (∏ u ∈ P, fun z ↦ (z - u) ^ d 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]
intro u hu
apply zpow_ne_zero
rw [sub_ne_zero]
by_contra hCon
rw [hCon] at hu
let A := Finset.not_mem_erase u P
tauto
· exact Filter.Eventually.of_forall (congrFun rfl)
· apply AnalyticAt.stronglyMeromorphicAt
exact analyticAt_ratlPolynomial₁ d P (z := z) h₂z
theorem stronglyMeromorphicOn_ratlPolynomial₃
(d : ) :
StronglyMeromorphicOn (∏ᶠ u, fun z ↦ (z - u) ^ d u) := by
by_cases hd : (Function.mulSupport fun u z => (z - u) ^ d u).Finite
· rw [finprod_eq_prod _ hd]
apply stronglyMeromorphicOn_ratlPolynomial₂ d hd.toFinset
· rw [finprod_of_infinite_mulSupport hd]
apply AnalyticOn.stronglyMeromorphicOn
apply analyticOnNhd_const
theorem stronglyMeromorphicOn_ratlPolynomial₃U
(d : )
(U : Set ) :
StronglyMeromorphicOn (∏ᶠ u, fun z ↦ (z - u) ^ d u) U := by
intro z hz
exact stronglyMeromorphicOn_ratlPolynomial₃ d z trivial
theorem stronglyMeromorphicOn_divisor_ratlPolynomial₁
{z : }
(d : )
(h₁d : Set.Finite d.support) :
(((stronglyMeromorphicOn_ratlPolynomial₃ d).meromorphicOn) z trivial).order = d z := by
have h₂d : (Function.mulSupport fun u z ↦ (z - u) ^ d u) = d.support := by
ext u
constructor
· intro h
simp at h
simp
by_contra hCon
rw [hCon] at h
simp at h
tauto
· intro h
simp
by_contra hCon
let A := congrFun hCon u
simp at A
have t₁ : (0 : ) ^ d u ≠ 0 := ne_zero_of_eq_one A
rw [zpow_ne_zero_iff h] at t₁
tauto
rw [MeromorphicAt.order_eq_int_iff]
use ∏ x ∈ h₁d.toFinset.erase z, fun z => (z - x) ^ d x
constructor
· have : z ∉ h₁d.toFinset.erase z := Finset.not_mem_erase z h₁d.toFinset
apply analyticAt_ratlPolynomial₁ d (h₁d.toFinset.erase z) this
· constructor
· simp only [Finset.prod_apply]
rw [Finset.prod_ne_zero_iff]
intro u hu
apply zpow_ne_zero
rw [sub_ne_zero]
by_contra hCon
rw [hCon] at hu
let A := Finset.not_mem_erase u h₁d.toFinset
tauto
· apply Filter.Eventually.of_forall
intro x
have t₀ : (Function.mulSupport fun u z => (z - u) ^ d u).Finite := by
rwa [h₂d]
rw [finprod_eq_prod _ t₀]
have t₁ : h₁d.toFinset = t₀.toFinset := by
simp
rwa [eq_comm]
rw [t₁]
simp
rw [eq_comm]
have : z ∉ h₁d.toFinset.erase z := Finset.not_mem_erase z h₁d.toFinset
by_cases hz : z ∈ h₁d.toFinset
· rw [t₁] at hz
conv =>
right
rw [← Finset.mul_prod_erase t₀.toFinset _ hz]
· have : t₀.toFinset = t₀.toFinset.erase z := by
rw [eq_comm]
apply Finset.erase_eq_of_not_mem
rwa [t₁] at hz
rw [this]
have : (x - z) ^ d z = 1 := by
simp at hz
rw [hz]
simp
rw [this]
simp
theorem stronglyMeromorphicOn_divisor_ratlPolynomial
(d : )
(h₁d : Set.Finite d.support) :
(stronglyMeromorphicOn_ratlPolynomial₃ d).meromorphicOn.divisor = d := by
funext z
rw [MeromorphicOn.divisor]
simp
rw [stronglyMeromorphicOn_divisor_ratlPolynomial₁ d h₁d]
simp
theorem stronglyMeromorphicOn_divisor_ratlPolynomial_U
{U : Set }
(d : )
(h₁d : Set.Finite d.support)
(h₂d : d.support ⊆ U) :
(stronglyMeromorphicOn_ratlPolynomial₃U d U).meromorphicOn.divisor = d := by
funext z
rw [MeromorphicOn.divisor]
simp
by_cases hz : z ∈ U
· simp [hz]
rw [stronglyMeromorphicOn_divisor_ratlPolynomial₁ d h₁d]
simp
· simp [hz]
rw [eq_comm, ← Function.nmem_support]
tauto