3.5 Approximation in Jacobi and ultraspherical series
In this chapter
Chebyshev approximation bounds also control projections in other weighted polynomial bases. Kernel estimates then turn weighted norm bounds into uniform bounds for Jacobi and Gegenbauer expansions.
3.5.1 Partial sums and weighted best approximation
The finite coefficient domain \(\mathcal A_{\mu ,P,\le N}^{\mathbb {R}}\) consists of real functions for which every product \(fP_n\) and square \(P_n^2\) is integrable and \(h_n{\gt}0\), for \(n\le N\) (Definition 3.1.44 ). The partial sum is the best polynomial approximation in the weighted \(L^2\) norm.
Definition
3.5.1
Polynomial partial sums and kernel vectors
A kernel cutoff is a natural number \(N\) together with \(h_n{\gt}0\) for every \(0\le n\le N\). For \(f\in \mathcal A_{\mu ,P,\le N}^{\mathbb {R}}\), write \(S_Nf=\sum _{n=0}^Na_n(f)P_n\) as a polynomial, and let \(v_{N,x}=\sum _{n=0}^NP_n(x)h_n^{-1/2}q_n\) be the kernel vector in weighted L2, where \(q_n=P_n/\sqrt{h_n}\) and the kernel vector is defined only at a kernel cutoff.
Lean Formalisation
def Polynomial.Sequence.partialSum (P : Polynomial.Sequence ℝ) (μ : MeasureTheory.Measure ℝ) {N : ℕ}
(f : Polynomial.IntegralCoefficientFamilyInput ℝ μ (↑P) N) : Polynomial ℝ
Lean definition
/-- The degree-N integral-coefficient partial sum, in the original normalization. -/
@[expose] noncomputable def partialSum (μ : Measure ℝ) {N : ℕ}
(f : IntegralCoefficientFamilyInput ℝ μ P N) : ℝ[X] :=
∑ i : Fin (N + 1), P.integralCoefficient μ (f.at i) • P i
source
1 related Lean declaration
def Polynomial.Sequence.kernelVector {μ : MeasureTheory.Measure ℝ} (hμ : Polynomial.HasFiniteMoments μ)
(P : Polynomial.Sequence ℝ) (N : { N // ∀ i ≤ N, 0 < P.squaredNorm μ i ⋯ }) (x : ℝ) : ↥(MeasureTheory.Lp ℝ 2 μ)
Lean definition
/-- The L² vector representing evaluation of the degree-N projection at x. -/
@[expose] noncomputable def kernelVector (P : Sequence ℝ)
(N : {N : ℕ // ∀ i ≤ N, 0 < P.squaredNorm μ i (Polynomial.Sequence.IntegrableSquare.of _ _)}) (x : ℝ) : Lp ℝ 2 μ :=
∑ i : Fin (N.val + 1), ((P i).eval x / √(P.squaredNorm μ i (Polynomial.Sequence.IntegrableSquare.of _ _))) •
P.normalizedToL2 hμ ⟨i, N.property i (Nat.le_of_lt_succ i.isLt)⟩
source
Theorem
3.5.2
Weighted polynomial best approximation
Let \(P_n\) be orthogonal for \(\mu \), with finite polynomial moments and positive definite polynomial integral. For \(f\in L^2(\mu ;\mathbb {R})\), let \(S_Nf=\sum _{n=0}^Na_n(f)P_n\) use the integral coefficients in the original normalisation. Every real polynomial \(p\) of degree at most \(N\) satisfies
\[ \| f-S_Nf\| _{L^2(\mu )}\le \| f-p\| _{L^2(\mu )}. \]
If \(|f-p|\le \varepsilon \) almost everywhere, with \(\varepsilon \ge 0\), the error is at most \(\sqrt{\mu (\mathbb {R})}\, \varepsilon \). No density or support condition is assumed.
Reference: [DLMF , 18.2(viii)] .
Lean Formalisation
theorem Polynomial.Sequence.inner_normalizedToL2_smul {μ : MeasureTheory.Measure ℝ} {P : Polynomial.Sequence ℝ}
(hμ : Polynomial.HasFiniteMoments μ) (hpos : Polynomial.HasPositiveDefiniteIntegral μ) (f : ↥(MeasureTheory.Lp ℝ 2 μ))
(n : ℕ) :
inner ℝ (P.normalizedToL2 hμ ⟨n, ⋯⟩) f • P.normalizedToL2 hμ ⟨n, ⋯⟩ =
P.integralCoefficient μ (Polynomial.IntegralCoefficientInput.ofL2 hμ hpos (↑P n) ⋯ f) •
(Polynomial.polynomialToL2 hμ) (↑P n)
Lean proof
/-- A normalized inner-product term is the usual integral-coefficient term. -/
theorem inner_normalizedToL2_smul (hpos : HasPositiveDefiniteIntegral μ)
(f : Lp ℝ 2 μ) (n : ℕ) :
inner ℝ (P.normalizedToL2 hμ ⟨n, squaredNorm_pos hpos P n⟩) f • P.normalizedToL2 hμ ⟨n, squaredNorm_pos hpos P n⟩ =
P.integralCoefficient μ (IntegralCoefficientInput.ofL2 hμ hpos (P n) (P.ne_zero n) f) • polynomialToL2 hμ (P n) := by
rw [normalizedToL2, inner_smul_left, inner_polynomialToL2_left]
simp only [conj_trivial, smul_smul]
congr 1
calc
_ = ((√(P.squaredNorm μ n (Polynomial.Sequence.IntegrableSquare.of _ _)))⁻¹ * (√(P.squaredNorm μ n (Polynomial.Sequence.IntegrableSquare.of _ _)))⁻¹) *
(∫ x, f x * (P n).eval x ∂μ) := by ring
_ = _ := by
rw [← mul_inv, Real.mul_self_sqrt (squaredNorm_pos hpos P n).le]
rfl
source
3 related Lean declarations
theorem Polynomial.Sequence.polynomialToL2_mem_span_normalizedToL2 {μ : MeasureTheory.Measure ℝ} {P : Polynomial.Sequence ℝ}
(hμ : Polynomial.HasFiniteMoments μ) (hpos : Polynomial.HasPositiveDefiniteIntegral μ) (N : ℕ) (p : Polynomial ℝ)
(hp : p.degree ≤ ↑N) :
(Polynomial.polynomialToL2 hμ) p ∈ Submodule.span ℝ ((fun n => P.normalizedToL2 hμ ⟨n, ⋯⟩) '' ↑(Finset.range (N + 1)))
Lean proof
/-- Every polynomial of degree at most N belongs to the first N+1 normalized
polynomial classes. No density or compact-support hypothesis is needed. -/
theorem polynomialToL2_mem_span_normalizedToL2 (hpos : HasPositiveDefiniteIntegral μ)
(N : ℕ) (p : ℝ[X]) (hp : p.degree ≤ N) :
polynomialToL2 hμ p ∈ Submodule.span ℝ
((fun n ↦ P.normalizedToL2 hμ ⟨n, squaredNorm_pos hpos P n⟩) '' (Finset.range (N + 1) : Set ℕ)) := by
have hs : p ∈ Submodule.span ℝ (P '' Set.Iic N) := by
rw [P.span_degreeLE (fun i _ ↦ isUnit_iff_ne_zero.mpr
(leadingCoeff_ne_zero.mpr (P.ne_zero i)))]
exact mem_degreeLE.mpr hp
clear hp
induction hs using Submodule.span_induction with
| mem q hq =>
obtain ⟨i, hi, rfl⟩ := hq
have hz : √(P.squaredNorm μ i (Polynomial.Sequence.IntegrableSquare.of _ _)) ≠ 0 :=
(Real.sqrt_pos.mpr (squaredNorm_pos hpos P i)).ne'
have hm := (Submodule.span ℝ
((fun n ↦ P.normalizedToL2 hμ ⟨n, squaredNorm_pos hpos P n⟩) '' (Finset.range (N + 1) : Set ℕ))).smul_mem
(√(P.squaredNorm μ i (Polynomial.Sequence.IntegrableSquare.of _ _))) (Submodule.subset_span
(Set.mem_image_of_mem _ (show i ∈ (Finset.range (N + 1) : Set ℕ) by
simpa only [Finset.mem_coe, Finset.mem_range, Nat.lt_succ_iff, Set.mem_Iic] using hi)))
simpa only [normalizedToL2, smul_smul, mul_inv_cancel₀ hz, one_smul] using hm
| zero => simp
| add p q _ _ hp hq => simpa only [map_add] using Submodule.add_mem _ hp hq
| smul c p _ hp => simpa only [map_smul] using Submodule.smul_mem _ c hp
source
theorem Polynomial.Sequence.IsOrthogonal.norm_sub_sum_integralCoefficient_le {μ : MeasureTheory.Measure ℝ}
{P : Polynomial.Sequence ℝ} (hμ : Polynomial.HasFiniteMoments μ) (hP : P.IsOrthogonal μ)
(hpos : Polynomial.HasPositiveDefiniteIntegral μ) (f : ↥(MeasureTheory.Lp ℝ 2 μ)) (N : ℕ) (p : Polynomial ℝ)
(hp : p.degree ≤ ↑N) :
‖f -
∑ i ∈ Finset.range (N + 1),
P.integralCoefficient μ (Polynomial.IntegralCoefficientInput.ofL2 hμ hpos (↑P i) ⋯ f) •
(Polynomial.polynomialToL2 hμ) (↑P i)‖ ≤
‖f - (Polynomial.polynomialToL2 hμ) p‖
Lean proof
/-- The weighted degree-N orthogonal projection is at least as accurate in L²
as every polynomial competitor of degree at most N. -/
theorem IsOrthogonal.norm_sub_sum_integralCoefficient_le (hP : P.IsOrthogonal μ)
(hpos : HasPositiveDefiniteIntegral μ) (f : Lp ℝ 2 μ) (N : ℕ)
(p : ℝ[X]) (hp : p.degree ≤ N) :
‖f - ∑ i ∈ Finset.range (N + 1),
P.integralCoefficient μ (IntegralCoefficientInput.ofL2 hμ hpos (P i) (P.ne_zero i) f) • polynomialToL2 hμ (P i)‖ ≤
‖f - polynomialToL2 hμ p‖ := by
simpa only [inner_normalizedToL2_smul hμ hpos] using
(hP.orthonormal_normalizedToL2 hμ hpos).norm_sub_sum_inner_le_of_mem_span
(Finset.range (N + 1)) f (polynomialToL2 hμ p)
(polynomialToL2_mem_span_normalizedToL2 hμ hpos N p hp)
source
theorem Polynomial.Sequence.IsOrthogonal.norm_sub_sum_integralCoefficient_le_of_ae_bound {μ : MeasureTheory.Measure ℝ}
{P : Polynomial.Sequence ℝ} (hμ : Polynomial.HasFiniteMoments μ) (hP : P.IsOrthogonal μ)
(hpos : Polynomial.HasPositiveDefiniteIntegral μ) (f : ↥(MeasureTheory.Lp ℝ 2 μ)) (N : ℕ) (p : Polynomial ℝ)
(hp : p.degree ≤ ↑N) {ε : ℝ} (hε : 0 ≤ ε) (he : ∀ᵐ (x : ℝ) ∂μ, ‖↑↑f x - Polynomial.eval x p‖ ≤ ε) :
‖f -
∑ i ∈ Finset.range (N + 1),
P.integralCoefficient μ (Polynomial.IntegralCoefficientInput.ofL2 hμ hpos (↑P i) ⋯ f) •
(Polynomial.polynomialToL2 hμ) (↑P i)‖ ≤
√(μ.real Set.univ) * ε
Lean proof
/-- An almost-everywhere uniform competitor error bounds the weighted projection
error by the square root of the total mass times that error. -/
theorem IsOrthogonal.norm_sub_sum_integralCoefficient_le_of_ae_bound
(hP : P.IsOrthogonal μ) (hpos : HasPositiveDefiniteIntegral μ)
(f : Lp ℝ 2 μ) (N : ℕ) (p : ℝ[X]) (hp : p.degree ≤ N)
{ε : ℝ} (hε : 0 ≤ ε) (he : ∀ᵐ x ∂μ, ‖f x - p.eval x‖ ≤ ε) :
‖f - ∑ i ∈ Finset.range (N + 1),
P.integralCoefficient μ (IntegralCoefficientInput.ofL2 hμ hpos (P i) (P.ne_zero i) f) • polynomialToL2 hμ (P i)‖ ≤
√(μ.real Set.univ) * ε := by
exact (hP.norm_sub_sum_integralCoefficient_le hμ hpos f N p hp).trans
(norm_sub_polynomialToL2_le_of_ae_bound hμ f p hε he)
source
Theorem
3.5.3
Geometric weighted L2 approximation
Under the weighted best-approximation hypotheses, assume additionally that \(\mu \) is supported almost everywhere on \([-1,1]\). For \(\rho {\gt}1\), let \(F\) be analytic and bounded by \(M\) in \(E_\rho \), and let \(f\in L^2(\mu ;\mathbb {R})\) agree almost everywhere with \(\operatorname {Re}F\). Then
\[ \| f-S_Nf\| _{L^2(\mu )}\le \sqrt{\mu (\mathbb {R})}\, \frac{2M}{\rho ^N(\rho -1)}. \]
The support may be disconnected.
Reference: the competitor of [ATAP , Theorem 8.2] .
Lean Formalisation
theorem Polynomial.Sequence.IsOrthogonal.norm_sub_sum_integralCoefficient_le_of_analytic {μ : MeasureTheory.Measure ℝ}
{P : Polynomial.Sequence ℝ} (hμ : Polynomial.HasFiniteMoments μ) (hP : P.IsOrthogonal μ)
(hpos : Polynomial.HasPositiveDefiniteIntegral μ) (hsupp : ∀ᵐ (x : ℝ) ∂μ, x ∈ Set.Icc (-1) 1) {F : ℂ → ℂ} {ρ M : ℝ}
(hρ : 1 < ρ) (hF : AnalyticOnNhd ℂ F (Complex.bernsteinEllipse ⟨ρ, hρ⟩))
(hM : ∀ z ∈ Complex.bernsteinEllipse ⟨ρ, hρ⟩, ‖F z‖ ≤ M) (f : ↥(MeasureTheory.Lp ℝ 2 μ))
(hf : ∀ᵐ (x : ℝ) ∂μ, ↑↑f x = (F ↑x).re) (N : ℕ) :
‖f -
∑ i ∈ Finset.range (N + 1),
P.integralCoefficient μ (Polynomial.IntegralCoefficientInput.ofL2 hμ hpos (↑P i) ⋯ f) •
(Polynomial.polynomialToL2 hμ) (↑P i)‖ ≤
√(μ.real Set.univ) * (2 * M / (ρ ^ N * (ρ - 1)))
Lean proof
/-- The real part of a bounded analytic function has geometrically accurate
weighted orthogonal projections. The measure need not have connected support. -/
theorem IsOrthogonal.norm_sub_sum_integralCoefficient_le_of_analytic
(hP : P.IsOrthogonal μ) (hpos : HasPositiveDefiniteIntegral μ)
(hsupp : ∀ᵐ x ∂μ, x ∈ Icc (-1 : ℝ) 1)
{F : ℂ → ℂ} {ρ M : ℝ} (hρ : 1 < ρ)
(hF : AnalyticOnNhd ℂ F (bernsteinEllipse ⟨ρ, hρ⟩))
(hM : ∀ z ∈ bernsteinEllipse ⟨ρ, hρ⟩, ‖F z‖ ≤ M)
(f : Lp ℝ 2 μ) (hf : ∀ᵐ x ∂μ, f x = (F x).re) (N : ℕ) :
‖f - ∑ i ∈ Finset.range (N + 1),
P.integralCoefficient μ (IntegralCoefficientInput.ofL2 hμ hpos (P i) (P.ne_zero i) f) • polynomialToL2 hμ (P i)‖ ≤
√(μ.real univ) * (2 * M / (ρ ^ N * (ρ - 1))) := by
obtain ⟨p, hp, he⟩ := Chebyshev.exists_real_polynomial_approximation_of_analytic hρ hF hM N
have hM0 : 0 ≤ M := (norm_nonneg (F 0)).trans
(hM 0 (by simpa using (ofReal_mem_bernsteinEllipse hρ
(show (0 : ℝ) ∈ Icc (-1 : ℝ) 1 by constructor <;> norm_num))))
apply hP.norm_sub_sum_integralCoefficient_le_of_ae_bound hμ hpos f N p hp
(by positivity)
filter_upwards [hf, hsupp] with x hfx hx
rw [hfx]
exact he x hx
source
Theorem
3.5.4
Geometric Jacobi L2 approximation
Let \(\alpha ,\beta {\gt}-1\), \(f\in L^2(\mu _{\alpha ,\beta };\mathbb {R})\), and \(S_Nf=\sum _{n=0}^N a_n(f)P_n^{(\alpha ,\beta )}\). For every real polynomial \(p\) of degree at most \(N\),
\[ \| f-S_Nf\| _{L^2(\mu _{\alpha ,\beta })}\le \| f-p\| _{L^2(\mu _{\alpha ,\beta })}. \]
If \(\rho {\gt}1\), \(F\) is analytic on \(E_\rho \), \(|F|\le M\) there, and \(f=\operatorname {Re}F\) almost everywhere for \(\mu _{\alpha ,\beta }\), then
\[ \| f-S_Nf\| _{L^2(\mu _{\alpha ,\beta })}\le \sqrt{\mu _{\alpha ,\beta }(\mathbb {R})}\frac{2M}{\rho ^N(\rho -1)}. \]
The original Jacobi measure is used, including singular endpoint weights.
Lean Formalisation
theorem Polynomial.norm_sub_sum_jacobiCoefficient_le {α β : ℝ} (hα : -1 < α) (hβ : -1 < β)
(f : ↥(MeasureTheory.Lp ℝ 2 (Polynomial.jacobiMeasure α β))) (N : ℕ) (p : Polynomial ℝ) (hp : p.degree ≤ ↑N) :
‖f -
∑ i ∈ Finset.range (N + 1),
Polynomial.jacobiCoefficient α β (Polynomial.IntegralCoefficientInput.ofJacobiL2 hα hβ f i) •
(Polynomial.polynomialToL2 ⋯) (Polynomial.jacobi α β i)‖ ≤
‖f - (Polynomial.polynomialToL2 ⋯) p‖
Lean proof
/-- Jacobi truncation is a best weighted L² approximation among polynomials of
at most the same degree. -/
theorem norm_sub_sum_jacobiCoefficient_le (f : Lp ℝ 2 (jacobiMeasure α β))
(N : ℕ) (p : ℝ[X]) (hp : p.degree ≤ N) :
‖f - ∑ i ∈ Finset.range (N + 1), (jacobiCoefficient α β (IntegralCoefficientInput.ofJacobiL2 hα hβ f i)) •
polynomialToL2 (hasFiniteMoments_jacobiMeasure hα hβ) (jacobi α β i)‖ ≤
‖f - polynomialToL2 (hasFiniteMoments_jacobiMeasure hα hβ) p‖ := by
simpa only [Sequence.integralCoefficient, squaredNorm_jacobiSequence, jacobiSequence_apply,
jacobiCoefficient, IntegralCoefficientInput.ofJacobiL2, IntegralCoefficientInput.ofL2] using
(isOrthogonal_jacobiSequence hα hβ).norm_sub_sum_integralCoefficient_le
(hasFiniteMoments_jacobiMeasure hα hβ)
(hasPositiveDefiniteIntegral_jacobiMeasure hα hβ) f N p hp
source
1 related Lean declaration
theorem Polynomial.norm_sub_sum_jacobiCoefficient_le_of_analytic {α β : ℝ} (hα : -1 < α) (hβ : -1 < β) {F : ℂ → ℂ} {ρ M : ℝ}
(hρ : 1 < ρ) (hF : AnalyticOnNhd ℂ F (Complex.bernsteinEllipse ⟨ρ, hρ⟩))
(hM : ∀ z ∈ Complex.bernsteinEllipse ⟨ρ, hρ⟩, ‖F z‖ ≤ M) (f : ↥(MeasureTheory.Lp ℝ 2 (Polynomial.jacobiMeasure α β)))
(hf : ∀ᵐ (x : ℝ) ∂Polynomial.jacobiMeasure α β, ↑↑f x = (F ↑x).re) (N : ℕ) :
‖f -
∑ i ∈ Finset.range (N + 1),
Polynomial.jacobiCoefficient α β (Polynomial.IntegralCoefficientInput.ofJacobiL2 hα hβ f i) •
(Polynomial.polynomialToL2 ⋯) (Polynomial.jacobi α β i)‖ ≤
√((Polynomial.jacobiMeasure α β).real Set.univ) * (2 * M / (ρ ^ N * (ρ - 1)))
Lean proof
/-- Geometric Jacobi truncation error for the real part of a bounded analytic
function on an open Bernstein ellipse, for every alpha,beta > -1. -/
theorem norm_sub_sum_jacobiCoefficient_le_of_analytic {F : ℂ → ℂ} {ρ M : ℝ}
(hρ : 1 < ρ) (hF : AnalyticOnNhd ℂ F (bernsteinEllipse ⟨ρ, hρ⟩))
(hM : ∀ z ∈ bernsteinEllipse ⟨ρ, hρ⟩, ‖F z‖ ≤ M)
(f : Lp ℝ 2 (jacobiMeasure α β))
(hf : ∀ᵐ x ∂jacobiMeasure α β, f x = (F x).re) (N : ℕ) :
‖f - ∑ i ∈ Finset.range (N + 1), (jacobiCoefficient α β (IntegralCoefficientInput.ofJacobiL2 hα hβ f i)) •
polynomialToL2 (hasFiniteMoments_jacobiMeasure hα hβ) (jacobi α β i)‖ ≤
√((jacobiMeasure α β).real univ) * (2 * M / (ρ ^ N * (ρ - 1))) := by
simpa only [Sequence.integralCoefficient, squaredNorm_jacobiSequence, jacobiSequence_apply,
jacobiCoefficient, IntegralCoefficientInput.ofJacobiL2, IntegralCoefficientInput.ofL2] using
(isOrthogonal_jacobiSequence hα hβ).norm_sub_sum_integralCoefficient_le_of_analytic
(hasFiniteMoments_jacobiMeasure hα hβ)
(hasPositiveDefiniteIntegral_jacobiMeasure hα hβ)
((ae_mem_Ioo_jacobiMeasure α β).mono (fun _ hx ↦ Ioo_subset_Icc_self hx))
hρ hF hM f hf N
source
Example (Julia).
For \(F(z)=1/(1+25z^2)\) choose \(\rho =1.2\). Put \(b=(\rho -\rho ^{-1})/2{\lt}1/5\). On \(E_\rho \), \(\Re (1+25z^2)\ge 1-25b^2{\gt}0\), so \(M=(1-25b^2)^{-1}\) is an upper bound for \(|F|\). The Gauss–Legendre rule of Chapter 3.6 estimates the coefficients and weighted errors below; these computed norms are numerical estimates, not certified integrals.
using LinearAlgebra
n = 200 # Gauss-Legendre nodes
b = [ k / sqrt ( 4 k ^ 2 - 1 ) for k in 1 : n - 1 ]
E = eigen ( SymTridiagonal ( zeros ( n ), b ))
x , w = E . values , 2 .* E . vectors [ 1 , : ] .^ 2
P = ones ( n , 62 ); P [ : , 2 ] = x # Legendre P_k at the nodes, k <= 61
for k in 1 : 60
P [ : , k + 2 ] = (( 2 k + 1 ) .* x .* P [ : , k + 1 ] .- k .* P [ : , k ]) ./ ( k + 1 )
end
f = 1 ./ ( 1 .+ 25 x .^ 2 )
a = [( 2 k + 1 ) / 2 * dot ( w , f .* P [ : , k + 1 ]) for k in 0 : 61 ]
L2err ( N ) = sqrt ( dot ( w , ( f .- P [ : , 1 : N + 1 ] * a [ 1 : N + 1 ]) .^ 2 ))
rho = 1.2 # poles lie on the ellipse rho = 1.2198...
bminor = ( rho - 1 / rho ) / 2
M = 1 / ( 1 - 25 bminor ^ 2 ) # analytic upper bound on the ellipse
[ L2err ( N ) / ( sqrt ( 2 ) * 2 M / ( rho ^ N * ( rho - 1 ))) for N in 10 : 10 : 60 ]
# compare estimated errors with the analytic bound
Partial-sum and kernel-vector formulas
Theorem
3.5.5
Classical finite kernel-vector formula
For a kernel cutoff \(N\) and \(x\in \mathbb {R}\), \(v_{N,x}=\sum _{n=0}^N P_n(x)h_n^{-1/2}e_n\). Every summand uses its positive-norm index.
Lean Formalisation
theorem Polynomial.Sequence.kernelVector_apply {μ : MeasureTheory.Measure ℝ} (hμ : Polynomial.HasFiniteMoments μ)
(P : Polynomial.Sequence ℝ) (N : { N // ∀ i ≤ N, 0 < P.squaredNorm μ i ⋯ }) (x : ℝ) :
Polynomial.Sequence.kernelVector hμ P N x =
∑ i, (Polynomial.eval x (↑P ↑i) / √(P.squaredNorm μ ↑i ⋯)) • P.normalizedToL2 hμ ⟨↑i, ⋯⟩
Lean proof
/-- Classical finite kernel-vector formula (DLMF 18.2(v)). -/
theorem kernelVector_apply (P : Sequence ℝ)
(N : {N : ℕ // ∀ i ≤ N, 0 < P.squaredNorm μ i (Polynomial.Sequence.IntegrableSquare.of _ _)}) (x : ℝ) :
P.kernelVector hμ N x =
∑ i : Fin (N.val + 1), ((P i).eval x / √(P.squaredNorm μ i (Polynomial.Sequence.IntegrableSquare.of _ _))) •
P.normalizedToL2 hμ ⟨i, N.property i (Nat.le_of_lt_succ i.isLt)⟩ := rfl
source
Theorem
3.5.6
Classical finite partial sum formula
For \(f\in \mathcal A_{\mu ,P,\le N}^{\mathbb {R}}\),
\[ S_Nf=\sum _{n=0}^N\frac{\int fP_n\, d\mu }{h_n}P_n, \qquad h_n=\int P_n^2\, d\mu {\gt}0. \]
Each term uses the same function \(f\) in its index-\(n\) coefficient domain.
Lean Formalisation
theorem Polynomial.Sequence.partialSum_apply (P : Polynomial.Sequence ℝ) (μ : MeasureTheory.Measure ℝ) {N : ℕ}
(f : Polynomial.IntegralCoefficientFamilyInput ℝ μ (↑P) N) :
P.partialSum μ f = ∑ i, P.integralCoefficient μ (f.at i) • ↑P ↑i
Lean proof
/-- The finite polynomial formula on the classical input domain. -/
theorem partialSum_apply (μ : Measure ℝ) {N : ℕ}
(f : IntegralCoefficientFamilyInput ℝ μ P N) :
P.partialSum μ f = ∑ i : Fin (N + 1), P.integralCoefficient μ (f.at i) • P i := rfl
source
3.5.2 From weighted error to uniform error
A weighted norm does not determine a point value. The Christoffel kernel bounds evaluation of a finite polynomial projection and supplies the extra factor needed for a uniform estimate.
The hypotheses here are finite polynomial moments, a positive-definite polynomial pairing and orthogonality of \(P\), as in the weighted best-approximation theorem. The kernel is \(K_N(x,y)=\sum _{n=0}^N P_n(x)P_n(y)/h_n\) from Definition 3.1.22 .
Theorem
3.5.7
Christoffel kernel evaluation bounds
The existing Christoffel kernel satisfies \(\langle v_{N,x},f\rangle =(S_Nf)(x)\) and \(\| v_{N,x}\| _2^2=K_N(x,x)\). Consequently, for \(\deg p\le N\), \(|p(x)|\le \sqrt{K_N(x,x)}\| p\| _2\). If \(|f-p|\le \varepsilon \) almost everywhere and \(|y-p(x)|\le \varepsilon \), then
\[ |y-(S_Nf)(x)|\le (1+\sqrt{K_N(x,x)}\sqrt{\mu (\mathbb {R})})\varepsilon . \]
Here \(f\) is a real L2 class and \(y\) specifies the desired pointwise value; no point evaluation of an L2 equivalence class is assumed.
Reference: [DLMF , 18.2(v), (viii)] .
Lean Formalisation
theorem Polynomial.Sequence.inner_kernelVector {μ : MeasureTheory.Measure ℝ} {P : Polynomial.Sequence ℝ}
(hμ : Polynomial.HasFiniteMoments μ) (hpos : Polynomial.HasPositiveDefiniteIntegral μ) (N : ℕ) (x : ℝ)
(f : ↥(MeasureTheory.Lp ℝ 2 μ)) :
inner ℝ (Polynomial.Sequence.kernelVector hμ P ⟨N, ⋯⟩ x) f =
Polynomial.eval x (P.partialSum μ (Polynomial.IntegralCoefficientFamilyInput.ofL2 hμ hpos P f N))
Lean proof
/-- The kernel vector reproduces the polynomial partial sum. -/
theorem inner_kernelVector (hpos : HasPositiveDefiniteIntegral μ)
(N : ℕ) (x : ℝ) (f : Lp ℝ 2 μ) :
inner ℝ (P.kernelVector hμ ⟨N, fun i _ ↦ squaredNorm_pos hpos P i⟩ x) f = (P.partialSum μ (IntegralCoefficientFamilyInput.ofL2 hμ hpos P f N)).eval x := by
simp only [kernelVector_of_positive hμ P hpos, partialSum_ofL2, sum_inner, inner_smul_left, conj_trivial,
normalizedToL2, inner_smul_left, inner_polynomialToL2_left,
eval_finsetSum, eval_smul, smul_eq_mul, integralCoefficient, IntegralCoefficientInput.ofL2]
apply Finset.sum_congr rfl
intro i _
calc
_ = (P i).eval x * ((√(P.squaredNorm μ i (Polynomial.Sequence.IntegrableSquare.of _ _)))⁻¹ * (√(P.squaredNorm μ i (Polynomial.Sequence.IntegrableSquare.of _ _)))⁻¹) *
(∫ t, f t * (P i).eval t ∂μ) := by ring
_ = _ := by
rw [← mul_inv, Real.mul_self_sqrt (squaredNorm_pos hpos P i).le]
ring
source
5 related Lean declarations
theorem Polynomial.Sequence.IsOrthogonal.norm_kernelVector_sq {μ : MeasureTheory.Measure ℝ} {P : Polynomial.Sequence ℝ}
(hμ : Polynomial.HasFiniteMoments μ) (hP : P.IsOrthogonal μ) (hpos : Polynomial.HasPositiveDefiniteIntegral μ) (N : ℕ)
(x : ℝ) : ‖Polynomial.Sequence.kernelVector hμ P ⟨N, ⋯⟩ x‖ ^ 2 = P.kernel μ N x x ⋯
Lean proof
/-- The squared norm of the representing vector is the diagonal kernel. -/
theorem IsOrthogonal.norm_kernelVector_sq (hP : P.IsOrthogonal μ)
(hpos : HasPositiveDefiniteIntegral μ) (N : ℕ) (x : ℝ) :
‖P.kernelVector hμ ⟨N, fun i _ ↦ squaredNorm_pos hpos P i⟩ x‖ ^ 2 = P.kernel μ N x x (Polynomial.Sequence.KernelInput.of _ _ _) := by
rw [← real_inner_self_eq_norm_sq, kernelVector_of_positive hμ P hpos,
(hP.orthonormal_normalizedToL2 hμ hpos).inner_sum]
simp only [kernel_of_positive hpos P, conj_trivial]
apply Finset.sum_congr rfl
intro i _
rw [div_mul_div_comm, Real.mul_self_sqrt (squaredNorm_pos hpos P i).le]
source
theorem Polynomial.Sequence.IsOrthogonal.norm_kernelVector {μ : MeasureTheory.Measure ℝ} {P : Polynomial.Sequence ℝ}
(hμ : Polynomial.HasFiniteMoments μ) (hP : P.IsOrthogonal μ) (hpos : Polynomial.HasPositiveDefiniteIntegral μ) (N : ℕ)
(x : ℝ) : ‖Polynomial.Sequence.kernelVector hμ P ⟨N, ⋯⟩ x‖ = √(P.kernel μ N x x ⋯)
Lean proof
/-- The norm of the representing vector is the square root of the diagonal kernel. -/
theorem IsOrthogonal.norm_kernelVector (hP : P.IsOrthogonal μ)
(hpos : HasPositiveDefiniteIntegral μ) (N : ℕ) (x : ℝ) :
‖P.kernelVector hμ ⟨N, fun i _ ↦ squaredNorm_pos hpos P i⟩ x‖ = √(P.kernel μ N x x (Polynomial.Sequence.KernelInput.of _ _ _)) := by
rw [← hP.norm_kernelVector_sq hμ hpos, Real.sqrt_sq (norm_nonneg _)]
source
theorem Polynomial.Sequence.IsOrthogonal.norm_eval_partialSum_le_kernel {μ : MeasureTheory.Measure ℝ}
{P : Polynomial.Sequence ℝ} (hμ : Polynomial.HasFiniteMoments μ) (hP : P.IsOrthogonal μ)
(hpos : Polynomial.HasPositiveDefiniteIntegral μ) (f : ↥(MeasureTheory.Lp ℝ 2 μ)) (N : ℕ) (x : ℝ) :
‖Polynomial.eval x (P.partialSum μ (Polynomial.IntegralCoefficientFamilyInput.ofL2 hμ hpos P f N))‖ ≤
√(P.kernel μ N x x ⋯) * ‖f‖
Lean proof
/-- Christoffel's pointwise bound for the projected polynomial. -/
theorem IsOrthogonal.norm_eval_partialSum_le_kernel (hP : P.IsOrthogonal μ)
(hpos : HasPositiveDefiniteIntegral μ) (f : Lp ℝ 2 μ) (N : ℕ) (x : ℝ) :
‖(P.partialSum μ (IntegralCoefficientFamilyInput.ofL2 hμ hpos P f N)).eval x‖ ≤ √(P.kernel μ N x x (Polynomial.Sequence.KernelInput.of _ _ _)) * ‖f‖ := by
rw [← inner_kernelVector hμ hpos]
exact (norm_inner_le_norm _ _).trans_eq
(by rw [hP.norm_kernelVector hμ hpos])
source
theorem Polynomial.Sequence.IsOrthogonal.norm_eval_le_kernel_mul_norm {μ : MeasureTheory.Measure ℝ} {P : Polynomial.Sequence ℝ}
(hμ : Polynomial.HasFiniteMoments μ) (hP : P.IsOrthogonal μ) (hpos : Polynomial.HasPositiveDefiniteIntegral μ) (N : ℕ)
(p : Polynomial ℝ) (hp : p.degree ≤ ↑N) (x : ℝ) :
‖Polynomial.eval x p‖ ≤ √(P.kernel μ N x x ⋯) * ‖(Polynomial.polynomialToL2 hμ) p‖
Lean proof
/-- A polynomial of degree at most N is bounded pointwise by its weighted L²
norm times the square root of the diagonal Christoffel kernel. -/
theorem IsOrthogonal.norm_eval_le_kernel_mul_norm (hP : P.IsOrthogonal μ)
(hpos : HasPositiveDefiniteIntegral μ) (N : ℕ) (p : ℝ[X]) (hp : p.degree ≤ N) (x : ℝ) :
‖p.eval x‖ ≤ √(P.kernel μ N x x (Polynomial.Sequence.KernelInput.of _ _ _)) * ‖polynomialToL2 hμ p‖ := by
simpa only [hP.partialSum_polynomialToL2 hμ hpos N p hp] using
hP.norm_eval_partialSum_le_kernel hμ hpos (polynomialToL2 hμ p) N x
source
theorem Polynomial.Sequence.IsOrthogonal.norm_sub_eval_partialSum_le_kernel {μ : MeasureTheory.Measure ℝ}
{P : Polynomial.Sequence ℝ} (hμ : Polynomial.HasFiniteMoments μ) (hP : P.IsOrthogonal μ)
(hpos : Polynomial.HasPositiveDefiniteIntegral μ) (f : ↥(MeasureTheory.Lp ℝ 2 μ)) (N : ℕ) (p : Polynomial ℝ)
(hp : p.degree ≤ ↑N) {ε : ℝ} (hε : 0 ≤ ε) (he : ∀ᵐ (t : ℝ) ∂μ, ‖↑↑f t - Polynomial.eval t p‖ ≤ ε) (x y : ℝ)
(hx : ‖y - Polynomial.eval x p‖ ≤ ε) :
‖y - Polynomial.eval x (P.partialSum μ (Polynomial.IntegralCoefficientFamilyInput.ofL2 hμ hpos P f N))‖ ≤
(1 + √(P.kernel μ N x x ⋯) * √(μ.real Set.univ)) * ε
Lean proof
/-- A uniform competitor yields a pointwise projection error controlled by the
Christoffel kernel. No asymptotic growth bound on the kernel is assumed. -/
theorem IsOrthogonal.norm_sub_eval_partialSum_le_kernel (hP : P.IsOrthogonal μ)
(hpos : HasPositiveDefiniteIntegral μ) (f : Lp ℝ 2 μ) (N : ℕ)
(p : ℝ[X]) (hp : p.degree ≤ N) {ε : ℝ} (hε : 0 ≤ ε)
(he : ∀ᵐ t ∂μ, ‖f t - p.eval t‖ ≤ ε) (x y : ℝ)
(hx : ‖y - p.eval x‖ ≤ ε) :
‖y - (P.partialSum μ (IntegralCoefficientFamilyInput.ofL2 hμ hpos P f N)).eval x‖ ≤
(1 + √(P.kernel μ N x x (Polynomial.Sequence.KernelInput.of _ _ _)) * √(μ.real Set.univ)) * ε := by
exact hP.norm_sub_eval_partialSum_le_of_polynomial_bound hμ hpos f N p hp hε
(Real.sqrt_nonneg _) he x y hx
(fun q hq ↦ hP.norm_eval_le_kernel_mul_norm hμ hpos N q hq x)
source
Definition
3.5.8
Explicit Jacobi growth constants
For \(a+1\notin \{ 0,-1,-2,\ldots \} \), \(\alpha ,\beta {\gt}-1\), and an integer \(k\ge 0\), define
\begin{align*} E_k(a)& =1+|a+1|+(k+1)^k/\Gamma (a+1),\\ B_k(\alpha ,\beta )& =1+h_0^{-1}+h_1^{-1}+h_2^{-1} +\frac{(2+|\alpha +\beta +3|)(k+1)^k}{2^{\alpha +\beta +1}},\\ C_k(\alpha ,\beta )& =[1+2(E_k(\alpha +1)+E_k(\beta ))]^2B_k(\alpha ,\beta ), \end{align*}
where \(h_n=\int (P_n^{(\alpha ,\beta )})^2\, d\mu _{\alpha ,\beta }\). The constants depend on \(k\) and the parameters, not on \(n\).
Lean Formalisation
def Polynomial.jacobiEndpointBound (a : { a // ∀ (n : ℕ), a + 1 ≠ -↑n }) (k : ℕ) : ℝ
Lean definition
/-- An explicit endpoint-growth constant; the argument type excludes exactly the shifted Gamma poles. -/
noncomputable def jacobiEndpointBound (a : {a : ℝ // ∀ n : ℕ, a + 1 ≠ -(n : ℝ)}) (k : ℕ) : ℝ :=
1 + |a.val + 1| + ((k : ℝ) + 1) ^ k / GammaOn ⟨a.val + 1, a.property⟩
source
2 related Lean declarations
def Polynomial.jacobiReciprocalNormBound (α β : ↑(Set.Ioi (-1))) (k : ℕ) : ℝ
Lean definition
/-- A global reciprocal-norm bound, including the first three degrees explicitly. -/
@[expose] noncomputable def jacobiReciprocalNormBound (α β : Set.Ioi (-1 : ℝ)) (k : ℕ) : ℝ :=
1 + (∫ x, (jacobi α.val β.val 0).eval x ^ 2 ∂jacobiMeasure α.val β.val)⁻¹ +
(∫ x, (jacobi α.val β.val 1).eval x ^ 2 ∂jacobiMeasure α.val β.val)⁻¹ +
(∫ x, (jacobi α.val β.val 2).eval x ^ 2 ∂jacobiMeasure α.val β.val)⁻¹ +
(2 + |α.val + β.val + 3|) * ((k : ℝ) + 1) ^ k / (2 : ℝ) ^ (α.val + β.val + 1)
source
def Polynomial.jacobiKernelBound (α β : ↑(Set.Ioi (-1))) (k : ℕ) : ℝ
Lean definition
/-- The explicit constant in the nonsharp polynomial kernel bound. -/
noncomputable def jacobiKernelBound (α β : Ioi (-1 : ℝ)) (k : ℕ) : ℝ :=
(1 + 2 * (jacobiEndpointBound ⟨α.val + 1, (GammaPoint.ofPos (α.val + 1 + 1) (by have ha : -1 < α.val := α.property; linarith)).property⟩ k + jacobiEndpointBound ⟨β.val, (GammaPoint.ofPos (β.val + 1) (by have hb : -1 < β.val := β.property; linarith)).property⟩ k)) ^ 2 *
jacobiReciprocalNormBound α β k
source
Theorem
3.5.10
Gegenbauer kernel and analytic approximation
For \(\lambda {\gt}-1/2\), \(\lambda \ne 0\), the Gegenbauer kernel equals the Jacobi kernel at \(\alpha =\beta =\lambda -1/2\). Let \(\rho {\gt}1\), let \(F\) be analytic and bounded by \(M\) on \(E_\rho \), and let \(f\in L^2(\mu _\lambda ;\mathbb {R})\) agree almost everywhere with \(\operatorname {Re}F\). Its Gegenbauer partial sums satisfy
\[ \| f-S_Nf\| _2\le \sqrt{\mu _\lambda (\mathbb {R})}\frac{2M}{\rho ^N(\rho -1)}. \]
The preceding uniform Jacobi error bound also holds, with \(C_k(\lambda -1/2,\lambda -1/2)\) and the Gegenbauer mass, whenever \(k\ge \max (\lambda +1/2,2\lambda )\) is an integer. Consequently the expansions converge uniformly on \([-1,1]\). Negative admissible parameters are included; \(\lambda =0\) is excluded because it does not give a polynomial basis.
Lean Formalisation
theorem Polynomial.gegenbauer_kernel_eq_jacobi {lam : ℝ} (hlam : -(1 / 2) < lam) (hzero : lam ≠ 0) (N : ℕ) (x y : ℝ) :
(Polynomial.gegenbauerSequence hlam hzero).kernel (Polynomial.gegenbauerMeasure lam) N x y ⋯ =
(Polynomial.jacobiSequence ⋯ ⋯).kernel (Polynomial.jacobiMeasure (lam - 1 / 2) (lam - 1 / 2)) N x y ⋯
Lean proof
/-- The Gegenbauer reproducing kernel is the symmetric Jacobi kernel. -/
theorem gegenbauer_kernel_eq_jacobi (N : ℕ) (x y : ℝ) :
(gegenbauerSequence hlam hzero).kernel (gegenbauerMeasure lam) N x y (Polynomial.Sequence.KernelInput.of _ _ _ (hi := fun _ => (hasFiniteMoments_gegenbauerMeasure hlam).integrable_mul _ _)) =
(jacobiSequence (show -1 < lam - 1 / 2 by linarith)
(show -1 < lam - 1 / 2 by linarith)).kernel
(jacobiMeasure (lam - 1 / 2) (lam - 1 / 2)) N x y (Polynomial.Sequence.KernelInput.of _ _ _ (hi := fun _ => (hasFiniteMoments_jacobiMeasure (by linarith) (by linarith)).integrable_mul _ _) (_hn := fun k => (Sequence.squaredNorm_pos
(hasPositiveDefiniteIntegral_jacobiMeasure (by linarith) (by linarith)) _ k).ne')) := by
rw [Sequence.kernel_of_positive (hasPositiveDefiniteIntegral_gegenbauerMeasure hlam)
(gegenbauerSequence hlam hzero),
Sequence.kernel_of_positive (hasPositiveDefiniteIntegral_jacobiMeasure
(show -1 < lam - 1 / 2 by linarith) (show -1 < lam - 1 / 2 by linarith))
(jacobiSequence (show -1 < lam - 1 / 2 by linarith) (show -1 < lam - 1 / 2 by linarith))]
simp only [gegenbauerSequence_apply, jacobiSequence_apply,
squaredNorm_gegenbauerSequence, squaredNorm_jacobiSequence]
apply Finset.sum_congr rfl
intro n _
rw [integral_sq_gegenbauer_eq_jacobi hlam, gegenbauer_eq_jacobi_mul hlam]
simp only [eval_mul, eval_C]
have hc := gegenbauer_jacobi_factor_ne_zero hlam hzero n
have hn := (integral_sq_jacobi_pos (by linarith : -1 < lam - 1 / 2)
(by linarith : -1 < lam - 1 / 2) n).ne'
generalize (ascPochhammer ℝ n).eval (2 * lam) /
(ascPochhammer ℝ n).eval (lam + 1 / 2) = c at *
field_simp [hc, hn]
source
3 related Lean declarations
theorem Polynomial.norm_sub_sum_gegenbauerCoefficient_le_of_analytic {lam : ℝ} (hlam : -(1 / 2) < lam) (hzero : lam ≠ 0)
{F : ℂ → ℂ} {ρ M : ℝ} (hρ : 1 < ρ) (hF : AnalyticOnNhd ℂ F (Complex.bernsteinEllipse ⟨ρ, hρ⟩))
(hM : ∀ z ∈ Complex.bernsteinEllipse ⟨ρ, hρ⟩, ‖F z‖ ≤ M)
(f : ↥(MeasureTheory.Lp ℝ 2 (Polynomial.gegenbauerMeasure lam)))
(hf : ∀ᵐ (x : ℝ) ∂Polynomial.gegenbauerMeasure lam, ↑↑f x = (F ↑x).re) (N : ℕ) :
‖f -
∑ i ∈ Finset.range (N + 1),
Polynomial.gegenbauerCoefficient lam (Polynomial.IntegralCoefficientInput.ofGegenbauerL2 hlam hzero f i) •
(Polynomial.polynomialToL2 ⋯) (Polynomial.gegenbauer lam i)‖ ≤
√((Polynomial.gegenbauerMeasure lam).real Set.univ) * (2 * M / (ρ ^ N * (ρ - 1)))
Lean proof
/-- Gegenbauer partial sums inherit the geometric weighted L² error bound. -/
theorem norm_sub_sum_gegenbauerCoefficient_le_of_analytic {F : ℂ → ℂ} {ρ M : ℝ}
(hρ : 1 < ρ) (hF : AnalyticOnNhd ℂ F (bernsteinEllipse ⟨ρ, hρ⟩))
(hM : ∀ z ∈ bernsteinEllipse ⟨ρ, hρ⟩, ‖F z‖ ≤ M)
(f : Lp ℝ 2 (gegenbauerMeasure lam))
(hf : ∀ᵐ x ∂gegenbauerMeasure lam, f x = (F x).re) (N : ℕ) :
‖f - ∑ i ∈ Finset.range (N + 1), (gegenbauerCoefficient lam (IntegralCoefficientInput.ofGegenbauerL2 hlam hzero f i)) •
polynomialToL2 (hasFiniteMoments_gegenbauerMeasure hlam) (gegenbauer lam i)‖ ≤
√((gegenbauerMeasure lam).real univ) * (2 * M / (ρ ^ N * (ρ - 1))) := by
simpa only [Sequence.integralCoefficient, squaredNorm_gegenbauerSequence, gegenbauerSequence_apply,
gegenbauerCoefficient, IntegralCoefficientInput.ofGegenbauerL2, IntegralCoefficientInput.ofL2] using
(isOrthogonal_gegenbauerSequence hlam hzero).norm_sub_sum_integralCoefficient_le_of_analytic
(hasFiniteMoments_gegenbauerMeasure hlam) (hasPositiveDefiniteIntegral_gegenbauerMeasure hlam)
((ae_mem_Ioo_gegenbauerMeasure lam).mono (fun _ hx ↦ Ioo_subset_Icc_self hx))
hρ hF hM f hf N
source
theorem Polynomial.norm_sub_sum_gegenbauerCoefficient_le_uniform_of_analytic {lam : ℝ} (hlam : -(1 / 2) < lam) (hzero : lam ≠ 0)
{F : ℂ → ℂ} {ρ M : ℝ} (hρ : 1 < ρ) (hF : AnalyticOnNhd ℂ F (Complex.bernsteinEllipse ⟨ρ, hρ⟩))
(hM : ∀ z ∈ Complex.bernsteinEllipse ⟨ρ, hρ⟩, ‖F z‖ ≤ M)
(f : ↥(MeasureTheory.Lp ℝ 2 (Polynomial.gegenbauerMeasure lam)))
(hf : ∀ᵐ (x : ℝ) ∂Polynomial.gegenbauerMeasure lam, ↑↑f x = (F ↑x).re) (k : ℕ) (hk : lam + 1 / 2 ≤ ↑k)
(hks : 2 * lam ≤ ↑k) (N : ℕ) {x : ℝ} (hx : x ∈ Set.Icc (-1) 1) :
‖(F ↑x).re -
∑ i ∈ Finset.range (N + 1),
Polynomial.gegenbauerCoefficient lam (Polynomial.IntegralCoefficientInput.ofGegenbauerL2 hlam hzero f i) *
Polynomial.eval x (Polynomial.gegenbauer lam i)‖ ≤
(1 +
√(Polynomial.jacobiKernelBound ⟨lam - 1 / 2, ⋯⟩ ⟨lam - 1 / 2, ⋯⟩ k) * (↑N + 1) ^ (3 * k + 3) *
√((Polynomial.gegenbauerMeasure lam).real Set.univ)) *
(2 * M / (ρ ^ N * (ρ - 1)))
Lean proof
/-- A uniform Gegenbauer error bound throughout lam > -1/2, lam nonzero,
with the same nonsharp polynomial factor as its Jacobi family. -/
theorem norm_sub_sum_gegenbauerCoefficient_le_uniform_of_analytic {F : ℂ → ℂ} {ρ M : ℝ}
(hρ : 1 < ρ) (hF : AnalyticOnNhd ℂ F (bernsteinEllipse ⟨ρ, hρ⟩))
(hM : ∀ z ∈ bernsteinEllipse ⟨ρ, hρ⟩, ‖F z‖ ≤ M)
(f : Lp ℝ 2 (gegenbauerMeasure lam))
(hf : ∀ᵐ x ∂gegenbauerMeasure lam, f x = (F x).re)
(k : ℕ) (hk : lam + 1 / 2 ≤ k) (hks : 2 * lam ≤ k)
(N : ℕ) {x : ℝ} (hx : x ∈ Icc (-1 : ℝ) 1) :
‖(F x).re - ∑ i ∈ Finset.range (N + 1),
(gegenbauerCoefficient lam (IntegralCoefficientInput.ofGegenbauerL2 hlam hzero f i)) * (gegenbauer lam i).eval x‖ ≤
(1 + √(jacobiKernelBound ⟨lam - 1 / 2, by change -1 < lam - 1 / 2; linarith⟩ ⟨lam - 1 / 2, by change -1 < lam - 1 / 2; linarith⟩ k) *
((N : ℝ) + 1) ^ (3 * k + 3) * √((gegenbauerMeasure lam).real univ)) *
(2 * M / (ρ ^ N * (ρ - 1))) := by
have h := (isOrthogonal_gegenbauerSequence hlam hzero).norm_sub_eval_partialSum_le_kernel_of_analytic
(hasFiniteMoments_gegenbauerMeasure hlam) (hasPositiveDefiniteIntegral_gegenbauerMeasure hlam)
((ae_mem_Ioo_gegenbauerMeasure lam).mono (fun _ hx ↦ Ioo_subset_Icc_self hx)) hρ hF hM f hf N hx
simp only [Sequence.partialSum_ofL2, eval_finsetSum, eval_smul, smul_eq_mul,
Sequence.integralCoefficient, squaredNorm_gegenbauerSequence, gegenbauerSequence_apply,
IntegralCoefficientInput.ofL2,
gegenbauer_kernel_eq_jacobi hlam hzero] at h
have hM0 : 0 ≤ M := (norm_nonneg (F x)).trans (hM x (ofReal_mem_bernsteinEllipse hρ hx))
apply h.trans
gcongr
exact sqrt_jacobi_kernel_le_polynomial (by linarith) (by linarith) k
(by linarith) (by linarith) (by linarith) N hx
source
theorem Polynomial.tendstoUniformlyOn_sum_gegenbauerCoefficient_of_analytic {lam : ℝ} (hlam : -(1 / 2) < lam) (hzero : lam ≠ 0)
{F : ℂ → ℂ} {ρ M : ℝ} (hρ : 1 < ρ) (hF : AnalyticOnNhd ℂ F (Complex.bernsteinEllipse ⟨ρ, hρ⟩))
(hM : ∀ z ∈ Complex.bernsteinEllipse ⟨ρ, hρ⟩, ‖F z‖ ≤ M)
(f : ↥(MeasureTheory.Lp ℝ 2 (Polynomial.gegenbauerMeasure lam)))
(hf : ∀ᵐ (x : ℝ) ∂Polynomial.gegenbauerMeasure lam, ↑↑f x = (F ↑x).re) :
TendstoUniformlyOn
(fun N x =>
∑ i ∈ Finset.range (N + 1),
Polynomial.gegenbauerCoefficient lam (Polynomial.IntegralCoefficientInput.ofGegenbauerL2 hlam hzero f i) *
Polynomial.eval x (Polynomial.gegenbauer lam i))
(fun x => (F ↑x).re) Filter.atTop (Set.Icc (-1) 1)
Lean proof
/-- Analytic Gegenbauer expansions converge uniformly, including the endpoints. -/
theorem tendstoUniformlyOn_sum_gegenbauerCoefficient_of_analytic {F : ℂ → ℂ} {ρ M : ℝ}
(hρ : 1 < ρ) (hF : AnalyticOnNhd ℂ F (bernsteinEllipse ⟨ρ, hρ⟩))
(hM : ∀ z ∈ bernsteinEllipse ⟨ρ, hρ⟩, ‖F z‖ ≤ M)
(f : Lp ℝ 2 (gegenbauerMeasure lam))
(hf : ∀ᵐ x ∂gegenbauerMeasure lam, f x = (F x).re) :
TendstoUniformlyOn (fun N x ↦ ∑ i ∈ Finset.range (N + 1),
(gegenbauerCoefficient lam (IntegralCoefficientInput.ofGegenbauerL2 hlam hzero f i)) * (gegenbauer lam i).eval x)
(fun x : ℝ ↦ (F x).re) atTop (Icc (-1) 1) := by
obtain ⟨k, hk0, hks⟩ := exists_gegenbauerKernel_exponent lam
apply tendstoUniformlyOn_of_polynomial_geometric_bound (3 * k + 3) hρ
(A := √(jacobiKernelBound ⟨lam - 1 / 2, by change -1 < lam - 1 / 2; linarith⟩ ⟨lam - 1 / 2, by change -1 < lam - 1 / 2; linarith⟩ k) *
√((gegenbauerMeasure lam).real univ)) (B := ρ - 1) (C := 2 * M)
intro N x hx
convert norm_sub_sum_gegenbauerCoefficient_le_uniform_of_analytic hlam hzero hρ hF hM f hf
k hk0 hks N hx using 1
ring
source
Positivity of explicit growth constants
Theorem
3.5.11
Classical Jacobi growth constants
For \(a,\alpha ,\beta {\gt}-1\), every squared norm \(h_n\) is strictly positive, \(E_k(a){\gt}0\), \(B_k(\alpha ,\beta ){\gt}0\), and \(C_k(\alpha ,\beta )\ge 0\). Thus the reciprocals appearing in these constants are reciprocals of genuine nonzero values, and the Gamma argument \(a+1\) lies in the positive half-line.
Lean Formalisation
theorem Polynomial.jacobiEndpointBound_pos {a : ℝ} (ha : -1 < a) (k : ℕ) : 0 < Polynomial.jacobiEndpointBound ⟨a, ⋯⟩ k
Lean proof
/-- The endpoint-growth constant is positive throughout the integrable range. -/
theorem jacobiEndpointBound_pos {a : ℝ} (ha : -1 < a) (k : ℕ) :
0 < jacobiEndpointBound ⟨a, (GammaPoint.ofPos (a + 1) (by linarith)).property⟩ k := by
have hg := Gamma_pos_of_pos (show 0 < a + 1 by linarith)
unfold jacobiEndpointBound
change 0 < 1 + |a + 1| + ((k : ℝ) + 1) ^ k / Gamma (a + 1)
positivity
source
3 related Lean declarations
theorem Polynomial.integral_sq_jacobi_pos {α β : ℝ} (hα : -1 < α) (hβ : -1 < β) (n : ℕ) :
0 < ∫ (x : ℝ), Polynomial.eval x (Polynomial.jacobi α β n) ^ 2 ∂Polynomial.jacobiMeasure α β
Lean proof
/-- Jacobi squared norms are positive throughout the orthogonality range. -/
theorem integral_sq_jacobi_pos {α β : ℝ} (hα : -1 < α) (hβ : -1 < β) (n : ℕ) :
0 < ∫ x, (jacobi α β n).eval x ^ 2 ∂jacobiMeasure α β := by
simpa only [jacobiSequence_apply] using
hasPositiveDefiniteIntegral_jacobiMeasure hα hβ _ ((jacobiSequence hα hβ).ne_zero n)
source
theorem Polynomial.jacobiReciprocalNormBound_pos {α β : ℝ} (hα : -1 < α) (hβ : -1 < β) (k : ℕ) :
0 < Polynomial.jacobiReciprocalNormBound ⟨α, hα⟩ ⟨β, hβ⟩ k
Lean proof
/-- The global reciprocal-norm constant is positive for every integrable Jacobi weight. -/
theorem jacobiReciprocalNormBound_pos {α β : ℝ} (hα : -1 < α) (hβ : -1 < β) (k : ℕ) :
0 < jacobiReciprocalNormBound ⟨α, hα⟩ ⟨β, hβ⟩ k := by
have h0 := integral_sq_jacobi_pos hα hβ 0
have h1 := integral_sq_jacobi_pos hα hβ 1
have h2 := integral_sq_jacobi_pos hα hβ 2
unfold jacobiReciprocalNormBound
positivity
source
theorem Polynomial.jacobiKernelBound_nonneg {α β : ℝ} (hα : -1 < α) (hβ : -1 < β) (k : ℕ) :
0 ≤ Polynomial.jacobiKernelBound ⟨α, hα⟩ ⟨β, hβ⟩ k
Lean proof
/-- The kernel-growth constant is nonnegative. -/
theorem jacobiKernelBound_nonneg {α β : ℝ} (hα : -1 < α) (hβ : -1 < β) (k : ℕ) :
0 ≤ jacobiKernelBound ⟨α, hα⟩ ⟨β, hβ⟩ k :=
mul_nonneg (sq_nonneg _) (jacobiReciprocalNormBound_pos hα hβ k).le
source
3.5.3 Complex data and differentiation
Complex coefficients use the same real orthogonal basis. Differentiating Jacobi expansions shifts both parameters; normal convergence justifies the termwise formulas.
The domains \(\mathcal A_{\mu ,p}^{\mathbb K}\) and \(\mathcal A_{\mu ,P,\le N}^{\mathbb K}\) require an integrable numerator and a finite positive squared norm for each coefficient being taken (Definitions 3.1.37 and 3.1.44 ).
Definition
3.5.12
Scalar extensions and complex classical coefficients
For \(\mathbb K=\mathbb {R}\) or \(\mathbb {C}\), embed the existing real polynomial functions and normalized vectors in \(L^2(\mu ;\mathbb K)\) at positive-norm indices. The scalar kernel vector is the real kernel vector embedded into this space, at a cutoff with positive squared norms throughout. For \(f\in \mathcal A_{\mu ,P_n}^{\mathbb K}\) and \(f\in \mathcal A_{\mu ,P,\le N}^{\mathbb K}\), respectively, define
\[ a_n^{\mathbb K}(f)=h_n^{-1}\int f(x)P_n(x)\, d\mu (x),\qquad S_N^{\mathbb K}f(x)=\sum _{n=0}^N a_n^{\mathbb K}(f)P_n(x). \]
For \(f\) in the respective domains \(\mathcal A_{\mu _{\alpha ,\beta },P_n^{(\alpha ,\beta )}}^{\mathbb {C}}\) and \(\mathcal A_{\mu _\lambda ,C_n^{(\lambda )}}^{\mathbb {C}}\), define the complex Jacobi and Gegenbauer coefficients \(h_n^{-1}\int fP_n^{(\alpha ,\beta )}\, d\mu _{\alpha ,\beta }\) and \(h_n^{-1}\int fC_n^{(\lambda )}\, d\mu _\lambda \), with \(h_n\) the corresponding squared norms, in the original polynomial normalizations.
Reference: [DLMF , 18.18] .
Lean Formalisation
def Polynomial.polynomialToL2Scalar.{u_1} (𝕂 : Type u_1) [RCLike 𝕂] {μ : MeasureTheory.Measure ℝ}
(hμ : Polynomial.HasFiniteMoments μ) : Polynomial ℝ →ₗ[ℝ] ↥(MeasureTheory.Lp 𝕂 2 μ)
Lean definition
/-- Real polynomial evaluation as a real-linear map into real or complex L². -/
@[expose] noncomputable def polynomialToL2Scalar : ℝ[X] →ₗ[ℝ] Lp 𝕂 2 μ :=
((@RCLike.ofRealCLM 𝕂 _).compLpₗ 2 μ).comp (polynomialToL2 hμ)
source
6 related Lean declarations
def Polynomial.Sequence.normalizedToL2Scalar.{u_1} (𝕂 : Type u_1) [RCLike 𝕂] {μ : MeasureTheory.Measure ℝ}
(hμ : Polynomial.HasFiniteMoments μ) (P : Polynomial.Sequence ℝ) (n : { n // 0 < P.squaredNorm μ n ⋯ }) :
↥(MeasureTheory.Lp 𝕂 2 μ)
Lean definition
/-- Scalar extension of the existing normalized real polynomial vectors. -/
@[expose] noncomputable def normalizedToL2Scalar (n : {n : ℕ // 0 < P.squaredNorm μ n (Polynomial.Sequence.IntegrableSquare.of _ _)}) : Lp 𝕂 2 μ :=
(@RCLike.ofRealCLM 𝕂 _).compLp (P.normalizedToL2 hμ n)
source
def Polynomial.Sequence.integralCoefficientScalar.{u_1} (𝕂 : Type u_1) [RCLike 𝕂] (P : Polynomial.Sequence ℝ)
(μ : MeasureTheory.Measure ℝ) {n : ℕ} (f : Polynomial.IntegralCoefficientInput 𝕂 μ (↑P n)) : 𝕂
Lean definition
/-- Integral coefficients over real or complex scalars, for a real polynomial family. -/
@[expose] noncomputable def integralCoefficientScalar (μ : Measure ℝ) {n : ℕ}
(f : IntegralCoefficientInput 𝕂 μ (P n)) : 𝕂 :=
(P.squaredNorm μ n (Polynomial.Sequence.IntegrableSquare.of _ _ (by simpa only [pow_two] using f.square_integrable)) : 𝕂)⁻¹ *
∫ x, f.val x * (((P n).eval x : ℝ) : 𝕂) ∂μ
source
def Polynomial.Sequence.partialSumValueScalar.{u_1} (𝕂 : Type u_1) [RCLike 𝕂] (P : Polynomial.Sequence ℝ)
(μ : MeasureTheory.Measure ℝ) {N : ℕ} (f : Polynomial.IntegralCoefficientFamilyInput 𝕂 μ (↑P) N) (x : ℝ) : 𝕂
Lean definition
/-- Pointwise evaluation of a finite classical scalar-valued expansion. -/
@[expose] noncomputable def partialSumValueScalar (μ : Measure ℝ) {N : ℕ}
(f : IntegralCoefficientFamilyInput 𝕂 μ P N) (x : ℝ) : 𝕂 :=
∑ i : Fin (N + 1), P.integralCoefficientScalar 𝕂 μ (f.at i) * (((P i).eval x : ℝ) : 𝕂)
source
def Polynomial.Sequence.kernelVectorScalar.{u_1} (𝕂 : Type u_1) [RCLike 𝕂] {μ : MeasureTheory.Measure ℝ}
(hμ : Polynomial.HasFiniteMoments μ) (P : Polynomial.Sequence ℝ) (N : { N // ∀ i ≤ N, 0 < P.squaredNorm μ i ⋯ })
(x : ℝ) : ↥(MeasureTheory.Lp 𝕂 2 μ)
Lean definition
/-- Scalar extension of the real Christoffel evaluation vector. -/
@[expose] noncomputable def kernelVectorScalar (N : {N : ℕ // ∀ i ≤ N, 0 < P.squaredNorm μ i (Polynomial.Sequence.IntegrableSquare.of _ _)}) (x : ℝ) : Lp 𝕂 2 μ :=
(@RCLike.ofRealCLM 𝕂 _).compLp (P.kernelVector hμ N x)
source
def Polynomial.jacobiComplexCoefficient (α β : ℝ) {n : ℕ}
(f : Polynomial.IntegralCoefficientInput ℂ (Polynomial.jacobiMeasure α β) (Polynomial.jacobi α β n)) : ℂ
Lean definition
/-- Complex Jacobi coefficients on their classical input domain (DLMF 18.18). -/
@[expose] noncomputable def jacobiComplexCoefficient (α β : ℝ) {n : ℕ}
(f : IntegralCoefficientInput ℂ (jacobiMeasure α β) (jacobi α β n)) : ℂ :=
((∫ x, (jacobi α β n).eval x ^ 2 ∂jacobiMeasure α β : ℝ) : ℂ)⁻¹ *
∫ x, f.val x * (((jacobi α β n).eval x : ℝ) : ℂ) ∂jacobiMeasure α β
source
def Polynomial.gegenbauerComplexCoefficient (lam : ℝ) {n : ℕ}
(f : Polynomial.IntegralCoefficientInput ℂ (Polynomial.gegenbauerMeasure lam) (Polynomial.gegenbauer lam n)) : ℂ
Lean definition
/-- Complex Gegenbauer coefficients on their classical input domain (DLMF 18.18). -/
@[expose] noncomputable def gegenbauerComplexCoefficient (lam : ℝ) {n : ℕ}
(f : IntegralCoefficientInput ℂ (gegenbauerMeasure lam) (gegenbauer lam n)) : ℂ :=
((∫ x, (gegenbauer lam n).eval x ^ 2 ∂gegenbauerMeasure lam : ℝ) : ℂ)⁻¹ *
∫ x, f.val x * (((gegenbauer lam n).eval x : ℝ) : ℂ) ∂gegenbauerMeasure lam
source
Theorem
3.5.13
Complex weighted and kernel approximation bounds
Let \(P\) be orthogonal for a positive-definite measure with finite moments and almost-everywhere support in \([-1,1]\). Let \(\rho {\gt}1\), let \(F\) be analytic on the open ellipse \(E_\rho \) with \(|F|\le M\), and let \(f\in L^2(\mu ;\mathbb {C})\) equal \(F\) almost everywhere on the real axis. With \(\varepsilon _N=2M/[\rho ^N(\rho -1)]\),
\[ \| f-S_N^{\mathbb {C}}f\| _2\le \sqrt{\mu (\mathbb {R})}\varepsilon _N,\qquad |F(x)-S_N^{\mathbb {C}}f(x)|\le (1+\sqrt{K_N(x,x)}\sqrt{\mu (\mathbb {R})})\varepsilon _N \]
for \(x\in [-1,1]\). No connected-support or density hypothesis is needed.
Reference: [ATAP , Theorem 8.2] .
Lean Formalisation
theorem Polynomial.Sequence.IsOrthogonal.norm_sub_sum_integralCoefficientScalar_le_of_analytic {μ : MeasureTheory.Measure ℝ}
{P : Polynomial.Sequence ℝ} (hμ : Polynomial.HasFiniteMoments μ) (hP : P.IsOrthogonal μ)
(hpos : Polynomial.HasPositiveDefiniteIntegral μ) (hsupp : ∀ᵐ (x : ℝ) ∂μ, x ∈ Set.Icc (-1) 1) {F : ℂ → ℂ} {ρ M : ℝ}
(hρ : 1 < ρ) (hF : AnalyticOnNhd ℂ F (Complex.bernsteinEllipse ⟨ρ, hρ⟩))
(hM : ∀ z ∈ Complex.bernsteinEllipse ⟨ρ, hρ⟩, ‖F z‖ ≤ M) (f : ↥(MeasureTheory.Lp ℂ 2 μ))
(hf : ∀ᵐ (x : ℝ) ∂μ, ↑↑f x = F ↑x) (N : ℕ) :
‖f -
∑ i ∈ Finset.range (N + 1),
Polynomial.Sequence.integralCoefficientScalar ℂ P μ
(Polynomial.IntegralCoefficientInput.ofL2 hμ hpos (↑P i) ⋯ f) •
(Polynomial.polynomialToL2Scalar ℂ hμ) (↑P i)‖ ≤
√(μ.real Set.univ) * (2 * M / (ρ ^ N * (ρ - 1)))
Lean proof
/-- Complex orthogonal partial sums inherit the geometric weighted L² bound
from the complex Chebyshev competitor. -/
theorem IsOrthogonal.norm_sub_sum_integralCoefficientScalar_le_of_analytic
(hP : P.IsOrthogonal μ) (hpos : HasPositiveDefiniteIntegral μ)
(hsupp : ∀ᵐ x ∂μ, x ∈ Icc (-1 : ℝ) 1) {F : ℂ → ℂ} {ρ M : ℝ}
(hρ : 1 < ρ) (hF : AnalyticOnNhd ℂ F (bernsteinEllipse ⟨ρ, hρ⟩))
(hM : ∀ z ∈ bernsteinEllipse ⟨ρ, hρ⟩, ‖F z‖ ≤ M)
(f : Lp ℂ 2 μ) (hf : ∀ᵐ x ∂μ, f x = F x) (N : ℕ) :
‖f - ∑ i ∈ Finset.range (N + 1), P.integralCoefficientScalar ℂ μ (IntegralCoefficientInput.ofL2 hμ hpos (P i) (P.ne_zero i) f) •
polynomialToL2Scalar ℂ hμ (P i)‖ ≤
√(μ.real univ) * (2 * M / (ρ ^ N * (ρ - 1))) := by
have hb := (hP.orthonormal_normalizedToL2Scalar ℂ hμ hpos).norm_sub_sum_inner_le_of_mem_span
(Finset.range (N + 1)) f (complexChebyshevToL2 hμ ⟨(fun x : ℝ ↦ F x), Chebyshev.integrable_classicalMeasureT_complex (Chebyshev.continuousOn_real_of_analytic hρ hF)⟩ N)
(complexChebyshevToL2_mem_span hμ hpos ⟨(fun x : ℝ ↦ F x), Chebyshev.integrable_classicalMeasureT_complex (Chebyshev.continuousOn_real_of_analytic hρ hF)⟩ N)
simp only [inner_normalizedToL2Scalar_smul ℂ hμ hpos] at hb
exact hb.trans (norm_sub_complexChebyshevToL2_le_of_analytic hμ hsupp hρ hF hM f hf N)
source
1 related Lean declaration
theorem Polynomial.Sequence.IsOrthogonal.norm_sub_partialSumValueScalar_le_kernel_of_analytic {μ : MeasureTheory.Measure ℝ}
{P : Polynomial.Sequence ℝ} (hμ : Polynomial.HasFiniteMoments μ) (hP : P.IsOrthogonal μ)
(hpos : Polynomial.HasPositiveDefiniteIntegral μ) (hsupp : ∀ᵐ (x : ℝ) ∂μ, x ∈ Set.Icc (-1) 1) {F : ℂ → ℂ} {ρ M : ℝ}
(hρ : 1 < ρ) (hF : AnalyticOnNhd ℂ F (Complex.bernsteinEllipse ⟨ρ, hρ⟩))
(hM : ∀ z ∈ Complex.bernsteinEllipse ⟨ρ, hρ⟩, ‖F z‖ ≤ M) (f : ↥(MeasureTheory.Lp ℂ 2 μ))
(hf : ∀ᵐ (x : ℝ) ∂μ, ↑↑f x = F ↑x) (N : ℕ) {x : ℝ} (hx : x ∈ Set.Icc (-1) 1) :
‖F ↑x -
Polynomial.Sequence.partialSumValueScalar ℂ P μ (Polynomial.IntegralCoefficientFamilyInput.ofL2 hμ hpos P f N)
x‖ ≤
(1 + √(P.kernel μ N x x ⋯) * √(μ.real Set.univ)) * (2 * M / (ρ ^ N * (ρ - 1)))
Lean proof
/-- The Christoffel-kernel pointwise error bound also holds for complex data,
with exactly the same constant as in the real-valued theorem. -/
theorem IsOrthogonal.norm_sub_partialSumValueScalar_le_kernel_of_analytic
(hP : P.IsOrthogonal μ) (hpos : HasPositiveDefiniteIntegral μ)
(hsupp : ∀ᵐ x ∂μ, x ∈ Icc (-1 : ℝ) 1) {F : ℂ → ℂ} {ρ M : ℝ}
(hρ : 1 < ρ) (hF : AnalyticOnNhd ℂ F (bernsteinEllipse ⟨ρ, hρ⟩))
(hM : ∀ z ∈ bernsteinEllipse ⟨ρ, hρ⟩, ‖F z‖ ≤ M)
(f : Lp ℂ 2 μ) (hf : ∀ᵐ x ∂μ, f x = F x) (N : ℕ)
{x : ℝ} (hx : x ∈ Icc (-1 : ℝ) 1) :
‖F x - P.partialSumValueScalar ℂ μ (IntegralCoefficientFamilyInput.ofL2 hμ hpos P f N) x‖ ≤
(1 + √(P.kernel μ N x x (Polynomial.Sequence.KernelInput.of _ _ _)) * √(μ.real univ)) *
(2 * M / (ρ ^ N * (ρ - 1))) := by
let z := ∑ n ∈ Finset.range (N + 1), Chebyshev.complexCoefficient (Chebyshev.ComplexCoefficientInput.ofContinuousOn (fun t : ℝ ↦ F t) (Chebyshev.continuousOn_real_of_analytic hρ hF) n) *
(((Chebyshev.T ℝ n).eval x : ℝ) : ℂ)
have hc : ‖F x - z‖ ≤ 2 * M / (ρ ^ N * (ρ - 1)) :=
Chebyshev.norm_sub_sum_complexCoefficient_le_of_analytic hρ hF hM hx N
have hz : inner ℂ (P.kernelVectorScalar ℂ hμ ⟨N, fun i _ ↦ squaredNorm_pos hpos P i⟩ x) (complexChebyshevToL2 hμ ⟨(fun x : ℝ ↦ F x), Chebyshev.integrable_classicalMeasureT_complex (Chebyshev.continuousOn_real_of_analytic hρ hF)⟩ N) = z :=
hP.inner_kernelVectorScalar_complexChebyshevToL2 hμ hpos ⟨(fun x : ℝ ↦ F x), Chebyshev.integrable_classicalMeasureT_complex (Chebyshev.continuousOn_real_of_analytic hρ hF)⟩ N x
have hd : ‖P.partialSumValueScalar ℂ μ (IntegralCoefficientFamilyInput.ofL2 hμ hpos P f N) x - z‖ ≤
√(P.kernel μ N x x (Polynomial.Sequence.KernelInput.of _ _ _)) * (√(μ.real univ) * (2 * M / (ρ ^ N * (ρ - 1)))) := by
rw [← inner_kernelVectorScalar ℂ hμ hpos, ← hz, ← inner_sub_right]
apply (norm_inner_le_norm _ _).trans
rw [hP.norm_kernelVectorScalar ℂ hμ hpos]
exact mul_le_mul_of_nonneg_left
(norm_sub_complexChebyshevToL2_le_of_analytic hμ hsupp hρ hF hM f hf N) (sqrt_nonneg _)
calc
_ ≤ ‖F x - z‖ + ‖z - P.partialSumValueScalar ℂ μ (IntegralCoefficientFamilyInput.ofL2 hμ hpos P f N) x‖ := by
simpa only [dist_eq_norm] using dist_triangle (F x) z (P.partialSumValueScalar ℂ μ (IntegralCoefficientFamilyInput.ofL2 hμ hpos P f N) x)
_ ≤ 2 * M / (ρ ^ N * (ρ - 1)) +
√(P.kernel μ N x x (Polynomial.Sequence.KernelInput.of _ _ _)) * (√(μ.real univ) * (2 * M / (ρ ^ N * (ρ - 1)))) := by
rw [norm_sub_rev z]
exact add_le_add hc hd
_ = _ := by ring
source
Theorem
3.5.14
Jacobi series differentiation with parameter shift
For complex \(\alpha ,\beta \), suppose \(a_nP_n^{(\alpha ,\beta )}\) has a summable uniform majorant on an open set \(U\). Then throughout \(U\),
\[ \frac{d}{dz}\sum _{n\ge 0}a_nP_n^{(\alpha ,\beta )}(z) =\sum _{n\ge 0}\frac{n+\alpha +\beta +2}{2}\, a_{n+1} P_n^{(\alpha +1,\beta +1)}(z). \]
No real-weight parameter restrictions are required for this identity.
Reference: [DLMF , 18.9.15] .
Lean Formalisation
theorem Polynomial.hasSum_derivative_jacobi_series (α β : ℂ) {a : ℕ → ℂ} {u : ℕ → ℝ} {U : Set ℂ} (hU : IsOpen U)
(hu : Summable u) (hb : ∀ (n : ℕ), ∀ z ∈ U, ‖a n * Polynomial.eval z (Polynomial.jacobi α β n)‖ ≤ u n) {z : ℂ}
(hz : z ∈ U) :
HasSum (fun n => a (n + 1) * (↑n + α + β + 2) / 2 * Polynomial.eval z (Polynomial.jacobi (α + 1) (β + 1) n))
(deriv (fun w => ∑' (n : ℕ), a n * Polynomial.eval w (Polynomial.jacobi α β n)) z)
Lean proof
/-- Jacobi differentiation shifts both parameters, under an explicit summable
uniform bound on the original series. The parameters may be complex. -/
theorem hasSum_derivative_jacobi_series (α β : ℂ) {a : ℕ → ℂ} {u : ℕ → ℝ}
{U : Set ℂ} (hU : IsOpen U) (hu : Summable u)
(hb : ∀ n z, z ∈ U → ‖a n * (jacobi α β n).eval z‖ ≤ u n)
{z : ℂ} (hz : z ∈ U) :
HasSum (fun n ↦ a (n + 1) * ((n : ℂ) + α + β + 2) / 2 *
(jacobi (α + 1) (β + 1) n).eval z)
(deriv (fun w ↦ ∑' n, a n * (jacobi α β n).eval w) z) := by
have h := hasSum_derivative_series hU hu hb hz
have ht := (hasSum_nat_add_iff' 1).2 h
simp only [Finset.sum_range_one, jacobi_zero, derivative_one, eval_zero, mul_zero,
sub_zero] at ht
convert ht using 1
ext n
rw [derivative_jacobi_succ]
simp only [eval_mul, eval_C, map_div₀, map_one, map_ofNat]
ring
source
Theorem
3.5.15
Higher derivatives of Jacobi series
For complex \(\alpha ,\beta \), let \(U\subset \mathbb {C}\) be open and suppose \(\sum _n u_n{\lt}\infty \) with \(|a_nP_n^{(\alpha ,\beta )}(z)|\le u_n\) for every \(z\in U\). For \(S(z)=\sum _n a_nP_n^{(\alpha ,\beta )}(z)\),
\[ S^{(k)}(z)=\sum _{n\ge 0}a_{n+k} \left[\prod _{j=0}^{k-1}\frac{n+k+\alpha +\beta +j+1}{2}\right] P_n^{(\alpha +k,\beta +k)}(z). \]
Reference: [DLMF , 18.9.15] , iterated.
Lean Formalisation
theorem Polynomial.hasSum_iterated_derivative_jacobi_series (α β : ℂ) {a : ℕ → ℂ} {u : ℕ → ℝ} {U : Set ℂ} (hU : IsOpen U)
(hu : Summable u) (hb : ∀ (n : ℕ), ∀ z ∈ U, ‖a n * Polynomial.eval z (Polynomial.jacobi α β n)‖ ≤ u n) (k : ℕ) {z : ℂ}
(hz : z ∈ U) :
HasSum
(fun n =>
(a (n + k) * ∏ j ∈ Finset.range k, 1 / 2 * (↑n + ↑k + α + β + ↑j + 1)) *
Polynomial.eval z (Polynomial.jacobi (α + ↑k) (β + ↑k) n))
(iteratedDeriv k (fun w => ∑' (n : ℕ), a n * Polynomial.eval w (Polynomial.jacobi α β n)) z)
Lean proof
/-- Differentiating k times removes the first k modes and shifts both Jacobi
parameters by k, with the finite-product rising-factorial coefficient. -/
theorem hasSum_iterated_derivative_jacobi_series (α β : ℂ) {a : ℕ → ℂ} {u : ℕ → ℝ}
{U : Set ℂ} (hU : IsOpen U) (hu : Summable u)
(hb : ∀ n z, z ∈ U → ‖a n * (jacobi α β n).eval z‖ ≤ u n)
(k : ℕ) {z : ℂ} (hz : z ∈ U) :
HasSum (fun n ↦ a (n + k) *
(∏ j ∈ Finset.range k, (1 / 2 : ℂ) * ((n + k : ℂ) + α + β + j + 1)) *
(jacobi (α + k) (β + k) n).eval z)
(iteratedDeriv k (fun w ↦ ∑' n, a n * (jacobi α β n).eval w) z) := by
have hs := hasSum_iterated_derivative_series (P := jacobi α β) (a := a) hU hu hb k hz
have ht := (hasSum_nat_add_iff' k).2 hs
have hz0 : ∑ n ∈ Finset.range k, a n * (derivative^[k] (jacobi α β n)).eval z = 0 := by
apply Finset.sum_eq_zero
intro n hn
rw [iterate_derivative_jacobi_eq_zero α β (Finset.mem_range.mp hn), eval_zero, mul_zero]
rw [hz0, sub_zero] at ht
simpa only [iterate_derivative_jacobi, eval_mul, eval_C, map_div₀, map_one,
map_ofNat, mul_assoc] using ht
source
Projection constructions, kernel estimates and growth proofs
Theorem
3.5.16
Scalar normalization and kernel-vector formulas
Let \(\mathbb K=\mathbb R\) or \(\mathbb C\). At a positive-norm index, the scalar normalized vector is \(h_n^{-1/2}J_\mu ^{\mathbb K}P_n\). At a kernel cutoff, the scalar kernel vector is the scalar embedding of \(v_{N,x}\).
Lean Formalisation
theorem Polynomial.Sequence.normalizedToL2Scalar_eq.{u_1} (𝕂 : Type u_1) [RCLike 𝕂] {μ : MeasureTheory.Measure ℝ}
(hμ : Polynomial.HasFiniteMoments μ) (P : Polynomial.Sequence ℝ) (n : { n // 0 < P.squaredNorm μ n ⋯ }) :
Polynomial.Sequence.normalizedToL2Scalar 𝕂 hμ P n =
↑(√(P.squaredNorm μ ↑n ⋯))⁻¹ • (Polynomial.polynomialToL2Scalar 𝕂 hμ) (↑P ↑n)
Lean proof
/-- Scalar extension retains the original square-root normalization. -/
theorem normalizedToL2Scalar_eq (n : {n : ℕ // 0 < P.squaredNorm μ n (Polynomial.Sequence.IntegrableSquare.of _ _)}) :
P.normalizedToL2Scalar 𝕂 hμ n =
(((√(P.squaredNorm μ n (Polynomial.Sequence.IntegrableSquare.of _ _)))⁻¹ : ℝ) : 𝕂) • polynomialToL2Scalar 𝕂 hμ (P n) := by
change ((@RCLike.ofRealCLM 𝕂 _).compLpₗ 2 μ)
((√(P.squaredNorm μ n (Polynomial.Sequence.IntegrableSquare.of _ _)))⁻¹ • polynomialToL2 hμ (P n)) = _
rw [map_smul, RCLike.real_smul_eq_coe_smul (K := 𝕂)]
rfl
source
1 related Lean declaration
theorem Polynomial.Sequence.kernelVectorScalar_apply.{u_1} (𝕂 : Type u_1) [RCLike 𝕂] {μ : MeasureTheory.Measure ℝ}
(hμ : Polynomial.HasFiniteMoments μ) (P : Polynomial.Sequence ℝ) (N : { N // ∀ i ≤ N, 0 < P.squaredNorm μ i ⋯ })
(x : ℝ) :
Polynomial.Sequence.kernelVectorScalar 𝕂 hμ P N x =
RCLike.ofRealCLM.compLp (Polynomial.Sequence.kernelVector hμ P N x)
Lean proof
/-- Scalar embedding of the classical finite kernel vector (DLMF 18.2(v)). -/
theorem kernelVectorScalar_apply
(N : {N : ℕ // ∀ i ≤ N, 0 < P.squaredNorm μ i (Polynomial.Sequence.IntegrableSquare.of _ _)}) (x : ℝ) :
P.kernelVectorScalar 𝕂 hμ N x =
(@RCLike.ofRealCLM 𝕂 _).compLp (P.kernelVector hμ N x) := rfl
source
Theorem
3.5.17
Classical scalar coefficient and partial sum formulas
Let \(\mathbb K=\mathbb R\) or \(\mathbb C\). For \(f\in \mathcal A_{\mu ,P_n}^{\mathbb K}\), \(a_n^{\mathbb K}(f)=(\int P_n^2\, d\mu )^{-1}\int fP_n\, d\mu \), with the real denominator embedded in \(\mathbb K\). For \(f\in \mathcal A_{\mu ,P,\le N}^{\mathbb K}\), \(S_N^{\mathbb K}f(x)=\sum _{n=0}^N a_n^{\mathbb K}(f)P_n(x)\).
Lean Formalisation
theorem Polynomial.Sequence.integralCoefficientScalar_apply.{u_1} (𝕂 : Type u_1) [RCLike 𝕂] (P : Polynomial.Sequence ℝ)
(μ : MeasureTheory.Measure ℝ) {n : ℕ} (f : Polynomial.IntegralCoefficientInput 𝕂 μ (↑P n)) :
Polynomial.Sequence.integralCoefficientScalar 𝕂 P μ f =
(↑(∫ (x : ℝ), Polynomial.eval x (↑P n) ^ 2 ∂μ))⁻¹ * ∫ (x : ℝ), f.val x * ↑(Polynomial.eval x (↑P n)) ∂μ
Lean proof
/-- The classical scalar coefficient formula (DLMF 18.2(viii)). -/
theorem integralCoefficientScalar_apply (μ : Measure ℝ) {n : ℕ}
(f : IntegralCoefficientInput 𝕂 μ (P n)) :
P.integralCoefficientScalar 𝕂 μ f = ((∫ x, (P n).eval x ^ 2 ∂μ : ℝ) : 𝕂)⁻¹ *
∫ x, f.val x * (((P n).eval x : ℝ) : 𝕂) ∂μ := by
simp only [integralCoefficientScalar, squaredNorm, integralInner_self]
source
1 related Lean declaration
theorem Polynomial.Sequence.partialSumValueScalar_apply.{u_1} (𝕂 : Type u_1) [RCLike 𝕂] (P : Polynomial.Sequence ℝ)
(μ : MeasureTheory.Measure ℝ) {N : ℕ} (f : Polynomial.IntegralCoefficientFamilyInput 𝕂 μ (↑P) N) (x : ℝ) :
Polynomial.Sequence.partialSumValueScalar 𝕂 P μ f x =
∑ i, Polynomial.Sequence.integralCoefficientScalar 𝕂 P μ (f.at i) * ↑(Polynomial.eval x (↑P ↑i))
Lean proof
/-- The finite scalar formula on its classical input domain. -/
theorem partialSumValueScalar_apply (μ : Measure ℝ) {N : ℕ}
(f : IntegralCoefficientFamilyInput 𝕂 μ P N) (x : ℝ) :
P.partialSumValueScalar 𝕂 μ f x =
∑ i : Fin (N + 1), P.integralCoefficientScalar 𝕂 μ (f.at i) * (((P i).eval x : ℝ) : 𝕂) := rfl
source
Theorem
3.5.18
Classical complex Jacobi and Gegenbauer coefficient formulas
For \(f\in \mathcal A_{\mu _{\alpha ,\beta },P_n^{(\alpha ,\beta )}}^{\mathbb {C}}\), the complex Jacobi coefficient is
\[ \frac{\int fP_n^{(\alpha ,\beta )}\, d\mu _{\alpha ,\beta }}{\int (P_n^{(\alpha ,\beta )})^2\, d\mu _{\alpha ,\beta }}. \]
For \(f\in \mathcal A_{\mu _\lambda ,C_n^{(\lambda )}}^{\mathbb {C}}\), the complex Gegenbauer coefficient is
\[ \frac{\int fC_n^{(\lambda )}\, d\mu _\lambda }{\int (C_n^{(\lambda )})^2\, d\mu _\lambda }. \]
Both numerators are integrals of integrable functions and both denominators are finite and positive. For real-valued \(f\) these equal the real coefficients viewed in \(\mathbb {C}\).
Lean Formalisation
theorem Polynomial.jacobiComplexCoefficient_apply (α β : ℝ) {n : ℕ}
(f : Polynomial.IntegralCoefficientInput ℂ (Polynomial.jacobiMeasure α β) (Polynomial.jacobi α β n)) :
Polynomial.jacobiComplexCoefficient α β f =
(↑(∫ (x : ℝ), Polynomial.eval x (Polynomial.jacobi α β n) ^ 2 ∂Polynomial.jacobiMeasure α β))⁻¹ *
∫ (x : ℝ), f.val x * ↑(Polynomial.eval x (Polynomial.jacobi α β n)) ∂Polynomial.jacobiMeasure α β
Lean proof
/-- The classical complex weighted formula (DLMF 18.18). -/
theorem jacobiComplexCoefficient_apply (α β : ℝ) {n : ℕ}
(f : IntegralCoefficientInput ℂ (jacobiMeasure α β) (jacobi α β n)) :
jacobiComplexCoefficient α β f =
((∫ x, (jacobi α β n).eval x ^ 2 ∂jacobiMeasure α β : ℝ) : ℂ)⁻¹ *
∫ x, f.val x * (((jacobi α β n).eval x : ℝ) : ℂ) ∂jacobiMeasure α β := rfl
source
3 related Lean declarations
theorem Polynomial.gegenbauerComplexCoefficient_apply (lam : ℝ) {n : ℕ}
(f : Polynomial.IntegralCoefficientInput ℂ (Polynomial.gegenbauerMeasure lam) (Polynomial.gegenbauer lam n)) :
Polynomial.gegenbauerComplexCoefficient lam f =
(↑(∫ (x : ℝ), Polynomial.eval x (Polynomial.gegenbauer lam n) ^ 2 ∂Polynomial.gegenbauerMeasure lam))⁻¹ *
∫ (x : ℝ), f.val x * ↑(Polynomial.eval x (Polynomial.gegenbauer lam n)) ∂Polynomial.gegenbauerMeasure lam
Lean proof
/-- The classical complex weighted formula (DLMF 18.18). -/
theorem gegenbauerComplexCoefficient_apply (lam : ℝ) {n : ℕ}
(f : IntegralCoefficientInput ℂ (gegenbauerMeasure lam) (gegenbauer lam n)) :
gegenbauerComplexCoefficient lam f =
((∫ x, (gegenbauer lam n).eval x ^ 2 ∂gegenbauerMeasure lam : ℝ) : ℂ)⁻¹ *
∫ x, f.val x * (((gegenbauer lam n).eval x : ℝ) : ℂ) ∂gegenbauerMeasure lam := rfl
source
theorem Polynomial.jacobiComplexCoefficient_ofReal (α β : ℝ) {n : ℕ}
(f : Polynomial.IntegralCoefficientInput ℝ (Polynomial.jacobiMeasure α β) (Polynomial.jacobi α β n)) :
Polynomial.jacobiComplexCoefficient α β f.ofReal = ↑(Polynomial.jacobiCoefficient α β f)
Lean proof
/-- Complex coefficients agree with real coefficients on admissible real data. -/
theorem jacobiComplexCoefficient_ofReal (α β : ℝ) {n : ℕ}
(f : IntegralCoefficientInput ℝ (jacobiMeasure α β) (jacobi α β n)) :
jacobiComplexCoefficient α β f.ofReal = (jacobiCoefficient α β f : ℂ) := by
simp only [jacobiComplexCoefficient, jacobiCoefficient, IntegralCoefficientInput.ofReal_val,
ofReal_mul, ofReal_inv]
congr 1
simp_rw [← ofReal_mul]
exact integral_complex_ofReal
source
theorem Polynomial.gegenbauerComplexCoefficient_ofReal (lam : ℝ) {n : ℕ}
(f : Polynomial.IntegralCoefficientInput ℝ (Polynomial.gegenbauerMeasure lam) (Polynomial.gegenbauer lam n)) :
Polynomial.gegenbauerComplexCoefficient lam f.ofReal = ↑(Polynomial.gegenbauerCoefficient lam f)
Lean proof
/-- Complex coefficients agree with real coefficients on admissible real data. -/
theorem gegenbauerComplexCoefficient_ofReal (lam : ℝ) {n : ℕ}
(f : IntegralCoefficientInput ℝ (gegenbauerMeasure lam) (gegenbauer lam n)) :
gegenbauerComplexCoefficient lam f.ofReal = (gegenbauerCoefficient lam f : ℂ) := by
simp only [gegenbauerComplexCoefficient, gegenbauerCoefficient, IntegralCoefficientInput.ofReal_val,
ofReal_mul, ofReal_inv]
congr 1
simp_rw [← ofReal_mul]
exact integral_complex_ofReal
source
Definition
3.5.19
Complex Chebyshev truncation in a weighted space
Let \(\mu \) have all moments finite and let \(f\in \mathcal L^1_T(\mathbb {C})\). The degree-\(N\) Chebyshev truncation in \(L^2(\mu ;\mathbb {C})\) is
\[ q_N=\sum _{n=0}^N a_n(f)[T_n], \]
where \([T_n]\) denotes the polynomial’s \(L^2(\mu ;\mathbb {C})\) class. Reference: [ATAP , Theorem 8.2] .
Lean Formalisation
def Polynomial.complexChebyshevToL2 {μ : MeasureTheory.Measure ℝ} (hμ : Polynomial.HasFiniteMoments μ)
(F : Polynomial.Chebyshev.ComplexIntegrableInput) (N : ℕ) : ↥(MeasureTheory.Lp ℂ 2 μ)
Lean definition
/-- The complex Chebyshev truncation, viewed in an arbitrary weighted L² space. -/
@[expose] noncomputable def complexChebyshevToL2 (F : Chebyshev.ComplexIntegrableInput) (N : ℕ) : Lp ℂ 2 μ :=
∑ n ∈ Finset.range (N + 1), Chebyshev.complexCoefficient (Chebyshev.ComplexCoefficientInput.ofL1 F n) •
polynomialToL2Scalar ℂ hμ (Chebyshev.T ℝ n)
source
Theorem
3.5.20
Weighted Chebyshev truncation representation
For \(f\in \mathcal L^1_T(\mathbb {C})\), the weighted truncation is represented \(\mu \)-almost everywhere by \(\sum _{n=0}^N a_n(f)T_n(x)\).
Lean Formalisation
theorem Polynomial.coe_complexChebyshevToL2 {μ : MeasureTheory.Measure ℝ} (hμ : Polynomial.HasFiniteMoments μ)
(F : Polynomial.Chebyshev.ComplexIntegrableInput) (N : ℕ) :
↑↑(Polynomial.complexChebyshevToL2 hμ F N) =ᵐ[μ] fun x =>
∑ n ∈ Finset.range (N + 1),
Polynomial.Chebyshev.complexCoefficient (Polynomial.Chebyshev.ComplexCoefficientInput.ofL1 F n) *
↑(Polynomial.eval x (Polynomial.Chebyshev.T ℝ ↑n))
Lean proof
/-- The finite polynomial formula represents the weighted L² competitor. -/
theorem coe_complexChebyshevToL2 (F : Chebyshev.ComplexIntegrableInput) (N : ℕ) :
complexChebyshevToL2 hμ F N =ᵐ[μ] fun x : ℝ ↦
∑ n ∈ Finset.range (N + 1), Chebyshev.complexCoefficient (Chebyshev.ComplexCoefficientInput.ofL1 F n) *
(((Chebyshev.T ℝ n).eval x : ℝ) : ℂ) := by
have hterm (n : ℕ) :
(Chebyshev.complexCoefficient (Chebyshev.ComplexCoefficientInput.ofL1 F n) •
polynomialToL2Scalar ℂ hμ (Chebyshev.T ℝ n) : Lp ℂ 2 μ) =ᵐ[μ]
fun x : ℝ ↦ Chebyshev.complexCoefficient (Chebyshev.ComplexCoefficientInput.ofL1 F n) *
(((Chebyshev.T ℝ n).eval x : ℝ) : ℂ) := by
filter_upwards [Lp.coeFn_smul (Chebyshev.complexCoefficient (Chebyshev.ComplexCoefficientInput.ofL1 F n))
(polynomialToL2Scalar ℂ hμ (Chebyshev.T ℝ n)),
coe_polynomialToL2Scalar ℂ hμ (Chebyshev.T ℝ n)] with x hs hp
rw [hs]
exact congrArg (fun z : ℂ ↦ Chebyshev.complexCoefficient (Chebyshev.ComplexCoefficientInput.ofL1 F n) * z) hp
have hsum := eventuallyEq_sum (s := Finset.range (N + 1)) (fun n _ ↦ hterm n)
apply (Lp.coeFn_finsetSum _ _).trans
apply hsum.trans
exact Filter.Eventually.of_forall (fun x ↦ by simp only [Finset.sum_apply])
source
Theorem
3.5.21
Best finite orthonormal approximation
For an orthonormal family \(v_i\) in a real or complex inner-product space and a finite index set \(s\), the sum \(Q_s f=\sum _{i\in s}\langle v_i,f\rangle v_i\) minimises \(\| f-y\| \) over the span of the selected vectors. Its residual is orthogonal to that span. No completeness or Hilbert-basis hypothesis is needed.
Reference: the Hilbert-space best-approximation theorem.
Lean Formalisation
theorem Orthonormal.inner_sub_sum_inner_sum_eq_zero.{u_1, u_2, u_3} {𝕂 : Type u_1} {E : Type u_2} {ι : Type u_3} [RCLike 𝕂]
[NormedAddCommGroup E] [InnerProductSpace 𝕂 E] {v : ι → E} (hv : Orthonormal 𝕂 v) (s : Finset ι) (x : E) (c : ι → 𝕂) :
inner 𝕂 (x - ∑ i ∈ s, inner 𝕂 (v i) x • v i) (∑ i ∈ s, c i • v i) = 0
Lean proof
/-- The residual of a finite orthonormal expansion is orthogonal to every
linear combination of the selected vectors. -/
theorem Orthonormal.inner_sub_sum_inner_sum_eq_zero {v : ι → E}
(hv : Orthonormal 𝕂 v) (s : Finset ι) (x : E) (c : ι → 𝕂) :
inner 𝕂 (x - ∑ i ∈ s, inner 𝕂 (v i) x • v i) (∑ i ∈ s, c i • v i) = 0 := by
rw [inner_sum]
apply Finset.sum_eq_zero
intro i hi
rw [inner_smul_right]
have h : inner 𝕂 (v i) (x - ∑ j ∈ s, inner 𝕂 (v j) x • v j) = 0 := by
rw [inner_sub_right, hv.inner_right_sum _ hi, sub_self]
rw [inner_eq_zero_symm.mp h, mul_zero]
source
3 related Lean declarations
theorem Orthonormal.norm_sub_sum_inner_le.{u_1, u_2, u_3} {𝕂 : Type u_1} {E : Type u_2} {ι : Type u_3} [RCLike 𝕂]
[NormedAddCommGroup E] [InnerProductSpace 𝕂 E] {v : ι → E} (hv : Orthonormal 𝕂 v) (s : Finset ι) (x : E) (c : ι → 𝕂) :
‖x - ∑ i ∈ s, inner 𝕂 (v i) x • v i‖ ≤ ‖x - ∑ i ∈ s, c i • v i‖
Lean proof
/-- Orthogonal coefficients minimise the error among all combinations of a
fixed finite orthonormal family (Hilbert-space best approximation). -/
theorem Orthonormal.norm_sub_sum_inner_le {v : ι → E} (hv : Orthonormal 𝕂 v)
(s : Finset ι) (x : E) (c : ι → 𝕂) :
‖x - ∑ i ∈ s, inner 𝕂 (v i) x • v i‖ ≤ ‖x - ∑ i ∈ s, c i • v i‖ := by
let a := ∑ i ∈ s, inner 𝕂 (v i) x • v i
let b := ∑ i ∈ s, c i • v i
have ho : inner 𝕂 (x - a) (a - b) = 0 := by
rw [inner_sub_right, hv.inner_sub_sum_inner_sum_eq_zero s x,
hv.inner_sub_sum_inner_sum_eq_zero s x, sub_self]
have hp := norm_add_sq_eq_norm_sq_add_norm_sq_of_inner_eq_zero (x - a) (a - b) ho
rw [sub_add_sub_cancel] at hp
change ‖x - a‖ ≤ ‖x - b‖
nlinarith [norm_nonneg (x - a), norm_nonneg (x - b), sq_nonneg ‖a - b‖]
source
theorem Orthonormal.norm_sub_sum_inner_le_norm.{u_1, u_2, u_3} {𝕂 : Type u_1} {E : Type u_2} {ι : Type u_3} [RCLike 𝕂]
[NormedAddCommGroup E] [InnerProductSpace 𝕂 E] {v : ι → E} (hv : Orthonormal 𝕂 v) (s : Finset ι) (x : E) :
‖x - ∑ i ∈ s, inner 𝕂 (v i) x • v i‖ ≤ ‖x‖
Lean proof
/-- A finite orthogonal projection cannot increase the residual norm. -/
theorem Orthonormal.norm_sub_sum_inner_le_norm {v : ι → E} (hv : Orthonormal 𝕂 v)
(s : Finset ι) (x : E) :
‖x - ∑ i ∈ s, inner 𝕂 (v i) x • v i‖ ≤ ‖x‖ := by
simpa using hv.norm_sub_sum_inner_le s x (fun _ ↦ (0 : 𝕂))
source
theorem Orthonormal.norm_sub_sum_inner_le_of_mem_span.{u_1, u_2, u_3} {𝕂 : Type u_1} {E : Type u_2} {ι : Type u_3} [RCLike 𝕂]
[NormedAddCommGroup E] [InnerProductSpace 𝕂 E] {v : ι → E} (hv : Orthonormal 𝕂 v) (s : Finset ι) (x y : E)
(hy : y ∈ Submodule.span 𝕂 (v '' ↑s)) : ‖x - ∑ i ∈ s, inner 𝕂 (v i) x • v i‖ ≤ ‖x - y‖
Lean proof
/-- Best approximation holds for every vector in the selected span, without
choosing coordinates for the competitor. -/
theorem Orthonormal.norm_sub_sum_inner_le_of_mem_span {v : ι → E}
(hv : Orthonormal 𝕂 v) (s : Finset ι) (x y : E)
(hy : y ∈ Submodule.span 𝕂 (v '' (s : Set ι))) :
‖x - ∑ i ∈ s, inner 𝕂 (v i) x • v i‖ ≤ ‖x - y‖ := by
let a := ∑ i ∈ s, inner 𝕂 (v i) x • v i
have ho : inner 𝕂 (x - a) y = 0 := by
induction hy using Submodule.span_induction with
| mem z hz =>
obtain ⟨i, hi, rfl⟩ := hz
apply inner_eq_zero_symm.mp
rw [inner_sub_right, hv.inner_right_sum _ hi, sub_self]
| zero => simp
| add u w _ _ hu hw => rw [inner_add_right, hu, hw, add_zero]
| smul c u _ hu => rw [inner_smul_right, hu, mul_zero]
have ha : inner 𝕂 (x - a) (a - y) = 0 := by
rw [inner_sub_right, hv.inner_sub_sum_inner_sum_eq_zero s x, ho, sub_self]
have hp := norm_add_sq_eq_norm_sq_add_norm_sq_of_inner_eq_zero (x - a) (a - y) ha
rw [sub_add_sub_cancel] at hp
change ‖x - a‖ ≤ ‖x - y‖
nlinarith [norm_nonneg (x - a), norm_nonneg (x - y), sq_nonneg ‖a - y‖]
source
Theorem
3.5.22
Real analytic polynomial competitors
If \(\rho {\gt}1\) and \(F\) is analytic and bounded in norm by \(M\) in the open ellipse \(E_\rho \), there is a real polynomial \(p_N\) of degree at most \(N\) satisfying
\[ |\operatorname {Re}F(x)-p_N(x)|\le \frac{2M}{\rho ^N(\rho -1)} \qquad (-1\le x\le 1). \]
No boundary regularity is needed.
Reference: [ATAP , Theorem 8.2] .
Lean Formalisation
theorem Polynomial.Chebyshev.exists_real_polynomial_approximation_of_analytic {f : ℂ → ℂ} {ρ M : ℝ} (hρ : 1 < ρ)
(hf : AnalyticOnNhd ℂ f (Complex.bernsteinEllipse ⟨ρ, hρ⟩)) (hb : ∀ z ∈ Complex.bernsteinEllipse ⟨ρ, hρ⟩, ‖f z‖ ≤ M)
(N : ℕ) : ∃ p, p.degree ≤ ↑N ∧ ∀ x ∈ Set.Icc (-1) 1, ‖(f ↑x).re - Polynomial.eval x p‖ ≤ 2 * M / (ρ ^ N * (ρ - 1))
Lean proof
/-- A real polynomial competitor for the real part of an analytic function,
with the usual geometric error bound and no boundary regularity hypothesis. -/
theorem exists_real_polynomial_approximation_of_analytic {f : ℂ → ℂ} {ρ M : ℝ}
(hρ : 1 < ρ) (hf : AnalyticOnNhd ℂ f (bernsteinEllipse ⟨ρ, hρ⟩))
(hb : ∀ z ∈ bernsteinEllipse ⟨ρ, hρ⟩, ‖f z‖ ≤ M) (N : ℕ) :
∃ p : ℝ[X], p.degree ≤ N ∧ ∀ x ∈ Icc (-1 : ℝ) 1,
‖(f x).re - p.eval x‖ ≤ 2 * M / (ρ ^ N * (ρ - 1)) := by
let c := fun n ↦ (complexCoefficient (ComplexCoefficientInput.ofContinuousOn (fun t : ℝ ↦ f t) (continuousOn_real_of_analytic hρ hf) n))
let p : ℝ[X] := ∑ n ∈ Finset.range (N + 1), (c n).re • T ℝ n
refine ⟨p, ?_, ?_⟩
· apply (degree_sum_le _ _).trans
apply Finset.sup_le
intro n hn
apply (degree_smul_le _ _).trans
simpa only [degree_T, Int.natAbs_natCast, Nat.cast_le] using
(Nat.lt_succ_iff.mp (Finset.mem_range.mp hn))
· intro x hx
have he : (f x).re - p.eval x =
(f x - ∑ n ∈ Finset.range (N + 1), c n * (((T ℝ n).eval x : ℝ) : ℂ)).re := by
simp [p, eval_finsetSum, mul_re]
rw [he, Real.norm_eq_abs]
exact (abs_re_le_norm _).trans (norm_sub_sum_complexCoefficient_le_of_analytic hρ hf hb hx N)
source
Theorem
3.5.23
Finite projection and reproduction
Under finite moments, positive definiteness, and orthogonality, the polynomial map into L2 is injective, \(\deg S_Nf\le N\), and \(S_N\) reproduces every polynomial of degree at most \(N\). It respects subtraction and has weighted L2 norm at most one. These statements impose no support or density hypothesis.
Lean Formalisation
theorem Polynomial.polynomialToL2_injective {μ : MeasureTheory.Measure ℝ} (hμ : Polynomial.HasFiniteMoments μ)
(hpos : Polynomial.HasPositiveDefiniteIntegral μ) : Function.Injective ⇑(Polynomial.polynomialToL2 hμ)
Lean proof
/-- Positive definiteness makes polynomial evaluation into L² injective. -/
theorem polynomialToL2_injective (hpos : HasPositiveDefiniteIntegral μ) :
Function.Injective (polynomialToL2 hμ) := by
have hz (p : ℝ[X]) (hp : polynomialToL2 hμ p = 0) : p = 0 := by
by_contra hn
have h := hpos p hn
have he := inner_polynomialToL2 hμ p p
rw [hp, inner_zero_left] at he
have he' : (∫ x, p.eval x ^ 2 ∂μ) = 0 := by
simpa only [pow_two] using he.symm
rw [he'] at h
exact (lt_irrefl 0) h
intro p q he
exact sub_eq_zero.mp (hz (p - q) (by rw [map_sub, he, sub_self]))
source
5 related Lean declarations
theorem Polynomial.Sequence.degree_partialSum_le {μ : MeasureTheory.Measure ℝ} (P : Polynomial.Sequence ℝ) {N : ℕ}
(f : Polynomial.IntegralCoefficientFamilyInput ℝ μ (↑P) N) : (P.partialSum μ f).degree ≤ ↑N
Lean proof
/-- The partial-sum polynomial has degree at most its truncation index. -/
theorem degree_partialSum_le {N : ℕ} (f : IntegralCoefficientFamilyInput ℝ μ P N) :
(P.partialSum μ f).degree ≤ N := by
apply (degree_sum_le _ _).trans
apply Finset.sup_le
intro i hi
exact (degree_smul_le _ _).trans (by simpa only [P.degree_eq, Nat.cast_le] using
(Nat.lt_succ_iff.mp i.isLt))
source
theorem Polynomial.Sequence.polynomialToL2_partialSum {μ : MeasureTheory.Measure ℝ} (hμ : Polynomial.HasFiniteMoments μ)
{P : Polynomial.Sequence ℝ} (hpos : Polynomial.HasPositiveDefiniteIntegral μ) (f : ↥(MeasureTheory.Lp ℝ 2 μ))
(N : ℕ) :
(Polynomial.polynomialToL2 hμ) (P.partialSum μ (Polynomial.IntegralCoefficientFamilyInput.ofL2 hμ hpos P f N)) =
∑ i ∈ Finset.range (N + 1), inner ℝ (P.normalizedToL2 hμ ⟨i, ⋯⟩) f • P.normalizedToL2 hμ ⟨i, ⋯⟩
Lean proof
/-- Polynomial partial sums represent finite orthonormal projections in L². -/
theorem polynomialToL2_partialSum (hpos : HasPositiveDefiniteIntegral μ)
(f : Lp ℝ 2 μ) (N : ℕ) :
polynomialToL2 hμ (P.partialSum μ (IntegralCoefficientFamilyInput.ofL2 hμ hpos P f N)) =
∑ i ∈ Finset.range (N + 1), inner ℝ (P.normalizedToL2 hμ ⟨i, squaredNorm_pos hpos P i⟩) f •
P.normalizedToL2 hμ ⟨i, squaredNorm_pos hpos P i⟩ := by
simp only [partialSum_ofL2, map_sum, map_smul, inner_normalizedToL2_smul hμ hpos]
source
theorem Polynomial.Sequence.IsOrthogonal.partialSum_polynomialToL2 {μ : MeasureTheory.Measure ℝ}
(hμ : Polynomial.HasFiniteMoments μ) {P : Polynomial.Sequence ℝ} (hP : P.IsOrthogonal μ)
(hpos : Polynomial.HasPositiveDefiniteIntegral μ) (N : ℕ) (p : Polynomial ℝ) (hp : p.degree ≤ ↑N) :
P.partialSum μ (Polynomial.IntegralCoefficientFamilyInput.ofL2 hμ hpos P ((Polynomial.polynomialToL2 hμ) p) N) = p
Lean proof
/-- Projection reproduces every polynomial of degree at most N. -/
theorem IsOrthogonal.partialSum_polynomialToL2 (hP : P.IsOrthogonal μ)
(hpos : HasPositiveDefiniteIntegral μ) (N : ℕ) (p : ℝ[X]) (hp : p.degree ≤ N) :
P.partialSum μ (IntegralCoefficientFamilyInput.ofL2 hμ hpos P (polynomialToL2 hμ p) N) = p := by
apply polynomialToL2_injective hμ hpos
rw [polynomialToL2_partialSum hμ hpos]
exact (hP.orthonormal_normalizedToL2 hμ hpos).sum_inner_smul_eq_of_mem_span _ _
(polynomialToL2_mem_span_normalizedToL2 hμ hpos N p hp)
source
theorem Polynomial.Sequence.partialSum_sub {μ : MeasureTheory.Measure ℝ} (hμ : Polynomial.HasFiniteMoments μ)
{P : Polynomial.Sequence ℝ} (hpos : Polynomial.HasPositiveDefiniteIntegral μ) (f g : ↥(MeasureTheory.Lp ℝ 2 μ))
(N : ℕ) :
P.partialSum μ (Polynomial.IntegralCoefficientFamilyInput.ofL2 hμ hpos P (f - g) N) =
P.partialSum μ (Polynomial.IntegralCoefficientFamilyInput.ofL2 hμ hpos P f N) -
P.partialSum μ (Polynomial.IntegralCoefficientFamilyInput.ofL2 hμ hpos P g N)
Lean proof
/-- Subtracting data subtracts their projection polynomials. -/
theorem partialSum_sub (hpos : HasPositiveDefiniteIntegral μ)
(f g : Lp ℝ 2 μ) (N : ℕ) :
P.partialSum μ (IntegralCoefficientFamilyInput.ofL2 hμ hpos P (f - g : Lp ℝ 2 μ) N) = P.partialSum μ (IntegralCoefficientFamilyInput.ofL2 hμ hpos P f N) - P.partialSum μ (IntegralCoefficientFamilyInput.ofL2 hμ hpos P g N) := by
apply polynomialToL2_injective hμ hpos
simp only [map_sub, polynomialToL2_partialSum hμ hpos, inner_sub_right,
sub_smul, Finset.sum_sub_distrib]
source
theorem Polynomial.Sequence.IsOrthogonal.norm_polynomialToL2_partialSum_le {μ : MeasureTheory.Measure ℝ}
(hμ : Polynomial.HasFiniteMoments μ) {P : Polynomial.Sequence ℝ} (hP : P.IsOrthogonal μ)
(hpos : Polynomial.HasPositiveDefiniteIntegral μ) (f : ↥(MeasureTheory.Lp ℝ 2 μ)) (N : ℕ) :
‖(Polynomial.polynomialToL2 hμ) (P.partialSum μ (Polynomial.IntegralCoefficientFamilyInput.ofL2 hμ hpos P f N))‖ ≤ ‖f‖
Lean proof
/-- Weighted polynomial projection is a contraction in L². -/
theorem IsOrthogonal.norm_polynomialToL2_partialSum_le (hP : P.IsOrthogonal μ)
(hpos : HasPositiveDefiniteIntegral μ) (f : Lp ℝ 2 μ) (N : ℕ) :
‖polynomialToL2 hμ (P.partialSum μ (IntegralCoefficientFamilyInput.ofL2 hμ hpos P f N))‖ ≤ ‖f‖ := by
rw [polynomialToL2_partialSum hμ hpos]
exact (hP.orthonormal_normalizedToL2 hμ hpos).norm_sum_inner_smul_le _ _
source
Theorem
3.5.24
Analytic projection error with kernel factor
Let \(P\) be orthogonal for a measure \(\mu \) with finite polynomial moments and positive definite polynomial pairing, supported almost everywhere on \([-1,1]\). Let \(\rho {\gt}1\), let \(F\) be analytic on \(E_\rho \) with \(|F|\le M\) there, and let \(f\in L^2(\mu ;\mathbb {R})\) agree almost everywhere with \(\operatorname {Re}F\). Then for every \(x\in [-1,1]\),
\[ |\operatorname {Re}F(x)-(S_Nf)(x)|\le (1+\sqrt{K_N(x,x)}\sqrt{\mu (\mathbb {R})}) \frac{2M}{\rho ^N(\rho -1)}. \]
Lean Formalisation
theorem Polynomial.Sequence.IsOrthogonal.norm_sub_eval_partialSum_le_kernel_of_analytic {μ : MeasureTheory.Measure ℝ}
{P : Polynomial.Sequence ℝ} (hμ : Polynomial.HasFiniteMoments μ) (hP : P.IsOrthogonal μ)
(hpos : Polynomial.HasPositiveDefiniteIntegral μ) (hsupp : ∀ᵐ (x : ℝ) ∂μ, x ∈ Set.Icc (-1) 1) {F : ℂ → ℂ} {ρ M : ℝ}
(hρ : 1 < ρ) (hF : AnalyticOnNhd ℂ F (Complex.bernsteinEllipse ⟨ρ, hρ⟩))
(hM : ∀ z ∈ Complex.bernsteinEllipse ⟨ρ, hρ⟩, ‖F z‖ ≤ M) (f : ↥(MeasureTheory.Lp ℝ 2 μ))
(hf : ∀ᵐ (x : ℝ) ∂μ, ↑↑f x = (F ↑x).re) (N : ℕ) {x : ℝ} (hx : x ∈ Set.Icc (-1) 1) :
‖(F ↑x).re - Polynomial.eval x (P.partialSum μ (Polynomial.IntegralCoefficientFamilyInput.ofL2 hμ hpos P f N))‖ ≤
(1 + √(P.kernel μ N x x ⋯) * √(μ.real Set.univ)) * (2 * M / (ρ ^ N * (ρ - 1)))
Lean proof
/-- The analytic competitor also gives a pointwise bound for the actual
orthogonal partial sum, with its Christoffel kernel factor displayed. -/
theorem IsOrthogonal.norm_sub_eval_partialSum_le_kernel_of_analytic
(hP : P.IsOrthogonal μ) (hpos : HasPositiveDefiniteIntegral μ)
(hsupp : ∀ᵐ x ∂μ, x ∈ Icc (-1 : ℝ) 1)
{F : ℂ → ℂ} {ρ M : ℝ} (hρ : 1 < ρ)
(hF : AnalyticOnNhd ℂ F (bernsteinEllipse ⟨ρ, hρ⟩))
(hM : ∀ z ∈ bernsteinEllipse ⟨ρ, hρ⟩, ‖F z‖ ≤ M)
(f : Lp ℝ 2 μ) (hf : ∀ᵐ x ∂μ, f x = (F x).re)
(N : ℕ) {x : ℝ} (hx : x ∈ Icc (-1 : ℝ) 1) :
‖(F x).re - (P.partialSum μ (IntegralCoefficientFamilyInput.ofL2 hμ hpos P f N)).eval x‖ ≤
(1 + √(P.kernel μ N x x (Polynomial.Sequence.KernelInput.of _ _ _)) * √(μ.real univ)) *
(2 * M / (ρ ^ N * (ρ - 1))) := by
obtain ⟨p, hp, he⟩ := Chebyshev.exists_real_polynomial_approximation_of_analytic hρ hF hM N
have hM0 : 0 ≤ M := (norm_nonneg (F x)).trans
(hM x (ofReal_mem_bernsteinEllipse hρ hx))
apply hP.norm_sub_eval_partialSum_le_kernel hμ hpos f N p hp (by positivity) _ x (F x).re
(he x hx)
filter_upwards [hf, hsupp] with t hft ht
rw [hft]
exact he t ht
source
A growth estimate on the kernel is still needed to infer uniform convergence.
Theorem
3.5.25
Elementary Gamma and rising-factorial growth bounds
For \(a{\gt}0\), \(\Gamma (a+n)=(a)_n\Gamma (a)\). If \(a\le k+1\) and \(n+a\ge 2\), \(\Gamma (n+a)\le n!(n+k)^k\). If \(n\ge 1\) and \(a\ge 1\), \(\Gamma (n+a)\ge n!\). For \(a{\gt}0\) and \(a\le k+1\), all \(n\ge 0\) satisfy
\[ \frac{(a)_n}{n!}\le \left(1+|a|+\frac{(k+1)^k}{\Gamma (a)}\right)(n+1)^k. \]
These bounds are nonsharp.
Reference: [DLMF , 5.5.1, 5.6] .
Lean Formalisation
theorem Real.Gamma_add_nat_eq_ascPochhammer_mul {a : ℝ} (ha : 0 < a) (n : ℕ) :
Real.GammaOn (Real.GammaPoint.ofPos (a + ↑n) ⋯) =
Polynomial.eval a (ascPochhammer ℝ n) * Real.GammaOn (Real.GammaPoint.ofPos a ha)
Lean proof
/-- Gamma at a positive argument shifted by a natural number, within its domain. -/
theorem Gamma_add_nat_eq_ascPochhammer_mul {a : ℝ} (ha : 0 < a) (n : ℕ) :
GammaOn (GammaPoint.ofPos (a + n) (by positivity)) =
(ascPochhammer ℝ n).eval a * GammaOn (GammaPoint.ofPos a ha) :=
Gamma_add_nat_eq_ascPochhammer_mul_raw ha n
source
3 related Lean declarations
theorem Real.Gamma_nat_add_le_factorial_mul_pow (n k : ℕ) {a : ℝ} (ha : a ≤ ↑k + 1) (hna : 2 ≤ ↑n + a) :
Real.GammaOn (Real.GammaPoint.ofPos (↑n + a) ⋯) ≤ ↑n.factorial * (↑n + ↑k) ^ k
Lean proof
/-- A factorial upper bound for a genuine Gamma value. -/
theorem Gamma_nat_add_le_factorial_mul_pow (n k : ℕ) {a : ℝ}
(ha : a ≤ k + 1) (hna : 2 ≤ (n : ℝ) + a) :
GammaOn (GammaPoint.ofPos ((n : ℝ) + a) (by linarith)) ≤
n.factorial * ((n : ℝ) + k) ^ k :=
Gamma_nat_add_le_factorial_mul_pow_raw n k ha hna
source
theorem Real.factorial_le_Gamma_nat_add {n : ℕ} (hn : 1 ≤ n) {a : ℝ} (ha : 1 ≤ a) :
↑n.factorial ≤ Real.GammaOn (Real.GammaPoint.ofPos (↑n + a) ⋯)
Lean proof
/-- A factorial lower bound for a genuine Gamma value. -/
theorem factorial_le_Gamma_nat_add {n : ℕ} (hn : 1 ≤ n) {a : ℝ} (ha : 1 ≤ a) :
(n.factorial : ℝ) ≤ GammaOn (GammaPoint.ofPos ((n : ℝ) + a)
(by have := Nat.cast_nonneg (α := ℝ) n; linarith)) :=
factorial_le_Gamma_nat_add_raw hn ha
source
theorem Real.ascPochhammer_div_factorial_le_polynomial {a : ℝ} (ha : 0 < a) (k : ℕ) (hk : a ≤ ↑k + 1) (n : ℕ) :
Polynomial.eval a (ascPochhammer ℝ n) / ↑n.factorial ≤
(1 + |a| + (↑k + 1) ^ k / Real.GammaOn (Real.GammaPoint.ofPos a ha)) * (↑n + 1) ^ k
Lean proof
/-- A positive rising-factorial ratio has polynomial growth with a classical constant. -/
theorem ascPochhammer_div_factorial_le_polynomial {a : ℝ} (ha : 0 < a)
(k : ℕ) (hk : a ≤ k + 1) (n : ℕ) :
(ascPochhammer ℝ n).eval a / (n.factorial : ℝ) ≤
(1 + |a| + ((k : ℝ) + 1) ^ k / GammaOn (GammaPoint.ofPos a ha)) *
((n : ℝ) + 1) ^ k :=
ascPochhammer_div_factorial_le_polynomial_raw ha k hk n
source
Theorem
3.5.26
Jacobi endpoint control from the differential equation
For \(p=P_n^{(\alpha ,\beta )}\) and \(c=n(n+\alpha +\beta +1)\), the energy \(E(x)=cp(x)^2+(1-x^2)p'(x)^2\) satisfies \(E'(x)=2[\alpha -\beta +(\alpha +\beta +1)x]p'(x)^2\). If \(\alpha +\beta +1\ge 0\), then \(|p(x)|\le \max (|p(-1)|,|p(1)|)\) on \([-1,1]\). For every \(\alpha ,\beta {\gt}-1\), parameter raising instead bounds \(|P_{n+1}^{(\alpha ,\beta )}(x)|\) by the sum of the endpoint maxima of \(P_{n+1}^{(\alpha +1,\beta )}\) and \(P_n^{(\alpha +1,\beta )}\). Thus the final estimate covers the whole orthogonality range.
References: [DLMF , Table 18.8.1 and 18.9(ii)] ; cf. [DLMF , 18.14(i)] .
Lean Formalisation
theorem Polynomial.hasDerivAt_jacobiSoninEnergy (α β : ℝ) (n : ℕ) (x : ℝ) :
HasDerivAt
(fun t =>
↑n * (↑n + α + β + 1) * Polynomial.eval t (Polynomial.jacobi α β n) ^ 2 +
(1 - t ^ 2) * Polynomial.eval t (Polynomial.derivative (Polynomial.jacobi α β n)) ^ 2)
(2 * (α - β + (α + β + 1) * x) * Polynomial.eval x (Polynomial.derivative (Polynomial.jacobi α β n)) ^ 2) x
Lean proof
/-- The derivative of the Jacobi Sonin energy, with no division by the eigenvalue. -/
theorem hasDerivAt_jacobiSoninEnergy (α β : ℝ) (n : ℕ) (x : ℝ) :
HasDerivAt (fun t : ℝ ↦ (n : ℝ) * (n + α + β + 1) * (jacobi α β n).eval t ^ 2 +
(1 - t ^ 2) * (jacobi α β n).derivative.eval t ^ 2)
(2 * (α - β + (α + β + 1) * x) * (jacobi α β n).derivative.eval x ^ 2) x := by
let p := jacobi α β n
have he := congrArg (fun q : ℝ[X] ↦ q.eval x) (jacobi_differentialEquation α β n)
simp only [eval_add, eval_mul, eval_sub, eval_one, eval_pow, eval_X, eval_C, eval_zero] at he
have hd := (((p.hasDerivAt x).pow 2).const_mul ((n : ℝ) * (n + α + β + 1))).add
(((hasDerivAt_const x (1 : ℝ)).sub ((hasDerivAt_id x).pow 2)).mul
((p.derivative.hasDerivAt x).pow 2))
convert hd using 1
· rfl
· dsimp [p]
norm_num only [Nat.cast_ofNat, Nat.reduceSub, pow_one]
linear_combination (-2 * ((jacobi α β n).derivative.eval x)) * he
source
2 related Lean declarations
theorem Polynomial.abs_eval_jacobi_le_max_endpoints {α β : ℝ} (hs : 0 ≤ α + β + 1) (n : ℕ) {x : ℝ} (hx : x ∈ Set.Icc (-1) 1) :
|Polynomial.eval x (Polynomial.jacobi α β n)| ≤
max |Polynomial.eval (-1) (Polynomial.jacobi α β n)| |Polynomial.eval 1 (Polynomial.jacobi α β n)|
Lean proof
/-- When alpha+beta >= -1, the maximum absolute value on [-1,1] occurs at
an endpoint. This follows directly from the differential equation's energy. -/
theorem abs_eval_jacobi_le_max_endpoints {α β : ℝ} (hs : 0 ≤ α + β + 1)
(n : ℕ) {x : ℝ} (hx : x ∈ Icc (-1 : ℝ) 1) :
|(jacobi α β n).eval x| ≤
max |(jacobi α β n).eval (-1)| |(jacobi α β n).eval 1| := by
by_cases hn : n = 0
· subst n
simp
have hn0 : (0 : ℝ) < n := Nat.cast_pos.mpr (Nat.pos_of_ne_zero hn)
let c : ℝ := (n : ℝ) * (n + α + β + 1)
have hc : 0 < c := mul_pos hn0 (by linarith)
let E := fun t : ℝ ↦ c * (jacobi α β n).eval t ^ 2 +
(1 - t ^ 2) * (jacobi α β n).derivative.eval t ^ 2
have hd (t : ℝ) : HasDerivAt E
(2 * (α - β + (α + β + 1) * t) * (jacobi α β n).derivative.eval t ^ 2) t :=
hasDerivAt_jacobiSoninEnergy α β n t
have hcont : Continuous E := continuous_iff_continuousAt.mpr (fun t ↦ (hd t).continuousAt)
have hlow : c * (jacobi α β n).eval x ^ 2 ≤ E x := by
dsimp [E]
have hx2 : x ^ 2 ≤ 1 := by nlinarith [hx.1, hx.2]
exact le_add_of_nonneg_right (mul_nonneg (by linarith) (sq_nonneg _))
have hupper : E x ≤ max (c * (jacobi α β n).eval (-1) ^ 2)
(c * (jacobi α β n).eval 1 ^ 2) := by
by_cases hsign : 0 ≤ α - β + (α + β + 1) * x
· have hm : MonotoneOn E (Icc x 1) := by
apply monotoneOn_of_hasDerivWithinAt_nonneg (convex_Icc x 1) hcont.continuousOn
(fun t _ ↦ (hd t).hasDerivWithinAt)
intro t ht
have ht' := interior_subset ht
have hst : 0 ≤ α - β + (α + β + 1) * t := by
nlinarith [mul_nonneg hs (sub_nonneg.mpr ht'.1)]
positivity
have h := hm (left_mem_Icc.mpr hx.2) (right_mem_Icc.mpr hx.2) hx.2
apply h.trans
simp only [E, one_pow, sub_self, zero_mul, add_zero]
exact le_max_right _ _
· have hm : AntitoneOn E (Icc (-1) x) := by
apply antitoneOn_of_hasDerivWithinAt_nonpos (convex_Icc (-1) x) hcont.continuousOn
(fun t _ ↦ (hd t).hasDerivWithinAt)
intro t ht
have ht' := interior_subset ht
have hst : α - β + (α + β + 1) * t ≤ 0 := by
nlinarith [mul_nonneg hs (sub_nonneg.mpr ht'.2)]
exact mul_nonpos_of_nonpos_of_nonneg (mul_nonpos_of_nonneg_of_nonpos (by norm_num) hst)
(sq_nonneg _)
have h := hm (left_mem_Icc.mpr hx.1) (right_mem_Icc.mpr hx.1) hx.1
apply h.trans
norm_num only [E, neg_one_sq, sub_self, zero_mul, add_zero]
exact le_max_left _ _
have hsq : (jacobi α β n).eval x ^ 2 ≤
max ((jacobi α β n).eval (-1) ^ 2) ((jacobi α β n).eval 1 ^ 2) := by
rw [← mul_max_of_nonneg _ _ hc.le] at hupper
exact (mul_le_mul_iff_right₀ hc).mp (hlow.trans hupper)
rcases le_total ((jacobi α β n).eval (-1) ^ 2) ((jacobi α β n).eval 1 ^ 2) with h | h
· rw [max_eq_right h] at hsq
apply (show |(jacobi α β n).eval x| ≤ |(jacobi α β n).eval 1| by
nlinarith [sq_abs ((jacobi α β n).eval x), sq_abs ((jacobi α β n).eval 1),
abs_nonneg ((jacobi α β n).eval x), abs_nonneg ((jacobi α β n).eval 1)]).trans
exact le_max_right _ _
· rw [max_eq_left h] at hsq
apply (show |(jacobi α β n).eval x| ≤ |(jacobi α β n).eval (-1)| by
nlinarith [sq_abs ((jacobi α β n).eval x), sq_abs ((jacobi α β n).eval (-1)),
abs_nonneg ((jacobi α β n).eval x), abs_nonneg ((jacobi α β n).eval (-1))]).trans
exact le_max_left _ _
source
theorem Polynomial.abs_eval_jacobi_succ_le_shifted_endpoints {α β : ℝ} (hα : -1 < α) (hβ : -1 < β) (n : ℕ) {x : ℝ}
(hx : x ∈ Set.Icc (-1) 1) :
|Polynomial.eval x (Polynomial.jacobi α β (n + 1))| ≤
max |Polynomial.eval (-1) (Polynomial.jacobi (α + 1) β (n + 1))|
|Polynomial.eval 1 (Polynomial.jacobi (α + 1) β (n + 1))| +
max |Polynomial.eval (-1) (Polynomial.jacobi (α + 1) β n)| |Polynomial.eval 1 (Polynomial.jacobi (α + 1) β n)|
Lean proof
/-- Throughout the full orthogonality range, one parameter shift bounds the
polynomial by endpoint values of two members of the shifted family. -/
theorem abs_eval_jacobi_succ_le_shifted_endpoints {α β : ℝ}
(hα : -1 < α) (hβ : -1 < β) (n : ℕ) {x : ℝ} (hx : x ∈ Icc (-1 : ℝ) 1) :
|(jacobi α β (n + 1)).eval x| ≤
max |(jacobi (α + 1) β (n + 1)).eval (-1)| |(jacobi (α + 1) β (n + 1)).eval 1| +
max |(jacobi (α + 1) β n).eval (-1)| |(jacobi (α + 1) β n).eval 1| := by
let A := max |(jacobi (α + 1) β (n + 1)).eval (-1)| |(jacobi (α + 1) β (n + 1)).eval 1|
let B := max |(jacobi (α + 1) β n).eval (-1)| |(jacobi (α + 1) β n).eval 1|
have hA : 0 ≤ A := (abs_nonneg _).trans (le_max_left _ _)
have hB : 0 ≤ B := (abs_nonneg _).trans (le_max_left _ _)
have hn : (0 : ℝ) ≤ n := Nat.cast_nonneg n
have hs : 0 ≤ (α + 1) + β + 1 := by linarith
have hq := abs_eval_jacobi_le_max_endpoints hs (n + 1) hx
have hr := abs_eval_jacobi_le_max_endpoints hs n hx
have he := congrArg (fun p : ℝ[X] ↦ p.eval x) (jacobi_raise_alpha α β n)
simp only [eval_mul, eval_C, eval_sub] at he
have hd : 0 < 2 * (n : ℝ) + α + β + 3 := by linarith
have ha : 0 ≤ (n : ℝ) + α + β + 2 := by linarith
have hb : 0 ≤ (n : ℝ) + β + 1 := by linarith
have heabs : (2 * (n : ℝ) + α + β + 3) * |(jacobi α β (n + 1)).eval x| ≤
((n : ℝ) + α + β + 2) * A + ((n : ℝ) + β + 1) * B := by
rw [← abs_of_pos hd, ← abs_mul, he]
apply (abs_sub _ _).trans
rw [abs_mul, abs_mul, abs_of_nonneg ha, abs_of_nonneg hb]
exact add_le_add (mul_le_mul_of_nonneg_left hq ha) (mul_le_mul_of_nonneg_left hr hb)
have hcmp : ((n : ℝ) + α + β + 2) * A + ((n : ℝ) + β + 1) * B ≤
(2 * (n : ℝ) + α + β + 3) * (A + B) := by
nlinarith [mul_nonneg (show 0 ≤ (n : ℝ) + 1 by positivity) hA,
mul_nonneg (show 0 ≤ (n : ℝ) + α + 2 by linarith) hB]
exact (mul_le_mul_iff_right₀ hd).mp (heabs.trans hcmp)
source
Theorem
3.5.27
Global polynomial growth of Jacobi values and reciprocal norms
Let \(\alpha ,\beta {\gt}-1\) and choose an integer \(k\ge \max (\alpha +1,\beta ,\alpha +\beta +1)\). For every \(n\ge 0\) and \(x\in [-1,1]\),
\begin{align*} |P_n^{(\alpha ,\beta )}(x)| & \le [1+2(E_k(\alpha +1)+E_k(\beta ))](n+1)^k,\\ h_n^{-1}& \le B_k(\alpha ,\beta )(n+1)^{k+2}. \end{align*}
The norms and the constants \(E_k\) and \(B_k\) are positive in this range.
Lean Formalisation
theorem Polynomial.abs_eval_jacobi_one_le_polynomial {α : ℝ} (hα : -1 < α) (β : ℝ) (k : ℕ) (hk : α ≤ ↑k) (n : ℕ) :
|Polynomial.eval 1 (Polynomial.jacobi α β n)| ≤ Polynomial.jacobiEndpointBound ⟨α, ⋯⟩ k * (↑n + 1) ^ k
Lean proof
/-- Polynomial growth of the endpoint value, with any integer exponent k ≥ alpha. -/
theorem abs_eval_jacobi_one_le_polynomial {α : ℝ} (hα : -1 < α) (β : ℝ)
(k : ℕ) (hk : α ≤ k) (n : ℕ) :
|(jacobi α β n).eval 1| ≤ jacobiEndpointBound ⟨α, (GammaPoint.ofPos (α + 1) (by linarith)).property⟩ k * ((n : ℝ) + 1) ^ k := by
have hp := ascPochhammer_pos n (α + 1) (by linarith : 0 < α + 1)
rw [eval_jacobi_one]
norm_num only [map_inv₀, map_natCast, Rat.cast_natCast]
rw [abs_of_nonneg (mul_nonneg (inv_nonneg.mpr (Nat.cast_nonneg _)) hp.le)]
simpa only [jacobiEndpointBound, GammaOn, GammaPoint.ofPos, div_eq_mul_inv, mul_comm] using
ascPochhammer_div_factorial_le_polynomial (by linarith : 0 < α + 1) k (by linarith) n
source
6 related Lean declarations
theorem Polynomial.abs_eval_jacobi_neg_one_le_polynomial (α : ℝ) {β : ℝ} (hβ : -1 < β) (k : ℕ) (hk : β ≤ ↑k) (n : ℕ) :
|Polynomial.eval (-1) (Polynomial.jacobi α β n)| ≤ Polynomial.jacobiEndpointBound ⟨β, ⋯⟩ k * (↑n + 1) ^ k
Lean proof
/-- The negative endpoint has the same bound with beta replacing alpha. -/
theorem abs_eval_jacobi_neg_one_le_polynomial (α : ℝ) {β : ℝ} (hβ : -1 < β)
(k : ℕ) (hk : β ≤ k) (n : ℕ) :
|(jacobi α β n).eval (-1)| ≤ jacobiEndpointBound ⟨β, (GammaPoint.ofPos (β + 1) (by linarith)).property⟩ k * ((n : ℝ) + 1) ^ k := by
rw [eval_jacobi_neg_one, abs_mul, abs_pow, abs_neg, abs_one, one_pow, one_mul]
simpa only [eval_jacobi_one] using abs_eval_jacobi_one_le_polynomial hβ α k hk n
source
theorem Polynomial.max_abs_eval_jacobi_endpoints_le_polynomial {α β : ℝ} (hα : -1 < α) (hβ : -1 < β) (k : ℕ) (hkα : α ≤ ↑k)
(hkβ : β ≤ ↑k) (n : ℕ) :
max |Polynomial.eval (-1) (Polynomial.jacobi α β n)| |Polynomial.eval 1 (Polynomial.jacobi α β n)| ≤
(Polynomial.jacobiEndpointBound ⟨α, ⋯⟩ k + Polynomial.jacobiEndpointBound ⟨β, ⋯⟩ k) * (↑n + 1) ^ k
Lean proof
/-- Both endpoint values are bounded by the sum of their growth constants. -/
theorem max_abs_eval_jacobi_endpoints_le_polynomial {α β : ℝ}
(hα : -1 < α) (hβ : -1 < β) (k : ℕ) (hkα : α ≤ k) (hkβ : β ≤ k) (n : ℕ) :
max |(jacobi α β n).eval (-1)| |(jacobi α β n).eval 1| ≤
(jacobiEndpointBound ⟨α, (GammaPoint.ofPos (α + 1) (by linarith)).property⟩ k + jacobiEndpointBound ⟨β, (GammaPoint.ofPos (β + 1) (by linarith)).property⟩ k) * ((n : ℝ) + 1) ^ k := by
apply max_le
· apply (abs_eval_jacobi_neg_one_le_polynomial α hβ k hkβ n).trans
gcongr
exact le_add_of_nonneg_left (jacobiEndpointBound_pos hα k).le
· apply (abs_eval_jacobi_one_le_polynomial hα β k hkα n).trans
gcongr
exact le_add_of_nonneg_right (jacobiEndpointBound_pos hβ k).le
source
theorem Polynomial.abs_eval_jacobi_le_polynomial {α β : ℝ} (hα : -1 < α) (hβ : -1 < β) (k : ℕ) (hkα : α + 1 ≤ ↑k) (hkβ : β ≤ ↑k)
(n : ℕ) {x : ℝ} (hx : x ∈ Set.Icc (-1) 1) :
|Polynomial.eval x (Polynomial.jacobi α β n)| ≤
(1 + 2 * (Polynomial.jacobiEndpointBound ⟨α + 1, ⋯⟩ k + Polynomial.jacobiEndpointBound ⟨β, ⋯⟩ k)) * (↑n + 1) ^ k
Lean proof
/-- A uniform polynomial growth bound on [-1,1], valid for every alpha,beta > -1.
The integer exponent only needs to dominate alpha+1 and beta. -/
theorem abs_eval_jacobi_le_polynomial {α β : ℝ} (hα : -1 < α) (hβ : -1 < β)
(k : ℕ) (hkα : α + 1 ≤ k) (hkβ : β ≤ k) (n : ℕ)
{x : ℝ} (hx : x ∈ Icc (-1 : ℝ) 1) :
|(jacobi α β n).eval x| ≤
(1 + 2 * (jacobiEndpointBound ⟨α + 1, (GammaPoint.ofPos (α + 1 + 1) (by linarith)).property⟩ k + jacobiEndpointBound ⟨β, (GammaPoint.ofPos (β + 1) (by linarith)).property⟩ k)) *
((n : ℝ) + 1) ^ k := by
have hα' : -1 < α + 1 := by linarith
have hC : 0 ≤ jacobiEndpointBound ⟨α + 1, (GammaPoint.ofPos (α + 1 + 1) (by linarith)).property⟩ k + jacobiEndpointBound ⟨β, (GammaPoint.ofPos (β + 1) (by linarith)).property⟩ k :=
add_nonneg (jacobiEndpointBound_pos hα' k).le (jacobiEndpointBound_pos hβ k).le
rcases n with _ | n
· simp only [jacobi_zero, eval_one, abs_one, Nat.cast_zero, zero_add, one_pow, mul_one]
linarith
have h := abs_eval_jacobi_succ_le_shifted_endpoints hα hβ n hx
have h1 := max_abs_eval_jacobi_endpoints_le_polynomial hα' hβ k hkα hkβ (n + 1)
have h0 := max_abs_eval_jacobi_endpoints_le_polynomial hα' hβ k hkα hkβ n
apply (h.trans (add_le_add h1 h0)).trans
have hp : ((n : ℝ) + 1) ^ k ≤ (((n + 1 : ℕ) : ℝ) + 1) ^ k := by
apply pow_le_pow_left₀ (by positivity)
push_cast
linarith
nlinarith [mul_le_mul_of_nonneg_left hp hC,
pow_nonneg (show 0 ≤ (((n + 1 : ℕ) : ℝ) + 1) by positivity) k]
source
theorem Polynomial.inv_integral_sq_jacobi_succ_le {α β : ℝ} (hα : -1 < α) (hβ : -1 < β) (n k : ℕ) (hn : 2 ≤ n)
(hk : α + β + 1 ≤ ↑k) :
(∫ (x : ℝ), Polynomial.eval x (Polynomial.jacobi α β (n + 1)) ^ 2 ∂Polynomial.jacobiMeasure α β)⁻¹ ≤
(2 * ↑n + α + β + 3) * (↑n + 1) * (↑n + ↑k) ^ k / 2 ^ (α + β + 1)
Lean proof
/-- A factorial comparison bound on reciprocal norms, away from the first
three degrees. The small degrees are handled separately in the global bound. -/
theorem inv_integral_sq_jacobi_succ_le {α β : ℝ} (hα : -1 < α) (hβ : -1 < β)
(n k : ℕ) (hn : 2 ≤ n) (hk : α + β + 1 ≤ k) :
(∫ x, (jacobi α β (n + 1)).eval x ^ 2 ∂jacobiMeasure α β)⁻¹ ≤
((2 * (n : ℝ) + α + β + 3) * (n + 1) * ((n : ℝ) + k) ^ k) /
(2 : ℝ) ^ (α + β + 1) := by
have hn' : (2 : ℝ) ≤ n := by exact_mod_cast hn
have hA := factorial_le_Gamma_nat_add (show 1 ≤ n by omega)
(show 1 ≤ α + 2 by linarith)
have hB := factorial_le_Gamma_nat_add (show 1 ≤ n by omega)
(show 1 ≤ β + 2 by linarith)
have hD := Gamma_nat_add_le_factorial_mul_pow n k
(show α + β + 2 ≤ k + 1 by linarith) (by linarith : 2 ≤ (n : ℝ) + (α + β + 2))
simp only [GammaOn, GammaPoint.ofPos] at hA hB hD
have hAg : 0 < Gamma ((n : ℝ) + α + 2) := Gamma_pos_of_pos (by linarith)
have hBg : 0 < Gamma ((n : ℝ) + β + 2) := Gamma_pos_of_pos (by linarith)
have hR : 0 < (2 : ℝ) ^ (α + β + 1) := Real.rpow_pos_of_pos (by norm_num) _
have hd : 0 ≤ 2 * (n : ℝ) + α + β + 3 := by linarith
have hF : (0 : ℝ) ≤ n.factorial := Nat.cast_nonneg _
have hprod : Gamma ((n : ℝ) + α + β + 2) * n.factorial ≤
((n : ℝ) + k) ^ k * (Gamma ((n : ℝ) + α + 2) * Gamma ((n : ℝ) + β + 2)) := by
calc
_ ≤ ((n.factorial : ℝ) * ((n : ℝ) + k) ^ k) * n.factorial := by
apply mul_le_mul_of_nonneg_right _ hF
simpa only [add_assoc] using hD
_ = ((n : ℝ) + k) ^ k * ((n.factorial : ℝ) * n.factorial) := by ring
_ ≤ _ := by
apply mul_le_mul_of_nonneg_left _ (by positivity)
apply mul_le_mul _ _ hF hAg.le
· simpa only [add_assoc] using hA
· simpa only [add_assoc] using hB
rw [integral_sq_jacobi_succ hα hβ, inv_div, Nat.factorial_succ,
Nat.cast_mul, Nat.cast_add, Nat.cast_one]
simp only [GammaOn, GammaPoint.ofPos]
apply (div_le_div_iff₀ (mul_pos (mul_pos hR hAg) hBg) hR).mpr
convert mul_le_mul_of_nonneg_left hprod
(mul_nonneg (mul_nonneg hd (show 0 ≤ (n : ℝ) + 1 by positivity)) hR.le) using 1 <;> ring
source
theorem Polynomial.inv_integral_sq_jacobi_succ_le_polynomial {α β : ℝ} (hα : -1 < α) (hβ : -1 < β) (n k : ℕ) (hn : 2 ≤ n)
(hk : α + β + 1 ≤ ↑k) :
(∫ (x : ℝ), Polynomial.eval x (Polynomial.jacobi α β (n + 1)) ^ 2 ∂Polynomial.jacobiMeasure α β)⁻¹ ≤
(2 + |α + β + 3|) * (↑k + 1) ^ k / 2 ^ (α + β + 1) * (↑n + 1) ^ (k + 2)
Lean proof
/-- An explicit fixed-power bound for reciprocal norms in degrees at least three. -/
theorem inv_integral_sq_jacobi_succ_le_polynomial {α β : ℝ}
(hα : -1 < α) (hβ : -1 < β) (n k : ℕ) (hn : 2 ≤ n)
(hk : α + β + 1 ≤ k) :
(∫ x, (jacobi α β (n + 1)).eval x ^ 2 ∂jacobiMeasure α β)⁻¹ ≤
((2 + |α + β + 3|) * ((k : ℝ) + 1) ^ k / (2 : ℝ) ^ (α + β + 1)) *
((n : ℝ) + 1) ^ (k + 2) := by
apply (inv_integral_sq_jacobi_succ_le hα hβ n k hn hk).trans
have hn0 : (0 : ℝ) ≤ n := Nat.cast_nonneg _
have hd : 0 ≤ 2 * (n : ℝ) + α + β + 3 := by linarith
calc
_ ≤ (((2 + |α + β + 3|) * ((n : ℝ) + 1)) * (n + 1) *
(((k : ℝ) + 1) * (n + 1)) ^ k) / (2 : ℝ) ^ (α + β + 1) := by
gcongr
· nlinarith [le_abs_self (α + β + 3), mul_nonneg hn0 (abs_nonneg (α + β + 3))]
· nlinarith [Nat.cast_nonneg (α := ℝ) k]
_ = _ := by rw [mul_pow, pow_add, pow_two]; ring
source
theorem Polynomial.inv_integral_sq_jacobi_le_polynomial {α β : ℝ} (hα : -1 < α) (hβ : -1 < β) (k : ℕ) (hk : α + β + 1 ≤ ↑k)
(n : ℕ) :
(∫ (x : ℝ), Polynomial.eval x (Polynomial.jacobi α β n) ^ 2 ∂Polynomial.jacobiMeasure α β)⁻¹ ≤
Polynomial.jacobiReciprocalNormBound ⟨α, hα⟩ ⟨β, hβ⟩ k * (↑n + 1) ^ (k + 2)
Lean proof
/-- Reciprocal squared norms have a global polynomial bound, including degree zero. -/
theorem inv_integral_sq_jacobi_le_polynomial {α β : ℝ} (hα : -1 < α) (hβ : -1 < β)
(k : ℕ) (hk : α + β + 1 ≤ k) (n : ℕ) :
(∫ x, (jacobi α β n).eval x ^ 2 ∂jacobiMeasure α β)⁻¹ ≤
jacobiReciprocalNormBound ⟨α, hα⟩ ⟨β, hβ⟩ k * ((n : ℝ) + 1) ^ (k + 2) := by
let B : ℝ := (2 + |α + β + 3|) * ((k : ℝ) + 1) ^ k / (2 : ℝ) ^ (α + β + 1)
have hB : 0 ≤ B := by dsimp [B]; positivity
have h0 := inv_nonneg.mpr (integral_sq_jacobi_pos hα hβ 0).le
have h1 := inv_nonneg.mpr (integral_sq_jacobi_pos hα hβ 1).le
have h2 := inv_nonneg.mpr (integral_sq_jacobi_pos hα hβ 2).le
have hC := (jacobiReciprocalNormBound_pos hα hβ k).le
have hBC : B ≤ jacobiReciprocalNormBound ⟨α, hα⟩ ⟨β, hβ⟩ k := by
change B ≤ 1 + _ + _ + _ + B
linarith
have hsmall (j : ℕ) (hj : j ≤ 2) :
(∫ x, (jacobi α β j).eval x ^ 2 ∂jacobiMeasure α β)⁻¹ ≤
jacobiReciprocalNormBound ⟨α, hα⟩ ⟨β, hβ⟩ k := by
unfold jacobiReciprocalNormBound
change _ ≤ 1 + _ + _ + _ + B
interval_cases j <;> linarith
by_cases hn : n ≤ 2
· apply (hsmall n hn).trans
exact le_mul_of_one_le_right hC (one_le_pow₀ (by linarith [Nat.cast_nonneg (α := ℝ) n]))
obtain ⟨m, rfl⟩ := Nat.exists_eq_succ_of_ne_zero (show n ≠ 0 by omega)
have hm : 2 ≤ m := by omega
apply (inv_integral_sq_jacobi_succ_le_polynomial hα hβ m k hm hk).trans
change B * ((m : ℝ) + 1) ^ (k + 2) ≤ _
apply mul_le_mul hBC _ (by positivity) hC
apply pow_le_pow_left₀ (by positivity)
push_cast
linarith
source
Theorem
3.5.28
Uniform Jacobi kernel growth
For \(\alpha ,\beta {\gt}-1\) and an integer \(k\ge \max (\alpha +1,\beta ,\alpha +\beta +1)\), with \(C_k\) as in Theorem 3.5.11 ,
\[ K_N(x,x)\le C_k(\alpha ,\beta )(N+1)^{3k+3},\qquad \sqrt{K_N(x,x)}\le \sqrt{C_k(\alpha ,\beta )}(N+1)^{3k+3} \]
uniformly for \(x\in [-1,1]\).
Lean Formalisation
theorem Polynomial.jacobi_kernel_term_le_polynomial {α β : ℝ} (hα : -1 < α) (hβ : -1 < β) (k : ℕ) (hkα : α + 1 ≤ ↑k)
(hkβ : β ≤ ↑k) (hks : α + β + 1 ≤ ↑k) (n : ℕ) {x : ℝ} (hx : x ∈ Set.Icc (-1) 1) :
Polynomial.eval x (Polynomial.jacobi α β n) * Polynomial.eval x (Polynomial.jacobi α β n) /
∫ (t : ℝ), Polynomial.eval t (Polynomial.jacobi α β n) ^ 2 ∂Polynomial.jacobiMeasure α β ≤
Polynomial.jacobiKernelBound ⟨α, hα⟩ ⟨β, hβ⟩ k * (↑n + 1) ^ (3 * k + 2)
Lean proof
/-- Each diagonal kernel summand has a uniform polynomial bound. -/
theorem jacobi_kernel_term_le_polynomial {α β : ℝ} (hα : -1 < α) (hβ : -1 < β)
(k : ℕ) (hkα : α + 1 ≤ k) (hkβ : β ≤ k) (hks : α + β + 1 ≤ k)
(n : ℕ) {x : ℝ} (hx : x ∈ Icc (-1 : ℝ) 1) :
(jacobi α β n).eval x * (jacobi α β n).eval x /
(∫ t, (jacobi α β n).eval t ^ 2 ∂jacobiMeasure α β) ≤
jacobiKernelBound ⟨α, hα⟩ ⟨β, hβ⟩ k * ((n : ℝ) + 1) ^ (3 * k + 2) := by
have hv := abs_eval_jacobi_le_polynomial hα hβ k hkα hkβ n hx
have hi := inv_integral_sq_jacobi_le_polynomial hα hβ k hks n
have hp := (integral_sq_jacobi_pos hα hβ n).le
calc
_ = |(jacobi α β n).eval x| ^ 2 *
(∫ t, (jacobi α β n).eval t ^ 2 ∂jacobiMeasure α β)⁻¹ := by
rw [sq_abs]
ring
_ ≤ ((1 + 2 * (jacobiEndpointBound ⟨α + 1, (GammaPoint.ofPos (α + 1 + 1) (by linarith)).property⟩ k + jacobiEndpointBound ⟨β, (GammaPoint.ofPos (β + 1) (by linarith)).property⟩ k)) *
((n : ℝ) + 1) ^ k) ^ 2 *
(jacobiReciprocalNormBound ⟨α, hα⟩ ⟨β, hβ⟩ k * ((n : ℝ) + 1) ^ (k + 2)) :=
mul_le_mul (pow_le_pow_left₀ (abs_nonneg _) hv 2) hi (inv_nonneg.mpr hp) (sq_nonneg _)
_ = _ := by
simp only [jacobiKernelBound, mul_pow, ← pow_mul]
rw [show 3 * k + 2 = k * 2 + (k + 2) by omega, pow_add]
ring
source
2 related Lean declarations
theorem Polynomial.jacobi_kernel_le_polynomial {α β : ℝ} (hα : -1 < α) (hβ : -1 < β) (k : ℕ) (hkα : α + 1 ≤ ↑k) (hkβ : β ≤ ↑k)
(hks : α + β + 1 ≤ ↑k) (N : ℕ) {x : ℝ} (hx : x ∈ Set.Icc (-1) 1) :
(Polynomial.jacobiSequence hα hβ).kernel (Polynomial.jacobiMeasure α β) N x x ⋯ ≤
Polynomial.jacobiKernelBound ⟨α, hα⟩ ⟨β, hβ⟩ k * (↑N + 1) ^ (3 * k + 3)
Lean proof
/-- Uniform polynomial growth of the diagonal Jacobi Christoffel kernel. -/
theorem jacobi_kernel_le_polynomial {α β : ℝ} (hα : -1 < α) (hβ : -1 < β)
(k : ℕ) (hkα : α + 1 ≤ k) (hkβ : β ≤ k) (hks : α + β + 1 ≤ k)
(N : ℕ) {x : ℝ} (hx : x ∈ Icc (-1 : ℝ) 1) :
(jacobiSequence hα hβ).kernel (jacobiMeasure α β) N x x (Polynomial.Sequence.KernelInput.of _ _ _ (hi := fun _ => (hasFiniteMoments_jacobiMeasure hα hβ).integrable_mul _ _)) ≤
jacobiKernelBound ⟨α, hα⟩ ⟨β, hβ⟩ k * ((N : ℝ) + 1) ^ (3 * k + 3) := by
simp only [Sequence.kernel_of_positive (hasPositiveDefiniteIntegral_jacobiMeasure hα hβ) (jacobiSequence hα hβ), jacobiSequence_apply, squaredNorm_jacobiSequence]
calc
_ ≤ ∑ n ∈ Finset.range (N + 1),
jacobiKernelBound ⟨α, hα⟩ ⟨β, hβ⟩ k * ((N : ℝ) + 1) ^ (3 * k + 2) := by
apply Finset.sum_le_sum
intro n hn
apply (jacobi_kernel_term_le_polynomial hα hβ k hkα hkβ hks n hx).trans
apply mul_le_mul_of_nonneg_left _ (jacobiKernelBound_nonneg hα hβ k)
apply pow_le_pow_left₀ (by positivity)
have hn' : n ≤ N := Nat.lt_succ_iff.mp (Finset.mem_range.mp hn)
exact_mod_cast Nat.add_le_add_right hn' 1
_ = _ := by
simp only [Finset.sum_const, Finset.card_range, nsmul_eq_mul, Nat.cast_add, Nat.cast_one]
rw [show 3 * k + 3 = (3 * k + 2) + 1 by omega, pow_succ]
ring
source
theorem Polynomial.sqrt_jacobi_kernel_le_polynomial {α β : ℝ} (hα : -1 < α) (hβ : -1 < β) (k : ℕ) (hkα : α + 1 ≤ ↑k)
(hkβ : β ≤ ↑k) (hks : α + β + 1 ≤ ↑k) (N : ℕ) {x : ℝ} (hx : x ∈ Set.Icc (-1) 1) :
√((Polynomial.jacobiSequence hα hβ).kernel (Polynomial.jacobiMeasure α β) N x x ⋯) ≤
√(Polynomial.jacobiKernelBound ⟨α, hα⟩ ⟨β, hβ⟩ k) * (↑N + 1) ^ (3 * k + 3)
Lean proof
/-- A polynomial bound for the square root of the kernel, sufficient for
uniform geometric convergence after multiplication by the analytic error. -/
theorem sqrt_jacobi_kernel_le_polynomial {α β : ℝ} (hα : -1 < α) (hβ : -1 < β)
(k : ℕ) (hkα : α + 1 ≤ k) (hkβ : β ≤ k) (hks : α + β + 1 ≤ k)
(N : ℕ) {x : ℝ} (hx : x ∈ Icc (-1 : ℝ) 1) :
√((jacobiSequence hα hβ).kernel (jacobiMeasure α β) N x x (Polynomial.Sequence.KernelInput.of _ _ _ (hi := fun _ => (hasFiniteMoments_jacobiMeasure hα hβ).integrable_mul _ _))) ≤
√(jacobiKernelBound ⟨α, hα⟩ ⟨β, hβ⟩ k) * ((N : ℝ) + 1) ^ (3 * k + 3) := by
apply (Real.sqrt_le_sqrt (jacobi_kernel_le_polynomial hα hβ k hkα hkβ hks N hx)).trans
rw [Real.sqrt_mul (jacobiKernelBound_nonneg hα hβ k)]
apply mul_le_mul_of_nonneg_left _ (Real.sqrt_nonneg _)
exact Real.sqrt_le_self_iff.mpr (Or.inr (one_le_pow₀ (by linarith [Nat.cast_nonneg (α := ℝ) N])))
source
Theorem
3.5.29
Scalar orthogonality and kernel reproduction
Let \(\mathbb K=\mathbb R\) or \(\mathbb C\). The real orthonormal vectors remain orthonormal after scalar extension. Degree-at-most-\(N\) real polynomials belong to their first \(N+1\)-dimensional \(\mathbb K\)-span. The lifted kernel vector represents \(S_N^{\mathbb K}\) and has norm \(\sqrt{K_N(x,x)}\). It reproduces degree-at-most-\(N\) real polynomials. The named complex classical coefficients agree with the real coefficients on admissible real inputs, and for \(\alpha ,\beta {\gt}-1\), respectively \(\lambda {\gt}-1/2\), \(\lambda \ne 0\), they are the scalar coefficients \(a_n^{\mathbb C}\) of the Jacobi, respectively Gegenbauer, sequence, on the coefficient domains of Definition 3.5.12 .
Reference: [DLMF , 18.2(viii), 18.18] .
Lean Formalisation
theorem inner_ofReal_compLp.{u_1} (𝕂 : Type u_1) [RCLike 𝕂] {μ : MeasureTheory.Measure ℝ} (f g : ↥(MeasureTheory.Lp ℝ 2 μ)) :
inner 𝕂 (RCLike.ofRealCLM.compLp f) (RCLike.ofRealCLM.compLp g) = ↑(inner ℝ f g)
Lean proof
/-- Extending real-valued L² classes preserves their inner products. -/
theorem inner_ofReal_compLp (f g : Lp ℝ 2 μ) :
inner 𝕂 ((@RCLike.ofRealCLM 𝕂 _).compLp f) ((@RCLike.ofRealCLM 𝕂 _).compLp g) =
(inner ℝ f g : 𝕂) := by
rw [L2.inner_def, L2.inner_def, ← integral_ofReal]
apply integral_congr_ae
filter_upwards [(@RCLike.ofRealCLM 𝕂 _).coeFn_compLp f,
(@RCLike.ofRealCLM 𝕂 _).coeFn_compLp g] with x hf hg
simp [hf, hg, RCLike.inner_apply]
source
10 related Lean declarations
theorem norm_ofReal_compLp.{u_1} (𝕂 : Type u_1) [RCLike 𝕂] {μ : MeasureTheory.Measure ℝ} (f : ↥(MeasureTheory.Lp ℝ 2 μ)) :
‖RCLike.ofRealCLM.compLp f‖ = ‖f‖
Lean proof
/-- Scalar extension preserves the L² norm. -/
theorem norm_ofReal_compLp (f : Lp ℝ 2 μ) :
‖(@RCLike.ofRealCLM 𝕂 _).compLp f‖ = ‖f‖ := by
have h := congrArg RCLike.re (inner_ofReal_compLp 𝕂 f f)
rw [← norm_sq_eq_re_inner, RCLike.ofReal_re, real_inner_self_eq_norm_sq] at h
nlinarith [norm_nonneg ((@RCLike.ofRealCLM 𝕂 _).compLp f), norm_nonneg f]
source
theorem Polynomial.inner_polynomialToL2Scalar_left.{u_1} (𝕂 : Type u_1) [RCLike 𝕂] {μ : MeasureTheory.Measure ℝ}
(hμ : Polynomial.HasFiniteMoments μ) (p : Polynomial ℝ) (f : ↥(MeasureTheory.Lp 𝕂 2 μ)) :
inner 𝕂 ((Polynomial.polynomialToL2Scalar 𝕂 hμ) p) f = ∫ (x : ℝ), ↑↑f x * ↑(Polynomial.eval x p) ∂μ
Lean proof
/-- The scalar-extended polynomial inner product with arbitrary L² data is
its integral pairing with the real polynomial. -/
theorem inner_polynomialToL2Scalar_left (p : ℝ[X]) (f : Lp 𝕂 2 μ) :
inner 𝕂 (polynomialToL2Scalar 𝕂 hμ p) f = ∫ x, f x * ((p.eval x : ℝ) : 𝕂) ∂μ := by
rw [L2.inner_def]
apply integral_congr_ae
filter_upwards [coe_polynomialToL2Scalar 𝕂 hμ p] with x hp
simp [hp, RCLike.inner_apply]
source
theorem Polynomial.Sequence.IsOrthogonal.orthonormal_normalizedToL2Scalar.{u_1} (𝕂 : Type u_1) [RCLike 𝕂]
{μ : MeasureTheory.Measure ℝ} (hμ : Polynomial.HasFiniteMoments μ) {P : Polynomial.Sequence ℝ} (hP : P.IsOrthogonal μ)
(hpos : Polynomial.HasPositiveDefiniteIntegral μ) :
Orthonormal 𝕂 fun n => Polynomial.Sequence.normalizedToL2Scalar 𝕂 hμ P ⟨n, ⋯⟩
Lean proof
/-- Real orthogonal polynomial normalization remains orthonormal after scalar extension. -/
theorem IsOrthogonal.orthonormal_normalizedToL2Scalar (hP : P.IsOrthogonal μ)
(hpos : HasPositiveDefiniteIntegral μ) : Orthonormal 𝕂 (fun n ↦ P.normalizedToL2Scalar 𝕂 hμ ⟨n, squaredNorm_pos hpos P n⟩) := by
rw [orthonormal_iff_ite]
intro n m
rw [normalizedToL2Scalar, normalizedToL2Scalar, inner_ofReal_compLp,
orthonormal_iff_ite.mp (hP.orthonormal_normalizedToL2 hμ hpos)]
split_ifs <;> simp
source
theorem Polynomial.Sequence.polynomialToL2Scalar_mem_span.{u_1} (𝕂 : Type u_1) [RCLike 𝕂] {μ : MeasureTheory.Measure ℝ}
(hμ : Polynomial.HasFiniteMoments μ) {P : Polynomial.Sequence ℝ} (hpos : Polynomial.HasPositiveDefiniteIntegral μ)
(N : ℕ) (p : Polynomial ℝ) (hp : p.degree ≤ ↑N) :
(Polynomial.polynomialToL2Scalar 𝕂 hμ) p ∈
Submodule.span 𝕂 ((fun n => Polynomial.Sequence.normalizedToL2Scalar 𝕂 hμ P ⟨n, ⋯⟩) '' ↑(Finset.range (N + 1)))
Lean proof
/-- Scalar-extended polynomial classes of degree at most N belong to the first
N+1 normalized vectors over the enlarged scalar field. -/
theorem polynomialToL2Scalar_mem_span (hpos : HasPositiveDefiniteIntegral μ)
(N : ℕ) (p : ℝ[X]) (hp : p.degree ≤ N) :
polynomialToL2Scalar 𝕂 hμ p ∈ Submodule.span 𝕂
((fun n ↦ P.normalizedToL2Scalar 𝕂 hμ ⟨n, squaredNorm_pos hpos P n⟩) '' (Finset.range (N + 1) : Set ℕ)) := by
have hs := polynomialToL2_mem_span_normalizedToL2 (P := P) hμ hpos N p hp
clear hp
change ((@RCLike.ofRealCLM 𝕂 _).compLpₗ 2 μ) (polynomialToL2 hμ p) ∈ _
generalize polynomialToL2 hμ p = v at hs ⊢
induction hs using Submodule.span_induction with
| mem v hv =>
obtain ⟨i, hi, rfl⟩ := hv
exact Submodule.subset_span (Set.mem_image_of_mem _ hi)
| zero =>
rw [map_zero]
exact Submodule.zero_mem _
| add u v _ _ hu hv => simpa only [map_add] using Submodule.add_mem _ hu hv
| smul c u _ hu =>
rw [map_smul, RCLike.real_smul_eq_coe_smul (K := 𝕂)]
exact Submodule.smul_mem _ _ hu
source
theorem Polynomial.Sequence.inner_normalizedToL2Scalar_smul.{u_1} (𝕂 : Type u_1) [RCLike 𝕂] {μ : MeasureTheory.Measure ℝ}
(hμ : Polynomial.HasFiniteMoments μ) {P : Polynomial.Sequence ℝ} (hpos : Polynomial.HasPositiveDefiniteIntegral μ)
(f : ↥(MeasureTheory.Lp 𝕂 2 μ)) (n : ℕ) :
inner 𝕂 (Polynomial.Sequence.normalizedToL2Scalar 𝕂 hμ P ⟨n, ⋯⟩) f •
Polynomial.Sequence.normalizedToL2Scalar 𝕂 hμ P ⟨n, ⋯⟩ =
Polynomial.Sequence.integralCoefficientScalar 𝕂 P μ (Polynomial.IntegralCoefficientInput.ofL2 hμ hpos (↑P n) ⋯ f) •
(Polynomial.polynomialToL2Scalar 𝕂 hμ) (↑P n)
Lean proof
/-- Integral-coefficient terms represent the finite orthonormal projection. -/
theorem inner_normalizedToL2Scalar_smul (hpos : HasPositiveDefiniteIntegral μ)
(f : Lp 𝕂 2 μ) (n : ℕ) :
inner 𝕂 (P.normalizedToL2Scalar 𝕂 hμ ⟨n, squaredNorm_pos hpos P n⟩) f • P.normalizedToL2Scalar 𝕂 hμ ⟨n, squaredNorm_pos hpos P n⟩ =
P.integralCoefficientScalar 𝕂 μ (IntegralCoefficientInput.ofL2 hμ hpos (P n) (P.ne_zero n) f) • polynomialToL2Scalar 𝕂 hμ (P n) := by
rw [normalizedToL2Scalar_eq 𝕂 hμ P ⟨n, squaredNorm_pos hpos P n⟩, smul_smul]
congr 1
simpa only [normalizedToL2Scalar_eq] using
(inner_normalizedToL2Scalar_mul_inv_sqrt 𝕂 hμ (P := P) hpos f n)
source
theorem Polynomial.Sequence.inner_kernelVectorScalar.{u_1} (𝕂 : Type u_1) [RCLike 𝕂] {μ : MeasureTheory.Measure ℝ}
(hμ : Polynomial.HasFiniteMoments μ) {P : Polynomial.Sequence ℝ} (hpos : Polynomial.HasPositiveDefiniteIntegral μ)
(N : ℕ) (x : ℝ) (f : ↥(MeasureTheory.Lp 𝕂 2 μ)) :
inner 𝕂 (Polynomial.Sequence.kernelVectorScalar 𝕂 hμ P ⟨N, ⋯⟩ x) f =
Polynomial.Sequence.partialSumValueScalar 𝕂 P μ (Polynomial.IntegralCoefficientFamilyInput.ofL2 hμ hpos P f N) x
Lean proof
/-- The scalar-extended kernel vector reproduces partial-sum evaluation. -/
theorem inner_kernelVectorScalar (hpos : HasPositiveDefiniteIntegral μ)
(N : ℕ) (x : ℝ) (f : Lp 𝕂 2 μ) :
inner 𝕂 (P.kernelVectorScalar 𝕂 hμ ⟨N, fun i _ ↦ squaredNorm_pos hpos P i⟩ x) f = P.partialSumValueScalar 𝕂 μ (IntegralCoefficientFamilyInput.ofL2 hμ hpos P f N) x := by
rw [kernelVectorScalar, kernelVector_of_positive hμ P hpos]
change inner 𝕂 (((@RCLike.ofRealCLM 𝕂 _).compLpₗ 2 μ)
(∑ i ∈ Finset.range (N + 1), ((P i).eval x / √(P.squaredNorm μ i (Polynomial.Sequence.IntegrableSquare.of _ _))) •
P.normalizedToL2 hμ ⟨i, squaredNorm_pos hpos P i⟩)) f = _
simp only [map_sum, map_smul, sum_inner,
RCLike.real_smul_eq_coe_smul (K := 𝕂), inner_smul_left, RCLike.conj_ofReal,
partialSumValueScalar_ofL2]
apply Finset.sum_congr rfl
intro i _
change (((P i).eval x / √(P.squaredNorm μ i (Polynomial.Sequence.IntegrableSquare.of _ _)) : ℝ) : 𝕂) *
inner 𝕂 (P.normalizedToL2Scalar 𝕂 hμ ⟨i, squaredNorm_pos hpos P i⟩) f = _
rw [div_eq_mul_inv, RCLike.ofReal_mul]
calc
_ = (inner 𝕂 (P.normalizedToL2Scalar 𝕂 hμ ⟨i, squaredNorm_pos hpos P i⟩) f *
(((√(P.squaredNorm μ i (Polynomial.Sequence.IntegrableSquare.of _ _)))⁻¹ : ℝ) : 𝕂)) * (((P i).eval x : ℝ) : 𝕂) := by ring
_ = _ := by rw [inner_normalizedToL2Scalar_mul_inv_sqrt 𝕂 hμ hpos]
source
theorem Polynomial.Sequence.IsOrthogonal.norm_kernelVectorScalar.{u_1} (𝕂 : Type u_1) [RCLike 𝕂] {μ : MeasureTheory.Measure ℝ}
(hμ : Polynomial.HasFiniteMoments μ) {P : Polynomial.Sequence ℝ} (hP : P.IsOrthogonal μ)
(hpos : Polynomial.HasPositiveDefiniteIntegral μ) (N : ℕ) (x : ℝ) :
‖Polynomial.Sequence.kernelVectorScalar 𝕂 hμ P ⟨N, ⋯⟩ x‖ = √(P.kernel μ N x x ⋯)
Lean proof
/-- Scalar extension leaves the norm of the Christoffel kernel vector unchanged. -/
theorem IsOrthogonal.norm_kernelVectorScalar (hP : P.IsOrthogonal μ)
(hpos : HasPositiveDefiniteIntegral μ) (N : ℕ) (x : ℝ) :
‖P.kernelVectorScalar 𝕂 hμ ⟨N, fun i _ ↦ squaredNorm_pos hpos P i⟩ x‖ = √(P.kernel μ N x x (Polynomial.Sequence.KernelInput.of _ _ _)) := by
rw [kernelVectorScalar, norm_ofReal_compLp, hP.norm_kernelVector hμ hpos]
source
theorem Polynomial.Sequence.IsOrthogonal.inner_kernelVectorScalar_polynomialToL2Scalar.{u_1} (𝕂 : Type u_1) [RCLike 𝕂]
{μ : MeasureTheory.Measure ℝ} (hμ : Polynomial.HasFiniteMoments μ) {P : Polynomial.Sequence ℝ} (hP : P.IsOrthogonal μ)
(hpos : Polynomial.HasPositiveDefiniteIntegral μ) (N : ℕ) (x : ℝ) (p : Polynomial ℝ) (hp : p.degree ≤ ↑N) :
inner 𝕂 (Polynomial.Sequence.kernelVectorScalar 𝕂 hμ P ⟨N, ⋯⟩ x) ((Polynomial.polynomialToL2Scalar 𝕂 hμ) p) =
↑(Polynomial.eval x p)
Lean proof
/-- The scalar kernel reproduces every real polynomial of degree at most N. -/
theorem IsOrthogonal.inner_kernelVectorScalar_polynomialToL2Scalar (hP : P.IsOrthogonal μ)
(hpos : HasPositiveDefiniteIntegral μ) (N : ℕ) (x : ℝ)
(p : ℝ[X]) (hp : p.degree ≤ N) :
inner 𝕂 (P.kernelVectorScalar 𝕂 hμ ⟨N, fun i _ ↦ squaredNorm_pos hpos P i⟩ x) (polynomialToL2Scalar 𝕂 hμ p) =
((p.eval x : ℝ) : 𝕂) := by
change inner 𝕂 ((@RCLike.ofRealCLM 𝕂 _).compLp _) ((@RCLike.ofRealCLM 𝕂 _).compLp _) = _
rw [inner_ofReal_compLp, inner_kernelVector hμ hpos,
hP.partialSum_polynomialToL2 hμ hpos N p hp]
source
theorem Polynomial.integralCoefficientScalar_jacobiSequence {α β : ℝ} (hα : -1 < α) (hβ : -1 < β) {n : ℕ}
(f : Polynomial.IntegralCoefficientInput ℂ (Polynomial.jacobiMeasure α β) (Polynomial.jacobi α β n)) :
Polynomial.Sequence.integralCoefficientScalar ℂ (Polynomial.jacobiSequence hα hβ) (Polynomial.jacobiMeasure α β) f =
Polynomial.jacobiComplexCoefficient α β f
Lean proof
/-- The general scalar coefficient specializes on the full classical input domain. -/
theorem integralCoefficientScalar_jacobiSequence {n : ℕ}
(f : IntegralCoefficientInput ℂ (jacobiMeasure α β) (jacobi α β n)) :
(jacobiSequence hα hβ).integralCoefficientScalar ℂ (jacobiMeasure α β) f =
jacobiComplexCoefficient α β f := by
simp only [Sequence.integralCoefficientScalar, squaredNorm_jacobiSequence,
jacobiSequence_apply, jacobiComplexCoefficient]
rfl
source
theorem Polynomial.integralCoefficientScalar_gegenbauerSequence {lam : ℝ} (hlam : -(1 / 2) < lam) (hzero : lam ≠ 0) {n : ℕ}
(f : Polynomial.IntegralCoefficientInput ℂ (Polynomial.gegenbauerMeasure lam) (Polynomial.gegenbauer lam n)) :
Polynomial.Sequence.integralCoefficientScalar ℂ (Polynomial.gegenbauerSequence hlam hzero)
(Polynomial.gegenbauerMeasure lam) f =
Polynomial.gegenbauerComplexCoefficient lam f
Lean proof
/-- The general scalar coefficient specializes on the full classical input domain. -/
theorem integralCoefficientScalar_gegenbauerSequence {n : ℕ}
(f : IntegralCoefficientInput ℂ (gegenbauerMeasure lam) (gegenbauer lam n)) :
(gegenbauerSequence hlam hzero).integralCoefficientScalar ℂ (gegenbauerMeasure lam) f =
gegenbauerComplexCoefficient lam f := by
simp only [Sequence.integralCoefficientScalar, squaredNorm_gegenbauerSequence,
gegenbauerSequence_apply, gegenbauerComplexCoefficient]
rfl
source
Theorem
3.5.30
Iterated Jacobi differentiation
Over a commutative \(\mathbb Q\)-algebra, for \(n,k\ge 0\),
\[ D^kP_{n+k}^{(\alpha ,\beta )}= \left[\prod _{j=0}^{k-1}\frac{n+k+\alpha +\beta +j+1}{2}\right] P_n^{(\alpha +k,\beta +k)}. \]
Also \(D^kP_n^{(\alpha ,\beta )}=0\) when \(n{\lt}k\). There are no positivity restrictions on the parameters.
Reference: [DLMF , 18.9.15] , iterated.
Lean Formalisation
theorem Polynomial.iterate_derivative_jacobi.{u_1} {R : Type u_1} [CommRing R] [Algebra ℚ R] (α β : R) (k n : ℕ) :
(⇑Polynomial.derivative)^[k] (Polynomial.jacobi α β (n + k)) =
Polynomial.C (∏ j ∈ Finset.range k, (algebraMap ℚ R) (1 / 2) * (↑n + ↑k + α + β + ↑j + 1)) *
Polynomial.jacobi (α + ↑k) (β + ↑k) n
Lean proof
/-- Iterating the Jacobi derivative shifts both parameters by the derivative
order. The index n+k includes every surviving mode. -/
theorem iterate_derivative_jacobi (α β : R) (k n : ℕ) :
derivative^[k] (jacobi α β (n + k)) =
C (∏ j ∈ Finset.range k, algebraMap ℚ R (1 / 2) *
((n + k : R) + α + β + j + 1)) * jacobi (α + k) (β + k) n := by
induction k generalizing α β with
| zero => simp
| succ k ih =>
rw [show n + (k + 1) = (n + k) + 1 by omega,
Function.iterate_succ_apply, derivative_jacobi_succ, iterate_derivative_C_mul, ih]
simp only [Finset.prod_range_succ', Nat.cast_add, Nat.cast_one]
rw [← mul_assoc, ← map_mul]
congr 1
· congr 1
rw [mul_comm]
congr 1
· apply Finset.prod_congr rfl
intro j _
ring
· simp only [Nat.cast_zero]; ring
· congr 1 <;> ring
source
1 related Lean declaration
theorem Polynomial.iterate_derivative_jacobi_eq_zero.{u_1} {R : Type u_1} [CommRing R] [Algebra ℚ R] (α β : R) {k n : ℕ}
(hn : n < k) : (⇑Polynomial.derivative)^[k] (Polynomial.jacobi α β n) = 0
Lean proof
/-- Modes below the derivative order vanish, including degenerate parameters. -/
theorem iterate_derivative_jacobi_eq_zero (α β : R) {k n : ℕ} (hn : n < k) :
derivative^[k] (jacobi α β n) = 0 := by
exact iterate_derivative_eq_zero ((natDegree_jacobi_le α β n).trans_lt hn)
source
Theorem
3.5.31
Approximation in other classical families
Both real and complex analytic Jacobi and Gegenbauer expansions satisfy weighted L2 error bounds and converge uniformly on \([-1,1]\). The complex bounds have exactly the constants of the real-valued theorems above, with \(|F-S_Nf|\) replacing \(|\operatorname {Re}F-S_Nf|\). They hold for every \(\alpha ,\beta {\gt}-1\) and every \(\lambda {\gt}-1/2\), \(\lambda \ne 0\), respectively, under the open-ellipse hypotheses \(\rho {\gt}1\), analyticity and \(|F|\le M\). The uniform polynomial factors are explicit and nonsharp; no boundary regularity on the ellipse is assumed.
References: [DLMF , 18.18] and [ATAP , Chapter 8] .
Lean Formalisation
theorem Polynomial.norm_sub_sum_jacobiComplexCoefficient_le_of_analytic {α β : ℝ} (hα : -1 < α) (hβ : -1 < β) {F : ℂ → ℂ}
{ρ M : ℝ} (hρ : 1 < ρ) (hF : AnalyticOnNhd ℂ F (Complex.bernsteinEllipse ⟨ρ, hρ⟩))
(hM : ∀ z ∈ Complex.bernsteinEllipse ⟨ρ, hρ⟩, ‖F z‖ ≤ M) (f : ↥(MeasureTheory.Lp ℂ 2 (Polynomial.jacobiMeasure α β)))
(hf : ∀ᵐ (x : ℝ) ∂Polynomial.jacobiMeasure α β, ↑↑f x = F ↑x) (N : ℕ) :
‖f -
∑ i ∈ Finset.range (N + 1),
Polynomial.jacobiComplexCoefficient α β (Polynomial.IntegralCoefficientInput.ofJacobiL2 hα hβ f i) •
(Polynomial.polynomialToL2Scalar ℂ ⋯) (Polynomial.jacobi α β i)‖ ≤
√((Polynomial.jacobiMeasure α β).real Set.univ) * (2 * M / (ρ ^ N * (ρ - 1)))
Lean proof
/-- Geometric weighted L² error for complex analytic Jacobi expansions. -/
theorem norm_sub_sum_jacobiComplexCoefficient_le_of_analytic {F : ℂ → ℂ} {ρ M : ℝ}
(hρ : 1 < ρ) (hF : AnalyticOnNhd ℂ F (bernsteinEllipse ⟨ρ, hρ⟩))
(hM : ∀ z ∈ bernsteinEllipse ⟨ρ, hρ⟩, ‖F z‖ ≤ M)
(f : Lp ℂ 2 (jacobiMeasure α β)) (hf : ∀ᵐ x ∂jacobiMeasure α β, f x = F x) (N : ℕ) :
‖f - ∑ i ∈ Finset.range (N + 1), (jacobiComplexCoefficient α β (IntegralCoefficientInput.ofJacobiL2 hα hβ f i)) •
polynomialToL2Scalar ℂ (hasFiniteMoments_jacobiMeasure hα hβ) (jacobi α β i)‖ ≤
√((jacobiMeasure α β).real univ) * (2 * M / (ρ ^ N * (ρ - 1))) := by
simpa only [Sequence.integralCoefficientScalar, squaredNorm_jacobiSequence, jacobiSequence_apply,
jacobiComplexCoefficient, IntegralCoefficientInput.ofJacobiL2, IntegralCoefficientInput.ofL2, RCLike.ofReal_eq_complex_ofReal] using
(isOrthogonal_jacobiSequence hα hβ).norm_sub_sum_integralCoefficientScalar_le_of_analytic
(hasFiniteMoments_jacobiMeasure hα hβ) (hasPositiveDefiniteIntegral_jacobiMeasure hα hβ)
((ae_mem_Ioo_jacobiMeasure α β).mono (fun _ hx ↦ Ioo_subset_Icc_self hx)) hρ hF hM f hf N
source
5 related Lean declarations
theorem Polynomial.norm_sub_sum_jacobiComplexCoefficient_le_uniform_of_analytic {α β : ℝ} (hα : -1 < α) (hβ : -1 < β)
{F : ℂ → ℂ} {ρ M : ℝ} (hρ : 1 < ρ) (hF : AnalyticOnNhd ℂ F (Complex.bernsteinEllipse ⟨ρ, hρ⟩))
(hM : ∀ z ∈ Complex.bernsteinEllipse ⟨ρ, hρ⟩, ‖F z‖ ≤ M) (f : ↥(MeasureTheory.Lp ℂ 2 (Polynomial.jacobiMeasure α β)))
(hf : ∀ᵐ (x : ℝ) ∂Polynomial.jacobiMeasure α β, ↑↑f x = F ↑x) (k : ℕ) (hkα : α + 1 ≤ ↑k) (hkβ : β ≤ ↑k)
(hks : α + β + 1 ≤ ↑k) (N : ℕ) {x : ℝ} (hx : x ∈ Set.Icc (-1) 1) :
‖F ↑x -
∑ i ∈ Finset.range (N + 1),
Polynomial.jacobiComplexCoefficient α β (Polynomial.IntegralCoefficientInput.ofJacobiL2 hα hβ f i) *
↑(Polynomial.eval x (Polynomial.jacobi α β i))‖ ≤
(1 +
√(Polynomial.jacobiKernelBound ⟨α, hα⟩ ⟨β, hβ⟩ k) * (↑N + 1) ^ (3 * k + 3) *
√((Polynomial.jacobiMeasure α β).real Set.univ)) *
(2 * M / (ρ ^ N * (ρ - 1)))
Lean proof
/-- Uniform complex Jacobi approximation, with an explicit nonsharp polynomial factor. -/
theorem norm_sub_sum_jacobiComplexCoefficient_le_uniform_of_analytic {F : ℂ → ℂ} {ρ M : ℝ}
(hρ : 1 < ρ) (hF : AnalyticOnNhd ℂ F (bernsteinEllipse ⟨ρ, hρ⟩))
(hM : ∀ z ∈ bernsteinEllipse ⟨ρ, hρ⟩, ‖F z‖ ≤ M)
(f : Lp ℂ 2 (jacobiMeasure α β)) (hf : ∀ᵐ x ∂jacobiMeasure α β, f x = F x)
(k : ℕ) (hkα : α + 1 ≤ k) (hkβ : β ≤ k) (hks : α + β + 1 ≤ k)
(N : ℕ) {x : ℝ} (hx : x ∈ Icc (-1 : ℝ) 1) :
‖F x - ∑ i ∈ Finset.range (N + 1),
(jacobiComplexCoefficient α β (IntegralCoefficientInput.ofJacobiL2 hα hβ f i)) * (((jacobi α β i).eval x : ℝ) : ℂ)‖ ≤
(1 + √(jacobiKernelBound ⟨α, hα⟩ ⟨β, hβ⟩ k) * ((N : ℝ) + 1) ^ (3 * k + 3) *
√((jacobiMeasure α β).real univ)) * (2 * M / (ρ ^ N * (ρ - 1))) := by
have h := (isOrthogonal_jacobiSequence hα hβ).norm_sub_partialSumValueScalar_le_kernel_of_analytic
(hasFiniteMoments_jacobiMeasure hα hβ) (hasPositiveDefiniteIntegral_jacobiMeasure hα hβ)
((ae_mem_Ioo_jacobiMeasure α β).mono (fun _ hx ↦ Ioo_subset_Icc_self hx)) hρ hF hM f hf N hx
simp only [Sequence.partialSumValueScalar_ofL2, Sequence.integralCoefficientScalar, squaredNorm_jacobiSequence,
jacobiSequence_apply, jacobiComplexCoefficient, IntegralCoefficientInput.ofJacobiL2,
IntegralCoefficientInput.ofL2, RCLike.ofReal_eq_complex_ofReal] at h ⊢
have hM0 : 0 ≤ M := (norm_nonneg (F x)).trans (hM x (ofReal_mem_bernsteinEllipse hρ hx))
apply h.trans
gcongr
exact sqrt_jacobi_kernel_le_polynomial hα hβ k hkα hkβ hks N hx
source
theorem Polynomial.tendstoUniformlyOn_sum_jacobiComplexCoefficient_of_analytic {α β : ℝ} (hα : -1 < α) (hβ : -1 < β) {F : ℂ → ℂ}
{ρ M : ℝ} (hρ : 1 < ρ) (hF : AnalyticOnNhd ℂ F (Complex.bernsteinEllipse ⟨ρ, hρ⟩))
(hM : ∀ z ∈ Complex.bernsteinEllipse ⟨ρ, hρ⟩, ‖F z‖ ≤ M) (f : ↥(MeasureTheory.Lp ℂ 2 (Polynomial.jacobiMeasure α β)))
(hf : ∀ᵐ (x : ℝ) ∂Polynomial.jacobiMeasure α β, ↑↑f x = F ↑x) :
TendstoUniformlyOn
(fun N x =>
∑ i ∈ Finset.range (N + 1),
Polynomial.jacobiComplexCoefficient α β (Polynomial.IntegralCoefficientInput.ofJacobiL2 hα hβ f i) *
↑(Polynomial.eval x (Polynomial.jacobi α β i)))
(fun x => F ↑x) Filter.atTop (Set.Icc (-1) 1)
Lean proof
/-- Complex analytic Jacobi expansions converge uniformly on the closed interval. -/
theorem tendstoUniformlyOn_sum_jacobiComplexCoefficient_of_analytic {F : ℂ → ℂ} {ρ M : ℝ}
(hρ : 1 < ρ) (hF : AnalyticOnNhd ℂ F (bernsteinEllipse ⟨ρ, hρ⟩))
(hM : ∀ z ∈ bernsteinEllipse ⟨ρ, hρ⟩, ‖F z‖ ≤ M)
(f : Lp ℂ 2 (jacobiMeasure α β)) (hf : ∀ᵐ x ∂jacobiMeasure α β, f x = F x) :
TendstoUniformlyOn (fun N x ↦ ∑ i ∈ Finset.range (N + 1),
(jacobiComplexCoefficient α β (IntegralCoefficientInput.ofJacobiL2 hα hβ f i)) * (((jacobi α β i).eval x : ℝ) : ℂ))
(fun x : ℝ ↦ F x) atTop (Icc (-1) 1) := by
obtain ⟨k, hkα, hkβ, hks⟩ := exists_jacobiKernel_exponent α β
apply tendstoUniformlyOn_of_polynomial_geometric_bound (3 * k + 3) hρ
(A := √(jacobiKernelBound ⟨α, hα⟩ ⟨β, hβ⟩ k) * √((jacobiMeasure α β).real univ))
(B := ρ - 1) (C := 2 * M)
intro N x hx
convert norm_sub_sum_jacobiComplexCoefficient_le_uniform_of_analytic hα hβ hρ hF hM f hf
k hkα hkβ hks N hx using 1
ring
source
theorem Polynomial.norm_sub_sum_gegenbauerComplexCoefficient_le_of_analytic {lam : ℝ} (hlam : -(1 / 2) < lam) (hzero : lam ≠ 0)
{F : ℂ → ℂ} {ρ M : ℝ} (hρ : 1 < ρ) (hF : AnalyticOnNhd ℂ F (Complex.bernsteinEllipse ⟨ρ, hρ⟩))
(hM : ∀ z ∈ Complex.bernsteinEllipse ⟨ρ, hρ⟩, ‖F z‖ ≤ M)
(f : ↥(MeasureTheory.Lp ℂ 2 (Polynomial.gegenbauerMeasure lam)))
(hf : ∀ᵐ (x : ℝ) ∂Polynomial.gegenbauerMeasure lam, ↑↑f x = F ↑x) (N : ℕ) :
‖f -
∑ i ∈ Finset.range (N + 1),
Polynomial.gegenbauerComplexCoefficient lam
(Polynomial.IntegralCoefficientInput.ofGegenbauerL2 hlam hzero f i) •
(Polynomial.polynomialToL2Scalar ℂ ⋯) (Polynomial.gegenbauer lam i)‖ ≤
√((Polynomial.gegenbauerMeasure lam).real Set.univ) * (2 * M / (ρ ^ N * (ρ - 1)))
Lean proof
/-- Geometric weighted L² error for complex analytic Gegenbauer expansions. -/
theorem norm_sub_sum_gegenbauerComplexCoefficient_le_of_analytic {F : ℂ → ℂ} {ρ M : ℝ}
(hρ : 1 < ρ) (hF : AnalyticOnNhd ℂ F (bernsteinEllipse ⟨ρ, hρ⟩))
(hM : ∀ z ∈ bernsteinEllipse ⟨ρ, hρ⟩, ‖F z‖ ≤ M)
(f : Lp ℂ 2 (gegenbauerMeasure lam)) (hf : ∀ᵐ x ∂gegenbauerMeasure lam, f x = F x) (N : ℕ) :
‖f - ∑ i ∈ Finset.range (N + 1), (gegenbauerComplexCoefficient lam (IntegralCoefficientInput.ofGegenbauerL2 hlam hzero f i)) •
polynomialToL2Scalar ℂ (hasFiniteMoments_gegenbauerMeasure hlam) (gegenbauer lam i)‖ ≤
√((gegenbauerMeasure lam).real univ) * (2 * M / (ρ ^ N * (ρ - 1))) := by
have hP := isOrthogonal_gegenbauerSequence hlam hzero
simpa only [Sequence.integralCoefficientScalar, squaredNorm_gegenbauerSequence, gegenbauerSequence_apply,
gegenbauerComplexCoefficient, IntegralCoefficientInput.ofGegenbauerL2, IntegralCoefficientInput.ofL2, RCLike.ofReal_eq_complex_ofReal] using
hP.norm_sub_sum_integralCoefficientScalar_le_of_analytic
(hasFiniteMoments_gegenbauerMeasure hlam) (hasPositiveDefiniteIntegral_gegenbauerMeasure hlam)
((ae_mem_Ioo_gegenbauerMeasure lam).mono (fun _ hx ↦ Ioo_subset_Icc_self hx)) hρ hF hM f hf N
source
theorem Polynomial.norm_sub_sum_gegenbauerComplexCoefficient_le_uniform_of_analytic {lam : ℝ} (hlam : -(1 / 2) < lam)
(hzero : lam ≠ 0) {F : ℂ → ℂ} {ρ M : ℝ} (hρ : 1 < ρ) (hF : AnalyticOnNhd ℂ F (Complex.bernsteinEllipse ⟨ρ, hρ⟩))
(hM : ∀ z ∈ Complex.bernsteinEllipse ⟨ρ, hρ⟩, ‖F z‖ ≤ M)
(f : ↥(MeasureTheory.Lp ℂ 2 (Polynomial.gegenbauerMeasure lam)))
(hf : ∀ᵐ (x : ℝ) ∂Polynomial.gegenbauerMeasure lam, ↑↑f x = F ↑x) (k : ℕ) (hk : lam + 1 / 2 ≤ ↑k) (hks : 2 * lam ≤ ↑k)
(N : ℕ) {x : ℝ} (hx : x ∈ Set.Icc (-1) 1) :
‖F ↑x -
∑ i ∈ Finset.range (N + 1),
Polynomial.gegenbauerComplexCoefficient lam
(Polynomial.IntegralCoefficientInput.ofGegenbauerL2 hlam hzero f i) *
↑(Polynomial.eval x (Polynomial.gegenbauer lam i))‖ ≤
(1 +
√(Polynomial.jacobiKernelBound ⟨lam - 1 / 2, ⋯⟩ ⟨lam - 1 / 2, ⋯⟩ k) * (↑N + 1) ^ (3 * k + 3) *
√((Polynomial.gegenbauerMeasure lam).real Set.univ)) *
(2 * M / (ρ ^ N * (ρ - 1)))
Lean proof
/-- Uniform complex Gegenbauer approximation throughout the nondegenerate range. -/
theorem norm_sub_sum_gegenbauerComplexCoefficient_le_uniform_of_analytic {F : ℂ → ℂ} {ρ M : ℝ}
(hρ : 1 < ρ) (hF : AnalyticOnNhd ℂ F (bernsteinEllipse ⟨ρ, hρ⟩))
(hM : ∀ z ∈ bernsteinEllipse ⟨ρ, hρ⟩, ‖F z‖ ≤ M)
(f : Lp ℂ 2 (gegenbauerMeasure lam)) (hf : ∀ᵐ x ∂gegenbauerMeasure lam, f x = F x)
(k : ℕ) (hk : lam + 1 / 2 ≤ k) (hks : 2 * lam ≤ k)
(N : ℕ) {x : ℝ} (hx : x ∈ Icc (-1 : ℝ) 1) :
‖F x - ∑ i ∈ Finset.range (N + 1),
(gegenbauerComplexCoefficient lam (IntegralCoefficientInput.ofGegenbauerL2 hlam hzero f i)) * (((gegenbauer lam i).eval x : ℝ) : ℂ)‖ ≤
(1 + √(jacobiKernelBound ⟨lam - 1 / 2, by change -1 < lam - 1 / 2; linarith⟩ ⟨lam - 1 / 2, by change -1 < lam - 1 / 2; linarith⟩ k) *
((N : ℝ) + 1) ^ (3 * k + 3) * √((gegenbauerMeasure lam).real univ)) *
(2 * M / (ρ ^ N * (ρ - 1))) := by
have hP := isOrthogonal_gegenbauerSequence hlam hzero
have h := hP.norm_sub_partialSumValueScalar_le_kernel_of_analytic
(hasFiniteMoments_gegenbauerMeasure hlam) (hasPositiveDefiniteIntegral_gegenbauerMeasure hlam)
((ae_mem_Ioo_gegenbauerMeasure lam).mono (fun _ hx ↦ Ioo_subset_Icc_self hx))
hρ hF hM f hf N hx
simp only [Sequence.partialSumValueScalar_ofL2, Sequence.integralCoefficientScalar, squaredNorm_gegenbauerSequence,
gegenbauerSequence_apply, gegenbauerComplexCoefficient, IntegralCoefficientInput.ofGegenbauerL2,
IntegralCoefficientInput.ofL2, RCLike.ofReal_eq_complex_ofReal, gegenbauer_kernel_eq_jacobi hlam hzero] at h ⊢
have hM0 : 0 ≤ M := (norm_nonneg (F x)).trans (hM x (ofReal_mem_bernsteinEllipse hρ hx))
apply h.trans
gcongr
exact sqrt_jacobi_kernel_le_polynomial (by linarith) (by linarith) k
(by linarith) (by linarith) (by linarith) N hx
source
theorem Polynomial.tendstoUniformlyOn_sum_gegenbauerComplexCoefficient_of_analytic {lam : ℝ} (hlam : -(1 / 2) < lam)
(hzero : lam ≠ 0) {F : ℂ → ℂ} {ρ M : ℝ} (hρ : 1 < ρ) (hF : AnalyticOnNhd ℂ F (Complex.bernsteinEllipse ⟨ρ, hρ⟩))
(hM : ∀ z ∈ Complex.bernsteinEllipse ⟨ρ, hρ⟩, ‖F z‖ ≤ M)
(f : ↥(MeasureTheory.Lp ℂ 2 (Polynomial.gegenbauerMeasure lam)))
(hf : ∀ᵐ (x : ℝ) ∂Polynomial.gegenbauerMeasure lam, ↑↑f x = F ↑x) :
TendstoUniformlyOn
(fun N x =>
∑ i ∈ Finset.range (N + 1),
Polynomial.gegenbauerComplexCoefficient lam
(Polynomial.IntegralCoefficientInput.ofGegenbauerL2 hlam hzero f i) *
↑(Polynomial.eval x (Polynomial.gegenbauer lam i)))
(fun x => F ↑x) Filter.atTop (Set.Icc (-1) 1)
Lean proof
/-- Complex analytic Gegenbauer expansions converge uniformly on the closed interval. -/
theorem tendstoUniformlyOn_sum_gegenbauerComplexCoefficient_of_analytic {F : ℂ → ℂ} {ρ M : ℝ}
(hρ : 1 < ρ) (hF : AnalyticOnNhd ℂ F (bernsteinEllipse ⟨ρ, hρ⟩))
(hM : ∀ z ∈ bernsteinEllipse ⟨ρ, hρ⟩, ‖F z‖ ≤ M)
(f : Lp ℂ 2 (gegenbauerMeasure lam)) (hf : ∀ᵐ x ∂gegenbauerMeasure lam, f x = F x) :
TendstoUniformlyOn (fun N x ↦ ∑ i ∈ Finset.range (N + 1),
(gegenbauerComplexCoefficient lam (IntegralCoefficientInput.ofGegenbauerL2 hlam hzero f i)) * (((gegenbauer lam i).eval x : ℝ) : ℂ))
(fun x : ℝ ↦ F x) atTop (Icc (-1) 1) := by
obtain ⟨k, hk0, hks⟩ := exists_gegenbauerKernel_exponent lam
apply tendstoUniformlyOn_of_polynomial_geometric_bound (3 * k + 3) hρ
(A := √(jacobiKernelBound ⟨lam - 1 / 2, by change -1 < lam - 1 / 2; linarith⟩ ⟨lam - 1 / 2, by change -1 < lam - 1 / 2; linarith⟩ k) *
√((gegenbauerMeasure lam).real univ)) (B := ρ - 1) (C := 2 * M)
intro N x hx
convert norm_sub_sum_gegenbauerComplexCoefficient_le_uniform_of_analytic hlam hzero hρ hF hM f hf
k hk0 hks N hx using 1
ring
source