Documentation

Mathlib.Analysis.Calculus.BumpFunction.Basic

Infinitely smooth "bump" functions #

A smooth bump function is an infinitely smooth function f : E โ†’ โ„ supported on a ball that is equal to 1 on a ball of smaller radius.

These functions have many uses in real analysis. E.g.,

There are two classes of spaces where bump functions are guaranteed to exist: inner product spaces and finite-dimensional spaces.

In this file we define a typeclass HasContDiffBump saying that a normed space has a family of smooth bump functions with certain properties.

We also define a structure ContDiffBump that holds the center and radii of the balls from above. An element f : ContDiffBump c can be coerced to a function which is an infinitely smooth function such that

Main Definitions #

Keywords #

smooth function, smooth bump function

structure ContDiffBump {E : Type u_1} (c : E) :

f : ContDiffBump c, where c is a point in a normed vector space, is a bundled smooth function such that

The structure ContDiffBump contains the data required to construct the function: real numbers rIn, rOut, and proofs of 0 < rIn < rOut. The function itself is available through CoeFun when the space is nice enough, i.e., satisfies the HasContDiffBump typeclass.

Instances For

    The base function from which one will construct a family of bump functions. One could add more properties if they are useful and satisfied in the examples of inner product spaces and finite-dimensional vector spaces, notably derivative norm control in terms of R - 1.

    TODO: do we ever need f x = 1 โ†” โ€–xโ€– โ‰ค 1?

    Instances For

      A class registering that a real vector space admits bump functions. This will be instantiated first for inner product spaces, and then for finite-dimensional normed spaces. We use a specific class instead of Nonempty (ContDiffBumpBase E) for performance reasons.

      Instances

        In a space with C^โˆž bump functions, register some function that will be used as a basis to construct bump functions of arbitrary size around any point.

        Equations
          Instances For
            theorem ContDiffBump.rOut_pos {E : Type u_1} {c : E} (f : ContDiffBump c) :
            0 < f.rOut

            The function defined by f : ContDiffBump c. Use automatic coercion to function instead.

            Equations
              Instances For
                theorem ContDiffBump.sub {E : Type u_1} [NormedAddCommGroup E] [NormedSpace โ„ E] [HasContDiffBump E] {c : E} (f : ContDiffBump c) (x : E) :
                โ†‘f (c - x) = โ†‘f (c + x)
                theorem ContDiffBump.neg {E : Type u_1} [NormedAddCommGroup E] [NormedSpace โ„ E] [HasContDiffBump E] (f : ContDiffBump 0) (x : E) :
                โ†‘f (-x) = โ†‘f x
                theorem ContDiffBump.nonneg' {E : Type u_1} [NormedAddCommGroup E] [NormedSpace โ„ E] [HasContDiffBump E] {c : E} (f : ContDiffBump c) (x : E) :
                0 โ‰ค โ†‘f x

                A version of ContDiffBump.nonneg with x explicit

                theorem ContDiffBump.zero_of_le_dist {E : Type u_1} [NormedAddCommGroup E] [NormedSpace โ„ E] [HasContDiffBump E] {c : E} (f : ContDiffBump c) {x : E} (hx : f.rOut โ‰ค dist x c) :
                โ†‘f x = 0
                theorem ContDiffWithinAt.contDiffBump {E : Type u_1} {X : Type u_2} [NormedAddCommGroup E] [NormedSpace โ„ E] [NormedAddCommGroup X] [NormedSpace โ„ X] [HasContDiffBump E] {n : โ„•โˆž} {c g : X โ†’ E} {s : Set X} {f : (x : X) โ†’ ContDiffBump (c x)} {x : X} (hc : ContDiffWithinAt โ„ (โ†‘n) c s x) (hr : ContDiffWithinAt โ„ (โ†‘n) (fun (x : X) => (f x).rIn) s x) (hR : ContDiffWithinAt โ„ (โ†‘n) (fun (x : X) => (f x).rOut) s x) (hg : ContDiffWithinAt โ„ (โ†‘n) g s x) :
                ContDiffWithinAt โ„ (โ†‘n) (fun (x : X) => โ†‘(f x) (g x)) s x

                ContDiffBump is ๐’žโฟ in all its arguments.

                theorem ContDiffAt.contDiffBump {E : Type u_1} {X : Type u_2} [NormedAddCommGroup E] [NormedSpace โ„ E] [NormedAddCommGroup X] [NormedSpace โ„ X] [HasContDiffBump E] {n : โ„•โˆž} {c g : X โ†’ E} {f : (x : X) โ†’ ContDiffBump (c x)} {x : X} (hc : ContDiffAt โ„ (โ†‘n) c x) (hr : ContDiffAt โ„ (โ†‘n) (fun (x : X) => (f x).rIn) x) (hR : ContDiffAt โ„ (โ†‘n) (fun (x : X) => (f x).rOut) x) (hg : ContDiffAt โ„ (โ†‘n) g x) :
                ContDiffAt โ„ (โ†‘n) (fun (x : X) => โ†‘(f x) (g x)) x

                ContDiffBump is ๐’žโฟ in all its arguments.

                theorem ContDiff.contDiffBump {E : Type u_1} {X : Type u_2} [NormedAddCommGroup E] [NormedSpace โ„ E] [NormedAddCommGroup X] [NormedSpace โ„ X] [HasContDiffBump E] {n : โ„•โˆž} {c g : X โ†’ E} {f : (x : X) โ†’ ContDiffBump (c x)} (hc : ContDiff โ„ (โ†‘n) c) (hr : ContDiff โ„ โ†‘n fun (x : X) => (f x).rIn) (hR : ContDiff โ„ โ†‘n fun (x : X) => (f x).rOut) (hg : ContDiff โ„ (โ†‘n) g) :
                ContDiff โ„ โ†‘n fun (x : X) => โ†‘(f x) (g x)
                theorem ContDiffBump.contDiffWithinAt {E : Type u_1} [NormedAddCommGroup E] [NormedSpace โ„ E] [HasContDiffBump E] {c : E} (f : ContDiffBump c) {x : E} {n : โ„•โˆž} {s : Set E} :
                ContDiffWithinAt โ„ (โ†‘n) (โ†‘f) s x