2024-04-28 21:17:45 +02:00
|
|
|
|
import Mathlib.Analysis.Calculus.LineDeriv.Basic
|
|
|
|
|
import Mathlib.Analysis.Complex.RealDeriv
|
2024-05-07 12:13:28 +02:00
|
|
|
|
import Nevanlinna.partialDeriv
|
2024-04-28 21:09:38 +02:00
|
|
|
|
|
|
|
|
|
variable {z : ℂ} {f : ℂ → ℂ}
|
|
|
|
|
|
2024-05-06 09:01:43 +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-29 19:48:37 +02:00
|
|
|
|
rw [DifferentiableAt.fderiv_restrictScalars ℝ h]
|
|
|
|
|
nth_rewrite 1 [← mul_one Complex.I]
|
|
|
|
|
exact ContinuousLinearMap.map_smul_of_tower (fderiv ℂ f z) Complex.I 1
|
2024-04-29 10:19:21 +02:00
|
|
|
|
|
2024-05-06 09:01:43 +02:00
|
|
|
|
|
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
|
2024-04-29 19:48:37 +02:00
|
|
|
|
rw [DifferentiableAt.lineDeriv_eq_fderiv (h.restrictScalars ℝ)]
|
|
|
|
|
rw [DifferentiableAt.lineDeriv_eq_fderiv (h.restrictScalars ℝ)]
|
2024-04-29 10:19:21 +02:00
|
|
|
|
exact CauchyRiemann₁ h
|
|
|
|
|
|
2024-05-06 09:01:43 +02:00
|
|
|
|
|
2024-04-29 10:19:21 +02:00
|
|
|
|
theorem CauchyRiemann₃ : (DifferentiableAt ℂ f z)
|
2024-04-29 14:19:58 +02:00
|
|
|
|
→ (lineDeriv ℝ (Complex.reCLM ∘ f) z 1 = lineDeriv ℝ (Complex.imCLM ∘ f) z Complex.I)
|
|
|
|
|
∧ (lineDeriv ℝ (Complex.reCLM ∘ f) z Complex.I = -lineDeriv ℝ (Complex.imCLM ∘ f) z 1)
|
|
|
|
|
:= by
|
2024-04-29 10:19:21 +02:00
|
|
|
|
|
|
|
|
|
intro h
|
|
|
|
|
|
2024-04-29 20:53:47 +02:00
|
|
|
|
have ContinuousLinearMap.comp_lineDeriv : ∀ w : ℂ, ∀ l : ℂ →L[ℝ] ℝ, lineDeriv ℝ (l ∘ f) z w = l ((fderiv ℝ f z) w) := by
|
|
|
|
|
intro w l
|
|
|
|
|
rw [DifferentiableAt.lineDeriv_eq_fderiv]
|
|
|
|
|
rw [fderiv.comp]
|
2024-04-29 14:19:58 +02:00
|
|
|
|
simp
|
2024-04-29 20:53:47 +02:00
|
|
|
|
fun_prop
|
2024-04-30 06:52:41 +02:00
|
|
|
|
exact h.restrictScalars ℝ
|
2024-04-29 20:53:47 +02:00
|
|
|
|
apply (ContinuousLinearMap.differentiableAt l).comp
|
|
|
|
|
exact h.restrictScalars ℝ
|
2024-04-29 10:19:21 +02:00
|
|
|
|
|
2024-04-29 20:53:47 +02:00
|
|
|
|
repeat
|
|
|
|
|
rw [ContinuousLinearMap.comp_lineDeriv]
|
|
|
|
|
rw [CauchyRiemann₁ h, Complex.I_mul]
|
|
|
|
|
simp
|
2024-05-07 12:13:28 +02:00
|
|
|
|
|
|
|
|
|
|
2024-05-17 09:19:24 +02:00
|
|
|
|
theorem CauchyRiemann₄ {F : Type*} [NormedAddCommGroup F] [NormedSpace ℂ F] {f : ℂ → F} : (Differentiable ℂ f)
|
2024-05-08 15:59:56 +02:00
|
|
|
|
→ partialDeriv ℝ Complex.I f = Complex.I • partialDeriv ℝ 1 f := by
|
2024-05-07 12:13:28 +02:00
|
|
|
|
intro h
|
2024-05-08 15:59:56 +02:00
|
|
|
|
unfold partialDeriv
|
2024-05-07 12:13:28 +02:00
|
|
|
|
|
|
|
|
|
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)]
|
2024-05-31 10:21:27 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
theorem CauchyRiemann₅ {F : Type*} [NormedAddCommGroup F] [NormedSpace ℂ F] {f : ℂ → F} {z : ℂ} : (DifferentiableAt ℂ f z)
|
|
|
|
|
→ partialDeriv ℝ Complex.I f z = Complex.I • partialDeriv ℝ 1 f z := by
|
|
|
|
|
intro h
|
|
|
|
|
unfold partialDeriv
|
|
|
|
|
|
|
|
|
|
conv =>
|
|
|
|
|
left
|
|
|
|
|
rw [DifferentiableAt.fderiv_restrictScalars ℝ h]
|
|
|
|
|
simp
|
|
|
|
|
rw [← mul_one Complex.I]
|
|
|
|
|
rw [← smul_eq_mul]
|
|
|
|
|
rw [ContinuousLinearMap.map_smul_of_tower (fderiv ℂ f z) Complex.I 1]
|
|
|
|
|
conv =>
|
|
|
|
|
right
|
|
|
|
|
right
|
|
|
|
|
rw [DifferentiableAt.fderiv_restrictScalars ℝ h]
|