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-04-30 08:20:57 +02:00
|
|
|
|
import Nevanlinna.cauchyRiemann
|
|
|
|
|
|
2024-05-02 21:09:38 +02:00
|
|
|
|
noncomputable def Complex.laplace : (ℂ → ℂ) → (ℂ → ℂ) := by
|
2024-04-30 08:20:57 +02:00
|
|
|
|
intro f
|
|
|
|
|
|
2024-05-03 12:23:09 +02:00
|
|
|
|
let fx := fun w ↦ (fderiv ℝ f w) 1
|
|
|
|
|
let fxx := fun w ↦ (fderiv ℝ fx w) 1
|
|
|
|
|
let fy := fun w ↦ (fderiv ℝ f w) Complex.I
|
|
|
|
|
let fyy := fun w ↦ (fderiv ℝ fy w) Complex.I
|
2024-05-02 21:09:38 +02:00
|
|
|
|
exact fun z ↦ (fxx z) + (fyy z)
|
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-03 15:54:51 +02:00
|
|
|
|
lemma zwoDiff (f : ℝ × ℝ → ℝ) (h : ContDiff ℝ 2 f) : ∀ z a b : ℝ × ℝ, 0 = 1 := by
|
2024-05-03 12:23:09 +02:00
|
|
|
|
intro z a b
|
|
|
|
|
|
2024-05-03 15:54:51 +02:00
|
|
|
|
let fx := fun w ↦ (fderiv ℝ f w) a
|
|
|
|
|
let fxx := fun w ↦ (fderiv ℝ fx w) a
|
|
|
|
|
let f2 := (fderiv ℝ (fun w => fderiv ℝ f w) z) a a
|
2024-05-03 12:23:09 +02:00
|
|
|
|
|
2024-05-03 15:54:51 +02:00
|
|
|
|
have : iteratedFDeriv ℝ 1 f z ![a] = 0 := by
|
|
|
|
|
rw [iteratedFDeriv_succ_apply_left]
|
2024-05-03 12:23:09 +02:00
|
|
|
|
simp
|
2024-05-03 15:54:51 +02:00
|
|
|
|
let g := iteratedFDeriv ℝ 0 f
|
|
|
|
|
simp at g
|
2024-05-03 12:23:09 +02:00
|
|
|
|
sorry
|
|
|
|
|
|
|
|
|
|
have : f2 = fxx z := by
|
|
|
|
|
dsimp [f2, fxx, fx]
|
|
|
|
|
|
|
|
|
|
sorry
|
|
|
|
|
|
|
|
|
|
sorry
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lemma derivSymm (f : ℂ → ℂ) (h : Differentiable ℝ f) :
|
|
|
|
|
∀ z a b : ℂ, (fderiv ℝ (fun w => fderiv ℝ f w) z) a b = (fderiv ℝ (fun w => fderiv ℝ f w) z) b a := by
|
|
|
|
|
intro z a b
|
|
|
|
|
|
|
|
|
|
let f' := fun w => (fderiv ℝ f w)
|
|
|
|
|
have h₀ : ∀ y, HasFDerivAt f (f' y) y := by
|
|
|
|
|
exact fun y => DifferentiableAt.hasFDerivAt (h y)
|
|
|
|
|
|
|
|
|
|
let f'' := (fderiv ℝ f' z)
|
|
|
|
|
have h₁ : HasFDerivAt f' f'' z := by
|
|
|
|
|
apply DifferentiableAt.hasFDerivAt
|
|
|
|
|
sorry
|
|
|
|
|
|
|
|
|
|
let A := second_derivative_symmetric h₀ h₁ a b
|
|
|
|
|
dsimp [f'', f'] at A
|
|
|
|
|
apply A
|
2024-05-02 09:48:26 +02:00
|
|
|
|
|
2024-05-06 09:01:43 +02:00
|
|
|
|
|
|
|
|
|
theorem holomorphic_is_harmonic (f : ℂ → ℂ) :
|
2024-05-02 21:09:38 +02:00
|
|
|
|
Differentiable ℂ f → Harmonic f := by
|
2024-04-30 08:20:57 +02:00
|
|
|
|
|
|
|
|
|
intro h
|
|
|
|
|
|
|
|
|
|
constructor
|
2024-05-06 09:01:43 +02:00
|
|
|
|
· -- f is two times real continuously differentiable
|
2024-05-02 21:09:38 +02:00
|
|
|
|
exact ContDiff.restrict_scalars ℝ (Differentiable.contDiff h)
|
2024-04-30 08:20:57 +02:00
|
|
|
|
|
|
|
|
|
· -- Laplace of f is zero
|
|
|
|
|
intro z
|
|
|
|
|
unfold Complex.laplace
|
2024-05-03 12:23:09 +02:00
|
|
|
|
|
2024-04-30 08:20:57 +02:00
|
|
|
|
simp
|
|
|
|
|
|
2024-05-02 21:09:38 +02:00
|
|
|
|
conv =>
|
|
|
|
|
left
|
|
|
|
|
right
|
|
|
|
|
arg 1
|
|
|
|
|
arg 2
|
|
|
|
|
intro z
|
|
|
|
|
rw [CauchyRiemann₁ (h z)]
|
2024-05-03 12:23:09 +02:00
|
|
|
|
|
2024-05-02 21:09:38 +02:00
|
|
|
|
have t₀ : ∀ z, DifferentiableAt ℝ (fun w => (fderiv ℝ f w) 1) z := by
|
|
|
|
|
intro z
|
2024-05-03 12:23:09 +02:00
|
|
|
|
|
2024-05-02 21:09:38 +02:00
|
|
|
|
sorry
|
|
|
|
|
|
|
|
|
|
have t₁ : ∀ x, (fderiv ℝ (fun w => Complex.I * (fderiv ℝ f w) 1) z) x
|
|
|
|
|
= Complex.I * ((fderiv ℝ (fun w => (fderiv ℝ f w) 1) z) x) := by
|
|
|
|
|
intro x
|
|
|
|
|
rw [fderiv_const_mul]
|
|
|
|
|
simp
|
|
|
|
|
exact t₀ z
|
|
|
|
|
rw [t₁]
|
2024-05-03 12:23:09 +02:00
|
|
|
|
|
|
|
|
|
have t₂₀ : Differentiable ℝ f := by sorry
|
|
|
|
|
have t₂ : (fderiv ℝ (fun w => (fderiv ℝ f w) 1) z) Complex.I
|
2024-05-02 21:09:38 +02:00
|
|
|
|
= (fderiv ℝ (fun w => (fderiv ℝ f w) Complex.I) z) 1 := by
|
2024-05-03 12:23:09 +02:00
|
|
|
|
let A := derivSymm f t₂₀ z 1 Complex.I
|
|
|
|
|
|
2024-05-02 21:09:38 +02:00
|
|
|
|
sorry
|
|
|
|
|
rw [t₂]
|
|
|
|
|
|
|
|
|
|
conv =>
|
|
|
|
|
left
|
|
|
|
|
right
|
|
|
|
|
arg 2
|
|
|
|
|
arg 1
|
|
|
|
|
arg 2
|
|
|
|
|
intro z
|
|
|
|
|
rw [CauchyRiemann₁ (h z)]
|
2024-05-03 12:23:09 +02:00
|
|
|
|
|
2024-05-02 21:09:38 +02:00
|
|
|
|
rw [t₁]
|
2024-05-03 12:23:09 +02:00
|
|
|
|
|
2024-05-02 21:09:38 +02:00
|
|
|
|
rw [← mul_assoc]
|
|
|
|
|
simp
|