Forward Direction: Roots of T_N Are Chebyshev Roots

StatusFully Proven
TypeTheorem
ModuleChebyshevCircles.Proofs.ChebyshevRoots

Statement

Theorem Forward Direction: Roots of T_N Are Chebyshev Roots

For $N \geq 1$, if $T_N(x) = 0$ then $x = \cos((2k+1)\pi/(2N))$ for some $0 \leq k < N$. The proof constructs the finset of $N$ known distinct Chebyshev roots, shows they are all roots of $T_N$, and concludes by contradiction: any additional root would give $N+1$ roots for a degree-$N$ polynomial.

theorem chebyshev_T_eval_eq_zero_forward (N : ) (hN : 0 < N) (x : )
    (h : (Polynomial.Chebyshev.T  N).eval x = 0) :
     k < N, x = chebyshevRoot N k := by
Proof

By contradiction: if $x$ is not among the $N$ known Chebyshev roots, inserting it gives $N+1$ distinct roots of $T_N$, which contradicts $\deg(T_N) = N$.


  -- Strategy: T_N has degree N and has exactly N distinct roots (the Chebyshev roots)
  -- So x must be one of them

  -- Create finset of Chebyshev roots
  let roots := Finset.image (chebyshevRoot N) (Finset.range N)

  have h_card : roots.card = N := by
    rw [Finset.card_image_of_injOn]
    · simp
    · intros k₁ hk₁ k₂ hk₂ h_eq
      simp at hk₁ hk₂
      exact chebyshevRoots_distinct N hN k₁ k₂ hk₁ hk₂ h_eq

  -- All Chebyshev roots are roots of T_N
  have h_roots :  y  roots, (Polynomial.Chebyshev.T  N).eval y = 0 := by
    intro y hy
    simp [roots] at hy
    obtain k, hk, rfl := hy
    exact chebyshev_T_eval_chebyshevRoot N k hN hk

  -- T_N has degree N (from PolynomialProperties)
  have h_deg : (Polynomial.Chebyshev.T  N).natDegree = N := by
    have deg : (Polynomial.Chebyshev.T  N).degree = N := chebyshev_T_degree N hN
    rw [ Polynomial.degree_eq_iff_natDegree_eq_of_pos (by omega : 0 < N)]
    exact deg

  -- If x is not in roots, we'd have N+1 distinct roots, contradicting degree = N
  by_contra h_not_exists
  push_neg at h_not_exists

  have h_x_not_in : x  roots := by
    intro h_in
    simp [roots] at h_in
    obtain k, hk, h_eq := h_in
    exact h_not_exists k hk h_eq.symm

  -- Insert x into roots to get N+1 distinct roots
  have h_insert_card : (insert x roots).card = N + 1 := by
    rw [Finset.card_insert_of_notMem h_x_not_in, h_card]

  -- But all of them are roots of T_N
  have h_all_roots :  y  insert x roots, (Polynomial.Chebyshev.T  N).eval y = 0 := by
    intro y hy
    cases Finset.mem_insert.mp hy with
    | inl h_eq => rw [h_eq]; exact h
    | inr h_in => exact h_roots y h_in

  -- This contradicts that T_N has degree N
  have h_contradiction : N < (insert x roots).card := by
    rw [h_insert_card]
    omega

  -- T_N can't have more roots than its degree
  have h_bound : (insert x roots).card  (Polynomial.Chebyshev.T  N).natDegree := by
    apply Polynomial.card_le_degree_of_subset_roots
    intro y
    intro hy
    -- y ∈ (insert x roots).val, need to show y ∈ (T_N).roots
    have h_eval := h_all_roots y (Finset.mem_insert.mpr (Finset.mem_insert.mp hy))
    apply Polynomial.mem_roots'.mpr
    constructor
    · -- T_N ≠ 0 for N > 0
      intro h_zero
      have : (Polynomial.Chebyshev.T  N).degree = N := chebyshev_T_degree N hN
      rw [h_zero] at this
      simp at this
    · -- T_N.IsRoot y
      rw [Polynomial.IsRoot]
      exact h_eval

  rw [h_deg] at h_bound
  omega

Neighborhood

Legend
Not Ready
Work in Progress
Sorry (theorems only)
Proven/Defined
Fully Proven (theorems only)
Axiom
Mathlib Ready
Theorems/Lemmas
Definitions
Axioms