Imports
/- Copyright (c) 2025 Kenny Lau. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Kenny Lau, Joseph Tooby-Smith -/ module public import Physlib.Meta.TODO.Basic public import Mathlib.Analysis.Distribution.TemperedDistribution public import Mathlib.MeasureTheory.Measure.CharacteristicFunction.Basic

Distributions

i. Overview of distributions

Distributions are often used implicitly in physics, for example the correct way to handle a dirac delta function is to treat it as a distribution. In this file we will define distributions and some properties on them.

The distributions from a space E to space F can be thought of as a generalization of functions from E to F. We give a more precise definition of distributions below.

ii. Key results

    E →d[𝕜] F is the type of distributions from E to F.

    Distribution.derivative and Distribution.fourierTransform allow us to make sense of these operations that might not make sense a priori on general functions.

    Distribution.toTemperedDistribution converts a Physlib distribution to a Mathlib tempered distribution.

    Distribution.ofFiniteMeasure is the scalar distribution associated to a finite measure.

    Distribution.ofFiniteMeasure_eq_iff says that finite measures are determined by their associated complex scalar distributions.

iii. Table of Content

    A. The definition of a distribution

    B. Construction of distributions from linear maps

    C. Derivatives of distributions

    D. Fourier transform of distributions

    E. Specific distributions

iv. Implementation notes

    In this file we will define distributions generally, in Physlib.SpaceAndTime.Distributions we define properties of distributions directly related to Space.

@[expose] public section

A. The definition of a distribution

In physics, we often encounter mathematical objects like the Dirac delta function δ(x) that are not functions in the traditional sense. Distributions provide a rigorous framework for handling such objects.

The core idea is to define a "generalized function" not by its value at each point, but by how it acts on a set of well-behaved "test functions".

These test functions, typically denoted η. The choice of test functions depends on the application here we choose test functions which are smooth and decay rapidly at infinity (called Schwartz maps). Thus really the distributions we are defining here are called tempered distributions.

A distribution u is a linear map that takes a test function η and produces a value, which can be a scalar or a vector. This action is written as ⟪u,η⟫.

Two key examples illustrate this concept:

    Ordinary Functions: Any well-behaved function f(x) can be viewed as a distribution. Its action on a test function η is defined by integration: u_f(η) = ∫ f(x) η(x) dx This integral "tests" the function f using η.

    Dirac Delta: The Dirac delta δ_a (centered at a) is a distribution whose action is to simply evaluate the test function at a: δ_a(η) = η(a)

Formally, a distribution is a continuous linear map from the space of Schwartz functions 𝓢(E, 𝕜) to a vector space F over 𝕜. This definition allows us to rigorously define concepts like derivatives and Fourier transforms for these generalized functions, as we will see below.

We use the notation E →d[𝕜] F to denote the space of distributions from E to F where E is a normed vector space over and F is a normed vector space over 𝕜.

/- Need the `Physlib` namespace to prevent conflict with Mathlib's distributions. -/ namespace Physlib

An F-valued distribution on E (where E is a normed vector space over and F is a normed vector space over 𝕜) is a continuous linear map 𝓢(E, 𝕜) →L[𝕜] F where 𝒮(E, 𝕜) is the Schwartz space of smooth functions E → 𝕜 with rapidly decreasing iterated derivatives. This is notated as E →d[𝕜] F.

This should be seen as a generalisation of functions E → F.

abbrev Distribution (𝕜 E F : Type) [RCLike 𝕜] [NormedAddCommGroup E] [NormedAddCommGroup F] [NormedSpace E] [NormedSpace 𝕜 F] : Type := 𝓢(E, 𝕜) →L[𝕜] F
@[inherit_doc] notation:25 E:arg "→d[" 𝕜:25 "] " F:0 => Distribution 𝕜 E F

B. Construction of distributions from linear maps

Distributions are defined as continuous linear maps from 𝓢(E, 𝕜) to F. It is possible to define a constructor of distributions from just linear maps 𝓢(E, 𝕜) →ₗ[𝕜] F (without the continuity requirement) by imposing a condition on the size of u applied to η.

The construction of a distribution from the following data:

    We take a finite set s of pairs (k, n) ∈ ℕ × ℕ that will be explained later.

    We take a linear map u that evaluates the given Schwartz function η. At this stage we don't need u to be continuous.

    Recall that a Schwartz function η satisfies a bound ‖x‖ᵏ * ‖(dⁿ/dxⁿ) η‖ < Mₙₖ where Mₙₖ : ℝ only depends on (k, n) : ℕ × ℕ.

    This step is where s is used: for each test function η, the norm ‖u η‖ is required to be bounded by C * (‖x‖ᵏ * ‖(dⁿ/dxⁿ) η‖) for some x : ℝ and for some (k, n) ∈ s, where C ≥ 0 is a global scalar.

𝕜:TypeE:TypeF:Typeinst✝⁴:RCLike 𝕜inst✝³:NormedAddCommGroup Einst✝²:NormedAddCommGroup Finst✝¹:NormedSpace Einst✝:NormedSpace 𝕜 Fs:Finset ( × )u:𝓢(E, 𝕜) →ₗ[𝕜] FC:hC:0 Chu: (η : 𝓢(E, 𝕜)), k n x, (k, n) s u η C * (x ^ k * iteratedFDeriv n (⇑η) x)η:𝓢(E, 𝕜)k:n:x:Ehkn:(k, n) s:u η C * (x ^ k * iteratedFDeriv n (⇑η) x)(SchwartzMap.seminorm 𝕜 k n) η (s.sup fun i => NNReal.mk ((schwartzSeminormFamily 𝕜 E 𝕜 i) η) ) 𝕜:TypeE:TypeF:Typeinst✝⁴:RCLike 𝕜inst✝³:NormedAddCommGroup Einst✝²:NormedAddCommGroup Finst✝¹:NormedSpace Einst✝:NormedSpace 𝕜 Fs:Finset ( × )u:𝓢(E, 𝕜) →ₗ[𝕜] FC:hC:0 Chu: (η : 𝓢(E, 𝕜)), k n x, (k, n) s u η C * (x ^ k * iteratedFDeriv n (⇑η) x)η:𝓢(E, 𝕜)k:n:x:Ehkn:(k, n) s:u η C * (x ^ k * iteratedFDeriv n (⇑η) x)(SchwartzMap.seminorm 𝕜 k n) η, s.sup fun i => NNReal.mk ((schwartzSeminormFamily 𝕜 E 𝕜 i) η) All goals completed! 🐙
@[simp] lemma ofLinear_apply (s : Finset ( × )) (u : 𝓢(E, 𝕜) →ₗ[𝕜] F) (hu : C : , 0 C η : 𝓢(E, 𝕜), (k : ) (n : ) (x : E), (k, n) s u η C * (x ^ k * iteratedFDeriv n η x)) (η : 𝓢(E, 𝕜)) : ofLinear 𝕜 s u hu η = u η := rfl

C. Derivatives of distributions

Given a distribution u : E →d[𝕜] F, we can define the derivative of that distribution. In general when defining an operation on a distribution, we do it by applying a similar operation instead to the Schwartz maps it acts on.

Thus the derivative of u is the distribution which takes η to ⟪u, - η'⟫ where η' is the derivative of η.

The Fréchet derivative of a distribution.

Informally, for a distribution u : E →d[𝕜] F, the Fréchet derivative fderiv u x v corresponds to the derivative of u at the point x in the direction v. For example, if F = ℝ³ then fderiv u x v is a vector in ℝ³ corresponding to (v₁ ∂u₁/∂x₁ + v₂ ∂u₁/∂x₂ + v₃ ∂u₁/∂x₃, v₁ ∂u₂/∂x₁ + v₂ ∂u₂/∂x₂ + v₃ ∂u₂/∂x₃,...).

Formally, for a distribution u : E →d[𝕜] F, this is actually defined the distribution which takes test function η : E → 𝕜 to - u (SchwartzMap.evalCLM v (SchwartzMap.fderivCLM 𝕜 η)).

Note that, unlike for functions, the Fréchet derivative of a distribution always exists.

def fderivD [FiniteDimensional E] : (E →d[𝕜] F) →ₗ[𝕜] (E →d[𝕜] (E →L[] F)) where toFun u := { toFun η := LinearMap.toContinuousLinearMap { toFun v := ContinuousLinearEquiv.neg 𝕜 <| u <| SchwartzMap.evalCLM (𝕜 := 𝕜) E 𝕜 v <| SchwartzMap.fderivCLM 𝕜 (E := E) (F := 𝕜) η map_add' v1 v2 := 𝕜:TypeE:TypeF:Typeinst✝⁷:RCLike 𝕜inst✝⁶:NormedAddCommGroup Einst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace Einst✝³:NormedSpace Finst✝²:NormedSpace 𝕜 Finst✝¹:SMulCommClass 𝕜 Finst✝:FiniteDimensional Eu:E→d[𝕜] Fη:𝓢(E, 𝕜)v1:Ev2:E(ContinuousLinearEquiv.neg 𝕜) (u ((SchwartzMap.evalCLM 𝕜 E 𝕜 (v1 + v2)) ((fderivCLM 𝕜 E 𝕜) η))) = (ContinuousLinearEquiv.neg 𝕜) (u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v1) ((fderivCLM 𝕜 E 𝕜) η))) + (ContinuousLinearEquiv.neg 𝕜) (u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v2) ((fderivCLM 𝕜 E 𝕜) η))) 𝕜:TypeE:TypeF:Typeinst✝⁷:RCLike 𝕜inst✝⁶:NormedAddCommGroup Einst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace Einst✝³:NormedSpace Finst✝²:NormedSpace 𝕜 Finst✝¹:SMulCommClass 𝕜 Finst✝:FiniteDimensional Eu:E→d[𝕜] Fη:𝓢(E, 𝕜)v1:Ev2:E-u ((SchwartzMap.evalCLM 𝕜 E 𝕜 (v1 + v2)) ((fderivCLM 𝕜 E 𝕜) η)) = -u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v1) ((fderivCLM 𝕜 E 𝕜) η)) + -u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v2) ((fderivCLM 𝕜 E 𝕜) η)) 𝕜:TypeE:TypeF:Typeinst✝⁷:RCLike 𝕜inst✝⁶:NormedAddCommGroup Einst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace Einst✝³:NormedSpace Finst✝²:NormedSpace 𝕜 Finst✝¹:SMulCommClass 𝕜 Finst✝:FiniteDimensional Eu:E→d[𝕜] Fη:𝓢(E, 𝕜)v1:Ev2:E-u ((SchwartzMap.evalCLM 𝕜 E 𝕜 (v1 + v2)) ((fderivCLM 𝕜 E 𝕜) η)) = -u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v1) ((fderivCLM 𝕜 E 𝕜) η) + (SchwartzMap.evalCLM 𝕜 E 𝕜 v2) ((fderivCLM 𝕜 E 𝕜) η))𝕜:TypeE:TypeF:Typeinst✝⁷:RCLike 𝕜inst✝⁶:NormedAddCommGroup Einst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace Einst✝³:NormedSpace Finst✝²:NormedSpace 𝕜 Finst✝¹:SMulCommClass 𝕜 Finst✝:FiniteDimensional Eu:E→d[𝕜] Fη:𝓢(E, 𝕜)v1:Ev2:E-u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v1) ((fderivCLM 𝕜 E 𝕜) η) + (SchwartzMap.evalCLM 𝕜 E 𝕜 v2) ((fderivCLM 𝕜 E 𝕜) η)) = -u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v1) ((fderivCLM 𝕜 E 𝕜) η)) + -u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v2) ((fderivCLM 𝕜 E 𝕜) η)) 𝕜:TypeE:TypeF:Typeinst✝⁷:RCLike 𝕜inst✝⁶:NormedAddCommGroup Einst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace Einst✝³:NormedSpace Finst✝²:NormedSpace 𝕜 Finst✝¹:SMulCommClass 𝕜 Finst✝:FiniteDimensional Eu:E→d[𝕜] Fη:𝓢(E, 𝕜)v1:Ev2:E-u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v1) ((fderivCLM 𝕜 E 𝕜) η) + (SchwartzMap.evalCLM 𝕜 E 𝕜 v2) ((fderivCLM 𝕜 E 𝕜) η)) = -u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v1) ((fderivCLM 𝕜 E 𝕜) η)) + -u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v2) ((fderivCLM 𝕜 E 𝕜) η))𝕜:TypeE:TypeF:Typeinst✝⁷:RCLike 𝕜inst✝⁶:NormedAddCommGroup Einst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace Einst✝³:NormedSpace Finst✝²:NormedSpace 𝕜 Finst✝¹:SMulCommClass 𝕜 Finst✝:FiniteDimensional Eu:E→d[𝕜] Fη:𝓢(E, 𝕜)v1:Ev2:E-u ((SchwartzMap.evalCLM 𝕜 E 𝕜 (v1 + v2)) ((fderivCLM 𝕜 E 𝕜) η)) = -u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v1) ((fderivCLM 𝕜 E 𝕜) η) + (SchwartzMap.evalCLM 𝕜 E 𝕜 v2) ((fderivCLM 𝕜 E 𝕜) η)) 𝕜:TypeE:TypeF:Typeinst✝⁷:RCLike 𝕜inst✝⁶:NormedAddCommGroup Einst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace Einst✝³:NormedSpace Finst✝²:NormedSpace 𝕜 Finst✝¹:SMulCommClass 𝕜 Finst✝:FiniteDimensional Eu:E→d[𝕜] Fη:𝓢(E, 𝕜)v1:Ev2:E-u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v1) ((fderivCLM 𝕜 E 𝕜) η) + (SchwartzMap.evalCLM 𝕜 E 𝕜 v2) ((fderivCLM 𝕜 E 𝕜) η)) = -u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v1) ((fderivCLM 𝕜 E 𝕜) η)) + -u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v2) ((fderivCLM 𝕜 E 𝕜) η)) 𝕜:TypeE:TypeF:Typeinst✝⁷:RCLike 𝕜inst✝⁶:NormedAddCommGroup Einst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace Einst✝³:NormedSpace Finst✝²:NormedSpace 𝕜 Finst✝¹:SMulCommClass 𝕜 Finst✝:FiniteDimensional Eu:E→d[𝕜] Fη:𝓢(E, 𝕜)v1:Ev2:E-u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v2) ((fderivCLM 𝕜 E 𝕜) η)) + -u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v1) ((fderivCLM 𝕜 E 𝕜) η)) = -u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v1) ((fderivCLM 𝕜 E 𝕜) η)) + -u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v2) ((fderivCLM 𝕜 E 𝕜) η)) All goals completed! 🐙 𝕜:TypeE:TypeF:Typeinst✝⁷:RCLike 𝕜inst✝⁶:NormedAddCommGroup Einst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace Einst✝³:NormedSpace Finst✝²:NormedSpace 𝕜 Finst✝¹:SMulCommClass 𝕜 Finst✝:FiniteDimensional Eu:E→d[𝕜] Fη:𝓢(E, 𝕜)v1:Ev2:E(SchwartzMap.evalCLM 𝕜 E 𝕜 (v1 + v2)) ((fderivCLM 𝕜 E 𝕜) η) = (SchwartzMap.evalCLM 𝕜 E 𝕜 v1) ((fderivCLM 𝕜 E 𝕜) η) + (SchwartzMap.evalCLM 𝕜 E 𝕜 v2) ((fderivCLM 𝕜 E 𝕜) η) 𝕜:TypeE:TypeF:Typeinst✝⁷:RCLike 𝕜inst✝⁶:NormedAddCommGroup Einst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace Einst✝³:NormedSpace Finst✝²:NormedSpace 𝕜 Finst✝¹:SMulCommClass 𝕜 Finst✝:FiniteDimensional Eu:E→d[𝕜] Fη:𝓢(E, 𝕜)v1:Ev2:Ex:E((SchwartzMap.evalCLM 𝕜 E 𝕜 (v1 + v2)) ((fderivCLM 𝕜 E 𝕜) η)) x = ((SchwartzMap.evalCLM 𝕜 E 𝕜 v1) ((fderivCLM 𝕜 E 𝕜) η) + (SchwartzMap.evalCLM 𝕜 E 𝕜 v2) ((fderivCLM 𝕜 E 𝕜) η)) x 𝕜:TypeE:TypeF:Typeinst✝⁷:RCLike 𝕜inst✝⁶:NormedAddCommGroup Einst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace Einst✝³:NormedSpace Finst✝²:NormedSpace 𝕜 Finst✝¹:SMulCommClass 𝕜 Finst✝:FiniteDimensional Eu:E→d[𝕜] Fη:𝓢(E, 𝕜)v1:Ev2:Ex:E{ toFun := fun x => (fderiv (⇑η) x) v1 + (fderiv (⇑η) x) v2, smooth' := , decay' := } x = { toFun := fun x => (fderiv (⇑η) x) v1, smooth' := , decay' := } x + { toFun := fun x => (fderiv (⇑η) x) v2, smooth' := , decay' := } x All goals completed! 🐙 map_smul' a v1 := 𝕜:TypeE:TypeF:Typeinst✝⁷:RCLike 𝕜inst✝⁶:NormedAddCommGroup Einst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace Einst✝³:NormedSpace Finst✝²:NormedSpace 𝕜 Finst✝¹:SMulCommClass 𝕜 Finst✝:FiniteDimensional Eu:E→d[𝕜] Fη:𝓢(E, 𝕜)a:v1:E(ContinuousLinearEquiv.neg 𝕜) (u ((SchwartzMap.evalCLM 𝕜 E 𝕜 (a v1)) ((fderivCLM 𝕜 E 𝕜) η))) = (RingHom.id ) a (ContinuousLinearEquiv.neg 𝕜) (u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v1) ((fderivCLM 𝕜 E 𝕜) η))) 𝕜:TypeE:TypeF:Typeinst✝⁷:RCLike 𝕜inst✝⁶:NormedAddCommGroup Einst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace Einst✝³:NormedSpace Finst✝²:NormedSpace 𝕜 Finst✝¹:SMulCommClass 𝕜 Finst✝:FiniteDimensional Eu:E→d[𝕜] Fη:𝓢(E, 𝕜)a:v1:Eu ((SchwartzMap.evalCLM 𝕜 E 𝕜 (a v1)) ((fderivCLM 𝕜 E 𝕜) η)) = a u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v1) ((fderivCLM 𝕜 E 𝕜) η)) 𝕜:TypeE:TypeF:Typeinst✝⁷:RCLike 𝕜inst✝⁶:NormedAddCommGroup Einst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace Einst✝³:NormedSpace Finst✝²:NormedSpace 𝕜 Finst✝¹:SMulCommClass 𝕜 Finst✝:FiniteDimensional Eu:E→d[𝕜] Fη:𝓢(E, 𝕜)a:v1:Eu ((SchwartzMap.evalCLM 𝕜 E 𝕜 (a v1)) ((fderivCLM 𝕜 E 𝕜) η)) = u (a (SchwartzMap.evalCLM 𝕜 E 𝕜 v1) ((fderivCLM 𝕜 E 𝕜) η))𝕜:TypeE:TypeF:Typeinst✝⁷:RCLike 𝕜inst✝⁶:NormedAddCommGroup Einst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace Einst✝³:NormedSpace Finst✝²:NormedSpace 𝕜 Finst✝¹:SMulCommClass 𝕜 Finst✝:FiniteDimensional Eu:E→d[𝕜] Fη:𝓢(E, 𝕜)a:v1:Eu (a (SchwartzMap.evalCLM 𝕜 E 𝕜 v1) ((fderivCLM 𝕜 E 𝕜) η)) = a u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v1) ((fderivCLM 𝕜 E 𝕜) η)) 𝕜:TypeE:TypeF:Typeinst✝⁷:RCLike 𝕜inst✝⁶:NormedAddCommGroup Einst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace Einst✝³:NormedSpace Finst✝²:NormedSpace 𝕜 Finst✝¹:SMulCommClass 𝕜 Finst✝:FiniteDimensional Eu:E→d[𝕜] Fη:𝓢(E, 𝕜)a:v1:Eu (a (SchwartzMap.evalCLM 𝕜 E 𝕜 v1) ((fderivCLM 𝕜 E 𝕜) η)) = a u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v1) ((fderivCLM 𝕜 E 𝕜) η))𝕜:TypeE:TypeF:Typeinst✝⁷:RCLike 𝕜inst✝⁶:NormedAddCommGroup Einst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace Einst✝³:NormedSpace Finst✝²:NormedSpace 𝕜 Finst✝¹:SMulCommClass 𝕜 Finst✝:FiniteDimensional Eu:E→d[𝕜] Fη:𝓢(E, 𝕜)a:v1:Eu ((SchwartzMap.evalCLM 𝕜 E 𝕜 (a v1)) ((fderivCLM 𝕜 E 𝕜) η)) = u (a (SchwartzMap.evalCLM 𝕜 E 𝕜 v1) ((fderivCLM 𝕜 E 𝕜) η)) 𝕜:TypeE:TypeF:Typeinst✝⁷:RCLike 𝕜inst✝⁶:NormedAddCommGroup Einst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace Einst✝³:NormedSpace Finst✝²:NormedSpace 𝕜 Finst✝¹:SMulCommClass 𝕜 Finst✝:FiniteDimensional Eu:E→d[𝕜] Fη:𝓢(E, 𝕜)a:v1:Eu (a (SchwartzMap.evalCLM 𝕜 E 𝕜 v1) ((fderivCLM 𝕜 E 𝕜) η)) = a u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v1) ((fderivCLM 𝕜 E 𝕜) η)) All goals completed! 🐙 𝕜:TypeE:TypeF:Typeinst✝⁷:RCLike 𝕜inst✝⁶:NormedAddCommGroup Einst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace Einst✝³:NormedSpace Finst✝²:NormedSpace 𝕜 Finst✝¹:SMulCommClass 𝕜 Finst✝:FiniteDimensional Eu:E→d[𝕜] Fη:𝓢(E, 𝕜)a:v1:E(SchwartzMap.evalCLM 𝕜 E 𝕜 (a v1)) ((fderivCLM 𝕜 E 𝕜) η) = a (SchwartzMap.evalCLM 𝕜 E 𝕜 v1) ((fderivCLM 𝕜 E 𝕜) η) 𝕜:TypeE:TypeF:Typeinst✝⁷:RCLike 𝕜inst✝⁶:NormedAddCommGroup Einst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace Einst✝³:NormedSpace Finst✝²:NormedSpace 𝕜 Finst✝¹:SMulCommClass 𝕜 Finst✝:FiniteDimensional Eu:E→d[𝕜] Fη:𝓢(E, 𝕜)a:v1:Ex:E((SchwartzMap.evalCLM 𝕜 E 𝕜 (a v1)) ((fderivCLM 𝕜 E 𝕜) η)) x = (a (SchwartzMap.evalCLM 𝕜 E 𝕜 v1) ((fderivCLM 𝕜 E 𝕜) η)) x 𝕜:TypeE:TypeF:Typeinst✝⁷:RCLike 𝕜inst✝⁶:NormedAddCommGroup Einst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace Einst✝³:NormedSpace Finst✝²:NormedSpace 𝕜 Finst✝¹:SMulCommClass 𝕜 Finst✝:FiniteDimensional Eu:E→d[𝕜] Fη:𝓢(E, 𝕜)a:v1:Ex:E{ toFun := fun x => a (fderiv (⇑η) x) v1, smooth' := , decay' := } x = a { toFun := fun x => (fderiv (⇑η) x) v1, smooth' := , decay' := } x All goals completed! 🐙} map_add' η1 η2 := 𝕜:TypeE:TypeF:Typeinst✝⁷:RCLike 𝕜inst✝⁶:NormedAddCommGroup Einst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace Einst✝³:NormedSpace Finst✝²:NormedSpace 𝕜 Finst✝¹:SMulCommClass 𝕜 Finst✝:FiniteDimensional Eu:E→d[𝕜] Fη1:𝓢(E, 𝕜)η2:𝓢(E, 𝕜)LinearMap.toContinuousLinearMap { toFun := fun v => (ContinuousLinearEquiv.neg 𝕜) (u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v) ((fderivCLM 𝕜 E 𝕜) (η1 + η2)))), map_add' := , map_smul' := } = LinearMap.toContinuousLinearMap { toFun := fun v => (ContinuousLinearEquiv.neg 𝕜) (u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v) ((fderivCLM 𝕜 E 𝕜) η1))), map_add' := , map_smul' := } + LinearMap.toContinuousLinearMap { toFun := fun v => (ContinuousLinearEquiv.neg 𝕜) (u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v) ((fderivCLM 𝕜 E 𝕜) η2))), map_add' := , map_smul' := } 𝕜:TypeE:TypeF:Typeinst✝⁷:RCLike 𝕜inst✝⁶:NormedAddCommGroup Einst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace Einst✝³:NormedSpace Finst✝²:NormedSpace 𝕜 Finst✝¹:SMulCommClass 𝕜 Finst✝:FiniteDimensional Eu:E→d[𝕜] Fη1:𝓢(E, 𝕜)η2:𝓢(E, 𝕜)x:E(LinearMap.toContinuousLinearMap { toFun := fun v => (ContinuousLinearEquiv.neg 𝕜) (u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v) ((fderivCLM 𝕜 E 𝕜) (η1 + η2)))), map_add' := , map_smul' := }) x = (LinearMap.toContinuousLinearMap { toFun := fun v => (ContinuousLinearEquiv.neg 𝕜) (u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v) ((fderivCLM 𝕜 E 𝕜) η1))), map_add' := , map_smul' := } + LinearMap.toContinuousLinearMap { toFun := fun v => (ContinuousLinearEquiv.neg 𝕜) (u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v) ((fderivCLM 𝕜 E 𝕜) η2))), map_add' := , map_smul' := }) x All goals completed! 🐙 map_smul' a η := 𝕜:TypeE:TypeF:Typeinst✝⁷:RCLike 𝕜inst✝⁶:NormedAddCommGroup Einst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace Einst✝³:NormedSpace Finst✝²:NormedSpace 𝕜 Finst✝¹:SMulCommClass 𝕜 Finst✝:FiniteDimensional Eu:E→d[𝕜] Fa:𝕜η:𝓢(E, 𝕜)LinearMap.toContinuousLinearMap { toFun := fun v => (ContinuousLinearEquiv.neg 𝕜) (u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v) ((fderivCLM 𝕜 E 𝕜) (a η)))), map_add' := , map_smul' := } = (RingHom.id 𝕜) a LinearMap.toContinuousLinearMap { toFun := fun v => (ContinuousLinearEquiv.neg 𝕜) (u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v) ((fderivCLM 𝕜 E 𝕜) η))), map_add' := , map_smul' := } 𝕜:TypeE:TypeF:Typeinst✝⁷:RCLike 𝕜inst✝⁶:NormedAddCommGroup Einst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace Einst✝³:NormedSpace Finst✝²:NormedSpace 𝕜 Finst✝¹:SMulCommClass 𝕜 Finst✝:FiniteDimensional Eu:E→d[𝕜] Fa:𝕜η:𝓢(E, 𝕜)x:E(LinearMap.toContinuousLinearMap { toFun := fun v => (ContinuousLinearEquiv.neg 𝕜) (u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v) ((fderivCLM 𝕜 E 𝕜) (a η)))), map_add' := , map_smul' := }) x = ((RingHom.id 𝕜) a LinearMap.toContinuousLinearMap { toFun := fun v => (ContinuousLinearEquiv.neg 𝕜) (u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v) ((fderivCLM 𝕜 E 𝕜) η))), map_add' := , map_smul' := }) x All goals completed! 🐙 cont := 𝕜:TypeE:TypeF:Typeinst✝⁷:RCLike 𝕜inst✝⁶:NormedAddCommGroup Einst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace Einst✝³:NormedSpace Finst✝²:NormedSpace 𝕜 Finst✝¹:SMulCommClass 𝕜 Finst✝:FiniteDimensional Eu:E→d[𝕜] FContinuous fun η => LinearMap.toContinuousLinearMap { toFun := fun v => (ContinuousLinearEquiv.neg 𝕜) (u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v) ((fderivCLM 𝕜 E 𝕜) η))), map_add' := , map_smul' := } 𝕜:TypeE:TypeF:Typeinst✝⁷:RCLike 𝕜inst✝⁶:NormedAddCommGroup Einst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace Einst✝³:NormedSpace Finst✝²:NormedSpace 𝕜 Finst✝¹:SMulCommClass 𝕜 Finst✝:FiniteDimensional Eu:E→d[𝕜] F (y : E), Continuous fun x => (LinearMap.toContinuousLinearMap { toFun := fun v => (ContinuousLinearEquiv.neg 𝕜) (u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v) ((fderivCLM 𝕜 E 𝕜) x))), map_add' := , map_smul' := }) y 𝕜:TypeE:TypeF:Typeinst✝⁷:RCLike 𝕜inst✝⁶:NormedAddCommGroup Einst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace Einst✝³:NormedSpace Finst✝²:NormedSpace 𝕜 Finst✝¹:SMulCommClass 𝕜 Finst✝:FiniteDimensional Eu:E→d[𝕜] Fy:EContinuous fun x => (LinearMap.toContinuousLinearMap { toFun := fun v => (ContinuousLinearEquiv.neg 𝕜) (u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v) ((fderivCLM 𝕜 E 𝕜) x))), map_add' := , map_smul' := }) y 𝕜:TypeE:TypeF:Typeinst✝⁷:RCLike 𝕜inst✝⁶:NormedAddCommGroup Einst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace Einst✝³:NormedSpace Finst✝²:NormedSpace 𝕜 Finst✝¹:SMulCommClass 𝕜 Finst✝:FiniteDimensional Eu:E→d[𝕜] Fy:EContinuous fun x => -u ((SchwartzMap.evalCLM 𝕜 E 𝕜 y) ((fderivCLM 𝕜 E 𝕜) x)) All goals completed! 🐙 } map_add' u₁ u₂ := 𝕜:TypeE:TypeF:Typeinst✝⁷:RCLike 𝕜inst✝⁶:NormedAddCommGroup Einst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace Einst✝³:NormedSpace Finst✝²:NormedSpace 𝕜 Finst✝¹:SMulCommClass 𝕜 Finst✝:FiniteDimensional Eu₁:E→d[𝕜] Fu₂:E→d[𝕜] F{ toFun := fun η => LinearMap.toContinuousLinearMap { toFun := fun v => (ContinuousLinearEquiv.neg 𝕜) ((u₁ + u₂) ((SchwartzMap.evalCLM 𝕜 E 𝕜 v) ((fderivCLM 𝕜 E 𝕜) η))), map_add' := , map_smul' := }, map_add' := , map_smul' := , cont := } = { toFun := fun η => LinearMap.toContinuousLinearMap { toFun := fun v => (ContinuousLinearEquiv.neg 𝕜) (u₁ ((SchwartzMap.evalCLM 𝕜 E 𝕜 v) ((fderivCLM 𝕜 E 𝕜) η))), map_add' := , map_smul' := }, map_add' := , map_smul' := , cont := } + { toFun := fun η => LinearMap.toContinuousLinearMap { toFun := fun v => (ContinuousLinearEquiv.neg 𝕜) (u₂ ((SchwartzMap.evalCLM 𝕜 E 𝕜 v) ((fderivCLM 𝕜 E 𝕜) η))), map_add' := , map_smul' := }, map_add' := , map_smul' := , cont := } 𝕜:TypeE:TypeF:Typeinst✝⁷:RCLike 𝕜inst✝⁶:NormedAddCommGroup Einst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace Einst✝³:NormedSpace Finst✝²:NormedSpace 𝕜 Finst✝¹:SMulCommClass 𝕜 Finst✝:FiniteDimensional Eu₁:E→d[𝕜] Fu₂:E→d[𝕜] Fη:𝓢(E, 𝕜)x✝:E({ toFun := fun η => LinearMap.toContinuousLinearMap { toFun := fun v => (ContinuousLinearEquiv.neg 𝕜) ((u₁ + u₂) ((SchwartzMap.evalCLM 𝕜 E 𝕜 v) ((fderivCLM 𝕜 E 𝕜) η))), map_add' := , map_smul' := }, map_add' := , map_smul' := , cont := } η) x✝ = (({ toFun := fun η => LinearMap.toContinuousLinearMap { toFun := fun v => (ContinuousLinearEquiv.neg 𝕜) (u₁ ((SchwartzMap.evalCLM 𝕜 E 𝕜 v) ((fderivCLM 𝕜 E 𝕜) η))), map_add' := , map_smul' := }, map_add' := , map_smul' := , cont := } + { toFun := fun η => LinearMap.toContinuousLinearMap { toFun := fun v => (ContinuousLinearEquiv.neg 𝕜) (u₂ ((SchwartzMap.evalCLM 𝕜 E 𝕜 v) ((fderivCLM 𝕜 E 𝕜) η))), map_add' := , map_smul' := }, map_add' := , map_smul' := , cont := }) η) x✝ 𝕜:TypeE:TypeF:Typeinst✝⁷:RCLike 𝕜inst✝⁶:NormedAddCommGroup Einst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace Einst✝³:NormedSpace Finst✝²:NormedSpace 𝕜 Finst✝¹:SMulCommClass 𝕜 Finst✝:FiniteDimensional Eu₁:E→d[𝕜] Fu₂:E→d[𝕜] Fη:𝓢(E, 𝕜)x✝:E-u₂ ((SchwartzMap.evalCLM 𝕜 E 𝕜 x✝) ((fderivCLM 𝕜 E 𝕜) η)) + -u₁ ((SchwartzMap.evalCLM 𝕜 E 𝕜 x✝) ((fderivCLM 𝕜 E 𝕜) η)) = -u₁ ((SchwartzMap.evalCLM 𝕜 E 𝕜 x✝) ((fderivCLM 𝕜 E 𝕜) η)) + -u₂ ((SchwartzMap.evalCLM 𝕜 E 𝕜 x✝) ((fderivCLM 𝕜 E 𝕜) η)) All goals completed! 🐙 map_smul' c u := 𝕜:TypeE:TypeF:Typeinst✝⁷:RCLike 𝕜inst✝⁶:NormedAddCommGroup Einst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace Einst✝³:NormedSpace Finst✝²:NormedSpace 𝕜 Finst✝¹:SMulCommClass 𝕜 Finst✝:FiniteDimensional Ec:𝕜u:E→d[𝕜] F{ toFun := fun η => LinearMap.toContinuousLinearMap { toFun := fun v => (ContinuousLinearEquiv.neg 𝕜) ((c u) ((SchwartzMap.evalCLM 𝕜 E 𝕜 v) ((fderivCLM 𝕜 E 𝕜) η))), map_add' := , map_smul' := }, map_add' := , map_smul' := , cont := } = (RingHom.id 𝕜) c { toFun := fun η => LinearMap.toContinuousLinearMap { toFun := fun v => (ContinuousLinearEquiv.neg 𝕜) (u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v) ((fderivCLM 𝕜 E 𝕜) η))), map_add' := , map_smul' := }, map_add' := , map_smul' := , cont := } 𝕜:TypeE:TypeF:Typeinst✝⁷:RCLike 𝕜inst✝⁶:NormedAddCommGroup Einst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace Einst✝³:NormedSpace Finst✝²:NormedSpace 𝕜 Finst✝¹:SMulCommClass 𝕜 Finst✝:FiniteDimensional Ec:𝕜u:E→d[𝕜] Fx✝¹:𝓢(E, 𝕜)x✝:E({ toFun := fun η => LinearMap.toContinuousLinearMap { toFun := fun v => (ContinuousLinearEquiv.neg 𝕜) ((c u) ((SchwartzMap.evalCLM 𝕜 E 𝕜 v) ((fderivCLM 𝕜 E 𝕜) η))), map_add' := , map_smul' := }, map_add' := , map_smul' := , cont := } x✝¹) x✝ = (((RingHom.id 𝕜) c { toFun := fun η => LinearMap.toContinuousLinearMap { toFun := fun v => (ContinuousLinearEquiv.neg 𝕜) (u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v) ((fderivCLM 𝕜 E 𝕜) η))), map_add' := , map_smul' := }, map_add' := , map_smul' := , cont := }) x✝¹) x✝ All goals completed! 🐙
lemma fderivD_apply [FiniteDimensional E] (u : E →d[𝕜] F) (η : 𝓢(E, 𝕜)) (v : E) : fderivD 𝕜 u η v = - u (SchwartzMap.evalCLM (𝕜 := 𝕜) E 𝕜 v (SchwartzMap.fderivCLM 𝕜 E 𝕜 η)) := 𝕜:TypeE:TypeF:Typeinst✝⁷:RCLike 𝕜inst✝⁶:NormedAddCommGroup Einst✝⁵:NormedAddCommGroup Finst✝⁴:NormedSpace Einst✝³:NormedSpace Finst✝²:NormedSpace 𝕜 Finst✝¹:SMulCommClass 𝕜 Finst✝:FiniteDimensional Eu:E→d[𝕜] Fη:𝓢(E, 𝕜)v:E(((fderivD 𝕜) u) η) v = -u ((SchwartzMap.evalCLM 𝕜 E 𝕜 v) ((fderivCLM 𝕜 E 𝕜) η)) All goals completed! 🐙TODO "For distributions, prove that the derivative fderivD commutes with integrals and sums. This may require defining the integral of families of distributions although it is expected this will follow from the definition of a distribution."

D. Fourier transform of distributions

As with derivatives of distributions we can define the fourier transform of a distribution by taking the fourier transform of the underlying Schwartz maps. Thus the fourier transform of the distribution u is the distribution which takes η to ⟪u, F[η]⟫ where F[η] is the fourier transform of η.

@[simp] lemma fourierTransform_apply (u : E →d[] F) (η : 𝓢(E, )) : u.fourierTransform E F η = u (fourierTransformCLM η) := rfl

D.1. Bridge to Mathlib tempered distributions

Mathlib's tempered distributions use the pointwise convergence topology on the same underlying continuous linear maps. The following construction converts Physlib distributions to that API.

The Mathlib tempered distribution associated to a Physlib distribution.

def toTemperedDistribution (u : E →d[] F) : 𝓢'(E, F) := ContinuousLinearMap.toPointwiseConvergenceCLM _ _ _ _ u
@[simp] lemma toTemperedDistribution_apply (u : E →d[] F) (η : 𝓢(E, )) : u.toTemperedDistribution η = u η := rfl

Conversion to Mathlib tempered distributions commutes with the Fourier transform.

@[simp] lemma toTemperedDistribution_fourierTransform (u : E →d[] F) : (u.fourierTransform E F).toTemperedDistribution = 𝓕 u.toTemperedDistribution := rfl

E. Specific distributions

We now define specific distributions, which are used throughout physics. In particular, we define:

    The constant distribution.

    Distributions associated to finite measures.

    The dirac delta distribution.

    The heaviside step function.

E.1. The constant distribution

The constant distribution is the distribution which corresponds to a constant function, it takes η to the integral of η over the volume measure.

The constant distribution E →d[𝕜] F, for a given c : F this corresponds to the integral ∫ x, η x • c ∂MeasureTheory.volume.

All goals completed! 🐙 All goals completed! 🐙
lemma const_apply [ : Measure.HasTemperateGrowth (volume (α := E))] (c : F) (η : 𝓢(E, 𝕜)) : const 𝕜 E c η = x, η x c MeasureTheory.volume := 𝕜:TypeF:Typeinst✝⁹:RCLike 𝕜inst✝⁸:NormedAddCommGroup FE:Typeinst✝⁷:NormedAddCommGroup Einst✝⁶:NormedSpace Einst✝⁵:NormedSpace Finst✝⁴:NormedSpace 𝕜 Finst✝³:SMulCommClass 𝕜 Finst✝²:MeasureSpace Einst✝¹:BorelSpace Einst✝:SecondCountableTopology E:volume.HasTemperateGrowthc:Fη:𝓢(E, 𝕜)(const 𝕜 E c) η = (x : E), η x c All goals completed! 🐙E:TypeF:Typeinst✝⁷:NormedAddCommGroup Einst✝⁶:NormedAddCommGroup Finst✝⁵:NormedSpace Einst✝⁴:NormedSpace Finst✝³:MeasureSpace Einst✝²:BorelSpace Einst✝¹:SecondCountableTopology E:volume.IsAddHaarMeasureinst✝:FiniteDimensional Ec:Fη:𝓢(E, )v:E (x : E), ((SchwartzMap.evalCLM E v) ((fderivCLM E ) η)) x c = - - (x : E), (fderiv (⇑η) x) v cE:TypeF:Typeinst✝⁷:NormedAddCommGroup Einst✝⁶:NormedAddCommGroup Finst✝⁵:NormedSpace Einst✝⁴:NormedSpace Finst✝³:MeasureSpace Einst✝²:BorelSpace Einst✝¹:SecondCountableTopology E:volume.IsAddHaarMeasureinst✝:FiniteDimensional Ec:Fη:𝓢(E, )v:EIntegrable (fun x => (fderiv (⇑η) x) v c) volumeE:TypeF:Typeinst✝⁷:NormedAddCommGroup Einst✝⁶:NormedAddCommGroup Finst✝⁵:NormedSpace Einst✝⁴:NormedSpace Finst✝³:MeasureSpace Einst✝²:BorelSpace Einst✝¹:SecondCountableTopology E:volume.IsAddHaarMeasureinst✝:FiniteDimensional Ec:Fη:𝓢(E, )v:EIntegrable (fun x => η x (fderiv (fun y => c) x) v) volumeE:TypeF:Typeinst✝⁷:NormedAddCommGroup Einst✝⁶:NormedAddCommGroup Finst✝⁵:NormedSpace Einst✝⁴:NormedSpace Finst✝³:MeasureSpace Einst✝²:BorelSpace Einst✝¹:SecondCountableTopology E:volume.IsAddHaarMeasureinst✝:FiniteDimensional Ec:Fη:𝓢(E, )v:EIntegrable (fun x => η x c) volumeE:TypeF:Typeinst✝⁷:NormedAddCommGroup Einst✝⁶:NormedAddCommGroup Finst✝⁵:NormedSpace Einst✝⁴:NormedSpace Finst✝³:MeasureSpace Einst✝²:BorelSpace Einst✝¹:SecondCountableTopology E:volume.IsAddHaarMeasureinst✝:FiniteDimensional Ec:Fη:𝓢(E, )v:E x tsupport fun y => c, DifferentiableAt (⇑η) xE:TypeF:Typeinst✝⁷:NormedAddCommGroup Einst✝⁶:NormedAddCommGroup Finst✝⁵:NormedSpace Einst✝⁴:NormedSpace Finst✝³:MeasureSpace Einst✝²:BorelSpace Einst✝¹:SecondCountableTopology E:volume.IsAddHaarMeasureinst✝:FiniteDimensional Ec:Fη:𝓢(E, )v:E x tsupport η, DifferentiableAt (fun y => c) x E:TypeF:Typeinst✝⁷:NormedAddCommGroup Einst✝⁶:NormedAddCommGroup Finst✝⁵:NormedSpace Einst✝⁴:NormedSpace Finst✝³:MeasureSpace Einst✝²:BorelSpace Einst✝¹:SecondCountableTopology E:volume.IsAddHaarMeasureinst✝:FiniteDimensional Ec:Fη:𝓢(E, )v:EIntegrable (fun x => (fderiv (⇑η) x) v c) volumeE:TypeF:Typeinst✝⁷:NormedAddCommGroup Einst✝⁶:NormedAddCommGroup Finst✝⁵:NormedSpace Einst✝⁴:NormedSpace Finst✝³:MeasureSpace Einst✝²:BorelSpace Einst✝¹:SecondCountableTopology E:volume.IsAddHaarMeasureinst✝:FiniteDimensional Ec:Fη:𝓢(E, )v:EIntegrable (fun x => η x (fderiv (fun y => c) x) v) volumeE:TypeF:Typeinst✝⁷:NormedAddCommGroup Einst✝⁶:NormedAddCommGroup Finst✝⁵:NormedSpace Einst✝⁴:NormedSpace Finst✝³:MeasureSpace Einst✝²:BorelSpace Einst✝¹:SecondCountableTopology E:volume.IsAddHaarMeasureinst✝:FiniteDimensional Ec:Fη:𝓢(E, )v:EIntegrable (fun x => η x c) volumeE:TypeF:Typeinst✝⁷:NormedAddCommGroup Einst✝⁶:NormedAddCommGroup Finst✝⁵:NormedSpace Einst✝⁴:NormedSpace Finst✝³:MeasureSpace Einst✝²:BorelSpace Einst✝¹:SecondCountableTopology E:volume.IsAddHaarMeasureinst✝:FiniteDimensional Ec:Fη:𝓢(E, )v:E x tsupport fun y => c, DifferentiableAt (⇑η) xE:TypeF:Typeinst✝⁷:NormedAddCommGroup Einst✝⁶:NormedAddCommGroup Finst✝⁵:NormedSpace Einst✝⁴:NormedSpace Finst✝³:MeasureSpace Einst✝²:BorelSpace Einst✝¹:SecondCountableTopology E:volume.IsAddHaarMeasureinst✝:FiniteDimensional Ec:Fη:𝓢(E, )v:E x tsupport η, DifferentiableAt (fun y => c) x E:TypeF:Typeinst✝⁷:NormedAddCommGroup Einst✝⁶:NormedAddCommGroup Finst✝⁵:NormedSpace Einst✝⁴:NormedSpace Finst✝³:MeasureSpace Einst✝²:BorelSpace Einst✝¹:SecondCountableTopology E:volume.IsAddHaarMeasureinst✝:FiniteDimensional Ec:Fη:𝓢(E, )v:EIntegrable (fun x => (fderiv (⇑η) x) v c) volume All goals completed! 🐙 E:TypeF:Typeinst✝⁷:NormedAddCommGroup Einst✝⁶:NormedAddCommGroup Finst✝⁵:NormedSpace Einst✝⁴:NormedSpace Finst✝³:MeasureSpace Einst✝²:BorelSpace Einst✝¹:SecondCountableTopology E:volume.IsAddHaarMeasureinst✝:FiniteDimensional Ec:Fη:𝓢(E, )v:EIntegrable (fun x => η x (fderiv (fun y => c) x) v) volume All goals completed! 🐙 E:TypeF:Typeinst✝⁷:NormedAddCommGroup Einst✝⁶:NormedAddCommGroup Finst✝⁵:NormedSpace Einst✝⁴:NormedSpace Finst✝³:MeasureSpace Einst✝²:BorelSpace Einst✝¹:SecondCountableTopology E:volume.IsAddHaarMeasureinst✝:FiniteDimensional Ec:Fη:𝓢(E, )v:EIntegrable (fun x => η x c) volume All goals completed! 🐙 E:TypeF:Typeinst✝⁷:NormedAddCommGroup Einst✝⁶:NormedAddCommGroup Finst✝⁵:NormedSpace Einst✝⁴:NormedSpace Finst✝³:MeasureSpace Einst✝²:BorelSpace Einst✝¹:SecondCountableTopology E:volume.IsAddHaarMeasureinst✝:FiniteDimensional Ec:Fη:𝓢(E, )v:E x tsupport fun y => c, DifferentiableAt (⇑η) x All goals completed! 🐙 E:TypeF:Typeinst✝⁷:NormedAddCommGroup Einst✝⁶:NormedAddCommGroup Finst✝⁵:NormedSpace Einst✝⁴:NormedSpace Finst✝³:MeasureSpace Einst✝²:BorelSpace Einst✝¹:SecondCountableTopology E:volume.IsAddHaarMeasureinst✝:FiniteDimensional Ec:Fη:𝓢(E, )v:E x tsupport η, DifferentiableAt (fun y => c) x All goals completed! 🐙

E.2. Distributions associated to finite measures

Every finite measure has temperate growth, so integrating Schwartz maps against it defines a scalar distribution.

The scalar distribution associated to a finite measure, acting on a Schwartz map by integration.

def ofFiniteMeasure (μ : Measure E) [IsFiniteMeasure μ] : E →d[𝕜] 𝕜 := integralCLM 𝕜 μ
@[simp] lemma ofFiniteMeasure_apply (μ : Measure E) [IsFiniteMeasure μ] (η : 𝓢(E, 𝕜)) : ofFiniteMeasure 𝕜 μ η = x, η x μ := rfl

The finite-measure distribution agrees with Mathlib's tempered distribution associated to the same measure.

@[simp] lemma toTemperedDistribution_ofFiniteMeasure (μ : Measure E) [IsFiniteMeasure μ] : (ofFiniteMeasure μ).toTemperedDistribution = μ.toTemperedDistribution := rfl
All goals completed! 🐙E:Typeinst✝⁷:NormedAddCommGroup Einst✝⁶:NormedSpace Einst✝⁵:MeasurableSpace Einst✝⁴:BorelSpace Einst✝³:SecondCountableTopology Einst✝²:FiniteDimensional Eμ:Measure Eν:Measure Einst✝¹:IsFiniteMeasure μinst✝:IsFiniteMeasure νh: (η : 𝓢(E, )), (x : E), η x μ = (x : E), η x νf:BoundedContinuousFunction E ρ:Measure E := μ + νthis✝:IsFiniteMeasure ρthis:ρ.HasTemperateGrowthL:𝓢(E, ) →L[] (Lp 1 ρ) := toLpCLM 1 ρtoL1:BoundedContinuousFunction E →L[] (Lp 1 ρ) := BoundedContinuousFunction.toLp 1 ρ S:Set (Lp 1 ρ) := {u | (x : E), u x μ = (x : E), u x ν}hS_closed:IsClosed Sh_range_subset:Set.range L ShS_univ:Set.univ ShfS: (x : E), ((BoundedContinuousFunction.toLp 1 ρ ) f) x μ = (x : E), ((BoundedContinuousFunction.toLp 1 ρ ) f) x νhfρ:(toL1 f) =ᵐ[ρ] f (x : E), f x μ = (x : E), f x ν E:Typeinst✝⁷:NormedAddCommGroup Einst✝⁶:NormedSpace Einst✝⁵:MeasurableSpace Einst✝⁴:BorelSpace Einst✝³:SecondCountableTopology Einst✝²:FiniteDimensional Eμ:Measure Eν:Measure Einst✝¹:IsFiniteMeasure μinst✝:IsFiniteMeasure νh: (η : 𝓢(E, )), (x : E), η x μ = (x : E), η x νf:BoundedContinuousFunction E ρ:Measure E := μ + νthis✝:IsFiniteMeasure ρthis:ρ.HasTemperateGrowthL:𝓢(E, ) →L[] (Lp 1 ρ) := toLpCLM 1 ρtoL1:BoundedContinuousFunction E →L[] (Lp 1 ρ) := BoundedContinuousFunction.toLp 1 ρ S:Set (Lp 1 ρ) := {u | (x : E), u x μ = (x : E), u x ν}hS_closed:IsClosed Sh_range_subset:Set.range L ShS_univ:Set.univ ShfS: (x : E), ((BoundedContinuousFunction.toLp 1 ρ ) f) x μ = (x : E), ((BoundedContinuousFunction.toLp 1 ρ ) f) x νhfρ:(toL1 f) =ᵐ[ρ] fhfμ:(toL1 f) =ᵐ[μ] f (x : E), f x μ = (x : E), f x ν E:Typeinst✝⁷:NormedAddCommGroup Einst✝⁶:NormedSpace Einst✝⁵:MeasurableSpace Einst✝⁴:BorelSpace Einst✝³:SecondCountableTopology Einst✝²:FiniteDimensional Eμ:Measure Eν:Measure Einst✝¹:IsFiniteMeasure μinst✝:IsFiniteMeasure νh: (η : 𝓢(E, )), (x : E), η x μ = (x : E), η x νf:BoundedContinuousFunction E ρ:Measure E := μ + νthis✝:IsFiniteMeasure ρthis:ρ.HasTemperateGrowthL:𝓢(E, ) →L[] (Lp 1 ρ) := toLpCLM 1 ρtoL1:BoundedContinuousFunction E →L[] (Lp 1 ρ) := BoundedContinuousFunction.toLp 1 ρ S:Set (Lp 1 ρ) := {u | (x : E), u x μ = (x : E), u x ν}hS_closed:IsClosed Sh_range_subset:Set.range L ShS_univ:Set.univ ShfS: (x : E), ((BoundedContinuousFunction.toLp 1 ρ ) f) x μ = (x : E), ((BoundedContinuousFunction.toLp 1 ρ ) f) x νhfρ:(toL1 f) =ᵐ[ρ] fhfμ:(toL1 f) =ᵐ[μ] fhfν:(toL1 f) =ᵐ[ν] f (x : E), f x μ = (x : E), f x ν calc x, f x μ = x, (toL1 f : E ) x μ := (integral_congr_ae hfμ).symm _ = x, (toL1 f : E ) x ν := hfS _ = x, f x ν := integral_congr_ae hfνE:Typeinst✝⁷:NormedAddCommGroup Einst✝⁶:NormedSpace Einst✝⁵:MeasurableSpace Einst✝⁴:BorelSpace Einst✝³:SecondCountableTopology Einst✝²:FiniteDimensional Eμ:Measure Eν:Measure Einst✝¹:IsFiniteMeasure μinst✝:IsFiniteMeasure νh: (η : 𝓢(E, )), (x : E), η x μ = (x : E), η x νL:StrongDual E (v : E), Complex.exp ((L v) * Complex.I) μ = (v : E), Complex.exp ((L v) * Complex.I) ν All goals completed! 🐙

The complex scalar distribution associated to a finite measure determines the measure.

All goals completed! 🐙 E:Typeinst✝⁷:NormedAddCommGroup Einst✝⁶:NormedSpace Einst✝⁵:MeasurableSpace Einst✝⁴:BorelSpace Einst✝³:SecondCountableTopology Einst✝²:FiniteDimensional Eμ:Measure Eν:Measure Einst✝¹:IsFiniteMeasure μinst✝:IsFiniteMeasure νμ = ν ofFiniteMeasure μ = ofFiniteMeasure ν E:Typeinst✝⁷:NormedAddCommGroup Einst✝⁶:NormedSpace Einst✝⁵:MeasurableSpace Einst✝⁴:BorelSpace Einst✝³:SecondCountableTopology Einst✝²:FiniteDimensional Eμ:Measure Einst✝¹:IsFiniteMeasure μinst✝:IsFiniteMeasure μofFiniteMeasure μ = ofFiniteMeasure μ All goals completed! 🐙

E.3. The dirac delta distribution

The dirac delta distribution centered at a : E is the distribution which takes η to η a. We also define diracDelta' which takes in an element of v of F and outputs η a • v.

Dirac delta distribution diracDelta 𝕜 a : E →d[𝕜] 𝕜 takes in a test function η : 𝓢(E, 𝕜) and outputs η a. Intuitively this is an infinite density at a single point a.

def diracDelta (a : E) : E →d[𝕜] 𝕜 := toPointwiseConvergenceCLM _ _ _ _ <| (BoundedContinuousFunction.evalCLM 𝕜 a).comp (toBoundedContinuousFunctionCLM 𝕜 E 𝕜)
@[simp] lemma diracDelta_apply (a : E) (η : 𝓢(E, 𝕜)) : diracDelta 𝕜 a η = η a := rfl

Dirac delta in a given direction v : F. diracDelta' 𝕜 a v takes in a test function η : 𝓢(E, 𝕜) and outputs η a • v. Intuitively this is an infinitely intense vector field at a single point a pointing at the direction v.

def diracDelta' (a : E) (v : F) : E →d[𝕜] F := ContinuousLinearMap.smulRight (diracDelta 𝕜 a) v
@[simp] lemma diracDelta'_apply (a : E) (v : F) (η : 𝓢(E, 𝕜)) : diracDelta' 𝕜 a v η = η a v := rfl

E.4. The heaviside step function

The heaviside step function on EuclideanSpace ℝ (Fin d.succ) is the distribution from EuclideanSpace ℝ (Fin d.succ) to which takes a η to the integral of η in the upper-half plane (determined by the last coordinate in EuclideanSpace ℝ (Fin d.succ)).

The Heaviside step distribution defined on (EuclideanSpace ℝ (Fin d.succ)) equal to 1 in the positive z-direction and 0 in the negative z-direction.

All goals completed! 🐙 All goals completed! 🐙
lemma heavisideStep_apply (d : ) (η : 𝓢(EuclideanSpace (Fin d.succ), )) : heavisideStep d η = x in {x : EuclideanSpace (Fin d.succ) | 0 < x (Fin.last d)}, η x MeasureTheory.volume := d:η:𝓢(EuclideanSpace (Fin d.succ), )(heavisideStep d) η = (x : EuclideanSpace (Fin d.succ)) in {x | 0 < x.ofLp (Fin.last d)}, η x All goals completed! 🐙