Skip to content

Commit 33cae85

Browse files
committed
feat: line derivative of distributions (leanprover-community#36867)
1 parent 58a5d52 commit 33cae85

1 file changed

Lines changed: 66 additions & 2 deletions

File tree

β€ŽMathlib/Analysis/Distribution/Distribution.leanβ€Ž

Lines changed: 66 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,13 +175,13 @@ namespace Distribution
175175

176176
section mapCLM
177177
-- TODO: generalize this section to `π•œ` linear maps (or even semilinear maps)
178-
-- by generalizing `ContinuousLinearMap.postcomp`
178+
-- by generalizing `ContinuousLinearMap.postcompCompactConvergenceCLM`
179179

180180
/-- Any continuous linear map `A : F β†’L[ℝ] G` induces a continuous linear map
181181
`𝓓'(Ξ©, F) β†’L[ℝ] 𝓓'(Ξ©, G)`. On locally integrable functions, this corresponds to applying `A`
182182
pointwise. -/
183183
noncomputable def mapCLM (A : F β†’L[ℝ] F') : 𝓓'^{n}(Ξ©, F) β†’L[ℝ] 𝓓'^{n}(Ξ©, F') :=
184-
A.postcompUniformConvergenceCLM _
184+
A.postcompCompactConvergenceCLM _
185185

186186
@[simp]
187187
lemma mapCLM_apply {A : F β†’L[ℝ] F'} {T : 𝓓'^{n}(Ξ©, F)} {f : 𝓓^{n}(Ξ©, ℝ)} :
@@ -213,4 +213,68 @@ theorem delta_eq_zero_of_notMem (x : E) (hx : x βˆ‰ Ξ©) : (delta x : 𝓓'^{n}(
213213

214214
end DiracDelta
215215

216+
section LineDerivCLM
217+
-- TODO: generalize this section to `π•œ` linearity
218+
-- by generalizing `ContinuousLinearMap.precompCompactConvergenceCLM`
219+
220+
/-- `lineDerivCLM π•œ v` is the continuous `π•œ`-linear-map sending a distribution
221+
`T : 𝓓'^{k}_{K}(E, F)` to its derivative along the vector `v`, which is a
222+
distribution in `𝓓^{n}_{K}(E, F)`. Because differentiating increases the order, this only makes
223+
sense if `k + 1 ≀ n`, otherwise we define it as the zero map.
224+
225+
The parameters `n` and `k` are implicit as they can often be inferred from context, or
226+
specified by a type ascription. For `n = k = ⊀`, we also provide instances of the `LineDeriv`
227+
notation typeclass. -/
228+
noncomputable def lineDerivCLM (v : E) :
229+
𝓓'^{k}(Ξ©, F) β†’L[ℝ] 𝓓'^{n}(Ξ©, F) :=
230+
- (TestFunction.lineDerivCLM ℝ v).precompCompactConvergenceCLM _
231+
232+
lemma lineDerivCLM_apply {v : E} {T : 𝓓'^{k}(Ξ©, F)} {f : 𝓓^{n}(Ξ©, ℝ)} :
233+
lineDerivCLM v T f = - T (TestFunction.lineDerivCLM ℝ v f) :=
234+
rfl
235+
236+
lemma lineDerivCLM_add {v₁ vβ‚‚ : E} :
237+
(lineDerivCLM (v₁ + vβ‚‚) : 𝓓'^{k}(Ξ©, F) β†’L[ℝ] 𝓓'^{n}(Ξ©, F)) =
238+
lineDerivCLM v₁ + lineDerivCLM vβ‚‚ := by
239+
ext T f
240+
simp [lineDerivCLM_apply, TestFunction.lineDerivCLM_add, neg_add, -neg_add_rev]
241+
242+
lemma lineDerivCLM_smul {c : ℝ} {v : E} :
243+
(lineDerivCLM (c β€’ v) : 𝓓'^{k}(Ξ©, F) β†’L[ℝ] 𝓓'^{n}(Ξ©, F)) =
244+
c β€’ lineDerivCLM v := by
245+
ext T f
246+
simp [lineDerivCLM_apply, TestFunction.lineDerivCLM_smul]
247+
248+
open LineDeriv
249+
250+
/-- Note: we cannot express the full generality of `lineDerivCLM` purely in terms of this typeclass,
251+
because (by design) the target type `𝓓^{k}_{K}(E, F)` is not determined by the input type
252+
`𝓓^{n}_{K}(E, F)`. -/
253+
noncomputable instance : LineDeriv E 𝓓'(Ξ©, F) 𝓓'(Ξ©, F) where
254+
lineDerivOp v := lineDerivCLM v
255+
256+
variable (π•œ) in
257+
lemma lineDerivOp_eq_lineDerivCLM {v : E} {T : 𝓓'(Ξ©, F)} :
258+
βˆ‚_{v} T = lineDerivCLM v T :=
259+
rfl
260+
261+
noncomputable instance : LineDerivAdd E 𝓓'(Ξ©, F) 𝓓'(Ξ©, F) where
262+
lineDerivOp_add v := map_add (lineDerivCLM v)
263+
lineDerivOp_left_add _ _ T := congr($lineDerivCLM_add T)
264+
265+
noncomputable instance : LineDerivSMul ℝ E 𝓓'(Ξ©, F) 𝓓'(Ξ©, F) where
266+
lineDerivOp_smul v := map_smul (lineDerivCLM v)
267+
268+
noncomputable instance : LineDerivLeftSMul ℝ E 𝓓'(Ξ©, F) 𝓓'(Ξ©, F) where
269+
lineDerivOp_left_smul _ _ T := congr($lineDerivCLM_smul T)
270+
271+
noncomputable instance : ContinuousLineDeriv E 𝓓'(Ξ©, F) 𝓓'(Ξ©, F) where
272+
continuous_lineDerivOp v := (lineDerivCLM v).continuous
273+
274+
lemma lineDerivOpCLM_eq_lineDerivCLM {v : E} :
275+
lineDerivOpCLM ℝ 𝓓'(Ξ©, F) v = lineDerivCLM v :=
276+
rfl
277+
278+
end LineDerivCLM
279+
216280
end Distribution

0 commit comments

Comments
Β (0)