Imports
/-
Copyright (c) 2026 Gregory J. Loges. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Gregory J. Loges
-/
module
public import Mathlib.Analysis.Calculus.ContDiff.Bounds
public import Mathlib.Analysis.Distribution.SchwartzSpace.Basic
public import Mathlib.Analysis.InnerProductSpace.Calculus
public import Mathlib.Analysis.SpecialFunctions.ExpDeriv
public import Physlib.Meta.TODO.BasicGaussians in inner product spaces
i. Overview
In this module we define Gaussians as Schwartz maps in general inner product spaces.
The most general Gaussian constructed is exp (-2⁻¹ * ‖B⁻¹ (x - x₀)‖ ^ 2) (mean x₀
and covariance BᵀB) as a Schwartz map 𝓢(E, 𝕜), where B : D ≃L[ℝ] E is a linear equivalence
of inner product spaces. This is accomplished by first constructing the Gaussian
exp (-2⁻¹ * ‖x‖ ^ 2) as a Schwartz map 𝓢(E, ℝ) using explicit bounds on the derivatives
of ‖x‖ ^ 2 = innerSL ℝ x x and limiting properties of the real exponential,
then composing with an invertible affine transformation.
The Gaussians are left unnormalized since the appropriate condition will depend on context and
whether E is finite- or infinite-dimensional. For example, the normalization conditions when
interpreted as a probability density function vs. as a quantum state require different pre-factors.
For some relevant Gaussian integrals see
Mathlib/Analysis/SpecialFunctions/Gaussian/FourierTransform.
ii. Key results
gaussian 𝕜 B x₀ : Given a linear equivalence B : D ≃L[ℝ] E and mean x₀ : E,
the Gaussian exp (-2⁻¹ * ‖B⁻¹ (x - x₀)‖ ^ 2) centered on x₀ as a Schwartz map 𝓢(E, 𝕜).
gaussian₀ 𝕜 B : Given a linear equivalence B : D ≃L[ℝ] E of inner product spaces,
the Gaussian exp (-2⁻¹ * ‖B⁻¹ x‖ ^ 2) centered on the origin as a Schwartz map 𝓢(E, 𝕜).
stdGaussian E 𝕜 : The standard Gaussian exp (-2⁻¹ * ‖x‖ ^ 2) as a Schwartz map 𝓢(E, 𝕜).
iii. Table of contents
A. Standard, real-valued
B. General, RCLike-valued
iv. References
@[expose] public sectionTODO "Provide functionality for multiplying by exponential functions like `exp ⟪v, x⟫`
(which does not have temperate growth) to obtain another Schwartz map (smulLeftExp?)
and prove that this is equal to a shifted/rescaled Gaussian with the same covariance."A. Standard, real-valued
Crude bounds on the norms of iterated Fréchet derivatives of innerSL ℝ
in the form required by norm_iteratedFDeriv_comp_le.
calc.step.inr.inr E:Type u_2inst✝¹:NormedAddCommGroup Einst✝:InnerProductSpace ℝ Ex:En:ℕhn:1 ≤ nh_id₁:‖iteratedFDeriv ℝ 1 id x‖ ≤ 1h_id:∀ k ≥ 2, ‖iteratedFDeriv ℝ k id x‖ = 0hn':2 < n⊢ 0 ≤ (2 + ‖x‖ ^ 2) ^ n
positivity All goals completed! 🐙
private lemma pow_mul_exp_bddAbove {s : ℝ} (hs : 0 ≤ s) (n : ℕ) :
∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C := by s:ℝhs:0 ≤ sn:ℕ⊢ ∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C
let b : ℝ → ℝ := fun x ↦ x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)⊢ ∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C
have hb : Continuous b := by fun_prop s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous b⊢ ∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous b⊢ ∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C
have htop : Tendsto b atTop (nhds 0) := by
let g : ℝ → ℝ := fun x : ℝ ↦ x ^ (s + n) * rexp (-2⁻¹ * x) s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bg:ℝ → ℝ := fun x => x ^ (s + ↑n) * rexp (-2⁻¹ * x)⊢ Tendsto b atTop (nhds 0) s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)⊢ ∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C
let g' : ℝ → ℝ := fun x ↦ 2 + x s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bg:ℝ → ℝ := fun x => x ^ (s + ↑n) * rexp (-2⁻¹ * x)g':ℝ → ℝ := fun x => 2 + x⊢ Tendsto b atTop (nhds 0) s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)⊢ ∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C
refine tendsto_of_tendsto_of_tendsto_of_le_of_le' (g := 0) (h := exp 1 • g ∘ g') ?_ ?_ ?_ ?_ refine_1 s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bg:ℝ → ℝ := fun x => x ^ (s + ↑n) * rexp (-2⁻¹ * x)g':ℝ → ℝ := fun x => 2 + x⊢ Tendsto 0 atTop (nhds 0)refine_2 s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bg:ℝ → ℝ := fun x => x ^ (s + ↑n) * rexp (-2⁻¹ * x)g':ℝ → ℝ := fun x => 2 + x⊢ Tendsto (rexp 1 • g ∘ g') atTop (nhds 0)refine_3 s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bg:ℝ → ℝ := fun x => x ^ (s + ↑n) * rexp (-2⁻¹ * x)g':ℝ → ℝ := fun x => 2 + x⊢ ∀ᶠ (b_1 : ℝ) in atTop, 0 b_1 ≤ b b_1refine_4 s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bg:ℝ → ℝ := fun x => x ^ (s + ↑n) * rexp (-2⁻¹ * x)g':ℝ → ℝ := fun x => 2 + x⊢ ∀ᶠ (b_1 : ℝ) in atTop, b b_1 ≤ (rexp 1 • g ∘ g') b_1 s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)⊢ ∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C
· refine_1 s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bg:ℝ → ℝ := fun x => x ^ (s + ↑n) * rexp (-2⁻¹ * x)g':ℝ → ℝ := fun x => 2 + x⊢ Tendsto 0 atTop (nhds 0) s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)⊢ ∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C exact tendsto_const_nhds All goals completed! 🐙 s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)⊢ ∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C
· refine_2 s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bg:ℝ → ℝ := fun x => x ^ (s + ↑n) * rexp (-2⁻¹ * x)g':ℝ → ℝ := fun x => 2 + x⊢ Tendsto (rexp 1 • g ∘ g') atTop (nhds 0) s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)⊢ ∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C rw [← smul_zero (exp 1) refine_2 s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bg:ℝ → ℝ := fun x => x ^ (s + ↑n) * rexp (-2⁻¹ * x)g':ℝ → ℝ := fun x => 2 + x⊢ Tendsto (rexp 1 • g ∘ g') atTop (nhds (rexp 1 • 0)) refine_2 s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bg:ℝ → ℝ := fun x => x ^ (s + ↑n) * rexp (-2⁻¹ * x)g':ℝ → ℝ := fun x => 2 + x⊢ Tendsto (rexp 1 • g ∘ g') atTop (nhds (rexp 1 • 0)) s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)⊢ ∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C]refine_2 s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bg:ℝ → ℝ := fun x => x ^ (s + ↑n) * rexp (-2⁻¹ * x)g':ℝ → ℝ := fun x => 2 + x⊢ Tendsto (rexp 1 • g ∘ g') atTop (nhds (rexp 1 • 0)) s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)⊢ ∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C
refine Tendsto.const_smul ?_ _ refine_2 s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bg:ℝ → ℝ := fun x => x ^ (s + ↑n) * rexp (-2⁻¹ * x)g':ℝ → ℝ := fun x => 2 + x⊢ Tendsto (g ∘ g') atTop (nhds 0) s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)⊢ ∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C
refine Tendsto.comp (y := atTop) ?_ ?_ refine_2.refine_1 s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bg:ℝ → ℝ := fun x => x ^ (s + ↑n) * rexp (-2⁻¹ * x)g':ℝ → ℝ := fun x => 2 + x⊢ Tendsto g atTop (nhds 0)refine_2.refine_2 s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bg:ℝ → ℝ := fun x => x ^ (s + ↑n) * rexp (-2⁻¹ * x)g':ℝ → ℝ := fun x => 2 + x⊢ Tendsto g' atTop atTop s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)⊢ ∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C
· refine_2.refine_1 s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bg:ℝ → ℝ := fun x => x ^ (s + ↑n) * rexp (-2⁻¹ * x)g':ℝ → ℝ := fun x => 2 + x⊢ Tendsto g atTop (nhds 0) s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)⊢ ∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C exact tendsto_rpow_mul_exp_neg_mul_atTop_nhds_zero (s + n) 2⁻¹ (by s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bg:ℝ → ℝ := fun x => x ^ (s + ↑n) * rexp (-2⁻¹ * x)g':ℝ → ℝ := fun x => 2 + x⊢ 0 < 2⁻¹ s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)⊢ ∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C norm_num All goals completed! 🐙 s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)⊢ ∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C)
· refine_2.refine_2 s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bg:ℝ → ℝ := fun x => x ^ (s + ↑n) * rexp (-2⁻¹ * x)g':ℝ → ℝ := fun x => 2 + x⊢ Tendsto g' atTop atTop s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)⊢ ∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C exact tendsto_atTop_atTop.mpr fun x ↦ ⟨x - 2, by s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bg:ℝ → ℝ := fun x => x ^ (s + ↑n) * rexp (-2⁻¹ * x)g':ℝ → ℝ := fun x => 2 + xx:ℝ⊢ ∀ (a : ℝ), x - 2 ≤ a → x ≤ g' a s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)⊢ ∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C simp [g', add_comm] All goals completed! 🐙 s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)⊢ ∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C⟩
· refine_3 s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bg:ℝ → ℝ := fun x => x ^ (s + ↑n) * rexp (-2⁻¹ * x)g':ℝ → ℝ := fun x => 2 + x⊢ ∀ᶠ (b_1 : ℝ) in atTop, 0 b_1 ≤ b b_1 s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)⊢ ∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C exact eventually_atTop.mpr ⟨0, fun _ _ ↦ by s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bg:ℝ → ℝ := fun x => x ^ (s + ↑n) * rexp (-2⁻¹ * x)g':ℝ → ℝ := fun x => 2 + xx✝¹:ℝx✝:0 ≤ x✝¹⊢ 0 x✝¹ ≤ b x✝¹ s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)⊢ ∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C positivity All goals completed! 🐙 s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)⊢ ∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C⟩
· refine_4 s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bg:ℝ → ℝ := fun x => x ^ (s + ↑n) * rexp (-2⁻¹ * x)g':ℝ → ℝ := fun x => 2 + x⊢ ∀ᶠ (b_1 : ℝ) in atTop, b b_1 ≤ (rexp 1 • g ∘ g') b_1 s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)⊢ ∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C refine eventually_atTop.mpr ⟨0, fun x hx ↦ ?_⟩ refine_4 s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bg:ℝ → ℝ := fun x => x ^ (s + ↑n) * rexp (-2⁻¹ * x)g':ℝ → ℝ := fun x => 2 + xx:ℝhx:0 ≤ x⊢ b x ≤ (rexp 1 • g ∘ g') x s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)⊢ ∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C
simp only [b, g, g', Function.comp_def, Pi.smul_def, mul_add, exp_add, smul_eq_mul] refine_4 s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bg:ℝ → ℝ := fun x => x ^ (s + ↑n) * rexp (-2⁻¹ * x)g':ℝ → ℝ := fun x => 2 + xx:ℝhx:0 ≤ x⊢ x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ rexp 1 * ((2 + x) ^ (s + ↑n) * (rexp (-2⁻¹ * 2) * rexp (-2⁻¹ * x))) s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)⊢ ∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C
field_simp refine_4 s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bg:ℝ → ℝ := fun x => x ^ (s + ↑n) * rexp (-2⁻¹ * x)g':ℝ → ℝ := fun x => 2 + xx:ℝhx:0 ≤ x⊢ x ^ s * (2 + x) ^ n ≤ rexp 1 * (2 + x) ^ (s + ↑n) * rexp (-1) s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)⊢ ∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C
simp only [exp_neg, rpow_add (show 0 < 2 + x by linarith), rpow_natCast] refine_4 s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bg:ℝ → ℝ := fun x => x ^ (s + ↑n) * rexp (-2⁻¹ * x)g':ℝ → ℝ := fun x => 2 + xx:ℝhx:0 ≤ x⊢ x ^ s * (2 + x) ^ n ≤ rexp 1 * ((2 + x) ^ s * (2 + x) ^ n) * (rexp 1)⁻¹ s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)⊢ ∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C
field_simp refine_4 s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bg:ℝ → ℝ := fun x => x ^ (s + ↑n) * rexp (-2⁻¹ * x)g':ℝ → ℝ := fun x => 2 + xx:ℝhx:0 ≤ x⊢ x ^ s ≤ (2 + x) ^ s s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)⊢ ∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C
exact rpow_le_rpow hx (by s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bg:ℝ → ℝ := fun x => x ^ (s + ↑n) * rexp (-2⁻¹ * x)g':ℝ → ℝ := fun x => 2 + xx:ℝhx:0 ≤ x⊢ x ≤ 2 + x s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)⊢ ∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C linarith All goals completed! 🐙 s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)⊢ ∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C) hs s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)⊢ ∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C
have htail : ∀ᶠ x in atTop, b x < 1 :=
(htop.eventually <| isOpen_Ioo.mem_nhds ⟨neg_one_lt_zero, zero_lt_one⟩).mono fun _ h ↦ h.2 s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)htail:∀ᶠ (x : ℝ) in atTop, b x < 1⊢ ∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C
obtain ⟨M, hgM⟩ := eventually_atTop.mp htail s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)htail:∀ᶠ (x : ℝ) in atTop, b x < 1M:ℝhgM:∀ (b_1 : ℝ), M ≤ b_1 → b b_1 < 1⊢ ∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C
obtain ⟨x₀, hx₀, hx₀'⟩ :=
isCompact_Icc.exists_isMaxOn ⟨0, Set.left_mem_Icc.mpr (abs_nonneg M)⟩ hb.continuousOn s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)htail:∀ᶠ (x : ℝ) in atTop, b x < 1M:ℝhgM:∀ (b_1 : ℝ), M ≤ b_1 → b b_1 < 1x₀:ℝhx₀:x₀ ∈ Set.Icc 0 |M|hx₀':IsMaxOn b (Set.Icc 0 |M|) x₀⊢ ∃ C > 0, ∀ x ≥ 0, x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ C
refine ⟨max (b x₀) 1, by s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)htail:∀ᶠ (x : ℝ) in atTop, b x < 1M:ℝhgM:∀ (b_1 : ℝ), M ≤ b_1 → b b_1 < 1x₀:ℝhx₀:x₀ ∈ Set.Icc 0 |M|hx₀':IsMaxOn b (Set.Icc 0 |M|) x₀⊢ max (b x₀) 1 > 0 simp All goals completed! 🐙, fun x hx ↦ ?_⟩
by_cases hxM : x ≤ |M| pos s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)htail:∀ᶠ (x : ℝ) in atTop, b x < 1M:ℝhgM:∀ (b_1 : ℝ), M ≤ b_1 → b b_1 < 1x₀:ℝhx₀:x₀ ∈ Set.Icc 0 |M|hx₀':IsMaxOn b (Set.Icc 0 |M|) x₀x:ℝhx:x ≥ 0hxM:x ≤ |M|⊢ x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ max (b x₀) 1neg s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)htail:∀ᶠ (x : ℝ) in atTop, b x < 1M:ℝhgM:∀ (b_1 : ℝ), M ≤ b_1 → b b_1 < 1x₀:ℝhx₀:x₀ ∈ Set.Icc 0 |M|hx₀':IsMaxOn b (Set.Icc 0 |M|) x₀x:ℝhx:x ≥ 0hxM:¬x ≤ |M|⊢ x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ max (b x₀) 1
· pos s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)htail:∀ᶠ (x : ℝ) in atTop, b x < 1M:ℝhgM:∀ (b_1 : ℝ), M ≤ b_1 → b b_1 < 1x₀:ℝhx₀:x₀ ∈ Set.Icc 0 |M|hx₀':IsMaxOn b (Set.Icc 0 |M|) x₀x:ℝhx:x ≥ 0hxM:x ≤ |M|⊢ x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ max (b x₀) 1 exact le_max_of_le_left (hx₀' ⟨hx, hxM⟩) All goals completed! 🐙
· neg s:ℝhs:0 ≤ sn:ℕb:ℝ → ℝ := fun x => x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x)hb:Continuous bhtop:Tendsto b atTop (nhds 0)htail:∀ᶠ (x : ℝ) in atTop, b x < 1M:ℝhgM:∀ (b_1 : ℝ), M ≤ b_1 → b b_1 < 1x₀:ℝhx₀:x₀ ∈ Set.Icc 0 |M|hx₀':IsMaxOn b (Set.Icc 0 |M|) x₀x:ℝhx:x ≥ 0hxM:¬x ≤ |M|⊢ x ^ s * (2 + x) ^ n * rexp (-2⁻¹ * x) ≤ max (b x₀) 1 exact le_max_of_le_right (hgM x <| (le_abs_self _).trans (Std.le_of_not_ge hxM)).le All goals completed! 🐙B. General, RCLike-valued
The (unnormalized) 𝕜-valued Gaussian exp (-2⁻¹ * ‖B⁻¹ (x - x₀)‖ ^ 2) as a Schwartz map.
def gaussian : 𝓢(E, 𝕜) :=
compSubConstCLM 𝕜 x₀
(((realStdGaussian D).postcompCLM ofRealCLM).compCLMOfContinuousLinearEquiv 𝕜 B.symm)@[simp]
lemma gaussian_apply : gaussian 𝕜 B x₀ x = ofReal (rexp (-2⁻¹ * ‖B.symm (x - x₀)‖ ^ 2)) := rfl
The (unnormalized) 𝕜-valued Gaussian exp (-2⁻¹ * ‖B⁻¹ x‖ ^ 2) as a Schwartz map.
abbrev gaussian₀ : 𝓢(E, 𝕜) := gaussian 𝕜 B 0