1602 |
1602 |
1603 lemma sin_pi [simp]: "sin pi = 0" |
1603 lemma sin_pi [simp]: "sin pi = 0" |
1604 by (cut_tac x = "pi/2" and y = "pi/2" in sin_add, simp) |
1604 by (cut_tac x = "pi/2" and y = "pi/2" in sin_add, simp) |
1605 |
1605 |
1606 lemma sin_cos_eq: "sin x = cos (pi/2 - x)" |
1606 lemma sin_cos_eq: "sin x = cos (pi/2 - x)" |
1607 by (simp add: diff_minus cos_add) |
1607 by (simp add: cos_diff) |
1608 declare sin_cos_eq [symmetric, simp] |
|
1609 |
1608 |
1610 lemma minus_sin_cos_eq: "-sin x = cos (x + pi/2)" |
1609 lemma minus_sin_cos_eq: "-sin x = cos (x + pi/2)" |
1611 by (simp add: cos_add) |
1610 by (simp add: cos_add) |
1612 declare minus_sin_cos_eq [symmetric, simp] |
|
1613 |
1611 |
1614 lemma cos_sin_eq: "cos x = sin (pi/2 - x)" |
1612 lemma cos_sin_eq: "cos x = sin (pi/2 - x)" |
1615 by (simp add: diff_minus sin_add) |
1613 by (simp add: sin_diff) |
1616 declare cos_sin_eq [symmetric, simp] |
|
1617 |
1614 |
1618 lemma sin_periodic_pi [simp]: "sin (x + pi) = - sin x" |
1615 lemma sin_periodic_pi [simp]: "sin (x + pi) = - sin x" |
1619 by (simp add: sin_add) |
1616 by (simp add: sin_add) |
1620 |
1617 |
1621 lemma sin_periodic_pi2 [simp]: "sin (pi + x) = - sin x" |
1618 lemma sin_periodic_pi2 [simp]: "sin (pi + x) = - sin x" |
1692 apply (auto simp add: order_le_less cos_gt_zero_pi) |
1689 apply (auto simp add: order_le_less cos_gt_zero_pi) |
1693 apply (subgoal_tac "x = pi/2", auto) |
1690 apply (subgoal_tac "x = pi/2", auto) |
1694 done |
1691 done |
1695 |
1692 |
1696 lemma sin_gt_zero_pi: "[| 0 < x; x < pi |] ==> 0 < sin x" |
1693 lemma sin_gt_zero_pi: "[| 0 < x; x < pi |] ==> 0 < sin x" |
1697 apply (subst sin_cos_eq) |
1694 by (simp add: sin_cos_eq cos_gt_zero_pi) |
1698 apply (rotate_tac 1) |
|
1699 apply (drule real_sum_of_halves [THEN ssubst]) |
|
1700 apply (auto intro!: cos_gt_zero_pi simp del: sin_cos_eq [symmetric]) |
|
1701 done |
|
1702 |
|
1703 |
1695 |
1704 lemma pi_ge_two: "2 \<le> pi" |
1696 lemma pi_ge_two: "2 \<le> pi" |
1705 proof (rule ccontr) |
1697 proof (rule ccontr) |
1706 assume "\<not> 2 \<le> pi" hence "pi < 2" by auto |
1698 assume "\<not> 2 \<le> pi" hence "pi < 2" by auto |
1707 have "\<exists>y > pi. y < 2 \<and> y < 2 * pi" |
1699 have "\<exists>y > pi. y < 2 \<and> y < 2 * pi" |
1748 lemma sin_total: |
1740 lemma sin_total: |
1749 "[| -1 \<le> y; y \<le> 1 |] ==> EX! x. -(pi/2) \<le> x & x \<le> pi/2 & (sin x = y)" |
1741 "[| -1 \<le> y; y \<le> 1 |] ==> EX! x. -(pi/2) \<le> x & x \<le> pi/2 & (sin x = y)" |
1750 apply (rule ccontr) |
1742 apply (rule ccontr) |
1751 apply (subgoal_tac "\<forall>x. (- (pi/2) \<le> x & x \<le> pi/2 & (sin x = y)) = (0 \<le> (x + pi/2) & (x + pi/2) \<le> pi & (cos (x + pi/2) = -y))") |
1743 apply (subgoal_tac "\<forall>x. (- (pi/2) \<le> x & x \<le> pi/2 & (sin x = y)) = (0 \<le> (x + pi/2) & (x + pi/2) \<le> pi & (cos (x + pi/2) = -y))") |
1752 apply (erule contrapos_np) |
1744 apply (erule contrapos_np) |
1753 apply (simp del: minus_sin_cos_eq [symmetric]) |
1745 apply simp |
1754 apply (cut_tac y="-y" in cos_total, simp) apply simp |
1746 apply (cut_tac y="-y" in cos_total, simp) apply simp |
1755 apply (erule ex1E) |
1747 apply (erule ex1E) |
1756 apply (rule_tac a = "x - (pi/2)" in ex1I) |
1748 apply (rule_tac a = "x - (pi/2)" in ex1I) |
1757 apply (simp (no_asm) add: add_assoc) |
1749 apply (simp (no_asm) add: add_assoc) |
1758 apply (rotate_tac 3) |
1750 apply (rotate_tac 3) |
1759 apply (drule_tac x = "xa + pi/2" in spec, safe, simp_all) |
1751 apply (drule_tac x = "xa + pi/2" in spec, safe, simp_all add: cos_add) |
1760 done |
1752 done |
1761 |
1753 |
1762 lemma reals_Archimedean4: |
1754 lemma reals_Archimedean4: |
1763 "[| 0 < y; 0 \<le> x |] ==> \<exists>n. real n * y \<le> x & x < real (Suc n) * y" |
1755 "[| 0 < y; 0 \<le> x |] ==> \<exists>n. real n * y \<le> x & x < real (Suc n) * y" |
1764 apply (auto dest!: reals_Archimedean3) |
1756 apply (auto dest!: reals_Archimedean3) |
1795 \<exists>n::nat. even n & x = real n * (pi/2)" |
1787 \<exists>n::nat. even n & x = real n * (pi/2)" |
1796 apply (subgoal_tac "\<exists>n::nat. ~ even n & x + pi/2 = real n * (pi/2) ") |
1788 apply (subgoal_tac "\<exists>n::nat. ~ even n & x + pi/2 = real n * (pi/2) ") |
1797 apply (clarify, rule_tac x = "n - 1" in exI) |
1789 apply (clarify, rule_tac x = "n - 1" in exI) |
1798 apply (force simp add: odd_Suc_mult_two_ex real_of_nat_Suc left_distrib) |
1790 apply (force simp add: odd_Suc_mult_two_ex real_of_nat_Suc left_distrib) |
1799 apply (rule cos_zero_lemma) |
1791 apply (rule cos_zero_lemma) |
1800 apply (simp_all add: add_increasing) |
1792 apply (simp_all add: cos_add) |
1801 done |
1793 done |
1802 |
1794 |
1803 |
1795 |
1804 lemma cos_zero_iff: |
1796 lemma cos_zero_iff: |
1805 "(cos x = 0) = |
1797 "(cos x = 0) = |
1947 apply (drule_tac x = "inverse y" in spec, safe, force) |
1939 apply (drule_tac x = "inverse y" in spec, safe, force) |
1948 apply (drule_tac ?d1.0 = s in pi_half_gt_zero [THEN [2] real_lbound_gt_zero], safe) |
1940 apply (drule_tac ?d1.0 = s in pi_half_gt_zero [THEN [2] real_lbound_gt_zero], safe) |
1949 apply (rule_tac x = "(pi/2) - e" in exI) |
1941 apply (rule_tac x = "(pi/2) - e" in exI) |
1950 apply (simp (no_asm_simp)) |
1942 apply (simp (no_asm_simp)) |
1951 apply (drule_tac x = "(pi/2) - e" in spec) |
1943 apply (drule_tac x = "(pi/2) - e" in spec) |
1952 apply (auto simp add: tan_def) |
1944 apply (auto simp add: tan_def sin_diff cos_diff) |
1953 apply (rule inverse_less_iff_less [THEN iffD1]) |
1945 apply (rule inverse_less_iff_less [THEN iffD1]) |
1954 apply (auto simp add: divide_inverse) |
1946 apply (auto simp add: divide_inverse) |
1955 apply (rule mult_pos_pos) |
1947 apply (rule mult_pos_pos) |
1956 apply (subgoal_tac [3] "0 < sin e & 0 < cos e") |
1948 apply (subgoal_tac [3] "0 < sin e & 0 < cos e") |
1957 apply (auto intro: cos_gt_zero sin_gt_zero2 simp add: mult_commute) |
1949 apply (auto intro: cos_gt_zero sin_gt_zero2 simp add: mult_commute) |
2378 using pos_c [THEN order_less_imp_le] |
2370 using pos_c [THEN order_less_imp_le] |
2379 by (rule power2_eq_imp_eq) simp |
2371 by (rule power2_eq_imp_eq) simp |
2380 qed |
2372 qed |
2381 |
2373 |
2382 lemma sin_45: "sin (pi / 4) = sqrt 2 / 2" |
2374 lemma sin_45: "sin (pi / 4) = sqrt 2 / 2" |
2383 proof - |
2375 by (simp add: sin_cos_eq cos_45) |
2384 have "sin (pi / 4) = cos (pi / 2 - pi / 4)" by (rule sin_cos_eq) |
|
2385 also have "pi / 2 - pi / 4 = pi / 4" by simp |
|
2386 also have "cos (pi / 4) = sqrt 2 / 2" by (rule cos_45) |
|
2387 finally show ?thesis . |
|
2388 qed |
|
2389 |
2376 |
2390 lemma sin_60: "sin (pi / 3) = sqrt 3 / 2" |
2377 lemma sin_60: "sin (pi / 3) = sqrt 3 / 2" |
2391 proof - |
2378 by (simp add: sin_cos_eq cos_30) |
2392 have "sin (pi / 3) = cos (pi / 2 - pi / 3)" by (rule sin_cos_eq) |
|
2393 also have "pi / 2 - pi / 3 = pi / 6" by simp |
|
2394 also have "cos (pi / 6) = sqrt 3 / 2" by (rule cos_30) |
|
2395 finally show ?thesis . |
|
2396 qed |
|
2397 |
2379 |
2398 lemma cos_60: "cos (pi / 3) = 1 / 2" |
2380 lemma cos_60: "cos (pi / 3) = 1 / 2" |
2399 apply (rule power2_eq_imp_eq) |
2381 apply (rule power2_eq_imp_eq) |
2400 apply (simp add: cos_squared_eq sin_60 power_divide) |
2382 apply (simp add: cos_squared_eq sin_60 power_divide) |
2401 apply (rule cos_ge_zero, rule order_trans [where y=0], simp_all) |
2383 apply (rule cos_ge_zero, rule order_trans [where y=0], simp_all) |
2402 done |
2384 done |
2403 |
2385 |
2404 lemma sin_30: "sin (pi / 6) = 1 / 2" |
2386 lemma sin_30: "sin (pi / 6) = 1 / 2" |
2405 proof - |
2387 by (simp add: sin_cos_eq cos_60) |
2406 have "sin (pi / 6) = cos (pi / 2 - pi / 6)" by (rule sin_cos_eq) |
|
2407 also have "pi / 2 - pi / 6 = pi / 3" by simp |
|
2408 also have "cos (pi / 3) = 1 / 2" by (rule cos_60) |
|
2409 finally show ?thesis . |
|
2410 qed |
|
2411 |
2388 |
2412 lemma tan_30: "tan (pi / 6) = 1 / sqrt 3" |
2389 lemma tan_30: "tan (pi / 6) = 1 / sqrt 3" |
2413 unfolding tan_def by (simp add: sin_30 cos_30) |
2390 unfolding tan_def by (simp add: sin_30 cos_30) |
2414 |
2391 |
2415 lemma tan_45: "tan (pi / 4) = 1" |
2392 lemma tan_45: "tan (pi / 4) = 1" |