Working…

This commit is contained in:
Stefan Kebekus 2024-06-10 10:58:57 +02:00
parent 21693bd12d
commit 50d0bead78
5 changed files with 97 additions and 82 deletions

View File

@ -138,10 +138,27 @@ theorem log_normSq_of_holomorphicAt_is_harmonicAt
apply hx.2 apply hx.2
rw [HarmonicAt_eventuallyEq this] rw [HarmonicAt_eventuallyEq this]
apply harmonicAt_add_harmonicAt_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
sorry
assumption
sorry sorry

View File

@ -1,20 +1,4 @@
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.Instances.RealVectorSpace
import Nevanlinna.cauchyRiemann
import Nevanlinna.laplace import Nevanlinna.laplace
import Nevanlinna.partialDeriv
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₁]
@ -162,11 +146,10 @@ theorem harmonicAt_add_harmonicAt_is_harmonicAt
HarmonicAt (f₁ + f₂) x := by HarmonicAt (f₁ + f₂) x := by
constructor constructor
· exact ContDiffAt.add h₁.1 h₂.1 · exact ContDiffAt.add h₁.1 h₂.1
· rw [laplace_add_ContDiffAt] · apply Filter.EventuallyEq.trans (laplace_add_ContDiffAt' h₁.1 h₂.1)
intro z hz apply Filter.EventuallyEq.trans (Filter.EventuallyEq.add h₁.2 h₂.2)
rw [laplace_add_ContDiffOn hs h₁.1 h₂.1 z hz]
rw [h₁.2 z hz, h₂.2 z hz]
simp simp
rfl
theorem harmonic_smul_const_is_harmonic {f : → F} {c : } (h : Harmonic f) : theorem harmonic_smul_const_is_harmonic {f : → F} {c : } (h : Harmonic f) :

View File

@ -19,6 +19,7 @@ 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]
variable {G : Type*} [NormedAddCommGroup G] [NormedSpace G] [CompleteSpace G]
def HolomorphicAt (f : E → F) (x : E) : Prop := def HolomorphicAt (f : E → F) (x : E) : Prop :=
∃ s ∈ nhds x, ∀ z ∈ s, DifferentiableAt f z ∃ s ∈ nhds x, ∀ z ∈ s, DifferentiableAt f z
@ -59,7 +60,7 @@ theorem HolomorphicAt_differentiableAt
theorem HolomorphicAt_isOpen theorem HolomorphicAt_isOpen
(f : E → F) : (f : E → F) :
IsOpen { x : E | HolomorphicAt f x } := by IsOpen { x : E | HolomorphicAt f x } := by
rw [← subset_interior_iff_isOpen] rw [← subset_interior_iff_isOpen]
intro x hx intro x hx
simp at hx simp at hx
@ -78,6 +79,31 @@ theorem HolomorphicAt_isOpen
· exact h₂s · exact h₂s
theorem HolomorphicAt_comp
{g : E → F}
{f : F → G}
{z : E}
(hf : HolomorphicAt f (g z))
(hg : HolomorphicAt g z) :
HolomorphicAt (f ∘ g) z := by
obtain ⟨UE, h₁UE, h₂UE⟩ := hg
obtain ⟨UF, h₁UF, h₂UF⟩ := hf
use UE ∩ g⁻¹' UF
constructor
· simp
constructor
· assumption
· apply ContinuousAt.preimage_mem_nhds
apply (h₂UE z (mem_of_mem_nhds h₁UE)).continuousAt
assumption
· intro x hx
apply DifferentiableAt.comp
apply h₂UF
exact hx.2
apply h₂UE
exact hx.1
theorem HolomorphicAt_contDiffAt theorem HolomorphicAt_contDiffAt
{f : → F} {f : → F}
{z : } {z : }

View File

@ -1,19 +1,4 @@
import Mathlib.Data.Fin.Tuple.Basic
import Mathlib.Analysis.Complex.Basic 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.Data.Complex.Module
import Mathlib.Data.Complex.Order
import Mathlib.Data.Complex.Exponential
import Mathlib.Analysis.RCLike.Basic
import Mathlib.Order.Filter.Basic
import Mathlib.Topology.Algebra.InfiniteSum.Module
import Mathlib.Topology.Basic
import Mathlib.Topology.Instances.RealVectorSpace
import Nevanlinna.cauchyRiemann
import Nevanlinna.partialDeriv import Nevanlinna.partialDeriv
variable {F : Type*} [NormedAddCommGroup F] [NormedSpace F] variable {F : Type*} [NormedAddCommGroup F] [NormedSpace F]
@ -169,6 +154,7 @@ theorem laplace_add_ContDiffAt
apply fun v ↦ (partialDeriv_contDiffAt h₁ v).differentiableAt le_rfl apply fun v ↦ (partialDeriv_contDiffAt h₁ v).differentiableAt le_rfl
apply fun v ↦ (partialDeriv_contDiffAt h₂ v).differentiableAt le_rfl apply fun v ↦ (partialDeriv_contDiffAt h₂ v).differentiableAt le_rfl
theorem laplace_add_ContDiffAt' theorem laplace_add_ContDiffAt'
{f₁ f₂ : → F} {f₁ f₂ : → F}
{x : } {x : }
@ -177,49 +163,43 @@ theorem laplace_add_ContDiffAt'
Δ (f₁ + f₂) =ᶠ[nhds x] (Δ f₁) + (Δ f₂):= by Δ (f₁ + f₂) =ᶠ[nhds x] (Δ f₁) + (Δ f₂):= by
unfold Complex.laplace unfold Complex.laplace
have : partialDeriv 1 (partialDeriv 1 f₁) + partialDeriv Complex.I (partialDeriv Complex.I f₁) +
(partialDeriv 1 (partialDeriv 1 f₂) + partialDeriv Complex.I (partialDeriv Complex.I f₂)) =
(partialDeriv 1 (partialDeriv 1 f₁) + (partialDeriv 1 (partialDeriv 1 f₂)) +
(partialDeriv Complex.I (partialDeriv Complex.I f₁) + partialDeriv Complex.I (partialDeriv Complex.I f₂))) := by
group
rw [this]
apply Filter.EventuallyEq.add
suffices hyp : partialDeriv 1 (partialDeriv 1 (f₁ + f₂)) =ᶠ[nhds x] partialDeriv 1 (partialDeriv 1 f₁) + partialDeriv 1 (partialDeriv 1 f₂) from by
have : (fun x => partialDeriv 1 (partialDeriv 1 (f₁ + f₂)) x) = partialDeriv 1 (partialDeriv 1 (f₁ + f₂)) := by
rfl
rw [this]
have : (fun x => (partialDeriv 1 (partialDeriv 1 f₁) + partialDeriv 1 (partialDeriv 1 f₂)) x) = (partialDeriv 1 (partialDeriv 1 f₁)) + (partialDeriv 1 (partialDeriv 1 f₂)) := by
rfl
rwa [this]
simp
have h₁₁ : ContDiffAt 1 f₁ x := h₁.of_le one_le_two
have h₂₁ : ContDiffAt 1 f₂ x := h₂.of_le one_le_two
let A : partialDeriv 1 (f₁ + f₂) =ᶠ[nhds x] (partialDeriv 1 f₁) + (partialDeriv 1 f₂) := by
exact partialDeriv_add₂_contDiffAt h₁₁ h₂₁
let B : partialDeriv 1 (partialDeriv 1 (f₁ + f₂)) =ᶠ[nhds x] (partialDeriv 1 (partialDeriv 1 f₁)) + (partialDeriv 1 (partialDeriv 1 f₂)) := by
sorry
sorry
repeat
rw [partialDeriv_eventuallyEq (partialDeriv_add₂_contDiffAt h₁₁ h₂₁)]
rw [partialDeriv_add₂_differentiableAt]
-- I am super confused at this point because the tactic 'ring' does not work.
-- I do not understand why. So, I need to do things by hand.
rw [add_assoc] rw [add_assoc]
nth_rw 5 [add_comm]
rw [add_assoc] rw [add_assoc]
rw [add_right_inj (partialDeriv 1 (partialDeriv 1 f₁) x)] rw [← add_assoc]
rw [add_comm]
rw [add_assoc] have dualPDeriv : ∀ v : , partialDeriv v (partialDeriv v (f₁ + f₂)) =ᶠ[nhds x]
rw [add_right_inj (partialDeriv Complex.I (partialDeriv Complex.I f₁) x)] partialDeriv v (partialDeriv v f₁) + partialDeriv v (partialDeriv v f₂) := by
rw [add_comm]
intro v
have h₁₁ : ContDiffAt 1 f₁ x := h₁.of_le one_le_two
have h₂₁ : ContDiffAt 1 f₂ x := h₂.of_le one_le_two
have t₁ : partialDeriv v (partialDeriv v (f₁ + f₂)) =ᶠ[nhds x] partialDeriv v (partialDeriv v f₁ + partialDeriv v f₂) := by
exact partialDeriv_eventuallyEq' (partialDeriv_add₂_contDiffAt h₁₁ h₂₁) v
have t₂ : partialDeriv v (partialDeriv v f₁ + partialDeriv v f₂) =ᶠ[nhds x] (partialDeriv v (partialDeriv v f₁)) + (partialDeriv v (partialDeriv v f₂)) := by
apply partialDeriv_add₂_contDiffAt
apply partialDeriv_contDiffAt
exact h₁
apply partialDeriv_contDiffAt
exact h₂
apply Filter.EventuallyEq.trans t₁ t₂
have eventuallyEq_add
{a₁ a₂ b₁ b₂ : → F}
(h : a₁ =ᶠ[nhds x] b₁)
(h' : a₂ =ᶠ[nhds x] b₂) : (a₁ + a₂) =ᶠ[nhds x] (b₁ + b₂) := by
have {c₁ c₂ : → F} : (fun x => c₁ x + c₂ x) = c₁ + c₂ := by rfl
rw [← this, ← this]
exact Filter.EventuallyEq.add h h'
apply eventuallyEq_add
· exact dualPDeriv 1
· nth_rw 2 [add_comm]
exact dualPDeriv Complex.I
repeat
apply fun v ↦ (partialDeriv_contDiffAt h₁ v).differentiableAt le_rfl
apply fun v ↦ (partialDeriv_contDiffAt h₂ v).differentiableAt le_rfl
theorem laplace_smul {f : → F} : ∀ v : , Δ (v • f) = v • (Δ f) := by theorem laplace_smul {f : → F} : ∀ v : , Δ (v • f) = v • (Δ f) := by
intro v intro v

View File

@ -28,6 +28,16 @@ theorem partialDeriv_eventuallyEq'
simp 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
unfold partialDeriv
rw [Filter.EventuallyEq.fderiv_eq h]
exact fun v => rfl
theorem partialDeriv_smul₁ {f : E → F} {a : 𝕜} {v : E} : partialDeriv 𝕜 (a • v) f = a • partialDeriv 𝕜 v f := by theorem partialDeriv_smul₁ {f : E → F} {a : 𝕜} {v : E} : partialDeriv 𝕜 (a • v) f = a • partialDeriv 𝕜 v f := by
unfold partialDeriv unfold partialDeriv
conv => conv =>
@ -177,7 +187,12 @@ theorem partialDeriv_contDiff {n : } {f : E → F} (h : ContDiff 𝕜 (n + 1)
exact contDiff_const exact contDiff_const
theorem partialDeriv_contDiffAt {n : } {f : E → F} {x : E} (h : ContDiffAt 𝕜 (n + 1) f x) : ∀ v : E, ContDiffAt 𝕜 n (partialDeriv 𝕜 v f) x := by theorem partialDeriv_contDiffAt
{n : }
{f : E → F}
{x : E}
(h : ContDiffAt 𝕜 (n + 1) f x) :
∀ v : E, ContDiffAt 𝕜 n (partialDeriv 𝕜 v f) x := by
unfold partialDeriv unfold partialDeriv
intro v intro v
@ -253,12 +268,6 @@ lemma partialDeriv_fderivAt
exact differentiableAt_const a exact differentiableAt_const a
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
rw [Filter.EventuallyEq.fderiv_eq h]
exact fun v => rfl
section restrictScalars section restrictScalars
theorem partialDeriv_smul'₂ theorem partialDeriv_smul'₂