Skip to content

Commit 81721b4

Browse files
committed
feat(Analysis/Distribution): composition of temperate growth functions (#32297)
Proves that the composition of temperate growth functions is again of temperate growth. We have to use the explicit bounds, because we want to have the case that the outer function `g` is only temperate on the image of the inner function `f`, to be able to apply this result for `f x = 1 + |x|^2` and `g x = x ^ r` for any real `r`.
1 parent e549dc0 commit 81721b4

File tree

2 files changed

+55
-1
lines changed

2 files changed

+55
-1
lines changed

Mathlib/Analysis/Distribution/SchwartzSpace.lean

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ public import Mathlib.Analysis.Distribution.DerivNotation
1515
public import Mathlib.Analysis.Distribution.TemperateGrowth
1616
public import Mathlib.Topology.Algebra.UniformFilterBasis
1717
public import Mathlib.MeasureTheory.Integral.IntegralEqImproper
18-
public import Mathlib.Tactic.MoveAdd
1918
public import Mathlib.MeasureTheory.Function.L2Space
2019

2120
/-!

Mathlib/Analysis/Distribution/TemperateGrowth.lean

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ module
88
public import Mathlib.Analysis.Calculus.ContDiff.Bounds
99
public import Mathlib.Analysis.SpecialFunctions.JapaneseBracket
1010
public import Mathlib.Analysis.InnerProductSpace.Calculus
11+
public import Mathlib.Tactic.MoveAdd
1112

1213

1314
/-! # Functions and measures of temperate growth -/
@@ -115,6 +116,60 @@ lemma HasTemperateGrowth.const (c : F) :
115116
Function.HasTemperateGrowth (fun _ : E ↦ c) :=
116117
.of_fderiv (by simpa using .zero) (differentiable_const c) (k := 0) (C := ‖c‖) (fun x ↦ by simp)
117118

119+
/-- Composition of two temperate growth functions is of temperate growth.
120+
121+
Version where the outer function `g` is only of temperate growth on the image of inner function
122+
`f`. -/
123+
theorem HasTemperateGrowth.comp' [NormedAddCommGroup D] [NormedSpace ℝ D] {g : E → F} {f : D → E}
124+
{t : Set E} (ht : Set.range f ⊆ t) (ht' : UniqueDiffOn ℝ t) (hg₁ : ContDiffOn ℝ ∞ g t)
125+
(hg₂ : ∀ N, ∃ k C, ∃ (_hC : 0 ≤ C), ∀ n ≤ N, ∀ x ∈ t,
126+
‖iteratedFDerivWithin ℝ n g t x‖ ≤ C * (1 + ‖x‖) ^ k)
127+
(hf : f.HasTemperateGrowth) : (g ∘ f).HasTemperateGrowth := by
128+
refine ⟨hg₁.comp_contDiff hf.1 (ht ⟨·, rfl⟩), fun n ↦ ?_⟩
129+
obtain ⟨k₁, C₁, hC₁, h₁⟩ := hf.norm_iteratedFDeriv_le_uniform n
130+
obtain ⟨k₂, C₂, hC₂, h₂⟩ := hg₂ n
131+
have h₁' : ∀ x, ‖f x‖ ≤ C₁ * (1 + ‖x‖) ^ k₁ := by simpa using h₁ 0 (zero_le _)
132+
set C₃ := ∑ k ∈ Finset.range (k₂ + 1), C₂ * (k₂.choose k : ℝ) * (C₁ ^ k)
133+
use k₁ * k₂ + k₁ * n, n ! * C₃ * (1 + C₁) ^ n
134+
intro x
135+
have hg' : ∀ i, i ≤ n → ‖iteratedFDerivWithin ℝ i g t (f x)‖ ≤ C₃ * (1 + ‖x‖) ^ (k₁ * k₂):= by
136+
intro i hi
137+
calc _ ≤ C₂ * (1 + ‖f x‖) ^ k₂ := h₂ i hi (f x) (ht ⟨x, rfl⟩)
138+
_ = ∑ i ∈ Finset.range (k₂ + 1), C₂ * (‖f x‖ ^ i * (k₂.choose i)) := by
139+
rw [add_comm, add_pow, Finset.mul_sum]
140+
simp
141+
_ ≤ ∑ i ∈ Finset.range (k₂ + 1), C₂ * (k₂.choose i) * C₁ ^ i * (1 + ‖x‖) ^ (k₁ * k₂) := by
142+
apply Finset.sum_le_sum
143+
intro i hi
144+
grw [h₁']
145+
simp_rw [mul_pow, ← pow_mul]
146+
move_mul [← (k₂.choose _ : ℝ), C₂]
147+
gcongr
148+
· simp
149+
· grind
150+
_ = _ := by simp [C₃, Finset.sum_mul]
151+
have hf' : ∀ i, 1 ≤ i → i ≤ n → ‖iteratedFDeriv ℝ i f x‖ ≤ ((1 + C₁) * (1 + ‖x‖) ^ k₁) ^ i := by
152+
intro i hi hi'
153+
calc _ ≤ C₁ * (1 + ‖x‖) ^ k₁ := h₁ i hi' x
154+
_ ≤ (1 + C₁) * (1 + ‖x‖) ^ k₁ := by gcongr; simp
155+
_ ≤ _ := by
156+
apply le_self_pow₀ (one_le_mul_of_one_le_of_one_le (by simp [hC₁]) (by simp [one_le_pow₀]))
157+
grind
158+
calc _ ≤ n ! * (C₃ * (1 + ‖x‖) ^ (k₁ * k₂)) * ((1 + C₁) * (1 + ‖x‖) ^ k₁) ^ n :=
159+
norm_iteratedFDeriv_comp_le' ht ht' hg₁ hf.1 (mod_cast le_top) x hg' hf'
160+
_ = _ := by rw [mul_pow, ← pow_mul, pow_add]; ring
161+
162+
/-- Composition of two temperate growth functions is of temperate growth. -/
163+
@[fun_prop]
164+
theorem HasTemperateGrowth.comp [NormedAddCommGroup D] [NormedSpace ℝ D] {g : E → F} {f : D → E}
165+
(hg : g.HasTemperateGrowth) (hf : f.HasTemperateGrowth) : (g ∘ f).HasTemperateGrowth := by
166+
apply hf.comp' (t := Set.univ)
167+
· simp
168+
· simp
169+
· rw [contDiffOn_univ]
170+
exact hg.1
171+
· simpa [iteratedFDerivWithin_univ] using hg.norm_iteratedFDeriv_le_uniform
172+
118173
section Addition
119174

120175
variable {f g : E → F}

0 commit comments

Comments
 (0)