@@ -175,13 +175,13 @@ namespace Distribution
175175
176176section 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`
182182pointwise. -/
183183noncomputable def mapCLM (A : F βL[β] F') : π'^{n}(Ξ©, F) βL[β] π'^{n}(Ξ©, F') :=
184- A.postcompUniformConvergenceCLM _
184+ A.postcompCompactConvergenceCLM _
185185
186186@[simp]
187187lemma 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
214214end 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+
216280end Distribution
0 commit comments