Mathlib.Analysis.JacksonApproximation
Jackson approximation infrastructure: normalized fourth-power kernels, explicit moment bounds, even-trigonometric extraction, finite tensor convolution, four-dimensional coefficient envelopes, and affine rectangle transport.
Kernel 4 core · 20 supporting This module constructs the normalized fourth-power Jackson kernel on the standard period (for positive order; order zero is a degenerate zero kernel), computes its exact mass, proves its analytic regularity, derives expl ★ jackson_second_moment
The normalized order-four Jackson kernel
This module constructs the normalized fourth-power Jackson kernel on the standard period (for positive order; order zero is a degenerate zero kernel), computes its exact mass, proves its analytic regularity, derives explicit first- and second-moment bounds, and bounds its trigonometric degree.
A nonnegative integer order and a real argument determine the raw order-four Jackson kernel, obtained from the fourth power of the Dirichlet sine quotient with its removable singularities filled continuously.
An integer order determines the raw Jackson mass, the integral of the raw kernel over the standard period from minus π to π.
An integer order and a real argument determine the normalized order-four Jackson kernel, equal to the raw kernel divided by its mass over the standard period. It is normalized for positive order; at order zero the raw kernel and its mass vanish and the value is zero by the division convention.
For integer order K that is strictly positive, the normalized second moment is at most sixty-four divided by K squared.
Formal statement
Proof (Lean source)
20 supporting declarations (lemmas, instances)
-
jraw_eq_of_sin_ne_zerotheorem — At order K and argument t, if the denominator sine is nonzero, then the raw kernel equals the displayed fourth power of the sine quotient.hypotheses -
jraw_eq_of_sin_eq_zerotheorem — At order K and argument t, if the denominator sine vanishes, then the raw kernel equals K to the fourth power.Proof (Lean source)
theorem jraw_eq_of_sin_eq_zero (K : ℕ) {t : ℝ} (ht : sin (t / 2) = 0) : jraw K t = (K : ℝ) ^ 4 := by simp [jraw, ht] -
continuous_jrawtheorem — For integer order K, the raw Jackson kernel is continuous on the real line.Proof (Lean source)
@[fun_prop] theorem continuous_jraw (K : ℕ) : Continuous (jraw K) := by by_cases hK : K = 0 · subst K convert (continuous_const : Continuous (fun _ : ℝ => (0 : ℝ))) using 1 funext t simp [jraw] · have hKpos : 0 < K := Nat.pos_of_ne_zero hK rw [show jraw K = fun t => ((Polynomial.Chebyshev.U ℝ ((K - 1 : ℕ) : ℤ)).eval (cos (t / 2))) ^ 4 by funext t exact jraw_eq_chebyshev K hKpos t] fun_prop -
measurable_jrawtheorem — For integer order K, the raw Jackson kernel is Borel measurable.Proof (Lean source)
@[measurability, fun_prop] theorem measurable_jraw (K : ℕ) : Measurable (jraw K) := by exact (continuous_jraw K).measurable -
integrableOn_jrawtheorem — For integer order K, the raw Jackson kernel is integrable over the standard period.Proof (Lean source)
theorem integrableOn_jraw (K : ℕ) : IntegrableOn (jraw K) (Icc (-pi) pi) := by exact (continuous_jraw K).continuousOn.integrableOn_compact isCompact_Icc -
jraw_nonnegtheorem — At integer order K and real argument t, the raw Jackson kernel is nonnegative.Proof (Lean source)
-
jraw_eventheorem — For integer order K, the raw Jackson kernel is symmetric about zero.Proof (Lean source)
theorem jraw_even (K : ℕ) : Even (jraw K) := by intro t by_cases ht : sin (t / 2) = 0 · have hnt : sin (-t / 2) = 0 := by rw [show -t / 2 = -(t / 2) by ring, Real.sin_neg, ht, neg_zero] rw [jraw_eq_of_sin_eq_zero K hnt, jraw_eq_of_sin_eq_zero K ht] · have hnt : sin (-t / 2) ≠ 0 := by rw [show -t / 2 = -(t / 2) by ring, Real.sin_neg, neg_ne_zero] exact ht rw [jraw_eq_of_sin_ne_zero K hnt, jraw_eq_of_sin_ne_zero K ht] rw [show (K : ℝ) * -t / 2 = -((K : ℝ) * t / 2) by ring, show -t / 2 = -(t / 2) by ring, Real.sin_neg] have hs : sin (-(t / 2)) = -sin (t / 2) := Real.sin_neg _ rw [hs] congr 1 field_simp -
jrawMass_eqtheorem — For integer order K that is strictly positive, the raw Jackson mass equals two π thirds times K times two K squared plus one.Proof (Lean source)
theorem jrawMass_eq (K : ℕ) (hK : 0 < K) : jrawMass K = (2 * pi / 3) * (K : ℝ) * (2 * (K : ℝ) ^ 2 + 1) := by have hcast : ((K - 1 : ℕ) : ℝ) = (K : ℝ) - 1 := by rw [Nat.cast_sub (Nat.one_le_iff_ne_zero.mpr (Nat.ne_of_gt hK))] norm_num have hfun : jraw K = fun t => ((K : ℝ) + ∑ j ∈ range (K - 1), (2 * (((K - 1 : ℕ) : ℝ) - (j : ℝ))) * cos (((j + 1 : ℕ) : ℝ) * t)) ^ 2 := by funext t rw [jraw_eq_chebyshev K hK t] rw [show (Polynomial.Chebyshev.U ℝ ((K - 1 : ℕ) : ℤ)).eval (cos (t / 2)) ^ 4 = ((Polynomial.Chebyshev.U ℝ ((K - 1 : ℕ) : ℤ)).eval (cos (t / 2)) ^ 2) ^ 2 by ring] congr 1 rw [cheb_U_sq_eval (K - 1) t] have hsucc : K - 1 + 1 = K := by omega rw [hcast] rw [Finset.mul_sum] have hlead : (K : ℝ) - 1 + 1 = (K : ℝ) := by ring rw [hlead] apply congrArg ((K : ℝ) + ·) apply Finset.sum_congr rfl intro j hj ring rw [jrawMass, hfun, integral_sq_cos_sum] have hsum := sum_range_sub_sq (K - 1) have hcoeff : (∑ j ∈ range (K - 1), (2 * (((K - 1 : ℕ) : ℝ) - (j : ℝ))) ^ 2) = 4 * (((K - 1 : ℕ) : ℝ) * ((K - 1 : ℕ) + 1) * (2 * (K - 1 : ℕ) + 1) / 6) := by calc (∑ j ∈ range (K - 1), (2 * (((K - 1 : ℕ) : ℝ) - (j : ℝ))) ^ 2) = 4 * ∑ j ∈ range (K - 1), (((K - 1 : ℕ) : ℝ) - (j : ℝ)) ^ 2 := by rw [Finset.mul_sum] apply Finset.sum_congr rfl intro j hj ring _ = _ := by rw [hsum] rw [hcoeff, hcast] push_cast ring -
jrawMass_lowertheorem — For integer order K that is strictly positive, the raw Jackson mass is at least four π thirds times K cubed.Proof (Lean source)
theorem jrawMass_lower (K : ℕ) (hK : 0 < K) : (4 * pi / 3) * (K : ℝ) ^ 3 ≤ jrawMass K := by rw [jrawMass_eq K hK] have hpi : 0 < pi := Real.pi_pos have hKR : (1 : ℝ) ≤ K := by exact_mod_cast hK nlinarith [sq_nonneg ((K : ℝ) - 1)] -
jrawMass_uppertheorem — For integer order K that is strictly positive, the raw Jackson mass is at most two π times K cubed.Proof (Lean source)
theorem jrawMass_upper (K : ℕ) (hK : 0 < K) : jrawMass K ≤ 2 * pi * (K : ℝ) ^ 3 := by rw [jrawMass_eq K hK] have hpi : 0 < pi := Real.pi_pos have hKR : (1 : ℝ) ≤ K := by exact_mod_cast hK have hsquare : 2 * (K : ℝ) ^ 2 + 1 ≤ 3 * (K : ℝ) ^ 2 := by nlinarith calc (2 * pi / 3) * (K : ℝ) * (2 * (K : ℝ) ^ 2 + 1) ≤ (2 * pi / 3) * (K : ℝ) * (3 * (K : ℝ) ^ 2) := by exact mul_le_mul_of_nonneg_left hsquare (by positivity) _ = 2 * pi * (K : ℝ) ^ 3 := by ring -
jrawMass_postheorem — For integer order K that is strictly positive, the raw Jackson mass is strictly positive.Proof (Lean source)
theorem jrawMass_pos (K : ℕ) (hK : 0 < K) : 0 < jrawMass K := by have hl := jrawMass_lower K hK have hpi : 0 < pi := Real.pi_pos have hKR : (0 : ℝ) < K := by exact_mod_cast hK exact lt_of_lt_of_le (by positivity) hl -
continuous_jacksontheorem — For integer order K, the normalized Jackson kernel is continuous on the real line.Proof (Lean source)
@[fun_prop] theorem continuous_jackson (K : ℕ) : Continuous (jackson K) := by unfold jackson fun_prop -
measurable_jacksontheorem — For integer order K, the normalized Jackson kernel is Borel measurable.Proof (Lean source)
@[measurability, fun_prop] theorem measurable_jackson (K : ℕ) : Measurable (jackson K) := by exact (continuous_jackson K).measurable -
integrableOn_jacksontheorem — For integer order K, the normalized Jackson kernel is integrable over the standard period.Proof (Lean source)
theorem integrableOn_jackson (K : ℕ) : IntegrableOn (jackson K) (Icc (-pi) pi) := by exact (continuous_jackson K).continuousOn.integrableOn_compact isCompact_Icc -
jackson_nonnegtheorem — At integer order K that is strictly positive and real argument t, the normalized Jackson kernel is nonnegative.Proof (Lean source)
theorem jackson_nonneg (K : ℕ) (hK : 0 < K) (t : ℝ) : 0 ≤ jackson K t := by exact div_nonneg (jraw_nonneg K t) (jrawMass_pos K hK).le -
jackson_integral_eq_onetheorem — For integer order K that is strictly positive, the normalized Jackson kernel has unit mass over the standard period. -
jackson_first_momenttheorem — For integer order K that is strictly positive, the normalized absolute first moment is at most thirty-two divided by K.Proof (Lean source)
theorem jackson_first_moment (K : ℕ) (hK : 0 < K) : (∫ t in Icc (-pi) pi, |t| * jackson K t) ≤ 32 / (K : ℝ) := by have hKR : (0 : ℝ) < K := by exact_mod_cast hK have hpoint (t : ℝ) : |t| ≤ (K : ℝ) / 4 * t ^ 2 + 1 / (K : ℝ) := by have hs := sq_nonneg ((K : ℝ) * |t| - 2) have ht2 : |t| ^ 2 = t ^ 2 := sq_abs t field_simp nlinarith have hiLeft : IntegrableOn (fun t => |t| * jackson K t) (Icc (-pi) pi) := (show Continuous (fun t => |t| * jackson K t) by fun_prop).continuousOn |>.integrableOn_compact isCompact_Icc have hiRight : IntegrableOn (fun t => ((K : ℝ) / 4 * t ^ 2 + 1 / (K : ℝ)) * jackson K t) (Icc (-pi) pi) := (show Continuous (fun t => ((K : ℝ) / 4 * t ^ 2 + 1 / (K : ℝ)) * jackson K t) by fun_prop).continuousOn |>.integrableOn_compact isCompact_Icc calc (∫ t in Icc (-pi) pi, |t| * jackson K t) ≤ ∫ t in Icc (-pi) pi, ((K : ℝ) / 4 * t ^ 2 + 1 / (K : ℝ)) * jackson K t := by exact MeasureTheory.setIntegral_mono_on hiLeft hiRight measurableSet_Icc (fun t ht => mul_le_mul_of_nonneg_right (hpoint t) (jackson_nonneg K hK t)) _ = (K : ℝ) / 4 * (∫ t in Icc (-pi) pi, t ^ 2 * jackson K t) + (1 / (K : ℝ)) * (∫ t in Icc (-pi) pi, jackson K t) := by have hi₁ : IntegrableOn (fun t => (K : ℝ) / 4 * (t ^ 2 * jackson K t)) (Icc (-pi) pi) := (show Continuous (fun t => (K : ℝ) / 4 * (t ^ 2 * jackson K t)) by fun_prop).continuousOn.integrableOn_compact isCompact_Icc have hi₂ : IntegrableOn (fun t => (1 / (K : ℝ)) * jackson K t) (Icc (-pi) pi) := (show Continuous (fun t => (1 / (K : ℝ)) * jackson K t) by fun_prop).continuousOn.integrableOn_compact isCompact_Icc rw [show (fun t => ((K : ℝ) / 4 * t ^ 2 + 1 / (K : ℝ)) * jackson K t) = fun t => (K : ℝ) / 4 * (t ^ 2 * jackson K t) + (1 / (K : ℝ)) * jackson K t by funext t; ring] rw [MeasureTheory.integral_add hi₁ hi₂, MeasureTheory.integral_const_mul, MeasureTheory.integral_const_mul] _ ≤ (K : ℝ) / 4 * (24 / (K : ℝ) ^ 2) + (1 / (K : ℝ)) * 1 := by gcongr · exact jackson_second_moment_aux K hK · exact (jackson_integral_eq_one K hK).le _ ≤ 32 / (K : ℝ) := by field_simp nlinarith -
jraw_isTrigPolyLEtheorem — For integer order K that is strictly positive, the raw Jackson kernel is a real trigonometric polynomial with frequency at most twice the predecessor of K.Proof (Lean source)
theorem jraw_isTrigPolyLE (K : ℕ) (hK : 0 < K) : IsTrigPolyLE (2 * (K - 1)) (jraw K) := by let U : Polynomial ℝ := Polynomial.Chebyshev.U ℝ ((K - 1 : ℕ) : ℤ) let p : Polynomial ℝ := U ^ 4 have hpneg : ∀ x : ℝ, p.eval (-x) = p.eval x := by intro x simp only [p, Polynomial.eval_pow, U] rw [Polynomial.Chebyshev.U_eval_neg] rw [mul_pow] have hsign : (((((K - 1 : ℕ) : ℤ)).negOnePow : ℤ) : ℝ) ^ 4 = 1 := by have habs : |(((((K - 1 : ℕ) : ℤ)).negOnePow : ℤ) : ℝ)| = 1 := by norm_cast exact Int.abs_negOnePow _ calc (((((K - 1 : ℕ) : ℤ)).negOnePow : ℤ) : ℝ) ^ 4 = |(((((K - 1 : ℕ) : ℤ)).negOnePow : ℤ) : ℝ) ^ 4| := by rw [abs_of_nonneg (by positivity)] _ = |(((((K - 1 : ℕ) : ℤ)).negOnePow : ℤ) : ℝ)| ^ 4 := by exact abs_pow _ _ _ = 1 := by rw [habs]; norm_num rw [hsign, one_mul] obtain ⟨q, hqdeg, hpq⟩ := exists_comp_sq_of_eval_neg_eq p hpneg let A : Polynomial ℝ := Polynomial.C (1 / 2 : ℝ) * (Polynomial.X + 1) let R : Polynomial ℝ := q.comp A have hAdeg : A.natDegree ≤ 1 := by dsimp [A] compute_degree have hpdeg : p.natDegree = 4 * (K - 1) := by dsimp [p, U] rw [Polynomial.natDegree_pow, Polynomial.Chebyshev.natDegree_U_natCast] have hRdeg : R.natDegree ≤ 2 * (K - 1) := by calc R.natDegree ≤ q.natDegree * A.natDegree := Polynomial.natDegree_comp_le _ ≤ q.natDegree * 1 := Nat.mul_le_mul_left _ hAdeg _ = q.natDegree := Nat.mul_one _ _ ≤ p.natDegree / 2 := hqdeg _ = 2 * (K - 1) := by rw [hpdeg]; omega apply (cosComp_isTrigPolyLE R (2 * (K - 1)) hRdeg).congr intro t rw [jraw_eq_chebyshev K hK t] have hhalf : cos (t / 2) ^ 2 = (cos t + 1) / 2 := by have hcos := Real.cos_two_mul (t / 2) rw [show 2 * (t / 2) = t by ring] at hcos nlinarith calc (Polynomial.Chebyshev.U ℝ ((K - 1 : ℕ) : ℤ)).eval (cos (t / 2)) ^ 4 = p.eval (cos (t / 2)) := by simp [p, U] _ = q.eval (cos (t / 2) ^ 2) := by rw [hpq, Polynomial.eval_comp, Polynomial.eval_pow, Polynomial.eval_X] _ = q.eval ((cos t + 1) / 2) := by rw [hhalf] _ = R.eval (cos t) := by simp [R, A, Polynomial.eval_comp] congr 1 ring -
jackson_isTrigPolyLEtheorem — For integer order K that is strictly positive, the normalized Jackson kernel is a real trigonometric polynomial with frequency at most twice the predecessor of K.Proof (Lean source)
theorem jackson_isTrigPolyLE (K : ℕ) (hK : 0 < K) : IsTrigPolyLE (2 * (K - 1)) (jackson K) := by apply (const_mul (jrawMass K)⁻¹ (jraw_isTrigPolyLE K hK)).congr intro t simp [jackson, div_eq_mul_inv, mul_comm]
Tensor 7 core · 9 supporting This module tensorizes the normalized Jackson kernel, proves product-integration and convolution identities on finite period boxes, extracts multivariate polynomials, and gives a quantitative Lipschitz approximation boun ★ tensorJackson_integral_eq_one
Finite tensor Jackson convolution and polynomial extraction
This module tensorizes the normalized Jackson kernel, proves product-integration and convolution identities on finite period boxes, extracts multivariate polynomials, and gives a quantitative Lipschitz approximation bound.
A finite dimension determines the standard period box, whose coordinates all lie between minus π and π.
A finite dimension determines the normalized cube, whose coordinates all lie between minus one and one.
An integer kernel order, a finite dimension, and a point in period coordinates determine the tensor Jackson kernel, the product of the one-dimensional kernels across coordinates. For positive order it is a normalized kernel in every dimension. At order zero it inherits the degeneracy of the one-dimensional kernel in positive dimension (it vanishes), while in dimension zero it is the empty product, equal to one with unit mass, for every order.
A finite dimension and a point in period coordinates determine the coordinatewise cosine point.
A finite dimension, a real function on normalized coordinates, and a point in period coordinates determine the cosine lift of the function by coordinatewise cosine precomposition.
A finite dimension, an integer kernel order, a real function on normalized coordinates, and a point in period coordinates determine the tensor Jackson convolution, the kernel-weighted integral of the translated cosine lift over the period box. It is a kernel-weighted average for positive order when that integrand is integrable; the integral is Lean's Bochner integral, which is zero for a non-integrable integrand, and at order zero in positive dimension the kernel vanishes and so does the convolution (in dimension zero the kernel is the empty product, equal to one).
Definition (Lean source)
For a finite dimension and integer order K that is strictly positive, the tensor Jackson kernel has unit mass over the period box.
Formal statement
Proof (Lean source)
9 supporting declarations (lemmas, instances)
-
cosPoint_mem_normalizedCubetheorem — For a finite dimension and a point in period coordinates, the coordinatewise cosine point lies in the normalized cube.Proof (Lean source)
theorem cosPoint_mem_normalizedCube {d : ℕ} (t : Fin d → ℝ) : cosPoint t ∈ normalizedCube d := by intro i exact ⟨Real.neg_one_le_cos (t i), Real.cos_le_one (t i)⟩ -
tensorJackson_nonnegtheorem — For a finite dimension, integer order K that is strictly positive, and a point in period coordinates, the tensor Jackson kernel is nonnegative.Proof (Lean source)
theorem tensorJackson_nonneg {d K : ℕ} (hK : 0 < K) (u : Fin d → ℝ) : 0 ≤ tensorJackson K d u := by exact Finset.prod_nonneg fun i _ ↦ jackson_nonneg K hK (u i) -
measurable_tensorJacksontheorem — For integer order K and a finite dimension, the tensor Jackson kernel is measurable.Proof (Lean source)
@[measurability, fun_prop] theorem measurable_tensorJackson (K d : ℕ) : Measurable (tensorJackson K d) := by unfold tensorJackson fun_prop -
integrableOn_tensorJacksontheorem — For integer order K and a finite dimension, the tensor Jackson kernel is integrable over the standard period box.Proof (Lean source)
theorem integrableOn_tensorJackson (K d : ℕ) : IntegrableOn (tensorJackson K d) (periodBox d) := by change Integrable (fun u : Fin d → ℝ ↦ ∏ i, jackson K (u i)) (volume.restrict (periodBox d)) rw [show periodBox d = Set.univ.pi (fun _ ↦ Icc (-pi) pi) by ext u simp only [periodBox, Set.mem_ofPred_eq, Set.mem_pi, Set.mem_univ, true_implies, Set.mem_Icc], volume_pi, Measure.restrict_pi_pi] exact Integrable.fintype_prod fun _ ↦ integrableOn_jackson K -
integral_periodBox_prodtheorem — Given a finite dimension, one integrand for each coordinate, and integrability of every coordinate integrand over the standard period, the integral of their product over the period box equals the product of their one-dimensional integrals.hypothesesProof (Lean source)
theorem integral_periodBox_prod {d : ℕ} (g : Fin d → ℝ → ℝ) (hg : ∀ i, IntegrableOn (g i) (Icc (-pi) pi)) : (∫ u in periodBox d, ∏ i, g i (u i)) = ∏ i, ∫ t in Icc (-pi) pi, g i t := by rw [show periodBox d = Set.univ.pi (fun _ ↦ Icc (-pi) pi) by ext u simp only [periodBox, Set.mem_ofPred_eq, Set.mem_pi, Set.mem_univ, true_implies, Set.mem_Icc], volume_pi, Measure.restrict_pi_pi] exact MeasureTheory.integral_fintype_prod_eq_prod g -
tensorJackson_first_moment_eqtheorem — For a finite dimension, integer order K that is strictly positive, and a selected coordinate, the tensor kernel's absolute first moment in that coordinate equals the one-dimensional first moment.hypothesesProof (Lean source)
theorem tensorJackson_first_moment_eq {d K : ℕ} (hK : 0 < K) (i : Fin d) : (∫ u in periodBox d, |u i| * tensorJackson K d u) = ∫ t in Icc (-pi) pi, |t| * jackson K t := by classical let g : Fin d → ℝ → ℝ := fun j t ↦ (if j = i then |t| else 1) * jackson K t have hi : IntegrableOn (fun t : ℝ ↦ |t| * jackson K t) (Icc (-pi) pi) := ((continuous_abs.comp continuous_id).mul (continuous_jackson K)).continuousOn.integrableOn_compact isCompact_Icc have hg : ∀ j, IntegrableOn (g j) (Icc (-pi) pi) := by intro j by_cases hji : j = i · simpa [g, hji] using hi · simpa [g, hji] using integrableOn_jackson K rw [show (fun u : Fin d → ℝ ↦ |u i| * tensorJackson K d u) = fun u ↦ ∏ j, g j (u j) by funext u symm calc (∏ j, g j (u j)) = (∏ j, if j = i then |u j| else 1) * ∏ j, jackson K (u j) := by simp only [g, Finset.prod_mul_distrib] _ = |u i| * tensorJackson K d u := by simp [tensorJackson], integral_periodBox_prod g hg] have hmass : (∫ t in Icc (-pi) pi, jackson K t) = 1 := jackson_integral_eq_one K hK have hcoord : ∀ j, (∫ t in Icc (-pi) pi, g j t) = if j = i then (∫ t in Icc (-pi) pi, |t| * jackson K t) else 1 := by intro j by_cases hji : j = i <;> simp [g, hji, hmass] calc (∏ j, ∫ t in Icc (-pi) pi, g j t) = ∏ j, if j = i then (∫ t in Icc (-pi) pi, |t| * jackson K t) else 1 := Finset.prod_congr rfl fun j _ ↦ hcoord j _ = ∫ t in Icc (-pi) pi, |t| * jackson K t := by simp -
tensorJackson_second_moment_eqtheorem — For a finite dimension, integer order K that is strictly positive, and a selected coordinate, the tensor kernel's second moment in that coordinate equals the one-dimensional second moment.hypothesesProof (Lean source)
theorem tensorJackson_second_moment_eq {d K : ℕ} (hK : 0 < K) (i : Fin d) : (∫ u in periodBox d, (u i) ^ 2 * tensorJackson K d u) = ∫ t in Icc (-pi) pi, t ^ 2 * jackson K t := by classical let g : Fin d → ℝ → ℝ := fun j t ↦ (if j = i then t ^ 2 else 1) * jackson K t have hi : IntegrableOn (fun t : ℝ ↦ t ^ 2 * jackson K t) (Icc (-pi) pi) := ((continuous_id.pow 2).mul (continuous_jackson K)).continuousOn.integrableOn_compact isCompact_Icc have hg : ∀ j, IntegrableOn (g j) (Icc (-pi) pi) := by intro j by_cases hji : j = i · simpa [g, hji] using hi · simpa [g, hji] using integrableOn_jackson K rw [show (fun u : Fin d → ℝ ↦ (u i) ^ 2 * tensorJackson K d u) = fun u ↦ ∏ j, g j (u j) by funext u symm calc (∏ j, g j (u j)) = (∏ j, if j = i then (u j) ^ 2 else 1) * ∏ j, jackson K (u j) := by simp only [g, Finset.prod_mul_distrib] _ = (u i) ^ 2 * tensorJackson K d u := by simp [tensorJackson], integral_periodBox_prod g hg] have hmass : (∫ t in Icc (-pi) pi, jackson K t) = 1 := jackson_integral_eq_one K hK have hcoord : ∀ j, (∫ t in Icc (-pi) pi, g j t) = if j = i then (∫ t in Icc (-pi) pi, t ^ 2 * jackson K t) else 1 := by intro j by_cases hji : j = i <;> simp [g, hji, hmass] calc (∏ j, ∫ t in Icc (-pi) pi, g j t) = ∏ j, if j = i then (∫ t in Icc (-pi) pi, t ^ 2 * jackson K t) else 1 := Finset.prod_congr rfl fun j _ ↦ hcoord j _ = ∫ t in Icc (-pi) pi, t ^ 2 * jackson K t := by simp -
tensorConvolution_nonnegtheorem — For a finite dimension, integer order K that is strictly positive, a function that is nonnegative throughout the normalized cube, and a selected point in period coordinates, the tensor convolution is nonnegative at that point.hypothesesconclusion0 ≤ tensorConvolution K f xProof (Lean source)
theorem tensorConvolution_nonneg {d K : ℕ} (hK : 0 < K) {f : (Fin d → ℝ) → ℝ} (hf : ∀ z ∈ normalizedCube d, 0 ≤ f z) (x : Fin d → ℝ) : 0 ≤ tensorConvolution K f x := by rw [tensorConvolution] exact integral_nonneg fun u ↦ mul_nonneg (hf _ (cosPoint_mem_normalizedCube _)) (tensorJackson_nonneg hK u) -
tensorConvolution_consttheorem — For a finite dimension, integer order K that is strictly positive, a real constant, and a point in period coordinates, tensor convolution preserves the constant function.Proof (Lean source)
theorem tensorConvolution_const {d K : ℕ} (hK : 0 < K) (c : ℝ) (x : Fin d → ℝ) : tensorConvolution K (fun _ => c) x = c := by unfold tensorConvolution rw [integral_const_mul, tensorJackson_integral_eq_one hK, mul_one]
CoefficientEnvelopeFour 2 core · 0 supporting 1 to review This module bounds the coefficient one-norm of the four-variable polynomial extracted from a uniformly bounded tensor Jackson convolution, while retaining coordinate and total-degree control. ★ tensorConvolution_exists_mvPolynomial_four_coeffBound
A four-dimensional coefficient envelope for Jackson approximation
This module bounds the coefficient one-norm of the four-variable polynomial extracted from a uniformly bounded tensor Jackson convolution, while retaining coordinate and total-degree control.
A finite dimension and a real multivariate polynomial determine its coefficient one-norm, the sum of the absolute values of all monomial coefficients.
Definition (Lean source)
For integer order K that is strictly positive, a function on four normalized coordinates that is continuous on the normalized cube, a nonnegative uniform bound, and the corresponding bound on the function throughout the cube, its tensor convolution has a four-variable polynomial representation with the stated support, degree, and exponential coefficient one-norm bounds.
Formal statement
Proof (Lean source)
AffineFour 4 core · 7 supporting 1 to review This module transports tensor Jackson approximation between the normalized cube and a rectangle with positive radii (the raw normalization and rectangle definitions accept any radii; the transport theorems assume positiv ★ affineJackson_approx_four
Affine Jackson approximation on four-dimensional rectangles
This module transports tensor Jackson approximation between the normalized cube and a rectangle with positive radii (the raw normalization and rectangle definitions accept any radii; the transport theorems assume positivity), preserving evaluation, degree, approximation, and coefficient bounds.
A finite dimension, a rectangle center, coordinate radii, and normalized coordinates determine the corresponding point under the center-plus-radius affine map.
A finite dimension, a rectangle center, coordinate radii, and a point in the rectangle's ambient space determine its normalized coordinates by subtracting the center and dividing coordinatewise by the radii. This is a normalization for positive radii, as assumed by the approximation results; a zero radius gives coordinate zero by the division convention.
A finite dimension, a center, and coordinate radii determine the closed centered rectangle consisting of points whose coordinatewise distance from the center does not exceed the corresponding radius. No sign condition is imposed on the radii; a negative radius makes the set empty, and the approximation results assume positive radii.
For integer order K that is strictly positive, a rectangle center, positive coordinate radii, a function, a nonnegative Lipschitz constant, continuity on the centered rectangle, and the stated Lipschitz bound in normalized coordinates, there is a degree-controlled polynomial that approximates the function throughout the rectangle within one hundred twenty-eight times the Lipschitz constant divided by K.
Formal statement
Proof (Lean source)
7 supporting declarations (lemmas, instances)
-
normalizedPoint_affinePointtheorem — For a finite dimension, a center, coordinate radii, and normalized coordinates, if every radius is positive, then normalizing the affine image recovers the original normalized coordinates.hypothesesconclusionnormalizedPoint c r (affinePoint c r z) = zProof (Lean source)
theorem normalizedPoint_affinePoint {d : ℕ} (c r z : Fin d → ℝ) (hr : ∀ i, 0 < r i) : normalizedPoint c r (affinePoint c r z) = z := by funext i simp only [normalizedPoint, affinePoint] field_simp [ne_of_gt (hr i)] ring -
affinePoint_normalizedPointtheorem — For a finite dimension, a center, coordinate radii, and a point, if every radius is positive, then applying the affine map to the normalized point recovers the original point.hypothesesconclusionaffinePoint c r (normalizedPoint c r y) = yProof (Lean source)
theorem affinePoint_normalizedPoint {d : ℕ} (c r y : Fin d → ℝ) (hr : ∀ i, 0 < r i) : affinePoint c r (normalizedPoint c r y) = y := by funext i simp only [affinePoint, normalizedPoint] field_simp [ne_of_gt (hr i)] ring -
affinePoint_mem_centeredRectangletheorem — For a finite dimension, a center, coordinate radii, and normalized coordinates, if every radius is nonnegative and the normalized point lies in the normalized cube, then its affine image lies in the centered rectangle.hypothesesconclusionaffinePoint c r z ∈ centeredRectangle c rProof (Lean source)
theorem affinePoint_mem_centeredRectangle {d : ℕ} (c r z : Fin d → ℝ) (hr : ∀ i, 0 < r i) (hz : z ∈ normalizedCube d) : affinePoint c r z ∈ centeredRectangle c r := by intro i simp only [affinePoint] rw [add_sub_cancel_left, abs_mul, abs_of_pos (hr i)] exact mul_le_of_le_one_right (le_of_lt (hr i)) (abs_le.mpr (hz i)) -
normalizedPoint_mem_normalizedCubetheorem — For a finite dimension, a center, coordinate radii, and a point, if every radius is positive and the point lies in the centered rectangle, then its normalized coordinates lie in the normalized cube.hypothesesconclusionnormalizedPoint c r y ∈ normalizedCube dProof (Lean source)
theorem normalizedPoint_mem_normalizedCube {d : ℕ} (c r y : Fin d → ℝ) (hr : ∀ i, 0 < r i) (hy : y ∈ centeredRectangle c r) : normalizedPoint c r y ∈ normalizedCube d := by intro i rw [show normalizedPoint c r y i = (y i - c i) / r i by rfl, Set.mem_Icc] apply abs_le.mp rw [abs_div, abs_of_pos (hr i), div_le_one (hr i)] exact hy i -
mvPolynomial_affine_substitution_fourtheorem — Given a four-variable polynomial, a center, coordinate radii that are strictly positive, a coordinate-degree limit, and the corresponding support bound, affine substitution produces a four-variable polynomial with the stated evaluation, support, total-degree, and coefficient one-norm bounds.hypothesesq :MvPolynomial (Fin 4) ℝc r :Fin 4 → ℝn :ℕhr :∀ i, 0 < r ihqcoord :∀ m ∈ q.support, ∀ i, m i ≤ nconclusion∃ p : MvPolynomial (Fin 4) ℝ,conclusion 2m ∈ p.support :i :m i ≤ nconclusion 3p.totalDegree ≤ q.totalDegreeProof (Lean source)
theorem mvPolynomial_affine_substitution_four (q : MvPolynomial (Fin 4) ℝ) (c r : Fin 4 → ℝ) (n : ℕ) (hr : ∀ i, 0 < r i) (hqcoord : ∀ m ∈ q.support, ∀ i, m i ≤ n) : ∃ p : MvPolynomial (Fin 4) ℝ, (∀ y, eval y p = eval (normalizedPoint c r y) q) ∧ (∀ m ∈ p.support, ∀ i, m i ≤ n) ∧ p.totalDegree ≤ q.totalDegree ∧ mvCoeffL1 p ≤ mvCoeffL1 q * ∏ i : Fin 4, (max 1 ((1 + |c i|) / r i)) ^ n := by classical let g : Fin 4 → MvPolynomial (Fin 4) ℝ := fun i => (MvPolynomial.X i - MvPolynomial.C (c i)) * MvPolynomial.C (r i)⁻¹ let p := MvPolynomial.bind₁ g q have hp_sum : p = ∑ m ∈ q.support, MvPolynomial.bind₁ g (monomial m (q.coeff m)) := by dsimp [p] conv_lhs => rw [q.as_sum] simp only [map_sum] have hcoord_term (m : Fin 4 →₀ ℕ) (a : ℝ) (i : Fin 4) : (MvPolynomial.bind₁ g (monomial m a)).degreeOf i ≤ m i := by rw [MvPolynomial.bind₁_monomial] calc (MvPolynomial.C a * ∏ j ∈ m.support, g j ^ m j : MvPolynomial (Fin 4) ℝ).degreeOf i ≤ (MvPolynomial.C a : MvPolynomial (Fin 4) ℝ).degreeOf i + (∏ j ∈ m.support, g j ^ m j : MvPolynomial (Fin 4) ℝ).degreeOf i := MvPolynomial.degreeOf_mul_le _ _ _ _ ≤ 0 + ∑ j ∈ m.support, (g j ^ m j : MvPolynomial (Fin 4) ℝ).degreeOf i := by gcongr · simp · exact MvPolynomial.degreeOf_prod_le _ _ _ _ ≤ ∑ j ∈ m.support, m j * (if i = j then 1 else 0) := by simp only [zero_add] gcongr with j hj exact (MvPolynomial.degreeOf_pow_le _ _ _).trans (Nat.mul_le_mul_left _ (by dsimp [g] exact affineVariable_degreeOf_le c r i j)) _ = m i := by by_cases hi : i ∈ m.support · rw [Finset.sum_eq_single i] · simp · intro j hj hji simp [Ne.symm hji] · exact fun h => (h hi).elim · have hmi : m i = 0 := Finsupp.notMem_support_iff.mp hi rw [hmi] apply Finset.sum_eq_zero intro j hj have hji : i ≠ j := by intro hij subst j exact hi hj simp [hji] have htotal_term (m : Fin 4 →₀ ℕ) (a : ℝ) : (MvPolynomial.bind₁ g (monomial m a)).totalDegree ≤ m.sum fun _ e => e := by rw [MvPolynomial.bind₁_monomial] calc (MvPolynomial.C a * ∏ j ∈ m.support, g j ^ m j : MvPolynomial (Fin 4) ℝ).totalDegree ≤ (MvPolynomial.C a : MvPolynomial (Fin 4) ℝ).totalDegree + (∏ j ∈ m.support, g j ^ m j : MvPolynomial (Fin 4) ℝ).totalDegree := MvPolynomial.totalDegree_mul _ _ _ ≤ 0 + ∑ j ∈ m.support, (g j ^ m j : MvPolynomial (Fin 4) ℝ).totalDegree := by gcongr · simp · exact MvPolynomial.totalDegree_finsetProd _ _ _ ≤ ∑ j ∈ m.support, m j := by simp only [zero_add] gcongr with j hj exact (MvPolynomial.totalDegree_pow _ _).trans (by simpa [g] using Nat.mul_le_mul_left (m j) (affineVariable_totalDegree_le c r j)) _ = m.sum fun _ e => e := by rfl refine ⟨p, ?_, ?_, ?_, ?_⟩ · intro y dsimp [p] rw [← MvPolynomial.aeval_eq_eval, MvPolynomial.aeval_bind₁, MvPolynomial.aeval_eq_eval] apply congrArg (fun z => eval z q) funext i simp [g, normalizedPoint, div_eq_mul_inv] · intro m hm i apply (MvPolynomial.monomial_le_degreeOf i hm).trans rw [hp_sum] refine (MvPolynomial.degreeOf_sum_le i q.support (fun m => MvPolynomial.bind₁ g (monomial m (q.coeff m)))).trans ?_ exact Finset.sup_le fun m hm => (hcoord_term m (q.coeff m) i).trans (hqcoord m hm i) · rw [hp_sum] refine (MvPolynomial.totalDegree_finsetSum q.support (fun m => MvPolynomial.bind₁ g (monomial m (q.coeff m)))).trans ?_ exact Finset.sup_le fun m hm => (htotal_term m (q.coeff m)).trans (MvPolynomial.le_totalDegree hm) · let A : Fin 4 → ℝ := fun i => (1 + |c i|) / r i let M : Fin 4 → ℝ := fun i => max 1 (A i) have hA (i : Fin 4) : 0 ≤ A i := by dsimp [A] exact div_nonneg (by positivity) (le_of_lt (hr i)) have hAM (i : Fin 4) : A i ≤ M i := by exact le_max_right _ _ have hM (i : Fin 4) : 1 ≤ M i := by exact le_max_left _ _ have hg_l1 (i : Fin 4) : mvCoeffL1 (g i) ≤ A i := by dsimp [g, A] calc mvCoeffL1 ((MvPolynomial.X i - MvPolynomial.C (c i)) * MvPolynomial.C (r i)⁻¹ : MvPolynomial (Fin 4) ℝ) ≤ mvCoeffL1 (MvPolynomial.X i - MvPolynomial.C (c i) : MvPolynomial (Fin 4) ℝ) * mvCoeffL1 (MvPolynomial.C (r i)⁻¹ : MvPolynomial (Fin 4) ℝ) := mvCoeffL1_mul_le _ _ _ ≤ (mvCoeffL1 (MvPolynomial.X i : MvPolynomial (Fin 4) ℝ) + mvCoeffL1 (-MvPolynomial.C (c i) : MvPolynomial (Fin 4) ℝ)) * mvCoeffL1 (MvPolynomial.C (r i)⁻¹ : MvPolynomial (Fin 4) ℝ) := by apply mul_le_mul_of_nonneg_right · simpa [sub_eq_add_neg] using mvCoeffL1_add_le (MvPolynomial.X i : MvPolynomial (Fin 4) ℝ) (-MvPolynomial.C (c i)) · unfold mvCoeffL1 positivity _ = (1 + |c i|) / r i := by rw [mvCoeffL1_X, mvCoeffL1_neg, mvCoeffL1_C, mvCoeffL1_C, abs_inv, abs_of_pos (hr i)] simp [div_eq_mul_inv] have hterm_l1 (m : Fin 4 →₀ ℕ) (a : ℝ) : mvCoeffL1 (MvPolynomial.bind₁ g (monomial m a)) ≤ |a| * ∏ i ∈ m.support, A i ^ m i := by rw [MvPolynomial.bind₁_monomial] calc mvCoeffL1 (MvPolynomial.C a * ∏ i ∈ m.support, g i ^ m i) ≤ mvCoeffL1 (MvPolynomial.C a : MvPolynomial (Fin 4) ℝ) * mvCoeffL1 (∏ i ∈ m.support, g i ^ m i) := mvCoeffL1_mul_le _ _ _ ≤ |a| * ∏ i ∈ m.support, mvCoeffL1 (g i ^ m i) := by rw [mvCoeffL1_C] exact mul_le_mul_of_nonneg_left (mvCoeffL1_finsetProd_le _ _) (abs_nonneg a) _ ≤ |a| * ∏ i ∈ m.support, mvCoeffL1 (g i) ^ m i := by apply mul_le_mul_of_nonneg_left _ (abs_nonneg a) apply Finset.prod_le_prod · intro i hi unfold mvCoeffL1 positivity · intro i hi exact mvCoeffL1_pow_le _ _ _ ≤ |a| * ∏ i ∈ m.support, A i ^ m i := by apply mul_le_mul_of_nonneg_left _ (abs_nonneg a) apply Finset.prod_le_prod · intro i hi exact pow_nonneg (by unfold mvCoeffL1; positivity) _ · intro i hi exact pow_le_pow_left₀ (by unfold mvCoeffL1; positivity) (hg_l1 i) _ have hfactor (m : Fin 4 →₀ ℕ) (hm : m ∈ q.support) : (∏ i ∈ m.support, A i ^ m i) ≤ ∏ i : Fin 4, M i ^ n := by calc (∏ i ∈ m.support, A i ^ m i) ≤ ∏ i ∈ m.support, M i ^ n := by apply Finset.prod_le_prod · intro i hi exact pow_nonneg (hA i) _ · intro i hi exact (pow_le_pow_left₀ (hA i) (hAM i) _).trans (pow_le_pow_right₀ (hM i) (hqcoord m hm i)) _ ≤ ∏ i : Fin 4, M i ^ n := by apply Finset.prod_le_prod_of_subset_of_one_le (Finset.subset_univ _) · intro i hi positivity · intro i hi hnot exact one_le_pow₀ (hM i) rw [hp_sum] calc mvCoeffL1 (∑ m ∈ q.support, MvPolynomial.bind₁ g (monomial m (q.coeff m))) ≤ ∑ m ∈ q.support, mvCoeffL1 (MvPolynomial.bind₁ g (monomial m (q.coeff m))) := mvCoeffL1_finsetSum_le _ _ _ ≤ ∑ m ∈ q.support, |q.coeff m| * ∏ i : Fin 4, M i ^ n := by gcongr with m hm exact (hterm_l1 m (q.coeff m)).trans (mul_le_mul_of_nonneg_left (hfactor m hm) (abs_nonneg _)) _ = mvCoeffL1 q * ∏ i : Fin 4, M i ^ n := by rw [← Finset.sum_mul] rfl _ = mvCoeffL1 q * ∏ i : Fin 4, (max 1 ((1 + |c i|) / r i)) ^ n := by rfl -
affineJackson_exists_mvPolynomial_fourtheorem — For integer order K that is strictly positive, a rectangle center, positive coordinate radii, and a function that is continuous on the centered rectangle, the affine Jackson construction has a four-variable polynomial representation with the stated evaluation, support, and degree bounds.hypothesesK :ℕhK :0 < Kc r :Fin 4 → ℝhr :∀ i, 0 < r if :(Fin 4 → ℝ) → ℝhf :ContinuousOn f (centeredRectangle c r)conclusion∃ p q : MvPolynomial (Fin 4) ℝ,conclusion 3m ∈ p.support :i :m i ≤ 2 * (K - 1)conclusion 4p.totalDegree ≤ 8 * (K - 1)Proof (Lean source)
theorem affineJackson_exists_mvPolynomial_four {K : ℕ} (hK : 0 < K) (c r : Fin 4 → ℝ) (hr : ∀ i, 0 < r i) (f : (Fin 4 → ℝ) → ℝ) (hf : ContinuousOn f (centeredRectangle c r)) : ∃ p q : MvPolynomial (Fin 4) ℝ, (∀ y, eval y p = eval (normalizedPoint c r y) q) ∧ (∀ x, eval (cosPoint x) q = tensorConvolution K (fun z => f (affinePoint c r z)) x) ∧ (∀ m ∈ p.support, ∀ i, m i ≤ 2 * (K - 1)) ∧ p.totalDegree ≤ 8 * (K - 1) := by /- Pull `f` back along `affinePoint`, proving continuity on `normalizedCube 4` with `ContinuousOn.comp` and `affinePoint_mem_centeredRectangle`. Apply `tensorConvolution_exists_mvPolynomial`, then apply `mvPolynomial_affine_substitution_four` to its output with `n = 2 * (K - 1)`. The substitution evaluation identity is exactly the first conjunct; its support and total-degree conclusions, together with `4 * (2 * (K - 1)) = 8 * (K - 1)`, discharge the remaining conjuncts. -/ have haff : Continuous (affinePoint c r) := by apply continuous_pi intro i exact continuous_const.add (continuous_const.mul (continuous_apply i)) have hpull : ContinuousOn (fun z => f (affinePoint c r z)) (normalizedCube 4) := hf.comp haff.continuousOn (fun z hz => affinePoint_mem_centeredRectangle c r z hr hz) obtain ⟨q, hqeval, hqcoord, hqtotal⟩ := tensorConvolution_exists_mvPolynomial hK (fun z => f (affinePoint c r z)) hpull obtain ⟨p, hpeval, hpcoord, hptotal, _⟩ := mvPolynomial_affine_substitution_four q c r (2 * (K - 1)) hr hqcoord refine ⟨p, q, hpeval, hqeval, hpcoord, ?_⟩ omega -
affineJackson_coeffBound_fourtheorem — For integer order K that is strictly positive, a rectangle center, positive coordinate radii, a function, a nonnegative uniform bound, continuity on the centered rectangle, and the corresponding uniform bound throughout the rectangle, the affine Jackson construction has a four-variable polynomial representation with the stated evaluation, support, degree, and exponential coefficient one-norm bounds.hypothesesK :ℕhK :0 < Kc r :Fin 4 → ℝhr :∀ i, 0 < r if :(Fin 4 → ℝ) → ℝB :ℝhB :0 ≤ Bhf :ContinuousOn f (centeredRectangle c r)hbound :∀ y ∈ centeredRectangle c r, |f y| ≤ Bconclusion∃ p q : MvPolynomial (Fin 4) ℝ,conclusion 3m ∈ p.support :i :m i ≤ 2 * (K - 1)conclusion 4p.totalDegree ≤ 8 * (K - 1)Proof (Lean source)
theorem affineJackson_coeffBound_four {K : ℕ} (hK : 0 < K) (c r : Fin 4 → ℝ) (hr : ∀ i, 0 < r i) (f : (Fin 4 → ℝ) → ℝ) (B : ℝ) (hB : 0 ≤ B) (hf : ContinuousOn f (centeredRectangle c r)) (hbound : ∀ y ∈ centeredRectangle c r, |f y| ≤ B) : ∃ p q : MvPolynomial (Fin 4) ℝ, (∀ y, eval y p = eval (normalizedPoint c r y) q) ∧ (∀ x, eval (cosPoint x) q = tensorConvolution K (fun z => f (affinePoint c r z)) x) ∧ (∀ m ∈ p.support, ∀ i, m i ≤ 2 * (K - 1)) ∧ p.totalDegree ≤ 8 * (K - 1) ∧ mvCoeffL1 p ≤ (2 : ℝ) ^ (40 * K + 20) * B * ∏ i : Fin 4, (max 1 ((1 + |c i|) / r i)) ^ (2 * (K - 1)) := by /- Pull `f` back along `affinePoint`; rectangle boundedness restricts to cube boundedness by `affinePoint_mem_centeredRectangle`. Obtain `q` from `tensorConvolution_exists_mvPolynomial_four_coeffBound`, then substitute it using `mvPolynomial_affine_substitution_four` at degree `2 * (K - 1)`. Combine the two coefficient inequalities by multiplication with the nonnegative finite product. Reuse the substitution support/total-degree conclusions and the tensor evaluation identity without reconstructing a different representative. -/ have haff : Continuous (affinePoint c r) := by apply continuous_pi intro i exact continuous_const.add (continuous_const.mul (continuous_apply i)) have hpull : ContinuousOn (fun z => f (affinePoint c r z)) (normalizedCube 4) := hf.comp haff.continuousOn (fun z hz => affinePoint_mem_centeredRectangle c r z hr hz) have hbound_pull : ∀ z ∈ normalizedCube 4, |f (affinePoint c r z)| ≤ B := by intro z hz exact hbound (affinePoint c r z) (affinePoint_mem_centeredRectangle c r z hr hz) obtain ⟨q, hqeval, hqcoord, hqtotal, hqcoeff⟩ := tensorConvolution_exists_mvPolynomial_four_coeffBound hK (fun z => f (affinePoint c r z)) B hB hpull hbound_pull obtain ⟨p, hpeval, hpcoord, hptotal, hpcoeff⟩ := mvPolynomial_affine_substitution_four q c r (2 * (K - 1)) hr hqcoord refine ⟨p, q, hpeval, hqeval, hpcoord, ?_, ?_⟩ · omega · have hfactor : 0 ≤ ∏ i : Fin 4, (max 1 ((1 + |c i|) / r i)) ^ (2 * (K - 1)) := by positivity exact hpcoeff.trans (mul_le_mul_of_nonneg_right hqcoeff hfactor)
TensorExtraction 1 core · 1 supporting This module proves the periodic translation and coordinatewise trigonometric structure of tensor Jackson convolution, extracts a multivariate algebraic polynomial, and derives its Lipschitz approximation error. ★ tensorConvolution_approx_lipschitz
Coordinatewise extraction of tensor Jackson convolutions
This module proves the periodic translation and coordinatewise trigonometric structure of tensor Jackson convolution, extracts a multivariate algebraic polynomial, and derives its Lipschitz approximation error.
For a finite dimension, integer order K that is strictly positive, a function, a nonnegative Lipschitz constant, continuity on the normalized cube, the stated local coordinatewise Lipschitz bound, and a point in period coordinates, tensor Jackson convolution approximates the cosine lift there within thirty-two times dimension times the Lipschitz constant divided by K.
Formal statement
Proof (Lean source)
1 supporting declaration (lemmas, instances)
-
tensorConvolution_exists_mvPolynomialtheorem — For a finite dimension, integer order K that is strictly positive, and a function that is continuous on the normalized cube, its tensor Jackson convolution is represented after the cosine change of coordinates by a multivariate polynomial with the stated coordinate and total-degree bounds.hypothesesconclusion∃ p : MvPolynomial (Fin d) ℝ,conclusion 2m ∈ p.support :i :m i ≤ 2 * (K - 1)conclusion 3p.totalDegree ≤ d * (2 * (K - 1))Proof (Lean source)
theorem tensorConvolution_exists_mvPolynomial {d K : ℕ} (hK : 0 < K) (f : (Fin d → ℝ) → ℝ) (hf : ContinuousOn f (normalizedCube d)) : ∃ p : MvPolynomial (Fin d) ℝ, (∀ x : Fin d → ℝ, eval (cosPoint x) p = tensorConvolution K f x) ∧ (∀ m ∈ p.support, ∀ i, m i ≤ 2 * (K - 1)) ∧ p.totalDegree ≤ d * (2 * (K - 1)) := by apply exists_mvPolynomial_of_coord_even_trig (q := tensorConvolution K f) · exact fun i x => tensorConvolution_coord_trig hK f hf x i · intro i x t have h := tensorConvolution_coord_even hK f hf (update x i t) i simpa [update] using h
TrigExtraction 3 core · 3 supporting This module converts finite even trigonometric polynomials into ordinary polynomials in the cosine coordinate, proves the converse construction, and controls coefficient growth in the Chebyshev basis. ★ even_trigPoly_exists_polynomial
Extracting algebraic polynomials from even trigonometric polynomials
This module converts finite even trigonometric polynomials into ordinary polynomials in the cosine coordinate, proves the converse construction, and controls coefficient growth in the Chebyshev basis.
A frequency limit and a real-valued function determine the assertion that the function is a real trigonometric polynomial within that limit. It is an abbreviation of Causalean.Mathlib.Analysis.BernsteinSzegoTrig.IsTrigPolyLE, re-exposed in this namespace.
Definition (Lean source)
A real polynomial determines its coefficient one-norm, the sum of the absolute values of its nonzero coefficients.
Definition (Lean source)
Given a frequency limit and a real function, if the function is a trigonometric polynomial within that limit and is symmetric about zero, then it is an ordinary polynomial in the cosine coordinate with degree at most that limit.
Formal statement
Proof (Lean source)
3 supporting declarations (lemmas, instances)
-
polynomial_cos_is_even_trigPolytheorem — Given a frequency limit and a real polynomial whose degree is at most that limit, composition with cosine is an even trigonometric polynomial within the same frequency limit.hypothesesProof (Lean source)
theorem polynomial_cos_is_even_trigPoly {n : ℕ} (p : Polynomial ℝ) (hp : p.natDegree ≤ n) : IsTrigPolyLE n (fun t => p.eval (cos t)) ∧ Even (fun t => p.eval (cos t)) := by refine ⟨Causalean.Mathlib.Analysis.BernsteinSzegoTrig.cosComp_isTrigPolyLE p n hp, ?_⟩ intro t simp -
chebyshev_coeffL1_letheorem — For a nonnegative integer index, the coefficient one-norm of the corresponding first-kind Chebyshev polynomial is at most three to that index.Proof (Lean source)
theorem chebyshev_coeffL1_le (n : ℕ) : polyCoeffL1 (T ℝ (n : ℤ)) ≤ (3 : ℝ) ^ n := by induction n using Nat.twoStepInduction with | zero => change polyCoeffL1 (T ℝ 0) ≤ 1 rw [Polynomial.Chebyshev.T_zero, polyCoeffL1_eq_sum_range_of_natDegree_lt (1 : Polynomial ℝ) (m := 1) (by simp)] simp | one => norm_num only [cast_one, pow_one] rw [Polynomial.Chebyshev.T_one, polyCoeffL1_eq_sum_range_of_natDegree_lt Polynomial.X (m := 2) (by simp)] norm_num [Finset.sum_range_succ, Polynomial.coeff_X] | more n hn hn1 => have hT : T ℝ ((n + 2 : ℕ) : ℤ) = (2 : ℝ) • (Polynomial.X * T ℝ ((n + 1 : ℕ) : ℤ)) - T ℝ (n : ℤ) := by convert Polynomial.Chebyshev.T_add_two ℝ (n : ℤ) using 1 · norm_num · simp only [Polynomial.smul_eq_C_mul] norm_num rw [Polynomial.C_ofNat] ring rw [hT] calc polyCoeffL1 ((2 : ℝ) • (Polynomial.X * T ℝ ((n + 1 : ℕ) : ℤ)) - T ℝ (n : ℤ)) ≤ polyCoeffL1 ((2 : ℝ) • (Polynomial.X * T ℝ ((n + 1 : ℕ) : ℤ))) + polyCoeffL1 (T ℝ (n : ℤ)) := polyCoeffL1_sub_le _ _ _ = 2 * polyCoeffL1 (T ℝ ((n + 1 : ℕ) : ℤ)) + polyCoeffL1 (T ℝ (n : ℤ)) := by rw [polyCoeffL1_smul, polyCoeffL1_X_mul] norm_num _ ≤ 2 * (3 : ℝ) ^ (n + 1) + (3 : ℝ) ^ n := by gcongr _ = 7 * (3 : ℝ) ^ n := by rw [pow_succ] ring _ ≤ 9 * (3 : ℝ) ^ n := by gcongr norm_num _ = (3 : ℝ) ^ (n + 2) := by rw [show n + 2 = (n + 1) + 1 by omega, pow_succ, pow_succ] ring -
cosine_sum_exists_polynomialtheorem — Given a frequency limit and real cosine coefficients, the finite cosine sum has an ordinary polynomial representation of bounded degree whose coefficient one-norm is bounded by the stated weighted sum.hypothesesn :ℕa :ℕ → ℝconclusion∃ p : Polynomial ℝ,p.natDegree ≤ nconclusion 2polyCoeffL1 p ≤ ∑ k ∈ range (n + 1), |a k| * (3 : ℝ) ^ kProof (Lean source)
theorem cosine_sum_exists_polynomial (n : ℕ) (a : ℕ → ℝ) : ∃ p : Polynomial ℝ, p.natDegree ≤ n ∧ (∀ t : ℝ, p.eval (cos t) = ∑ k ∈ range (n + 1), a k * cos ((k : ℝ) * t)) ∧ polyCoeffL1 p ≤ ∑ k ∈ range (n + 1), |a k| * (3 : ℝ) ^ k := by classical let p : Polynomial ℝ := ∑ k ∈ range (n + 1), Polynomial.C (a k) * T ℝ (k : ℤ) refine ⟨p, ?_, ?_, ?_⟩ · dsimp [p] apply Polynomial.natDegree_sum_le_of_forall_le intro k hk refine (Polynomial.natDegree_C_mul_le _ _).trans ?_ rw [Polynomial.Chebyshev.natDegree_T, Int.natAbs_natCast] exact Nat.le_of_lt_succ (Finset.mem_range.mp hk) · intro t dsimp [p] rw [Polynomial.eval_finsetSum] apply Finset.sum_congr rfl intro k _ rw [Polynomial.eval_C_mul, Polynomial.Chebyshev.T_real_cos] norm_num · dsimp [p] calc polyCoeffL1 (∑ k ∈ range (n + 1), Polynomial.C (a k) * T ℝ (k : ℤ)) ≤ ∑ k ∈ range (n + 1), polyCoeffL1 (Polynomial.C (a k) * T ℝ (k : ℤ)) := polyCoeffL1_sum_le _ _ _ = ∑ k ∈ range (n + 1), |a k| * polyCoeffL1 (T ℝ (k : ℤ)) := by apply Finset.sum_congr rfl intro k _ rw [Polynomial.C_mul', polyCoeffL1_smul] _ ≤ ∑ k ∈ range (n + 1), |a k| * (3 : ℝ) ^ k := by exact Finset.sum_le_sum fun k _ => mul_le_mul_of_nonneg_left (chebyshev_coeffL1_le k) (abs_nonneg (a k))