File: Mathlib/RingTheory/Polynomial/Chebyshev.lean

full_name: Polynomial.Chebyshev.T
code: /-- `T n` is the `n`-th Chebyshev polynomial of the first kind. -/
-- Well-founded definitions are now irreducible by default;
-- as this was implemented before this change,
-- we just set it back to semireducible to avoid needing to change any proofs.
@[semireducible] noncomputable def T : ℤ → R[X]
  
goal: ℤ → Polynomial R

full_name: Polynomial.Chebyshev.induct
code: /-- Induction principle used for proving facts about Chebyshev polynomials. -/
@[elab_as_elim]
protected theorem 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 
goal: motive a

full_name: Polynomial.Chebyshev.T_add_two
code: @[simp]
theorem T_add_two : ∀ n, T R (n + 2) = 2 * X * T R (n + 1) - T R n
  
goal: Polynomial.Chebyshev.T R (n + 2) = 2 * Polynomial.X * Polynomial.Chebyshev.T R (n + 1) - Polynomial.Chebyshev.T R n

full_name: Polynomial.Chebyshev.T_add_one
code: theorem T_add_one (n : ℤ) : T R (n + 1) = 2 * X * T R n - T R (n - 1) 
goal: Polynomial.Chebyshev.T R (n + 1) = 2 * Polynomial.X * Polynomial.Chebyshev.T R n - Polynomial.Chebyshev.T R (n - 1)

full_name: Polynomial.Chebyshev.T_sub_two
code: theorem T_sub_two (n : ℤ) : T R (n - 2) = 2 * X * T R (n - 1) - T R n 
goal: Polynomial.Chebyshev.T R (n - 2) = 2 * Polynomial.X * Polynomial.Chebyshev.T R (n - 1) - Polynomial.Chebyshev.T R n

full_name: Polynomial.Chebyshev.T_sub_one
code: theorem T_sub_one (n : ℤ) : T R (n - 1) = 2 * X * T R n - T R (n + 1) 
goal: Polynomial.Chebyshev.T R (n - 1) = 2 * Polynomial.X * Polynomial.Chebyshev.T R n - Polynomial.Chebyshev.T R (n + 1)

full_name: Polynomial.Chebyshev.T_eq
code: theorem T_eq (n : ℤ) : T R n = 2 * X * T R (n - 1) - T R (n - 2) 
goal: Polynomial.Chebyshev.T R n = 2 * Polynomial.X * Polynomial.Chebyshev.T R (n - 1) - Polynomial.Chebyshev.T R (n - 2)

full_name: Polynomial.Chebyshev.T_zero
code: @[simp]
theorem T_zero : T R 0 = 1 
goal: Polynomial.Chebyshev.T R 0 = 1

full_name: Polynomial.Chebyshev.T_one
code: @[simp]
theorem T_one : T R 1 = X 
goal: Polynomial.Chebyshev.T R 1 = Polynomial.X

full_name: Polynomial.Chebyshev.T_neg_one
code: theorem T_neg_one : T R (-1) = X 
goal: Polynomial.Chebyshev.T R (-1) = Polynomial.X

full_name: Polynomial.Chebyshev.T_two
code: theorem T_two : T R 2 = 2 * X ^ 2 - 1 
goal: Polynomial.Chebyshev.T R 2 = 2 * Polynomial.X ^ 2 - 1

full_name: Polynomial.Chebyshev.T_neg
code: @[simp]
theorem T_neg (n : ℤ) : T R (-n) = T R n 
goal: Polynomial.Chebyshev.T R (-n) = Polynomial.Chebyshev.T R n

full_name: Polynomial.Chebyshev.T_natAbs
code: theorem T_natAbs (n : ℤ) : T R n.natAbs = T R n 
goal: Polynomial.Chebyshev.T R ↑n.natAbs = Polynomial.Chebyshev.T R n

full_name: Polynomial.Chebyshev.T_neg_two
code: theorem T_neg_two : T R (-2) = 2 * X ^ 2 - 1 
goal: Polynomial.Chebyshev.T R (-2) = 2 * Polynomial.X ^ 2 - 1

full_name: Polynomial.Chebyshev.U
code: /-- `U n` is the `n`-th Chebyshev polynomial of the second kind. -/
-- Well-founded definitions are now irreducible by default;
-- as this was implemented before this change,
-- we just set it back to semireducible to avoid needing to change any proofs.
@[semireducible] noncomputable def U : ℤ → R[X]
  
goal: ℤ → Polynomial R

full_name: Polynomial.Chebyshev.U_add_two
code: @[simp]
theorem U_add_two : ∀ n, U R (n + 2) = 2 * X * U R (n + 1) - U R n
  
goal: Polynomial.Chebyshev.U R (n + 2) = 2 * Polynomial.X * Polynomial.Chebyshev.U R (n + 1) - Polynomial.Chebyshev.U R n

full_name: Polynomial.Chebyshev.U_add_one
code: theorem U_add_one (n : ℤ) : U R (n + 1) = 2 * X * U R n - U R (n - 1) 
goal: Polynomial.Chebyshev.U R (n + 1) = 2 * Polynomial.X * Polynomial.Chebyshev.U R n - Polynomial.Chebyshev.U R (n - 1)

full_name: Polynomial.Chebyshev.U_sub_two
code: theorem U_sub_two (n : ℤ) : U R (n - 2) = 2 * X * U R (n - 1) - U R n 
goal: Polynomial.Chebyshev.U R (n - 2) = 2 * Polynomial.X * Polynomial.Chebyshev.U R (n - 1) - Polynomial.Chebyshev.U R n

full_name: Polynomial.Chebyshev.U_sub_one
code: theorem U_sub_one (n : ℤ) : U R (n - 1) = 2 * X * U R n - U R (n + 1) 
goal: Polynomial.Chebyshev.U R (n - 1) = 2 * Polynomial.X * Polynomial.Chebyshev.U R n - Polynomial.Chebyshev.U R (n + 1)

full_name: Polynomial.Chebyshev.U_eq
code: theorem U_eq (n : ℤ) : U R n = 2 * X * U R (n - 1) - U R (n - 2) 
goal: Polynomial.Chebyshev.U R n = 2 * Polynomial.X * Polynomial.Chebyshev.U R (n - 1) - Polynomial.Chebyshev.U R (n - 2)

full_name: Polynomial.Chebyshev.U_zero
code: @[simp]
theorem U_zero : U R 0 = 1 
goal: Polynomial.Chebyshev.U R 0 = 1

full_name: Polynomial.Chebyshev.U_one
code: @[simp]
theorem U_one : U R 1 = 2 * X 
goal: Polynomial.Chebyshev.U R 1 = 2 * Polynomial.X

full_name: Polynomial.Chebyshev.U_neg_one
code: @[simp]
theorem U_neg_one : U R (-1) = 0 
goal: Polynomial.Chebyshev.U R (-1) = 0

full_name: Polynomial.Chebyshev.U_two
code: theorem U_two : U R 2 = 4 * X ^ 2 - 1 
goal: Polynomial.Chebyshev.U R 2 = 4 * Polynomial.X ^ 2 - 1

full_name: Polynomial.Chebyshev.U_neg_two
code: @[simp]
theorem U_neg_two : U R (-2) = -1 
goal: Polynomial.Chebyshev.U R (-2) = -1

full_name: Polynomial.Chebyshev.U_neg_sub_one
code: theorem U_neg_sub_one (n : ℤ) : U R (-n - 1) = -U R (n - 1) 
goal: Polynomial.Chebyshev.U R (-n - 1) = -Polynomial.Chebyshev.U R (n - 1)

full_name: Polynomial.Chebyshev.U_neg
code: theorem U_neg (n : ℤ) : U R (-n) = -U R (n - 2) 
goal: Polynomial.Chebyshev.U R (-n) = -Polynomial.Chebyshev.U R (n - 2)

full_name: Polynomial.Chebyshev.U_neg_sub_two
code: @[simp]
theorem U_neg_sub_two (n : ℤ) : U R (-n - 2) = -U R n 
goal: Polynomial.Chebyshev.U R (-n - 2) = -Polynomial.Chebyshev.U R n

full_name: Polynomial.Chebyshev.U_eq_X_mul_U_add_T
code: theorem U_eq_X_mul_U_add_T (n : ℤ) : U R (n + 1) = X * U R n + T R (n + 1) 
goal: Polynomial.Chebyshev.U R (n + 1) = Polynomial.X * Polynomial.Chebyshev.U R n + Polynomial.Chebyshev.T R (n + 1)

full_name: Polynomial.Chebyshev.T_eq_U_sub_X_mul_U
code: theorem T_eq_U_sub_X_mul_U (n : ℤ) : T R n = U R n - X * U R (n - 1) 
goal: Polynomial.Chebyshev.T R n = Polynomial.Chebyshev.U R n - Polynomial.X * Polynomial.Chebyshev.U R (n - 1)

full_name: Polynomial.Chebyshev.T_eq_X_mul_T_sub_pol_U
code: theorem T_eq_X_mul_T_sub_pol_U (n : ℤ) : T R (n + 2) = X * T R (n + 1) - (1 - X ^ 2) * U R n 
goal: Polynomial.Chebyshev.T R (n + 2) =
  Polynomial.X * Polynomial.Chebyshev.T R (n + 1) - (1 - Polynomial.X ^ 2) * Polynomial.Chebyshev.U R n

full_name: Polynomial.Chebyshev.one_sub_X_sq_mul_U_eq_pol_in_T
code: theorem one_sub_X_sq_mul_U_eq_pol_in_T (n : ℤ) :
    (1 - X ^ 2) * U R n = X * T R (n + 1) - T R (n + 2) 
goal: (1 - Polynomial.X ^ 2) * Polynomial.Chebyshev.U R n =
  Polynomial.X * Polynomial.Chebyshev.T R (n + 1) - Polynomial.Chebyshev.T R (n + 2)

full_name: Polynomial.Chebyshev.map_T
code: @[simp]
theorem map_T (f : R →+* S) (n : ℤ) : map f (T R n) = T S n 
goal: Polynomial.map f (Polynomial.Chebyshev.T R n) = Polynomial.Chebyshev.T S n

full_name: Polynomial.Chebyshev.map_U
code: @[simp]
theorem map_U (f : R →+* S) (n : ℤ) : map f (U R n) = U S n 
goal: Polynomial.map f (Polynomial.Chebyshev.U R n) = Polynomial.Chebyshev.U S n

full_name: Polynomial.Chebyshev.T_derivative_eq_U
code: theorem T_derivative_eq_U (n : ℤ) : derivative (T R n) = n * U R (n - 1) 
goal: Polynomial.derivative (Polynomial.Chebyshev.T R n) = ↑n * Polynomial.Chebyshev.U R (n - 1)

full_name: Polynomial.Chebyshev.one_sub_X_sq_mul_derivative_T_eq_poly_in_T
code: theorem one_sub_X_sq_mul_derivative_T_eq_poly_in_T (n : ℤ) :
    (1 - X ^ 2) * derivative (T R (n + 1)) = (n + 1 : R[X]) * (T R n - X * T R (n + 1)) 
goal: (1 - Polynomial.X ^ 2) * Polynomial.derivative (Polynomial.Chebyshev.T R (n + 1)) =
  (↑n + 1) * (Polynomial.Chebyshev.T R n - Polynomial.X * Polynomial.Chebyshev.T R (n + 1))

full_name: Polynomial.Chebyshev.add_one_mul_T_eq_poly_in_U
code: theorem add_one_mul_T_eq_poly_in_U (n : ℤ) :
    ((n : R[X]) + 1) * T R (n + 1) = X * U R n - (1 - X ^ 2) * derivative (U R n) 
goal: (↑n + 1) * Polynomial.Chebyshev.T R (n + 1) =
  Polynomial.X * Polynomial.Chebyshev.U R n -
    (1 - Polynomial.X ^ 2) * Polynomial.derivative (Polynomial.Chebyshev.U R n)

full_name: Polynomial.Chebyshev.mul_T
code: /-- Twice the product of two Chebyshev `T` polynomials is the sum of two other Chebyshev `T`
polynomials. -/
theorem mul_T (m k : ℤ) : 2 * T R m * T R k = T R (m + k) + T R (m - k) 
goal: 2 * Polynomial.Chebyshev.T R m * Polynomial.Chebyshev.T R k =
  Polynomial.Chebyshev.T R (m + k) + Polynomial.Chebyshev.T R (m - k)

full_name: Polynomial.Chebyshev.T_mul
code: /-- The `(m * n)`-th Chebyshev `T` polynomial is the composition of the `m`-th and `n`-th. -/
theorem T_mul (m n : ℤ) : T R (m * n) = (T R m).comp (T R n) 
goal: Polynomial.Chebyshev.T R (m * n) = (Polynomial.Chebyshev.T R m).comp (Polynomial.Chebyshev.T R n)