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] :
β„€ β†’ Polynomial R

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

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_one (R : Type u_1) [CommRing R] :
    T R 1 = X
    theorem Polynomial.Chebyshev.T_two (R : Type u_1) [CommRing R] :
    T R 2 = 2 * X ^ 2 - 1
    @[simp]
    theorem Polynomial.Chebyshev.T_neg (R : Type u_1) [CommRing R] (n : β„€) :
    T R (-n) = T R n
    theorem Polynomial.Chebyshev.T_natAbs (R : Type u_1) [CommRing R] (n : β„€) :
    T R ↑n.natAbs = T R n
    theorem Polynomial.Chebyshev.T_neg_two (R : Type u_1) [CommRing R] :
    T R (-2) = 2 * X ^ 2 - 1
    @[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
    theorem Polynomial.Chebyshev.T_eval_two_mul_zero (R : Type u_1) [CommRing R] (n : β„€) :
    eval 0 (T R (2 * n)) = ↑↑n.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.natDegree_T (R : Type u_1) [CommRing R] [IsDomain R] [NeZero 2] (n : β„€) :
    (T R n).natDegree = n.natAbs
    @[simp]
    theorem Polynomial.Chebyshev.leadingCoeff_T (R : Type u_1) [CommRing R] [IsDomain R] [NeZero 2] (n : β„€) :
    (T R n).leadingCoeff = 2 ^ (n.natAbs - 1)
    @[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)
    theorem Polynomial.Chebyshev.T_ne_zero (R : Type u_1) [CommRing R] (n : β„€) [IsDomain R] [NeZero 2] :
    T R n β‰  0
    noncomputable def Polynomial.Chebyshev.chebyshevTsequence (R : Type u_1) [CommRing R] [IsDomain R] [NeZero 2] :

    ChebyshevT as a polynomial sequence.

    Instances For
      @[irreducible]
      noncomputable def Polynomial.Chebyshev.U (R : Type u_1) [CommRing R] :
      β„€ β†’ Polynomial R

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

      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
        theorem Polynomial.Chebyshev.U_two (R : Type u_1) [CommRing R] :
        U R 2 = 4 * X ^ 2 - 1
        @[simp]
        theorem Polynomial.Chebyshev.U_neg_two (R : Type u_1) [CommRing R] :
        U R (-2) = -1
        theorem Polynomial.Chebyshev.U_neg_sub_one (R : Type u_1) [CommRing R] (n : β„€) :
        U R (-n - 1) = -U R (n - 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
        theorem Polynomial.Chebyshev.U_eval_two_mul_zero (R : Type u_1) [CommRing R] (n : β„€) :
        eval 0 (U R (2 * n)) = ↑↑n.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
        @[simp]
        theorem Polynomial.Chebyshev.natDegree_U_natCast (R : Type u_1) [CommRing R] [IsDomain R] [NeZero 2] (n : β„•) :
        (U R ↑n).natDegree = 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)
        theorem Polynomial.Chebyshev.natDegree_U (R : Type u_1) [CommRing R] [IsDomain R] [NeZero 2] (n : β„€) :
        (U R n).natDegree = (n + 1).natAbs - 1
        @[simp]
        theorem Polynomial.Chebyshev.leadingCoeff_U_natCast (R : Type u_1) [CommRing R] [IsDomain R] [NeZero 2] (n : β„•) :
        (U R ↑n).leadingCoeff = 2 ^ n
        @[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_zero_iff (R : Type u_1) [CommRing R] (n : β„€) [IsDomain R] [NeZero 2] :
        U R n = 0 ↔ n = -1
        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_U_sub_X_mul_U (R : Type u_1) [CommRing R] (n : β„€) :
        T R n = U R n - X * U 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
        theorem Polynomial.Chebyshev.two_mul_T_eq_U_sub_U (R : Type u_1) [CommRing R] (n : β„€) :
        2 * T R (n + 2) = U R (n + 2) - U R n
        theorem Polynomial.Chebyshev.U_eq_two_mul_T_add_U (R : Type u_1) [CommRing R] (n : β„€) :
        U R (n + 2) = 2 * T R (n + 2) + U R n
        theorem Polynomial.Chebyshev.U_mem_span_T (R : Type u_1) [CommRing R] (n : β„•) :
        U R ↑n ∈ Submodule.span β„• ((fun (m : β„•) => T R ↑m) '' Set.Icc 0 n)
        @[irreducible]
        noncomputable def Polynomial.Chebyshev.C (R : Type u_1) [CommRing R] :
        β„€ β†’ Polynomial 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.

        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_one (R : Type u_1) [CommRing R] :
          C R 1 = X
          theorem Polynomial.Chebyshev.C_two (R : Type u_1) [CommRing R] :
          C R 2 = X ^ 2 - 2
          @[simp]
          theorem Polynomial.Chebyshev.C_neg (R : Type u_1) [CommRing R] (n : β„€) :
          C R (-n) = C R n
          theorem Polynomial.Chebyshev.C_natAbs (R : Type u_1) [CommRing R] (n : β„€) :
          C R ↑n.natAbs = C R n
          theorem Polynomial.Chebyshev.C_neg_two (R : Type u_1) [CommRing R] :
          C R (-2) = X ^ 2 - 2
          theorem Polynomial.Chebyshev.C_comp_two_mul_X (R : Type u_1) [CommRing R] (n : β„€) :
          (C R n).comp (2 * X) = 2 * T 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] :
          β„€ β†’ Polynomial 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.

          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_one (R : Type u_1) [CommRing R] :
            S R 1 = X
            @[simp]
            theorem Polynomial.Chebyshev.S_neg_one (R : Type u_1) [CommRing R] :
            S R (-1) = 0
            theorem Polynomial.Chebyshev.S_two (R : Type u_1) [CommRing R] :
            S R 2 = X ^ 2 - 1
            @[simp]
            theorem Polynomial.Chebyshev.S_neg_two (R : Type u_1) [CommRing R] :
            S R (-2) = -1
            theorem Polynomial.Chebyshev.S_neg_sub_one (R : Type u_1) [CommRing R] (n : β„€) :
            S R (-n - 1) = -S R (n - 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_comp_two_mul_X (R : Type u_1) [CommRing R] (n : β„€) :
            (S R n).comp (2 * X) = U R n
            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.T_derivative_eq_U {R : Type u_1} [CommRing R] (n : β„€) :
            derivative (T R n) = ↑n * U R (n - 1)
            theorem Polynomial.Chebyshev.T_derivative_mem_span_T {R : Type u_1} [CommRing R] (n : β„•) :
            derivative (T R ↑n) ∈ Submodule.span β„• ((fun (m : β„•) => T R ↑m) '' Set.Ico 0 n)
            theorem Polynomial.Chebyshev.T_iterate_derivative_mem_span_T {R : Type u_1} [CommRing R] (n k : β„•) :
            (⇑derivative)^[k] (T R ↑n) ∈ Submodule.span β„• ((fun (m : β„•) => T R ↑m) '' Set.Icc 0 (n - k))
            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_T_eq_poly_in_T {R : Type u_1} [CommRing R] (n : β„€) :
            (1 - X ^ 2) * (⇑derivative)^[2] (T R n) = X * derivative (T R n) - ↑n ^ 2 * 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_T_eval_one {R : Type u_1} [CommRing R] (n : β„€) :
            eval 1 (derivative (T R n)) = ↑n ^ 2
            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.