Differentiation under the integral sign over a finite-dimensional parameter #
Category: 1-Mathlib (CSD-free; staged as a Mathlib-upstream candidate). BACKLOG #124, out of #121(ii).
#120 did this for a one-dimensional parameter, deliberately: its scope note records that the
fderiv version "is the same induction with ContinuousLinearMap plumbing and is not done here".
#121(ii) is what wants the general case — the joint Schwartz claim needs differentiating in two
variables at once — so here it is, for a parameter in any normed space.
The interface is directional, and that is the whole design #
#124's row warned that the hypothesis-design question #120 flagged "returns in harder form: a
per-order, locally-uniform bound on a multilinear norm". It does not have to. Bounding
iteratedFDeriv means bounding a multilinear map, which drags currying equivalences through every
step; bounding iterated directional derivatives keeps every hypothesis valued in E, and the
recursion is then literally list-append:
dirDeriv F hs— differentiateFin the directionshs, innermost last, by recursion on the list, with ★dirDeriv_append_singletonthe shift the induction runs on;- ★★★
contDiffOn_integral_of_dirBound— the theorem: if eachx ↦ F x aisC^n, each directional derivative of order≤ nis measurable ina, and the one alonghsis bounded on an openUby(∏ ‖hᵢ‖)·bound hs.length awith eachbound kintegrable, thenx ↦ ∫ a, F x aisC^nonU; - ★★
contDiff_integral_of_dirBound— the global corollary, and ★★contDiffOn_integral_of_dirBound_allsmoothness at every order; - ★★★
hasFDerivAt_integral_of_boundand ★★fderiv_integral_apply_of_bound— the first-order identity, which the induction proves and the smoothness statement discards. Exported for #126 with the weakest hypotheses that give it — differentiability of each slice, not smoothness — and in directional form; the induction now calls it rather than rebuilding it; - ★★★
norm_iteratedFDeriv_integral_le— the bound at every order: under the same hypotheses,‖iteratedFDeriv ℝ n (∫ a, F · a) x‖ ≤ ∫ a, bound n aonU, by an induction that peels the last direction (iteratedFDeriv_apply_succ_last) and substitutes the first-order identity under the remaining derivatives (Filter.EventuallyEq.iteratedFDeriv_eq, which Mathlib has only foriteratedFDerivWithin). This is the shape a Schwartz seminorm estimate asks for; - ★★
norm_dirDeriv_leand ★★contDiffOn_integral_of_iteratedFDeriv_bound— the multilinear interface, as a corollary of the directional one. Added after #121(ii) tried to consume this file and could not:SchwartzMap.decaygives bounds oniteratedFDeriv, so without the bridge the directional hypotheses were not dischargeable from Schwartz data and the file was unusable by the row it was built for. The bridge also makes the header's claim honest — the directional form is easier to meet and strictly more general, since the multilinear form follows from it.
The product ∏ ‖hᵢ‖ is what makes the bound family shift cleanly: appending one direction h
multiplies it by ‖h‖ and raises the order by one, so the inner call runs with
fun k a => ‖h‖ · bound (k + 1) a, still integrable.
Honest scope #
⚠️ One hypothesis is unavoidably operator-valued. Mathlib's
hasFDerivAt_integral_of_dominated_of_fderiv_le takes the derivative as a map into H →L[ℝ] E, so
strong measurability of a ↦ fderiv ℝ (F · a) x is required and cannot be reduced to directional
data. It appears as hmeasD, indexed the same way, and is closed under the recursion for the same
list-append reason.
⚠️ The bound family must be nonnegative (hb0). #120 needed no such hypothesis, because its
one-dimensional engine takes a bound on ‖F' x a‖ directly; here the directional bounds have to be
turned into an operator-norm bound through opNorm_le_bound, which is false for a negative constant
when H is trivial. It is one line to discharge for any bound family anyone builds.
⚠️ No formula for the derivatives, as in #120. Amended 2026-10-08 (#126). The
first-order identity is now exported, and at higher order what is exported is the bound it
implies, not the identity. The identity at order n would need the iterated derivative of the
integral as a multilinear map — the plumbing this file exists to avoid — and no consumer has wanted
it: a Schwartz estimate wants a scalar bound.
⚠️ The bound must be locally uniform in the parameter, which is what U is for: a bound uniform
on a ball is what kernels actually supply, and contDiff_integral_of_dirBound is the U = univ
special case.
References: ContDiffParametricIntegral.lean (#120, the
one-dimensional case), ContDiffParametricIntervalIntegral.lean
(#60, whose directional recursion this follows), Mathlib/Analysis/Calculus/ParametricIntegral.lean;
specs/BACKLOG.md #124, #120, #121, #60.
The weight a list of directions carries #
Iterated directional derivatives in the parameter #
dirDeriv F hs differentiates F in its parameter along the directions hs, the head of the
list being the outermost derivative. Every value is in E, which is what keeps the interface free of
multilinear maps.
Equations
Instances For
★ The shift the induction runs on. Differentiating along h first and then along hs is
differentiating along hs ++ [h].
The theorem #
The first-order identity, which the induction needs and a consumer wants #
The induction below proves fderiv (∫ a, F · a) x = ∫ a, fderiv (F · a) x at each step and then
keeps only the smoothness. #125 made that identity an exported theorem for #120's one-dimensional
parameter; here it is for a parameter in any normed space, stated with the weakest hypotheses that
give it — differentiability of each slice, not smoothness — so that the induction can call it instead
of rebuilding it.
The integrand is integrable wherever the order-zero bound holds, which every statement here needs.
★★★ Differentiation under the integral sign over a normed parameter, with the derivative
kept. The identity contDiffOn_integral_of_dirBound proves and discards.
The first derivative is integrable, which is what lets the identity above be evaluated at a direction.
★★ The directional form of the identity, in this file's own vocabulary: no operator-valued integral survives in the statement.
★★★ Differentiation under the integral sign to all orders, over a parameter in any normed
space. The hypotheses are directional throughout, so nothing here is valued in a space of
multilinear maps except hmeasD, which Mathlib's first-derivative theorem forces.
★★ The global corollary, for bounds that hold at every parameter.
★★ Smoothness at every order, stated over ℕ so that no ∞-coercion enters the interface.
The multilinear interface, as a corollary of the directional one #
This file's header claims the directional hypotheses are easier to meet than multilinear ones. That
is only worth claiming if the multilinear form follows, so here it does. The bridge is that an
iterated directional derivative is bounded by the iterated total derivative times the product of the
directions' norms — proved by peeling the innermost direction, which is what
dirDeriv_append_singleton is for.
★★ A directional derivative is bounded by the total one. The induction peels the innermost
direction through dirDeriv_append_singleton, turns the evaluation into a left composition with
ContinuousLinearMap.apply (ContinuousLinearMap.iteratedFDeriv_comp_left), and puts the extra
order back with norm_iteratedFDeriv_fderiv. Smoothness is assumed outright, which is what removes
all order bookkeeping and is what a Schwartz integrand supplies.
★★ The multilinear form of this file's theorem, for a user whose bounds come from
iteratedFDeriv — which is what SchwartzMap.decay gives. It is a corollary of the directional form,
which is the claim the header makes.
The bound at every order, which is what a Schwartz estimate asks for #
The first-order identity above is not enough for a consumer: a Schwartz seminorm estimate needs
‖iteratedFDeriv ℝ n (∫ a, F · a) x‖, and stating the identity at order n would need the
iterated derivative of the integral as a multilinear map — exactly the plumbing this file exists to
avoid. The bound is scalar, follows from the first-order identity by the same list-append induction,
and is what #126 consumes.
The peel is iteratedFDeriv_apply_succ_last: Mathlib's iteratedFDeriv_succ_apply_right peels one
order into a function valued in H →L[ℝ] E, and composing with evaluation at the last direction
puts the value back in E.
Two functions that agree near a point have the same iterated derivatives there. Mathlib has the
iteratedFDerivWithin version only.
One order of iteratedFDeriv, applied to a tuple, is the iteratedFDeriv of one order less of
the derivative along the tuple's last direction — the same innermost-first peeling
dirDeriv_append_singleton performs, and for the same reason: the head of a tuple is the outermost
derivative, which is not of this form.
★★★ The iterated derivative of the integral obeys the bound family, at every order. With
the same hypotheses that make the integral smooth, ‖iteratedFDeriv ℝ n (∫ a, F · a) x‖ ≤ ∫ a, bound n a on U. The induction peels the last direction, replaces the derivative of the
integral by the integral of the directional derivative (the identity above, valid on all of the open
U, hence substitutable under the remaining derivatives), and calls itself on dirDeriv F [h] with
the bound family shifted exactly as the smoothness proof shifts it.