Documentation

Mathlib.RingTheory.Polynomial.Chebyshev

Chebyshev polynomials #

The Chebyshev polynomials are families of polynomials indexed by β„€, with integral coefficients.

Main definitions #

Main statements #

Implementation details #

Since Chebyshev polynomials have interesting behaviour over the complex numbers and modulo p, we define them to have coefficients in an arbitrary commutative ring, even though technically β„€ would suffice. The benefit of allowing arbitrary coefficient rings, is that the statements afterwards are clean, and do not have map (Int.castRingHom R) interfering all the time.

References #

[Lionel Ponton, Roots of the Chebyshev polynomials: A purely algebraic approach] [ponton2020chebyshev]

TODO #

@[irreducible]
noncomputable def Polynomial.Chebyshev.T (R : Type u_1) [CommRing R] :

T n is the n-th Chebyshev polynomial of the first kind.

Equations
    Instances For
      theorem Polynomial.Chebyshev.induct (motive : β„€ β†’ Prop) (zero : motive 0) (one : motive 1) (add_two : βˆ€ (n : β„•), motive (↑n + 1) β†’ motive ↑n β†’ motive (↑n + 2)) (neg_add_one : βˆ€ (n : β„•), motive (-↑n) β†’ motive (-↑n + 1) β†’ motive (-↑n - 1)) (a : β„€) :
      motive a

      Induction principle used for proving facts about Chebyshev polynomials.

      theorem Polynomial.Chebyshev.induct' (motive : β„€ β†’ Prop) (zero : motive 0) (one : motive 1) (add_two : βˆ€ (n : β„•), motive (↑n + 1) β†’ motive ↑n β†’ motive (↑n + 2)) (neg : βˆ€ (n : β„€), motive n β†’ motive (-n)) (a : β„€) :
      motive a

      Another induction principle used for proving facts about Chebyshev polynomials, which is sometimes easier to use

      @[simp]
      theorem Polynomial.Chebyshev.T_add_two (R : Type u_1) [CommRing R] (n : β„€) :
      T R (n + 2) = 2 * X * T R (n + 1) - T R n
      theorem Polynomial.Chebyshev.T_add_one (R : Type u_1) [CommRing R] (n : β„€) :
      T R (n + 1) = 2 * X * T R n - T R (n - 1)
      theorem Polynomial.Chebyshev.T_sub_two (R : Type u_1) [CommRing R] (n : β„€) :
      T R (n - 2) = 2 * X * T R (n - 1) - T R n
      theorem Polynomial.Chebyshev.T_sub_one (R : Type u_1) [CommRing R] (n : β„€) :
      T R (n - 1) = 2 * X * T R n - T R (n + 1)
      theorem Polynomial.Chebyshev.T_eq (R : Type u_1) [CommRing R] (n : β„€) :
      T R n = 2 * X * T R (n - 1) - T R (n - 2)
      @[simp]
      theorem Polynomial.Chebyshev.T_zero (R : Type u_1) [CommRing R] :
      T R 0 = 1
      @[simp]
      theorem Polynomial.Chebyshev.T_neg (R : Type u_1) [CommRing R] (n : β„€) :
      T R (-n) = T R n
      @[simp]
      theorem Polynomial.Chebyshev.T_eval_one (R : Type u_1) [CommRing R] (n : β„€) :
      eval 1 (T R n) = 1
      theorem Polynomial.Chebyshev.T_eval_neg_one (R : Type u_1) [CommRing R] (n : β„€) :
      eval (-1) (T R n) = ↑↑n.negOnePow
      theorem Polynomial.Chebyshev.T_eval_zero (R : Type u_1) [CommRing R] (n : β„€) :
      eval 0 (T R n) = ↑(if Even n then ↑(n / 2).negOnePow else 0)
      @[simp]
      theorem Polynomial.Chebyshev.T_eval_zero_of_even (R : Type u_1) [CommRing R] {n : β„€} (hn : Even n) :
      eval 0 (T R n) = ↑↑(n / 2).negOnePow
      @[simp]
      theorem Polynomial.Chebyshev.T_eval_zero_of_odd (R : Type u_1) [CommRing R] {n : β„€} (hn : Odd n) :
      eval 0 (T R n) = 0
      @[simp]
      theorem Polynomial.Chebyshev.degree_T (R : Type u_1) [CommRing R] [IsDomain R] [NeZero 2] (n : β„€) :
      (T R n).degree = ↑n.natAbs
      @[simp]
      theorem Polynomial.Chebyshev.T_eval_neg (R : Type u_1) [CommRing R] (n : β„€) (x : R) :
      eval (-x) (T R n) = ↑↑n.negOnePow * eval x (T R n)
      @[irreducible]
      noncomputable def Polynomial.Chebyshev.U (R : Type u_1) [CommRing R] :

      U n is the n-th Chebyshev polynomial of the second kind.

      Equations
        Instances For
          @[simp]
          theorem Polynomial.Chebyshev.U_add_two (R : Type u_1) [CommRing R] (n : β„€) :
          U R (n + 2) = 2 * X * U R (n + 1) - U R n
          theorem Polynomial.Chebyshev.U_add_one (R : Type u_1) [CommRing R] (n : β„€) :
          U R (n + 1) = 2 * X * U R n - U R (n - 1)
          theorem Polynomial.Chebyshev.U_sub_two (R : Type u_1) [CommRing R] (n : β„€) :
          U R (n - 2) = 2 * X * U R (n - 1) - U R n
          theorem Polynomial.Chebyshev.U_sub_one (R : Type u_1) [CommRing R] (n : β„€) :
          U R (n - 1) = 2 * X * U R n - U R (n + 1)
          theorem Polynomial.Chebyshev.U_eq (R : Type u_1) [CommRing R] (n : β„€) :
          U R n = 2 * X * U R (n - 1) - U R (n - 2)
          @[simp]
          theorem Polynomial.Chebyshev.U_zero (R : Type u_1) [CommRing R] :
          U R 0 = 1
          @[simp]
          theorem Polynomial.Chebyshev.U_one (R : Type u_1) [CommRing R] :
          U R 1 = 2 * X
          @[simp]
          theorem Polynomial.Chebyshev.U_neg_one (R : Type u_1) [CommRing R] :
          U R (-1) = 0
          @[simp]
          theorem Polynomial.Chebyshev.U_neg_two (R : Type u_1) [CommRing R] :
          U R (-2) = -1
          theorem Polynomial.Chebyshev.U_neg (R : Type u_1) [CommRing R] (n : β„€) :
          U R (-n) = -U R (n - 2)
          @[simp]
          theorem Polynomial.Chebyshev.U_neg_sub_two (R : Type u_1) [CommRing R] (n : β„€) :
          U R (-n - 2) = -U R n
          @[simp]
          theorem Polynomial.Chebyshev.U_eval_one (R : Type u_1) [CommRing R] (n : β„€) :
          eval 1 (U R n) = ↑n + 1
          theorem Polynomial.Chebyshev.U_eval_neg_one (R : Type u_1) [CommRing R] (n : β„€) :
          eval (-1) (U R n) = ↑↑n.negOnePow * (↑n + 1)
          theorem Polynomial.Chebyshev.U_eval_zero (R : Type u_1) [CommRing R] (n : β„€) :
          eval 0 (U R n) = ↑(if Even n then ↑(n / 2).negOnePow else 0)
          @[simp]
          theorem Polynomial.Chebyshev.U_eval_zero_of_even (R : Type u_1) [CommRing R] {n : β„€} (hn : Even n) :
          eval 0 (U R n) = ↑↑(n / 2).negOnePow
          @[simp]
          theorem Polynomial.Chebyshev.U_eval_zero_of_odd (R : Type u_1) [CommRing R] {n : β„€} (hn : Odd n) :
          eval 0 (U R n) = 0
          @[simp]
          theorem Polynomial.Chebyshev.degree_U_natCast (R : Type u_1) [CommRing R] [IsDomain R] [NeZero 2] (n : β„•) :
          (U R ↑n).degree = ↑n
          theorem Polynomial.Chebyshev.degree_U_of_ne_neg_one (R : Type u_1) [CommRing R] [IsDomain R] [NeZero 2] (n : β„€) (hn : n β‰  -1) :
          (U R n).degree = ↑((n + 1).natAbs - 1)
          @[simp]
          theorem Polynomial.Chebyshev.U_eval_neg (R : Type u_1) [CommRing R] (n : β„•) (x : R) :
          eval (-x) (U R ↑n) = ↑↑(↑n).negOnePow * eval x (U R ↑n)
          theorem Polynomial.Chebyshev.U_ne_zero (R : Type u_1) [CommRing R] (n : β„€) [IsDomain R] [NeZero 2] (hn : n β‰  -1) :
          U R n β‰  0
          theorem Polynomial.Chebyshev.U_eq_X_mul_U_add_T (R : Type u_1) [CommRing R] (n : β„€) :
          U R (n + 1) = X * U R n + T R (n + 1)
          theorem Polynomial.Chebyshev.T_eq_X_mul_T_sub_pol_U (R : Type u_1) [CommRing R] (n : β„€) :
          T R (n + 2) = X * T R (n + 1) - (1 - X ^ 2) * U R n
          theorem Polynomial.Chebyshev.one_sub_X_sq_mul_U_eq_pol_in_T (R : Type u_1) [CommRing R] (n : β„€) :
          (1 - X ^ 2) * U R n = X * T R (n + 1) - T R (n + 2)
          theorem Polynomial.Chebyshev.T_eq_X_mul_U_sub_U (R : Type u_1) [CommRing R] (n : β„€) :
          T R (n + 2) = X * U R (n + 1) - U R n
          @[irreducible]
          noncomputable def Polynomial.Chebyshev.C (R : Type u_1) [CommRing R] :

          C n is the nth rescaled Chebyshev polynomial of the first kind (also known as a Vieta–Lucas polynomial), given by $C_n(2x) = 2T_n(x)$. See Polynomial.Chebyshev.C_comp_two_mul_X.

          Equations
            Instances For
              @[simp]
              theorem Polynomial.Chebyshev.C_add_two (R : Type u_1) [CommRing R] (n : β„€) :
              C R (n + 2) = X * C R (n + 1) - C R n
              theorem Polynomial.Chebyshev.C_add_one (R : Type u_1) [CommRing R] (n : β„€) :
              C R (n + 1) = X * C R n - C R (n - 1)
              theorem Polynomial.Chebyshev.C_sub_two (R : Type u_1) [CommRing R] (n : β„€) :
              C R (n - 2) = X * C R (n - 1) - C R n
              theorem Polynomial.Chebyshev.C_sub_one (R : Type u_1) [CommRing R] (n : β„€) :
              C R (n - 1) = X * C R n - C R (n + 1)
              theorem Polynomial.Chebyshev.C_eq (R : Type u_1) [CommRing R] (n : β„€) :
              C R n = X * C R (n - 1) - C R (n - 2)
              @[simp]
              theorem Polynomial.Chebyshev.C_zero (R : Type u_1) [CommRing R] :
              C R 0 = 2
              @[simp]
              theorem Polynomial.Chebyshev.C_neg (R : Type u_1) [CommRing R] (n : β„€) :
              C R (-n) = C R n
              @[simp]
              theorem Polynomial.Chebyshev.C_eval_two (R : Type u_1) [CommRing R] (n : β„€) :
              eval 2 (C R n) = 2
              @[simp]
              theorem Polynomial.Chebyshev.C_eval_neg_two (R : Type u_1) [CommRing R] (n : β„€) :
              eval (-2) (C R n) = 2 * ↑↑n.negOnePow
              @[irreducible]
              noncomputable def Polynomial.Chebyshev.S (R : Type u_1) [CommRing R] :

              S n is the nth rescaled Chebyshev polynomial of the second kind (also known as a Vieta–Fibonacci polynomial), given by $S_n(2x) = U_n(x)$. See Polynomial.Chebyshev.S_comp_two_mul_X.

              Equations
                Instances For
                  @[simp]
                  theorem Polynomial.Chebyshev.S_add_two (R : Type u_1) [CommRing R] (n : β„€) :
                  S R (n + 2) = X * S R (n + 1) - S R n
                  theorem Polynomial.Chebyshev.S_add_one (R : Type u_1) [CommRing R] (n : β„€) :
                  S R (n + 1) = X * S R n - S R (n - 1)
                  theorem Polynomial.Chebyshev.S_sub_two (R : Type u_1) [CommRing R] (n : β„€) :
                  S R (n - 2) = X * S R (n - 1) - S R n
                  theorem Polynomial.Chebyshev.S_sub_one (R : Type u_1) [CommRing R] (n : β„€) :
                  S R (n - 1) = X * S R n - S R (n + 1)
                  theorem Polynomial.Chebyshev.S_eq (R : Type u_1) [CommRing R] (n : β„€) :
                  S R n = X * S R (n - 1) - S R (n - 2)
                  @[simp]
                  theorem Polynomial.Chebyshev.S_zero (R : Type u_1) [CommRing R] :
                  S R 0 = 1
                  @[simp]
                  theorem Polynomial.Chebyshev.S_neg_one (R : Type u_1) [CommRing R] :
                  S R (-1) = 0
                  @[simp]
                  theorem Polynomial.Chebyshev.S_neg_two (R : Type u_1) [CommRing R] :
                  S R (-2) = -1
                  theorem Polynomial.Chebyshev.S_neg (R : Type u_1) [CommRing R] (n : β„€) :
                  S R (-n) = -S R (n - 2)
                  @[simp]
                  theorem Polynomial.Chebyshev.S_neg_sub_two (R : Type u_1) [CommRing R] (n : β„€) :
                  S R (-n - 2) = -S R n
                  @[simp]
                  theorem Polynomial.Chebyshev.S_eval_two (R : Type u_1) [CommRing R] (n : β„€) :
                  eval 2 (S R n) = ↑n + 1
                  @[simp]
                  theorem Polynomial.Chebyshev.S_eval_neg_two (R : Type u_1) [CommRing R] (n : β„€) :
                  eval (-2) (S R n) = ↑↑n.negOnePow * (↑n + 1)
                  theorem Polynomial.Chebyshev.S_sq_add_S_sq (R : Type u_1) [CommRing R] (n : β„€) :
                  S R n ^ 2 + S R (n + 1) ^ 2 - X * S R n * S R (n + 1) = 1
                  theorem Polynomial.Chebyshev.S_eq_X_mul_S_add_C (R : Type u_1) [CommRing R] (n : β„€) :
                  2 * S R (n + 1) = X * S R n + C R (n + 1)
                  theorem Polynomial.Chebyshev.C_eq_S_sub_X_mul_S (R : Type u_1) [CommRing R] (n : β„€) :
                  C R n = 2 * S R n - X * S R (n - 1)
                  @[simp]
                  theorem Polynomial.Chebyshev.map_T {R : Type u_1} {R' : Type u_2} [CommRing R] [CommRing R'] (f : R β†’+* R') (n : β„€) :
                  map f (T R n) = T R' n
                  @[simp]
                  theorem Polynomial.Chebyshev.map_U {R : Type u_1} {R' : Type u_2} [CommRing R] [CommRing R'] (f : R β†’+* R') (n : β„€) :
                  map f (U R n) = U R' n
                  @[simp]
                  theorem Polynomial.Chebyshev.map_C {R : Type u_1} {R' : Type u_2} [CommRing R] [CommRing R'] (f : R β†’+* R') (n : β„€) :
                  map f (C R n) = C R' n
                  @[simp]
                  theorem Polynomial.Chebyshev.map_S {R : Type u_1} {R' : Type u_2} [CommRing R] [CommRing R'] (f : R β†’+* R') (n : β„€) :
                  map f (S R n) = S R' n
                  @[simp]
                  theorem Polynomial.Chebyshev.aeval_T {R : Type u_1} {R' : Type u_2} [CommRing R] [CommRing R'] [Algebra R R'] (x : R') (n : β„€) :
                  (aeval x) (T R n) = eval x (T R' n)
                  @[simp]
                  theorem Polynomial.Chebyshev.aeval_U {R : Type u_1} {R' : Type u_2} [CommRing R] [CommRing R'] [Algebra R R'] (x : R') (n : β„€) :
                  (aeval x) (U R n) = eval x (U R' n)
                  @[simp]
                  theorem Polynomial.Chebyshev.aeval_C {R : Type u_1} {R' : Type u_2} [CommRing R] [CommRing R'] [Algebra R R'] (x : R') (n : β„€) :
                  (aeval x) (C R n) = eval x (C R' n)
                  @[simp]
                  theorem Polynomial.Chebyshev.aeval_S {R : Type u_1} {R' : Type u_2} [CommRing R] [CommRing R'] [Algebra R R'] (x : R') (n : β„€) :
                  (aeval x) (S R n) = eval x (S R' n)
                  @[simp]
                  theorem Polynomial.Chebyshev.algebraMap_eval_T {R : Type u_1} {R' : Type u_2} [CommRing R] [CommRing R'] [Algebra R R'] (x : R) (n : β„€) :
                  (algebraMap R R') (eval x (T R n)) = eval ((algebraMap R R') x) (T R' n)
                  @[simp]
                  theorem Polynomial.Chebyshev.algebraMap_eval_U {R : Type u_1} {R' : Type u_2} [CommRing R] [CommRing R'] [Algebra R R'] (x : R) (n : β„€) :
                  (algebraMap R R') (eval x (U R n)) = eval ((algebraMap R R') x) (U R' n)
                  @[simp]
                  theorem Polynomial.Chebyshev.algebraMap_eval_C {R : Type u_1} {R' : Type u_2} [CommRing R] [CommRing R'] [Algebra R R'] (x : R) (n : β„€) :
                  (algebraMap R R') (eval x (C R n)) = eval ((algebraMap R R') x) (C R' n)
                  @[simp]
                  theorem Polynomial.Chebyshev.algebraMap_eval_S {R : Type u_1} {R' : Type u_2} [CommRing R] [CommRing R'] [Algebra R R'] (x : R) (n : β„€) :
                  (algebraMap R R') (eval x (S R n)) = eval ((algebraMap R R') x) (S R' n)
                  theorem Polynomial.Chebyshev.one_sub_X_sq_mul_derivative_T_eq_poly_in_T {R : Type u_1} [CommRing R] (n : β„€) :
                  (1 - X ^ 2) * derivative (T R (n + 1)) = (↑n + 1) * (T R n - X * T R (n + 1))
                  theorem Polynomial.Chebyshev.add_one_mul_T_eq_poly_in_U {R : Type u_1} [CommRing R] (n : β„€) :
                  (↑n + 1) * T R (n + 1) = X * U R n - (1 - X ^ 2) * derivative (U R n)
                  theorem Polynomial.Chebyshev.add_one_mul_self_mul_T_eq_poly_in_T {R : Type u_1} [CommRing R] (n : β„€) :
                  (↑n + 1) * ↑n * T R (n + 1) = ↑n * X * derivative (T R (n + 1)) - (↑n + 1) * derivative (T R n)
                  theorem Polynomial.Chebyshev.one_sub_X_sq_mul_derivative_derivative_U_eq_poly_in_U {R : Type u_1} [CommRing R] (n : β„€) :
                  (1 - X ^ 2) * (⇑derivative)^[2] (U R n) = 3 * X * derivative (U R n) - (↑n + 2) * ↑n * U R n
                  theorem Polynomial.Chebyshev.one_sub_X_sq_mul_iterate_derivative_T_eq_poly_in_T {R : Type u_1} [CommRing R] (n : β„€) (k : β„•) :
                  (1 - X ^ 2) * (⇑derivative)^[k + 2] (T R n) = (2 * ↑k + 1) * X * (⇑derivative)^[k + 1] (T R n) - (↑n ^ 2 - ↑k ^ 2) * (⇑derivative)^[k] (T R n)
                  theorem Polynomial.Chebyshev.one_sub_X_sq_mul_iterate_derivative_U_eq_poly_in_U {R : Type u_1} [CommRing R] (n : β„€) (k : β„•) :
                  (1 - X ^ 2) * (⇑derivative)^[k + 2] (U R n) = (2 * ↑k + 3) * X * (⇑derivative)^[k + 1] (U R n) - ((↑n + 1) ^ 2 - (↑k + 1) ^ 2) * (⇑derivative)^[k] (U R n)
                  theorem Polynomial.Chebyshev.one_sub_X_sq_mul_iterate_derivative_T_eval {R : Type u_1} [CommRing R] (n : β„€) (k : β„•) (x : R) :
                  (1 - x ^ 2) * eval x ((⇑derivative)^[k + 2] (T R n)) = (2 * ↑k + 1) * x * eval x ((⇑derivative)^[k + 1] (T R n)) - (↑n ^ 2 - ↑k ^ 2) * eval x ((⇑derivative)^[k] (T R n))
                  theorem Polynomial.Chebyshev.one_sub_X_sq_mul_iterate_derivative_U_eval {R : Type u_1} [CommRing R] (n : β„€) (k : β„•) (x : R) :
                  (1 - x ^ 2) * eval x ((⇑derivative)^[k + 2] (U R n)) = (2 * ↑k + 3) * x * eval x ((⇑derivative)^[k + 1] (U R n)) - ((↑n + 1) ^ 2 - (↑k + 1) ^ 2) * eval x ((⇑derivative)^[k] (U R n))
                  theorem Polynomial.Chebyshev.iterate_derivative_T_eval_one_recurrence {R : Type u_1} [CommRing R] (n : β„€) (k : β„•) :
                  (2 * ↑k + 1) * eval 1 ((⇑derivative)^[k + 1] (T R n)) = (↑n ^ 2 - ↑k ^ 2) * eval 1 ((⇑derivative)^[k] (T R n))
                  theorem Polynomial.Chebyshev.iterate_derivative_U_eval_one_recurrence {R : Type u_1} [CommRing R] (n : β„€) (k : β„•) :
                  (2 * ↑k + 3) * eval 1 ((⇑derivative)^[k + 1] (U R n)) = ((↑n + 1) ^ 2 - (↑k + 1) ^ 2) * eval 1 ((⇑derivative)^[k] (U R n))
                  theorem Polynomial.Chebyshev.iterate_derivative_T_eval_zero_recurrence {R : Type u_1} [CommRing R] (n : β„€) (k : β„•) :
                  eval 0 ((⇑derivative)^[k + 2] (T R n)) = -(↑n ^ 2 - ↑k ^ 2) * eval 0 ((⇑derivative)^[k] (T R n))
                  theorem Polynomial.Chebyshev.iterate_derivative_U_eval_zero_recurrence {R : Type u_1} [CommRing R] (n : β„€) (k : β„•) :
                  eval 0 ((⇑derivative)^[k + 2] (U R n)) = -((↑n + 1) ^ 2 - (↑k + 1) ^ 2) * eval 0 ((⇑derivative)^[k] (U R n))
                  theorem Polynomial.Chebyshev.iterate_derivative_T_eval_one {R : Type u_1} [CommRing R] (n : β„€) (k : β„•) :
                  ↑(∏ l ∈ Finset.range k, (2 * l + 1)) * eval 1 ((⇑derivative)^[k] (T R n)) = ↑(∏ l ∈ Finset.range k, (n ^ 2 - ↑l ^ 2))
                  theorem Polynomial.Chebyshev.iterate_derivative_U_eval_one {R : Type u_1} [CommRing R] (n : β„€) (k : β„•) :
                  ↑(∏ l ∈ Finset.range k, (2 * l + 3)) * eval 1 ((⇑derivative)^[k] (U R n)) = ↑(∏ l ∈ Finset.range k, ((n + 1) ^ 2 - (↑l + 1) ^ 2)) * (↑n + 1)
                  theorem Polynomial.Chebyshev.derivative_U_eval_one {R : Type u_1} [CommRing R] (n : β„€) :
                  3 * eval 1 (derivative (U R n)) = (↑n + 2) * (↑n + 1) * ↑n
                  theorem Polynomial.Chebyshev.iterate_derivative_T_eval_one_eq_div {𝔽 : Type u_3} [Field 𝔽] [CharZero 𝔽] (n : β„€) (k : β„•) :
                  eval 1 ((⇑derivative)^[k] (T 𝔽 n)) = ↑(∏ l ∈ Finset.range k, (n ^ 2 - ↑l ^ 2)) / ↑(∏ l ∈ Finset.range k, (2 * l + 1))
                  theorem Polynomial.Chebyshev.iterate_derivative_U_eval_one_eq_div {𝔽 : Type u_3} [Field 𝔽] [CharZero 𝔽] (n : β„€) (k : β„•) :
                  eval 1 ((⇑derivative)^[k] (U 𝔽 n)) = ↑(∏ l ∈ Finset.range k, ((n + 1) ^ 2 - (↑l + 1) ^ 2)) * (↑n + 1) / ↑(∏ l ∈ Finset.range k, (2 * l + 3))
                  theorem Polynomial.Chebyshev.iterate_derivative_T_eval_one_dvd {𝔽 : Type u_3} [Field 𝔽] (n : β„€) (k : β„•) :
                  ↑(∏ l ∈ Finset.range k, (2 * l + 1)) ∣ ↑(∏ l ∈ Finset.range k, (n ^ 2 - ↑l ^ 2))
                  theorem Polynomial.Chebyshev.iterate_derivative_U_eval_one_dvd {𝔽 : Type u_3} [Field 𝔽] (n : β„€) (k : β„•) :
                  ↑(∏ l ∈ Finset.range k, (2 * l + 3)) ∣ ↑(∏ l ∈ Finset.range k, ((n + 1) ^ 2 - (↑l + 1) ^ 2)) * (↑n + 1)
                  theorem Polynomial.Chebyshev.derivative_U_eval_one_eq_div {𝔽 : Type u_3} [Field 𝔽] [neZero3 : NeZero 3] (n : β„€) :
                  eval 1 (derivative (U 𝔽 n)) = (↑n + 2) * (↑n + 1) * ↑n / 3
                  theorem Polynomial.Chebyshev.derivative_U_eval_one_dvd {𝔽 : Type u_3} [Field 𝔽] (n : β„€) :
                  3 ∣ (↑n + 2) * (↑n + 1) * ↑n
                  theorem Polynomial.Chebyshev.T_mul_T (R : Type u_1) [CommRing R] (m k : β„€) :
                  2 * T R m * T R k = T R (m + k) + T R (m - k)

                  Twice the product of two Chebyshev T polynomials is the sum of two other Chebyshev T polynomials.

                  theorem Polynomial.Chebyshev.C_mul_C (R : Type u_1) [CommRing R] (m k : β„€) :
                  C R m * C R k = C R (m + k) + C R (m - k)

                  The product of two Chebyshev C polynomials is the sum of two other Chebyshev C polynomials.

                  theorem Polynomial.Chebyshev.T_mul (R : Type u_1) [CommRing R] (m n : β„€) :
                  T R (m * n) = (T R m).comp (T R n)

                  The (m * n)-th Chebyshev T polynomial is the composition of the m-th and n-th.

                  theorem Polynomial.Chebyshev.C_mul (R : Type u_1) [CommRing R] (m n : β„€) :
                  C R (m * n) = (C R m).comp (C R n)

                  The (m * n)-th Chebyshev C polynomial is the composition of the m-th and n-th.