@@ -182,6 +182,28 @@ theorem T_eval_neg_one (n : ℤ) : (T R n).eval (-1) = n.negOnePow := by
182182 Int.negOnePow_sub]
183183 ring
184184
185+ theorem T_eval_zero (n : ℤ) :
186+ (T R n).eval 0 = (if Even n then (n / 2 ).negOnePow else 0 : ℤ) := by
187+ induction n using Polynomial.Chebyshev.induct with
188+ | zero => simp
189+ | one => simp
190+ | add_two n ih1 ih2 =>
191+ have : ((n : ℤ) + 2 ) / 2 = (n : ℤ) / 2 + 1 := by lia
192+ by_cases Even n <;> simp_all [Int.negOnePow_add]
193+ | neg_add_one n ih1 ih2 =>
194+ have : (-(n : ℤ) + 1 ) / 2 = (-(n : ℤ) - 1 ) / 2 + 1 := by lia
195+ by_cases Even n <;> simp_all [T_sub_one, ← Int.not_even_iff_odd, Int.negOnePow_add]
196+
197+ @[simp]
198+ theorem T_eval_zero_of_even {n : ℤ} (hn : Even n) : (T R n).eval 0 = (n / 2 ).negOnePow := by
199+ simp [T_eval_zero, hn]
200+
201+ theorem T_eval_two_mul_zero (n : ℤ) : (T R (2 * n)).eval 0 = n.negOnePow := by simp
202+
203+ @[simp]
204+ theorem T_eval_zero_of_odd {n : ℤ} (hn : Odd n) : (T R n).eval 0 = 0 := by
205+ simp [T_eval_zero, ← Int.not_odd_iff_even, hn]
206+
185207@[simp]
186208theorem degree_T [IsDomain R] [NeZero (2 : R)] (n : ℤ) : (T R n).degree = n.natAbs := by
187209 induction n using Chebyshev.induct' with
@@ -327,6 +349,28 @@ theorem U_eval_neg_one (n : ℤ) : (U R n).eval (-1) = n.negOnePow * (n + 1) :=
327349 norm_num
328350 ring
329351
352+ theorem U_eval_zero (n : ℤ) :
353+ (U R n).eval 0 = (if Even n then (n / 2 ).negOnePow else 0 : ℤ) := by
354+ induction n using Polynomial.Chebyshev.induct with
355+ | zero => simp
356+ | one => simp
357+ | add_two n ih1 ih2 =>
358+ have : ((n : ℤ) + 2 ) / 2 = (n : ℤ) / 2 + 1 := by lia
359+ by_cases Even n <;> simp_all [Int.negOnePow_add]
360+ | neg_add_one n ih1 ih2 =>
361+ have : (-(n : ℤ) + 1 ) / 2 = (-(n : ℤ) - 1 ) / 2 + 1 := by lia
362+ by_cases Even n <;> simp_all [U_sub_one, ← Int.not_even_iff_odd, Int.negOnePow_add]
363+
364+ @[simp]
365+ theorem U_eval_zero_of_even {n : ℤ} (hn : Even n) : (U R n).eval 0 = (n / 2 ).negOnePow := by
366+ simp [U_eval_zero, hn]
367+
368+ theorem U_eval_two_mul_zero (n : ℤ) : (U R (2 * n)).eval 0 = n.negOnePow := by simp
369+
370+ @[simp]
371+ theorem U_eval_zero_of_odd {n : ℤ} (hn : Odd n) : (U R n).eval 0 = 0 := by
372+ simp [U_eval_zero, ← Int.not_odd_iff_even, hn]
373+
330374@[simp]
331375theorem degree_U_natCast [IsDomain R] [NeZero (2 : R)] (n : ℕ) : (U R n).degree = n := by
332376 induction n using Nat.twoStepInduction with
0 commit comments