Working…

This commit is contained in:
Stefan Kebekus 2024-06-03 12:56:30 +02:00
parent 637c0cf175
commit 40659c2f17
2 changed files with 103 additions and 21 deletions

View File

@ -4,12 +4,12 @@ import Mathlib.Analysis.Calculus.LineDeriv.Basic
import Mathlib.Analysis.Calculus.ContDiff.Defs import Mathlib.Analysis.Calculus.ContDiff.Defs
import Mathlib.Analysis.Calculus.FDeriv.Basic import Mathlib.Analysis.Calculus.FDeriv.Basic
import Mathlib.Analysis.Calculus.FDeriv.Symmetric import Mathlib.Analysis.Calculus.FDeriv.Symmetric
import Mathlib.Analysis.RCLike.Basic
import Mathlib.Analysis.SpecialFunctions.Complex.LogDeriv import Mathlib.Analysis.SpecialFunctions.Complex.LogDeriv
import Mathlib.Data.Complex.Module import Mathlib.Data.Complex.Module
import Mathlib.Data.Complex.Order import Mathlib.Data.Complex.Order
import Mathlib.Data.Complex.Exponential import Mathlib.Data.Complex.Exponential
import Mathlib.Data.Fin.Tuple.Basic import Mathlib.Data.Fin.Tuple.Basic
import Mathlib.Analysis.RCLike.Basic
import Mathlib.Topology.Algebra.InfiniteSum.Module import Mathlib.Topology.Algebra.InfiniteSum.Module
import Mathlib.Topology.Instances.RealVectorSpace import Mathlib.Topology.Instances.RealVectorSpace
import Nevanlinna.cauchyRiemann import Nevanlinna.cauchyRiemann
@ -254,13 +254,6 @@ theorem holomorphicOn_is_harmonicOn {f : → F₁} {s : Set } (hs : IsOpe
have f_is_real_C2 : ContDiffOn 2 f s := have f_is_real_C2 : ContDiffOn 2 f s :=
ContDiffOn.restrict_scalars (DifferentiableOn.contDiffOn h hs) ContDiffOn.restrict_scalars (DifferentiableOn.contDiffOn h hs)
have fI_is_real_differentiable : DifferentiableOn (partialDeriv 1 f) s := by
intro z hz
apply DifferentiableAt.differentiableWithinAt
let ZZ := (f_is_real_C2 z hz).contDiffAt (IsOpen.mem_nhds hs hz)
let AA := partialDeriv_contDiffAt ZZ 1
exact AA.differentiableAt (by rfl)
constructor constructor
· -- f is two times real continuously differentiable · -- f is two times real continuously differentiable
exact f_is_real_C2 exact f_is_real_C2
@ -269,8 +262,6 @@ theorem holomorphicOn_is_harmonicOn {f : → F₁} {s : Set } (hs : IsOpe
unfold Complex.laplace unfold Complex.laplace
intro z hz intro z hz
simp simp
have : ∀ z ∈ s, partialDeriv Complex.I f z = Complex.I • partialDeriv 1 f z := by
sorry
have : partialDeriv Complex.I f =ᶠ[nhds z] Complex.I • partialDeriv 1 f := by have : partialDeriv Complex.I f =ᶠ[nhds z] Complex.I • partialDeriv 1 f := by
unfold Filter.EventuallyEq unfold Filter.EventuallyEq
unfold Filter.Eventually unfold Filter.Eventually
@ -289,17 +280,33 @@ theorem holomorphicOn_is_harmonicOn {f : → F₁} {s : Set } (hs : IsOpe
rw [partialDeriv_eventuallyEq this Complex.I] rw [partialDeriv_eventuallyEq this Complex.I]
rw [partialDeriv_smul'₂] rw [partialDeriv_smul'₂]
rw [partialDeriv_comm f_is_real_C2 Complex.I 1] simp
rw [CauchyRiemann₄ h] rw [partialDeriv_commOn hs f_is_real_C2 Complex.I 1 z hz]
have : Complex.I • partialDeriv 1 (partialDeriv Complex.I f) z = Complex.I • (partialDeriv 1 (partialDeriv Complex.I f) z) := by
rfl
rw [this] rw [this]
have : partialDeriv Complex.I f =ᶠ[nhds z] Complex.I • partialDeriv 1 f := by
unfold Filter.EventuallyEq
unfold Filter.Eventually
simp
refine mem_nhds_iff.mpr ?_
use s
constructor
· intro x hx
simp
apply CauchyRiemann₅
apply DifferentiableOn.differentiableAt h
exact IsOpen.mem_nhds hs hx
· constructor
· exact hs
· exact hz
rw [partialDeriv_eventuallyEq this 1]
rw [partialDeriv_smul'₂]
simp
rw [← smul_assoc] rw [← smul_assoc]
simp simp
-- Subgoals coming from the application of 'this'
-- Differentiable (Real.partialDeriv 1 f)
exact fI_is_real_differentiable
-- Differentiable (Real.partialDeriv 1 f)
exact fI_is_real_differentiable
theorem re_of_holomorphic_is_harmonic {f : } (h : Differentiable f) : theorem re_of_holomorphic_is_harmonic {f : } (h : Differentiable f) :
@ -367,11 +374,13 @@ theorem log_normSq_of_holomorphicOn_is_harmonicOn
rw [HarmonicOn_congr hs this] rw [HarmonicOn_congr hs this]
simp simp
apply harmonicOn_add_harmonicOn_is_harmonicOn apply harmonicOn_add_harmonicOn_is_harmonicOn hs
exact hs
have : (fun x => Complex.log ((starRingEnd ) (f x))) = (Complex.log ∘ ⇑(starRingEnd ) ∘ f) := by have : (fun x => Complex.log ((starRingEnd ) (f x))) = (Complex.log ∘ ⇑(starRingEnd ) ∘ f) := by
rfl rfl
rw [this] rw [this]
-- HarmonicOn (Complex.log ∘ ⇑(starRingEnd ) ∘ f) s
have : ∀ z ∈ s, (Complex.log ∘ ⇑(starRingEnd ) ∘ f) z = (Complex.conjCLE ∘ Complex.log ∘ f) z := by have : ∀ z ∈ s, (Complex.log ∘ ⇑(starRingEnd ) ∘ f) z = (Complex.conjCLE ∘ Complex.log ∘ f) z := by
intro z hz intro z hz
unfold Function.comp unfold Function.comp
@ -383,9 +392,24 @@ theorem log_normSq_of_holomorphicOn_is_harmonicOn
rw [← harmonicOn_iff_comp_CLE_is_harmonicOn] rw [← harmonicOn_iff_comp_CLE_is_harmonicOn]
apply holomorphicOn_is_harmonicOn apply holomorphicOn_is_harmonicOn
intro z exact hs
intro z hz
apply DifferentiableAt.differentiableWithinAt
apply DifferentiableAt.comp apply DifferentiableAt.comp
exact Complex.differentiableAt_log (h₃ z)
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
apply?
exact h₁ z exact h₁ z

View File

@ -1,6 +1,8 @@
import Mathlib.Analysis.Calculus.FDeriv.Basic import Mathlib.Analysis.Calculus.FDeriv.Basic
import Mathlib.Analysis.Calculus.FDeriv.Symmetric import Mathlib.Analysis.Calculus.FDeriv.Symmetric
import Mathlib.Analysis.Calculus.ContDiff.Basic import Mathlib.Analysis.Calculus.ContDiff.Basic
import Mathlib.Topology.Basic
import Mathlib.Topology.Defs.Filter
variable {𝕜 : Type*} [NontriviallyNormedField 𝕜] variable {𝕜 : Type*} [NontriviallyNormedField 𝕜]
@ -168,6 +170,23 @@ lemma partialDeriv_fderiv {f : E → F} (hf : ContDiff 𝕜 2 f) (z a b : E) :
· simp · simp
lemma partialDeriv_fderivOn
{s : Set E}
{f : E → F}
(hs : IsOpen s)
(hf : ContDiffOn 𝕜 2 f s) (a b : E) :
∀ z ∈ s, fderiv 𝕜 (fderiv 𝕜 f) z b a = partialDeriv 𝕜 b (partialDeriv 𝕜 a f) z := by
intro z hz
unfold partialDeriv
rw [fderiv_clm_apply]
· simp
· convert DifferentiableOn.differentiableAt _ (IsOpen.mem_nhds hs hz)
apply ContDiffOn.differentiableOn _ (Submonoid.oneLE.proof_2 ℕ∞)
exact ((contDiffOn_succ_iff_fderiv_of_isOpen hs).1 hf).2
· simp
theorem partialDeriv_eventuallyEq {f₁ f₂ : E → F} {x : E} (h : f₁ =ᶠ[nhds x] f₂) : ∀ v : E, partialDeriv 𝕜 v f₁ x = partialDeriv 𝕜 v f₂ x := by theorem partialDeriv_eventuallyEq {f₁ f₂ : E → F} {x : E} (h : f₁ =ᶠ[nhds x] f₂) : ∀ v : E, partialDeriv 𝕜 v f₁ x = partialDeriv 𝕜 v f₂ x := by
unfold partialDeriv unfold partialDeriv
rw [Filter.EventuallyEq.fderiv_eq h] rw [Filter.EventuallyEq.fderiv_eq h]
@ -268,3 +287,42 @@ theorem partialDeriv_comm
rw [← partialDeriv_fderiv h z v₂ v₁] rw [← partialDeriv_fderiv h z v₂ v₁]
rw [derivSymm] rw [derivSymm]
rw [partialDeriv_fderiv h z v₁ v₂] rw [partialDeriv_fderiv h z v₁ v₂]
theorem partialDeriv_commOn
{E : Type*} [NormedAddCommGroup E] [NormedSpace E]
{F : Type*} [NormedAddCommGroup F] [NormedSpace F]
{s : Set E}
{f : E → F}
(hs : IsOpen s)
(h : ContDiffOn 2 f s) :
∀ v₁ v₂ : E, ∀ z ∈ s, partialDeriv v₁ (partialDeriv v₂ f) z = partialDeriv v₂ (partialDeriv v₁ f) z := by
intro v₁ v₂ z hz
have derivSymm :
(fderiv (fun w => fderiv f w) z) v₁ v₂ = (fderiv (fun w => fderiv f w) z) v₂ v₁ := by
let f' := fderiv f
have h₀ : ∀ y ∈ s, HasFDerivAt f (f' y) y := by
intro y hy
apply DifferentiableAt.hasFDerivAt
apply DifferentiableOn.differentiableAt _ (IsOpen.mem_nhds hs hy)
apply h.differentiableOn one_le_two
let f'' := (fderiv f' z)
have h₁ : HasFDerivAt f' f'' z := by
apply DifferentiableAt.hasFDerivAt
apply DifferentiableOn.differentiableAt _ (IsOpen.mem_nhds hs hz)
apply ContDiffOn.differentiableOn _ (Submonoid.oneLE.proof_2 ℕ∞)
exact ((contDiffOn_succ_iff_fderiv_of_isOpen hs).1 h).2
have h₀' : ∀ᶠ (y : E) in nhds z, HasFDerivAt f (f' y) y := by
apply eventually_nhds_iff.mpr
use s
exact second_derivative_symmetric_of_eventually h₀' h₁ v₁ v₂
rw [← partialDeriv_fderivOn hs h v₂ v₁ z hz]
rw [derivSymm]
rw [← partialDeriv_fderivOn hs h v₁ v₂ z hz]