Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit dfef07a

Browse files
chore(analysis/special_functions): moved trig vals out of real.pi, added new trig vals (#3497)
Moved trigonometric lemmas from real.pi to analysis.special_functions.trigonometric. Also added two new trig lemmas, tan_pi_div_four and arctan_one, to analysis.special_functions.trigonometric. https://leanprover.zulipchat.com/#narrow/stream/113488-general/topic/Trig.20function.20values
1 parent c47d1d0 commit dfef07a

File tree

2 files changed

+134
-116
lines changed

2 files changed

+134
-116
lines changed

src/analysis/special_functions/trigonometric.lean

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -832,6 +832,126 @@ begin
832832
norm_num, norm_num, apply pow_pos h
833833
end
834834

835+
section cos_div_pow_two
836+
837+
variable (x : ℝ)
838+
839+
/-- the series `sqrt_two_add_series x n` is `sqrt(2 + sqrt(2 + ... ))` with `n` square roots,
840+
starting with `x`. We define it here because `cos (pi / 2 ^ (n+1)) = sqrt_two_add_series 0 n / 2`
841+
-/
842+
@[simp] noncomputable def sqrt_two_add_series (x : ℝ) : ℕ → ℝ
843+
| 0 := x
844+
| (n+1) := sqrt (2 + sqrt_two_add_series n)
845+
846+
lemma sqrt_two_add_series_zero : sqrt_two_add_series x 0 = x := by simp
847+
lemma sqrt_two_add_series_one : sqrt_two_add_series 0 1 = sqrt 2 := by simp
848+
lemma sqrt_two_add_series_two : sqrt_two_add_series 0 2 = sqrt (2 + sqrt 2) := by simp
849+
850+
lemma sqrt_two_add_series_zero_nonneg : ∀(n : ℕ), 0 ≤ sqrt_two_add_series 0 n
851+
| 0 := le_refl 0
852+
| (n+1) := sqrt_nonneg _
853+
854+
lemma sqrt_two_add_series_nonneg {x : ℝ} (h : 0 ≤ x) : ∀(n : ℕ), 0 ≤ sqrt_two_add_series x n
855+
| 0 := h
856+
| (n+1) := sqrt_nonneg _
857+
858+
lemma sqrt_two_add_series_lt_two : ∀(n : ℕ), sqrt_two_add_series 0 n < 2
859+
| 0 := by norm_num
860+
| (n+1) :=
861+
begin
862+
refine lt_of_lt_of_le _ (le_of_eq $ sqrt_sqr $ le_of_lt two_pos),
863+
rw [sqrt_two_add_series, sqrt_lt],
864+
apply add_lt_of_lt_sub_left,
865+
apply lt_of_lt_of_le (sqrt_two_add_series_lt_two n),
866+
norm_num, apply add_nonneg, norm_num, apply sqrt_two_add_series_zero_nonneg, norm_num
867+
end
868+
869+
lemma sqrt_two_add_series_succ (x : ℝ) :
870+
∀(n : ℕ), sqrt_two_add_series x (n+1) = sqrt_two_add_series (sqrt (2 + x)) n
871+
| 0 := rfl
872+
| (n+1) := by rw [sqrt_two_add_series, sqrt_two_add_series_succ, sqrt_two_add_series]
873+
874+
lemma sqrt_two_add_series_monotone_left {x y : ℝ} (h : x ≤ y) :
875+
∀(n : ℕ), sqrt_two_add_series x n ≤ sqrt_two_add_series y n
876+
| 0 := h
877+
| (n+1) :=
878+
begin
879+
rw [sqrt_two_add_series, sqrt_two_add_series],
880+
apply sqrt_le_sqrt, apply add_le_add_left, apply sqrt_two_add_series_monotone_left
881+
end
882+
883+
@[simp] lemma cos_pi_over_two_pow : ∀(n : ℕ), cos (pi / 2 ^ (n+1)) = sqrt_two_add_series 0 n / 2
884+
| 0 := by simp
885+
| (n+1) :=
886+
begin
887+
symmetry, rw [div_eq_iff_mul_eq], symmetry,
888+
rw [sqrt_two_add_series, sqrt_eq_iff_sqr_eq, mul_pow, cos_square, ←mul_div_assoc,
889+
nat.add_succ, pow_succ, mul_div_mul_left, cos_pi_over_two_pow, add_mul],
890+
congr, norm_num,
891+
rw [mul_comm, pow_two, mul_assoc, ←mul_div_assoc, mul_div_cancel_left, ←mul_div_assoc,
892+
mul_div_cancel_left],
893+
norm_num, norm_num, norm_num,
894+
apply add_nonneg, norm_num, apply sqrt_two_add_series_zero_nonneg, norm_num,
895+
apply le_of_lt, apply cos_pos_of_neg_pi_div_two_lt_of_lt_pi_div_two,
896+
{ transitivity (0 : ℝ), rw neg_lt_zero, apply pi_div_two_pos,
897+
apply div_pos pi_pos, apply pow_pos, norm_num },
898+
apply div_lt_div' (le_refl pi) _ pi_pos _,
899+
refine lt_of_le_of_lt (le_of_eq (pow_one _).symm) _,
900+
apply pow_lt_pow, norm_num, apply nat.succ_lt_succ, apply nat.succ_pos, all_goals {norm_num}
901+
end
902+
903+
lemma sin_square_pi_over_two_pow (n : ℕ) :
904+
sin (pi / 2 ^ (n+1)) ^ 2 = 1 - (sqrt_two_add_series 0 n / 2) ^ 2 :=
905+
by rw [sin_square, cos_pi_over_two_pow]
906+
907+
lemma sin_square_pi_over_two_pow_succ (n : ℕ) :
908+
sin (pi / 2 ^ (n+2)) ^ 2 = 1 / 2 - sqrt_two_add_series 0 n / 4 :=
909+
begin
910+
rw [sin_square_pi_over_two_pow, sqrt_two_add_series, div_pow, sqr_sqrt, add_div, ←sub_sub],
911+
congr, norm_num, norm_num, apply add_nonneg, norm_num, apply sqrt_two_add_series_zero_nonneg,
912+
end
913+
914+
@[simp] lemma sin_pi_over_two_pow_succ (n : ℕ) :
915+
sin (pi / 2 ^ (n+2)) = sqrt (2 - sqrt_two_add_series 0 n) / 2 :=
916+
begin
917+
symmetry, rw [div_eq_iff_mul_eq], symmetry,
918+
rw [sqrt_eq_iff_sqr_eq, mul_pow, sin_square_pi_over_two_pow_succ, sub_mul],
919+
{ congr, norm_num, rw [mul_comm], convert mul_div_cancel' _ _, norm_num, norm_num },
920+
{ rw [sub_nonneg], apply le_of_lt, apply sqrt_two_add_series_lt_two },
921+
apply le_of_lt, apply mul_pos, apply sin_pos_of_pos_of_lt_pi,
922+
{ apply div_pos pi_pos, apply pow_pos, norm_num },
923+
refine lt_of_lt_of_le _ (le_of_eq (div_one _)), rw [div_lt_div_left],
924+
refine lt_of_le_of_lt (le_of_eq (pow_zero 2).symm) _,
925+
apply pow_lt_pow, norm_num, apply nat.succ_pos, apply pi_pos,
926+
apply pow_pos, all_goals {norm_num}
927+
end
928+
929+
lemma cos_pi_div_four : cos (pi / 4) = sqrt 2 / 2 :=
930+
by { transitivity cos (pi / 2 ^ 2), congr, norm_num, simp }
931+
932+
lemma sin_pi_div_four : sin (pi / 4) = sqrt 2 / 2 :=
933+
by { transitivity sin (pi / 2 ^ 2), congr, norm_num, simp }
934+
935+
lemma cos_pi_div_eight : cos (pi / 8) = sqrt (2 + sqrt 2) / 2 :=
936+
by { transitivity cos (pi / 2 ^ 3), congr, norm_num, simp }
937+
938+
lemma sin_pi_div_eight : sin (pi / 8) = sqrt (2 - sqrt 2) / 2 :=
939+
by { transitivity sin (pi / 2 ^ 3), congr, norm_num, simp }
940+
941+
lemma cos_pi_div_sixteen : cos (pi / 16) = sqrt (2 + sqrt (2 + sqrt 2)) / 2 :=
942+
by { transitivity cos (pi / 2 ^ 4), congr, norm_num, simp }
943+
944+
lemma sin_pi_div_sixteen : sin (pi / 16) = sqrt (2 - sqrt (2 + sqrt 2)) / 2 :=
945+
by { transitivity sin (pi / 2 ^ 4), congr, norm_num, simp }
946+
947+
lemma cos_pi_div_thirty_two : cos (pi / 32) = sqrt (2 + sqrt (2 + sqrt (2 + sqrt 2))) / 2 :=
948+
by { transitivity cos (pi / 2 ^ 5), congr, norm_num, simp }
949+
950+
lemma sin_pi_div_thirty_two : sin (pi / 32) = sqrt (2 - sqrt (2 + sqrt (2 + sqrt 2))) / 2 :=
951+
by { transitivity sin (pi / 2 ^ 5), congr, norm_num, simp }
952+
953+
end cos_div_pow_two
954+
835955
/-- The type of angles -/
836956
def angle : Type :=
837957
quotient_add_group.quotient (gmultiples (2 * π))
@@ -1068,6 +1188,13 @@ lemma div_sqrt_one_add_lt_one (x : ℝ) : x / sqrt (1 + x ^ 2) < 1 :=
10681188
lemma neg_one_lt_div_sqrt_one_add (x : ℝ) : -1 < x / sqrt (1 + x ^ 2) :=
10691189
(abs_lt.1 (abs_div_sqrt_one_add_lt _)).1
10701190

1191+
@[simp] lemma tan_pi_div_four : tan (π / 4) = 1 :=
1192+
begin
1193+
rw [tan_eq_sin_div_cos, cos_pi_div_four, sin_pi_div_four],
1194+
have h : (sqrt 2) / 2 > 0 := by cancel_denoms,
1195+
exact div_self (ne_of_gt h),
1196+
end
1197+
10711198
lemma tan_pos_of_pos_of_lt_pi_div_two {x : ℝ} (h0x : 0 < x) (hxp : x < π / 2) : 0 < tan x :=
10721199
by rw tan_eq_sin_div_cos; exact div_pos (sin_pos_of_pos_of_lt_pi h0x (by linarith))
10731200
(cos_pos_of_neg_pi_div_two_lt_of_lt_pi_div_two (by linarith) hxp)
@@ -1168,6 +1295,12 @@ tan_inj_of_lt_of_lt_pi_div_two (neg_pi_div_two_lt_arctan _)
11681295
@[simp] lemma arctan_zero : arctan 0 = 0 :=
11691296
by simp [arctan]
11701297

1298+
@[simp] lemma arctan_one : arctan 1 = π / 4 :=
1299+
begin
1300+
refine tan_inj_of_lt_of_lt_pi_div_two (neg_pi_div_two_lt_arctan 1) (arctan_lt_pi_div_two 1) _ _ _;
1301+
linarith [pi_pos, tan_arctan 1, tan_pi_div_four],
1302+
end
1303+
11711304
@[simp] lemma arctan_neg (x : ℝ) : arctan (-x) = - arctan x :=
11721305
by simp [arctan, neg_div]
11731306

src/data/real/pi.lean

Lines changed: 1 addition & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -6,121 +6,6 @@ Authors: Floris van Doorn
66
import analysis.special_functions.trigonometric
77

88
namespace real
9-
variable (x : ℝ)
10-
11-
/-- the series `sqrt_two_add_series x n` is `sqrt(2 + sqrt(2 + ... ))` with `n` square roots,
12-
starting with `x`. We define it here because `cos (pi / 2 ^ (n+1)) = sqrt_two_add_series 0 n / 2`
13-
-/
14-
@[simp] noncomputable def sqrt_two_add_series (x : ℝ) : ℕ → ℝ
15-
| 0 := x
16-
| (n+1) := sqrt (2 + sqrt_two_add_series n)
17-
18-
lemma sqrt_two_add_series_zero : sqrt_two_add_series x 0 = x := by simp
19-
lemma sqrt_two_add_series_one : sqrt_two_add_series 0 1 = sqrt 2 := by simp
20-
lemma sqrt_two_add_series_two : sqrt_two_add_series 0 2 = sqrt (2 + sqrt 2) := by simp
21-
22-
lemma sqrt_two_add_series_zero_nonneg : ∀(n : ℕ), 0 ≤ sqrt_two_add_series 0 n
23-
| 0 := le_refl 0
24-
| (n+1) := sqrt_nonneg _
25-
26-
lemma sqrt_two_add_series_nonneg {x : ℝ} (h : 0 ≤ x) : ∀(n : ℕ), 0 ≤ sqrt_two_add_series x n
27-
| 0 := h
28-
| (n+1) := sqrt_nonneg _
29-
30-
lemma sqrt_two_add_series_lt_two : ∀(n : ℕ), sqrt_two_add_series 0 n < 2
31-
| 0 := by norm_num
32-
| (n+1) :=
33-
begin
34-
refine lt_of_lt_of_le _ (le_of_eq $ sqrt_sqr $ le_of_lt two_pos),
35-
rw [sqrt_two_add_series, sqrt_lt],
36-
apply add_lt_of_lt_sub_left,
37-
apply lt_of_lt_of_le (sqrt_two_add_series_lt_two n),
38-
norm_num, apply add_nonneg, norm_num, apply sqrt_two_add_series_zero_nonneg, norm_num
39-
end
40-
41-
lemma sqrt_two_add_series_succ (x : ℝ) :
42-
∀(n : ℕ), sqrt_two_add_series x (n+1) = sqrt_two_add_series (sqrt (2 + x)) n
43-
| 0 := rfl
44-
| (n+1) := by rw [sqrt_two_add_series, sqrt_two_add_series_succ, sqrt_two_add_series]
45-
46-
lemma sqrt_two_add_series_monotone_left {x y : ℝ} (h : x ≤ y) :
47-
∀(n : ℕ), sqrt_two_add_series x n ≤ sqrt_two_add_series y n
48-
| 0 := h
49-
| (n+1) :=
50-
begin
51-
rw [sqrt_two_add_series, sqrt_two_add_series],
52-
apply sqrt_le_sqrt, apply add_le_add_left, apply sqrt_two_add_series_monotone_left
53-
end
54-
55-
@[simp] lemma cos_pi_over_two_pow : ∀(n : ℕ), cos (pi / 2 ^ (n+1)) = sqrt_two_add_series 0 n / 2
56-
| 0 := by simp
57-
| (n+1) :=
58-
begin
59-
symmetry, rw [div_eq_iff_mul_eq], symmetry,
60-
rw [sqrt_two_add_series, sqrt_eq_iff_sqr_eq, mul_pow, cos_square, ←mul_div_assoc,
61-
nat.add_succ, pow_succ, mul_div_mul_left, cos_pi_over_two_pow, add_mul],
62-
congr, norm_num,
63-
rw [mul_comm, pow_two, mul_assoc, ←mul_div_assoc, mul_div_cancel_left, ←mul_div_assoc,
64-
mul_div_cancel_left],
65-
norm_num, norm_num, norm_num,
66-
apply add_nonneg, norm_num, apply sqrt_two_add_series_zero_nonneg, norm_num,
67-
apply le_of_lt, apply cos_pos_of_neg_pi_div_two_lt_of_lt_pi_div_two,
68-
{ transitivity (0 : ℝ), rw neg_lt_zero, apply pi_div_two_pos,
69-
apply div_pos pi_pos, apply pow_pos, norm_num },
70-
apply div_lt_div' (le_refl pi) _ pi_pos _,
71-
refine lt_of_le_of_lt (le_of_eq (pow_one _).symm) _,
72-
apply pow_lt_pow, norm_num, apply nat.succ_lt_succ, apply nat.succ_pos, all_goals {norm_num}
73-
end
74-
75-
lemma sin_square_pi_over_two_pow (n : ℕ) :
76-
sin (pi / 2 ^ (n+1)) ^ 2 = 1 - (sqrt_two_add_series 0 n / 2) ^ 2 :=
77-
by rw [sin_square, cos_pi_over_two_pow]
78-
79-
lemma sin_square_pi_over_two_pow_succ (n : ℕ) :
80-
sin (pi / 2 ^ (n+2)) ^ 2 = 1 / 2 - sqrt_two_add_series 0 n / 4 :=
81-
begin
82-
rw [sin_square_pi_over_two_pow, sqrt_two_add_series, div_pow, sqr_sqrt, add_div, ←sub_sub],
83-
congr, norm_num, norm_num, apply add_nonneg, norm_num, apply sqrt_two_add_series_zero_nonneg,
84-
end
85-
86-
@[simp] lemma sin_pi_over_two_pow_succ (n : ℕ) :
87-
sin (pi / 2 ^ (n+2)) = sqrt (2 - sqrt_two_add_series 0 n) / 2 :=
88-
begin
89-
symmetry, rw [div_eq_iff_mul_eq], symmetry,
90-
rw [sqrt_eq_iff_sqr_eq, mul_pow, sin_square_pi_over_two_pow_succ, sub_mul],
91-
{ congr, norm_num, rw [mul_comm], convert mul_div_cancel' _ _, norm_num, norm_num },
92-
{ rw [sub_nonneg], apply le_of_lt, apply sqrt_two_add_series_lt_two },
93-
apply le_of_lt, apply mul_pos, apply sin_pos_of_pos_of_lt_pi,
94-
{ apply div_pos pi_pos, apply pow_pos, norm_num },
95-
refine lt_of_lt_of_le _ (le_of_eq (div_one _)), rw [div_lt_div_left],
96-
refine lt_of_le_of_lt (le_of_eq (pow_zero 2).symm) _,
97-
apply pow_lt_pow, norm_num, apply nat.succ_pos, apply pi_pos,
98-
apply pow_pos, all_goals {norm_num}
99-
end
100-
101-
lemma cos_pi_div_four : cos (pi / 4) = sqrt 2 / 2 :=
102-
by { transitivity cos (pi / 2 ^ 2), congr, norm_num, simp }
103-
104-
lemma sin_pi_div_four : sin (pi / 4) = sqrt 2 / 2 :=
105-
by { transitivity sin (pi / 2 ^ 2), congr, norm_num, simp }
106-
107-
lemma cos_pi_div_eight : cos (pi / 8) = sqrt (2 + sqrt 2) / 2 :=
108-
by { transitivity cos (pi / 2 ^ 3), congr, norm_num, simp }
109-
110-
lemma sin_pi_div_eight : sin (pi / 8) = sqrt (2 - sqrt 2) / 2 :=
111-
by { transitivity sin (pi / 2 ^ 3), congr, norm_num, simp }
112-
113-
lemma cos_pi_div_sixteen : cos (pi / 16) = sqrt (2 + sqrt (2 + sqrt 2)) / 2 :=
114-
by { transitivity cos (pi / 2 ^ 4), congr, norm_num, simp }
115-
116-
lemma sin_pi_div_sixteen : sin (pi / 16) = sqrt (2 - sqrt (2 + sqrt 2)) / 2 :=
117-
by { transitivity sin (pi / 2 ^ 4), congr, norm_num, simp }
118-
119-
lemma cos_pi_div_thirty_two : cos (pi / 32) = sqrt (2 + sqrt (2 + sqrt (2 + sqrt 2))) / 2 :=
120-
by { transitivity cos (pi / 2 ^ 5), congr, norm_num, simp }
121-
122-
lemma sin_pi_div_thirty_two : sin (pi / 32) = sqrt (2 - sqrt (2 + sqrt (2 + sqrt 2))) / 2 :=
123-
by { transitivity sin (pi / 2 ^ 5), congr, norm_num, simp }
1249

12510
lemma pi_gt_sqrt_two_add_series (n : ℕ) : 2 ^ (n+1) * sqrt (2 - sqrt_two_add_series 0 n) < pi :=
12611
begin
@@ -160,7 +45,7 @@ begin
16045
apply pow_ne_zero, norm_num, norm_num
16146
end
16247

163-
/-- From an upper bound on `sqrt_two_add_series 0 n = 2 cos (pi / 2 ^ (n+1))` of the form
48+
/-- From an upper bound on `sqrt_two_add_series 0 n = 2 cos (pi / 2 ^ (n+1))` of the form
16449
`sqrt_two_add_series 0 n ≤ 2 - (a / 2 ^ (n + 1)) ^ 2)`, one can deduce the lower bound `a < pi`
16550
thanks to basic trigonometric inequalities as expressed in `pi_gt_sqrt_two_add_series`. -/
16651
theorem pi_lower_bound_start (n : ℕ) {a}

0 commit comments

Comments
 (0)