diff --git a/nevanlinna/cauchyRiemann.lean b/nevanlinna/cauchyRiemann.lean index dd5addf..4241841 100644 --- a/nevanlinna/cauchyRiemann.lean +++ b/nevanlinna/cauchyRiemann.lean @@ -1,19 +1,22 @@ -import Mathlib.Analysis.Complex.CauchyIntegral -import Mathlib.Analysis.Complex.Basic -import Mathlib.Analysis.Calculus.LineDeriv.Basic -import Mathlib.Analysis.Calculus.ContDiff.Defs -import Mathlib.Analysis.Calculus.FDeriv.Basic -import Mathlib.Analysis.Complex.RealDeriv -import Mathlib.Analysis.Calculus.ContDiff.Basic -import Mathlib.Analysis.Calculus.Deriv.Linear -import Mathlib.Analysis.Complex.Conformal import Mathlib.Analysis.Calculus.Conformal.NormedSpace +import Mathlib.Analysis.Calculus.ContDiff.Basic +import Mathlib.Analysis.Calculus.ContDiff.Defs +import Mathlib.Analysis.Calculus.Deriv.Linear import Mathlib.Analysis.Calculus.FDeriv.Basic +import Mathlib.Analysis.Calculus.FDeriv.Comp +import Mathlib.Analysis.Calculus.FDeriv.Linear import Mathlib.Analysis.Calculus.FDeriv.RestrictScalars +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 -variable {z : ℂ} {f : ℂ → ℂ} {h : DifferentiableAt ℂ f z} +variable {z : ℂ} {f : ℂ → ℂ} -theorem CauchyRiemann₁ : fderiv ℝ f z Complex.I = Complex.I * fderiv ℝ f z 1 := by +theorem CauchyRiemann₁ : (DifferentiableAt ℂ f z) + → (fderiv ℝ f z) Complex.I = Complex.I * (fderiv ℝ f z) 1 := by + intro h let A := fderiv ℂ f z have t₁ : A (Complex.I • 1) = Complex.I • (A 1) := by exact ContinuousLinearMap.map_smul_of_tower A Complex.I 1 @@ -33,3 +36,90 @@ theorem CauchyRiemann₁ : fderiv ℝ f z Complex.I = Complex.I * fderiv ℝ f z exact DifferentiableAt.fderiv_restrictScalars ℝ h rw [t₃] exact t₂c + +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₀₀