Differentiability from partial derivatives continuous at a point
ProvedRudin.ch09_differentiable_of_continuous_partialsLet be an open set and let . Suppose that for each coordinate direction the partial derivative
exists at every point , where denotes the -th standard basis vector of . Fix a point and assume in addition that each of the maps is continuous at . Then is differentiable at , and its differential is the linear map
Two features of the hypotheses deserve emphasis. Existence of the partial derivatives is required throughout the open set , whereas their continuity is required only at the single point . Mere existence of the partial derivatives at a point does not imply differentiability there, so the continuity hypothesis is what upgrades the one-dimensional derivatives to a genuine differential.
This is the analytic content of the sufficiency half of Rudin's Theorem 9.21. It is stated pointwise so that it can be applied at each point of an open set: combined with the continuity of , which follows from continuity of the partial derivatives, it yields the equivalence between being continuously differentiable on and all of its partial derivatives existing and being continuous on .
Formalization Note The domain and codomain are EuclideanSpace ℝ (Fin n) and EuclideanSpace ℝ (Fin m). The -th partial derivative is written as a one-dimensional derivative at of the restriction , with given by EuclideanSpace.single j 1. The differential is assembled as , where is the -th coordinate projection; ContinuousLinearMap.smulRight combines the scalar functional with the vector into a continuous linear map.
import Mathlib open Filter Topology
namespace Rudin
/-- Rudin, Chapter 9, Theorem 9.21 (pointwise core of the sufficiency direction): if the
coordinate partial derivatives of `f` exist throughout an open set `E` and are continuous at
a point `x ∈ E`, then `f` is differentiable at `x`, with differential sending `v` to
`∑ j, v j • D j x`. -/
theorem ch09_differentiable_of_continuous_partials
(n m : ℕ) (E : Set (EuclideanSpace ℝ (Fin n))) (hE : IsOpen E)
(f : EuclideanSpace ℝ (Fin n) → EuclideanSpace ℝ (Fin m))
(D : Fin n → EuclideanSpace ℝ (Fin n) → EuclideanSpace ℝ (Fin m))
(hD : ∀ j : Fin n, ∀ y ∈ E,
HasDerivAt (fun t : ℝ => f (y + t • EuclideanSpace.single j (1 : ℝ))) (D j y) 0)
(x : EuclideanSpace ℝ (Fin n)) (hx : x ∈ E)
(hc : ∀ j : Fin n, ContinuousAt (D j) x) :
HasFDerivAt f
(∑ j : Fin n, (EuclideanSpace.proj j : EuclideanSpace ℝ (Fin n) →L[ℝ] ℝ).smulRight
(D j x)) x := by sorry
end Rudin