Update cauchyRiemann.lean

This commit is contained in:
Stefan Kebekus 2024-04-29 14:19:58 +02:00
parent 77d1fd2ae4
commit 38eaf677f9
1 changed files with 47 additions and 44 deletions

View File

@ -1,15 +1,15 @@
import Mathlib.Analysis.Calculus.Conformal.NormedSpace --import Mathlib.Analysis.Calculus.Conformal.NormedSpace
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.Deriv.Linear --import Mathlib.Analysis.Calculus.Deriv.Linear
import Mathlib.Analysis.Calculus.FDeriv.Basic --import Mathlib.Analysis.Calculus.FDeriv.Basic
import Mathlib.Analysis.Calculus.FDeriv.Comp --import Mathlib.Analysis.Calculus.FDeriv.Comp
import Mathlib.Analysis.Calculus.FDeriv.Linear --import Mathlib.Analysis.Calculus.FDeriv.Linear
import Mathlib.Analysis.Calculus.FDeriv.RestrictScalars --import Mathlib.Analysis.Calculus.FDeriv.RestrictScalars
import Mathlib.Analysis.Calculus.LineDeriv.Basic import Mathlib.Analysis.Calculus.LineDeriv.Basic
import Mathlib.Analysis.Complex.Basic --import Mathlib.Analysis.Complex.Basic
import Mathlib.Analysis.Complex.CauchyIntegral --import Mathlib.Analysis.Complex.CauchyIntegral
import Mathlib.Analysis.Complex.Conformal --import Mathlib.Analysis.Complex.Conformal
import Mathlib.Analysis.Complex.RealDeriv import Mathlib.Analysis.Complex.RealDeriv
variable {z : } {f : } variable {z : } {f : }
@ -26,12 +26,9 @@ theorem CauchyRiemann₁ : (DifferentiableAt f z)
have t₂a : Complex.I * (AR 1) = Complex.I • (AR 1) := by have t₂a : Complex.I * (AR 1) = Complex.I • (AR 1) := by
exact rfl exact rfl
rw [← t₂a] at t₂ 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 have t₂c : AR Complex.I = Complex.I • (AR 1) := by
simp at t₂ simp at t₂
exact 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 have t₃ : fderiv f z = ContinuousLinearMap.restrictScalars (fderiv f z) := by
exact DifferentiableAt.fderiv_restrictScalars h exact DifferentiableAt.fderiv_restrictScalars h
rw [t₃] rw [t₃]
@ -54,72 +51,78 @@ theorem CauchyRiemann₂ : (DifferentiableAt f z)
exact CauchyRiemann₁ h exact CauchyRiemann₁ h
theorem CauchyRiemann₃ : (DifferentiableAt f z) theorem CauchyRiemann₃ : (DifferentiableAt f z)
→ lineDeriv (Complex.reCLM ∘ f) z 1 = lineDeriv (Complex.imCLM ∘ f) z Complex.I := by → (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
-- Proof starts here -- Proof starts here
intro h intro h
have t₀₀ : DifferentiableAt f z := by have t₀₀ : DifferentiableAt f z := by
exact h.restrictScalars exact h.restrictScalars
have t₀₁ : DifferentiableAt Complex.reCLM (f z) := by have t₀₁ : DifferentiableAt Complex.reCLM (f z) := by
have : ∀ w, DifferentiableAt Complex.reCLM w := by have : ∀ w, DifferentiableAt Complex.reCLM w := by
intro w intro w
refine Differentiable.differentiableAt ?h refine Differentiable.differentiableAt ?h
exact ContinuousLinearMap.differentiable (Complex.reCLM : →L[] ) exact ContinuousLinearMap.differentiable (Complex.reCLM : →L[] )
exact this (f z) exact this (f z)
have t₁ : DifferentiableAt (Complex.reCLM ∘ f) z := by have t₁ : DifferentiableAt (Complex.reCLM ∘ f) z := by
apply t₀₁.comp apply t₀₁.comp
exact t₀₀ exact t₀₀
have t₂ : lineDeriv (Complex.reCLM ∘ f) z 1 = (fderiv (Complex.reCLM ∘ f) z) 1 := by have t₂ : lineDeriv (Complex.reCLM ∘ f) z 1 = (fderiv (Complex.reCLM ∘ f) z) 1 := by
apply DifferentiableAt.lineDeriv_eq_fderiv apply DifferentiableAt.lineDeriv_eq_fderiv
exact t₁ exact t₁
rw [t₂]
have s₀₀ : DifferentiableAt f z := by have s₀₀ : DifferentiableAt f z := by
exact h.restrictScalars exact h.restrictScalars
have s₀₁ : DifferentiableAt Complex.imCLM (f z) := by have s₀₁ : DifferentiableAt Complex.imCLM (f z) := by
have : ∀ w, DifferentiableAt Complex.imCLM w := by have : ∀ w, DifferentiableAt Complex.imCLM w := by
intro w intro w
apply Differentiable.differentiableAt apply Differentiable.differentiableAt
exact ContinuousLinearMap.differentiable (Complex.imCLM : →L[] ) exact ContinuousLinearMap.differentiable (Complex.imCLM : →L[] )
exact this (f z) exact this (f z)
have s₁ : DifferentiableAt (Complex.im ∘ f) z := by have s₁ : DifferentiableAt (Complex.im ∘ f) z := by
apply s₀₁.comp apply s₀₁.comp
exact s₀₀ exact s₀₀
have s₂ : lineDeriv (Complex.imCLM ∘ f) z Complex.I = (fderiv (Complex.imCLM ∘ f) z) Complex.I := by have s₂ : lineDeriv (Complex.imCLM ∘ f) z Complex.I = (fderiv (Complex.imCLM ∘ f) z) Complex.I := by
apply DifferentiableAt.lineDeriv_eq_fderiv apply DifferentiableAt.lineDeriv_eq_fderiv
exact s₁ exact s₁
rw [s₂]
rw [fderiv.comp, fderiv.comp] constructor
simp · rw [t₂, s₂]
rw [CauchyRiemann₁ h] rw [fderiv.comp, fderiv.comp]
simp
rw [CauchyRiemann₁ h]
rw [Complex.I_mul]
-- DifferentiableAt Complex.im (f z)
exact Complex.imCLM.differentiableAt
have u₁ : ∀ w, fderiv Complex.reCLM w = Complex.reCLM := by -- DifferentiableAt f z
exact fun w => ContinuousLinearMap.fderiv Complex.reCLM exact t₀₀
--rw [u₁ (f z)] -- DifferentiableAt Complex.re (f z)
have u₂ : ∀ w, fderiv Complex.imCLM w = Complex.imCLM := by exact Complex.reCLM.differentiableAt
exact fun w => ContinuousLinearMap.fderiv Complex.imCLM
-- rw [u₂ (f z)]
rw [Complex.I_mul]
-- DifferentiableAt f z
exact t₀₀
· have r₂ : lineDeriv (Complex.reCLM ∘ f) z Complex.I = (fderiv (Complex.reCLM ∘ f) z) Complex.I := by
apply DifferentiableAt.lineDeriv_eq_fderiv
exact t₁
have p₂ : lineDeriv (Complex.imCLM ∘ f) z 1 = (fderiv (Complex.imCLM ∘ f) z) 1 := by
apply DifferentiableAt.lineDeriv_eq_fderiv
exact s₁
rw [r₂, p₂]
rw [fderiv.comp, fderiv.comp]
simp
rw [CauchyRiemann₁ h]
rw [Complex.I_mul]
-- DifferentiableAt Complex.im (f z)
exact Complex.imCLM.differentiableAt
-- DifferentiableAt Complex.im (f z) -- DifferentiableAt f z
exact Complex.imCLM.differentiableAt exact t₀₀
-- DifferentiableAt Complex.re (f z)
exact Complex.reCLM.differentiableAt
-- DifferentiableAt f z -- DifferentiableAt f z
exact t₀₀ exact t₀₀
-- DifferentiableAt Complex.re (f z)
exact Complex.reCLM.differentiableAt
-- DifferentiableAt f z
exact t₀₀