@@ -59,6 +59,8 @@ Schwartz space, tempered distributions
5959
6060noncomputable theory
6161
62+ open_locale big_operators nat
63+
6264variables {𝕜 𝕜' D E F G : Type *}
6365
6466variables [normed_add_comm_group E] [normed_space ℝ E]
@@ -518,6 +520,37 @@ instance : topological_space.first_countable_topology (𝓢(E, F)) :=
518520
519521end topology
520522
523+ section temperate_growth
524+
525+ /-! ### Functions of temperate growth -/
526+
527+ /-- A function is called of temperate growth if it is smooth and all iterated derivatives are
528+ polynomially bounded. -/
529+ def _root_.function.has_temperate_growth (f : E → F) : Prop :=
530+ cont_diff ℝ ⊤ f ∧ ∀ n : ℕ, ∃ (k : ℕ) (C : ℝ), ∀ x, ‖iterated_fderiv ℝ n f x‖ ≤ C * (1 + ‖x‖)^k
531+
532+ lemma _root_.function.has_temperate_growth.norm_iterated_fderiv_le_uniform_aux {f : E → F}
533+ (hf_temperate : f.has_temperate_growth) (n : ℕ) :
534+ ∃ (k : ℕ) (C : ℝ) (hC : 0 ≤ C), ∀ (N : ℕ) (hN : N ≤ n) (x : E),
535+ ‖iterated_fderiv ℝ N f x‖ ≤ C * (1 + ‖x‖)^k :=
536+ begin
537+ choose k C f using hf_temperate.2 ,
538+ use (finset.range (n+1 )).sup k,
539+ let C' := max (0 : ℝ) ((finset.range (n+1 )).sup' (by simp) C),
540+ have hC' : 0 ≤ C' := by simp only [le_refl, finset.le_sup'_iff, true_or, le_max_iff],
541+ use [C', hC'],
542+ intros N hN x,
543+ rw ← finset.mem_range_succ_iff at hN,
544+ refine le_trans (f N x) (mul_le_mul _ _ (by positivity) hC'),
545+ { simp only [finset.le_sup'_iff, le_max_iff],
546+ right,
547+ exact ⟨N, hN, rfl.le⟩ },
548+ refine pow_le_pow (by simp only [le_add_iff_nonneg_right, norm_nonneg]) _,
549+ exact finset.le_sup hN,
550+ end
551+
552+ end temperate_growth
553+
521554section clm
522555
523556/-! ### Construction of continuous linear maps between Schwartz spaces -/
@@ -596,6 +629,154 @@ mk_clm (λ f x, f x m)
596629
597630end eval_clm
598631
632+ section multiplication
633+
634+ variables [normed_add_comm_group D] [normed_space ℝ D]
635+ variables [normed_add_comm_group G] [normed_space ℝ G]
636+
637+ /-- The map `f ↦ (x ↦ B (f x) (g x))` as a continuous `𝕜`-linear map on Schwartz space,
638+ where `B` is a continuous `𝕜`-linear map and `g` is a function of temperate growth. -/
639+ def bilin_left_clm (B : E →L[ℝ] F →L[ℝ] G) {g : D → F} (hg : g.has_temperate_growth) :
640+ 𝓢(D, E) →L[ℝ] 𝓢(D, G) :=
641+ -- Todo (after port): generalize to `B : E →L[𝕜] F →L[𝕜] G` and `𝕜`-linear
642+ mk_clm (λ f x, B (f x) (g x))
643+ (λ _ _ _, by simp only [map_add, add_left_inj, pi.add_apply, eq_self_iff_true,
644+ continuous_linear_map.add_apply])
645+ (λ _ _ _, by simp only [pi.smul_apply, continuous_linear_map.coe_smul',
646+ continuous_linear_map.map_smul, ring_hom.id_apply])
647+ (λ f, (B.is_bounded_bilinear_map.cont_diff.restrict_scalars ℝ).comp (f.smooth'.prod hg.1 ))
648+ (begin
649+ -- Porting note: rewrite this proof with `rel_congr`
650+ rintro ⟨k, n⟩,
651+ rcases hg.norm_iterated_fderiv_le_uniform_aux n with ⟨l, C, hC, hgrowth⟩,
652+ use [finset.Iic (l+k,n), ‖B‖ * (n + 1 ) * n.choose (n / 2 ) * (C * 2 ^(l + k)), by positivity],
653+ intros f x,
654+ have hxk : 0 ≤ ‖x‖^k := by positivity,
655+ have hnorm_mul :=
656+ continuous_linear_map.norm_iterated_fderiv_le_of_bilinear B f.smooth' hg.1 x le_top,
657+ refine le_trans (mul_le_mul_of_nonneg_left hnorm_mul hxk) _,
658+ rw [← mul_assoc (‖x‖^k), mul_comm (‖x‖^k)],
659+ simp_rw [mul_assoc (‖B‖)],
660+ refine mul_le_mul_of_nonneg_left _ (by positivity),
661+ rw [finset.mul_sum],
662+ have : ∑ (x_1 : ℕ) in finset.range (n + 1 ), (1 : ℝ) = n + 1 := by simp,
663+ repeat { rw [mul_assoc ((n : ℝ) + 1 )] },
664+ rw [← this , finset.sum_mul],
665+ refine finset.sum_le_sum (λ i hi, _),
666+ simp only [one_mul],
667+ rw [← mul_assoc, mul_comm (‖x‖^k), mul_assoc, mul_assoc, mul_assoc],
668+ refine mul_le_mul _ _ (by positivity) (by positivity),
669+ { norm_cast,
670+ exact i.choose_le_middle n },
671+ specialize hgrowth (n - i) (by simp only [tsub_le_self]) x,
672+ rw [← mul_assoc],
673+ refine le_trans (mul_le_mul_of_nonneg_left hgrowth (by positivity)) _,
674+ rw [mul_comm _ (C * _), mul_assoc, mul_assoc C],
675+ refine mul_le_mul_of_nonneg_left _ hC,
676+ nth_rewrite 1 mul_comm,
677+ rw [← mul_assoc],
678+ rw finset.mem_range_succ_iff at hi,
679+ change i ≤ (l + k, n).snd at hi,
680+ refine le_trans _ (one_add_le_sup_seminorm_apply le_rfl hi f x ),
681+ refine mul_le_mul_of_nonneg_right _ (norm_nonneg _),
682+ rw [pow_add],
683+ refine mul_le_mul_of_nonneg_left _ (by positivity),
684+ refine pow_le_pow_of_le_left (norm_nonneg _) _ _,
685+ simp only [zero_le_one, le_add_iff_nonneg_left],
686+ end )
687+
688+ end multiplication
689+
690+ section comp
691+
692+ variables (𝕜)
693+ variables [is_R_or_C 𝕜]
694+ variables [normed_add_comm_group D] [normed_space ℝ D]
695+ variables [normed_add_comm_group G] [normed_space ℝ G]
696+ variables [normed_space 𝕜 F] [smul_comm_class ℝ 𝕜 F]
697+ variables [normed_space 𝕜 G] [smul_comm_class ℝ 𝕜 G]
698+
699+ /-- Composition with a function on the right is a continuous linear map on Schwartz space
700+ provided that the function is temperate and growths polynomially near infinity. -/
701+ def comp_clm {g : D → E} (hg : g.has_temperate_growth)
702+ (hg_upper : ∃ (k : ℕ) (C : ℝ), ∀ x, ‖x‖ ≤ C * (1 + ‖g x‖)^k ) :
703+ 𝓢(E, F) →L[𝕜] 𝓢(D, F) :=
704+ mk_clm (λ f x, (f (g x)))
705+ (λ _ _ _, by simp only [add_left_inj, pi.add_apply, eq_self_iff_true])
706+ (λ _ _ _, rfl)
707+ (λ f, f.smooth'.comp hg.1 )
708+ (begin
709+ rintros ⟨k, n⟩,
710+ rcases hg.norm_iterated_fderiv_le_uniform_aux n with ⟨l, C, hC, hgrowth⟩,
711+ rcases hg_upper with ⟨kg, Cg, hg_upper'⟩,
712+ have hCg : 1 ≤ 1 + Cg :=
713+ begin
714+ refine le_add_of_nonneg_right _,
715+ specialize hg_upper' 0 ,
716+ rw [norm_zero] at hg_upper',
717+ refine nonneg_of_mul_nonneg_left hg_upper' (by positivity),
718+ end ,
719+ let k' := kg * (k + l * n),
720+ use [finset.Iic (k',n), (1 + Cg) ^ (k + l * n) * ((C + 1 ) ^ n * n! * 2 ^ k'), by positivity],
721+ intros f x,
722+ let seminorm_f := ((finset.Iic (k',n)).sup (schwartz_seminorm_family 𝕜 _ _)) f,
723+ have hg_upper'' : (1 + ‖x‖)^(k + l * n) ≤ (1 + Cg)^(k + l*n) * (1 + ‖g x‖)^k' :=
724+ begin
725+ rw [pow_mul, ← mul_pow],
726+ refine pow_le_pow_of_le_left (by positivity) _ _,
727+ rw [add_mul],
728+ refine add_le_add _ (hg_upper' x),
729+ nth_rewrite 0 ← one_mul (1 : ℝ),
730+ refine mul_le_mul (le_refl _) (one_le_pow_of_one_le _ _) zero_le_one zero_le_one,
731+ simp only [le_add_iff_nonneg_right, norm_nonneg],
732+ end ,
733+ have hbound : ∀ i, i ≤ n → ‖iterated_fderiv ℝ i f (g x)‖ ≤
734+ 2 ^ k' * seminorm_f / ((1 + ‖g x‖) ^ k'):=
735+ begin
736+ intros i hi,
737+ have hpos : 0 < (1 + ‖g x‖) ^ k' := by positivity,
738+ rw le_div_iff' hpos,
739+ change i ≤ (k', n).snd at hi,
740+ exact one_add_le_sup_seminorm_apply le_rfl hi _ _,
741+ end ,
742+ have hgrowth' : ∀ (N : ℕ) (hN₁ : 1 ≤ N) (hN₂ : N ≤ n),
743+ ‖iterated_fderiv ℝ N g x‖ ≤ ((C + 1 ) * (1 + ‖x‖)^l)^N :=
744+ begin
745+ intros N hN₁ hN₂,
746+ refine (hgrowth N hN₂ x).trans _,
747+ rw [mul_pow],
748+ have hN₁' := (lt_of_lt_of_le zero_lt_one hN₁).ne.symm,
749+ refine mul_le_mul _ _ (by positivity) (by positivity),
750+ { exact le_trans (by simp [hC]) (le_self_pow (by simp [hC]) hN₁'), },
751+ { refine le_self_pow (one_le_pow_of_one_le _ l) hN₁',
752+ simp only [le_add_iff_nonneg_right, norm_nonneg] },
753+ end ,
754+ have := norm_iterated_fderiv_comp_le f.smooth' hg.1 le_top x hbound hgrowth',
755+ have hxk : ‖x‖^k ≤ (1 + ‖x‖)^k :=
756+ pow_le_pow_of_le_left (norm_nonneg _) (by simp only [zero_le_one, le_add_iff_nonneg_left]) _,
757+ refine le_trans (mul_le_mul hxk this (by positivity) (by positivity)) _,
758+ have rearrange :
759+ (1 + ‖x‖) ^ k * (n! * (2 ^ k' * seminorm_f / (1 + ‖g x‖) ^ k') *
760+ ((C + 1 ) * (1 + ‖x‖) ^ l) ^ n) =
761+ ((1 + ‖x‖)^(k + l * n) / (1 + ‖g x‖) ^ k') * ((C + 1 )^n * n! * 2 ^k' * seminorm_f) :=
762+ begin
763+ rw [mul_pow, pow_add, ← pow_mul],
764+ ring,
765+ end ,
766+ rw rearrange,
767+ have hgxk' : 0 < (1 + ‖g x‖) ^ k' := by positivity,
768+ rw ← div_le_iff hgxk' at hg_upper'',
769+ have hpos : 0 ≤ (C + 1 ) ^ n * n! * 2 ^ k' * seminorm_f :=
770+ begin
771+ have : 0 ≤ seminorm_f := map_nonneg _ _,
772+ positivity,
773+ end ,
774+ refine le_trans (mul_le_mul_of_nonneg_right hg_upper'' hpos) _,
775+ rw [← mul_assoc],
776+ end )
777+
778+ end comp
779+
599780section derivatives
600781
601782/-! ### Derivatives of Schwartz functions -/
0 commit comments