Skip to content

Commit 3611c4e

Browse files
committed
feat: differentiation of test function as a CLM (#31809)
Co-authored-by: @luigi-massacci
1 parent 369423a commit 3611c4e

File tree

1 file changed

+52
-2
lines changed

1 file changed

+52
-2
lines changed

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

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,13 @@ distributions, test function
5252
@[expose] public section
5353

5454
open Function Seminorm SeminormFamily Set TopologicalSpace UniformSpace
55-
open scoped BoundedContinuousFunction NNReal Topology
55+
open scoped BoundedContinuousFunction NNReal Topology ContDiff
5656

5757
variable {π•œ 𝕂 : Type*} [NontriviallyNormedField π•œ]
5858
{E : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] {Ξ© : Opens E}
5959
{F : Type*} [NormedAddCommGroup F] [NormedSpace ℝ F] [NormedSpace π•œ F]
6060
{F' : Type*} [NormedAddCommGroup F'] [NormedSpace ℝ F'] [NormedSpace π•œ F']
61-
{n : β„•βˆž}
61+
{n k : β„•βˆž}
6262

6363
variable (Ξ© F n) in
6464
/-- The type of bundled `n`-times continuously differentiable maps with compact support -/
@@ -435,4 +435,54 @@ lemma postcompCLM_apply (T : F β†’L[π•œ] F')
435435

436436
end postcomp
437437

438+
section FDerivCLM
439+
440+
variable [Algebra ℝ π•œ] [IsScalarTower ℝ π•œ F]
441+
442+
variable (π•œ n k) in
443+
/-- `fderivCLM π•œ n k` is the continuous `π•œ`-linear-map sending `f : 𝓓^{n}_{K}(E, F)` to
444+
its derivative as an element of `𝓓^{k}_{K}(E, E β†’L[ℝ] F)`.
445+
This only makes mathematical sense if `k + 1 ≀ n`, otherwise we define it as the zero map. -/
446+
noncomputable def fderivCLM :
447+
𝓓^{n}(Ξ©, F) β†’L[π•œ] 𝓓^{k}(Ξ©, E β†’L[ℝ] F) :=
448+
letI Ξ¦ (f : 𝓓^{n}(Ξ©, F)) : 𝓓^{k}(Ξ©, E β†’L[ℝ] F) :=
449+
if hk : k + 1 ≀ n then
450+
⟨fderiv ℝ f, f.contDiff.fderiv_right (mod_cast hk),
451+
f.hasCompactSupport.fderiv ℝ, tsupport_fderiv_subset ℝ |>.trans f.tsupport_subset⟩
452+
else 0
453+
TestFunction.limitCLM π•œ Ξ¦
454+
(fun K K_sub_Ξ© ↦ ofSupportedInCLM π•œ K_sub_Ξ© ∘L ContDiffMapSupportedIn.fderivCLM π•œ n k)
455+
(fun _ _ _ ↦ by ext; dsimp [Ξ¦]; split_ifs with h <;> simp [h])
456+
457+
@[simp]
458+
lemma fderivCLM_apply (f : 𝓓^{n}(Ξ©, F)) :
459+
fderivCLM π•œ n k f = if k + 1 ≀ n then fderiv ℝ f else 0 := by
460+
rw [fderivCLM]
461+
split_ifs <;> rfl
462+
463+
lemma fderivCLM_apply_of_le (f : 𝓓^{n}(Ξ©, F)) (hk : k + 1 ≀ n) :
464+
fderivCLM π•œ n k f = fderiv ℝ f := by
465+
simp [hk]
466+
467+
lemma fderivCLM_apply_of_gt (f : 𝓓^{n}(Ξ©, F)) (hk : n < k + 1) :
468+
fderivCLM π•œ n k f = 0 := by
469+
ext : 1
470+
simp [not_le_of_gt hk]
471+
472+
variable (π•œ) in
473+
lemma fderivCLM_ofSupportedIn {K : Compacts E}
474+
(K_sub_Ξ© : (K : Set E) βŠ† Ξ©) (f : 𝓓^{n}_{K}(E, F)) :
475+
fderivCLM π•œ n k (ofSupportedIn K_sub_Ξ© f) =
476+
ofSupportedIn K_sub_Ξ© (ContDiffMapSupportedIn.fderivCLM π•œ n k f) := by
477+
ext
478+
simp
479+
480+
variable (π•œ) in
481+
lemma fderivCLM_eq_of_scalars (π•œ' : Type*)
482+
[NontriviallyNormedField π•œ'] [NormedSpace π•œ' F] [Algebra ℝ π•œ'] [IsScalarTower ℝ π•œ' F] :
483+
(fderivCLM π•œ n k : 𝓓^{n}(Ξ©, F) β†’ _) = fderivCLM π•œ' n k :=
484+
rfl
485+
486+
end FDerivCLM
487+
438488
end TestFunction

0 commit comments

Comments
Β (0)