Skip to content

Commit 472b5b5

Browse files
committed
abs_iterate_derivative_T_real_le
1 parent 5d860e7 commit 472b5b5

2 files changed

Lines changed: 36 additions & 4 deletions

File tree

Mathlib/Analysis/SpecialFunctions/Trigonometric/Chebyshev/RootsExtrema.lean

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,15 @@ import Mathlib.NumberTheory.Niven
2121
2222
## Main statements
2323
24-
* T_n(x) ∈ [-1, 1] iff x ∈ [-1, 1]: `abs_eval_T_real_le_one_iff`
25-
* Zeroes of T and U: `roots_T_real`, `roots_U_real`
26-
* Local extrema of T: `isLocalExtr_T_real_iff`, `isExtrOn_T_real_iff`
27-
* Irrationality of zeroes of T other than zero: `irrational_of_isRoot_T_real`
24+
* `T_n(x) ∈ [-1, 1]` iff `x ∈ [-1, 1]`: abs_eval_T_real_le_one_iff
25+
* Zeroes of `T` and `U`: roots_T_real, roots_U_real
26+
* Local extrema of `T`: isLocalExtr_T_real_iff, isExtrOn_T_real_iff
27+
* Irrationality of zeroes of `T` other than zero: irrational_of_isRoot_T_real
28+
* `|T_n^{(k)} (x)| ≤ T_n^{(k)} (1)` for `x ∈ [-1, 1]`: abs_iterate_derivative_T_real_le
29+
30+
## TODO
31+
32+
Show that the bound on `T_n^{(k)} (x)` is achieved only at `x = ±1`
2833
-/
2934

3035
public section
@@ -318,4 +323,27 @@ theorem irrational_of_isRoot_T_real {n : ℕ} {x : ℝ} (hroot : (T ℝ n).IsRoo
318323
Nat.eq_of_dvd_of_div_eq_one (Nat.gcd_dvd_left ..) (by grind [Rat.den_pos])) (by grind)
319324
rw_mod_cast [← hk₂, hn]; convert cos_pi_div_two using 2; push_cast; field_simp
320325

326+
theorem abs_iterate_derivative_T_real_le (n k : ℕ) {x : ℝ} (hx : |x| ≤ 1) :
327+
|(derivative^[k] (T ℝ n)).eval x| ≤ (derivative^[k] (T ℝ n)).eval 1 := by
328+
have := T_iterate_derivative_mem_span_T (R := ℝ) n k
329+
rw [setOf_T_eq_map] at this
330+
obtain ⟨f, hf⟩ := Submodule.mem_span_finset'.mp this
331+
let g (m : ℕ) := if hm : m ∈ Finset.Icc 0 (n - k) then f ⟨(T ℝ m), by simp [hm]⟩ else 0
332+
have : ∑ m ∈ Finset.Icc 0 (n - k), g m • (T ℝ m) = ∑ a, f a • a.val := by
333+
rw [Finset.univ_eq_attach]
334+
apply Finset.sum_bij
335+
case i => use fun m hm => ⟨T ℝ m, by simp [hm]⟩
336+
case hi => simp
337+
case i_inj => intro _ _ _ _ hm; convert congrArg (Polynomial.degree ·.1) hm; simp [degree_T]
338+
case i_surj => aesop
339+
grind
340+
replace hf (y : ℝ) :
341+
∑ m ∈ Finset.Icc 0 (n - k), g m * (T ℝ m).eval y = (derivative^[k] (T ℝ n)).eval y := by
342+
rw [← hf, ← this, eval_finset_sum]; congr; simp
343+
rw [← hf x, ← hf 1]
344+
grw [Finset.abs_sum_le_sum_abs]
345+
refine Finset.sum_le_sum (fun i _ => ?_)
346+
grw [abs_mul, abs_eval_T_real_le_one i hx]
347+
simp
348+
321349
end Polynomial.Chebyshev

Mathlib/RingTheory/Polynomial/Chebyshev.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -507,6 +507,10 @@ theorem U_mem_span_T (n : ℕ) : U R n ∈ Submodule.span ℕ {T R m | m ∈ Fin
507507
refine Submodule.add_mem _ ?_ ((Submodule.span_mono (by grind)) h₀)
508508
· exact Submodule.smul_of_tower_mem _ 2 (Submodule.mem_span_of_mem ⟨n + 2, by simp⟩)
509509

510+
theorem setOf_T_eq_map [IsDomain R] [NeZero (2 : R)] (n : ℕ) :
511+
{T R m | m ∈ Finset.Icc 0 n} = (Finset.Icc 0 n).map ⟨fun (m : ℕ) => T R m,
512+
by intro m₁ m₂ hm; convert congrArg Polynomial.degree hm; simp [degree_T]⟩ := by grind
513+
510514
/-- `C n` is the `n`th rescaled Chebyshev polynomial of the first kind (also known as a Vieta–Lucas
511515
polynomial), given by $C_n(2x) = 2T_n(x)$. See `Polynomial.Chebyshev.C_comp_two_mul_X`. -/
512516
noncomputable def C : ℤ → R[X]

0 commit comments

Comments
 (0)