Done with examples for holomorphicAt

This commit is contained in:
Stefan Kebekus 2024-06-10 12:39:40 +02:00
parent 50d0bead78
commit 52abf9b79b
2 changed files with 73 additions and 107 deletions

View File

@ -1,27 +1,9 @@
import Mathlib.Analysis.Complex.Basic
import Mathlib.Analysis.Complex.TaylorSeries
import Mathlib.Analysis.Calculus.LineDeriv.Basic
import Mathlib.Analysis.Calculus.ContDiff.Defs
import Mathlib.Analysis.Calculus.FDeriv.Basic
import Mathlib.Analysis.Calculus.FDeriv.Symmetric
import Mathlib.Analysis.RCLike.Basic
import Mathlib.Analysis.SpecialFunctions.Complex.LogDeriv
import Mathlib.Data.Complex.Module
import Mathlib.Data.Complex.Order
import Mathlib.Data.Complex.Exponential
import Mathlib.Data.Fin.Tuple.Basic
import Mathlib.Topology.Algebra.InfiniteSum.Module
import Mathlib.Topology.Defs.Filter
import Mathlib.Topology.Instances.RealVectorSpace
import Nevanlinna.cauchyRiemann
import Nevanlinna.laplace
import Nevanlinna.complexHarmonic import Nevanlinna.complexHarmonic
import Nevanlinna.holomorphic import Nevanlinna.holomorphic
variable {F : Type*} [NormedAddCommGroup F] [NormedSpace F] variable {F : Type*} [NormedAddCommGroup F] [NormedSpace F]
variable {F₁ : Type*} [NormedAddCommGroup F₁] [NormedSpace F₁] [CompleteSpace F₁] variable {F₁ : Type*} [NormedAddCommGroup F₁] [NormedSpace F₁] [CompleteSpace F₁]
variable {G : Type*} [NormedAddCommGroup G] [NormedSpace G] variable {G : Type*} [NormedAddCommGroup G] [NormedSpace G]
variable {G₁ : Type*} [NormedAddCommGroup G₁] [NormedSpace G₁] [CompleteSpace G₁]
theorem holomorphicAt_is_harmonicAt theorem holomorphicAt_is_harmonicAt
@ -93,6 +75,18 @@ theorem log_normSq_of_holomorphicAt_is_harmonicAt
(h₂f : f z ≠ 0) : (h₂f : f z ≠ 0) :
HarmonicAt (Real.log ∘ Complex.normSq ∘ f) z := by HarmonicAt (Real.log ∘ Complex.normSq ∘ f) z := by
-- For later use
have slitPlaneLemma {z : } (hz : z ≠ 0) : z ∈ Complex.slitPlane -z ∈ Complex.slitPlane := by
rw [Complex.mem_slitPlane_iff, Complex.mem_slitPlane_iff]
simp at hz
rw [Complex.ext_iff] at hz
push_neg at hz
simp at hz
simp
by_contra contra
push_neg at contra
exact hz (le_antisymm contra.1.1 contra.2.1) contra.1.2
-- First prove the theorem for functions with image in the slitPlane -- First prove the theorem for functions with image in the slitPlane
have lem₁ : ∀ g : , (HolomorphicAt g z) → (g z ≠ 0) → (g z ∈ Complex.slitPlane) → HarmonicAt (Real.log ∘ Complex.normSq ∘ g) z := by have lem₁ : ∀ g : , (HolomorphicAt g z) → (g z ≠ 0) → (g z ∈ Complex.slitPlane) → HarmonicAt (Real.log ∘ Complex.normSq ∘ g) z := by
intro g h₁g h₂g h₃g intro g h₁g h₂g h₃g
@ -137,10 +131,44 @@ theorem log_normSq_of_holomorphicAt_is_harmonicAt
simp simp
apply hx.2 apply hx.2
-- Locally around z, rewrite Complex.log (g * gc) as Complex.log g + Complex.log.gc
-- This uses the assumption that g z is in Complex.slitPlane
have : (Complex.log ∘ (Complex.conjCLE ∘ g * g)) =ᶠ[nhds z] (Complex.conjCLE ∘ Complex.log ∘ g + Complex.log ∘ g) := by
apply Filter.eventuallyEq_iff_exists_mem.2
use g⁻¹' (Complex.slitPlane ∩ {0}ᶜ)
constructor
· apply ContinuousAt.preimage_mem_nhds
· exact (HolomorphicAt_differentiableAt h₁g).continuousAt
· apply IsOpen.mem_nhds
apply IsOpen.inter Complex.isOpen_slitPlane isOpen_ne
constructor
· exact h₃g
· exact h₂g
· intro x hx
simp
rw [← Complex.log_conj]
rw [Complex.log_mul_eq_add_log_iff _ hx.2]
rw [Complex.arg_conj]
simp [Complex.slitPlane_arg_ne_pi hx.1]
constructor
· exact Real.pi_pos
· exact Real.pi_nonneg
simp
apply hx.2
apply Complex.slitPlane_arg_ne_pi hx.1
rw [HarmonicAt_eventuallyEq this] rw [HarmonicAt_eventuallyEq this]
apply harmonicAt_add_harmonicAt_is_harmonicAt apply harmonicAt_add_harmonicAt_is_harmonicAt
· · rw [← harmonicAt_iff_comp_CLE_is_harmonicAt]
sorry apply holomorphicAt_is_harmonicAt
apply HolomorphicAt_comp
use Complex.slitPlane
constructor
· apply IsOpen.mem_nhds
exact Complex.isOpen_slitPlane
assumption
· exact fun z a => Complex.differentiableAt_log a
exact h₁g
· apply holomorphicAt_is_harmonicAt · apply holomorphicAt_is_harmonicAt
apply HolomorphicAt_comp apply HolomorphicAt_comp
use Complex.slitPlane use Complex.slitPlane
@ -149,78 +177,16 @@ theorem log_normSq_of_holomorphicAt_is_harmonicAt
exact Complex.isOpen_slitPlane exact Complex.isOpen_slitPlane
assumption assumption
· exact fun z a => Complex.differentiableAt_log a · exact fun z a => Complex.differentiableAt_log a
exact h₁g
by_cases h₃f : f z ∈ Complex.slitPlane
· exact lem₁ f h₁f h₂f h₃f
· have : Complex.normSq ∘ f = Complex.normSq ∘ (-f) := by funext; simp
sorry
assumption
sorry
-- Suffices to show Harmonic (Complex.log ∘ ⇑(starRingEnd ) ∘ f + Complex.log ∘ f)
-- THIS IS WHERE WE USE h₃
have : (Complex.log ∘ (Complex.conjCLE ∘ f * f)) z = (Complex.log ∘ Complex.conjCLE ∘ f + Complex.log ∘ f) z := by
unfold Function.comp
simp
rw [Complex.log_mul_eq_add_log_iff]
have : Complex.arg ((starRingEnd ) (f z)) = - Complex.arg (f z) := by
rw [Complex.arg_conj]
have : ¬ Complex.arg (f z) = Real.pi := by
exact Complex.slitPlane_arg_ne_pi (h₃ z hz)
simp
tauto
rw [this] rw [this]
simp apply lem₁ (-f)
constructor · exact HolomorphicAt_neg h₁f
· exact Real.pi_pos · simpa
· exact Real.pi_nonneg · exact (slitPlaneLemma h₂f).resolve_left h₃f
exact (AddEquivClass.map_ne_zero_iff starRingAut).mpr (h₂ z hz)
exact h₂ z hz
rw [HarmonicOn_congr hs this]
simp
apply harmonicOn_add_harmonicOn_is_harmonicOn hs
have : (fun x => Complex.log ((starRingEnd ) (f x))) = (Complex.log ∘ ⇑(starRingEnd ) ∘ f) := by
rfl
rw [this]
-- HarmonicOn (Complex.log ∘ ⇑(starRingEnd ) ∘ f) s
have : ∀ z ∈ s, (Complex.log ∘ ⇑(starRingEnd ) ∘ f) z = (Complex.conjCLE ∘ Complex.log ∘ f) z := by
intro z hz
unfold Function.comp
rw [Complex.log_conj]
rfl
exact Complex.slitPlane_arg_ne_pi (h₃ z hz)
rw [HarmonicOn_congr hs this]
rw [← harmonicOn_iff_comp_CLE_is_harmonicOn]
apply holomorphicOn_is_harmonicOn
exact hs
intro z hz
apply DifferentiableAt.differentiableWithinAt
apply DifferentiableAt.comp
exact Complex.differentiableAt_log (h₃ z hz)
apply DifferentiableOn.differentiableAt h₁ -- (h₁ z hz)
exact IsOpen.mem_nhds hs hz
exact hs
-- HarmonicOn (Complex.log ∘ ⇑(starRingEnd ) ∘ f) s
apply holomorphicOn_is_harmonicOn hs
exact DifferentiableOn.clog h₁ h₃
theorem holomorphic_is_harmonic {f : → F₁} (h : Differentiable f) : theorem holomorphic_is_harmonic {f : → F₁} (h : Differentiable f) :

View File

@ -1,21 +1,5 @@
import Mathlib.Analysis.Complex.Basic
import Mathlib.Analysis.Complex.TaylorSeries import Mathlib.Analysis.Complex.TaylorSeries
import Mathlib.Analysis.Calculus.LineDeriv.Basic
import Mathlib.Analysis.Calculus.ContDiff.Defs
import Mathlib.Analysis.Calculus.FDeriv.Basic
import Mathlib.Analysis.Calculus.FDeriv.Symmetric
import Mathlib.Analysis.RCLike.Basic
import Mathlib.Analysis.SpecialFunctions.Complex.LogDeriv
import Mathlib.Data.Complex.Module
import Mathlib.Data.Complex.Order
import Mathlib.Data.Complex.Exponential
import Mathlib.Data.Fin.Tuple.Basic
import Mathlib.Topology.Algebra.InfiniteSum.Module
import Mathlib.Topology.Defs.Filter
import Mathlib.Topology.Instances.RealVectorSpace
import Nevanlinna.cauchyRiemann import Nevanlinna.cauchyRiemann
import Nevanlinna.laplace
import Nevanlinna.complexHarmonic
variable {E : Type*} [NormedAddCommGroup E] [NormedSpace E] variable {E : Type*} [NormedAddCommGroup E] [NormedSpace E]
variable {F : Type*} [NormedAddCommGroup F] [NormedSpace F] [CompleteSpace F] variable {F : Type*} [NormedAddCommGroup F] [NormedSpace F] [CompleteSpace F]
@ -28,7 +12,8 @@ def HolomorphicAt (f : E → F) (x : E) : Prop :=
theorem HolomorphicAt_iff theorem HolomorphicAt_iff
{f : E → F} {f : E → F}
{x : E} : {x : E} :
HolomorphicAt f x ↔ ∃ s : Set E, IsOpen s ∧ x ∈ s ∧ (∀ z ∈ s, DifferentiableAt f z) := by HolomorphicAt f x ↔ ∃ s :
Set E, IsOpen s ∧ x ∈ s ∧ (∀ z ∈ s, DifferentiableAt f z) := by
constructor constructor
· intro hf · intro hf
obtain ⟨t, h₁t, h₂t⟩ := hf obtain ⟨t, h₁t, h₂t⟩ := hf
@ -104,6 +89,21 @@ theorem HolomorphicAt_comp
exact hx.1 exact hx.1
theorem HolomorphicAt_neg
{f : E → F}
{z : E}
(hf : HolomorphicAt f z) :
HolomorphicAt (-f) z := by
obtain ⟨UF, h₁UF, h₂UF⟩ := hf
use UF
constructor
· assumption
· intro z hz
apply differentiableAt_neg_iff.mp
simp
exact h₂UF z hz
theorem HolomorphicAt_contDiffAt theorem HolomorphicAt_contDiffAt
{f : → F} {f : → F}
{z : } {z : }