src/HOL/Transcendental.thy
changeset 45309 5885ec8eb6b0
parent 45308 2e84e5f0463b
child 45915 0e5a87b772f9
equal deleted inserted replaced
45308:2e84e5f0463b 45309:5885ec8eb6b0
  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"