Mathlib.Analysis.Approximation.Chebyshev.Jackson

Jackson-style approximation bounds assembled from Chebyshev kernels, tensor constructions, coefficient envelopes, and extraction lemmas.

Fourier 8 core · 1 supporting The generic summation-by-parts statement uses a finitely supported complex sequence on ℤ. ★ finiteFourier_twice_summation_by_parts

Finite Fourier reconstruction and localized Jackson packets

The generic summation-by-parts statement uses a finitely supported complex sequence on ℤ. The packet statements specialize it to the two high-frequency shifts of the normalized order-four Jackson kernel.

def finiteFourier reviewed
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson

The Fourier series of a complex sequence indexed by the integers at a real angle u is the sum over all integers j of the j-th term of the sequence times the complex exponential of i j u; it is a Fourier polynomial when the sequence has finite support.

Definition (Lean source)
a :
ℤ → ℂ
u :
ℝ
finiteFourier a u :
ℂ
∑' j : ℤ, a j * exp (I * (j : ℂ) * (u : ℂ))
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.finiteFourier · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Fourier.lean:19
def complexDelta2 reviewed
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson

The second forward difference of a complex sequence indexed by the integers at an index j is the term at j + 2 minus twice the term at j + 1 plus the term at j.

Definition (Lean source)
a :
ℤ → ℂ
j :
ℤ
complexDelta2 a j :
ℂ
a (j + 2) - 2 * a (j + 1) + a j
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.complexDelta2 · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Fourier.lean:25
theorem finiteFourier_twice_summation_by_parts reviewed
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson

For a complex sequence indexed by the integers with finite support and any real angle u, the Fourier series of the second forward difference of the sequence equals the square of (the complex exponential of −i u, minus one) times the Fourier series of the sequence itself.

Formal statement
a :
ℤ → ℂ
u :
ℝ
= (exp (-I * (u : ℂ)) - 1) ^ 2 * finiteFourier a u
Proof (Lean source)
theorem finiteFourier_twice_summation_by_parts (a : ℤ → ℂ) (ha : HasFiniteSupport a) (u : ℝ) : finiteFourier (complexDelta2 a) u = (exp (-I * (u : ℂ)) - 1) ^ 2 * finiteFourier a u := by let z : ℂ := I * (u : ℂ) let F : ℤ → ℂ := fun j => a j * exp ((j : ℂ) * z) have hs (k : ℤ) : Summable (fun j : ℤ => a (j + k) * exp ((j : ℂ) * z)) := by apply summable_of_hasFiniteSupport apply Function.HasFiniteSupport.mul_left exact ha.fun_comp_of_injective (Equiv.addRight k).injective have hshift (k : ℤ) : (∑' j : ℤ, a (j + k) * exp ((j : ℂ) * z)) = exp (-(k : ℂ) * z) * (∑' j : ℤ, F j) := by calc _ = ∑' j : ℤ, exp (-(k : ℂ) * z) * F (j + k) := by congr 1 funext j dsimp [F] have he : exp (-(k : ℂ) * z) * exp (((j + k : ℤ) : ℂ) * z) = exp ((j : ℂ) * z) := by rw [← Complex.exp_add] congr 1 push_cast ring calc a (j + k) * exp ((j : ℂ) * z) = a (j + k) * (exp (-(k : ℂ) * z) * exp (((j + k : ℤ) : ℂ) * z)) := by rw [he] _ = _ := by ring _ = exp (-(k : ℂ) * z) * (∑' j : ℤ, F (j + k)) := by rw [tsum_mul_left] _ = _ := by congr 1 simpa [Equiv.addRight] using (Equiv.tsum_eq (Equiv.addRight k) F) have hexp : exp (-(2 : ℂ) * z) = exp (-z) ^ 2 := by rw [show -(2 : ℂ) * z = -z + -z by ring, Complex.exp_add] ring have hz : -z = -I * (u : ℂ) := by simp [z] have hphase (j : ℤ) : I * (j : ℂ) * (u : ℂ) = (j : ℂ) * z := by dsimp [z] ring simp only [finiteFourier, complexDelta2] simp_rw [hphase] change (∑' j : ℤ, (a (j + 2) - 2 * a (j + 1) + a j) * exp ((j : ℂ) * z)) = (exp (-I * (u : ℂ)) - 1) ^ 2 * (∑' j : ℤ, F j) simp only [add_mul, sub_mul] rw [Summable.tsum_add, Summable.tsum_sub] · rw [hshift 2] simp only [mul_assoc] rw [tsum_mul_left, hshift 1] change exp (-((2 : ℤ) : ℂ) * z) * (∑' j : ℤ, F j) - 2 * (exp (-((1 : ℤ) : ℂ) * z) * (∑' j : ℤ, F j)) + (∑' j : ℤ, F j) = (exp (-I * (u : ℂ)) - 1) ^ 2 * (∑' j : ℤ, F j) norm_num only [Int.cast_ofNat, one_mul] rw [hexp] ring_nf rw [hz] ring · exact hs 2 · simpa only [mul_assoc, ← mul_assoc] using (hs 1).mul_left (2 : ℂ) · exact (hs 2).sub (by simpa only [mul_assoc, ← mul_assoc] using (hs 1).mul_left (2 : ℂ)) · simpa only [add_zero] using hs 0
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.finiteFourier_twice_summation_by_parts · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Fourier.lean:31 · uses complexDelta2 , finiteFourier
def torusDistance reviewed
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson

The torus distance of a real angle is the smallest distance from the angle to an integer multiple of 2π.

Definition (Lean source)
u :
ℝ
torusDistance u :
ℝ
sInf {r : ℝ | ∃ j : ℤ, r = |u - 2 * pi * j|}
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.torusDistance · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Fourier.lean:104
def packetCoeffPlus reviewed
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson

The plus-shifted antiderivative coefficient of order N at an integer frequency j is the normalized Jackson coefficient at j divided by the square of 4N + j.

Definition (Lean source)
N :
ℕ
j :
ℤ
packetCoeffPlus N j :
ℝ
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.packetCoeffPlus · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Fourier.lean:109
def packetCoeffMinus reviewed
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson

The minus-shifted antiderivative coefficient of order N at an integer frequency j is the normalized Jackson coefficient at j divided by the square of 4N − j.

Definition (Lean source)
N :
ℕ
j :
ℤ
packetCoeffMinus N j :
ℝ
weightedCoeff N (-1) j
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.packetCoeffMinus · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Fourier.lean:115
def packetOscillation reviewed
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson

The oscillatory Jackson packet of order N at an angle u is the scaled Jackson kernel at u times the cosine of 4N u.

Definition (Lean source)
N :
ℕ
u :
ℝ
packetOscillation N u :
ℝ
kernel N u * cos ((4 * N : ℝ) * u)
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.packetOscillation · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Fourier.lean:121
def packetAntideriv reviewed
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson

The packet antiderivative of order N at an angle u is minus one half times the sum, over integer frequencies j between −(2N − 2) and 2N − 2, of the plus-shifted coefficient times the cosine of (4N + j) u plus the minus-shifted coefficient times the cosine of (4N − j) u; it is the candidate twice antiderivative of the oscillatory Jackson packet.

Definition (Lean source)
N :
ℕ
u :
ℝ
packetAntideriv N u :
ℝ
-(1 / 2 : ℝ) * ∑ j ∈ Icc (-((2 * N - 2 : ℕ) : ℤ)) ((2 * N - 2 : ℕ) : ℤ), (packetCoeffPlus N j * cos (((4 * (N : ℤ) + j : ℤ) : ℝ) * u) + packetCoeffMinus N j * cos (((4 * (N : ℤ) - j : ℤ) : ℝ) * u))
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.packetAntideriv · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Fourier.lean:126
1 supporting declaration (lemmas, instances)
  • packet_zero_mean theorem — For an order N that is at least two, the packet antiderivative integrates to zero over the period from −π to π.
    N :
    ℕ
    hN :
    2 ≤ N
    (∫ u in Icc (-pi) pi, packetAntideriv N u) = 0
    Proof (Lean source)
    theorem packet_zero_mean (N : ℕ) (hN : 2 ≤ N) : (∫ u in Icc (-pi) pi, packetAntideriv N u) = 0 := by have hcos (k : ℤ) (hk : k ≠ 0) : (∫ u in Icc (-pi) pi, cos ((k : ℝ) * u)) = 0 := by rw [MeasureTheory.integral_Icc_eq_integral_Ioc, ← intervalIntegral.integral_of_le (a := -pi) (b := pi) (by linarith [Real.pi_pos] : -pi ≤ pi)] have hk0 : (k : ℝ) ≠ 0 := by exact_mod_cast hk rw [intervalIntegral.integral_comp_mul_left cos hk0, integral_cos] simp have hfreq (j : ℤ) (hj : j ∈ Icc (-((2 * N - 2 : ℕ) : ℤ)) ((2 * N - 2 : ℕ) : ℤ)) : 4 * (N : ℤ) + j ≠ 0 ∧ 4 * (N : ℤ) - j ≠ 0 := by have hj' := Finset.mem_Icc.mp hj constructor <;> omega have hInt (k : ℤ) : IntegrableOn (fun u : ℝ => cos ((k : ℝ) * u)) (Icc (-pi) pi) := by exact (show Continuous (fun u : ℝ => cos ((k : ℝ) * u)) by fun_prop) |>.continuousOn.integrableOn_compact isCompact_Icc unfold packetAntideriv rw [MeasureTheory.integral_const_mul, MeasureTheory.integral_finsetSum] · apply mul_eq_zero_of_right apply Finset.sum_eq_zero intro j hj rw [MeasureTheory.integral_add ((hInt _).const_mul _) ((hInt _).const_mul _), MeasureTheory.integral_const_mul, MeasureTheory.integral_const_mul] obtain ⟨hp, hm⟩ := hfreq j hj rw [hcos _ hp, hcos _ hm] ring · intro j hj exact ((hInt _).const_mul _).add ((hInt _).const_mul _)
    Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.packet_zero_mean · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Fourier.lean:136
Coefficients 6 core · 15 supporting The zero-extended triangle triangle N is convolved with itself on ℤ. ★ kernelCoeff_eq_normalizedCoeff

Finite Fourier coefficients of the order-four Jackson kernel

The zero-extended triangle triangle N is convolved with itself on ℤ. The normalization agrees with the Jackson kernel in Causalean, whose integral over [-π, π] is one for positive order.

def triangle reviewed
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson

The triangular sequence of order N at an integer frequency j is N minus the absolute value of j when that is nonnegative, and zero otherwise.

Definition (Lean source)
N :
ℕ
j :
ℤ
triangle N j :
ℝ
((N - j.natAbs : ℕ) : ℝ)
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.triangle · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Coefficients.lean:23
def convolution reviewed
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson

The raw Jackson Fourier coefficient of order N at an integer frequency j is the discrete convolution of the order-N triangular sequence with itself: the sum over integers k between −N and N of the triangle at k times the triangle at j − k.

Definition (Lean source)
N :
ℕ
j :
ℤ
convolution N j :
ℝ
∑ k ∈ Icc (-(N : ℤ)) (N : ℤ), triangle N k * triangle N (j - k)
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.convolution · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Coefficients.lean:27
def normalizedCoeff reviewed
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson

The normalized Jackson coefficient of order N at an integer frequency j is the raw Jackson Fourier coefficient at j divided by its value at frequency zero; at order zero that denominator vanishes and the coefficient is read as zero.

Definition (Lean source)
N :
ℕ
j :
ℤ
normalizedCoeff N j :
ℝ
convolution N j / convolution N 0
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.normalizedCoeff · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Coefficients.lean:33
def kernel reviewed
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson

The scaled Jackson kernel of order N at an angle u is 2π times the normalized Jackson kernel, so that for positive order it integrates to 2π over a period and its zeroth Fourier coefficient is one.

Definition (Lean source)
N :
ℕ
u :
ℝ
kernel N u :
ℝ
2 * pi * jackson N u
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.kernel · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Coefficients.lean:39
def kernelCoeff reviewed
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson

The cosine Fourier coefficient of the scaled Jackson kernel of order N at an integer frequency j is one over 2π times the integral over the period from −π to π of the kernel times the cosine of j times the angle.

Definition (Lean source)
N :
ℕ
j :
ℤ
kernelCoeff N j :
ℝ
(1 / (2 * pi)) * ∫ u in Icc (-pi) pi, kernel N u * cos ((j : ℝ) * u)
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.kernelCoeff · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Coefficients.lean:45
theorem kernelCoeff_eq_normalizedCoeff reviewed
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson

For an order N that is positive and any integer frequency j, the cosine Fourier coefficient of the scaled Jackson kernel, defined by integration, equals the normalized Jackson coefficient.

Formal statement
N :
ℕ
hN :
0 < N
j :
ℤ
Proof (Lean source)
theorem kernelCoeff_eq_normalizedCoeff (N : ℕ) (hN : 0 < N) (j : ℤ) : kernelCoeff N j = normalizedCoeff N j := by let s : Finset ℤ := Icc (-((2 * N - 2 : ℕ) : ℤ)) ((2 * N - 2 : ℕ) : ℤ) have hs : ∀ k : ℤ, k ∈ s ↔ -k ∈ s := by intro k simp only [s, Finset.mem_Icc] omega have ha : ∀ k : ℤ, normalizedCoeff N (-k) = normalizedCoeff N k := by intro k simp only [normalizedCoeff, convolution_even] have hcoeff := cosine_coefficient_even_finite s (normalizedCoeff N) hs ha j unfold kernelCoeff simp_rw [kernel_fourier N hN] change (1 / (2 * pi)) * ∫ u in Icc (-pi) pi, (∑ k ∈ s, normalizedCoeff N k * cos ((k : ℝ) * u)) * cos ((j : ℝ) * u) = normalizedCoeff N j rw [hcoeff] by_cases hj : j ∈ s · simp [hj] · have hfar : ((2 * N - 2 : ℕ) : ℤ) < |j| := by have hj' : j ∉ Icc (-((2 * N - 2 : ℕ) : ℤ)) ((2 * N - 2 : ℕ) : ℤ) := hj simp only [Finset.mem_Icc] at hj' rcases le_total j 0 with h | h · rw [abs_of_nonpos h] omega · rw [abs_of_nonneg h] omega simp [hj, normalizedCoeff, convolution_support N j hfar]
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.kernelCoeff_eq_normalizedCoeff · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Coefficients.lean:583 · uses kernelCoeff , normalizedCoeff
15 supporting declarations (lemmas, instances)
  • triangle_support theorem — For an order N and an integer frequency j whose absolute value is at least N, the triangular sequence is zero.
    N :
    ℕ
    j :
    ℤ
    hj :
    (N : ℤ) ≤ |j|
    triangle N j = 0
    Proof (Lean source)
    theorem triangle_support (N : ℕ) (j : ℤ) (hj : (N : ℤ) ≤ |j|) : triangle N j = 0 := by have h : N ≤ j.natAbs := by exact_mod_cast (show (N : ℤ) ≤ (j.natAbs : ℤ) by simpa only [Int.natCast_natAbs] using hj) simp [triangle, Nat.sub_eq_zero_of_le h]
    Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.triangle_support · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Coefficients.lean:52
  • convolution_support theorem — For an order N and an integer frequency j whose absolute value exceeds 2N − 2, the raw Jackson Fourier coefficient is zero.
    N :
    ℕ
    j :
    ℤ
    hj :
    ((2 * N - 2 : ℕ) : ℤ) < |j|
    convolution N j = 0
    Proof (Lean source)
    theorem convolution_support (N : ℕ) (j : ℤ) (hj : ((2 * N - 2 : ℕ) : ℤ) < |j|) : convolution N j = 0 := by unfold convolution apply Finset.sum_eq_zero intro k hk have hbound : (N : ℤ) ≤ |k| ∨ (N : ℤ) ≤ |j - k| := by by_cases hN : N = 0 · left simp [hN] · have hN' : 1 ≤ N := by omega have hlim : (((2 * N - 2 : ℕ) : ℤ)) = 2 * (N : ℤ) - 2 := by omega rw [hlim] at hj by_cases h : (N : ℤ) ≤ |k| · exact Or.inl h · right have h1 : |j| ≤ |k| + |j - k| := by have heq : k + (j - k) = j := by ring simpa only [heq] using abs_add_le k (j - k) omega rcases hbound with h | h · simp [triangle_support N k h] · simp [triangle_support N (j - k) h]
    Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.convolution_support · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Coefficients.lean:61
  • convolution_zero theorem — For any order N, the raw Jackson Fourier coefficient at frequency zero equals (2N³ + N) / 3.
    N :
    ℕ
    convolution N 0 = (2 * (N : ℝ) ^ 3 + N) / 3
    Proof (Lean source)
    theorem convolution_zero (N : ℕ) : convolution N 0 = (2 * (N : ℝ) ^ 3 + N) / 3 := by have heven : Even (fun k : ℤ => triangle N k * triangle N (0 - k)) := by intro k simp [triangle, Int.natAbs_neg] rw [convolution, Finset.sum_Icc_of_even_eq_range heven N] have hterms : ∀ m ∈ range (N + 1), triangle N (m : ℤ) * triangle N (0 - (m : ℤ)) = ((N - m : ℕ) : ℝ) ^ 2 := by intro m hm have hmN : m ≤ N := by simpa using Finset.mem_range.mp hm simp [triangle, Int.natAbs_neg, pow_two] rw [Finset.sum_congr rfl hterms] simp only [triangle, Int.natAbs_zero, Nat.sub_zero, sub_zero, pow_two, two_smul] have hflip : (∑ m ∈ range (N + 1), ((N - m : ℕ) : ℝ) * ((N - m : ℕ) : ℝ)) = ∑ m ∈ range (N + 1), (m : ℝ) ^ 2 := by rw [← Finset.sum_flip (n := N) (fun m : ℕ => (m : ℝ) ^ 2)] apply Finset.sum_congr rfl intro m hm ring rw [hflip] have hsq : ∀ n : ℕ, (∑ m ∈ range (n + 1), (m : ℝ) ^ 2) = (n : ℝ) * (n + 1) * (2 * n + 1) / 6 := by intro n induction n with | zero => simp | succ n ih => rw [Finset.sum_range_succ, ih] push_cast ring rw [hsq N] ring
    Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.convolution_zero · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Coefficients.lean:86
  • convolution_zero_pos theorem — For an order N that is positive, the raw Jackson Fourier coefficient at frequency zero is strictly positive.
    N :
    ℕ
    hN :
    0 < N
    0 < convolution N 0
    Proof (Lean source)
    theorem convolution_zero_pos (N : ℕ) (hN : 0 < N) : 0 < convolution N 0 := by rw [convolution_zero N] have h : (0 : ℝ) < N := by exact_mod_cast hN positivity
    Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.convolution_zero_pos · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Coefficients.lean:121
  • triangle_fourier theorem — For an order N that is positive and any angle u, the square of the degree-(N − 1) Chebyshev polynomial of the second kind evaluated at the cosine of u / 2 equals the finite cosine series, over integer frequencies j from −N to N, with the triangular sequence as coefficients.
    N :
    ℕ
    hN :
    0 < N
    u :
    ℝ
    ((U ℝ ((N - 1 : ℕ) : ℤ)).eval (cos (u / 2))) ^ 2
    = ∑ j ∈ Icc (-(N : ℤ)) (N : ℤ), triangle N j * cos ((j : ℝ) * u)
    Proof (Lean source)
    theorem triangle_fourier (N : ℕ) (hN : 0 < N) (u : ℝ) : ((U ℝ ((N - 1 : ℕ) : ℤ)).eval (cos (u / 2))) ^ 2 = ∑ j ∈ Icc (-(N : ℤ)) (N : ℤ), triangle N j * cos ((j : ℝ) * u) := by have heven : Even (fun j : ℤ => triangle N j * cos ((j : ℝ) * u)) := by intro j simp [triangle, Int.natAbs_neg, Real.cos_neg] rw [Finset.sum_Icc_of_even_eq_range heven N] rw [Finset.sum_range_succ' (fun m : ℕ => triangle N (m : ℤ) * cos (((m : ℤ) : ℝ) * u)) N] have hsum : (∑ m ∈ range N, triangle N (((m + 1 : ℕ) : ℤ)) * cos (((((m + 1 : ℕ) : ℤ) : ℝ)) * u)) = ∑ m ∈ range (N - 1), ((N - 1 - m : ℕ) : ℝ) * cos ((((m + 1 : ℕ) : ℝ)) * u) := by have hNs : N = (N - 1) + 1 := by omega conv_lhs => rw [hNs, Finset.sum_range_succ] have hend : triangle N ((((N - 1) + 1 : ℕ) : ℤ)) = 0 := by rw [← hNs] exact triangle_support N N (by simp) simp only [← hNs, triangle_support N N (by simp), zero_mul, add_zero] apply Finset.sum_congr rfl intro m hm have hmN : m < N := by have := Finset.mem_range.mp hm; omega have hmle : m + 1 ≤ N := by omega simp only [triangle, Int.natAbs_natCast, Int.cast_natCast] rw [show N - (m + 1) = N - 1 - m by omega] rw [hsum] have h0 : triangle N (0 : ℤ) * cos (((0 : ℤ) : ℝ) * u) = (N : ℝ) := by simp [triangle] rw [h0] have hcheb := cheb_U_sq_eval (N - 1) u simp only [Nat.cast_zero, Int.cast_natCast, Int.cast_zero, zero_mul, Real.cos_zero, mul_one] at * rw [h0, two_smul] rw [hcheb] have hcast : ((N - 1 : ℕ) : ℝ) + 1 = (N : ℝ) := by exact_mod_cast (show N - 1 + 1 = N by omega) rw [hcast] have hsumcast : (∑ m ∈ range (N - 1), ((N - 1 - m : ℕ) : ℝ) * cos (((m + 1 : ℕ) : ℝ) * u)) = ∑ m ∈ range (N - 1), (((N - 1 : ℕ) : ℝ) - (m : ℝ)) * cos (((m + 1 : ℕ) : ℝ) * u) := by apply Finset.sum_congr rfl intro m hm have hmle : m ≤ N - 1 := by have := Finset.mem_range.mp hm; omega rw [Nat.cast_sub hmle] rw [hsumcast] ring
    Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.triangle_fourier · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Coefficients.lean:129
  • finite_cosine_square_of_even theorem — For a finite set of integer frequencies that is symmetric under negation, real coefficients that are even in the frequency, and any angle u, the square of the cosine series with those frequencies and coefficients equals the double sum over pairs of frequencies of the product of the two coefficients times the cosine of the sum of the two frequencies times u.
    s :
    Finset ℤ
    a :
    ℤ → ℝ
    hs :
    ∀ k : ℤ, k ∈ s ↔ -k ∈ s
    ha :
    ∀ k : ℤ, a (-k) = a k
    u :
    ℝ
    (∑ k ∈ s, a k * cos ((k : ℝ) * u)) ^ 2
    = ∑ k ∈ s, ∑ l ∈ s, a k * a l * cos (((k + l : ℤ) : ℝ) * u)
    Proof (Lean source)
    theorem finite_cosine_square_of_even (s : Finset ℤ) (a : ℤ → ℝ) (hs : ∀ k : ℤ, k ∈ s ↔ -k ∈ s) (ha : ∀ k : ℤ, a (-k) = a k) (u : ℝ) : (∑ k ∈ s, a k * cos ((k : ℝ) * u)) ^ 2 = ∑ k ∈ s, ∑ l ∈ s, a k * a l * cos (((k + l : ℤ) : ℝ) * u) := by have hneg : -s = s := by ext k rw [Finset.mem_neg] constructor · rintro ⟨y, hy, rfl⟩ exact (hs y).mp hy · intro hk exact ⟨-k, (hs k).mp hk, by simp⟩ have hdiff : (∑ k ∈ s, ∑ l ∈ s, a k * a l * cos (((k - l : ℤ) : ℝ) * u)) = ∑ k ∈ s, ∑ l ∈ s, a k * a l * cos (((k + l : ℤ) : ℝ) * u) := by apply Finset.sum_congr rfl intro k hk have h := Finset.sum_neg_index s (fun l => a k * a l * cos (((k + l : ℤ) : ℝ) * u)) rw [hneg] at h rw [h] apply Finset.sum_congr rfl intro l hl simp only [ha, sub_eq_add_neg] have hpoint (k l : ℤ) : (a k * cos ((k : ℝ) * u)) * (a l * cos ((l : ℝ) * u)) = (a k * a l * cos (((k + l : ℤ) : ℝ) * u) + a k * a l * cos (((k - l : ℤ) : ℝ) * u)) / 2 := by push_cast rw [show ((k : ℝ) + (l : ℝ)) * u = (k : ℝ) * u + (l : ℝ) * u by ring, show ((k : ℝ) - (l : ℝ)) * u = (k : ℝ) * u - (l : ℝ) * u by ring] rw [Real.cos_add, Real.cos_sub] ring rw [pow_two, Finset.sum_mul_sum] simp_rw [hpoint, add_div, Finset.sum_add_distrib, ← Finset.sum_div] rw [hdiff] ring
    Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.finite_cosine_square_of_even · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Coefficients.lean:186
  • triangle_pair_sum_eq_convolution theorem — For an order N that is positive and any angle u, the double sum over pairs of frequencies between −N and N of the product of two triangular coefficients times the cosine of the summed frequency times u equals the cosine series over frequencies j between −(2N − 2) and 2N − 2 with the raw Jackson Fourier coefficients.
    N :
    ℕ
    hN :
    0 < N
    u :
    ℝ
    (∑ k ∈ Icc (-(N : ℤ)) (N : ℤ), ∑ l ∈ Icc (-(N : ℤ)) (N : ℤ), triangle N k * triangle N l * cos (((k + l : ℤ) : ℝ) * u))
    = ∑ j ∈ Icc (-((2 * N - 2 : ℕ) : ℤ)) ((2 * N - 2 : ℕ) : ℤ), convolution N j * cos ((j : ℝ) * u)
    Proof (Lean source)
    theorem triangle_pair_sum_eq_convolution (N : ℕ) (hN : 0 < N) (u : ℝ) : (∑ k ∈ Icc (-(N : ℤ)) (N : ℤ), ∑ l ∈ Icc (-(N : ℤ)) (N : ℤ), triangle N k * triangle N l * cos (((k + l : ℤ) : ℝ) * u)) = ∑ j ∈ Icc (-((2 * N - 2 : ℕ) : ℤ)) ((2 * N - 2 : ℕ) : ℤ), convolution N j * cos ((j : ℝ) * u) := by let base : Finset ℤ := Icc (-(N : ℤ)) (N : ℤ) let wide : Finset ℤ := Icc (-(2 * N : ℤ)) (2 * N : ℤ) let narrow : Finset ℤ := Icc (-((2 * N - 2 : ℕ) : ℤ)) ((2 * N - 2 : ℕ) : ℤ) have hshift (k : ℤ) (hk : k ∈ base) : (∑ l ∈ base, triangle N k * triangle N l * cos (((k + l : ℤ) : ℝ) * u)) = ∑ j ∈ wide, triangle N k * triangle N (j - k) * cos ((j : ℝ) * u) := by have hb : -(N : ℤ) ≤ k ∧ k ≤ (N : ℤ) := Finset.mem_Icc.mp hk have hbij : (∑ l ∈ base, triangle N k * triangle N l * cos (((k + l : ℤ) : ℝ) * u)) = ∑ j ∈ Icc (k - (N : ℤ)) (k + (N : ℤ)), triangle N k * triangle N (j - k) * cos ((j : ℝ) * u) := by apply Finset.sum_bij (fun l _ => k + l) · intro l hl change l ∈ Icc (-(N : ℤ)) (N : ℤ) at hl simp only [Finset.mem_Icc] at hl ⊢ omega · intro l₁ hl₁ l₂ hl₂ heq omega · intro j hj refine ⟨j - k, ?_, by ring⟩ · change j - k ∈ Icc (-(N : ℤ)) (N : ℤ) simp only [Finset.mem_Icc] at hj ⊢ omega · intro l hl simp only [add_sub_cancel_left] rw [hbij] apply Finset.sum_subset · intro j hj simp only [Finset.mem_Icc] at hj ⊢ dsimp [wide] simp only [Finset.mem_Icc] omega · intro j hj hjnot have hzero : triangle N (j - k) = 0 := by apply triangle_support simp only [Finset.mem_Icc] at hjnot have : j - k ≤ -(N : ℤ) ∨ (N : ℤ) ≤ j - k := by omega rcases this with h | h · rw [abs_of_nonpos (by omega)] omega · rw [abs_of_nonneg (by omega)] omega simp [hzero] have hwide : (∑ k ∈ base, ∑ l ∈ base, triangle N k * triangle N l * cos (((k + l : ℤ) : ℝ) * u)) = ∑ j ∈ wide, convolution N j * cos ((j : ℝ) * u) := by have hreindex : (∑ k ∈ base, ∑ l ∈ base, triangle N k * triangle N l * cos (((k + l : ℤ) : ℝ) * u)) = ∑ k ∈ base, ∑ j ∈ wide, triangle N k * triangle N (j - k) * cos ((j : ℝ) * u) := by apply Finset.sum_congr rfl intro k hk exact hshift k hk rw [hreindex] rw [Finset.sum_comm] apply Finset.sum_congr rfl intro j hj rw [convolution] simp_rw [Finset.sum_mul] apply Finset.sum_congr rfl intro k hk ring have hsubset : narrow ⊆ wide := by intro j hj change j ∈ Icc (-((2 * N - 2 : ℕ) : ℤ)) ((2 * N - 2 : ℕ) : ℤ) at hj change j ∈ Icc (-(2 * N : ℤ)) (2 * N : ℤ) simp only [Finset.mem_Icc] at hj ⊢ omega have htrim : (∑ j ∈ wide, convolution N j * cos ((j : ℝ) * u)) = ∑ j ∈ narrow, convolution N j * cos ((j : ℝ) * u) := by symm apply Finset.sum_subset hsubset intro j hj hjnot have hzero : convolution N j = 0 := by apply convolution_support change j ∉ Icc (-((2 * N - 2 : ℕ) : ℤ)) ((2 * N - 2 : ℕ) : ℤ) at hjnot simp only [Finset.mem_Icc] at hjnot rcases le_total j 0 with h | h · rw [abs_of_nonpos h] omega · rw [abs_of_nonneg h] omega simp [hzero] exact hwide.trans htrim
    Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.triangle_pair_sum_eq_convolution · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Coefficients.lean:233
  • triangle_fourier_square theorem — For an order N that is positive and any angle u, the square of the triangular cosine series over frequencies between −N and N equals the cosine series over frequencies j between −(2N − 2) and 2N − 2 with the raw Jackson Fourier coefficients.
    N :
    ℕ
    hN :
    0 < N
    u :
    ℝ
    (∑ k ∈ Icc (-(N : ℤ)) (N : ℤ), triangle N k * cos ((k : ℝ) * u)) ^ 2
    = ∑ j ∈ Icc (-((2 * N - 2 : ℕ) : ℤ)) ((2 * N - 2 : ℕ) : ℤ), convolution N j * cos ((j : ℝ) * u)
    Proof (Lean source)
    theorem triangle_fourier_square (N : ℕ) (hN : 0 < N) (u : ℝ) : (∑ k ∈ Icc (-(N : ℤ)) (N : ℤ), triangle N k * cos ((k : ℝ) * u)) ^ 2 = ∑ j ∈ Icc (-((2 * N - 2 : ℕ) : ℤ)) ((2 * N - 2 : ℕ) : ℤ), convolution N j * cos ((j : ℝ) * u) := by calc _ = ∑ k ∈ Icc (-(N : ℤ)) (N : ℤ), ∑ l ∈ Icc (-(N : ℤ)) (N : ℤ), triangle N k * triangle N l * cos (((k + l : ℤ) : ℝ) * u) := by apply finite_cosine_square_of_even · intro k simp only [Finset.mem_Icc] omega · intro k simp [triangle, Int.natAbs_neg] _ = _ := triangle_pair_sum_eq_convolution N hN u
    Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.triangle_fourier_square · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Coefficients.lean:337
  • cosine_mode_orthogonality theorem — For two integer frequencies k and j, one over 2π times the integral from −π to π of the product of the cosines of k u and j u equals one when both frequencies are zero, one half when they are not both zero but have the same absolute value, and zero otherwise.
    k j :
    ℤ
    conclusion 1
    (1 / (2 * pi)) * ∫ u in Icc (-pi) pi, cos ((k : ℝ) * u) * cos ((j : ℝ) * u)
    = if k = 0
    conclusion 2
    j = 0 then 1 else if |k| = |j| then 1 / 2 else 0
    Proof (Lean source)
    theorem cosine_mode_orthogonality (k j : ℤ) : (1 / (2 * pi)) * ∫ u in Icc (-pi) pi, cos ((k : ℝ) * u) * cos ((j : ℝ) * u) = if k = 0 ∧ j = 0 then 1 else if |k| = |j| then 1 / 2 else 0 := by have hcos (m : ℤ) : (∫ u in Icc (-pi) pi, cos ((m : ℝ) * u)) = if m = 0 then 2 * pi else 0 := by by_cases hm : m = 0 · subst m simp [Real.pi_pos.le] ring · rw [if_neg hm, MeasureTheory.integral_Icc_eq_integral_Ioc, ← intervalIntegral.integral_of_le (a := -pi) (b := pi) (by linarith [Real.pi_pos] : -pi ≤ pi)] have hm0 : (m : ℝ) ≠ 0 := by exact_mod_cast hm rw [intervalIntegral.integral_comp_mul_left cos hm0, integral_cos] simp have hpoint (u : ℝ) : cos ((k : ℝ) * u) * cos ((j : ℝ) * u) = (cos (((k - j : ℤ) : ℝ) * u) + cos (((k + j : ℤ) : ℝ) * u)) / 2 := by rw [show (((k - j : ℤ) : ℝ) * u) = (k : ℝ) * u - (j : ℝ) * u by push_cast; ring, show (((k + j : ℤ) : ℝ) * u) = (k : ℝ) * u + (j : ℝ) * u by push_cast; ring, Real.cos_sub, Real.cos_add] ring simp_rw [hpoint] rw [MeasureTheory.integral_div] rw [MeasureTheory.integral_add ((show Continuous (fun u : ℝ => cos (((k - j : ℤ) : ℝ) * u)) by fun_prop).continuousOn.integrableOn_compact isCompact_Icc) ((show Continuous (fun u : ℝ => cos (((k + j : ℤ) : ℝ) * u)) by fun_prop).continuousOn.integrableOn_compact isCompact_Icc)] rw [hcos, hcos] have hpi : pi ≠ 0 := ne_of_gt Real.pi_pos have hform : (1 / (2 * pi)) * (((if k - j = 0 then 2 * pi else 0) + (if k + j = 0 then 2 * pi else 0)) / 2) = ((if k - j = 0 then (1 : ℝ) else 0) + (if k + j = 0 then (1 : ℝ) else 0)) / 2 := by split_ifs <;> field_simp <;> ring rw [hform] by_cases h00 : k = 0 ∧ j = 0 · rcases h00 with ⟨rfl, rfl⟩ norm_num · simp only [h00, if_false] by_cases habs : |k| = |j| · rw [if_pos habs] have hor : k = j ∨ k = -j := abs_eq_abs.mp habs rcases hor with heq | heq · have hk : k ≠ 0 := by aesop subst j simp [show k + k ≠ 0 by omega] · have hk : k ≠ 0 := by aesop have hj : j = -k := by omega subst j simp [hk] · rw [if_neg habs] have hsub : k - j ≠ 0 := by intro h exact habs (abs_eq_abs.mpr (inl (by omega))) have hadd : k + j ≠ 0 := by intro h exact habs (abs_eq_abs.mpr (inr (by omega))) simp [hsub, hadd]
    Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.cosine_mode_orthogonality · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Coefficients.lean:358
  • convolution_even theorem — For any order N and any integer frequency j, the raw Jackson Fourier coefficient takes the same value at −j as at j.
    N :
    ℕ
    j :
    ℤ
    convolution N (-j) = convolution N j
    Proof (Lean source)
    theorem convolution_even (N : ℕ) (j : ℤ) : convolution N (-j) = convolution N j := by open scoped Pointwise in let s : Finset ℤ := Icc (-(N : ℤ)) (N : ℤ) have hs : -s = s := by ext k simp only [s, Finset.mem_neg, Finset.mem_Icc] constructor · rintro ⟨y, ⟨hy₁, hy₂⟩, rfl⟩ omega · intro h refine ⟨-k, ?_, by simp⟩ omega change (∑ k ∈ s, triangle N k * triangle N (-j - k)) = ∑ k ∈ s, triangle N k * triangle N (j - k) conv_lhs => rw [← hs, Finset.sum_neg_index] apply Finset.sum_congr rfl intro k hk have htri (m : ℤ) : triangle N (-m) = triangle N m := by simp [triangle, Int.natAbs_neg] rw [htri k, show -j - -k = -(j - k) by omega, htri]
    Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.convolution_even · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Coefficients.lean:430
  • cosine_coefficient_even_finite theorem — For a finite set of integer frequencies that is symmetric under negation, real coefficients that are even in the frequency, and an integer frequency j, one over 2π times the integral from −π to π of the cosine series times the cosine of j u equals the coefficient at j when j belongs to the frequency set, and zero otherwise.
    s :
    Finset ℤ
    a :
    ℤ → ℝ
    hs :
    ∀ k : ℤ, k ∈ s ↔ -k ∈ s
    ha :
    ∀ k : ℤ, a (-k) = a k
    j :
    ℤ
    (1 / (2 * pi)) * ∫ u in Icc (-pi) pi, (∑ k ∈ s, a k * cos ((k : ℝ) * u)) * cos ((j : ℝ) * u)
    = if j ∈ s then a j else 0
    Proof (Lean source)
    theorem cosine_coefficient_even_finite (s : Finset ℤ) (a : ℤ → ℝ) (hs : ∀ k : ℤ, k ∈ s ↔ -k ∈ s) (ha : ∀ k : ℤ, a (-k) = a k) (j : ℤ) : (1 / (2 * pi)) * ∫ u in Icc (-pi) pi, (∑ k ∈ s, a k * cos ((k : ℝ) * u)) * cos ((j : ℝ) * u) = if j ∈ s then a j else 0 := by have hint (k : ℤ) : IntegrableOn (fun u : ℝ => (a k * cos ((k : ℝ) * u)) * cos ((j : ℝ) * u)) (Icc (-pi) pi) := by exact (show Continuous (fun u : ℝ => (a k * cos ((k : ℝ) * u)) * cos ((j : ℝ) * u)) by fun_prop).continuousOn.integrableOn_compact isCompact_Icc have hextract : (1 / (2 * pi)) * ∫ u in Icc (-pi) pi, (∑ k ∈ s, a k * cos ((k : ℝ) * u)) * cos ((j : ℝ) * u) = ∑ k ∈ s, a k * (if k = 0 ∧ j = 0 then 1 else if |k| = |j| then 1 / 2 else 0) := by simp_rw [Finset.sum_mul] rw [integral_finset_sum s (fun k _ => hint k)] rw [Finset.mul_sum] apply Finset.sum_congr rfl intro k hk have hfun : (fun u : ℝ => a k * cos ((k : ℝ) * u) * cos ((j : ℝ) * u)) = (fun u : ℝ => a k * (cos ((k : ℝ) * u) * cos ((j : ℝ) * u))) := by funext u; ring rw [hfun, integral_const_mul] rw [mul_left_comm] exact congrArg (a k * ·) (cosine_mode_orthogonality k j) rw [hextract] by_cases hj : j = 0 · subst j have hterm (k : ℤ) : a k * (if k = 0 ∧ (0 : ℤ) = 0 then 1 else if |k| = |(0 : ℤ)| then 1 / 2 else 0) = if (0 : ℤ) = k then a k else 0 := by by_cases hk : k = 0 · subst k; simp · have hk' : (0 : ℤ) ≠ k := Ne.symm hk simp [hk, hk'] calc _ = ∑ k ∈ s, if (0 : ℤ) = k then a k else 0 := by apply Finset.sum_congr rfl intro k hk exact hterm k _ = _ := Finset.sum_ite_eq s 0 a · have hterm (k : ℤ) : a k * (if k = 0 ∧ j = 0 then 1 else if |k| = |j| then 1 / 2 else 0) = (if j = k then a k / 2 else 0) + (if -j = k then a k / 2 else 0) := by simp only [hj, and_false, if_false] by_cases hkj : k = j · subst k have hneq : -j ≠ j := by omega simp [hneq] ring by_cases hkn : k = -j · subst k have hneq : j ≠ -j := by omega simp [hneq, abs_neg] ring have habs : |k| ≠ |j| := by intro h rcases abs_eq_abs.mp h with h | h · exact hkj h · exact hkn h simp [habs, Ne.symm hkj, Ne.symm hkn] simp_rw [hterm, Finset.sum_add_distrib] rw [Finset.sum_ite_eq, Finset.sum_ite_eq] have hmem : -j ∈ s ↔ j ∈ s := (hs j).symm by_cases hjs : j ∈ s · have hnegs : -j ∈ s := hmem.mpr hjs simp [hjs, hnegs, ha j] · have hnegs : -j ∉ s := by simpa only [hmem] using hjs simp [hjs, hnegs]
    Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.cosine_coefficient_even_finite · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Coefficients.lean:454
  • raw_kernel_fourier theorem — For an order N that is positive and any angle u, the raw Jackson kernel equals the cosine series over frequencies j between −(2N − 2) and 2N − 2 with the raw Jackson Fourier coefficients.
    N :
    ℕ
    hN :
    0 < N
    u :
    ℝ
    jraw N u
    = ∑ j ∈ Icc (-((2 * N - 2 : ℕ) : ℤ)) ((2 * N - 2 : ℕ) : ℤ), convolution N j * cos ((j : ℝ) * u)
    Proof (Lean source)
    theorem raw_kernel_fourier (N : ℕ) (hN : 0 < N) (u : ℝ) : jraw N u = ∑ j ∈ Icc (-((2 * N - 2 : ℕ) : ℤ)) ((2 * N - 2 : ℕ) : ℤ), convolution N j * cos ((j : ℝ) * u) := by rw [jraw_eq_chebyshev N hN u] rw [show ((U ℝ ((N - 1 : ℕ) : ℤ)).eval (cos (u / 2))) ^ 4 = (((U ℝ ((N - 1 : ℕ) : ℤ)).eval (cos (u / 2))) ^ 2) ^ 2 by ring] rw [triangle_fourier N hN u, triangle_fourier_square N hN u]
    Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.raw_kernel_fourier · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Coefficients.lean:538
  • kernel_fourier theorem — For an order N that is positive and any angle u, the scaled Jackson kernel equals the cosine series over frequencies j between −(2N − 2) and 2N − 2 with the normalized Jackson coefficients.
    N :
    ℕ
    hN :
    0 < N
    u :
    ℝ
    kernel N u
    = ∑ j ∈ Icc (-((2 * N - 2 : ℕ) : ℤ)) ((2 * N - 2 : ℕ) : ℤ), normalizedCoeff N j * cos ((j : ℝ) * u)
    Proof (Lean source)
    theorem kernel_fourier (N : ℕ) (hN : 0 < N) (u : ℝ) : kernel N u = ∑ j ∈ Icc (-((2 * N - 2 : ℕ) : ℤ)) ((2 * N - 2 : ℕ) : ℤ), normalizedCoeff N j * cos ((j : ℝ) * u) := by have hmass : jrawMass N = 2 * Real.pi * convolution N 0 := by rw [jrawMass_eq N hN, convolution_zero N] ring have hden : (2 * Real.pi : ℝ) ≠ 0 := by positivity have hconv : convolution N 0 ≠ 0 := ne_of_gt (convolution_zero_pos N hN) simp only [kernel, jackson, hmass, raw_kernel_fourier N hN u, normalizedCoeff] calc _ = (1 / convolution N 0) * (∑ j ∈ Icc (-((2 * N - 2 : ℕ) : ℤ)) ((2 * N - 2 : ℕ) : ℤ), convolution N j * cos ((j : ℝ) * u)) := by field_simp apply Finset.sum_congr rfl intro j hj congr 1 ring _ = _ := by rw [Finset.mul_sum] apply Finset.sum_congr rfl intro j hj field_simp
    Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.kernel_fourier · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Coefficients.lean:552
  • normalizedCoeff_support theorem — For an order N and an integer frequency j whose absolute value exceeds 2N − 2, the normalized Jackson coefficient is zero.
    N :
    ℕ
    j :
    ℤ
    hj :
    ((2 * N - 2 : ℕ) : ℤ) < |j|
    Proof (Lean source)
    theorem normalizedCoeff_support (N : ℕ) (j : ℤ) (hj : ((2 * N - 2 : ℕ) : ℤ) < |j|) : normalizedCoeff N j = 0 := by simp [normalizedCoeff, convolution_support N j hj]
    Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.normalizedCoeff_support · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Coefficients.lean:618
  • kernel_normalized_integral theorem — For an order N that is positive, the scaled Jackson kernel divided by 2π integrates to one over the period from −π to π.
    N :
    ℕ
    hN :
    0 < N
    (∫ u in Icc (-pi) pi, kernel N u / (2 * pi)) = 1
    Proof (Lean source)
    theorem kernel_normalized_integral (N : ℕ) (hN : 0 < N) : (∫ u in Icc (-Real.pi) Real.pi, kernel N u / (2 * Real.pi)) = 1 := by have hden : (2 * Real.pi : ℝ) ≠ 0 := by positivity convert jackson_integral_eq_one N hN using 1 apply MeasureTheory.integral_congr_ae filter_upwards with u simp only [kernel] field_simp
    Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.kernel_normalized_integral · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Coefficients.lean:624
Variation 3 core · 8 supporting All sums are over the full integer line. ★ normalizedCoeff_delta2_l1

Zero-extended discrete variation of Jackson coefficients

All sums are over the full integer line. This retains the endpoint terms that arise when a finite sequence is extended by zero.

def delta reviewed
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson

The forward first difference of a real sequence indexed by the integers at an index j is the term at j + 1 minus the term at j.

Definition (Lean source)
a :
ℤ → ℝ
j :
ℤ
delta a j :
ℝ
a (j + 1) - a j
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.delta · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Variation.lean:17
def delta2 reviewed
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson

The forward second difference of a real sequence indexed by the integers at an index j is the first difference of the first-difference sequence, that is, the term at j + 2 minus twice the term at j + 1 plus the term at j.

Definition (Lean source)
a :
ℤ → ℝ
j :
ℤ
delta2 a j :
ℝ
delta (delta a) j
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.delta2 · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Variation.lean:21
theorem normalizedCoeff_delta2_l1 reviewed
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson

For an order N that is positive, the sum over all integers of the absolute second differences of the normalized Jackson coefficients is at most 6 / N.

Formal statement
N :
ℕ
hN :
0 < N
(∑' j : ℤ, |delta2 (normalizedCoeff N) j|) ≤ 6 / (N : ℝ)
Proof (Lean source)
theorem normalizedCoeff_delta2_l1 (N : ℕ) (hN : 0 < N) : (∑' j : ℤ, |delta2 (normalizedCoeff N) j|) ≤ 6 / (N : ℝ) := by have hraw (j : ℤ) : delta2 (convolution N) j = ∑' k : ℤ, delta (triangle N) k * delta (triangle N) (j - k) := by rw [delta2_convolution] exact (finite_convolution_tsum_eq_sum _ _ _ (delta_triangle_outside N) j).symm have hmass : (∑' j : ℤ, |delta2 (convolution N) j|) ≤ 4 * (N : ℝ) ^ 2 := by have h := finite_convolution_l1 (delta (triangle N)) (delta (triangle N)) (delta_triangle_finite N) (delta_triangle_finite N) simp_rw [← hraw] at h rw [triangle_delta_l1] at h nlinarith have hpos := convolution_zero_pos N hN have hdiff (j : ℤ) : delta2 (normalizedCoeff N) j = delta2 (convolution N) j / convolution N 0 := by unfold delta2 delta normalizedCoeff ring have hscale : (∑' j : ℤ, |delta2 (normalizedCoeff N) j|) = (∑' j : ℤ, |delta2 (convolution N) j|) / convolution N 0 := by simp_rw [hdiff, abs_div, abs_of_pos hpos, div_eq_mul_inv] rw [tsum_mul_right] rw [hscale] have hn : (0 : ℝ) < N := by exact_mod_cast hN rw [convolution_zero N] at hpos ⊢ apply (div_le_iff₀ hpos).2 rw [show 6 / (N : ℝ) * ((2 * (N : ℝ) ^ 3 + N) / 3) = (6 * ((2 * (N : ℝ) ^ 3 + N) / 3)) / N by ring] apply (le_div_iff₀ hn).2 have hmul := mul_le_mul_of_nonneg_right hmass hn.le nlinarith [sq_nonneg (N : ℝ)]
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.normalizedCoeff_delta2_l1 · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Variation.lean:403 · uses delta2 , normalizedCoeff
8 supporting declarations (lemmas, instances)
  • delta_convolution theorem — For any order N and any integer frequency j, the first difference of the raw Jackson Fourier coefficients at j equals the sum, over integers k between −N − 1 and N, of the first difference of the triangular sequence at k times the triangular sequence at j − k.
    N :
    ℕ
    j :
    ℤ
    delta (convolution N) j
    = ∑ k ∈ Icc (-(N : ℤ) - 1) (N : ℤ), delta (triangle N) k * triangle N (j - k)
    Proof (Lean source)
    theorem delta_convolution (N : ℕ) (j : ℤ) : delta (convolution N) j = ∑ k ∈ Icc (-(N : ℤ) - 1) (N : ℤ), delta (triangle N) k * triangle N (j - k) := by let S := Icc (-(N : ℤ) - 1) (N : ℤ) have hleft : (∑ k ∈ Icc (-(N : ℤ)) (N : ℤ), triangle N k * triangle N (j + 1 - k)) = ∑ k ∈ S, triangle N (k + 1) * triangle N (j - k) := by have hext : (∑ k ∈ Icc (-(N : ℤ)) (N : ℤ), triangle N k * triangle N (j + 1 - k)) = ∑ k ∈ Icc (-(N : ℤ)) ((N : ℤ) + 1), triangle N k * triangle N (j + 1 - k) := by apply Finset.sum_subset (by intro k hk; simp only [Finset.mem_Icc] at hk ⊢; omega) intro k hk hk' have hkN : k = (N : ℤ) + 1 := by simp only [Finset.mem_Icc] at hk hk' omega subst k have hz : triangle N ((N : ℤ) + 1) = 0 := triangle_support N _ (by rw [abs_of_nonneg (by omega : 0 ≤ (N : ℤ) + 1)] omega) simp [hz] rw [hext] have hmap := Finset.map_add_right_Icc (-(N : ℤ) - 1) (N : ℤ) (1 : ℤ) have hshift : S.map (addRightEmbedding (1 : ℤ)) = Icc (-(N : ℤ)) ((N : ℤ) + 1) := by simpa [S, sub_eq_add_neg, add_assoc] using hmap rw [← hshift, Finset.sum_map] apply Finset.sum_congr rfl intro k hk simp only [addRightEmbedding_apply] have harg : j + 1 - (k + 1) = j - k := by omega rw [harg] have hright : (∑ k ∈ Icc (-(N : ℤ)) (N : ℤ), triangle N k * triangle N (j - k)) = ∑ k ∈ S, triangle N k * triangle N (j - k) := by apply Finset.sum_subset (by intro k hk; simp only [Finset.mem_Icc, S] at hk ⊢; omega) intro k hk hk' have hkN : k = -(N : ℤ) - 1 := by simp only [Finset.mem_Icc, S] at hk hk' omega subst k have hz : triangle N (-(N : ℤ) - 1) = 0 := triangle_support N _ (by rw [abs_of_nonpos (by omega : -(N : ℤ) - 1 ≤ 0)] omega) simp [hz] change (∑ k ∈ Icc (-(N : ℤ)) (N : ℤ), triangle N k * triangle N (j + 1 - k)) - (∑ k ∈ Icc (-(N : ℤ)) (N : ℤ), triangle N k * triangle N (j - k)) = _ rw [hleft, hright, ← Finset.sum_sub_distrib] apply Finset.sum_congr rfl intro k hk simp only [delta] ring
    Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.delta_convolution · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Variation.lean:26
  • delta2_convolution theorem — For any order N and any integer frequency j, the second difference of the raw Jackson Fourier coefficients at j equals the sum, over integers k between −N − 1 and N, of the first difference of the triangular sequence at k times its first difference at j − k.
    N :
    ℕ
    j :
    ℤ
    delta2 (convolution N) j
    = ∑ k ∈ Icc (-(N : ℤ) - 1) (N : ℤ), delta (triangle N) k * delta (triangle N) (j - k)
    Proof (Lean source)
    theorem delta2_convolution (N : ℕ) (j : ℤ) : delta2 (convolution N) j = ∑ k ∈ Icc (-(N : ℤ) - 1) (N : ℤ), delta (triangle N) k * delta (triangle N) (j - k) := by rw [delta2, delta, delta_convolution N (j + 1), delta_convolution N j] rw [← Finset.sum_sub_distrib] apply Finset.sum_congr rfl intro k hk simp only [delta] congr 1 ring
    Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.delta2_convolution · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Variation.lean:87
  • triangle_l1 theorem — For any order N, the sum over all integers of the absolute values of the triangular sequence equals N².
    N :
    ℕ
    (∑' j : ℤ, |triangle N j|) = (N : ℝ) ^ 2
    Proof (Lean source)
    theorem triangle_l1 (N : ℕ) : (∑' j : ℤ, |triangle N j|) = (N : ℝ) ^ 2 := by have hsupport : ∀ j : ℤ, j ∉ Icc (-(N : ℤ)) (N : ℤ) → |triangle N j| = 0 := by intro j hj have hj' : (N : ℤ) ≤ |j| := by by_contra h have habs : |j| < (N : ℤ) := by omega have hbounds := abs_lt.mp habs simp only [Finset.mem_Icc] at hj omega simp [triangle_support N j hj'] rw [tsum_eq_sum hsupport] have heven : Even (fun j : ℤ => |triangle N j|) := by intro j simp [triangle, Int.natAbs_neg] rw [Finset.sum_Icc_of_even_eq_range heven N] have hterm : ∀ m ∈ range (N + 1), |triangle N (m : ℤ)| = (N : ℝ) - m := by intro m hm have hmN : m ≤ N := by have := Finset.mem_range.mp hm omega simp [triangle, Nat.cast_sub hmN, hmN] rw [Finset.sum_congr rfl hterm] simp only [Finset.sum_sub_distrib, Finset.sum_const, Finset.card_range, nsmul_eq_mul] have hsum : (∑ m ∈ range (N + 1), (m : ℝ)) * 2 = ((N + 1 : ℕ) : ℝ) * N := by have hnat : (∑ m ∈ range (N + 1), m) * 2 = (N + 1) * N := by simpa using Finset.sum_range_id_mul_two (N + 1) have hreal := congrArg (fun x : ℕ => (x : ℝ)) hnat simpa only [Nat.cast_mul, Nat.cast_sum, Nat.cast_add, Nat.cast_one, Nat.cast_ofNat] using hreal simp only [triangle, Int.natAbs_zero, Nat.sub_zero] rw [abs_of_nonneg (show (0 : ℝ) ≤ N by positivity)] push_cast at hsum ⊢ nlinarith
    Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.triangle_l1 · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Variation.lean:102
  • triangle_delta_l1 theorem — For any order N, the sum over all integers of the absolute first differences of the triangular sequence equals 2N.
    N :
    ℕ
    (∑' j : ℤ, |delta (triangle N) j|) = 2 * (N : ℝ)
    Proof (Lean source)
    theorem triangle_delta_l1 (N : ℕ) : (∑' j : ℤ, |delta (triangle N) j|) = 2 * (N : ℝ) := by have hneg (j : ℤ) (hlo : -(N : ℤ) ≤ j) (hhi : j ≤ 0) : triangle N j = (N : ℝ) + j := by have hnat : j.natAbs ≤ N := by have h : (j.natAbs : ℤ) ≤ N := by rw [Int.natCast_natAbs, abs_of_nonpos hhi] omega exact_mod_cast h have hcast : ((j.natAbs : ℕ) : ℝ) = -(j : ℝ) := by have hh : (j.natAbs : ℤ) = -j := by rw [Int.natCast_natAbs, abs_of_nonpos hhi] have hr := congrArg (fun x : ℤ => (x : ℝ)) hh simpa only [Int.cast_natCast, Int.cast_neg] using hr simp only [triangle, Nat.cast_sub hnat, hcast] ring have hpos (j : ℤ) (hlo : 0 ≤ j) (hhi : j ≤ (N : ℤ)) : triangle N j = (N : ℝ) - j := by have hnat : j.natAbs ≤ N := by have h : (j.natAbs : ℤ) ≤ N := by rw [Int.natCast_natAbs, abs_of_nonneg hlo] omega exact_mod_cast h have hcast : ((j.natAbs : ℕ) : ℝ) = (j : ℝ) := by have hr := congrArg (fun x : ℤ => (x : ℝ)) (Int.natAbs_of_nonneg hlo) simpa only [Int.cast_natCast] using hr simp only [triangle, Nat.cast_sub hnat, hcast] have hpoint (j : ℤ) : |delta (triangle N) j| = if j ∈ Ico (-(N : ℤ)) (N : ℤ) then 1 else 0 := by by_cases hmem : j ∈ Ico (-(N : ℤ)) (N : ℤ) · simp only [Finset.mem_Ico] at hmem rw [if_pos (Finset.mem_Ico.mpr hmem)] by_cases hj : j < 0 · have hj1 : j + 1 ≤ 0 := by omega rw [delta, hneg j hmem.1 (by omega), hneg (j + 1) (by omega) hj1] push_cast norm_num · have hj0 : 0 ≤ j := by omega rw [delta, hpos j hj0 (by omega), hpos (j + 1) (by omega) (by omega)] push_cast norm_num · rw [if_neg hmem] have hout : j < -(N : ℤ) ∨ (N : ℤ) ≤ j := by simp only [Finset.mem_Ico, not_and_or, not_le, not_lt] at hmem exact hmem rcases hout with hj | hj · have hj1 : j + 1 ≤ -(N : ℤ) := by omega have hz0 : triangle N j = 0 := triangle_support N j (by rw [abs_of_nonpos (by omega : j ≤ 0)]; omega) have hz1 : triangle N (j + 1) = 0 := triangle_support N (j + 1) (by rw [abs_of_nonpos (by omega : j + 1 ≤ 0)]; omega) simp [delta, hz0, hz1] · have hz0 : triangle N j = 0 := triangle_support N j (by rw [abs_of_nonneg (by omega : 0 ≤ j)]; omega) have hz1 : triangle N (j + 1) = 0 := triangle_support N (j + 1) (by rw [abs_of_nonneg (by omega : 0 ≤ j + 1)]; omega) simp [delta, hz0, hz1] have hsum : (∑' j : ℤ, |delta (triangle N) j|) = ∑ j ∈ Ico (-(N : ℤ)) (N : ℤ), (1 : ℝ) := by rw [tsum_eq_sum (s := Ico (-(N : ℤ)) (N : ℤ)) (by intro j hj rw [hpoint j, if_neg hj])] apply Finset.sum_congr rfl intro j hj rw [hpoint j, if_pos hj] rw [hsum] simp only [Finset.sum_const, nsmul_eq_mul, mul_one, Int.card_Ico] have hnat : ((N : ℤ) - -(N : ℤ)).toNat = 2 * N := by omega rw [hnat] push_cast ring
    Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.triangle_delta_l1 · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Variation.lean:143
  • finite_convolution_tsum_eq_sum theorem — For two real sequences a and b indexed by the integers and a finite set of integers outside which a vanishes, the convolution sum of a and b at any index equals the same sum restricted to that finite set.
    a b :
    ℤ → ℝ
    s :
    Finset ℤ
    ha :
    ∀ k ∉ s, a k = 0
    j :
    ℤ
    (∑' k : ℤ, a k * b (j - k)) = ∑ k ∈ s, a k * b (j - k)
    Proof (Lean source)
    theorem finite_convolution_tsum_eq_sum (a b : ℤ → ℝ) (s : Finset ℤ) (ha : ∀ k ∉ s, a k = 0) (j : ℤ) : (∑' k : ℤ, a k * b (j - k)) = ∑ k ∈ s, a k * b (j - k) := by apply tsum_eq_sum intro k hk simp [ha k hk]
    Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.finite_convolution_tsum_eq_sum · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Variation.lean:217
  • finite_convolution_l1 theorem — For two real sequences indexed by the integers each with finite support, the sum over all integers of the absolute value of their discrete convolution is at most the product of the sums of their absolute values.
    a b :
    ℤ → ℝ
    (∑' j : ℤ, |∑' k : ℤ, a k * b (j - k)|) ≤ (∑' k : ℤ, |a k|) * (∑' l : ℤ, |b l|)
    Proof (Lean source)
    theorem finite_convolution_l1 (a b : ℤ → ℝ) (ha : HasFiniteSupport a) (hb : HasFiniteSupport b) : (∑' j : ℤ, |∑' k : ℤ, a k * b (j - k)|) ≤ (∑' k : ℤ, |a k|) * (∑' l : ℤ, |b l|) := by let s : Finset ℤ := ha.toFinset let t : Finset ℤ := hb.toFinset have ha0 (k : ℤ) (hk : k ∉ s) : a k = 0 := by by_contra h exact hk ((Set.Finite.mem_toFinset ha).2 (Function.mem_support.mpr h)) have hb0 (l : ℤ) (hl : l ∉ t) : b l = 0 := by by_contra h exact hl ((Set.Finite.mem_toFinset hb).2 (Function.mem_support.mpr h)) let u : Finset ℤ := s.biUnion (fun k => t.image (fun l => k + l)) have hu (j : ℤ) (hj : j ∉ u) : (∑' k : ℤ, a k * b (j - k)) = 0 := by rw [finite_convolution_tsum_eq_sum a b s ha0] apply Finset.sum_eq_zero intro k hk have hnot : j - k ∉ t := by intro hmem apply hj simp only [u, Finset.mem_biUnion, mem_image] exact ⟨k, hk, j - k, hmem, by ring⟩ simp [hb0 (j - k) hnot] have houter : (∑' j : ℤ, |∑' k : ℤ, a k * b (j - k)|) = ∑ j ∈ u, |∑' k : ℤ, a k * b (j - k)| := by apply tsum_eq_sum intro j hj simp [hu j hj] have hbound (j : ℤ) : |∑' k : ℤ, a k * b (j - k)| ≤ ∑ k ∈ s, |a k| * |b (j - k)| := by rw [finite_convolution_tsum_eq_sum a b s ha0] calc |∑ k ∈ s, a k * b (j - k)| ≤ ∑ k ∈ s, |a k * b (j - k)| := Finset.abs_sum_le_sum_abs _ _ _ = ∑ k ∈ s, |a k| * |b (j - k)| := by simp only [abs_mul] have hbmass : (∑' l : ℤ, |b l|) = ∑ l ∈ t, |b l| := by apply tsum_eq_sum intro l hl simp [hb0 l hl] have hamass : (∑' k : ℤ, |a k|) = ∑ k ∈ s, |a k| := by apply tsum_eq_sum intro k hk simp [ha0 k hk] have hshift (k : ℤ) (hk : k ∈ s) : (∑ j ∈ u, |b (j - k)|) = ∑ l ∈ t, |b l| := by have hsub : t.image (fun l => k + l) ⊆ u := by intro j hj exact Finset.mem_biUnion.mpr ⟨k, hk, hj⟩ calc (∑ j ∈ u, |b (j - k)|) = ∑ j ∈ t.image (fun l => k + l), |b (j - k)| := by symm apply Finset.sum_subset hsub intro j hj hj' have hnot : j - k ∉ t := by intro hmem apply hj' exact Finset.mem_image.mpr ⟨j - k, hmem, by ring⟩ simp [hb0 (j - k) hnot] _ = ∑ l ∈ t, |b l| := by rw [Finset.sum_image (by intro l hl m hm h; exact add_left_cancel h)] simp only [add_sub_cancel_left] rw [houter, hamass, hbmass] calc (∑ j ∈ u, |∑' k : ℤ, a k * b (j - k)|) ≤ ∑ j ∈ u, ∑ k ∈ s, |a k| * |b (j - k)| := Finset.sum_le_sum (by intro j hj; exact hbound j) _ = ∑ k ∈ s, |a k| * ∑ l ∈ t, |b l| := by rw [Finset.sum_comm] apply Finset.sum_congr rfl intro k hk rw [← Finset.mul_sum, hshift k hk] _ = (∑ k ∈ s, |a k|) * ∑ l ∈ t, |b l| := by rw [Finset.sum_mul]
    Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.finite_convolution_l1 · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Variation.lean:227
  • normalizedCoeff_l1 theorem — For an order N that is positive, the sum over all integers of the absolute values of the normalized Jackson coefficients is at most 2N.
    N :
    ℕ
    hN :
    0 < N
    (∑' j : ℤ, |normalizedCoeff N j|) ≤ 2 * (N : ℝ)
    Proof (Lean source)
    theorem normalizedCoeff_l1 (N : ℕ) (hN : 0 < N) : (∑' j : ℤ, |normalizedCoeff N j|) ≤ 2 * (N : ℝ) := by have htri := triangle_finite N have hconv (j : ℤ) : convolution N j = ∑' k : ℤ, triangle N k * triangle N (j - k) := by exact (finite_convolution_tsum_eq_sum _ _ _ (triangle_outside N) j).symm have hmass : (∑' j : ℤ, |convolution N j|) ≤ (N : ℝ) ^ 4 := by have h := finite_convolution_l1 (triangle N) (triangle N) htri htri simp_rw [← hconv] at h rw [triangle_l1] at h nlinarith have hpos := convolution_zero_pos N hN have hscale : (∑' j : ℤ, |normalizedCoeff N j|) = (∑' j : ℤ, |convolution N j|) / convolution N 0 := by simp_rw [normalizedCoeff, abs_div, abs_of_pos hpos, div_eq_mul_inv] rw [tsum_mul_right] rw [hscale] have hn : (0 : ℝ) ≤ N := by positivity rw [convolution_zero N] at hpos ⊢ apply (div_le_iff₀ hpos).2 nlinarith [sq_nonneg ((N : ℝ) ^ 2), sq_nonneg (N : ℝ)]
    Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.normalizedCoeff_l1 · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Variation.lean:326
  • normalizedCoeff_delta_l1 theorem — For an order N that is positive, the sum over all integers of the absolute first differences of the normalized Jackson coefficients is at most four.
    N :
    ℕ
    hN :
    0 < N
    (∑' j : ℤ, |delta (normalizedCoeff N) j|) ≤ 4
    Proof (Lean source)
    theorem normalizedCoeff_delta_l1 (N : ℕ) (hN : 0 < N) : (∑' j : ℤ, |delta (normalizedCoeff N) j|) ≤ 4 := by have hraw (j : ℤ) : delta (convolution N) j = ∑' k : ℤ, delta (triangle N) k * triangle N (j - k) := by rw [delta_convolution] exact (finite_convolution_tsum_eq_sum _ _ _ (delta_triangle_outside N) j).symm have hmass : (∑' j : ℤ, |delta (convolution N) j|) ≤ 2 * (N : ℝ) ^ 3 := by have h := finite_convolution_l1 (delta (triangle N)) (triangle N) (delta_triangle_finite N) (triangle_finite N) simp_rw [← hraw] at h rw [triangle_delta_l1, triangle_l1] at h nlinarith have hpos := convolution_zero_pos N hN have hdiff (j : ℤ) : delta (normalizedCoeff N) j = delta (convolution N) j / convolution N 0 := by unfold delta normalizedCoeff ring have hscale : (∑' j : ℤ, |delta (normalizedCoeff N) j|) = (∑' j : ℤ, |delta (convolution N) j|) / convolution N 0 := by simp_rw [hdiff, abs_div, abs_of_pos hpos, div_eq_mul_inv] rw [tsum_mul_right] rw [hscale] rw [convolution_zero N] at hpos ⊢ apply (div_le_iff₀ hpos).2 have hn : (0 : ℝ) ≤ N := by positivity nlinarith [sq_nonneg (N : ℝ)]
    Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.normalizedCoeff_delta_l1 · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Variation.lean:373
Center 1 core · 0 supporting At the center all cosine modes align, so the antiderivative has a uniform lower and upper bound proportional to the reciprocal of its order. ★ packet_center_bounds

Center size of the Jackson antiderivative packet

At the center all cosine modes align, so the antiderivative has a uniform lower and upper bound proportional to the reciprocal of its order.

theorem packet_center_bounds reviewed
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson

There are positive constants c and C, with c at most C, such that for every order N at least two the absolute value of the packet antiderivative at angle zero lies between c / N and C / N.

Formal statement
∃ c C : ℝ,
0 < c
c ≤ C
conclusion 1
N :
ℕ
2 ≤ N
c / (N : ℝ) ≤ |packetAntideriv N 0|
|packetAntideriv N 0| ≤ C / (N : ℝ)
Proof (Lean source)
theorem packet_center_bounds : ∃ c C : ℝ, 0 < c ∧ c ≤ C ∧ ∀ N : ℕ, 2 ≤ N → c / (N : ℝ) ≤ |packetAntideriv N 0| ∧ |packetAntideriv N 0| ≤ C / (N : ℝ) := by refine ⟨1 / 72, 1 / 2, by norm_num, by norm_num, ?_⟩ intro N hN let s : Finset ℤ := Icc (-((2 * N - 2 : ℕ) : ℤ)) ((2 * N - 2 : ℕ) : ℤ) have hn : (0 : ℝ) < N := by exact_mod_cast (by omega : 0 < N) have hnorm (j : ℤ) : 0 ≤ normalizedCoeff N j := by unfold normalizedCoeff convolution apply div_nonneg · apply Finset.sum_nonneg intro k hk exact mul_nonneg (Nat.cast_nonneg _) (Nat.cast_nonneg _) · exact le_of_lt (convolution_zero_pos N (by omega)) have hfreq (j : ℤ) (hj : j ∈ s) : 2 * (N : ℝ) ≤ 4 * (N : ℝ) + (j : ℝ) ∧ 4 * (N : ℝ) + (j : ℝ) ≤ 6 * (N : ℝ) ∧ 2 * (N : ℝ) ≤ 4 * (N : ℝ) - (j : ℝ) ∧ 4 * (N : ℝ) - (j : ℝ) ≤ 6 * (N : ℝ) := by have hj' : -((2 * N - 2 : ℕ) : ℤ) ≤ j ∧ j ≤ ((2 * N - 2 : ℕ) : ℤ) := Finset.mem_Icc.mp hj have hsub : 2 * N - 2 ≤ 2 * N := Nat.sub_le _ _ have hlo : -(2 * (N : ℤ)) ≤ j := by omega have hhi : j ≤ 2 * (N : ℤ) := by omega have hlo' : -(2 * (N : ℝ)) ≤ (j : ℝ) := by exact_mod_cast hlo have hhi' : (j : ℝ) ≤ 2 * (N : ℝ) := by exact_mod_cast hhi refine ⟨?_, ?_, ?_, ?_⟩ <;> linarith have hrec (j : ℤ) (hj : j ∈ s) (σ : ℝ) (hσ : σ = 1 ∨ σ = -1) : 1 / (36 * (N : ℝ) ^ 2) ≤ reciprocalSquare N σ j ∧ reciprocalSquare N σ j ≤ 1 / (4 * (N : ℝ) ^ 2) := by obtain ⟨hp1, hp2, hm1, hm2⟩ := hfreq j hj have hp0 : 0 < 4 * (N : ℝ) + (j : ℝ) := by linarith have hm0 : 0 < 4 * (N : ℝ) - (j : ℝ) := by linarith rcases hσ with rfl | rfl · unfold reciprocalSquare simp only [one_mul] constructor · apply one_div_le_one_div_of_le (by positivity) nlinarith [mul_nonneg (show 0 ≤ 6 * (N : ℝ) - (4 * (N : ℝ) + (j : ℝ)) by linarith) (show 0 ≤ 6 * (N : ℝ) + (4 * (N : ℝ) + (j : ℝ)) by linarith)] · apply one_div_le_one_div_of_le (by positivity) nlinarith [mul_nonneg (show 0 ≤ (4 * (N : ℝ) + (j : ℝ)) - 2 * (N : ℝ) by linarith) (show 0 ≤ (4 * (N : ℝ) + (j : ℝ)) + 2 * (N : ℝ) by linarith)] · unfold reciprocalSquare simp only [neg_mul, one_mul] constructor · apply one_div_le_one_div_of_le (by positivity) nlinarith [mul_nonneg (show 0 ≤ 6 * (N : ℝ) - (4 * (N : ℝ) - (j : ℝ)) by linarith) (show 0 ≤ 6 * (N : ℝ) + (4 * (N : ℝ) - (j : ℝ)) by linarith)] · apply one_div_le_one_div_of_le (by positivity) nlinarith [mul_nonneg (show 0 ≤ (4 * (N : ℝ) - (j : ℝ)) - 2 * (N : ℝ) by linarith) (show 0 ≤ (4 * (N : ℝ) - (j : ℝ)) + 2 * (N : ℝ) by linarith)] have hterm (j : ℤ) (hj : j ∈ s) : normalizedCoeff N j * (1 / (18 * (N : ℝ) ^ 2)) ≤ packetCoeffPlus N j + packetCoeffMinus N j ∧ packetCoeffPlus N j + packetCoeffMinus N j ≤ normalizedCoeff N j * (1 / (2 * (N : ℝ) ^ 2)) := by obtain ⟨hpL, hpU⟩ := hrec j hj 1 (inl rfl) obtain ⟨hmL, hmU⟩ := hrec j hj (-1) (inr rfl) have ha := hnorm j simp only [packetCoeffPlus, packetCoeffMinus, weightedCoeff] constructor · calc _ = normalizedCoeff N j * (1 / (36 * (N : ℝ) ^ 2)) + normalizedCoeff N j * (1 / (36 * (N : ℝ) ^ 2)) := by ring _ ≤ _ := add_le_add (mul_le_mul_of_nonneg_left hpL ha) (mul_le_mul_of_nonneg_left hmL ha) · calc _ ≤ normalizedCoeff N j * (1 / (4 * (N : ℝ) ^ 2)) + normalizedCoeff N j * (1 / (4 * (N : ℝ) ^ 2)) := add_le_add (mul_le_mul_of_nonneg_left hpU ha) (mul_le_mul_of_nonneg_left hmU ha) _ = _ := by ring have hmass : (∑ j ∈ s, normalizedCoeff N j) = ∑' j : ℤ, |normalizedCoeff N j| := by rw [tsum_eq_sum (s := s)] · simp_rw [abs_of_nonneg (hnorm _)] · intro j hj have hfar : ((2 * N - 2 : ℕ) : ℤ) < |j| := by simp only [s, Finset.mem_Icc] at hj rcases le_total j 0 with h | h · rw [abs_of_nonpos h]; omega · rw [abs_of_nonneg h]; omega simp [normalizedCoeff_support N j hfar] have hsumL : (∑ j ∈ s, normalizedCoeff N j * (1 / (18 * (N : ℝ) ^ 2))) ≤ ∑ j ∈ s, (packetCoeffPlus N j + packetCoeffMinus N j) := by apply Finset.sum_le_sum intro j hj exact (hterm j hj).1 have hsumU : (∑ j ∈ s, (packetCoeffPlus N j + packetCoeffMinus N j)) ≤ ∑ j ∈ s, normalizedCoeff N j * (1 / (2 * (N : ℝ) ^ 2)) := by apply Finset.sum_le_sum intro j hj exact (hterm j hj).2 have hsum0 : 0 ≤ ∑ j ∈ s, (packetCoeffPlus N j + packetCoeffMinus N j) := by apply Finset.sum_nonneg intro j hj exact le_trans (mul_nonneg (hnorm j) (by positivity)) (hterm j hj).1 have hcenter : |packetAntideriv N 0| = (1 / 2 : ℝ) * ∑ j ∈ s, (packetCoeffPlus N j + packetCoeffMinus N j) := by simp only [packetAntideriv, mul_zero, Real.cos_zero, mul_one] change |-(1 / 2 : ℝ) * (∑ j ∈ s, (packetCoeffPlus N j + packetCoeffMinus N j))| = _ rw [abs_mul, abs_neg, abs_of_nonneg (by norm_num : (0 : ℝ) ≤ 1 / 2), abs_of_nonneg hsum0] rw [hcenter] have hmL := normalizedCoeff_l1_lower N hN have hmU := normalizedCoeff_l1 N (by omega) rw [← hmass] at hmL hmU rw [← Finset.sum_mul] at hsumL hsumU constructor · calc (1 / 72 : ℝ) / N ≤ (1 / 2 : ℝ) * ((∑ j ∈ s, normalizedCoeff N j) * (1 / (18 * (N : ℝ) ^ 2))) := by calc _ = (1 / 2 : ℝ) * ((N / 2) * (1 / (18 * (N : ℝ) ^ 2))) := by field_simp ring _ ≤ _ := by gcongr _ ≤ _ := mul_le_mul_of_nonneg_left hsumL (by norm_num) · calc _ ≤ (1 / 2 : ℝ) * ((∑ j ∈ s, normalizedCoeff N j) * (1 / (2 * (N : ℝ) ^ 2))) := mul_le_mul_of_nonneg_left hsumU (by norm_num) _ ≤ (1 / 2 : ℝ) / N := by calc _ ≤ (1 / 2 : ℝ) * ((2 * N) * (1 / (2 * (N : ℝ) ^ 2))) := by gcongr _ = _ := by field_simp
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.packet_center_bounds · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Center.lean:16 · uses packetAntideriv
Center­Mass 1 core · 0 supporting The nonnegative finite convolution has coefficient mass proportional to its order. ★ normalizedCoeff_l1_lower

Mass of the normalized Jackson coefficients

The nonnegative finite convolution has coefficient mass proportional to its order. This supplies the lower mass estimate needed at the center of a packet.

theorem normalizedCoeff_l1_lower reviewed
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson

For an order N that is at least two, the sum over all integers of the absolute values of the normalized Jackson coefficients is at least N / 2.

Formal statement
N :
ℕ
hN :
2 ≤ N
(N : ℝ) / 2 ≤ ∑' j : ℤ, |normalizedCoeff N j|
Proof (Lean source)
theorem normalizedCoeff_l1_lower (N : ℕ) (hN : 2 ≤ N) : (N : ℝ) / 2 ≤ ∑' j : ℤ, |normalizedCoeff N j| := by have hNpos : 0 < N := by omega have htri (j : ℤ) : 0 ≤ triangle N j := Nat.cast_nonneg _ have hconv (j : ℤ) : 0 ≤ convolution N j := by unfold convolution apply Finset.sum_nonneg intro k hk exact mul_nonneg (htri k) (htri (j - k)) have htriMass : (∑' j : ℤ, triangle N j) = (N : ℝ) ^ 2 := by simpa only [abs_of_nonneg (htri _)] using triangle_l1 N have hpair := triangle_pair_sum_eq_convolution N hNpos 0 simp only [mul_zero, Real.cos_zero, mul_one] at hpair have hmass : (∑' j : ℤ, |convolution N j|) = (N : ℝ) ^ 4 := by rw [tsum_eq_sum (s := Icc (-((2 * N - 2 : ℕ) : ℤ)) ((2 * N - 2 : ℕ) : ℤ))] · simp_rw [abs_of_nonneg (hconv _)] rw [← hpair] simp_rw [← Finset.mul_sum] rw [← Finset.sum_mul] have hsum : (∑ k ∈ Icc (-(N : ℤ)) (N : ℤ), triangle N k) = (N : ℝ) ^ 2 := by rw [← htriMass] symm apply tsum_eq_sum intro k hk have : (N : ℤ) ≤ |k| := by simp only [Finset.mem_Icc] at hk rcases le_total k 0 with h | h · rw [abs_of_nonpos h] omega · rw [abs_of_nonneg h] omega exact triangle_support N k this rw [hsum] ring · intro j hj have hfar : ((2 * N - 2 : ℕ) : ℤ) < |j| := by simp only [Finset.mem_Icc] at hj rcases le_total j 0 with h | h · rw [abs_of_nonpos h] omega · rw [abs_of_nonneg h] omega simp [convolution_support N j hfar] have hpos := convolution_zero_pos N hNpos have hscale : (∑' j : ℤ, |normalizedCoeff N j|) = (∑' j : ℤ, |convolution N j|) / convolution N 0 := by simp_rw [normalizedCoeff, abs_div, abs_of_pos hpos, div_eq_mul_inv] rw [tsum_mul_right] rw [hscale, hmass, convolution_zero N] have hn : (2 : ℝ) ≤ N := by exact_mod_cast hN have hd : 0 < (2 * (N : ℝ) ^ 3 + N) / 3 := by positivity apply (le_div_iff₀ hd).2 have hs : 1 ≤ (N : ℝ) ^ 2 := by nlinarith have hp : 0 ≤ (N : ℝ) ^ 2 * ((N : ℝ) ^ 2 - 1) := mul_nonneg (sq_nonneg _) (by linarith) nlinarith [hp]
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.normalizedCoeff_l1_lower · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/CenterMass.lean:15 · uses normalizedCoeff
Derivative 1 core · 0 supporting For every order N ≥ 2, the finite cosine series with reciprocal-square weights 1/(4N ± j)² built from the Jackson kernel's Fourier coefficients has second derivative equal to the oscillatory Jackson packet, the Jackson k ★ packet_twice_deriv

The second derivative of the Jackson packet antiderivative

For every order N ≥ 2, the finite cosine series with reciprocal-square weights 1/(4N ± j)² built from the Jackson kernel's Fourier coefficients has second derivative equal to the oscillatory Jackson packet, the Jackson kernel multiplied by cos(4N·u). So the modulated kernel has an explicit trigonometric-polynomial twice antiderivative.

Main results

* packet_twice_deriv — the second derivative of packetAntideriv N at every real u is packetOscillation N u, for N ≥ 2.

theorem packet_twice_deriv reviewed
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson

For an order N that is at least two and any real angle u, the second derivative of the packet antiderivative at u equals the oscillatory Jackson packet at u.

Formal statement
N :
ℕ
hN :
2 ≤ N
u :
ℝ
Proof (Lean source)
theorem packet_twice_deriv (N : ℕ) (hN : 2 ≤ N) (u : ℝ) : deriv (deriv (packetAntideriv N)) u = packetOscillation N u := by let S : Finset ℤ := Icc (-((2 * N - 2 : ℕ) : ℤ)) ((2 * N - 2 : ℕ) : ℤ) let p (j : ℤ) : ℝ := ((4 * (N : ℤ) + j : ℤ) : ℝ) let m (j : ℤ) : ℝ := ((4 * (N : ℤ) - j : ℤ) : ℝ) let a (j : ℤ) : ℝ := packetCoeffPlus N j let b (j : ℤ) : ℝ := packetCoeffMinus N j have hcos (c k x : ℝ) : HasDerivAt (fun y : ℝ => c * cos (k * y)) (-c * k * sin (k * x)) x := by convert ((Real.hasDerivAt_cos (k * x)).comp x ((hasDerivAt_id x).const_mul k)).const_mul c using 1 <;> first | rfl | ring have hsin (c k x : ℝ) : HasDerivAt (fun y : ℝ => c * sin (k * y)) (c * k * cos (k * x)) x := by convert ((Real.hasDerivAt_sin (k * x)).comp x ((hasDerivAt_id x).const_mul k)).const_mul c using 1 <;> first | rfl | ring have hfirst (x : ℝ) : deriv (packetAntideriv N) x = (1 / 2 : ℝ) * ∑ j ∈ S, (a j * p j * sin (p j * x) + b j * m j * sin (m j * x)) := by have ht (j : ℤ) : HasDerivAt (fun y : ℝ => a j * cos (p j * y) + b j * cos (m j * y)) (-(a j) * p j * sin (p j * x) - b j * m j * sin (m j * x)) x := by convert (hcos (a j) (p j) x).add (hcos (b j) (m j) x) using 1 <;> first | rfl | ring have hs := (HasDerivAt.fun_sum (u := S) (fun j hj => ht j)).const_mul (-1 / 2 : ℝ) have hs' := hs.deriv convert hs' using 1 · congr 1 funext y simp only [packetAntideriv, S, a, b, p, m] ring · simp only [Finset.mul_sum] apply Finset.sum_congr rfl intro j hj ring have hsecond : HasDerivAt (fun x : ℝ => (1 / 2 : ℝ) * ∑ j ∈ S, (a j * p j * sin (p j * x) + b j * m j * sin (m j * x))) ((1 / 2 : ℝ) * ∑ j ∈ S, (a j * p j ^ 2 * cos (p j * u) + b j * m j ^ 2 * cos (m j * u))) u := by have ht (j : ℤ) : HasDerivAt (fun x : ℝ => a j * p j * sin (p j * x) + b j * m j * sin (m j * x)) (a j * p j ^ 2 * cos (p j * u) + b j * m j ^ 2 * cos (m j * u)) u := by convert (hsin (a j * p j) (p j) u).add (hsin (b j * m j) (m j) u) using 1 <;> first | rfl | ring convert (HasDerivAt.fun_sum (u := S) (fun j hj => ht j)).const_mul (1 / 2 : ℝ) using 1 rw [show deriv (packetAntideriv N) = fun x => (1 / 2 : ℝ) * ∑ j ∈ S, (a j * p j * sin (p j * x) + b j * m j * sin (m j * x)) from funext hfirst] rw [hsecond.deriv] have hcancel (j : ℤ) (hj : j ∈ S) : a j * p j ^ 2 = normalizedCoeff N j ∧ b j * m j ^ 2 = normalizedCoeff N j := by have hj' : -((2 * N - 2 : ℕ) : ℤ) ≤ j ∧ j ≤ ((2 * N - 2 : ℕ) : ℤ) := Finset.mem_Icc.mp hj have hp : p j ≠ 0 := by dsimp [p] have : 4 * (N : ℤ) + j ≠ 0 := by omega exact_mod_cast this have hm : m j ≠ 0 := by dsimp [m] have : 4 * (N : ℤ) - j ≠ 0 := by omega exact_mod_cast this constructor · have hden : 4 * (N : ℝ) + (1 : ℝ) * (j : ℝ) = p j := by dsimp [p]; push_cast; ring change normalizedCoeff N j * (1 / (4 * (N : ℝ) + 1 * (j : ℝ)) ^ 2) * p j ^ 2 = normalizedCoeff N j rw [hden] field_simp · have hden : 4 * (N : ℝ) + (-1 : ℝ) * (j : ℝ) = m j := by dsimp [m]; push_cast; ring change normalizedCoeff N j * (1 / (4 * (N : ℝ) + -1 * (j : ℝ)) ^ 2) * m j ^ 2 = normalizedCoeff N j rw [hden] field_simp have htrig (j : ℤ) : cos (p j * u) + cos (m j * u) = 2 * cos ((j : ℝ) * u) * cos ((4 * N : ℝ) * u) := by have hp : p j * u = (4 * N : ℝ) * u + (j : ℝ) * u := by dsimp [p]; push_cast; ring have hm : m j * u = (4 * N : ℝ) * u - (j : ℝ) * u := by dsimp [m]; push_cast; ring rw [hp, hm, Real.cos_add, Real.cos_sub] ring calc (1 / 2 : ℝ) * ∑ j ∈ S, (a j * p j ^ 2 * cos (p j * u) + b j * m j ^ 2 * cos (m j * u)) = (∑ j ∈ S, normalizedCoeff N j * cos ((j : ℝ) * u)) * cos ((4 * N : ℝ) * u) := by rw [Finset.mul_sum, Finset.sum_mul] apply Finset.sum_congr rfl intro j hj obtain ⟨hp, hm⟩ := hcancel j hj rw [hp, hm] rw [← mul_add, htrig] ring _ = packetOscillation N u := by rw [← kernel_fourier N (by omega : 0 < N) u] rfl
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.packet_twice_deriv · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Derivative.lean:22 · uses packetAntideriv , packetOscillation
Fourier­Bridge 1 core · 0 supporting The shifted real cosine polynomial is the real part of two modulated finite complex Fourier polynomials. ★ packetAntideriv_eq_finiteFourier

Bridge from Jackson cosine packets to finite complex Fourier sums

The shifted real cosine polynomial is the real part of two modulated finite complex Fourier polynomials. This lets Abel summation act on its coefficients.

theorem packetAntideriv_eq_finiteFourier reviewed
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson

For any order N and any angle u, the packet antiderivative equals minus one half times the sum of two real parts: that of the complex exponential of 4N i u times the Fourier series of the plus-shifted coefficients at u, and that of the same exponential times the Fourier series of the minus-shifted coefficients at −u.

Formal statement
N :
ℕ
u :
ℝ
= -(1 / 2 : ℝ) * ((exp (I * (4 * (N : ℝ) * u : ℂ)) * finiteFourier (fun j => (packetCoeffPlus N j : ℂ)) u).re + (exp (I * (4 * (N : ℝ) * u : ℂ)) * finiteFourier (fun j => (packetCoeffMinus N j : ℂ)) (-u)).re)
Proof (Lean source)
theorem packetAntideriv_eq_finiteFourier (N : ℕ) (u : ℝ) : packetAntideriv N u = -(1 / 2 : ℝ) * ((exp (I * (4 * (N : ℝ) * u : ℂ)) * finiteFourier (fun j => (packetCoeffPlus N j : ℂ)) u).re + (exp (I * (4 * (N : ℝ) * u : ℂ)) * finiteFourier (fun j => (packetCoeffMinus N j : ℂ)) (-u)).re) := by let s : Finset ℤ := Icc (-((2 * N - 2 : ℕ) : ℤ)) ((2 * N - 2 : ℕ) : ℤ) have hout (j : ℤ) (hj : j ∉ s) : packetCoeffPlus N j = 0 ∧ packetCoeffMinus N j = 0 := by have hj' : ((2 * N - 2 : ℕ) : ℤ) < |j| := by simp only [s, Finset.mem_Icc, not_and_or, not_le] at hj have ha := le_abs_self j have hb := neg_le_abs j rcases hj with hj | hj <;> omega exact ⟨weightedCoeff_support N 1 j hj', weightedCoeff_support N (-1) j hj'⟩ have hplus : finiteFourier (fun j => (packetCoeffPlus N j : ℂ)) u = ∑ j ∈ s, (packetCoeffPlus N j : ℂ) * exp (I * (j : ℂ) * (u : ℂ)) := by unfold finiteFourier apply tsum_eq_sum intro j hj simp [(hout j hj).1] have hminus : finiteFourier (fun j => (packetCoeffMinus N j : ℂ)) (-u) = ∑ j ∈ s, (packetCoeffMinus N j : ℂ) * exp (I * (j : ℂ) * ((-u : ℝ) : ℂ)) := by unfold finiteFourier apply tsum_eq_sum intro j hj simp [(hout j hj).2] have hphase (c : ℝ) (j : ℤ) (v : ℝ) : (exp (I * (4 * (N : ℝ) * u : ℂ)) * ((c : ℂ) * exp (I * (j : ℂ) * (v : ℂ)))).re = c * cos ((4 * (N : ℝ) * u) + (j : ℝ) * v) := by rw [show exp (I * (4 * (N : ℝ) * u : ℂ)) * ((c : ℂ) * exp (I * (j : ℂ) * (v : ℂ))) = (c : ℂ) * exp (((4 * (N : ℝ) * u) + (j : ℝ) * v : ℝ) * I) by calc _ = (c : ℂ) * (exp (I * (4 * (N : ℝ) * u : ℂ)) * exp (I * (j : ℂ) * (v : ℂ))) := by ring _ = _ := by rw [← Complex.exp_add] congr 1 apply congrArg exp push_cast ring] simp only [Complex.mul_re, Complex.ofReal_re, Complex.ofReal_im, zero_mul, sub_zero, Complex.exp_ofReal_mul_I_re] rw [hplus, hminus] simp only [Finset.mul_sum, Complex.re_sum] unfold packetAntideriv congr 1 rw [← Finset.sum_add_distrib] apply Finset.sum_congr rfl intro j hj rw [hphase (packetCoeffPlus N j) j u, hphase (packetCoeffMinus N j) j (-u)] congr 1 <;> congr 1 <;> push_cast <;> ring
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.packetAntideriv_eq_finiteFourier · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/FourierBridge.lean:15 · uses finiteFourier , packetAntideriv , packetCoeffMinus , packetCoeffPlus
Localization 1 core · 1 supporting Discrete second variation controls decay away from the center, and the resulting envelope yields the normalized integral bound. ★ packet_pointwise_localization

Pointwise and integral localization of Jackson packets

Discrete second variation controls decay away from the center, and the resulting envelope yields the normalized integral bound.

theorem packet_pointwise_localization reviewed
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson

There is a positive constant C such that, for every order N at least two and every real angle u, the packet antiderivative at u is at most C divided by N times the square of (1 + N times the torus distance of u), in absolute value.

Formal statement
∃ C : ℝ,
0 < C
conclusion 1
N :
ℕ
2 ≤ N
u :
ℝ
|packetAntideriv N u| ≤ C / ((N : ℝ) * (1 + (N : ℝ) * torusDistance u) ^ 2)
Proof (Lean source)
theorem packet_pointwise_localization : ∃ C : ℝ, 0 < C ∧ ∀ N : ℕ, 2 ≤ N → ∀ u : ℝ, |packetAntideriv N u| ≤ C / ((N : ℝ) * (1 + (N : ℝ) * torusDistance u) ^ 2) := by refine ⟨8192, by norm_num, ?_⟩ intro N hN u have hn : (0 : ℝ) < N := by exact_mod_cast (by omega : 0 < N) let d := torusDistance u have hd : 0 ≤ d := (torusDistance_bounds u).1 have hden : 0 < (N : ℝ) * (1 + (N : ℝ) * d) ^ 2 := by positivity have hp := finiteFourier_norm_le (weightedCoeff N 1) (weightedCoeff_finite N 1) u have hm := finiteFourier_norm_le (weightedCoeff N (-1)) (weightedCoeff_finite N (-1)) (-u) have hnear : |packetAntideriv N u| ≤ 2 / (N : ℝ) := by calc _ ≤ (‖finiteFourier (fun j => (packetCoeffPlus N j : ℂ)) u‖ + ‖finiteFourier (fun j => (packetCoeffMinus N j : ℂ)) (-u)‖) / 2 := packet_abs_le_fourier N u _ ≤ ((∑' j : ℤ, |weightedCoeff N 1 j|) + (∑' j : ℤ, |weightedCoeff N (-1) j|)) / 2 := by dsimp [packetCoeffPlus, packetCoeffMinus] gcongr _ ≤ 2 / (N : ℝ) := by have hp' := weightedCoeff_l1 N hN 1 (inl rfl) have hm' := weightedCoeff_l1 N hN (-1) (inr rfl) linarith by_cases hsmall : (N : ℝ) * d ≤ 1 · calc |packetAntideriv N u| ≤ 2 / (N : ℝ) := hnear _ ≤ 8192 / ((N : ℝ) * (1 + (N : ℝ) * d) ^ 2) := by have hsq : (1 + (N : ℝ) * d) ^ 2 ≤ 4 := by have hnd : 0 ≤ (N : ℝ) * d := mul_nonneg hn.le hd nlinarith [mul_le_mul_of_nonneg_left hsmall hnd] apply (div_le_div_iff₀ hn hden).mpr nlinarith [mul_le_mul_of_nonneg_left hsq (le_of_lt hn)] · have hlarge : 1 ≤ (N : ℝ) * d := by linarith have hdpos : 0 < d := by nlinarith have hfplus := weightedCoeff_fourier_far N hN 1 u (inl rfl) hdpos have hfminus := weightedCoeff_fourier_far N hN (-1) (-u) (inr rfl) (by simpa only [torusDistance_neg] using hdpos) have hfar : |packetAntideriv N u| ≤ 2048 / ((N : ℝ) ^ 3 * d ^ 2) := by calc _ ≤ (‖finiteFourier (fun j => (packetCoeffPlus N j : ℂ)) u‖ + ‖finiteFourier (fun j => (packetCoeffMinus N j : ℂ)) (-u)‖) / 2 := packet_abs_le_fourier N u _ ≤ (2048 / ((N : ℝ) ^ 3 * d ^ 2) + 2048 / ((N : ℝ) ^ 3 * d ^ 2)) / 2 := by dsimp [packetCoeffPlus, packetCoeffMinus] rw [torusDistance_neg] at hfminus exact div_le_div_of_nonneg_right (add_le_add hfplus hfminus) (by norm_num) _ = _ := by ring calc |packetAntideriv N u| ≤ 2048 / ((N : ℝ) ^ 3 * d ^ 2) := hfar _ ≤ 8192 / ((N : ℝ) * (1 + (N : ℝ) * d) ^ 2) := by have hsq : (1 + (N : ℝ) * d) ^ 2 ≤ 4 * ((N : ℝ) * d) ^ 2 := by nlinarith [sq_nonneg ((N : ℝ) * d - 1)] apply (div_le_div_iff₀ (by positivity) hden).mpr nlinarith [mul_le_mul_of_nonneg_left hsq (le_of_lt hn)]
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.packet_pointwise_localization · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Localization.lean:222 · uses packetAntideriv , torusDistance
1 supporting declaration (lemmas, instances)
  • packet_l1_localization theorem — There is a positive constant C such that, for every order N at least two, the integral over the period from −π to π of the absolute value of the packet antiderivative divided by 2π is at most C / N².
    ∃ C : ℝ,
    0 < C
    conclusion 1
    N :
    ℕ
    2 ≤ N
    (∫ u in Icc (-pi) pi, |packetAntideriv N u| / (2 * pi))
    ≤ C / (N : ℝ) ^ 2
    Proof (Lean source)
    theorem packet_l1_localization : ∃ C : ℝ, 0 < C ∧ ∀ N : ℕ, 2 ≤ N → (∫ u in Icc (-pi) pi, |packetAntideriv N u| / (2 * pi)) ≤ C / (N : ℝ) ^ 2 := by obtain ⟨C, hC, hlocal⟩ := packet_pointwise_localization refine ⟨C / 2, by positivity, ?_⟩ intro N hN have hn : (0 : ℝ) < N := by exact_mod_cast (by omega : 0 < N) have hpi : (0 : ℝ) < pi := Real.pi_pos let f : ℝ → ℝ := fun u => |packetAntideriv N u| / (2 * pi) let g : ℝ → ℝ := fun u => (C / ((N : ℝ) * (2 * pi))) * (1 / (1 + ((N : ℝ) * u) ^ 2)) have hcf : Continuous f := by dsimp [f, packetAntideriv] fun_prop have hcg : Continuous g := by dsimp [g] have hb : Continuous (fun u : ℝ => 1 + ((N : ℝ) * u) ^ 2) := by fun_prop have hr := hb.inv₀ (by intro u; positivity) have hc : Continuous (fun _ : ℝ => C / ((N : ℝ) * (2 * pi))) := continuous_const convert (hc.mul hr) using 1 funext u simp [Pi.mul_apply, one_div] have hf : IntegrableOn f (Icc (-pi) pi) := hcf.continuousOn.integrableOn_compact isCompact_Icc have hg : IntegrableOn g (Icc (-pi) pi) := hcg.continuousOn.integrableOn_compact isCompact_Icc have hpoint (u : ℝ) (hu : u ∈ Icc (-pi) pi) : f u ≤ g u := by have huabs : |u| ≤ pi := abs_le.mpr ⟨hu.1, hu.2⟩ have hloc := hlocal N hN u rw [torusDistance_eq_abs u huabs] at hloc have hx : 0 ≤ (N : ℝ) * |u| := mul_nonneg hn.le (abs_nonneg _) have hden : 0 < (N : ℝ) * (1 + (N : ℝ) * |u|) ^ 2 := by positivity have hrat : 1 / (1 + (N : ℝ) * |u|) ^ 2 ≤ 1 / (1 + ((N : ℝ) * u) ^ 2) := by have hsq : 1 + ((N : ℝ) * u) ^ 2 ≤ (1 + (N : ℝ) * |u|) ^ 2 := by have heq : ((N : ℝ) * u) ^ 2 = ((N : ℝ) * |u|) ^ 2 := by rw [mul_pow, mul_pow, sq_abs] rw [heq] nlinarith [hx] exact one_div_le_one_div_of_le (by positivity) hsq dsimp [f, g] have hp : (0 : ℝ) < 2 * pi := by positivity have hconst : 0 ≤ C / ((N : ℝ) * (2 * pi)) := by positivity calc |packetAntideriv N u| / (2 * pi) ≤ (C / ((N : ℝ) * (1 + (N : ℝ) * |u|) ^ 2)) / (2 * pi) := by exact div_le_div_of_nonneg_right hloc hp.le _ = (C / ((N : ℝ) * (2 * pi))) * (1 / (1 + (N : ℝ) * |u|) ^ 2) := by field_simp [ne_of_gt hn, ne_of_gt hpi, show 1 + (N : ℝ) * |u| ≠ 0 by positivity] _ ≤ _ := mul_le_mul_of_nonneg_left hrat hconst have hmono := MeasureTheory.setIntegral_mono_on hf hg measurableSet_Icc hpoint change (∫ u in Icc (-pi) pi, |packetAntideriv N u| / (2 * pi)) ≤ _ at hmono have hr := integral_rational_envelope N (by omega : 0 < N) dsimp [g] at hmono rw [MeasureTheory.integral_const_mul] at hmono have hbound : (C / ((N : ℝ) * (2 * pi))) * (∫ u in Icc (-pi) pi, 1 / (1 + ((N : ℝ) * u) ^ 2)) ≤ (C / ((N : ℝ) * (2 * pi))) * (pi / (N : ℝ)) := by gcongr calc _ ≤ _ := hmono _ ≤ _ := hbound _ = (C / 2) / (N : ℝ) ^ 2 := by field_simp
    Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.packet_l1_localization · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Localization.lean:287
Reciprocal 3 core · 5 supporting The sign parameter is either 1 or -1. ★ weightedCoeff_delta2_l1

Reciprocal frequency weights and weighted variation

The sign parameter is either 1 or -1. Bounds are asserted only on the frequency window that can meet the zero-extended Jackson coefficients and their second differences.

def reciprocalSquare reviewed
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson

The shifted reciprocal square of order N with orientation σ at an integer frequency j is one divided by the square of 4N + σ j, read as zero when the denominator vanishes; the orientation is meant to be plus or minus one.

Definition (Lean source)
N :
ℕ
σ :
ℝ
j :
ℤ
reciprocalSquare N σ j :
ℝ
1 / (4 * (N : ℝ) + σ * (j : ℝ)) ^ 2
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.reciprocalSquare · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Reciprocal.lean:18
def weightedCoeff reviewed
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson

The reciprocal-weighted Jackson coefficient of order N with orientation σ at an integer frequency j is the normalized Jackson coefficient at j times the shifted reciprocal square at j.

Definition (Lean source)
N :
ℕ
σ :
ℝ
j :
ℤ
weightedCoeff N σ j :
ℝ
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.weightedCoeff · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Reciprocal.lean:24
theorem weightedCoeff_delta2_l1 reviewed
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson

For an order N that is at least two and an orientation σ equal to plus or minus one, the sum over all integers of the absolute second differences of the reciprocal-weighted Jackson coefficients is at most 512 / N³.

Formal statement
N :
ℕ
hN :
2 ≤ N
σ :
ℝ
hσ :
σ = 1 ∨ σ = -1
(∑' j : ℤ, |delta2 (weightedCoeff N σ) j|) ≤ 512 / (N : ℝ) ^ 3
Proof (Lean source)
theorem weightedCoeff_delta2_l1 (N : ℕ) (hN : 2 ≤ N) (σ : ℝ) (hσ : σ = 1 ∨ σ = -1) : (∑' j : ℤ, |delta2 (weightedCoeff N σ) j|) ≤ 512 / (N : ℝ) ^ 3 := by let S : Finset ℤ := Icc (-(2 * (N : ℤ))) (2 * (N : ℤ)) let f : ℤ → ℝ := normalizedCoeff N let q : ℤ → ℝ := reciprocalSquare N σ have hzero (j : ℤ) (hj : j ∉ S) (m : ℤ) (hm : 0 ≤ m ∧ m ≤ 2) : f (j + m) = 0 := by apply normalizedCoeff_support N simp only [S, Finset.mem_Icc, not_and_or, not_le] at hj rcases hj with hj | hj · rw [abs_of_nonpos (by omega : j + m ≤ 0)] omega · rw [abs_of_nonneg (by omega : 0 ≤ j + m)] omega have hzero_delta2 (j : ℤ) (hj : j ∉ S) : delta2 (weightedCoeff N σ) j = 0 := by have h0 : f j = 0 := by simpa using hzero j hj 0 ⟨by omega, by omega⟩ have h1 := hzero j hj 1 ⟨by omega, by omega⟩ have h2 := hzero j hj 2 ⟨by omega, by omega⟩ have hw0 : weightedCoeff N σ j = 0 := by change f j * q j = 0; simp [h0] have hw1 : weightedCoeff N σ (j + 1) = 0 := by change f (j + 1) * q (j + 1) = 0 simp [h1] have hw2 : weightedCoeff N σ (j + 2) = 0 := by change f (j + 2) * q (j + 2) = 0 simp [h2] simp [delta2, delta, hw0, hw1, hw2, show j + 1 + 1 = j + 2 by omega] have hs : Summable (fun j : ℤ => |delta2 (weightedCoeff N σ) j|) := summable_of_ne_finset_zero (s := S) (by intro j hj; simp [hzero_delta2 j hj]) have hf0 : Summable (fun j : ℤ => |f (j + 2)|) := summable_of_ne_finset_zero (s := S) (by intro j hj simp [hzero j hj 2 ⟨by omega, by omega⟩]) have hf1 : Summable (fun j : ℤ => |delta f (j + 1)|) := summable_of_ne_finset_zero (s := S) (by intro j hj have h1 := hzero j hj 1 ⟨by omega, by omega⟩ have h2 := hzero j hj 2 ⟨by omega, by omega⟩ simp [delta, h1, h2, show j + 1 + 1 = j + 2 by omega]) have hf2 : Summable (fun j : ℤ => |delta f j|) := summable_of_ne_finset_zero (s := S) (by intro j hj have h0 : f j = 0 := by simpa using hzero j hj 0 ⟨by omega, by omega⟩ have h1 := hzero j hj 1 ⟨by omega, by omega⟩ simp [delta, h0, h1]) have hf3 : Summable (fun j : ℤ => |delta2 f j|) := summable_of_ne_finset_zero (s := S) (by intro j hj have h0 : f j = 0 := by simpa using hzero j hj 0 ⟨by omega, by omega⟩ have h1 := hzero j hj 1 ⟨by omega, by omega⟩ have h2 := hzero j hj 2 ⟨by omega, by omega⟩ simp [delta2, delta, h0, h1, h2, show j + 1 + 1 = j + 2 by omega]) have hn : (0 : ℝ) < N := by exact_mod_cast (lt_of_lt_of_le (by norm_num : 0 < 2) hN) have hpoint (j : ℤ) : |delta2 (weightedCoeff N σ) j| ≤ (64 / (N : ℝ) ^ 4) * |f (j + 2)| + (16 / (N : ℝ) ^ 3) * |delta f (j + 1)| + (16 / (N : ℝ) ^ 3) * |delta f j| + (1 / (N : ℝ) ^ 2) * |delta2 f j| := by by_cases hj : j ∈ S · have hjabs : |j| ≤ ((2 * N : ℕ) : ℤ) := by simp only [S, Finset.mem_Icc] at hj rcases hj with ⟨hlo, hhi⟩ exact abs_le.mpr ⟨by omega, by omega⟩ have hq0 := reciprocalSquare_delta2_bound N hN σ hσ j hjabs have hq1 := reciprocalSquare_delta_bound N hN σ hσ j hjabs have hq2 : |q (j + 1)| ≤ 1 / (N : ℝ) ^ 2 := by have hwin := (reciprocalSquare_window N hN σ hσ j hjabs).2.1 dsimp [q, reciprocalSquare] rw [abs_of_nonneg (by positivity)] apply one_div_le_one_div_of_le (by positivity) gcongr rw [show weightedCoeff N σ = fun k => f k * q k by rfl, delta2_mul f q j] calc |f (j + 2) * delta2 q j + (delta f (j + 1) + delta f j) * delta q j + q (j + 1) * delta2 f j| ≤ |f (j + 2)| * |delta2 q j| + (|delta f (j + 1)| + |delta f j|) * |delta q j| + |q (j + 1)| * |delta2 f j| := by calc _ ≤ |f (j + 2) * delta2 q j| + |(delta f (j + 1) + delta f j) * delta q j| + |q (j + 1) * delta2 f j| := by simpa only [add_assoc] using (abs_add_three (f (j + 2) * delta2 q j) ((delta f (j + 1) + delta f j) * delta q j) (q (j + 1) * delta2 f j)) _ ≤ _ := by simp only [abs_mul] gcongr exact abs_add_le _ _ _ ≤ _ := by change |delta2 q j| ≤ _ at hq0 change |delta q j| ≤ _ at hq1 nlinarith [mul_le_mul_of_nonneg_left hq0 (abs_nonneg (f (j + 2))), mul_le_mul_of_nonneg_left hq1 (abs_nonneg (delta f (j + 1))), mul_le_mul_of_nonneg_left hq1 (abs_nonneg (delta f j)), mul_le_mul_of_nonneg_left hq2 (abs_nonneg (delta2 f j))] · have h0 : f j = 0 := by simpa using hzero j hj 0 ⟨by omega, by omega⟩ have h1 := hzero j hj 1 ⟨by omega, by omega⟩ have h2 := hzero j hj 2 ⟨by omega, by omega⟩ rw [hzero_delta2 j hj] simp [delta2, delta, h0, h1, h2, show j + 1 + 1 = j + 2 by omega] have hrhs : Summable (fun j : ℤ => (64 / (N : ℝ) ^ 4) * |f (j + 2)| + (16 / (N : ℝ) ^ 3) * |delta f (j + 1)| + (16 / (N : ℝ) ^ 3) * |delta f j| + (1 / (N : ℝ) ^ 2) * |delta2 f j|) := by exact (((hf0.mul_left _).add (hf1.mul_left _)).add (hf2.mul_left _)).add (hf3.mul_left _) have hmain := hs.tsum_le_tsum hpoint hrhs rw [(((hf0.mul_left _).add (hf1.mul_left _)).add (hf2.mul_left _)).tsum_add (hf3.mul_left _), ((hf0.mul_left _).add (hf1.mul_left _)).tsum_add (hf2.mul_left _), (hf0.mul_left _).tsum_add (hf1.mul_left _)] at hmain simp only [tsum_mul_left] at hmain have hshift0 : (∑' j : ℤ, |f (j + 2)|) = ∑' j : ℤ, |f j| := by simpa [Equiv.addRight] using (Equiv.tsum_eq (Equiv.addRight (2 : ℤ)) (fun j : ℤ => |f j|)) have hshift1 : (∑' j : ℤ, |delta f (j + 1)|) = ∑' j : ℤ, |delta f j| := by simpa [Equiv.addRight] using (Equiv.tsum_eq (Equiv.addRight (1 : ℤ)) (fun j : ℤ => |delta f j|)) rw [hshift0, hshift1] at hmain have hNpos : 0 < N := by omega have hm0 := normalizedCoeff_l1 N hNpos have hm1 := normalizedCoeff_delta_l1 N hNpos have hm2 := normalizedCoeff_delta2_l1 N hNpos dsimp [f] at hmain calc (∑' j : ℤ, |delta2 (weightedCoeff N σ) j|) ≤ (64 / (N : ℝ) ^ 4) * (2 * N) + (16 / (N : ℝ) ^ 3) * 4 + (16 / (N : ℝ) ^ 3) * 4 + (1 / (N : ℝ) ^ 2) * (6 / N) := by exact hmain.trans (by gcongr) _ ≤ 512 / (N : ℝ) ^ 3 := by have : (N : ℝ) ≠ 0 := ne_of_gt hn field_simp nlinarith [pow_pos hn 3]
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.weightedCoeff_delta2_l1 · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Reciprocal.lean:173 · uses delta2 , weightedCoeff
5 supporting declarations (lemmas, instances)
  • reciprocalSquare_bound theorem — For an order N that is at least two, an orientation σ equal to plus or minus one, and an integer frequency j of absolute value at most 2N, the shifted reciprocal square is at most 1 / N² in absolute value.
    N :
    ℕ
    hN :
    2 ≤ N
    σ :
    ℝ
    hσ :
    σ = 1 ∨ σ = -1
    j :
    ℤ
    hj :
    |j| ≤ (2 * N : ℕ)
    |reciprocalSquare N σ j| ≤ 1 / (N : ℝ) ^ 2
    Proof (Lean source)
    theorem reciprocalSquare_bound (N : ℕ) (hN : 2 ≤ N) (σ : ℝ) (hσ : σ = 1 ∨ σ = -1) (j : ℤ) (hj : |j| ≤ (2 * N : ℕ)) : |reciprocalSquare N σ j| ≤ 1 / (N : ℝ) ^ 2 := by have ha := (reciprocalSquare_window N hN σ hσ j hj).1 have hn : (0 : ℝ) < N := by exact_mod_cast (lt_of_lt_of_le (by norm_num : 0 < 2) hN) rw [reciprocalSquare, abs_of_nonneg (by positivity)] apply one_div_le_one_div_of_le (by positivity) gcongr
    Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.reciprocalSquare_bound · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Reciprocal.lean:52
  • reciprocalSquare_delta_bound theorem — For an order N that is at least two, an orientation σ equal to plus or minus one, and an integer frequency j of absolute value at most 2N, the forward first difference of the shifted reciprocal square at j is at most 16 / N³ in absolute value.
    N :
    ℕ
    hN :
    2 ≤ N
    σ :
    ℝ
    hσ :
    σ = 1 ∨ σ = -1
    j :
    ℤ
    hj :
    |j| ≤ (2 * N : ℕ)
    |delta (reciprocalSquare N σ) j| ≤ 16 / (N : ℝ) ^ 3
    Proof (Lean source)
    theorem reciprocalSquare_delta_bound (N : ℕ) (hN : 2 ≤ N) (σ : ℝ) (hσ : σ = 1 ∨ σ = -1) (j : ℤ) (hj : |j| ≤ (2 * N : ℕ)) : |delta (reciprocalSquare N σ) j| ≤ 16 / (N : ℝ) ^ 3 := by let a : ℝ := 4 * (N : ℝ) + σ * (j : ℝ) let b : ℝ := 4 * (N : ℝ) + σ * ((j + 1 : ℤ) : ℝ) obtain ⟨ha, hb, _⟩ := reciprocalSquare_window N hN σ hσ j hj have hn : (0 : ℝ) < N := by exact_mod_cast (lt_of_lt_of_le (by norm_num : 0 < 2) hN) have ha0 : 0 < a := lt_of_lt_of_le hn ha have hb0 : 0 < b := lt_of_lt_of_le hn hb have hrel : b - a = σ := by dsimp [a, b]; push_cast; ring have hσabs : |σ| = 1 := by rcases hσ with rfl | rfl <;> norm_num have hab : |a - b| = 1 := by have : a - b = -σ := by linarith rw [this, abs_neg, hσabs] have hfactor : 1 / b ^ 2 - 1 / a ^ 2 = (a - b) * (1 / a * (1 / b ^ 2) + 1 / a ^ 2 * (1 / b)) := by field_simp ring have hq : |delta (reciprocalSquare N σ) j| = 1 / a * (1 / b ^ 2) + 1 / a ^ 2 * (1 / b) := by change |1 / b ^ 2 - 1 / a ^ 2| = _ rw [hfactor, abs_mul, hab, one_mul, abs_of_nonneg (by positivity)] have hia : 1 / a ≤ 1 / (N : ℝ) := one_div_le_one_div_of_le hn ha have hib : 1 / b ≤ 1 / (N : ℝ) := one_div_le_one_div_of_le hn hb have hi2a : 1 / a ^ 2 ≤ 1 / (N : ℝ) ^ 2 := one_div_le_one_div_of_le (by positivity) (by gcongr) have hi2b : 1 / b ^ 2 ≤ 1 / (N : ℝ) ^ 2 := one_div_le_one_div_of_le (by positivity) (by gcongr) rw [hq] calc 1 / a * (1 / b ^ 2) + 1 / a ^ 2 * (1 / b) ≤ 1 / (N : ℝ) * (1 / (N : ℝ) ^ 2) + 1 / (N : ℝ) ^ 2 * (1 / (N : ℝ)) := by apply add_le_add · exact mul_le_mul hia hi2b (by positivity) (by positivity) · exact mul_le_mul hi2a hib (by positivity) (by positivity) _ = 2 / (N : ℝ) ^ 3 := by field_simp; ring _ ≤ 16 / (N : ℝ) ^ 3 := by apply div_le_div_of_nonneg_right (by norm_num); positivity
    Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.reciprocalSquare_delta_bound · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Reciprocal.lean:64
  • reciprocalSquare_delta2_bound theorem — For an order N that is at least two, an orientation σ equal to plus or minus one, and an integer frequency j of absolute value at most 2N, the forward second difference of the shifted reciprocal square at j is at most 64 / N⁴ in absolute value.
    N :
    ℕ
    hN :
    2 ≤ N
    σ :
    ℝ
    hσ :
    σ = 1 ∨ σ = -1
    j :
    ℤ
    hj :
    |j| ≤ (2 * N : ℕ)
    |delta2 (reciprocalSquare N σ) j| ≤ 64 / (N : ℝ) ^ 4
    Proof (Lean source)
    theorem reciprocalSquare_delta2_bound (N : ℕ) (hN : 2 ≤ N) (σ : ℝ) (hσ : σ = 1 ∨ σ = -1) (j : ℤ) (hj : |j| ≤ (2 * N : ℕ)) : |delta2 (reciprocalSquare N σ) j| ≤ 64 / (N : ℝ) ^ 4 := by let a : ℝ := 4 * (N : ℝ) + σ * (j : ℝ) let b : ℝ := 4 * (N : ℝ) + σ * ((j + 1 : ℤ) : ℝ) let c : ℝ := 4 * (N : ℝ) + σ * ((j + 2 : ℤ) : ℝ) obtain ⟨ha, hb, hc⟩ := reciprocalSquare_window N hN σ hσ j hj have hn : (0 : ℝ) < N := by exact_mod_cast (lt_of_lt_of_le (by norm_num : 0 < 2) hN) have ha0 : 0 < a := lt_of_lt_of_le hn ha have hb0 : 0 < b := lt_of_lt_of_le hn hb have hc0 : 0 < c := lt_of_lt_of_le hn hc have hn2 : (2 : ℝ) ≤ N := by exact_mod_cast hN have hnum : 0 ≤ 3 * b ^ 2 - 1 := by nlinarith have hdelta : delta2 (reciprocalSquare N σ) j = 1 / c ^ 2 - 2 * (1 / b ^ 2) + 1 / a ^ 2 := by simp only [delta2, delta, reciprocalSquare] have hjj : j + 1 + 1 = j + 2 := by omega rw [hjj] change (1 / c ^ 2 - 1 / b ^ 2) - (1 / b ^ 2 - 1 / a ^ 2) = _ ring have hid : 1 / c ^ 2 - 2 * (1 / b ^ 2) + 1 / a ^ 2 = 2 * (3 * b ^ 2 - 1) / (a ^ 2 * b ^ 2 * c ^ 2) := by field_simp rcases hσ with hσ | hσ · subst σ dsimp [a, b, c] push_cast ring · subst σ dsimp [a, b, c] push_cast ring rw [hdelta, hid, abs_of_nonneg (by positivity)] calc 2 * (3 * b ^ 2 - 1) / (a ^ 2 * b ^ 2 * c ^ 2) ≤ 6 * b ^ 2 / (a ^ 2 * b ^ 2 * c ^ 2) := by apply div_le_div_of_nonneg_right (by nlinarith) (by positivity) _ = 6 / (a ^ 2 * c ^ 2) := by field_simp _ ≤ 6 / ((N : ℝ) ^ 2 * (N : ℝ) ^ 2) := by gcongr _ = 6 / (N : ℝ) ^ 4 := by ring _ ≤ 64 / (N : ℝ) ^ 4 := by apply div_le_div_of_nonneg_right (by norm_num) (by positivity)
    Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.reciprocalSquare_delta2_bound · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Reciprocal.lean:107
  • delta2_mul theorem — For any two real sequences f and q indexed by the integers and any index j, the forward second difference of their product at j equals f at j + 2 times the second difference of q at j, plus the sum of the first differences of f at j + 1 and at j times the first difference of q at j, plus q at j + 1 times the second difference of f at j.
    f q :
    ℤ → ℝ
    j :
    ℤ
    delta2 (fun k => f k * q k) j
    = f (j + 2) * delta2 q j
    + (delta f (j + 1) + delta f j) * delta q j
    + q (j + 1) * delta2 f j
    Proof (Lean source)
    theorem delta2_mul (f q : ℤ → ℝ) (j : ℤ) : delta2 (fun k => f k * q k) j = f (j + 2) * delta2 q j + (delta f (j + 1) + delta f j) * delta q j + q (j + 1) * delta2 f j := by simp only [delta2, delta] ring
    Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.delta2_mul · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Reciprocal.lean:154
  • weightedCoeff_support theorem — For any order N, any orientation σ, and an integer frequency j whose absolute value exceeds 2N − 2, the reciprocal-weighted Jackson coefficient is zero, including at frequencies where the reciprocal's denominator vanishes.
    N :
    ℕ
    σ :
    ℝ
    j :
    ℤ
    hj :
    ((2 * N - 2 : ℕ) : ℤ) < |j|
    weightedCoeff N σ j = 0
    Proof (Lean source)
    theorem weightedCoeff_support (N : ℕ) (σ : ℝ) (j : ℤ) (hj : ((2 * N - 2 : ℕ) : ℤ) < |j|) : weightedCoeff N σ j = 0 := by simp [weightedCoeff, normalizedCoeff_support N j hj]
    Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.weightedCoeff_support · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Reciprocal.lean:166
Support 1 core · 0 supporting The modulated Jackson kernel has Fourier support in two frequency bands away from zero. ★ packet_shifted_support

Shifted Fourier support of Jackson packets

The modulated Jackson kernel has Fourier support in two frequency bands away from zero. This module provides the integral formulation for real modes.

theorem packet_shifted_support reviewed
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson

For an order N that is at least two and an integer frequency r whose absolute value is either less than 2N + 2 or greater than 6N − 2, the integrals over the period from −π to π of the oscillatory Jackson packet against both the cosine and the sine of r u are zero.

Formal statement
N :
ℕ
hN :
2 ≤ N
r :
ℤ
hr :
|r| < (2 * N + 2 : ℕ) ∨ (6 * N - 2 : ℕ) < |r|
conclusion 1
(∫ u in Icc (-pi) pi, packetOscillation N u * cos ((r : ℝ) * u)) = 0
conclusion 2
(∫ u in Icc (-pi) pi, packetOscillation N u * sin ((r : ℝ) * u)) = 0
Proof (Lean source)
theorem packet_shifted_support (N : ℕ) (hN : 2 ≤ N) (r : ℤ) (hr : |r| < (2 * N + 2 : ℕ) ∨ (6 * N - 2 : ℕ) < |r|) : (∫ u in Icc (-pi) pi, packetOscillation N u * cos ((r : ℝ) * u)) = 0 ∧ (∫ u in Icc (-pi) pi, packetOscillation N u * sin ((r : ℝ) * u)) = 0 := by let s : Finset ℤ := Icc (-((2 * N - 2 : ℕ) : ℤ)) ((2 * N - 2 : ℕ) : ℤ) have hfreq (j : ℤ) (hj : j ∈ s) : |4 * (N : ℤ) + j| ≠ |r| ∧ |4 * (N : ℤ) - j| ≠ |r| := by have hb : -(2 * (N : ℤ) - 2) ≤ j ∧ j ≤ 2 * (N : ℤ) - 2 := by change j ∈ Icc (-((2 * N - 2 : ℕ) : ℤ)) ((2 * N - 2 : ℕ) : ℤ) at hj simp only [Finset.mem_Icc] at hj omega have hp : 0 ≤ 4 * (N : ℤ) + j := by omega have hm : 0 ≤ 4 * (N : ℤ) - j := by omega rw [abs_of_nonneg hp, abs_of_nonneg hm] rcases hr with hr | hr <;> constructor <;> omega have hsin (m : ℤ) : (∫ u in Icc (-pi) pi, sin ((m : ℝ) * u)) = 0 := by by_cases hm : m = 0 · subst m; simp · rw [MeasureTheory.integral_Icc_eq_integral_Ioc, ← intervalIntegral.integral_of_le (a := -pi) (b := pi) (by linarith [Real.pi_pos] : -pi ≤ pi)] have hm0 : (m : ℝ) ≠ 0 := by exact_mod_cast hm rw [intervalIntegral.integral_comp_mul_left sin hm0, integral_sin] simp [mul_neg, Real.cos_neg] have hmix (k : ℤ) : (∫ u in Icc (-pi) pi, cos ((k : ℝ) * u) * sin ((r : ℝ) * u)) = 0 := by have hp (u : ℝ) : cos ((k : ℝ) * u) * sin ((r : ℝ) * u) = (sin (((r + k : ℤ) : ℝ) * u) + sin (((r - k : ℤ) : ℝ) * u)) / 2 := by rw [show (((r + k : ℤ) : ℝ) * u) = (r : ℝ) * u + (k : ℝ) * u by push_cast; ring, show (((r - k : ℤ) : ℝ) * u) = (r : ℝ) * u - (k : ℝ) * u by push_cast; ring, Real.sin_add, Real.sin_sub] ring simp_rw [hp] rw [MeasureTheory.integral_div] rw [MeasureTheory.integral_add ((show Continuous (fun u : ℝ => sin (((r + k : ℤ) : ℝ) * u)) by fun_prop).continuousOn.integrableOn_compact isCompact_Icc) ((show Continuous (fun u : ℝ => sin (((r - k : ℤ) : ℝ) * u)) by fun_prop).continuousOn.integrableOn_compact isCompact_Icc)] rw [hsin, hsin] ring have hfourier (u : ℝ) : packetOscillation N u = ∑ j ∈ s, normalizedCoeff N j * ((cos (((4 * (N : ℤ) + j : ℤ) : ℝ) * u) + cos (((4 * (N : ℤ) - j : ℤ) : ℝ) * u)) / 2) := by rw [packetOscillation, kernel_fourier N (by omega : 0 < N) u] simp only [Finset.sum_mul] apply Finset.sum_congr rfl intro j hj rw [show (4 * N : ℝ) * u = ((4 * (N : ℤ) : ℤ) : ℝ) * u by push_cast; ring] rw [show (((4 * (N : ℤ) + j : ℤ) : ℝ) * u) = ((4 * (N : ℤ) : ℤ) : ℝ) * u + (j : ℝ) * u by push_cast; ring, show (((4 * (N : ℤ) - j : ℤ) : ℝ) * u) = ((4 * (N : ℤ) : ℤ) : ℝ) * u - (j : ℝ) * u by push_cast; ring, Real.cos_add, Real.cos_sub] ring have hint (j : ℤ) (f : ℝ → ℝ) (hf : Continuous f) : IntegrableOn (fun u : ℝ => normalizedCoeff N j * ((cos (((4 * (N : ℤ) + j : ℤ) : ℝ) * u) + cos (((4 * (N : ℤ) - j : ℤ) : ℝ) * u)) / 2) * f u) (Icc (-pi) pi) := by exact (show Continuous (fun u : ℝ => normalizedCoeff N j * ((cos (((4 * (N : ℤ) + j : ℤ) : ℝ) * u) + cos (((4 * (N : ℤ) - j : ℤ) : ℝ) * u)) / 2) * f u) by fun_prop).continuousOn.integrableOn_compact isCompact_Icc constructor · simp_rw [hfourier, Finset.sum_mul] rw [MeasureTheory.integral_finsetSum s (fun j _ => hint j (fun u => cos ((r : ℝ) * u)) (by fun_prop))] apply Finset.sum_eq_zero intro j hj have hp := (hfreq j hj).1 have hm := (hfreq j hj).2 have hzero (k : ℤ) (hk : |k| ≠ |r|) : (∫ u in Icc (-pi) pi, cos ((k : ℝ) * u) * cos ((r : ℝ) * u)) = 0 := by have h := cosine_mode_orthogonality k r have h00 : ¬ (k = 0 ∧ r = 0) := by rintro ⟨rfl, rfl⟩ exact hk rfl simp only [h00, hk, if_false] at h exact (mul_eq_zero.mp h).resolve_left (by positivity) rw [show (fun u : ℝ => normalizedCoeff N j * ((cos (((4 * (N : ℤ) + j : ℤ) : ℝ) * u) + cos (((4 * (N : ℤ) - j : ℤ) : ℝ) * u)) / 2) * cos ((r : ℝ) * u)) = (fun u : ℝ => normalizedCoeff N j / 2 * (cos (((4 * (N : ℤ) + j : ℤ) : ℝ) * u) * cos ((r : ℝ) * u) + cos (((4 * (N : ℤ) - j : ℤ) : ℝ) * u) * cos ((r : ℝ) * u))) by funext u; ring] rw [MeasureTheory.integral_const_mul, MeasureTheory.integral_add ((show Continuous (fun u : ℝ => cos (((4 * (N : ℤ) + j : ℤ) : ℝ) * u) * cos ((r : ℝ) * u)) by fun_prop).continuousOn.integrableOn_compact isCompact_Icc) ((show Continuous (fun u : ℝ => cos (((4 * (N : ℤ) - j : ℤ) : ℝ) * u) * cos ((r : ℝ) * u)) by fun_prop).continuousOn.integrableOn_compact isCompact_Icc)] rw [hzero _ hp, hzero _ hm] ring · simp_rw [hfourier, Finset.sum_mul] rw [MeasureTheory.integral_finsetSum s (fun j _ => hint j (fun u => sin ((r : ℝ) * u)) (by fun_prop))] apply Finset.sum_eq_zero intro j hj rw [show (fun u : ℝ => normalizedCoeff N j * ((cos (((4 * (N : ℤ) + j : ℤ) : ℝ) * u) + cos (((4 * (N : ℤ) - j : ℤ) : ℝ) * u)) / 2) * sin ((r : ℝ) * u)) = (fun u : ℝ => normalizedCoeff N j / 2 * (cos (((4 * (N : ℤ) + j : ℤ) : ℝ) * u) * sin ((r : ℝ) * u) + cos (((4 * (N : ℤ) - j : ℤ) : ℝ) * u) * sin ((r : ℝ) * u))) by funext u; ring] rw [MeasureTheory.integral_const_mul, MeasureTheory.integral_add ((show Continuous (fun u : ℝ => cos (((4 * (N : ℤ) + j : ℤ) : ℝ) * u) * sin ((r : ℝ) * u)) by fun_prop).continuousOn.integrableOn_compact isCompact_Icc) ((show Continuous (fun u : ℝ => cos (((4 * (N : ℤ) - j : ℤ) : ℝ) * u) * sin ((r : ℝ) * u)) by fun_prop).continuousOn.integrableOn_compact isCompact_Icc)] rw [hmix, hmix] ring
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.packet_shifted_support · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/Support.lean:17 · uses packetOscillation
Torus­Geometry 1 core · 2 supporting The torus distance is the distance to integer multiples of 2π. ★ character_gap_ge_torusDistance

Distance and character separation on the real circle

The torus distance is the distance to integer multiples of 2π. These estimates connect that distance to the denominator in finite Abel summation.

theorem character_gap_ge_torusDistance reviewed
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson

For any real angle u, 2 / π times its torus distance is at most the modulus of the complex exponential of −i u minus one.

Formal statement
u :
ℝ
2 / pi * torusDistance u ≤ ‖Complex.exp (-I * (u : ℂ)) - 1‖
Proof (Lean source)
theorem character_gap_ge_torusDistance (u : ℝ) : 2 / Real.pi * torusDistance u ≤ ‖Complex.exp (-I * (u : ℂ)) - 1‖ := by let j : ℤ := round (u / (2 * Real.pi)) let v : ℝ := u - 2 * Real.pi * j have hp : (0 : ℝ) < 2 * Real.pi := by positivity have hj := abs_sub_round (u / (2 * Real.pi)) have hv : |v| ≤ Real.pi := by have heq : v = (2 * Real.pi) * (u / (2 * Real.pi) - (j : ℝ)) := by dsimp [v] field_simp rw [heq, abs_mul, abs_of_pos hp] have := mul_le_mul_of_nonneg_left hj hp.le nlinarith have hdist : torusDistance u ≤ |v| := by apply csInf_le · exact ⟨0, by rintro r ⟨k, rfl⟩; exact abs_nonneg _⟩ · exact ⟨j, rfl⟩ have hhalf : |v / 2| ≤ Real.pi / 2 := by rw [abs_div, abs_of_pos (by norm_num : (0 : ℝ) < 2)] exact div_le_div_of_nonneg_right hv (by norm_num) have hs := Real.mul_abs_le_abs_sin hhalf have hsin : 2 / Real.pi * |v| ≤ 2 * |sin (v / 2)| := by have heq : |v / 2| = |v| / 2 := by norm_num [abs_div] rw [heq] at hs nlinarith have hperiod : exp (-I * (u : ℂ)) = exp (I * ((-v : ℝ) : ℂ)) := by have hshift : (-I * (u : ℂ)) = I * ((-v : ℝ) : ℂ) + ((-j : ℤ) : ℂ) * (2 * (Real.pi : ℂ) * I) := by dsimp [v] push_cast ring rw [hshift, Complex.exp_add, Complex.exp_int_mul_two_pi_mul_I, mul_one] rw [hperiod, Complex.norm_exp_I_mul_ofReal_sub_one] have hnorm : ‖(2 : ℝ) * sin (-v / 2)‖ = 2 * |sin (v / 2)| := by rw [neg_div, Real.sin_neg, Real.norm_eq_abs, abs_mul, abs_of_pos (by norm_num : (0 : ℝ) < 2), abs_neg] rw [hnorm] have hpos : 0 ≤ 2 / Real.pi := by positivity exact (mul_le_mul_of_nonneg_left hdist hpos).trans hsin
Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.character_gap_ge_torusDistance · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/TorusGeometry.lean:68 · uses torusDistance
2 supporting declarations (lemmas, instances)
  • torusDistance_bounds theorem — For any real angle, its torus distance is nonnegative and at most π.
    u :
    ℝ
    conclusion 1
    conclusion 2
    Proof (Lean source)
    theorem torusDistance_bounds (u : ℝ) : 0 ≤ torusDistance u ∧ torusDistance u ≤ pi := by let S : Set ℝ := {r | ∃ j : ℤ, r = |u - 2 * pi * j|} have hS : S.Nonempty := ⟨|u|, 0, by simp⟩ have hbelow : BddBelow S := ⟨0, by rintro r ⟨j, rfl⟩; exact abs_nonneg _⟩ have hp : (0 : ℝ) < 2 * pi := by positivity let j : ℤ := round (u / (2 * pi)) have hj := abs_sub_round (u / (2 * pi)) have hdist : |u - 2 * pi * j| ≤ pi := by have heq : u - 2 * pi * (j : ℝ) = (2 * pi) * (u / (2 * pi) - (j : ℝ)) := by field_simp rw [heq, abs_mul, abs_of_pos hp] have : (2 * pi) * |u / (2 * pi) - (j : ℝ)| ≤ (2 * pi) * (1 / 2 : ℝ) := mul_le_mul_of_nonneg_left hj hp.le nlinarith change 0 ≤ sInf S ∧ sInf S ≤ pi constructor · exact le_csInf hS (by rintro r ⟨j, rfl⟩; exact abs_nonneg _) · exact (csInf_le hbelow ⟨j, rfl⟩).trans hdist
    Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.torusDistance_bounds · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/TorusGeometry.lean:15
  • torusDistance_eq_abs theorem — For a real angle of absolute value at most π, its torus distance equals its absolute value.
    u :
    ℝ
    hu :
    |u| ≤ pi
    Proof (Lean source)
    theorem torusDistance_eq_abs (u : ℝ) (hu : |u| ≤ pi) : torusDistance u = |u| := by let S : Set ℝ := {r | ∃ j : ℤ, r = |u - 2 * pi * j|} have hbelow : BddBelow S := ⟨0, by rintro r ⟨j, rfl⟩; exact abs_nonneg _⟩ have hzero : |u| ∈ S := ⟨0, by simp⟩ change sInf S = |u| apply le_antisymm (csInf_le hbelow hzero) apply le_csInf ⟨|u|, hzero⟩ rintro r ⟨j, rfl⟩ have hpi : 0 ≤ pi := Real.pi_pos.le have hu₁ : -pi ≤ u := (abs_le.mp hu).1 have hu₂ : u ≤ pi := (abs_le.mp hu).2 rcases lt_trichotomy j 0 with hj | hj | hj · have hj' : (j : ℝ) ≤ -1 := by exact_mod_cast (Int.le_sub_one_of_lt hj) have : u + 2 * pi ≤ u - 2 * pi * (j : ℝ) := by nlinarith calc |u| ≤ pi := hu _ ≤ u + 2 * pi := by linarith _ ≤ u - 2 * pi * (j : ℝ) := this _ ≤ |u - 2 * pi * (j : ℝ)| := le_abs_self _ · simp [hj] · have hj' : (1 : ℝ) ≤ j := by exact_mod_cast (Int.add_one_le_iff.mpr hj) have : u - 2 * pi * (j : ℝ) ≤ u - 2 * pi := by nlinarith calc |u| ≤ pi := hu _ ≤ -(u - 2 * pi) := by linarith _ ≤ -(u - 2 * pi * (j : ℝ)) := by linarith _ ≤ |u - 2 * pi * (j : ℝ)| := neg_le_abs _
    Causalean.Mathlib.Analysis.Approximation.Chebyshev.Jackson.torusDistance_eq_abs · Causalean/Mathlib/Analysis/Approximation/Chebyshev/Jackson/TorusGeometry.lean:37