diff --git a/Nevanlinna/holomorphic_zero.lean b/Nevanlinna/holomorphic_zero.lean index 50a7735..508d57d 100644 --- a/Nevanlinna/holomorphic_zero.lean +++ b/Nevanlinna/holomorphic_zero.lean @@ -1,3 +1,5 @@ +import Init.Classical +import Mathlib.Analysis.Analytic.Meromorphic import Mathlib.Topology.ContinuousOn import Mathlib.Analysis.Analytic.IsolatedZeros import Nevanlinna.holomorphic @@ -247,7 +249,7 @@ theorem zeroDivisor_finiteOnCompact {U : Set ℂ} (hU : IsPreconnected U) (h₁f : AnalyticOn ℂ f U) - (h₂f : ∃ z ∈ U, f z ≠ 0) + (h₂f : ∃ z ∈ U, f z ≠ 0) -- not needed! (h₂U : IsCompact U) : Set.Finite (U ∩ Function.support (zeroDivisor f)) := by @@ -268,26 +270,120 @@ theorem zeroDivisor_finiteOnCompact exact Set.inter_subset_right +theorem AnalyticOn.order_eq_nat_iff + {f : ℂ → ℂ} + {U : Set ℂ} + {z₀ : ℂ} + (hf : AnalyticOn ℂ f U) + (hz₀ : z₀ ∈ U) + (n : ℕ) : + (hf z₀ hz₀).order = ↑n → ∃ (g : ℂ → ℂ), AnalyticOn ℂ g U ∧ g z₀ ≠ 0 ∧ ∀ z ∈ U, f z = (z - z₀) ^ n • g z := by + + intro hn + + obtain ⟨gloc, h₁gloc, h₂gloc, h₃gloc⟩ := (AnalyticAt.order_eq_nat_iff (hf z₀ hz₀) n).1 hn + + let g : ℂ → ℂ := fun z ↦ if hz : z = z₀ then gloc z₀ else (f z) / (z - z₀) ^ n + + have t₀ : ∀ᶠ (z : ℂ) in nhds z₀, g z = gloc z := by + rw [eventually_nhds_iff] + rw [eventually_nhds_iff] at h₃gloc + obtain ⟨t, h₁t, h₂t, h₃t⟩ := h₃gloc + use t + constructor + · intro y h₁y + by_cases h₂y : y = z₀ + · dsimp [g]; simp [h₂y] + · dsimp [g]; simp [h₂y] + rw [div_eq_iff_mul_eq, eq_comm, mul_comm] + exact h₁t y h₁y + norm_num + rw [sub_eq_zero] + tauto + · constructor + · assumption + · assumption + + have t₁ {z₁ : ℂ} : z₁ ≠ z₀ → ∀ᶠ (z : ℂ) in nhds z₁, g z = f z / (z - z₀) ^ n := by + intro hz₁ + rw [eventually_nhds_iff] + use {z₀}ᶜ + constructor + · intro y hy + simp at hy + dsimp [g] + simp [hy] + · constructor + · exact isOpen_compl_singleton + · tauto + + use g + constructor + · -- AnalyticOn ℂ g U + intro z h₁z + by_cases h₂z : z = z₀ + · rw [h₂z] + apply AnalyticAt.congr h₁gloc + exact Filter.EventuallyEq.symm t₀ + · simp_rw [eq_comm] at t₁ + apply AnalyticAt.congr _ (t₁ h₂z) + apply AnalyticAt.div + exact hf z h₁z + apply AnalyticAt.pow + apply AnalyticAt.sub + apply analyticAt_id + exact analyticAt_const + simp + rw [sub_eq_zero] + tauto + + theorem eliminatingZeros {f : ℂ → ℂ} - {z₀ : ℂ} - {R : ℝ} - (h₁f : ∀ z ∈ Metric.closedBall z₀ R, HolomorphicAt f z) - (h₂f : ∃ z ∈ Metric.ball z₀ R, f z ≠ 0) : - ∃ F : ℂ → ℂ, ∀ z ∈ Metric.ball z₀ R, (HolomorphicAt F z) ∧ (f z = (F z) * ∏ᶠ a ∈ Metric.ball z₀ R, (z - a) ^ (zeroDivisor f a) ) := by + {U : Set ℂ} + (h₁U : IsPreconnected U) + (h₂U : IsCompact U) + (h₁f : AnalyticOn ℂ f U) + (h₂f : ∃ z ∈ U, f z ≠ 0) : + ∃ F : ℂ → ℂ, (AnalyticOn ℂ F U) ∧ (f = F * ∏ᶠ a ∈ (U ∩ (zeroDivisor f).support), fun z ↦ (z - a) ^ (zeroDivisor f a)) := by + + have hs := zeroDivisor_finiteOnCompact h₁U h₁f h₂f h₂U + rw [finprod_mem_eq_finite_toFinset_prod _ hs] + + let A := hs.card_eq + + let F : ℂ → ℂ := by intro z - if hz : z ∈ (Metric.closedBall z₀ R) ∩ Function.support (zeroDivisor f) then - exact 0 + if hz : z ∈ U ∩ (zeroDivisor f).support then + exact (Classical.choose (zeroDivisor_support_iff.1 hz.2).2.2) z else - exact f z * (∏ᶠ a ∈ Metric.ball z₀ R, (z - a) ^ (zeroDivisor f a))⁻¹ + exact (f z) / ∏ i ∈ hs.toFinset, (z - i) ^ zeroDivisor f i use F - intro z hz - by_cases h₂z : z ∈ (Metric.closedBall z₀ R) ∩ Function.support (zeroDivisor f) - · -- Positive case - sorry + constructor + · intro z h₁z + by_cases h₂z : z ∈ (zeroDivisor f).support + · -- case: z ∈ Function.support (zeroDivisor f) + have : z ∈ U ∩ (zeroDivisor f).support := by exact Set.mem_inter h₁z h₂z - · -- Negative case - sorry + + sorry + · sorry + + have : MeromorphicOn F U := by + apply MeromorphicOn.div + exact AnalyticOn.meromorphicOn h₁f + apply AnalyticOn.meromorphicOn + apply Finset.analyticOn_prod + intro n hn + apply AnalyticOn.pow + apply AnalyticOn.sub + exact analyticOn_id ℂ + exact analyticOn_const + + --use F + + + sorry