2024-05-03 15:54:51 +02:00
|
|
|
|
import Mathlib.Data.Fin.Tuple.Basic
|
2024-04-30 08:20:57 +02:00
|
|
|
|
import Mathlib.Analysis.Complex.Basic
|
2024-05-02 09:48:26 +02:00
|
|
|
|
import Mathlib.Analysis.Complex.TaylorSeries
|
2024-04-30 08:20:57 +02:00
|
|
|
|
import Mathlib.Analysis.Calculus.LineDeriv.Basic
|
|
|
|
|
import Mathlib.Analysis.Calculus.ContDiff.Defs
|
|
|
|
|
import Mathlib.Analysis.Calculus.FDeriv.Basic
|
2024-05-02 21:09:38 +02:00
|
|
|
|
import Mathlib.Analysis.Calculus.FDeriv.Symmetric
|
2024-05-08 08:27:12 +02:00
|
|
|
|
import Mathlib.Data.Complex.Module
|
|
|
|
|
import Mathlib.Data.Complex.Order
|
|
|
|
|
import Mathlib.Data.Complex.Exponential
|
|
|
|
|
import Mathlib.Analysis.RCLike.Basic
|
|
|
|
|
import Mathlib.Topology.Algebra.InfiniteSum.Module
|
|
|
|
|
import Mathlib.Topology.Instances.RealVectorSpace
|
2024-04-30 08:20:57 +02:00
|
|
|
|
import Nevanlinna.cauchyRiemann
|
2024-05-07 09:49:56 +02:00
|
|
|
|
import Nevanlinna.partialDeriv
|
2024-05-07 07:08:23 +02:00
|
|
|
|
|
2024-04-30 08:20:57 +02:00
|
|
|
|
|
2024-05-07 07:08:23 +02:00
|
|
|
|
noncomputable def Complex.laplace : (ℂ → ℂ) → (ℂ → ℂ) := by
|
|
|
|
|
intro f
|
|
|
|
|
let fx := Real.partialDeriv 1 f
|
|
|
|
|
let fxx := Real.partialDeriv 1 fx
|
2024-05-07 09:49:56 +02:00
|
|
|
|
let fy := Real.partialDeriv Complex.I f
|
2024-05-07 07:08:23 +02:00
|
|
|
|
let fyy := Real.partialDeriv Complex.I fy
|
|
|
|
|
exact fxx + fyy
|
2024-04-30 08:20:57 +02:00
|
|
|
|
|
2024-05-02 21:09:38 +02:00
|
|
|
|
|
|
|
|
|
def Harmonic (f : ℂ → ℂ) : Prop :=
|
2024-04-30 08:20:57 +02:00
|
|
|
|
(ContDiff ℝ 2 f) ∧ (∀ z, Complex.laplace f z = 0)
|
|
|
|
|
|
2024-05-03 12:23:09 +02:00
|
|
|
|
|
2024-05-06 17:01:10 +02:00
|
|
|
|
theorem holomorphic_is_harmonic {f : ℂ → ℂ} (h : Differentiable ℂ f) :
|
|
|
|
|
Harmonic f := by
|
|
|
|
|
|
|
|
|
|
-- f is real C²
|
|
|
|
|
have f_is_real_C2 : ContDiff ℝ 2 f :=
|
|
|
|
|
ContDiff.restrict_scalars ℝ (Differentiable.contDiff h)
|
|
|
|
|
|
2024-05-07 09:49:56 +02:00
|
|
|
|
have fI_is_real_differentiable : Differentiable ℝ (Real.partialDeriv 1 f) := by
|
2024-05-07 10:16:23 +02:00
|
|
|
|
exact (partialDeriv_contDiff f_is_real_C2 1).differentiable (Submonoid.oneLE.proof_2 ℕ∞)
|
2024-04-30 08:20:57 +02:00
|
|
|
|
|
|
|
|
|
constructor
|
2024-05-06 09:01:43 +02:00
|
|
|
|
· -- f is two times real continuously differentiable
|
2024-05-06 17:01:10 +02:00
|
|
|
|
exact f_is_real_C2
|
2024-04-30 08:20:57 +02:00
|
|
|
|
|
|
|
|
|
· -- Laplace of f is zero
|
|
|
|
|
unfold Complex.laplace
|
2024-05-07 07:08:23 +02:00
|
|
|
|
rw [CauchyRiemann₄ h]
|
2024-05-08 07:15:34 +02:00
|
|
|
|
|
2024-05-08 08:27:12 +02:00
|
|
|
|
have : ∀ v, ∀ s : ℂ, ∀ g : ℂ → ℂ, Differentiable ℝ g → Real.partialDeriv v (s • g) = s • (Real.partialDeriv v g) := by
|
|
|
|
|
intro v s g hg
|
|
|
|
|
|
|
|
|
|
let sMuls : ℂ →L[ℝ] ℂ :=
|
|
|
|
|
{
|
|
|
|
|
toFun := fun x ↦ s * x
|
|
|
|
|
map_add' := by
|
|
|
|
|
intro x y
|
|
|
|
|
ring
|
|
|
|
|
map_smul' := by
|
|
|
|
|
intro m x
|
|
|
|
|
simp
|
|
|
|
|
ring
|
|
|
|
|
}
|
2024-05-08 07:15:34 +02:00
|
|
|
|
|
2024-05-08 08:27:12 +02:00
|
|
|
|
have : s • g = sMuls ∘ g := by rfl
|
|
|
|
|
rw [this]
|
|
|
|
|
rw [partialDeriv_compContLin hg]
|
|
|
|
|
rfl
|
2024-05-08 07:15:34 +02:00
|
|
|
|
|
2024-05-08 08:27:12 +02:00
|
|
|
|
rw [this]
|
2024-05-07 10:16:23 +02:00
|
|
|
|
rw [partialDeriv_comm f_is_real_C2 Complex.I 1]
|
|
|
|
|
rw [CauchyRiemann₄ h]
|
2024-05-08 08:27:12 +02:00
|
|
|
|
rw [this]
|
2024-05-07 10:16:23 +02:00
|
|
|
|
rw [← smul_assoc]
|
2024-05-02 21:09:38 +02:00
|
|
|
|
simp
|
2024-05-08 08:27:12 +02:00
|
|
|
|
|
|
|
|
|
-- 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
|