nevanlinna/nevanlinna/cauchyRiemann.lean

126 lines
4.2 KiB
Plaintext
Raw Normal View History

2024-04-29 10:19:21 +02:00
import Mathlib.Analysis.Calculus.Conformal.NormedSpace
2024-04-28 21:09:38 +02:00
import Mathlib.Analysis.Calculus.ContDiff.Basic
2024-04-29 10:19:21 +02:00
import Mathlib.Analysis.Calculus.ContDiff.Defs
2024-04-28 21:09:38 +02:00
import Mathlib.Analysis.Calculus.Deriv.Linear
import Mathlib.Analysis.Calculus.FDeriv.Basic
2024-04-29 10:19:21 +02:00
import Mathlib.Analysis.Calculus.FDeriv.Comp
import Mathlib.Analysis.Calculus.FDeriv.Linear
2024-04-28 21:09:38 +02:00
import Mathlib.Analysis.Calculus.FDeriv.RestrictScalars
2024-04-29 10:19:21 +02:00
import Mathlib.Analysis.Calculus.LineDeriv.Basic
import Mathlib.Analysis.Complex.Basic
import Mathlib.Analysis.Complex.CauchyIntegral
import Mathlib.Analysis.Complex.Conformal
import Mathlib.Analysis.Complex.RealDeriv
2024-04-28 21:09:38 +02:00
2024-04-29 10:19:21 +02:00
variable {z : } {f : }
2024-04-28 21:09:38 +02:00
2024-04-29 10:19:21 +02:00
theorem CauchyRiemann₁ : (DifferentiableAt f z)
→ (fderiv f z) Complex.I = Complex.I * (fderiv f z) 1 := by
intro h
2024-04-28 21:09:38 +02:00
let A := fderiv f z
2024-04-29 08:54:28 +02:00
have t₁ : A (Complex.I • 1) = Complex.I • (A 1) := by
2024-04-28 21:09:38 +02:00
exact ContinuousLinearMap.map_smul_of_tower A Complex.I 1
let AR := (ContinuousLinearMap.restrictScalars (fderiv f z))
2024-04-29 08:54:28 +02:00
have t₂ : AR (Complex.I • 1) = Complex.I • (AR 1) := by
exact t₁
have t₂a : Complex.I * (AR 1) = Complex.I • (AR 1) := by
exact rfl
rw [← t₂a] at t₂
have t₂b : Complex.I • 1 = Complex.I := by
simp
have t₂c : AR Complex.I = Complex.I • (AR 1) := by
simp at t₂
exact t₂
let C : HasFDerivAt f (ContinuousLinearMap.restrictScalars (fderiv f z)) z := h.hasFDerivAt.restrictScalars
have t₃ : fderiv f z = ContinuousLinearMap.restrictScalars (fderiv f z) := by
exact DifferentiableAt.fderiv_restrictScalars h
rw [t₃]
exact t₂c
2024-04-29 10:19:21 +02:00
theorem CauchyRiemann₂ : (DifferentiableAt f z)
→ lineDeriv f z Complex.I = Complex.I * lineDeriv f z 1 := by
intro h
have : lineDeriv f z Complex.I = (fderiv f z) Complex.I := by
apply DifferentiableAt.lineDeriv_eq_fderiv
apply h.restrictScalars
rw [this]
have : lineDeriv f z 1 = (fderiv f z) 1 := by
apply DifferentiableAt.lineDeriv_eq_fderiv
apply h.restrictScalars
rw [this]
exact CauchyRiemann₁ h
theorem CauchyRiemann₃ : (DifferentiableAt f z)
→ lineDeriv (Complex.reCLM ∘ f) z 1 = lineDeriv (Complex.imCLM ∘ f) z Complex.I := by
-- Proof starts here
intro h
have t₀₀ : DifferentiableAt f z := by
exact h.restrictScalars
have t₀₁ : DifferentiableAt Complex.reCLM (f z) := by
have : ∀ w, DifferentiableAt Complex.reCLM w := by
intro w
refine Differentiable.differentiableAt ?h
exact ContinuousLinearMap.differentiable (Complex.reCLM : →L[] )
exact this (f z)
have t₁ : DifferentiableAt (Complex.reCLM ∘ f) z := by
apply t₀₁.comp
exact t₀₀
have t₂ : lineDeriv (Complex.reCLM ∘ f) z 1 = (fderiv (Complex.reCLM ∘ f) z) 1 := by
apply DifferentiableAt.lineDeriv_eq_fderiv
exact t₁
rw [t₂]
have s₀₀ : DifferentiableAt f z := by
exact h.restrictScalars
have s₀₁ : DifferentiableAt Complex.imCLM (f z) := by
have : ∀ w, DifferentiableAt Complex.imCLM w := by
intro w
apply Differentiable.differentiableAt
exact ContinuousLinearMap.differentiable (Complex.imCLM : →L[] )
exact this (f z)
have s₁ : DifferentiableAt (Complex.im ∘ f) z := by
apply s₀₁.comp
exact s₀₀
have s₂ : lineDeriv (Complex.imCLM ∘ f) z Complex.I = (fderiv (Complex.imCLM ∘ f) z) Complex.I := by
apply DifferentiableAt.lineDeriv_eq_fderiv
exact s₁
rw [s₂]
rw [fderiv.comp, fderiv.comp]
simp
rw [CauchyRiemann₁ h]
have u₁ : ∀ w, fderiv Complex.reCLM w = Complex.reCLM := by
exact fun w => ContinuousLinearMap.fderiv Complex.reCLM
--rw [u₁ (f z)]
have u₂ : ∀ w, fderiv Complex.imCLM w = Complex.imCLM := by
exact fun w => ContinuousLinearMap.fderiv Complex.imCLM
-- rw [u₂ (f z)]
rw [Complex.I_mul]
-- DifferentiableAt Complex.im (f z)
exact Complex.imCLM.differentiableAt
-- DifferentiableAt f z
exact t₀₀
-- DifferentiableAt Complex.re (f z)
exact Complex.reCLM.differentiableAt
-- DifferentiableAt f z
exact t₀₀