nevanlinna/Nevanlinna/laplace.lean

124 lines
4.3 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import Mathlib.Data.Fin.Tuple.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.Instances.RealVectorSpace
import Nevanlinna.cauchyRiemann
import Nevanlinna.partialDeriv
variable {F : Type*} [NormedAddCommGroup F] [NormedSpace F]
variable {G : Type*} [NormedAddCommGroup G] [NormedSpace G]
noncomputable def Complex.laplace : ( → F) → ( → F) :=
fun f ↦ partialDeriv 1 (partialDeriv 1 f) + partialDeriv Complex.I (partialDeriv Complex.I f)
theorem laplace_add {f₁ f₂ : → F} (h₁ : ContDiff 2 f₁) (h₂ : ContDiff 2 f₂): Complex.laplace (f₁ + f₂) = (Complex.laplace f₁) + (Complex.laplace f₂) := by
unfold Complex.laplace
rw [partialDeriv_add₂]
rw [partialDeriv_add₂]
rw [partialDeriv_add₂]
rw [partialDeriv_add₂]
exact
add_add_add_comm (partialDeriv 1 (partialDeriv 1 f₁))
(partialDeriv 1 (partialDeriv 1 f₂))
(partialDeriv Complex.I (partialDeriv Complex.I f₁))
(partialDeriv Complex.I (partialDeriv Complex.I f₂))
exact (partialDeriv_contDiff h₁ Complex.I).differentiable le_rfl
exact (partialDeriv_contDiff h₂ Complex.I).differentiable le_rfl
exact h₁.differentiable one_le_two
exact h₂.differentiable one_le_two
exact (partialDeriv_contDiff h₁ 1).differentiable le_rfl
exact (partialDeriv_contDiff h₂ 1).differentiable le_rfl
exact h₁.differentiable one_le_two
exact h₂.differentiable one_le_two
theorem laplace_smul {f : → F} (h : ContDiff 2 f) : ∀ v : , Complex.laplace (v • f) = v • (Complex.laplace f) := by
intro v
unfold Complex.laplace
rw [partialDeriv_smul₂]
rw [partialDeriv_smul₂]
rw [partialDeriv_smul₂]
rw [partialDeriv_smul₂]
simp
exact (partialDeriv_contDiff h Complex.I).differentiable le_rfl
exact h.differentiable one_le_two
exact (partialDeriv_contDiff h 1).differentiable le_rfl
exact h.differentiable one_le_two
theorem laplace_compContLin {f : → F} {l : F →L[] G} (h : ContDiff 2 f) :
Complex.laplace (l ∘ f) = l ∘ (Complex.laplace f) := by
unfold Complex.laplace
rw [partialDeriv_compContLin]
rw [partialDeriv_compContLin]
rw [partialDeriv_compContLin]
rw [partialDeriv_compContLin]
simp
exact (partialDeriv_contDiff h Complex.I).differentiable le_rfl
exact h.differentiable one_le_two
exact (partialDeriv_contDiff h 1).differentiable le_rfl
exact h.differentiable one_le_two
theorem laplace_compContLinAt {f : → F} {l : F →L[] G} {x : } (h : ContDiffAt 2 f x) :
Complex.laplace (l ∘ f) x = (l ∘ (Complex.laplace f)) x := by
have A₂ : ∃ v ∈ nhds x, (IsOpen v) ∧ (x ∈ v) ∧ (ContDiffOn 2 f v) := by
sorry
obtain ⟨v, hv₁, hv₂, hv₃, hv₄⟩ := A₂
have D : ∀ w : , partialDeriv w (l ∘ f) =ᶠ[nhds x] l ∘ partialDeriv w (f) := by
intro w
apply Filter.eventuallyEq_iff_exists_mem.2
use v
constructor
· exact IsOpen.mem_nhds hv₂ hv₃
· intro y hy
apply partialDeriv_compContLinAt
let V := ContDiffOn.differentiableOn hv₄ one_le_two
apply DifferentiableOn.differentiableAt V
apply IsOpen.mem_nhds
assumption
assumption
unfold Complex.laplace
simp
rw [partialDeriv_eventuallyEq (D 1) 1]
rw [partialDeriv_compContLinAt]
rw [partialDeriv_eventuallyEq (D Complex.I) Complex.I]
rw [partialDeriv_compContLinAt]
simp
-- DifferentiableAt (partialDeriv Complex.I f) x
unfold partialDeriv
sorry
-- DifferentiableAt (partialDeriv 1 f) x
sorry
theorem laplace_compCLE {f : → F} {l : F ≃L[] G} (h : ContDiff 2 f) :
Complex.laplace (l ∘ f) = l ∘ (Complex.laplace f) := by
let l' := (l : F →L[] G)
have : Complex.laplace (l' ∘ f) = l' ∘ (Complex.laplace f) := by
exact laplace_compContLin h
exact this