nevanlinna/Nevanlinna/stronglyMeromorphic.lean

155 lines
4.3 KiB
Plaintext
Raw Normal View History

2024-10-08 09:35:17 +02:00
import Mathlib.Analysis.Analytic.Meromorphic
import Nevanlinna.analyticAt
2024-10-09 12:13:22 +02:00
import Nevanlinna.mathlibAddOn
2024-10-08 09:35:17 +02:00
2024-10-08 15:39:19 +02:00
/- Strongly MeromorphicAt -/
2024-10-08 09:35:17 +02:00
def StronglyMeromorphicAt
(f : )
(z₀ : ) :=
2024-10-08 15:39:19 +02:00
(∀ᶠ (z : ) in nhds z₀, f z = 0) (∃ (n : ), ∃ g : , (AnalyticAt g z₀) ∧ (g z₀ ≠ 0) ∧ (∀ᶠ (z : ) in nhds z₀, f z = (z - z₀) ^ n • g z))
2024-10-08 09:35:17 +02:00
2024-10-08 15:39:19 +02:00
/- Strongly MeromorphicAt is Meromorphic -/
theorem StronglyMeromorphicAt.meromorphicAt
{f : }
{z₀ : }
(hf : StronglyMeromorphicAt f z₀) :
MeromorphicAt f z₀ := by
rcases hf with h|h
· use 0; simp
rw [analyticAt_congr h]
exact analyticAt_const
2024-10-09 12:13:22 +02:00
· obtain ⟨n, g, h₁g, _, h₃g⟩ := h
rw [meromorphicAt_congr' h₃g]
apply MeromorphicAt.smul
apply MeromorphicAt.zpow
apply MeromorphicAt.sub
apply MeromorphicAt.id
apply MeromorphicAt.const
exact AnalyticAt.meromorphicAt h₁g
2024-10-08 15:39:19 +02:00
2024-10-09 06:33:14 +02:00
2024-10-09 12:13:22 +02:00
/- Strongly MeromorphicAt of non-negative order is analytic -/
2024-10-08 15:39:19 +02:00
theorem StronglyMeromorphicAt.analytic
{f : }
{z₀ : }
(h₁f : StronglyMeromorphicAt f z₀)
(h₂f : 0 ≤ h₁f.meromorphicAt.order):
AnalyticAt f z₀ := by
2024-10-09 12:13:22 +02:00
let h₁f' := h₁f
rcases h₁f' with h|h
· rw [analyticAt_congr h]
exact analyticAt_const
· obtain ⟨n, g, h₁g, h₂g, h₃g⟩ := h
rw [analyticAt_congr h₃g]
have : h₁f.meromorphicAt.order = n := by
rw [MeromorphicAt.order_eq_int_iff]
use g
constructor
· exact h₁g
· constructor
· exact h₂g
· exact Filter.EventuallyEq.filter_mono h₃g nhdsWithin_le_nhds
rw [this] at h₂f
apply AnalyticAt.smul
nth_rw 1 [← Int.toNat_of_nonneg (WithTop.coe_nonneg.mp h₂f)]
apply AnalyticAt.pow
apply AnalyticAt.sub
apply analyticAt_id -- Warning: want apply AnalyticAt.id
apply analyticAt_const -- Warning: want AnalyticAt.const
exact h₁g
2024-10-08 15:39:19 +02:00
2024-10-14 13:41:05 +02:00
/- Analytic functions are strongly meromorphic -/
theorem AnalyticAt.stronglyMeromorphicAt
{f : }
{z₀ : }
(h₁f : AnalyticAt f z₀) :
StronglyMeromorphicAt f z₀ := by
by_cases h₂f : h₁f.order =
· rw [AnalyticAt.order_eq_top_iff] at h₂f
tauto
· have : h₁f.order ≠ := h₂f
rw [← ENat.coe_toNat_eq_self] at this
rw [eq_comm, AnalyticAt.order_eq_nat_iff] at this
right
use h₁f.order.toNat
obtain ⟨g, h₁g, h₂g, h₃g⟩ := this
use g
tauto
2024-10-21 10:36:48 +02:00
theorem MeromorphicAt.order_neq_top_iff
{f : }
{z₀ : }
(hf : MeromorphicAt f z₀) :
hf.order ≠ ↔ ∃ (g : ), AnalyticAt g z₀ ∧ g z₀ ≠ 0 ∧ ∀ᶠ (z : ) in nhdsWithin z₀ {z₀}ᶜ, f z = (z - z₀) ^ (hf.order.untop' 0) • g z := by
rw [← hf.order_eq_int_iff (hf.order.untop' 0)]
constructor
· intro h₁f
apply?
exact Eq.symm (ENat.coe_toNat h₁f)
· intro h₁f
exact ENat.coe_toNat_eq_self.mp (id (Eq.symm h₁f))
2024-10-08 15:39:19 +02:00
/- Make strongly MeromorphicAt -/
2024-10-14 13:25:49 +02:00
noncomputable def MeromorphicAt.makeStronglyMeromorphicAt
2024-10-08 09:35:17 +02:00
{f : }
{z₀ : }
(hf : MeromorphicAt f z₀) :
:= by
2024-10-21 10:36:48 +02:00
by_cases h₁f : hf.order =
2024-10-09 12:13:22 +02:00
· exact 0
2024-10-21 10:36:48 +02:00
·
intro z
by_cases z = z₀
· by_cases h₂f : hf.order = 0
· have : (0 : WithTop ) = (0 : ) := rfl
rw [this, hf.order_eq_int_iff] at h₂f
exact (Classical.choose h₂f) z₀
· exact 0
· exact f z
2024-10-08 09:35:17 +02:00
2024-10-08 15:39:19 +02:00
theorem StronglyMeromorphicAt_of_makeStronglyMeromorphic
2024-10-08 09:35:17 +02:00
{f : }
{z₀ : }
(hf : MeromorphicAt f z₀) :
2024-10-21 10:36:48 +02:00
StronglyMeromorphicAt hf.makeStronglyMeromorphicAt z₀ := by
by_cases h₂f : hf.order = 0
· apply AnalyticAt.stronglyMeromorphicAt
let A := h₂f
rw [(by rfl : (0 : WithTop ) = (0 : )), hf.order_eq_int_iff] at A
simp at A
have : hf.makeStronglyMeromorphicAt = Classical.choose A := by
simp [MeromorphicAt.makeStronglyMeromorphicAt, h₂f]
let B := Classical.choose_spec A
rw [this]
tauto
· by_cases h₃f : hf.order =
· rw [MeromorphicAt.order_eq_top_iff] at h₃f
left
sorry
· sorry
2024-10-14 13:25:49 +02:00
2024-10-08 15:39:19 +02:00
theorem makeStronglyMeromorphic_eventuallyEq
{f : }
{z₀ : }
(hf : MeromorphicAt f z₀) :
∀ᶠ (z : ) in nhdsWithin z₀ {z₀}ᶜ, f z = hf.makeStronglyMeromorphicAt z := by
sorry