Big cleanup

This commit is contained in:
Stefan Kebekus 2024-05-07 12:13:28 +02:00
parent a1910c3a72
commit b26256d84e
3 changed files with 71 additions and 88 deletions

View File

@ -1,5 +1,6 @@
import Mathlib.Analysis.Calculus.LineDeriv.Basic import Mathlib.Analysis.Calculus.LineDeriv.Basic
import Mathlib.Analysis.Complex.RealDeriv import Mathlib.Analysis.Complex.RealDeriv
import Nevanlinna.partialDeriv
variable {z : } {f : } variable {z : } {f : }
@ -41,3 +42,23 @@ theorem CauchyRiemann₃ : (DifferentiableAt f z)
rw [ContinuousLinearMap.comp_lineDeriv] rw [ContinuousLinearMap.comp_lineDeriv]
rw [CauchyRiemann₁ h, Complex.I_mul] rw [CauchyRiemann₁ h, Complex.I_mul]
simp simp
theorem CauchyRiemann₄ {f : } : (Differentiable f)
→ Real.partialDeriv Complex.I f = Complex.I • Real.partialDeriv 1 f := by
intro h
unfold Real.partialDeriv
conv =>
left
intro w
rw [DifferentiableAt.fderiv_restrictScalars (h w)]
simp
rw [← mul_one Complex.I]
rw [← smul_eq_mul]
rw [ContinuousLinearMap.map_smul_of_tower (fderiv f w) Complex.I 1]
conv =>
right
right
intro w
rw [DifferentiableAt.fderiv_restrictScalars (h w)]

View File

@ -8,25 +8,6 @@ import Mathlib.Analysis.Calculus.FDeriv.Symmetric
import Nevanlinna.cauchyRiemann import Nevanlinna.cauchyRiemann
import Nevanlinna.partialDeriv import Nevanlinna.partialDeriv
theorem CauchyRiemann₄ {f : } : (Differentiable f)
→ Real.partialDeriv Complex.I f = Complex.I • Real.partialDeriv 1 f := by
intro h
unfold Real.partialDeriv
conv =>
left
intro w
rw [DifferentiableAt.fderiv_restrictScalars (h w)]
simp
rw [← mul_one Complex.I]
rw [← smul_eq_mul]
rw [ContinuousLinearMap.map_smul_of_tower (fderiv f w) Complex.I 1]
conv =>
right
right
intro w
rw [DifferentiableAt.fderiv_restrictScalars (h w)]
noncomputable def Complex.laplace : () → () := by noncomputable def Complex.laplace : () → () := by
intro f intro f
@ -41,37 +22,6 @@ def Harmonic (f : ) : Prop :=
(ContDiff 2 f) ∧ (∀ z, Complex.laplace f z = 0) (ContDiff 2 f) ∧ (∀ z, Complex.laplace f z = 0)
lemma derivSymm (f : ) (hf : ContDiff 2 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' := fderiv f
have h₀ : ∀ y, HasFDerivAt f (f' y) y := by
have h : Differentiable f := by
exact (contDiff_succ_iff_fderiv.1 hf).left
exact fun y => DifferentiableAt.hasFDerivAt (h y)
let f'' := (fderiv f' z)
have h₁ : HasFDerivAt f' f'' z := by
apply DifferentiableAt.hasFDerivAt
let A := (contDiff_succ_iff_fderiv.1 hf).right
let B := (contDiff_succ_iff_fderiv.1 A).left
simp at B
exact B z
let A := second_derivative_symmetric h₀ h₁ a b
dsimp [f'', f'] at A
apply A
lemma l₂ {f : } (hf : ContDiff 2 f) (z a b : ) :
fderiv (fderiv f) z b a = fderiv (fun w ↦ fderiv f w a) z b := by
rw [fderiv_clm_apply]
· simp
· exact (contDiff_succ_iff_fderiv.1 hf).2.differentiable le_rfl z
· simp
theorem holomorphic_is_harmonic {f : } (h : Differentiable f) : theorem holomorphic_is_harmonic {f : } (h : Differentiable f) :
Harmonic f := by Harmonic f := by

View File

@ -5,16 +5,16 @@ import Mathlib.Analysis.Calculus.LineDeriv.Basic
import Mathlib.Analysis.Calculus.ContDiff.Basic import Mathlib.Analysis.Calculus.ContDiff.Basic
import Mathlib.Analysis.Calculus.ContDiff.Defs import Mathlib.Analysis.Calculus.ContDiff.Defs
import Mathlib.Analysis.Calculus.FDeriv.Basic import Mathlib.Analysis.Calculus.FDeriv.Basic
import Mathlib.Analysis.Calculus.FDeriv.Comp
import Mathlib.Analysis.Calculus.FDeriv.Linear
import Mathlib.Analysis.Calculus.FDeriv.Symmetric import Mathlib.Analysis.Calculus.FDeriv.Symmetric
noncomputable def Real.partialDeriv : → () → () := by noncomputable def Real.partialDeriv : → () → () :=
intro v fun v ↦ (fun f ↦ (fun w ↦ fderiv f w v))
intro f
exact fun w ↦ (fderiv f w) v
theorem partialDeriv_smul {f : } {a v : } (h : Differentiable f) : Real.partialDeriv v (a • f) = a • Real.partialDeriv v f := by theorem partialDeriv_smul {f : } {a v : } (h : Differentiable f) : Real.partialDeriv v (a • f) = a • Real.partialDeriv v f := by
unfold Real.partialDeriv unfold Real.partialDeriv
have : a • f = fun y ↦ a • f y := by rfl have : a • f = fun y ↦ a • f y := by rfl
@ -26,6 +26,30 @@ theorem partialDeriv_smul {f : } {a v : } (h : Differentiable
rw [fderiv_const_smul (h w)] rw [fderiv_const_smul (h w)]
theorem partialDeriv_add {f₁ f₂ : } {v : } (h₁ : Differentiable f₁) (h₂ : Differentiable f₂) : Real.partialDeriv v (f₁ + f₂) = (Real.partialDeriv v f₁) + (Real.partialDeriv v f₂) := by
unfold Real.partialDeriv
have : f₁ + f₂ = fun y ↦ f₁ y + f₂ y := by rfl
rw [this]
conv =>
left
intro w
left
rw [fderiv_add (h₁ w) (h₂ w)]
theorem partialDeriv_compLin {f : } {l : →L[] } {v : } (h : Differentiable f) : Real.partialDeriv v (l ∘ f) = l ∘ Real.partialDeriv v f := by
unfold Real.partialDeriv
conv =>
left
intro w
left
rw [fderiv.comp w (ContinuousLinearMap.differentiableAt l) (h w)]
simp
rfl
theorem partialDeriv_contDiff {n : } {f : } (h : ContDiff (n + 1) f) : ∀ v : , ContDiff n (Real.partialDeriv v f) := by theorem partialDeriv_contDiff {n : } {f : } (h : ContDiff (n + 1) f) : ∀ v : , ContDiff n (Real.partialDeriv v f) := by
unfold Real.partialDeriv unfold Real.partialDeriv
intro v intro v
@ -44,50 +68,38 @@ theorem partialDeriv_contDiff {n : } {f : } (h : ContDiff (n +
exact contDiff_const exact contDiff_const
lemma l₂ {f : } (hf : ContDiff 2 f) (z a b : ) : lemma partialDeriv_fderiv {f : } (hf : ContDiff 2 f) (z a b : ) :
fderiv (fderiv f) z b a = fderiv (fun w ↦ fderiv f w a) z b := by fderiv (fderiv f) z b a = Real.partialDeriv b (Real.partialDeriv a f) z := by
unfold Real.partialDeriv
rw [fderiv_clm_apply] rw [fderiv_clm_apply]
· simp · simp
· exact (contDiff_succ_iff_fderiv.1 hf).2.differentiable le_rfl z · exact (contDiff_succ_iff_fderiv.1 hf).2.differentiable le_rfl z
· simp · simp
lemma derivSymm (f : ) (hf : ContDiff 2 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' := fderiv f
have h₀ : ∀ y, HasFDerivAt f (f' y) y := by
have h : Differentiable f := by
exact (contDiff_succ_iff_fderiv.1 hf).left
exact fun y => DifferentiableAt.hasFDerivAt (h y)
let f'' := (fderiv f' z)
have h₁ : HasFDerivAt f' f'' z := by
apply DifferentiableAt.hasFDerivAt
let A := (contDiff_succ_iff_fderiv.1 hf).right
let B := (contDiff_succ_iff_fderiv.1 A).left
simp at B
exact B z
let A := second_derivative_symmetric h₀ h₁ a b
dsimp [f'', f'] at A
apply A
theorem partialDeriv_comm {f : } (h : ContDiff 2 f) : theorem partialDeriv_comm {f : } (h : ContDiff 2 f) :
∀ v₁ v₂ : , Real.partialDeriv v₁ (Real.partialDeriv v₂ f) = Real.partialDeriv v₂ (Real.partialDeriv v₁ f) := by ∀ v₁ v₂ : , Real.partialDeriv v₁ (Real.partialDeriv v₂ f) = Real.partialDeriv v₂ (Real.partialDeriv v₁ f) := by
intro v₁ v₂ intro v₁ v₂
unfold Real.partialDeriv
funext z funext z
conv => have derivSymm :
left (fderiv (fun w => fderiv f w) z) v₁ v₂ = (fderiv (fun w => fderiv f w) z) v₂ v₁ := by
rw [← l₂ h z v₂ v₁]
rw [derivSymm f h z v₁ v₂] let f' := fderiv f
have h₀ : ∀ y, HasFDerivAt f (f' y) y := by
intro y
exact DifferentiableAt.hasFDerivAt ((h.differentiable one_le_two) y)
conv => let f'' := (fderiv f' z)
left have h₁ : HasFDerivAt f' f'' z := by
rw [l₂ h z v₁ v₂] apply DifferentiableAt.hasFDerivAt
apply (contDiff_succ_iff_fderiv.1 h).right.differentiable (Submonoid.oneLE.proof_2 ℕ∞)
apply second_derivative_symmetric h₀ h₁ v₁ v₂
rw [← partialDeriv_fderiv h z v₂ v₁]
rw [derivSymm]
rw [partialDeriv_fderiv h z v₁ v₂]