# Documentation

Mathlib.Analysis.Calculus.ContDiffDef

# Higher differentiability #

A function is C^1 on a domain if it is differentiable there, and its derivative is continuous. By induction, it is C^n if it is C^{n-1} and its (n-1)-th derivative is C^1 there or, equivalently, if it is C^1 and its derivative is C^{n-1}. Finally, it is C^β if it is C^n for all n.

We formalize these notions by defining iteratively the n+1-th derivative of a function as the derivative of the n-th derivative. It is called iteratedFDeriv π n f x where π is the field, n is the number of iterations, f is the function and x is the point, and it is given as an n-multilinear map. We also define a version iteratedFDerivWithin relative to a domain, as well as predicates ContDiffWithinAt, ContDiffAt, ContDiffOn and ContDiff saying that the function is C^n within a set at a point, at a point, on a set and on the whole space respectively.

To avoid the issue of choice when choosing a derivative in sets where the derivative is not necessarily unique, ContDiffOn is not defined directly in terms of the regularity of the specific choice iteratedFDerivWithin π n f s inside s, but in terms of the existence of a nice sequence of derivatives, expressed with a predicate HasFTaylorSeriesUpToOn.

We prove basic properties of these notions.

## Main definitions and results #

Let f : E β F be a map between normed vector spaces over a nontrivially normed field π.

• HasFTaylorSeriesUpTo n f p: expresses that the formal multilinear series p is a sequence of iterated derivatives of f, up to the n-th term (where n is a natural number or β).
• HasFTaylorSeriesUpToOn n f p s: same thing, but inside a set s. The notion of derivative is now taken inside s. In particular, derivatives don't have to be unique.
• ContDiff π n f: expresses that f is C^n, i.e., it admits a Taylor series up to rank n.
• ContDiffOn π n f s: expresses that f is C^n in s.
• ContDiffAt π n f x: expresses that f is C^n around x.
• ContDiffWithinAt π n f s x: expresses that f is C^n around x within the set s.
• iteratedFDerivWithin π n f s x is an n-th derivative of f over the field π on the set s at the point x. It is a continuous multilinear map from E^n to F, defined as a derivative within s of iteratedFDerivWithin π (n-1) f s if one exists, and 0 otherwise.
• iteratedFDeriv π n f x is the n-th derivative of f over the field π at the point x. It is a continuous multilinear map from E^n to F, defined as a derivative of iteratedFDeriv π (n-1) f if one exists, and 0 otherwise.

In sets of unique differentiability, ContDiffOn π n f s can be expressed in terms of the properties of iteratedFDerivWithin π m f s for m β€ n. In the whole space, ContDiff π n f can be expressed in terms of the properties of iteratedFDeriv π m f for m β€ n.

## Implementation notes #

The definitions in this file are designed to work on any field π. They are sometimes slightly more complicated than the naive definitions one would guess from the intuition over the real or complex numbers, but they are designed to circumvent the lack of gluing properties and partitions of unity in general. In the usual situations, they coincide with the usual definitions.

### Definition of C^n functions in domains #

One could define C^n functions in a domain s by fixing an arbitrary choice of derivatives (this is what we do with iteratedFDerivWithin) and requiring that all these derivatives up to n are continuous. If the derivative is not unique, this could lead to strange behavior like two C^n functions f and g on s whose sum is not C^n. A better definition is thus to say that a function is C^n inside s if it admits a sequence of derivatives up to n inside s.

This definition still has the problem that a function which is locally C^n would not need to be C^n, as different choices of sequences of derivatives around different points might possibly not be glued together to give a globally defined sequence of derivatives. (Note that this issue can not happen over reals, thanks to partition of unity, but the behavior over a general field is not so clear, and we want a definition for general fields). Also, there are locality problems for the order parameter: one could image a function which, for each n, has a nice sequence of derivatives up to order n, but they do not coincide for varying n and can therefore not be glued to give rise to an infinite sequence of derivatives. This would give a function which is C^n for all n, but not C^β. We solve this issue by putting locality conditions in space and order in our definition of ContDiffWithinAt and ContDiffOn. The resulting definition is slightly more complicated to work with (in fact not so much), but it gives rise to completely satisfactory theorems.

For instance, with this definition, a real function which is C^m (but not better) on (-1/m, 1/m) for each natural m is by definition C^β at 0.

There is another issue with the definition of ContDiffWithinAt π n f s x. We can require the existence and good behavior of derivatives up to order n on a neighborhood of x within s. However, this does not imply continuity or differentiability within s of the function at x when x does not belong to s. Therefore, we require such existence and good behavior on a neighborhood of x within s βͺ {x} (which appears as insert x s in this file).

### Side of the composition, and universe issues #

With a naΓ―ve direct definition, the n-th derivative of a function belongs to the space E βL[π] (E βL[π] (E ... F)...))) where there are n iterations of E βL[π]. This space may also be seen as the space of continuous multilinear functions on n copies of E with values in F, by uncurrying. This is the point of view that is usually adopted in textbooks, and that we also use. This means that the definition and the first proofs are slightly involved, as one has to keep track of the uncurrying operation. The uncurrying can be done from the left or from the right, amounting to defining the n+1-th derivative either as the derivative of the n-th derivative, or as the n-th derivative of the derivative. For proofs, it would be more convenient to use the latter approach (from the right), as it means to prove things at the n+1-th step we only need to understand well enough the derivative in E βL[π] F (contrary to the approach from the left, where one would need to know enough on the n-th derivative to deduce things on the n+1-th derivative).

However, the definition from the right leads to a universe polymorphism problem: if we define iteratedFDeriv π (n + 1) f x = iteratedFDeriv π n (fderiv π f) x by induction, we need to generalize over all spaces (as f and fderiv π f don't take values in the same space). It is only possible to generalize over all spaces in some fixed universe in an inductive definition. For f : E β F, then fderiv π f is a map E β (E βL[π] F). Therefore, the definition will only work if F and E βL[π] F are in the same universe.

This issue does not appear with the definition from the left, where one does not need to generalize over all spaces. Therefore, we use the definition from the left. This means some proofs later on become a little bit more complicated: to prove that a function is C^n, the most efficient approach is to exhibit a formula for its n-th derivative and prove it is continuous (contrary to the inductive approach where one would prove smoothness statements without giving a formula for the derivative). In the end, this approach is still satisfactory as it is good to have formulas for the iterated derivatives in various constructions.

One point where we depart from this explicit approach is in the proof of smoothness of a composition: there is a formula for the n-th derivative of a composition (FaΓ  di Bruno's formula), but it is very complicated and barely usable, while the inductive proof is very simple. Thus, we give the inductive proof. As explained above, it works by generalizing over the target space, hence it only works well if all spaces belong to the same universe. To get the general version, we lift things to a common universe using a trick.

### Variables management #

The textbook definitions and proofs use various identifications and abuse of notations, for instance when saying that the natural space in which the derivative lives, i.e., E βL[π] (E βL[π] ( ... βL[π] F)), is the same as a space of multilinear maps. When doing things formally, we need to provide explicit maps for these identifications, and chase some diagrams to see everything is compatible with the identifications. In particular, one needs to check that taking the derivative and then doing the identification, or first doing the identification and then taking the derivative, gives the same result. The key point for this is that taking the derivative commutes with continuous linear equivalences. Therefore, we need to implement all our identifications with continuous linear equivs.

## Notations #

We use the notation E [Γn]βL[π] F for the space of continuous multilinear maps on E^n with values in F. This is the space in which the n-th derivative of a function from E to F lives.

In this file, we denote β€ : ββ with β.

## Tags #

derivative, differentiability, higher derivative, C^n, multilinear, Taylor series, formal series

### Functions with a Taylor series on a domain #

structure HasFTaylorSeriesUpToOn {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] (n : ββ) (f : E β F) (p : E β FormalMultilinearSeries π E F) (s : Set E) :

HasFTaylorSeriesUpToOn n f p s registers the fact that p 0 = f and p (m+1) is a derivative of p m for m < n, and is continuous for m β€ n. This is a predicate analogous to HasFDerivWithinAt but for higher order derivatives.

Instances For
theorem HasFTaylorSeriesUpToOn.zero_eq' {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {n : ββ} {p : E β FormalMultilinearSeries π E F} (h : ) {x : E} (hx : x β s) :
p x 0 = β() (f x)
theorem HasFTaylorSeriesUpToOn.congr {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {fβ : E β F} {n : ββ} {p : E β FormalMultilinearSeries π E F} (h : ) (hβ : β (x : E), x β s β fβ x = f x) :

If two functions coincide on a set s, then a Taylor series for the first one is as well a Taylor series for the second one.

theorem HasFTaylorSeriesUpToOn.mono {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {n : ββ} {p : E β FormalMultilinearSeries π E F} (h : ) {t : Set E} (hst : t β s) :
theorem HasFTaylorSeriesUpToOn.of_le {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {m : ββ} {n : ββ} {p : E β FormalMultilinearSeries π E F} (h : ) (hmn : m β€ n) :
theorem HasFTaylorSeriesUpToOn.continuousOn {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {n : ββ} {p : E β FormalMultilinearSeries π E F} (h : ) :
theorem hasFTaylorSeriesUpToOn_zero_iff {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {p : E β FormalMultilinearSeries π E F} :
β β§ β (x : E), x β s β = f x
theorem hasFTaylorSeriesUpToOn_top_iff {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {p : E β FormalMultilinearSeries π E F} :
β β (n : β), HasFTaylorSeriesUpToOn (βn) f p s
theorem hasFTaylorSeriesUpToOn_top_iff' {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {p : E β FormalMultilinearSeries π E F} :
β (β (x : E), x β s β = f x) β§ β (m : β) (x : E), x β s β HasFDerivWithinAt (fun y => p y m) () s x

In the case that n = β we don't need the continuity assumption in HasFTaylorSeriesUpToOn.

theorem HasFTaylorSeriesUpToOn.hasFDerivWithinAt {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {n : ββ} {p : E β FormalMultilinearSeries π E F} (h : ) (hn : 1 β€ n) (hx : x β s) :
HasFDerivWithinAt f (β() (p x 1)) s x

If a function has a Taylor series at order at least 1, then the term of order 1 of this series is a derivative of f.

theorem HasFTaylorSeriesUpToOn.differentiableOn {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {n : ββ} {p : E β FormalMultilinearSeries π E F} (h : ) (hn : 1 β€ n) :
DifferentiableOn π f s
theorem HasFTaylorSeriesUpToOn.hasFDerivAt {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {n : ββ} {p : E β FormalMultilinearSeries π E F} (h : ) (hn : 1 β€ n) (hx : s β nhds x) :
HasFDerivAt f (β() (p x 1)) x

If a function has a Taylor series at order at least 1 on a neighborhood of x, then the term of order 1 of this series is a derivative of f at x.

theorem HasFTaylorSeriesUpToOn.eventually_hasFDerivAt {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {n : ββ} {p : E β FormalMultilinearSeries π E F} (h : ) (hn : 1 β€ n) (hx : s β nhds x) :
βαΆ  (y : E) in nhds x, HasFDerivAt f (β() (p y 1)) y

If a function has a Taylor series at order at least 1 on a neighborhood of x, then in a neighborhood of x, the term of order 1 of this series is a derivative of f.

theorem HasFTaylorSeriesUpToOn.differentiableAt {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {n : ββ} {p : E β FormalMultilinearSeries π E F} (h : ) (hn : 1 β€ n) (hx : s β nhds x) :
DifferentiableAt π f x

If a function has a Taylor series at order at least 1 on a neighborhood of x, then it is differentiable at x.

theorem hasFTaylorSeriesUpToOn_succ_iff_left {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {p : E β FormalMultilinearSeries π E F} {n : β} :
HasFTaylorSeriesUpToOn (βn + 1) f p s β HasFTaylorSeriesUpToOn (βn) f p s β§ (β (x : E), x β s β HasFDerivWithinAt (fun y => p y n) () s x) β§ ContinuousOn (fun x => p x (n + 1)) s

p is a Taylor series of f up to n+1 if and only if p is a Taylor series up to n, and p (n + 1) is a derivative of p n.

theorem HasFTaylorSeriesUpToOn.shift_of_succ {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {p : E β FormalMultilinearSeries π E F} {n : β} (H : HasFTaylorSeriesUpToOn (β(n + 1)) f p s) :
HasFTaylorSeriesUpToOn (βn) (fun x => β() (p x 1)) (fun x => ) s
theorem hasFTaylorSeriesUpToOn_succ_iff_right {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {p : E β FormalMultilinearSeries π E F} {n : β} :
HasFTaylorSeriesUpToOn (β(n + 1)) f p s β (β (x : E), x β s β = f x) β§ (β (x : E), x β s β HasFDerivWithinAt (fun y => p y 0) () s x) β§ HasFTaylorSeriesUpToOn (βn) (fun x => β() (p x 1)) (fun x => ) s

p is a Taylor series of f up to n+1 if and only if p.shift is a Taylor series up to n for p 1, which is a derivative of f.

### Smooth functions within a set around a point #

def ContDiffWithinAt (π : Type u) [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] (n : ββ) (f : E β F) (s : Set E) (x : E) :

A function is continuously differentiable up to order n within a set s at a point x if it admits continuous derivatives up to order n in a neighborhood of x in s βͺ {x}. For n = β, we only require that this holds up to any finite order (where the neighborhood may depend on the finite order we consider).

For instance, a real function which is C^m on (-1/m, 1/m) for each natural m, but not better, is C^β at 0 within univ.

Instances For
theorem contDiffWithinAt_nat {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {n : β} :
ContDiffWithinAt π (βn) f s x β β u, u β nhdsWithin x (insert x s) β§ β p, HasFTaylorSeriesUpToOn (βn) f p u
theorem ContDiffWithinAt.of_le {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {m : ββ} {n : ββ} (h : ContDiffWithinAt π n f s x) (hmn : m β€ n) :
ContDiffWithinAt π m f s x
theorem contDiffWithinAt_iff_forall_nat_le {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {n : ββ} :
ContDiffWithinAt π n f s x β β (m : β), βm β€ n β ContDiffWithinAt π (βm) f s x
theorem contDiffWithinAt_top {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} :
ContDiffWithinAt π β€ f s x β β (n : β), ContDiffWithinAt π (βn) f s x
theorem ContDiffWithinAt.continuousWithinAt {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {n : ββ} (h : ContDiffWithinAt π n f s x) :
theorem ContDiffWithinAt.congr_of_eventuallyEq {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {fβ : E β F} {x : E} {n : ββ} (h : ContDiffWithinAt π n f s x) (hβ : fβ =αΆ [] f) (hx : fβ x = f x) :
ContDiffWithinAt π n fβ s x
theorem ContDiffWithinAt.congr_of_eventuallyEq_insert {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {fβ : E β F} {x : E} {n : ββ} (h : ContDiffWithinAt π n f s x) (hβ : fβ =αΆ [nhdsWithin x (insert x s)] f) :
ContDiffWithinAt π n fβ s x
theorem ContDiffWithinAt.congr_of_eventually_eq' {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {fβ : E β F} {x : E} {n : ββ} (h : ContDiffWithinAt π n f s x) (hβ : fβ =αΆ [] f) (hx : x β s) :
ContDiffWithinAt π n fβ s x
theorem Filter.EventuallyEq.contDiffWithinAt_iff {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {fβ : E β F} {x : E} {n : ββ} (hβ : fβ =αΆ [] f) (hx : fβ x = f x) :
ContDiffWithinAt π n fβ s x β ContDiffWithinAt π n f s x
theorem ContDiffWithinAt.congr {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {fβ : E β F} {x : E} {n : ββ} (h : ContDiffWithinAt π n f s x) (hβ : β (y : E), y β s β fβ y = f y) (hx : fβ x = f x) :
ContDiffWithinAt π n fβ s x
theorem ContDiffWithinAt.congr' {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {fβ : E β F} {x : E} {n : ββ} (h : ContDiffWithinAt π n f s x) (hβ : β (y : E), y β s β fβ y = f y) (hx : x β s) :
ContDiffWithinAt π n fβ s x
theorem ContDiffWithinAt.mono_of_mem {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {n : ββ} (h : ContDiffWithinAt π n f s x) {t : Set E} (hst : s β ) :
ContDiffWithinAt π n f t x
theorem ContDiffWithinAt.mono {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {n : ββ} (h : ContDiffWithinAt π n f s x) {t : Set E} (hst : t β s) :
ContDiffWithinAt π n f t x
theorem ContDiffWithinAt.congr_nhds {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {n : ββ} (h : ContDiffWithinAt π n f s x) {t : Set E} (hst : = ) :
ContDiffWithinAt π n f t x
theorem contDiffWithinAt_congr_nhds {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {n : ββ} {t : Set E} (hst : = ) :
ContDiffWithinAt π n f s x β ContDiffWithinAt π n f t x
theorem contDiffWithinAt_inter' {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {t : Set E} {f : E β F} {x : E} {n : ββ} (h : t β ) :
ContDiffWithinAt π n f (s β© t) x β ContDiffWithinAt π n f s x
theorem contDiffWithinAt_inter {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {t : Set E} {f : E β F} {x : E} {n : ββ} (h : t β nhds x) :
ContDiffWithinAt π n f (s β© t) x β ContDiffWithinAt π n f s x
theorem contDiffWithinAt_insert_self {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {n : ββ} :
ContDiffWithinAt π n f (insert x s) x β ContDiffWithinAt π n f s x
theorem contDiffWithinAt_insert {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {n : ββ} {y : E} :
ContDiffWithinAt π n f (insert y s) x β ContDiffWithinAt π n f s x
theorem ContDiffWithinAt.insert' {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {n : ββ} {y : E} :
ContDiffWithinAt π n f s x β ContDiffWithinAt π n f (insert y s) x

Alias of the reverse direction of contDiffWithinAt_insert.

theorem ContDiffWithinAt.of_insert {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {n : ββ} {y : E} :
ContDiffWithinAt π n f (insert y s) x β ContDiffWithinAt π n f s x

Alias of the forward direction of contDiffWithinAt_insert.

theorem ContDiffWithinAt.insert {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {n : ββ} (h : ContDiffWithinAt π n f s x) :
ContDiffWithinAt π n f (insert x s) x
theorem ContDiffWithinAt.differentiable_within_at' {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {n : ββ} (h : ContDiffWithinAt π n f s x) (hn : 1 β€ n) :
DifferentiableWithinAt π f (insert x s) x

If a function is C^n within a set at a point, with n β₯ 1, then it is differentiable within this set at this point.

theorem ContDiffWithinAt.differentiableWithinAt {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {n : ββ} (h : ContDiffWithinAt π n f s x) (hn : 1 β€ n) :
DifferentiableWithinAt π f s x
theorem contDiffWithinAt_succ_iff_hasFDerivWithinAt {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {n : β} :
ContDiffWithinAt π (β(n + 1)) f s x β β u, u β nhdsWithin x (insert x s) β§ β f', (β (x : E), x β u β HasFDerivWithinAt f (f' x) u x) β§ ContDiffWithinAt π (βn) f' u x

A function is C^(n + 1) on a domain iff locally, it has a derivative which is C^n.

theorem contDiffWithinAt_succ_iff_hasFDerivWithinAt' {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {n : β} :
ContDiffWithinAt π (β(n + 1)) f s x β β u, u β nhdsWithin x (insert x s) β§ u β insert x s β§ β f', (β (x : E), x β u β HasFDerivWithinAt f (f' x) s x) β§ ContDiffWithinAt π (βn) f' s x

A version of contDiffWithinAt_succ_iff_hasFDerivWithinAt where all derivatives are taken within the same set.

### Smooth functions within a set #

def ContDiffOn (π : Type u) [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] (n : ββ) (f : E β F) (s : Set E) :

A function is continuously differentiable up to n on s if, for any point x in s, it admits continuous derivatives up to order n on a neighborhood of x in s.

For n = β, we only require that this holds up to any finite order (where the neighborhood may depend on the finite order we consider).

Instances For
theorem HasFTaylorSeriesUpToOn.contDiffOn {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {n : ββ} {f' : E β FormalMultilinearSeries π E F} (hf : ) :
ContDiffOn π n f s
theorem ContDiffOn.contDiffWithinAt {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {n : ββ} (h : ContDiffOn π n f s) (hx : x β s) :
ContDiffWithinAt π n f s x
theorem ContDiffWithinAt.contDiffOn' {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {n : ββ} {m : β} (hm : βm β€ n) (h : ContDiffWithinAt π n f s x) :
β u, β§ x β u β§ ContDiffOn π (βm) f (insert x s β© u)
theorem ContDiffWithinAt.contDiffOn {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {n : ββ} {m : β} (hm : βm β€ n) (h : ContDiffWithinAt π n f s x) :
β u, u β nhdsWithin x (insert x s) β§ u β insert x s β§ ContDiffOn π (βm) f u
theorem ContDiffWithinAt.eventually {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {n : β} (h : ContDiffWithinAt π (βn) f s x) :
βαΆ  (y : E) in nhdsWithin x (insert x s), ContDiffWithinAt π (βn) f s y
theorem ContDiffOn.of_le {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {m : ββ} {n : ββ} (h : ContDiffOn π n f s) (hmn : m β€ n) :
ContDiffOn π m f s
theorem ContDiffOn.of_succ {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {n : β} (h : ContDiffOn π (βn + 1) f s) :
ContDiffOn π (βn) f s
theorem ContDiffOn.one_of_succ {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {n : β} (h : ContDiffOn π (βn + 1) f s) :
ContDiffOn π 1 f s
theorem contDiffOn_iff_forall_nat_le {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {n : ββ} :
ContDiffOn π n f s β β (m : β), βm β€ n β ContDiffOn π (βm) f s
theorem contDiffOn_top {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} :
ContDiffOn π β€ f s β β (n : β), ContDiffOn π (βn) f s
theorem contDiffOn_all_iff_nat {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} :
(β (n : ββ), ContDiffOn π n f s) β β (n : β), ContDiffOn π (βn) f s
theorem ContDiffOn.continuousOn {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {n : ββ} (h : ContDiffOn π n f s) :
theorem ContDiffOn.congr {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {fβ : E β F} {n : ββ} (h : ContDiffOn π n f s) (hβ : β (x : E), x β s β fβ x = f x) :
ContDiffOn π n fβ s
theorem contDiffOn_congr {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {fβ : E β F} {n : ββ} (hβ : β (x : E), x β s β fβ x = f x) :
ContDiffOn π n fβ s β ContDiffOn π n f s
theorem ContDiffOn.mono {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {n : ββ} (h : ContDiffOn π n f s) {t : Set E} (hst : t β s) :
ContDiffOn π n f t
theorem ContDiffOn.congr_mono {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {sβ : Set E} {f : E β F} {fβ : E β F} {n : ββ} (hf : ContDiffOn π n f s) (hβ : β (x : E), x β sβ β fβ x = f x) (hs : sβ β s) :
ContDiffOn π n fβ sβ
theorem ContDiffOn.differentiableOn {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {n : ββ} (h : ContDiffOn π n f s) (hn : 1 β€ n) :
DifferentiableOn π f s

If a function is C^n on a set with n β₯ 1, then it is differentiable there.

theorem contDiffOn_of_locally_contDiffOn {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {n : ββ} (h : β (x : E), x β s β β u, β§ x β u β§ ContDiffOn π n f (s β© u)) :
ContDiffOn π n f s

If a function is C^n around each point in a set, then it is C^n on the set.

theorem contDiffOn_succ_iff_hasFDerivWithinAt {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {n : β} :
ContDiffOn π (β(n + 1)) f s β β (x : E), x β s β β u, u β nhdsWithin x (insert x s) β§ β f', (β (x : E), x β u β HasFDerivWithinAt f (f' x) u x) β§ ContDiffOn π (βn) f' u

A function is C^(n + 1) on a domain iff locally, it has a derivative which is C^n.

### Iterated derivative within a set #

noncomputable def iteratedFDerivWithin (π : Type u) [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] (n : β) (f : E β F) (s : Set E) :
E β ContinuousMultilinearMap π (fun i => E) F

The n-th derivative of a function along a set, defined inductively by saying that the n+1-th derivative of f is the derivative of the n-th derivative of f along this set, together with an uncurrying step to see it as a multilinear map in n+1 variables..

Instances For
def ftaylorSeriesWithin (π : Type u) [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] (f : E β F) (s : Set E) (x : E) :

Formal Taylor series associated to a function within a set.

Instances For
@[simp]
theorem iteratedFDerivWithin_zero_apply {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} (m : Fin 0 β E) :
β(iteratedFDerivWithin π 0 f s x) m = f x
theorem iteratedFDerivWithin_zero_eq_comp {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} :
iteratedFDerivWithin π 0 f s = β() β f
@[simp]
theorem norm_iteratedFDerivWithin_zero {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} :
theorem iteratedFDerivWithin_succ_apply_left {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {n : β} (m : Fin (n + 1) β E) :
β(iteratedFDerivWithin π (n + 1) f s x) m = β(β(fderivWithin π (iteratedFDerivWithin π n f s) s x) (m 0)) ()
theorem iteratedFDerivWithin_succ_eq_comp_left {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {n : β} :
iteratedFDerivWithin π (n + 1) f s = β(continuousMultilinearCurryLeftEquiv π (fun x => E) F) β fderivWithin π (iteratedFDerivWithin π n f s) s

Writing explicitly the n+1-th derivative as the composition of a currying linear equiv, and the derivative of the n-th derivative.

theorem fderivWithin_iteratedFDerivWithin {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {s : Set E} {n : β} :
fderivWithin π (iteratedFDerivWithin π n f s) s = β(LinearIsometryEquiv.symm (continuousMultilinearCurryLeftEquiv π (fun x => E) F)) β iteratedFDerivWithin π (n + 1) f s
theorem norm_fderivWithin_iteratedFDerivWithin {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {n : β} :
βfderivWithin π (iteratedFDerivWithin π n f s) s xβ = βiteratedFDerivWithin π (n + 1) f s xβ
theorem iteratedFDerivWithin_succ_apply_right {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {n : β} (hs : UniqueDiffOn π s) (hx : x β s) (m : Fin (n + 1) β E) :
β(iteratedFDerivWithin π (n + 1) f s x) m = β(β(iteratedFDerivWithin π n (fun y => fderivWithin π f s y) s x) ()) (m ())
theorem iteratedFDerivWithin_succ_eq_comp_right {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {n : β} (hs : UniqueDiffOn π s) (hx : x β s) :
iteratedFDerivWithin π (n + 1) f s x = ) β iteratedFDerivWithin π n (fun y => fderivWithin π f s y) s) x

Writing explicitly the n+1-th derivative as the composition of a currying linear equiv, and the n-th derivative of the derivative.

theorem norm_iteratedFDerivWithin_fderivWithin {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {n : β} (hs : UniqueDiffOn π s) (hx : x β s) :
βiteratedFDerivWithin π n (fderivWithin π f s) s xβ = βiteratedFDerivWithin π (n + 1) f s xβ
@[simp]
theorem iteratedFDerivWithin_one_apply {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} (h : UniqueDiffWithinAt π s x) (m : Fin 1 β E) :
β(iteratedFDerivWithin π 1 f s x) m = β(fderivWithin π f s x) (m 0)
theorem Filter.EventuallyEq.iterated_fderiv_within' {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {t : Set E} {f : E β F} {fβ : E β F} {x : E} (h : fβ =αΆ [] f) (ht : t β s) (n : β) :
iteratedFDerivWithin π n fβ t =αΆ [] iteratedFDerivWithin π n f t
theorem Filter.EventuallyEq.iteratedFDerivWithin {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {fβ : E β F} {x : E} (h : fβ =αΆ [] f) (n : β) :
iteratedFDerivWithin π n fβ s =αΆ [] iteratedFDerivWithin π n f s
theorem Filter.EventuallyEq.iteratedFDerivWithin_eq {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {fβ : E β F} {x : E} (h : fβ =αΆ [] f) (hx : fβ x = f x) (n : β) :
iteratedFDerivWithin π n fβ s x = iteratedFDerivWithin π n f s x

If two functions coincide in a neighborhood of x within a set s and at x, then their iterated differentials within this set at x coincide.

theorem iteratedFDerivWithin_congr {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {fβ : E β F} {x : E} (hs : Set.EqOn fβ f s) (hx : x β s) (n : β) :
iteratedFDerivWithin π n fβ s x = iteratedFDerivWithin π n f s x

If two functions coincide on a set s, then their iterated differentials within this set coincide. See also Filter.EventuallyEq.iteratedFDerivWithin_eq and Filter.EventuallyEq.iteratedFDerivWithin.

theorem Set.EqOn.iteratedFDerivWithin {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {fβ : E β F} (hs : Set.EqOn fβ f s) (n : β) :
Set.EqOn (iteratedFDerivWithin π n fβ s) (iteratedFDerivWithin π n f s) s

If two functions coincide on a set s, then their iterated differentials within this set coincide. See also Filter.EventuallyEq.iteratedFDerivWithin_eq and Filter.EventuallyEq.iteratedFDerivWithin.

theorem iteratedFDerivWithin_eventually_congr_set' {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {t : Set E} {f : E β F} {x : E} (y : E) (h : s =αΆ [nhdsWithin x {y}αΆ] t) (n : β) :
theorem iteratedFDerivWithin_eventually_congr_set {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {t : Set E} {f : E β F} {x : E} (h : s =αΆ [nhds x] t) (n : β) :
theorem iteratedFDerivWithin_congr_set {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {t : Set E} {f : E β F} {x : E} (h : s =αΆ [nhds x] t) (n : β) :
iteratedFDerivWithin π n f s x = iteratedFDerivWithin π n f t x
theorem iteratedFDerivWithin_inter' {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {u : Set E} {f : E β F} {x : E} {n : β} (hu : u β ) :
iteratedFDerivWithin π n f (s β© u) x = iteratedFDerivWithin π n f s x

The iterated differential within a set s at a point x is not modified if one intersects s with a neighborhood of x within s.

theorem iteratedFDerivWithin_inter {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {u : Set E} {f : E β F} {x : E} {n : β} (hu : u β nhds x) :
iteratedFDerivWithin π n f (s β© u) x = iteratedFDerivWithin π n f s x

The iterated differential within a set s at a point x is not modified if one intersects s with a neighborhood of x.

theorem iteratedFDerivWithin_inter_open {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {u : Set E} {f : E β F} {x : E} {n : β} (hu : ) (hx : x β u) :
iteratedFDerivWithin π n f (s β© u) x = iteratedFDerivWithin π n f s x

The iterated differential within a set s at a point x is not modified if one intersects s with an open set containing x.

@[simp]
theorem contDiffOn_zero {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} :
ContDiffOn π 0 f s β
theorem contDiffWithinAt_zero {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} (hx : x β s) :
ContDiffWithinAt π 0 f s x β β u, u β β§ ContinuousOn f (s β© u)
theorem HasFTaylorSeriesUpToOn.eq_ftaylor_series_of_uniqueDiffOn {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {n : ββ} {p : E β FormalMultilinearSeries π E F} (h : ) {m : β} (hmn : βm β€ n) (hs : UniqueDiffOn π s) (hx : x β s) :
p x m = iteratedFDerivWithin π m f s x

On a set with unique differentiability, any choice of iterated differential has to coincide with the one we have chosen in iteratedFDerivWithin π m f s.

theorem ContDiffOn.ftaylorSeriesWithin {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {n : ββ} (h : ContDiffOn π n f s) (hs : UniqueDiffOn π s) :

When a function is C^n in a set s of unique differentiability, it admits ftaylorSeriesWithin π f s as a Taylor series up to order n in s.

theorem contDiffOn_of_continuousOn_differentiableOn {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {n : ββ} (Hcont : β (m : β), βm β€ n β ContinuousOn (fun x => iteratedFDerivWithin π m f s x) s) (Hdiff : β (m : β), βm < n β DifferentiableOn π (fun x => iteratedFDerivWithin π m f s x) s) :
ContDiffOn π n f s
theorem contDiffOn_of_differentiableOn {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {n : ββ} (h : β (m : β), βm β€ n β DifferentiableOn π (iteratedFDerivWithin π m f s) s) :
ContDiffOn π n f s
theorem ContDiffOn.continuousOn_iteratedFDerivWithin {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {n : ββ} {m : β} (h : ContDiffOn π n f s) (hmn : βm β€ n) (hs : UniqueDiffOn π s) :
theorem ContDiffOn.differentiableOn_iteratedFDerivWithin {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {n : ββ} {m : β} (h : ContDiffOn π n f s) (hmn : βm < n) (hs : UniqueDiffOn π s) :
DifferentiableOn π (iteratedFDerivWithin π m f s) s
theorem ContDiffWithinAt.differentiableWithinAt_iteratedFDerivWithin {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {n : ββ} {m : β} (h : ContDiffWithinAt π n f s x) (hmn : βm < n) (hs : UniqueDiffOn π (insert x s)) :
DifferentiableWithinAt π (iteratedFDerivWithin π m f s) s x
theorem contDiffOn_iff_continuousOn_differentiableOn {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {n : ββ} (hs : UniqueDiffOn π s) :
ContDiffOn π n f s β (β (m : β), βm β€ n β ContinuousOn (fun x => iteratedFDerivWithin π m f s x) s) β§ β (m : β), βm < n β DifferentiableOn π (fun x => iteratedFDerivWithin π m f s x) s
theorem contDiffOn_succ_of_fderivWithin {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {n : β} (hf : DifferentiableOn π f s) (h : ContDiffOn π (βn) (fun y => fderivWithin π f s y) s) :
ContDiffOn π (β(n + 1)) f s
theorem contDiffOn_succ_iff_fderivWithin {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {n : β} (hs : UniqueDiffOn π s) :
ContDiffOn π (β(n + 1)) f s β DifferentiableOn π f s β§ ContDiffOn π (βn) (fun y => fderivWithin π f s y) s

A function is C^(n + 1) on a domain with unique derivatives if and only if it is differentiable there, and its derivative (expressed with fderivWithin) is C^n.

theorem contDiffOn_succ_iff_has_fderiv_within {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {n : β} (hs : UniqueDiffOn π s) :
ContDiffOn π (β(n + 1)) f s β β f', ContDiffOn π (βn) f' s β§ β (x : E), x β s β HasFDerivWithinAt f (f' x) s x
theorem contDiffOn_succ_iff_fderiv_of_open {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {n : β} (hs : ) :
ContDiffOn π (β(n + 1)) f s β DifferentiableOn π f s β§ ContDiffOn π (βn) (fun y => fderiv π f y) s

A function is C^(n + 1) on an open domain if and only if it is differentiable there, and its derivative (expressed with fderiv) is C^n.

theorem contDiffOn_top_iff_fderivWithin {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} (hs : UniqueDiffOn π s) :
ContDiffOn π β€ f s β DifferentiableOn π f s β§ ContDiffOn π β€ (fun y => fderivWithin π f s y) s

A function is C^β on a domain with unique derivatives if and only if it is differentiable there, and its derivative (expressed with fderivWithin) is C^β.

theorem contDiffOn_top_iff_fderiv_of_open {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} (hs : ) :
ContDiffOn π β€ f s β DifferentiableOn π f s β§ ContDiffOn π β€ (fun y => fderiv π f y) s

A function is C^β on an open domain if and only if it is differentiable there, and its derivative (expressed with fderiv) is C^β.

theorem ContDiffOn.fderivWithin {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {m : ββ} {n : ββ} (hf : ContDiffOn π n f s) (hs : UniqueDiffOn π s) (hmn : m + 1 β€ n) :
ContDiffOn π m (fun y => fderivWithin π f s y) s
theorem ContDiffOn.fderiv_of_open {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {m : ββ} {n : ββ} (hf : ContDiffOn π n f s) (hs : ) (hmn : m + 1 β€ n) :
ContDiffOn π m (fun y => fderiv π f y) s
theorem ContDiffOn.continuousOn_fderivWithin {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {n : ββ} (h : ContDiffOn π n f s) (hs : UniqueDiffOn π s) (hn : 1 β€ n) :
ContinuousOn (fun x => fderivWithin π f s x) s
theorem ContDiffOn.continuousOn_fderiv_of_open {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {n : ββ} (h : ContDiffOn π n f s) (hs : ) (hn : 1 β€ n) :
ContinuousOn (fun x => fderiv π f x) s

### Functions with a Taylor series on the whole space #

structure HasFTaylorSeriesUpTo {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] (n : ββ) (f : E β F) (p : E β FormalMultilinearSeries π E F) :

HasFTaylorSeriesUpTo n f p registers the fact that p 0 = f and p (m+1) is a derivative of p m for m < n, and is continuous for m β€ n. This is a predicate analogous to HasFDerivAt but for higher order derivatives.

Instances For
theorem HasFTaylorSeriesUpTo.zero_eq' {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {n : ββ} {p : E β FormalMultilinearSeries π E F} (h : ) (x : E) :
p x 0 = β() (f x)
theorem hasFTaylorSeriesUpToOn_univ_iff {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {n : ββ} {p : E β FormalMultilinearSeries π E F} :
theorem HasFTaylorSeriesUpTo.hasFTaylorSeriesUpToOn {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {n : ββ} {p : E β FormalMultilinearSeries π E F} (h : ) (s : Set E) :
theorem HasFTaylorSeriesUpTo.ofLe {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {m : ββ} {n : ββ} {p : E β FormalMultilinearSeries π E F} (h : ) (hmn : m β€ n) :
theorem HasFTaylorSeriesUpTo.continuous {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {n : ββ} {p : E β FormalMultilinearSeries π E F} (h : ) :
theorem hasFTaylorSeriesUpTo_zero_iff {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {p : E β FormalMultilinearSeries π E F} :
β β§ β (x : E), = f x
theorem hasFTaylorSeriesUpTo_top_iff {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {p : E β FormalMultilinearSeries π E F} :
β β (n : β), HasFTaylorSeriesUpTo (βn) f p
theorem hasFTaylorSeriesUpTo_top_iff' {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {p : E β FormalMultilinearSeries π E F} :
β (β (x : E), = f x) β§ β (m : β) (x : E), HasFDerivAt (fun y => p y m) () x

In the case that n = β we don't need the continuity assumption in HasFTaylorSeriesUpTo.

theorem HasFTaylorSeriesUpTo.hasFDerivAt {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {n : ββ} {p : E β FormalMultilinearSeries π E F} (h : ) (hn : 1 β€ n) (x : E) :
HasFDerivAt f (β() (p x 1)) x

If a function has a Taylor series at order at least 1, then the term of order 1 of this series is a derivative of f.

theorem HasFTaylorSeriesUpTo.differentiable {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {n : ββ} {p : E β FormalMultilinearSeries π E F} (h : ) (hn : 1 β€ n) :
Differentiable π f
theorem hasFTaylorSeriesUpTo_succ_iff_right {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {p : E β FormalMultilinearSeries π E F} {n : β} :
HasFTaylorSeriesUpTo (β(n + 1)) f p β (β (x : E), = f x) β§ (β (x : E), HasFDerivAt (fun y => p y 0) () x) β§ HasFTaylorSeriesUpTo (βn) (fun x => β() (p x 1)) fun x =>

p is a Taylor series of f up to n+1 if and only if p.shift is a Taylor series up to n for p 1, which is a derivative of f.

### Smooth functions at a point #

def ContDiffAt (π : Type u) [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] (n : ββ) (f : E β F) (x : E) :

A function is continuously differentiable up to n at a point x if, for any integer k β€ n, there is a neighborhood of x where f admits derivatives up to order n, which are continuous.

Instances For
theorem contDiffWithinAt_univ {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {x : E} {n : ββ} :
ContDiffWithinAt π n f Set.univ x β ContDiffAt π n f x
theorem contDiffAt_top {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {x : E} :
ContDiffAt π β€ f x β β (n : β), ContDiffAt π (βn) f x
theorem ContDiffAt.contDiffWithinAt {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {n : ββ} (h : ContDiffAt π n f x) :
ContDiffWithinAt π n f s x
theorem ContDiffWithinAt.contDiffAt {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {n : ββ} (h : ContDiffWithinAt π n f s x) (hx : s β nhds x) :
ContDiffAt π n f x
theorem ContDiffOn.contDiffAt {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {n : ββ} (h : ContDiffOn π n f s) (hx : s β nhds x) :
ContDiffAt π n f x
theorem ContDiffAt.congr_of_eventuallyEq {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {fβ : E β F} {x : E} {n : ββ} (h : ContDiffAt π n f x) (hg : fβ =αΆ [nhds x] f) :
ContDiffAt π n fβ x
theorem ContDiffAt.of_le {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {x : E} {m : ββ} {n : ββ} (h : ContDiffAt π n f x) (hmn : m β€ n) :
ContDiffAt π m f x
theorem ContDiffAt.continuousAt {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {x : E} {n : ββ} (h : ContDiffAt π n f x) :
theorem ContDiffAt.differentiableAt {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {x : E} {n : ββ} (h : ContDiffAt π n f x) (hn : 1 β€ n) :
DifferentiableAt π f x

If a function is C^n with n β₯ 1 at a point, then it is differentiable there.

theorem contDiffAt_succ_iff_hasFDerivAt {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {x : E} {n : β} :
ContDiffAt π (β(n + 1)) f x β β f', (β u, u β nhds x β§ β (x : E), x β u β HasFDerivAt f (f' x) x) β§ ContDiffAt π (βn) f' x

A function is C^(n + 1) at a point iff locally, it has a derivative which is C^n.

theorem ContDiffAt.eventually {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {x : E} {n : β} (h : ContDiffAt π (βn) f x) :
βαΆ  (y : E) in nhds x, ContDiffAt π (βn) f y

### Smooth functions #

def ContDiff (π : Type u) [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] (n : ββ) (f : E β F) :

A function is continuously differentiable up to n if it admits derivatives up to order n, which are continuous. Contrary to the case of definitions in domains (where derivatives might not be unique) we do not need to localize the definition in space or time.

Instances For
theorem HasFTaylorSeriesUpTo.contDiff {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {n : ββ} {f' : E β FormalMultilinearSeries π E F} (hf : ) :
ContDiff π n f

If f has a Taylor series up to n, then it is C^n.

theorem contDiffOn_univ {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {n : ββ} :
ContDiffOn π n f Set.univ β ContDiff π n f
theorem contDiff_iff_contDiffAt {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {n : ββ} :
ContDiff π n f β β (x : E), ContDiffAt π n f x
theorem ContDiff.contDiffAt {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {x : E} {n : ββ} (h : ContDiff π n f) :
ContDiffAt π n f x
theorem ContDiff.contDiffWithinAt {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {x : E} {n : ββ} (h : ContDiff π n f) :
ContDiffWithinAt π n f s x
theorem contDiff_top {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} :
ContDiff π β€ f β β (n : β), ContDiff π (βn) f
theorem contDiff_all_iff_nat {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} :
(β (n : ββ), ContDiff π n f) β β (n : β), ContDiff π (βn) f
theorem ContDiff.contDiffOn {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} {n : ββ} (h : ContDiff π n f) :
ContDiffOn π n f s
@[simp]
theorem contDiff_zero {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} :
ContDiff π 0 f β
theorem contDiffAt_zero {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {x : E} :
ContDiffAt π 0 f x β β u, u β nhds x β§
theorem contDiffAt_one_iff {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {x : E} :
ContDiffAt π 1 f x β β f' u, u β nhds x β§ ContinuousOn f' u β§ β (x : E), x β u β HasFDerivAt f (f' x) x
theorem ContDiff.of_le {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {m : ββ} {n : ββ} (h : ContDiff π n f) (hmn : m β€ n) :
ContDiff π m f
theorem ContDiff.of_succ {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {n : β} (h : ContDiff π (βn + 1) f) :
ContDiff π (βn) f
theorem ContDiff.one_of_succ {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {n : β} (h : ContDiff π (βn + 1) f) :
ContDiff π 1 f
theorem ContDiff.continuous {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {n : ββ} (h : ContDiff π n f) :
theorem ContDiff.differentiable {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {n : ββ} (h : ContDiff π n f) (hn : 1 β€ n) :
Differentiable π f

If a function is C^n with n β₯ 1, then it is differentiable.

theorem contDiff_iff_forall_nat_le {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {n : ββ} :
ContDiff π n f β β (m : β), βm β€ n β ContDiff π (βm) f
theorem contDiff_succ_iff_has_fderiv {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {n : β} :
ContDiff π (β(n + 1)) f β β f', ContDiff π (βn) f' β§ β (x : E), HasFDerivAt f (f' x) x

A function is C^(n+1) iff it has a C^n derivative.

### Iterated derivative #

noncomputable def iteratedFDeriv (π : Type u) [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] (n : β) (f : E β F) :
E β ContinuousMultilinearMap π (fun i => E) F

The n-th derivative of a function, as a multilinear map, defined inductively.

Instances For
def ftaylorSeries (π : Type u) [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] (f : E β F) (x : E) :

Formal Taylor series associated to a function within a set.

Instances For
@[simp]
theorem iteratedFDeriv_zero_apply {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {x : E} (m : Fin 0 β E) :
β(iteratedFDeriv π 0 f x) m = f x
theorem iteratedFDeriv_zero_eq_comp {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} :
iteratedFDeriv π 0 f = β() β f
@[simp]
theorem norm_iteratedFDeriv_zero {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {x : E} :
theorem iteratedFDeriv_with_zero_eq {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} :
iteratedFDerivWithin π 0 f s = iteratedFDeriv π 0 f
theorem iteratedFDeriv_succ_apply_left {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {x : E} {n : β} (m : Fin (n + 1) β E) :
β(iteratedFDeriv π (n + 1) f x) m = β(β(fderiv π (iteratedFDeriv π n f) x) (m 0)) ()
theorem iteratedFDeriv_succ_eq_comp_left {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {n : β} :
iteratedFDeriv π (n + 1) f = β(continuousMultilinearCurryLeftEquiv π (fun x => E) F) β fderiv π (iteratedFDeriv π n f)

Writing explicitly the n+1-th derivative as the composition of a currying linear equiv, and the derivative of the n-th derivative.

theorem fderiv_iteratedFDeriv {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {n : β} :
fderiv π (iteratedFDeriv π n f) = β(LinearIsometryEquiv.symm (continuousMultilinearCurryLeftEquiv π (fun x => E) F)) β iteratedFDeriv π (n + 1) f

Writing explicitly the derivative of the n-th derivative as the composition of a currying linear equiv, and the n + 1-th derivative.

theorem tsupport_iteratedFDeriv_subset {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} (n : β) :
theorem support_iteratedFDeriv_subset {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} (n : β) :
theorem HasCompactSupport.iteratedFDeriv {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} (hf : ) (n : β) :
theorem norm_fderiv_iteratedFDeriv {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {x : E} {n : β} :
βfderiv π (iteratedFDeriv π n f) xβ = βiteratedFDeriv π (n + 1) f xβ
theorem iteratedFDerivWithin_univ {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {n : β} :
iteratedFDerivWithin π n f Set.univ = iteratedFDeriv π n f
theorem iteratedFDerivWithin_of_isOpen {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {s : Set E} {f : E β F} (n : β) (hs : ) :
Set.EqOn (iteratedFDerivWithin π n f s) (iteratedFDeriv π n f) s

In an open set, the iterated derivative within this set coincides with the global iterated derivative.

theorem ftaylorSeriesWithin_univ {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} :
ftaylorSeriesWithin π f Set.univ = ftaylorSeries π f
theorem iteratedFDeriv_succ_apply_right {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {x : E} {n : β} (m : Fin (n + 1) β E) :
β(iteratedFDeriv π (n + 1) f x) m = β(β(iteratedFDeriv π n (fun y => fderiv π f y) x) ()) (m ())
theorem iteratedFDeriv_succ_eq_comp_right {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {x : E} {n : β} :
iteratedFDeriv π (n + 1) f x = ) β iteratedFDeriv π n fun y => fderiv π f y) x

Writing explicitly the n+1-th derivative as the composition of a currying linear equiv, and the n-th derivative of the derivative.

theorem norm_iteratedFDeriv_fderiv {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {x : E} {n : β} :
βiteratedFDeriv π n (fderiv π f) xβ = βiteratedFDeriv π (n + 1) f xβ
@[simp]
theorem iteratedFDeriv_one_apply {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {x : E} (m : Fin 1 β E) :
β(iteratedFDeriv π 1 f x) m = β(fderiv π f x) (m 0)
theorem contDiff_iff_ftaylorSeries {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {n : ββ} :
ContDiff π n f β HasFTaylorSeriesUpTo n f (ftaylorSeries π f)

When a function is C^n in a set s of unique differentiability, it admits ftaylorSeriesWithin π f s as a Taylor series up to order n in s.

theorem contDiff_iff_continuous_differentiable {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {n : ββ} :
ContDiff π n f β (β (m : β), βm β€ n β Continuous fun x => iteratedFDeriv π m f x) β§ β (m : β), βm < n β Differentiable π fun x => iteratedFDeriv π m f x
theorem ContDiff.continuous_iteratedFDeriv {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {n : ββ} {m : β} (hm : βm β€ n) (hf : ContDiff π n f) :
Continuous fun x => iteratedFDeriv π m f x

If f is C^n then its m-times iterated derivative is continuous for m β€ n.

theorem ContDiff.differentiable_iteratedFDeriv {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {n : ββ} {m : β} (hm : βm < n) (hf : ContDiff π n f) :
Differentiable π fun x => iteratedFDeriv π m f x

If f is C^n then its m-times iterated derivative is differentiable for m < n.

theorem contDiff_of_differentiable_iteratedFDeriv {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {n : ββ} (h : β (m : β), βm β€ n β Differentiable π (iteratedFDeriv π m f)) :
ContDiff π n f
theorem contDiff_succ_iff_fderiv {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {n : β} :
ContDiff π (β(n + 1)) f β Differentiable π f β§ ContDiff π βn fun y => fderiv π f y

A function is C^(n + 1) if and only if it is differentiable, and its derivative (formulated in terms of fderiv) is C^n.

theorem contDiff_one_iff_fderiv {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} :
ContDiff π 1 f β Differentiable π f β§ Continuous (fderiv π f)
theorem contDiff_top_iff_fderiv {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} :
ContDiff π β€ f β Differentiable π f β§ ContDiff π β€ fun y => fderiv π f y

A function is C^β if and only if it is differentiable, and its derivative (formulated in terms of fderiv) is C^β.

theorem ContDiff.continuous_fderiv {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {n : ββ} (h : ContDiff π n f) (hn : 1 β€ n) :
Continuous fun x => fderiv π f x
theorem ContDiff.continuous_fderiv_apply {π : Type u} [] {E : Type uE} [NormedSpace π E] {F : Type uF} [NormedSpace π F] {f : E β F} {n : ββ} (h : ContDiff π n f) (hn : 1 β€ n) :
Continuous fun p => β(fderiv π f p.fst) p.snd

If a function is at least C^1, its bundled derivative (mapping (x, v) to Df(x) v) is continuous.