Skip to content

Commit a730d45

Browse files
committed
Removed results which were already proved
1 parent 89f7d86 commit a730d45

2 files changed

Lines changed: 16 additions & 90 deletions

File tree

Mathlib/Analysis/SpecialFunctions/Trigonometric/Chebyshev.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Authors: Johan Commelin
55
-/
66
import Mathlib.Data.Complex.Trigonometric
77
import Mathlib.Data.Complex.Module
8-
import Mathlib.RingTheory.Polynomial.Chebyshev
8+
import Mathlib.RingTheory.Polynomial.Chebyshev.Basic
99

1010
/-!
1111
# Multiple angle formulas in terms of Chebyshev polynomials

Mathlib/RingTheory/Polynomial/Chebyshev/Real.lean

Lines changed: 15 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,23 @@ Authors: Yuval Filmus
55
-/
66
import Mathlib.RingTheory.Polynomial.Chebyshev.Basic
77
import Mathlib.Data.Real.Basic
8+
import Mathlib.Algebra.Polynomial.Roots
89
import Mathlib.Analysis.SpecialFunctions.Trigonometric.Basic
910
import Mathlib.Analysis.SpecialFunctions.Trigonometric.Inverse
10-
import Mathlib.Analysis.SpecialFunctions.Log.Basic
1111
import Mathlib.Analysis.SpecialFunctions.Trigonometric.Deriv
1212
import Mathlib.Analysis.SpecialFunctions.Trigonometric.Complex
13-
import Mathlib.Algebra.Polynomial.Roots
13+
import Mathlib.Analysis.SpecialFunctions.Trigonometric.Chebyshev
14+
import Mathlib.Analysis.SpecialFunctions.Log.Basic
15+
16+
-- FIX ME:
17+
-- some of the results are available here:
18+
-- Mathlib.Analysis.SpecialFunctions.Trigonometric.Chebyshev
1419

1520
/-!
1621
# Chebyshev polynomials over the reals
1722
1823
## Main statements
1924
20-
* Trigonometric identities satisfied by Chebyshev polynomials:
21-
`Polynomial.Chebyshev.T_cos`, `Polynomial.Chebyshev.U_cos`
2225
* T_n(x) ∈ [-1, 1] iff x ∈ [-1, 1]
2326
* Zeroes of T and U
2427
* Extrema of T
@@ -66,35 +69,10 @@ theorem T_natDegree_real (n : ℤ) : (T ℝ n).natDegree = n.natAbs := by
6669
theorem T_leadingCoeff_real (n : ℤ) : (T ℝ n).leadingCoeff = 2^(n.natAbs - 1) := by
6770
exact T_leadingCoeff ℝ (by simp) n
6871

69-
@[simp]
70-
theorem T_cos (n : ℤ) (θ : ℝ) : (T ℝ n).eval (cos θ) = cos (n * θ) := by
71-
induction n using Chebyshev.induct' with
72-
| zero => simp
73-
| one => simp
74-
| add_two n ih1 ih2 =>
75-
rw [T_add_two, eval_sub, eval_mul, eval_mul, eval_ofNat, eval_X, ih1, ih2]
76-
apply sub_eq_iff_eq_add.mpr
77-
rw [Real.cos_add_cos, mul_assoc, mul_comm θ.cos, ←mul_assoc]
78-
push_cast; congr 3 <;> ring
79-
| neg n ih => simp [T_neg, ih]
80-
81-
@[simp]
82-
theorem T_cosh (n : ℤ) (θ : ℝ) : (T ℝ n).eval (cosh θ) = cosh (n * θ) := by
83-
induction n using Chebyshev.induct' with
84-
| zero => simp
85-
| one => simp
86-
| add_two n ih1 ih2 =>
87-
rw [T_add_two, eval_sub, eval_mul, eval_mul, eval_ofNat, eval_X, ih1, ih2]
88-
apply sub_eq_iff_eq_add.mpr
89-
trans cosh ((n + 1) * θ + θ) + cosh ((n + 1) * θ - θ)
90-
· rw [cosh_add, cosh_sub]; push_cast; ring
91-
· congr <;> (push_cast; ring)
92-
| neg n ih => simp [T_neg, ih]
93-
9472
theorem T_bounded_of_bounded (n : ℤ) {x : ℝ} (hx : x ∈ Set.Icc (-1) 1) :
9573
(T ℝ n).eval x ∈ Set.Icc (-1) 1 := by
9674
rw [Set.mem_Icc] at hx
97-
rw [←cos_arccos hx.1 hx.2, T_cos]
75+
rw [←cos_arccos hx.1 hx.2, T_real_cos]
9876
apply cos_mem_Icc
9977

10078
theorem T_bounded_of_bounded' (n : ℤ) {x : ℝ} (hx : |x| ≤ 1) :
@@ -119,12 +97,12 @@ theorem cosh_arccosh {x : ℝ} (hx : 1 ≤ x) : cosh (arccosh x) = x := by
11997

12098
theorem T_ge_of_ge_one (n : ℤ) {x : ℝ} (hx : x ≥ 1) :
12199
(T ℝ n).eval x ≥ 1 := by
122-
rw [←cosh_arccosh hx, T_cosh]
100+
rw [←cosh_arccosh hx, T_real_cosh]
123101
apply one_le_cosh
124102

125103
theorem T_gt_of_gt_one {n : ℤ} (hn : n ≠ 0) {x : ℝ} (hx : x > 1) :
126104
(T ℝ n).eval x > 1 := by
127-
rw [←cosh_arccosh (le_of_lt hx), T_cosh]
105+
rw [←cosh_arccosh (le_of_lt hx), T_real_cosh]
128106
apply one_lt_cosh.mpr
129107
apply mul_ne_zero_iff.mpr
130108
constructor
@@ -218,9 +196,9 @@ theorem T_eq_cos_of_bounded {n : ℤ} (hn : n ≠ 0) {y : ℝ} (hy : |y| ≤ 1)
218196
use arccos x
219197
constructor
220198
· exact cos_arccos (neg_le_of_abs_le hx) (le_of_abs_le hx)
221-
· rw [←h, ←T_cos n (arccos x), cos_arccos (neg_le_of_abs_le hx) (le_of_abs_le hx)]
199+
· rw [←h, ←T_real_cos (arccos x), cos_arccos (neg_le_of_abs_le hx) (le_of_abs_le hx)]
222200
· rintro ⟨θ, hx, hy⟩
223-
rw [← hx, T_cos n, hy]
201+
rw [← hx, T_real_cos, hy]
224202

225203
theorem T_eq_zero_iff {n : ℤ} (hn : n ≠ 0) (x : ℝ) :
226204
(T ℝ n).eval x = 0 ↔ ∃ (k : ℤ), x = cos ((2 * k + 1) * π / (2 * n)) := by
@@ -334,7 +312,7 @@ theorem T_eq_neg_one_iff {n : ℤ} (hn : n ≠ 0) (x : ℝ) :
334312
@[simp]
335313
theorem T_node_eval {n : ℤ} (hn : n ≠ 0) (k : ℤ) :
336314
(T ℝ n).eval (cos (k * π / n)) = (-1)^k := by
337-
rw [T_cos]
315+
rw [T_real_cos]
338316
trans cos (k * π)
339317
· congr 1; field_simp
340318
calc cos (k * π) = cos (0 + k * π) := by rw [zero_add]
@@ -355,7 +333,7 @@ theorem T_abs_eq_one_iff {n : ℤ} (hn : n ≠ 0) (x : ℝ) :
355333
use 2 * k + 1
356334
rw [hx]; congr; push_cast; rfl
357335
· rintro ⟨k, hx⟩
358-
rw [hx, T_cos]
336+
rw [hx, T_real_cos]
359337
trans |cos (k * π)|
360338
· congr 2; field_simp
361339
exact abs_cos_int_mul_pi _
@@ -480,63 +458,11 @@ theorem U_natDegree_real (n : ℤ) :
480458
theorem U_leadingCoeff_nat_real (n : ℕ) : (U ℝ n).leadingCoeff = 2^n := by
481459
exact U_leadingCoeff_nat ℝ (by simp) n
482460

483-
@[simp]
484-
theorem U_cos (n : ℤ) (θ : ℝ) : (U ℝ n).eval (cos θ) * sin θ = sin ((n+1) * θ) := by
485-
induction n using Chebyshev.induct with
486-
| zero => simp
487-
| one => norm_num; rw [sin_two_mul]; ring
488-
| add_two n ih1 ih2 =>
489-
norm_num
490-
rw [sub_mul]
491-
trans 2 * θ.cos * ((U ℝ (n+1)).eval θ.cos * θ.sin) - (U ℝ n).eval θ.cos * θ.sin
492-
· ring
493-
rw [ih1, ih2]
494-
apply sub_eq_iff_eq_add.mpr
495-
rw [Real.sin_add_sin, mul_assoc, mul_comm θ.cos, ←mul_assoc]
496-
push_cast; congr 3 <;> ring
497-
| neg_add_one n ih1 ih2 =>
498-
rw [U_sub_one]
499-
norm_num
500-
rw [sub_mul]
501-
trans 2 * θ.cos * ((U ℝ (-n)).eval θ.cos * θ.sin) - (U ℝ (-n+1)).eval θ.cos * θ.sin
502-
· ring
503-
rw [ih1, ih2]
504-
apply sub_eq_iff_eq_add.mpr
505-
rw [←sin_neg, ←cos_neg, sin_add_sin, mul_assoc, mul_comm (-θ).cos, ←mul_assoc]
506-
push_cast; congr 3 <;> ring
507-
508-
theorem U_cosh (n : ℤ) (θ : ℝ) : (U ℝ n).eval (cosh θ) * sinh θ = sinh ((n+1) * θ) := by
509-
induction n using Chebyshev.induct with
510-
| zero => simp
511-
| one => norm_num; rw [sinh_two_mul]; ring
512-
| add_two n ih1 ih2 =>
513-
norm_num
514-
rw [sub_mul]
515-
trans 2 * θ.cosh * ((U ℝ (n+1)).eval θ.cosh * θ.sinh) - (U ℝ n).eval θ.cosh * θ.sinh
516-
· ring
517-
rw [ih1, ih2]
518-
apply sub_eq_iff_eq_add.mpr
519-
trans sinh ((n + 2) * θ + θ) + sinh ((n + 2) * θ - θ)
520-
· rw [sinh_add, sinh_sub]; push_cast; ring_nf
521-
· congr <;> (push_cast; ring)
522-
| neg_add_one n ih1 ih2 =>
523-
rw [U_sub_one]
524-
norm_num
525-
rw [sub_mul]
526-
trans 2 * θ.cosh * ((U ℝ (-n)).eval θ.cosh * θ.sinh) - (U ℝ (-n+1)).eval θ.cosh * θ.sinh
527-
· ring
528-
rw [ih1, ih2]
529-
apply sub_eq_iff_eq_add.mpr
530-
rw [←sinh_neg]
531-
trans sinh ((-n + 1) * θ - θ) + sinh ((-n + 1) * θ + θ)
532-
· rw [sinh_add, sinh_sub]; push_cast; ring
533-
· congr <;> (push_cast; ring)
534-
535461
theorem U_eq_zero_if (n : ℕ) {k : ℕ} (hk1 : 1 ≤ k) (hkn : k ≤ n) :
536462
(U ℝ n).eval (cos (k * π / (n + 1))) = 0 := by
537463
have hn1 : (n + 1 : ℝ) ≠ 0 := by norm_cast
538464
have hpi := Real.pi_ne_zero
539-
have := U_cos n (k * π / (n + 1))
465+
have := U_real_cos (k * π / (n + 1)) n
540466
push_cast at this
541467
rw [mul_div_cancel₀ _ hn1, (@sin_eq_zero_iff (k*π)).mpr ⟨k, rfl⟩] at this
542468
refine (mul_eq_zero_iff_right ?_).mp this

0 commit comments

Comments
 (0)