nevanlinna/Nevanlinna/complexHarmonic.lean

121 lines
3.0 KiB
Plaintext
Raw Normal View History

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
#check second_derivative_symmetric
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
theorem re_comp_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-02 09:48:26 +02:00
· -- Complex.reCLM ∘ 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