Analysis II (Tao, 2022) -- Chapter 06 -- Section 05

section Chap06section Section05

Definition 6.12 (Twice continuous differentiability): let be open and . The map Unknown identifier `f`f is twice continuously differentiable (class ) on Unknown identifier `E`E when it is continuously differentiable on Unknown identifier `E`E and each first-order partial derivative map is continuously differentiable on Unknown identifier `E`E. We encode this with the openness hypothesis together with ContDiffOn 2 sorry sorry : PropContDiffOn 2 Unknown identifier `f`f Unknown identifier `E`E.

def IsTwiceContinuouslyDifferentiableOn {n m : } (E : Set (Fin n )) (f : (Fin n ) (Fin m )) : Prop := IsOpen E ContDiffOn 2 f E

Theorem 6.5: (Clairaut's theorem) let be open and let be of class on Unknown identifier `E`E. Then for every Unknown identifier `x₀`sorry sorry : Propx₀ Unknown identifier `E`E and all indices , the mixed second partial derivatives exist and commute. Componentwise, for each Unknown identifier ``, ; equivalently, the corresponding vector-valued mixed derivatives are equal.

theorem clairaut_mixed_partials_within {n m : } {E : Set (EuclideanSpace (Fin n))} {f : EuclideanSpace (Fin n) EuclideanSpace (Fin m)} (hE : IsOpen E) (hf : ContDiffOn 2 f E) : x₀ : EuclideanSpace (Fin n), x₀ E i j : Fin n, DifferentiableWithinAt (fun x => fderivWithin f E x (EuclideanSpace.single i (1 : ))) E x₀ DifferentiableWithinAt (fun x => fderivWithin f E x (EuclideanSpace.single j (1 : ))) E x₀ ( : Fin m, (fderivWithin (fun x => fderivWithin f E x (EuclideanSpace.single i (1 : ))) E x₀ (EuclideanSpace.single j (1 : ))) = (fderivWithin (fun x => fderivWithin f E x (EuclideanSpace.single j (1 : ))) E x₀ (EuclideanSpace.single i (1 : ))) ) fderivWithin (fun x => fderivWithin f E x (EuclideanSpace.single i (1 : ))) E x₀ (EuclideanSpace.single j (1 : )) = fderivWithin (fun x => fderivWithin f E x (EuclideanSpace.single j (1 : ))) E x₀ (EuclideanSpace.single i (1 : )) := by intro x₀ hx₀ i j have hcd : ContDiffWithinAt 2 f E x₀ := hf x₀ hx₀ have hUniqueOn : UniqueDiffOn E := hE.uniqueDiffOn have hDirectionalMapDifferentiableWithin : k : Fin n, DifferentiableWithinAt (fun x => fderivWithin f E x (EuclideanSpace.single k (1 : ))) E x₀ := by intro k have hContDiff : ContDiffWithinAt 1 (fun x => fderivWithin f E x (EuclideanSpace.single k (1 : ))) E x₀ := by exact hcd.fderivWithin_right_apply (m := 1) contDiffWithinAt_const hUniqueOn le_rfl hx₀ exact hContDiff.differentiableWithinAt le_rfl have hFderivWithinDiff : DifferentiableWithinAt (fderivWithin f E) E x₀ := by exact (hcd.fderivWithin_right (m := 1) hUniqueOn le_rfl hx₀).differentiableWithinAt le_rfl have hDirectionalSecondRewrite : a b : Fin n, fderivWithin (fun x => fderivWithin f E x (EuclideanSpace.single a (1 : ))) E x₀ (EuclideanSpace.single b (1 : )) = fderivWithin (fderivWithin f E) E x₀ (EuclideanSpace.single b (1 : )) (EuclideanSpace.single a (1 : )) := by intro a b have hDerivMap : fderivWithin (fun x => fderivWithin f E x (EuclideanSpace.single a (1 : ))) E x₀ = (fderivWithin (fderivWithin f E) E x₀).flip (EuclideanSpace.single a (1 : )) := by have hConstDiff : DifferentiableWithinAt (fun _ : EuclideanSpace (Fin n) => EuclideanSpace.single a (1 : )) E x₀ := by exact differentiableWithinAt_const (c := EuclideanSpace.single a (1 : )) rw [fderivWithin_clm_apply (hUniqueOn x₀ hx₀) hFderivWithinDiff hConstDiff] rw [fderivWithin_const_apply] simp have hEval := congrArg (fun L => L (EuclideanSpace.single b (1 : ))) hDerivMap simpa [ContinuousLinearMap.flip_apply] using hEval have hPointInClosureInterior : x₀ closure (interior E) := by rw [hE.interior_eq] exact subset_closure hx₀ have hSymmSecondWithinOpen : IsSymmSndFDerivWithinAt f E x₀ := by exact hcd.isSymmSndFDerivWithinAt (n := 2) (by simp) hUniqueOn hPointInClosureInterior hx₀ have hVectorEq : fderivWithin (fun x => fderivWithin f E x (EuclideanSpace.single i (1 : ))) E x₀ (EuclideanSpace.single j (1 : )) = fderivWithin (fun x => fderivWithin f E x (EuclideanSpace.single j (1 : ))) E x₀ (EuclideanSpace.single i (1 : )) := by calc fderivWithin (fun x => fderivWithin f E x (EuclideanSpace.single i (1 : ))) E x₀ (EuclideanSpace.single j (1 : )) = fderivWithin (fderivWithin f E) E x₀ (EuclideanSpace.single j (1 : )) (EuclideanSpace.single i (1 : )) := hDirectionalSecondRewrite i j _ = fderivWithin (fderivWithin f E) E x₀ (EuclideanSpace.single i (1 : )) (EuclideanSpace.single j (1 : )) := hSymmSecondWithinOpen.eq (EuclideanSpace.single j (1 : )) (EuclideanSpace.single i (1 : )) _ = fderivWithin (fun x => fderivWithin f E x (EuclideanSpace.single j (1 : ))) E x₀ (EuclideanSpace.single i (1 : )) := by symm exact hDirectionalSecondRewrite j i have hComponentEq : : Fin m, (fderivWithin (fun x => fderivWithin f E x (EuclideanSpace.single i (1 : ))) E x₀ (EuclideanSpace.single j (1 : ))) = (fderivWithin (fun x => fderivWithin f E x (EuclideanSpace.single j (1 : ))) E x₀ (EuclideanSpace.single i (1 : ))) := by intro exact congrArg (fun v => v ) hVectorEq exact And.intro (hDirectionalMapDifferentiableWithin i) (And.intro (hDirectionalMapDifferentiableWithin j) (And.intro hComponentEq hVectorEq))
end Section05end Chap06