Mathlib.Analysis.Jackson­Approximation

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.

def jraw reviewed
Causalean.Mathlib.Analysis.JacksonApproximation

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.

Definition (Lean source)
K :
t :
jraw K t :
if sin (t / 2)
= 0 then (K : ℝ) ^ 4 else (sin ((K : ℝ) * t / 2) / sin (t / 2)) ^ 4
Causalean.Mathlib.Analysis.JacksonApproximation.jraw · Causalean/Mathlib/Analysis/JacksonApproximation/Kernel.lean:18
def jrawMass reviewed
Causalean.Mathlib.Analysis.JacksonApproximation

An integer order determines the raw Jackson mass, the integral of the raw kernel over the standard period from minus π to π.

Definition (Lean source)
K :
jrawMass K :
∫ t in Icc (-pi) pi, jraw K t
Causalean.Mathlib.Analysis.JacksonApproximation.jrawMass · Causalean/Mathlib/Analysis/JacksonApproximation/Kernel.lean:26
def jackson reviewed
Causalean.Mathlib.Analysis.JacksonApproximation

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.

Definition (Lean source)
K :
t :
jackson K t :
jraw K t / jrawMass K
Causalean.Mathlib.Analysis.JacksonApproximation.jackson · Causalean/Mathlib/Analysis/JacksonApproximation/Kernel.lean:32
theorem jackson_second_moment reviewed
Causalean.Mathlib.Analysis.JacksonApproximation

For integer order K that is strictly positive, the normalized second moment is at most sixty-four divided by K squared.

Formal statement
K :
hK :
0 < K
(∫ t in Icc (-pi) pi, t ^ 2 * jackson K t) ≤ 64 / (K : ℝ) ^ 2
Proof (Lean source)
theorem jackson_second_moment (K : ℕ) (hK : 0 < K) : (∫ t in Icc (-pi) pi, t ^ 2 * jackson K t) ≤ 64 / (K : ℝ) ^ 2 := by refine (jackson_second_moment_aux K hK).trans ?_ have hKR : (0 : ℝ) < K := by exact_mod_cast hK field_simp nlinarith
Causalean.Mathlib.Analysis.JacksonApproximation.jackson_second_moment · Causalean/Mathlib/Analysis/JacksonApproximation/Kernel.lean:894 · uses jackson
20 supporting declarations (lemmas, instances)
  • jraw_eq_of_sin_ne_zero theorem — 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.
    K :
    t :
    ht :
    sin (t / 2) ≠ 0
    jraw K t = (sin ((K : ℝ) * t / 2) / sin (t / 2)) ^ 4
    Proof (Lean source)
    theorem jraw_eq_of_sin_ne_zero (K : ℕ) {t : ℝ} (ht : sin (t / 2) ≠ 0) : jraw K t = (sin ((K : ℝ) * t / 2) / sin (t / 2)) ^ 4 := by simp [jraw, ht]
    Causalean.Mathlib.Analysis.JacksonApproximation.jraw_eq_of_sin_ne_zero · Causalean/Mathlib/Analysis/JacksonApproximation/Kernel.lean:39
  • jraw_eq_of_sin_eq_zero theorem — At order K and argument t, if the denominator sine vanishes, then the raw kernel equals K to the fourth power.
    K :
    t :
    ht :
    sin (t / 2) = 0
    jraw K t = (K : ℝ) ^ 4
    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]
    Causalean.Mathlib.Analysis.JacksonApproximation.jraw_eq_of_sin_eq_zero · Causalean/Mathlib/Analysis/JacksonApproximation/Kernel.lean:46
  • continuous_jraw theorem — For integer order K, the raw Jackson kernel is continuous on the real line.
    K :
    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
    Causalean.Mathlib.Analysis.JacksonApproximation.continuous_jraw · Causalean/Mathlib/Analysis/JacksonApproximation/Kernel.lean:483
  • measurable_jraw theorem — For integer order K, the raw Jackson kernel is Borel measurable.
    K :
    Proof (Lean source)
    @[measurability, fun_prop] theorem measurable_jraw (K : ℕ) : Measurable (jraw K) := by exact (continuous_jraw K).measurable
    Causalean.Mathlib.Analysis.JacksonApproximation.measurable_jraw · Causalean/Mathlib/Analysis/JacksonApproximation/Kernel.lean:499
  • integrableOn_jraw theorem — For integer order K, the raw Jackson kernel is integrable over the standard period.
    K :
    Proof (Lean source)
    theorem integrableOn_jraw (K : ℕ) : IntegrableOn (jraw K) (Icc (-pi) pi) := by exact (continuous_jraw K).continuousOn.integrableOn_compact isCompact_Icc
    Causalean.Mathlib.Analysis.JacksonApproximation.integrableOn_jraw · Causalean/Mathlib/Analysis/JacksonApproximation/Kernel.lean:505
  • jraw_nonneg theorem — At integer order K and real argument t, the raw Jackson kernel is nonnegative.
    K :
    t :
    0 ≤ jraw K t
    Proof (Lean source)
    theorem jraw_nonneg (K : ℕ) (t : ℝ) : 0 ≤ jraw K t := by unfold jraw split_ifs <;> positivity
    Causalean.Mathlib.Analysis.JacksonApproximation.jraw_nonneg · Causalean/Mathlib/Analysis/JacksonApproximation/Kernel.lean:511
  • jraw_even theorem — For integer order K, the raw Jackson kernel is symmetric about zero.
    K :
    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
    Causalean.Mathlib.Analysis.JacksonApproximation.jraw_even · Causalean/Mathlib/Analysis/JacksonApproximation/Kernel.lean:518
  • jrawMass_eq theorem — For integer order K that is strictly positive, the raw Jackson mass equals two π thirds times K times two K squared plus one.
    K :
    hK :
    0 < K
    jrawMass K = (2 * pi / 3) * (K : ℝ) * (2 * (K : ℝ) ^ 2 + 1)
    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
    Causalean.Mathlib.Analysis.JacksonApproximation.jrawMass_eq · Causalean/Mathlib/Analysis/JacksonApproximation/Kernel.lean:537
  • jrawMass_lower theorem — For integer order K that is strictly positive, the raw Jackson mass is at least four π thirds times K cubed.
    K :
    hK :
    0 < K
    (4 * pi / 3) * (K : ℝ) ^ 3 ≤ jrawMass K
    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)]
    Causalean.Mathlib.Analysis.JacksonApproximation.jrawMass_lower · Causalean/Mathlib/Analysis/JacksonApproximation/Kernel.lean:587
  • jrawMass_upper theorem — For integer order K that is strictly positive, the raw Jackson mass is at most two π times K cubed.
    K :
    hK :
    0 < K
    jrawMass K ≤ 2 * pi * (K : ℝ) ^ 3
    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
    Causalean.Mathlib.Analysis.JacksonApproximation.jrawMass_upper · Causalean/Mathlib/Analysis/JacksonApproximation/Kernel.lean:597
  • jrawMass_pos theorem — For integer order K that is strictly positive, the raw Jackson mass is strictly positive.
    K :
    hK :
    0 < K
    0 < jrawMass K
    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
    Causalean.Mathlib.Analysis.JacksonApproximation.jrawMass_pos · Causalean/Mathlib/Analysis/JacksonApproximation/Kernel.lean:612
  • continuous_jackson theorem — For integer order K, the normalized Jackson kernel is continuous on the real line.
    K :
    Proof (Lean source)
    @[fun_prop] theorem continuous_jackson (K : ℕ) : Continuous (jackson K) := by unfold jackson fun_prop
    Causalean.Mathlib.Analysis.JacksonApproximation.continuous_jackson · Causalean/Mathlib/Analysis/JacksonApproximation/Kernel.lean:621
  • measurable_jackson theorem — For integer order K, the normalized Jackson kernel is Borel measurable.
    K :
    Proof (Lean source)
    @[measurability, fun_prop] theorem measurable_jackson (K : ℕ) : Measurable (jackson K) := by exact (continuous_jackson K).measurable
    Causalean.Mathlib.Analysis.JacksonApproximation.measurable_jackson · Causalean/Mathlib/Analysis/JacksonApproximation/Kernel.lean:629
  • integrableOn_jackson theorem — For integer order K, the normalized Jackson kernel is integrable over the standard period.
    K :
    Proof (Lean source)
    theorem integrableOn_jackson (K : ℕ) : IntegrableOn (jackson K) (Icc (-pi) pi) := by exact (continuous_jackson K).continuousOn.integrableOn_compact isCompact_Icc
    Causalean.Mathlib.Analysis.JacksonApproximation.integrableOn_jackson · Causalean/Mathlib/Analysis/JacksonApproximation/Kernel.lean:635
  • jackson_nonneg theorem — At integer order K that is strictly positive and real argument t, the normalized Jackson kernel is nonnegative.
    K :
    hK :
    0 < K
    t :
    0 ≤ jackson K t
    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
    Causalean.Mathlib.Analysis.JacksonApproximation.jackson_nonneg · Causalean/Mathlib/Analysis/JacksonApproximation/Kernel.lean:642
  • jackson_even theorem — For integer order K, the normalized Jackson kernel is symmetric about zero.
    K :
    Proof (Lean source)
    theorem jackson_even (K : ℕ) : Even (jackson K) := by intro t simp only [jackson, jraw_even K t]
    Causalean.Mathlib.Analysis.JacksonApproximation.jackson_even · Causalean/Mathlib/Analysis/JacksonApproximation/Kernel.lean:648
  • jackson_integral_eq_one theorem — For integer order K that is strictly positive, the normalized Jackson kernel has unit mass over the standard period.
    K :
    hK :
    0 < K
    (∫ t in Icc (-pi) pi, jackson K t) = 1
    Proof (Lean source)
    theorem jackson_integral_eq_one (K : ℕ) (hK : 0 < K) : (∫ t in Icc (-pi) pi, jackson K t) = 1 := by rw [show jackson K = fun t => jraw K t / jrawMass K by rfl, MeasureTheory.integral_div, ← jrawMass] exact div_self (jrawMass_pos K hK).ne'
    Causalean.Mathlib.Analysis.JacksonApproximation.jackson_integral_eq_one · Causalean/Mathlib/Analysis/JacksonApproximation/Kernel.lean:654
  • jackson_first_moment theorem — For integer order K that is strictly positive, the normalized absolute first moment is at most thirty-two divided by K.
    K :
    hK :
    0 < K
    (∫ t in Icc (-pi) pi, |t| * jackson K t) ≤ 32 / (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
    Causalean.Mathlib.Analysis.JacksonApproximation.jackson_first_moment · Causalean/Mathlib/Analysis/JacksonApproximation/Kernel.lean:841
  • jraw_isTrigPolyLE theorem — 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.
    K :
    hK :
    0 < K
    IsTrigPolyLE (2 * (K - 1)) (jraw 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
    Causalean.Mathlib.Analysis.JacksonApproximation.jraw_isTrigPolyLE · Causalean/Mathlib/Analysis/JacksonApproximation/Kernel.lean:905
  • jackson_isTrigPolyLE theorem — 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.
    K :
    hK :
    0 < K
    IsTrigPolyLE (2 * (K - 1)) (jackson 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]
    Causalean.Mathlib.Analysis.JacksonApproximation.jackson_isTrigPolyLE · Causalean/Mathlib/Analysis/JacksonApproximation/Kernel.lean:966
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.

def periodBox reviewed
Causalean.Mathlib.Analysis.JacksonApproximation

A finite dimension determines the standard period box, whose coordinates all lie between minus π and π.

Definition (Lean source)
d :
periodBox d :
Set (Fin d → ℝ)
{x | ∀ i, x i ∈ Icc (-pi) pi}
Causalean.Mathlib.Analysis.JacksonApproximation.periodBox · Causalean/Mathlib/Analysis/JacksonApproximation/Tensor.lean:18
def normalizedCube reviewed
Causalean.Mathlib.Analysis.JacksonApproximation

A finite dimension determines the normalized cube, whose coordinates all lie between minus one and one.

Definition (Lean source)
d :
normalizedCube d :
Set (Fin d → ℝ)
{x | ∀ i, x i ∈ Icc (-1 : ℝ) 1}
Causalean.Mathlib.Analysis.JacksonApproximation.normalizedCube · Causalean/Mathlib/Analysis/JacksonApproximation/Tensor.lean:24
def tensorJackson reviewed
Causalean.Mathlib.Analysis.JacksonApproximation

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.

Definition (Lean source)
K d :
u :
Fin d → ℝ
tensorJackson K d u :
∏ i, jackson K (u i)
Causalean.Mathlib.Analysis.JacksonApproximation.tensorJackson · Causalean/Mathlib/Analysis/JacksonApproximation/Tensor.lean:30
def cosPoint reviewed
Causalean.Mathlib.Analysis.JacksonApproximation

A finite dimension and a point in period coordinates determine the coordinatewise cosine point.

Definition (Lean source)
d :
t :
Fin d → ℝ
cosPoint t :
Fin d → ℝ
fun i => cos (t i)
Causalean.Mathlib.Analysis.JacksonApproximation.cosPoint · Causalean/Mathlib/Analysis/JacksonApproximation/Tensor.lean:39
def cosLift reviewed
Causalean.Mathlib.Analysis.JacksonApproximation

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.

Definition (Lean source)
d :
f :
(Fin d → ℝ) → ℝ
t :
Fin d → ℝ
cosLift f t :
f (cosPoint t)
Causalean.Mathlib.Analysis.JacksonApproximation.cosLift · Causalean/Mathlib/Analysis/JacksonApproximation/Tensor.lean:52
def tensorConvolution reviewed
Causalean.Mathlib.Analysis.JacksonApproximation

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)
d :
K :
f :
(Fin d → ℝ) → ℝ
x :
Fin d → ℝ
tensorConvolution K f x :
∫ u in periodBox d, f (cosPoint (x - u)) * tensorJackson K d u
Causalean.Mathlib.Analysis.JacksonApproximation.tensorConvolution · Causalean/Mathlib/Analysis/JacksonApproximation/Tensor.lean:59
theorem tensorJackson_integral_eq_one reviewed
Causalean.Mathlib.Analysis.JacksonApproximation

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
d K :
hK :
0 < K
(∫ u in periodBox d, tensorJackson K d u) = 1
Proof (Lean source)
theorem tensorJackson_integral_eq_one {d K : ℕ} (hK : 0 < K) : (∫ u in periodBox d, tensorJackson K d u) = 1 := by rw [show tensorJackson K d = fun u ↦ ∏ i, jackson K (u i) by rfl, integral_periodBox_prod (fun _ ↦ jackson K) (fun _ ↦ integrableOn_jackson K)] simp [jackson_integral_eq_one K hK]
Causalean.Mathlib.Analysis.JacksonApproximation.tensorJackson_integral_eq_one · Causalean/Mathlib/Analysis/JacksonApproximation/Tensor.lean:114 · uses periodBox , tensorJackson
9 supporting declarations (lemmas, instances)
Coefficient­Envelope­Four 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.

def mvCoeffL1 reviewed
Causalean.Mathlib.Analysis.JacksonApproximation

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)
d :
p :
mvCoeffL1 p :
∑ m ∈ p.support, |p.coeff m|
Causalean.Mathlib.Analysis.JacksonApproximation.mvCoeffL1 · Causalean/Mathlib/Analysis/JacksonApproximation/CoefficientEnvelopeFour.lean:16
theorem tensorConvolution_exists_mvPolynomial_four_coeffBound unreviewed
Causalean.Mathlib.Analysis.JacksonApproximation

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
K :
hK :
0 < K
f :
(Fin 4 → ℝ) → ℝ
B :
hB :
0 ≤ B
hbound :
∀ z ∈ normalizedCube 4, |f z| ≤ B
∃ p : MvPolynomial (Fin 4) ℝ,
conclusion 1
x :
Fin 4 → ℝ
conclusion 2
m ∈ p.support :
i :
m i ≤ 2 * (K - 1)
conclusion 3
p.totalDegree ≤ 8 * (K - 1)
conclusion 4
mvCoeffL1 p ≤ (2 : ℝ) ^ (40 * K + 20) * B
Proof (Lean source)
theorem tensorConvolution_exists_mvPolynomial_four_coeffBound {K : ℕ} (hK : 0 < K) (f : (Fin 4 → ℝ) → ℝ) (B : ℝ) (hB : 0 ≤ B) (hf : ContinuousOn f (normalizedCube 4)) (hbound : ∀ z ∈ normalizedCube 4, |f z| ≤ B) : ∃ p : MvPolynomial (Fin 4) ℝ, (∀ x : Fin 4 → ℝ, eval (cosPoint x) p = tensorConvolution K f x) ∧ (∀ m ∈ p.support, ∀ i, m i ≤ 2 * (K - 1)) ∧ p.totalDegree ≤ 8 * (K - 1) ∧ mvCoeffL1 p ≤ (2 : ℝ) ^ (40 * K + 20) * B := by /- Proof route: expose the finite cosine coefficients of `jackson K`; expand the four translated factors, integrate their bounded coefficient functions, and discard all sine terms using coordinate evenness. Replace each cosine frequency by `T`, tensor the four univariate polynomials with `toMvPolynomial`, and use `chebyshev_coeffL1_le`. Bounding the finite Fourier coefficients by the kernel mass and counting the at most `(2 * (K - 1) + 1)^4` indices leaves ample room in `2^(40*K+20)`. The same explicit construction supplies the evaluation, coordinate-support, and total-degree conjuncts; do not obtain the coefficient claim from the nonquantitative existence theorem by an arbitrary choice of representative. -/ classical let n := 2 * (K - 1) rcases tensorConvolution_exists_mvPolynomial hK f hf with ⟨p, hp_eval, hp_coord, hp_total⟩ have hcompact : IsCompact (periodBox 4) := by rw [show periodBox 4 = {u | ∀ i, u i ∈ Icc (-pi) pi} by rfl] exact isCompact_pi_infinite fun _ => isCompact_Icc have hfcos (x : Fin 4 → ℝ) : Continuous (fun u : Fin 4 → ℝ => f (cosPoint (x - u))) := by apply hf.comp_continuous · unfold cosPoint fun_prop · exact fun u => cosPoint_mem_normalizedCube (x - u) have hjc : Continuous (tensorJackson K 4) := by unfold tensorJackson fun_prop have hint_f (x : Fin 4 → ℝ) : IntegrableOn (fun u : Fin 4 → ℝ => f (cosPoint (x - u)) * tensorJackson K 4 u) (periodBox 4) := ((hfcos x).mul hjc).continuousOn.integrableOn_compact hcompact have hint_B : IntegrableOn (fun u : Fin 4 → ℝ => B * tensorJackson K 4 u) (periodBox 4) := (continuous_const.mul hjc).continuousOn.integrableOn_compact hcompact have hsub (x : Fin 4 → ℝ) : tensorConvolution K (fun z => B - f z) x = B - tensorConvolution K f x := by unfold tensorConvolution rw [show (fun u : Fin 4 → ℝ => (B - f (cosPoint (x - u))) * tensorJackson K 4 u) = fun u => B * tensorJackson K 4 u - f (cosPoint (x - u)) * tensorJackson K 4 u by funext u; ring, integral_sub hint_B (hint_f x), integral_const_mul, tensorJackson_integral_eq_one hK] ring have hadd (x : Fin 4 → ℝ) : tensorConvolution K (fun z => B + f z) x = B + tensorConvolution K f x := by unfold tensorConvolution rw [show (fun u : Fin 4 → ℝ => (B + f (cosPoint (x - u))) * tensorJackson K 4 u) = fun u => B * tensorJackson K 4 u + f (cosPoint (x - u)) * tensorJackson K 4 u by funext u; ring, integral_add hint_B (hint_f x), integral_const_mul, tensorJackson_integral_eq_one hK] ring have hconv_bound (x : Fin 4 → ℝ) : |tensorConvolution K f x| ≤ B := by rw [abs_le] constructor · have hn := tensorConvolution_nonneg hK (f := fun z : Fin 4 → ℝ => B + f z) (fun z hz => by have := hbound z hz rw [abs_le] at this linarith) x rw [hadd] at hn linarith · have hn := tensorConvolution_nonneg hK (f := fun z : Fin 4 → ℝ => B - f z) (fun z hz => by have := hbound z hz rw [abs_le] at this linarith) x rw [hsub] at hn linarith have hp_bound : ∀ z ∈ normalizedCube 4, |eval z p| ≤ B := by intro z hz let x : Fin 4 → ℝ := fun i => arccos (z i) have hcosx : cosPoint x = z := by funext i exact Real.cos_arccos (hz i).1 (hz i).2 rw [← hcosx, hp_eval] exact hconv_bound x have hp_l1 : mvCoeffL1 p ≤ ((2 : ℝ) * (n + 1) ^ 2 * (3 : ℝ) ^ n) ^ 4 * B := mvCoeffL1_le_bounded p B hB hp_coord hp_bound have hn_factor : (2 : ℝ) * (n + 1) ^ 2 * (3 : ℝ) ^ n ≤ (2 : ℝ) ^ (4 * n + 3) := by have hsucc : (n : ℝ) + 1 ≤ (2 : ℝ) ^ (n + 1) := by simpa using natCast_succ_le_two_pow n have hthree : (3 : ℝ) ^ n ≤ (4 : ℝ) ^ n := pow_le_pow_left₀ (by norm_num) (by norm_num) n calc (2 : ℝ) * (n + 1) ^ 2 * (3 : ℝ) ^ n ≤ 2 * ((2 : ℝ) ^ (n + 1)) ^ 2 * ((4 : ℝ) ^ n) := by gcongr _ = (2 : ℝ) ^ (4 * n + 3) := by rw [← pow_mul, show (4 : ℝ) = 2 ^ 2 by norm_num, ← pow_mul] calc (2 : ℝ) * 2 ^ ((n + 1) * 2) * 2 ^ (2 * n) = (2 : ℝ) ^ ((n + 1) * 2 + 1) * 2 ^ (2 * n) := by rw [pow_add, pow_one] ring _ = (2 : ℝ) ^ (((n + 1) * 2 + 1) + 2 * n) := by rw [pow_add] ring _ = (2 : ℝ) ^ (4 * n + 3) := by congr 1; omega have hn_power : ((2 : ℝ) * (n + 1) ^ 2 * (3 : ℝ) ^ n) ^ 4 ≤ (2 : ℝ) ^ (40 * K + 20) := by calc ((2 : ℝ) * (n + 1) ^ 2 * (3 : ℝ) ^ n) ^ 4 ≤ ((2 : ℝ) ^ (4 * n + 3)) ^ 4 := pow_le_pow_left₀ (by positivity) hn_factor 4 _ = (2 : ℝ) ^ (4 * (4 * n + 3)) := by rw [← pow_mul]; congr 1; omega _ ≤ (2 : ℝ) ^ (40 * K + 20) := by apply pow_le_pow_right₀ (by norm_num) dsimp [n] omega refine ⟨p, hp_eval, hp_coord, ?_, ?_⟩ · simpa [n, Nat.mul_assoc, Nat.mul_left_comm, Nat.mul_comm] using hp_total · exact hp_l1.trans (mul_le_mul_of_nonneg_right hn_power hB)
Causalean.Mathlib.Analysis.JacksonApproximation.tensorConvolution_exists_mvPolynomial_four_coeffBound · Causalean/Mathlib/Analysis/JacksonApproximation/CoefficientEnvelopeFour.lean:356 · uses cosPoint , mvCoeffL1 , normalizedCube , tensorConvolution
Affine­Four 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.

def affinePoint reviewed
Causalean.Mathlib.Analysis.JacksonApproximation

A finite dimension, a rectangle center, coordinate radii, and normalized coordinates determine the corresponding point under the center-plus-radius affine map.

Definition (Lean source)
d :
c r z :
Fin d → ℝ
affinePoint c r z :
Fin d → ℝ
fun i => c i + r i * z i
Causalean.Mathlib.Analysis.JacksonApproximation.affinePoint · Causalean/Mathlib/Analysis/JacksonApproximation/AffineFour.lean:15
def normalizedPoint reviewed
Causalean.Mathlib.Analysis.JacksonApproximation

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.

Definition (Lean source)
d :
c r y :
Fin d → ℝ
normalizedPoint c r y :
Fin d → ℝ
fun i => (y i - c i) / r i
Causalean.Mathlib.Analysis.JacksonApproximation.normalizedPoint · Causalean/Mathlib/Analysis/JacksonApproximation/AffineFour.lean:22
def centeredRectangle reviewed
Causalean.Mathlib.Analysis.JacksonApproximation

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.

Definition (Lean source)
d :
c r :
Fin d → ℝ
centeredRectangle c r :
Set (Fin d → ℝ)
{y | ∀ i, |y i - c i| ≤ r i}
Causalean.Mathlib.Analysis.JacksonApproximation.centeredRectangle · Causalean/Mathlib/Analysis/JacksonApproximation/AffineFour.lean:31
theorem affineJackson_approx_four unreviewed
Causalean.Mathlib.Analysis.JacksonApproximation

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
K :
hK :
0 < K
c r :
Fin 4 → ℝ
hr :
∀ i, 0 < r i
f :
(Fin 4 → ℝ) → ℝ
L :
hL :
0 ≤ L
hf :
ContinuousOn f (centeredRectangle c r)
hlip :
∀ y ∈ centeredRectangle c r,
∀ z ∈ centeredRectangle c r, |f y - f z| ≤ L * ∑ i, |(y i - z i) / r i|
∃ p : MvPolynomial (Fin 4) ℝ,
conclusion 1
m ∈ p.support :
i :
m i ≤ 2 * (K - 1)
conclusion 2
p.totalDegree ≤ 8 * (K - 1)
conclusion 3
y ∈ centeredRectangle c r :
|eval y p - f y| ≤ 128 * L / (K : ℝ)
Proof (Lean source)
theorem affineJackson_approx_four {K : ℕ} (hK : 0 < K) (c r : Fin 4 → ℝ) (hr : ∀ i, 0 < r i) (f : (Fin 4 → ℝ) → ℝ) (L : ℝ) (hL : 0 ≤ L) (hf : ContinuousOn f (centeredRectangle c r)) (hlip : ∀ y ∈ centeredRectangle c r, ∀ z ∈ centeredRectangle c r, |f y - f z| ≤ L * ∑ i, |(y i - z i) / r i|) : ∃ p : MvPolynomial (Fin 4) ℝ, (∀ m ∈ p.support, ∀ i, m i ≤ 2 * (K - 1)) ∧ p.totalDegree ≤ 8 * (K - 1) ∧ ∀ y ∈ centeredRectangle c r, |eval y p - f y| ≤ 128 * L / (K : ℝ) := by /- Use the same pulled-back function and polynomial extraction/substitution as above. Its cube Lipschitz hypothesis follows from `hlip`: affine coordinate differences divided by a positive radius simplify to `x i - z i`. Apply `tensorConvolution_approx_lipschitz` in dimension four. For a rectangle point `y`, set the phase coordinate to `arccos (normalizedPoint c r y i)`; membership in the normalized cube and `Real.cos_arccos` identify its cosine point with the normalized point. Finally use `affinePoint_normalizedPoint` and normalize the constant `32 * (4 : ℝ) * L / K` to `128 * L / K`. -/ 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 hlip_pull : ∀ x ∈ normalizedCube 4, ∀ z ∈ normalizedCube 4, |f (affinePoint c r x) - f (affinePoint c r z)| ≤ L * ∑ i, |x i - z i| := by intro x hx z hz have h := hlip (affinePoint c r x) (affinePoint_mem_centeredRectangle c r x hr hx) (affinePoint c r z) (affinePoint_mem_centeredRectangle c r z hr hz) have hcoord (i : Fin 4) : (affinePoint c r x i - affinePoint c r z i) / r i = x i - z i := by simp only [affinePoint] field_simp [ne_of_gt (hr i)] ring simpa only [hcoord] using h obtain ⟨p, q, hpeval, hqeval, hpcoord, hptotal⟩ := affineJackson_exists_mvPolynomial_four hK c r hr f hf refine ⟨p, hpcoord, hptotal, ?_⟩ intro y hy let x : Fin 4 → ℝ := fun i => arccos (normalizedPoint c r y i) have hn := normalizedPoint_mem_normalizedCube c r y hr hy have hcos : cosPoint x = normalizedPoint c r y := by funext i exact Real.cos_arccos (hn i).1 (hn i).2 have happ := tensorConvolution_approx_lipschitz hK (fun z => f (affinePoint c r z)) L hL hpull hlip_pull x calc |eval y p - f y| = |tensorConvolution K (fun z => f (affinePoint c r z)) x - f (affinePoint c r (cosPoint x))| := by rw [hpeval y, ← hcos, hqeval x, hcos, affinePoint_normalizedPoint c r y hr] _ ≤ 32 * (4 : ℝ) * L / (K : ℝ) := happ _ = 128 * L / (K : ℝ) := by ring
Causalean.Mathlib.Analysis.JacksonApproximation.affineJackson_approx_four · Causalean/Mathlib/Analysis/JacksonApproximation/AffineFour.lean:473 · uses centeredRectangle
7 supporting declarations (lemmas, instances)
  • normalizedPoint_affinePoint theorem — 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.
    d :
    c r z :
    Fin d → ℝ
    hr :
    ∀ i, 0 < r i
    Proof (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
    Causalean.Mathlib.Analysis.JacksonApproximation.normalizedPoint_affinePoint · Causalean/Mathlib/Analysis/JacksonApproximation/AffineFour.lean:39
  • affinePoint_normalizedPoint theorem — 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.
    d :
    c r y :
    Fin d → ℝ
    hr :
    ∀ i, 0 < r i
    Proof (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
    Causalean.Mathlib.Analysis.JacksonApproximation.affinePoint_normalizedPoint · Causalean/Mathlib/Analysis/JacksonApproximation/AffineFour.lean:50
  • affinePoint_mem_centeredRectangle theorem — 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.
    d :
    c r z :
    Fin d → ℝ
    hr :
    ∀ i, 0 < r i
    hz :
    Proof (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))
    Causalean.Mathlib.Analysis.JacksonApproximation.affinePoint_mem_centeredRectangle · Causalean/Mathlib/Analysis/JacksonApproximation/AffineFour.lean:61
  • normalizedPoint_mem_normalizedCube theorem — 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.
    d :
    c r y :
    Fin d → ℝ
    hr :
    ∀ i, 0 < r i
    hy :
    Proof (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
    Causalean.Mathlib.Analysis.JacksonApproximation.normalizedPoint_mem_normalizedCube · Causalean/Mathlib/Analysis/JacksonApproximation/AffineFour.lean:73
  • mvPolynomial_affine_substitution_four theorem — 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.
    q :
    c r :
    Fin 4 → ℝ
    n :
    hr :
    ∀ i, 0 < r i
    hqcoord :
    ∀ m ∈ q.support, ∀ i, m i ≤ n
    ∃ p : MvPolynomial (Fin 4) ℝ,
    conclusion 1
    y :
    eval y p = eval (normalizedPoint c r y) q
    conclusion 2
    m ∈ p.support :
    i :
    m i ≤ n
    conclusion 3
    p.totalDegree ≤ q.totalDegree
    conclusion 4
    mvCoeffL1 p ≤ mvCoeffL1 q * ∏ i : Fin 4, (max 1 ((1 + |c i|) / r i)) ^ n
    Proof (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
    Causalean.Mathlib.Analysis.JacksonApproximation.mvPolynomial_affine_substitution_four · Causalean/Mathlib/Analysis/JacksonApproximation/AffineFour.lean:240
  • affineJackson_exists_mvPolynomial_four theorem — 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.
    K :
    hK :
    0 < K
    c r :
    Fin 4 → ℝ
    hr :
    ∀ i, 0 < r i
    f :
    (Fin 4 → ℝ) → ℝ
    ∃ p q : MvPolynomial (Fin 4) ℝ,
    conclusion 1
    y :
    eval y p = eval (normalizedPoint c r y) q
    conclusion 2
    x :
    eval (cosPoint x) q = tensorConvolution K (fun z => f (affinePoint c r z)) x
    conclusion 3
    m ∈ p.support :
    i :
    m i ≤ 2 * (K - 1)
    conclusion 4
    p.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
    Causalean.Mathlib.Analysis.JacksonApproximation.affineJackson_exists_mvPolynomial_four · Causalean/Mathlib/Analysis/JacksonApproximation/AffineFour.lean:435
  • affineJackson_coeffBound_four theorem — 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.
    K :
    hK :
    0 < K
    c r :
    Fin 4 → ℝ
    hr :
    ∀ i, 0 < r i
    f :
    (Fin 4 → ℝ) → ℝ
    B :
    hB :
    0 ≤ B
    hbound :
    ∀ y ∈ centeredRectangle c r, |f y| ≤ B
    ∃ p q : MvPolynomial (Fin 4) ℝ,
    conclusion 1
    y :
    eval y p = eval (normalizedPoint c r y) q
    conclusion 2
    x :
    eval (cosPoint x) q = tensorConvolution K (fun z => f (affinePoint c r z)) x
    conclusion 3
    m ∈ p.support :
    i :
    m i ≤ 2 * (K - 1)
    conclusion 4
    p.totalDegree ≤ 8 * (K - 1)
    conclusion 5
    ≤ (2 : ℝ) ^ (40 * K + 20) * B * ∏ i : Fin 4, (max 1 ((1 + |c i|) / r i)) ^ (2 * (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)
    Causalean.Mathlib.Analysis.JacksonApproximation.affineJackson_coeffBound_four · Causalean/Mathlib/Analysis/JacksonApproximation/AffineFour.lean:542
Tensor­Extraction 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.

theorem tensorConvolution_approx_lipschitz reviewed
Causalean.Mathlib.Analysis.JacksonApproximation

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
d K :
hK :
0 < K
f :
(Fin d → ℝ) → ℝ
L :
hL :
0 ≤ L
hlip :
∀ x ∈ normalizedCube d, ∀ y ∈ normalizedCube d, |f x - f y| ≤ L * ∑ i, |x i - y i|
x :
Fin d → ℝ
|tensorConvolution K f x - f (cosPoint x)| ≤ 32 * (d : ℝ) * L / (K : ℝ)
Proof (Lean source)
theorem tensorConvolution_approx_lipschitz {d K : ℕ} (hK : 0 < K) (f : (Fin d → ℝ) → ℝ) (L : ℝ) (hL : 0 ≤ L) (hf : ContinuousOn f (normalizedCube d)) (hlip : ∀ x ∈ normalizedCube d, ∀ y ∈ normalizedCube d, |f x - f y| ≤ L * ∑ i, |x i - y i|) (x : Fin d → ℝ) : |tensorConvolution K f x - f (cosPoint x)| ≤ 32 * (d : ℝ) * L / (K : ℝ) := by classical have hcompact : IsCompact (periodBox d) := by rw [show periodBox d = {u | ∀ i, u i ∈ Icc (-pi) pi} by rfl] exact isCompact_pi_infinite fun _ ↦ isCompact_Icc have hcos : Continuous (fun u : Fin d → ℝ ↦ cosPoint (x - u)) := by apply continuous_pi intro i change Continuous (fun u : Fin d → ℝ ↦ cos (x i - u i)) fun_prop have hfcos : Continuous (fun u : Fin d → ℝ ↦ f (cosPoint (x - u))) := by simpa [Function.comp_def] using hf.comp_continuous hcos (fun u ↦ cosPoint_mem_normalizedCube (x - u)) have hkernel : Continuous (tensorJackson K d) := by unfold tensorJackson fun_prop have hconvInt : IntegrableOn (fun u : Fin d → ℝ ↦ f (cosPoint (x - u)) * tensorJackson K d u) (periodBox d) := (hfcos.mul hkernel).continuousOn.integrableOn_compact hcompact have hconstInt : IntegrableOn (fun u : Fin d → ℝ ↦ f (cosPoint x) * tensorJackson K d u) (periodBox d) := (continuous_const.mul hkernel).continuousOn.integrableOn_compact hcompact have hdiffInt : IntegrableOn (fun u : Fin d → ℝ ↦ (f (cosPoint (x - u)) - f (cosPoint x)) * tensorJackson K d u) (periodBox d) := ((hfcos.sub continuous_const).mul hkernel).continuousOn.integrableOn_compact hcompact have hmomentInt (i : Fin d) : IntegrableOn (fun u : Fin d → ℝ ↦ |u i| * tensorJackson K d u) (periodBox d) := by exact ((continuous_abs.comp (continuous_apply i)).mul hkernel).continuousOn |>.integrableOn_compact hcompact have hboundInt : IntegrableOn (fun u : Fin d → ℝ ↦ L * ∑ i, |u i| * tensorJackson K d u) (periodBox d) := by exact (continuous_const.mul (continuous_finsetSum _ fun i _ ↦ (continuous_abs.comp (continuous_apply i)).mul hkernel)).continuousOn |>.integrableOn_compact hcompact have hdiff : tensorConvolution K f x - f (cosPoint x) = ∫ u in periodBox d, (f (cosPoint (x - u)) - f (cosPoint x)) * tensorJackson K d u := by unfold tensorConvolution calc (∫ u in periodBox d, f (cosPoint (x - u)) * tensorJackson K d u) - f (cosPoint x) = (∫ u in periodBox d, f (cosPoint (x - u)) * tensorJackson K d u) - f (cosPoint x) * (∫ u in periodBox d, tensorJackson K d u) := by rw [tensorJackson_integral_eq_one hK, mul_one] _ = (∫ u in periodBox d, f (cosPoint (x - u)) * tensorJackson K d u) - ∫ u in periodBox d, f (cosPoint x) * tensorJackson K d u := by rw [integral_const_mul] _ = ∫ u in periodBox d, (f (cosPoint (x - u)) * tensorJackson K d u - f (cosPoint x) * tensorJackson K d u) := (integral_sub hconvInt hconstInt).symm _ = ∫ u in periodBox d, (f (cosPoint (x - u)) - f (cosPoint x)) * tensorJackson K d u := by apply integral_congr_ae filter_upwards intro u ring rw [hdiff] calc |∫ u in periodBox d, (f (cosPoint (x - u)) - f (cosPoint x)) * tensorJackson K d u| ≤ ∫ u in periodBox d, |(f (cosPoint (x - u)) - f (cosPoint x)) * tensorJackson K d u| := abs_integral_le_integral_abs _ ≤ ∫ u in periodBox d, L * ∑ i, |u i| * tensorJackson K d u := by apply setIntegral_mono hdiffInt.abs hboundInt intro u change |(f (cosPoint (x - u)) - f (cosPoint x)) * tensorJackson K d u| ≤ L * ∑ i, |u i| * tensorJackson K d u rw [abs_mul, abs_of_nonneg (tensorJackson_nonneg hK u)] calc |f (cosPoint (x - u)) - f (cosPoint x)| * tensorJackson K d u ≤ (L * ∑ i, |u i|) * tensorJackson K d u := by apply mul_le_mul_of_nonneg_right _ (tensorJackson_nonneg hK u) refine (hlip _ (cosPoint_mem_normalizedCube _) _ (cosPoint_mem_normalizedCube _)).trans ?_ apply mul_le_mul_of_nonneg_left _ hL apply Finset.sum_le_sum intro i _ simpa [cosPoint] using Real.abs_cos_sub_cos_le ((x - u) i) (x i) _ = L * ∑ i, |u i| * tensorJackson K d u := by rw [mul_assoc, Finset.sum_mul] _ = L * ∑ i, ∫ u in periodBox d, |u i| * tensorJackson K d u := by rw [integral_const_mul] rw [integral_finsetSum univ (fun i _ ↦ hmomentInt i)] _ ≤ L * ∑ _i : Fin d, 32 / (K : ℝ) := by apply mul_le_mul_of_nonneg_left _ hL apply Finset.sum_le_sum intro i _ rw [tensorJackson_first_moment_eq hK i] exact jackson_first_moment K hK _ = 32 * (d : ℝ) * L / (K : ℝ) := by simp only [Finset.sum_const, Finset.card_univ, Fintype.card_fin, nsmul_eq_mul] ring
Causalean.Mathlib.Analysis.JacksonApproximation.tensorConvolution_approx_lipschitz · Causalean/Mathlib/Analysis/JacksonApproximation/TensorExtraction.lean:624 · uses cosPoint , normalizedCube , tensorConvolution
1 supporting declaration (lemmas, instances)
Trig­Extraction 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.

abbrev IsTrigPolyLE reviewed
Causalean.Mathlib.Analysis.JacksonApproximation

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)
n :
shared
f :
ℝ → ℝ
shared
IsTrigPolyLE n f :
Prop
Causalean.Mathlib.Analysis.JacksonApproximation.IsTrigPolyLE · Causalean/Mathlib/Analysis/JacksonApproximation/TrigExtraction.lean:16
def polyCoeffL1 reviewed
Causalean.Mathlib.Analysis.JacksonApproximation

A real polynomial determines its coefficient one-norm, the sum of the absolute values of its nonzero coefficients.

Definition (Lean source)
p :
polyCoeffL1 p :
∑ n ∈ p.support, |p.coeff n|
Causalean.Mathlib.Analysis.JacksonApproximation.polyCoeffL1 · Causalean/Mathlib/Analysis/JacksonApproximation/TrigExtraction.lean:24
theorem even_trigPoly_exists_polynomial reviewed
Causalean.Mathlib.Analysis.JacksonApproximation

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
n :
q :
ℝ → ℝ
hq :
IsTrigPolyLE n q
heven :
∃ p : Polynomial ℝ,
p.natDegree ≤ n
conclusion 1
t :
p.eval (cos t) = q t
Proof (Lean source)
theorem even_trigPoly_exists_polynomial {n : ℕ} {q : ℝ → ℝ} (hq : IsTrigPolyLE n q) (heven : Even q) : ∃ p : Polynomial ℝ, p.natDegree ≤ n ∧ ∀ t : ℝ, p.eval (cos t) = q t := by classical rcases hq with ⟨a, b, hq⟩ 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 have ht := hq t have hnt := hq (-t) rw [heven t] at hnt simp only [mul_neg, Real.cos_neg, Real.sin_neg] at hnt have hnt' : q t = ∑ k ∈ range (n + 1), (a k * cos ((k : ℝ) * t) - b k * sin ((k : ℝ) * t)) := by simpa [sub_eq_add_neg] using hnt -- Averaging the identities at `t` and `-t` cancels every sine term. have hcos : q t = ∑ k ∈ range (n + 1), a k * cos ((k : ℝ) * t) := by calc q t = (q t + q t) / 2 := by ring _ = ((∑ k ∈ range (n + 1), (a k * cos ((k : ℝ) * t) + b k * sin ((k : ℝ) * t))) + (∑ k ∈ range (n + 1), (a k * cos ((k : ℝ) * t) - b k * sin ((k : ℝ) * t)))) / 2 := by rw [← ht, ← hnt'] _ = ∑ k ∈ range (n + 1), a k * cos ((k : ℝ) * t) := by rw [← Finset.sum_add_distrib, Finset.sum_div] apply Finset.sum_congr rfl intro k _ ring rw [hcos] 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
Causalean.Mathlib.Analysis.JacksonApproximation.even_trigPoly_exists_polynomial · Causalean/Mathlib/Analysis/JacksonApproximation/TrigExtraction.lean:97 · uses IsTrigPolyLE
3 supporting declarations (lemmas, instances)
  • polynomial_cos_is_even_trigPoly theorem — 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.
    n :
    p :
    hp :
    p.natDegree ≤ n
    conclusion 1
    IsTrigPolyLE n (fun t => p.eval (cos t))
    conclusion 2
    Even (fun t => p.eval (cos t))
    Proof (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
    Causalean.Mathlib.Analysis.JacksonApproximation.polynomial_cos_is_even_trigPoly · Causalean/Mathlib/Analysis/JacksonApproximation/TrigExtraction.lean:148
  • chebyshev_coeffL1_le theorem — For a nonnegative integer index, the coefficient one-norm of the corresponding first-kind Chebyshev polynomial is at most three to that index.
    n :
    polyCoeffL1 (T ℝ (n : ℤ)) ≤ (3 : ℝ) ^ n
    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
    Causalean.Mathlib.Analysis.JacksonApproximation.chebyshev_coeffL1_le · Causalean/Mathlib/Analysis/JacksonApproximation/TrigExtraction.lean:160
  • cosine_sum_exists_polynomial theorem — 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.
    n :
    a :
    ℕ → ℝ
    ∃ p : Polynomial ℝ,
    p.natDegree ≤ n
    conclusion 1
    t :
    p.eval (cos t) = ∑ k ∈ range (n + 1), a k * cos ((k : ℝ) * t)
    conclusion 2
    polyCoeffL1 p ≤ ∑ k ∈ range (n + 1), |a k| * (3 : ℝ) ^ k
    Proof (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))
    Causalean.Mathlib.Analysis.JacksonApproximation.cosine_sum_exists_polynomial · Causalean/Mathlib/Analysis/JacksonApproximation/TrigExtraction.lean:212