422 apply (subgoal_tac "\<bar>z ^ n\<bar> * inverse (\<bar>x\<bar> ^ n) = (\<bar>z\<bar> * inverse (\<bar>x\<bar>)) ^ n") |
422 apply (subgoal_tac "\<bar>z ^ n\<bar> * inverse (\<bar>x\<bar> ^ n) = (\<bar>z\<bar> * inverse (\<bar>x\<bar>)) ^ n") |
423 apply (auto simp add: power_abs [symmetric]) |
423 apply (auto simp add: power_abs [symmetric]) |
424 apply (subgoal_tac "x \<noteq> 0") |
424 apply (subgoal_tac "x \<noteq> 0") |
425 apply (subgoal_tac [3] "x \<noteq> 0") |
425 apply (subgoal_tac [3] "x \<noteq> 0") |
426 apply (auto simp del: abs_inverse abs_mult simp add: abs_inverse [symmetric] realpow_not_zero abs_mult [symmetric] power_inverse power_mult_distrib [symmetric]) |
426 apply (auto simp del: abs_inverse abs_mult simp add: abs_inverse [symmetric] realpow_not_zero abs_mult [symmetric] power_inverse power_mult_distrib [symmetric]) |
427 apply (auto intro!: geometric_sums simp add: power_abs inverse_eq_divide) |
427 apply (auto intro!: geometric_sums |
428 apply (rule_tac c="\<bar>x\<bar>" in mult_right_less_imp_less) |
428 simp add: power_abs inverse_eq_divide times_divide_eq) |
429 apply (auto simp add: abs_mult [symmetric] mult_assoc) |
|
430 done |
429 done |
431 |
430 |
432 lemma powser_inside: |
431 lemma powser_inside: |
433 "[| summable (%n. f(n) * (x ^ n)); \<bar>z\<bar> < \<bar>x\<bar> |] |
432 "[| summable (%n. f(n) * (x ^ n)); \<bar>z\<bar> < \<bar>x\<bar> |] |
434 ==> summable (%n. f(n) * (z ^ n))" |
433 ==> summable (%n. f(n) * (z ^ n))" |
910 have "1 < exp (y + - x)" |
909 have "1 < exp (y + - x)" |
911 by (rule real_less_sum_gt_zero [THEN exp_gt_one]) |
910 by (rule real_less_sum_gt_zero [THEN exp_gt_one]) |
912 hence "exp x * inverse (exp x) < exp y * inverse (exp x)" |
911 hence "exp x * inverse (exp x) < exp y * inverse (exp x)" |
913 by (auto simp add: exp_add exp_minus) |
912 by (auto simp add: exp_add exp_minus) |
914 thus ?thesis |
913 thus ?thesis |
915 by (simp add: divide_inverse [symmetric] pos_less_divide_eq |
914 by (simp add: divide_inverse [symmetric] pos_less_divide_eq times_divide_eq |
916 del: divide_self_if) |
915 del: divide_self_if) |
917 qed |
916 qed |
918 |
917 |
919 lemma exp_less_cancel: "exp x < exp y ==> x < y" |
918 lemma exp_less_cancel: "exp x < exp y ==> x < y" |
920 apply (simp add: linorder_not_le [symmetric]) |
919 apply (simp add: linorder_not_le [symmetric]) |
1006 apply (rule order_less_le_trans) |
1005 apply (rule order_less_le_trans) |
1007 apply (rule_tac [2] ln_add_one_self_le_self) |
1006 apply (rule_tac [2] ln_add_one_self_le_self) |
1008 apply (rule ln_less_cancel_iff [THEN iffD2], auto) |
1007 apply (rule ln_less_cancel_iff [THEN iffD2], auto) |
1009 done |
1008 done |
1010 |
1009 |
1011 lemma ln_ge_zero: |
1010 lemma ln_ge_zero [simp]: |
1012 assumes x: "1 \<le> x" shows "0 \<le> ln x" |
1011 assumes x: "1 \<le> x" shows "0 \<le> ln x" |
1013 proof - |
1012 proof - |
1014 have "0 < x" using x by arith |
1013 have "0 < x" using x by arith |
1015 hence "exp 0 \<le> exp (ln x)" |
1014 hence "exp 0 \<le> exp (ln x)" |
1016 by (simp add: x exp_ln_iff [symmetric] del: exp_ln_iff) |
1015 by (simp add: x exp_ln_iff [symmetric] del: exp_ln_iff) |
1027 qed |
1026 qed |
1028 |
1027 |
1029 lemma ln_ge_zero_iff [simp]: "0 < x ==> (0 \<le> ln x) = (1 \<le> x)" |
1028 lemma ln_ge_zero_iff [simp]: "0 < x ==> (0 \<le> ln x) = (1 \<le> x)" |
1030 by (blast intro: ln_ge_zero ln_ge_zero_imp_ge_one) |
1029 by (blast intro: ln_ge_zero ln_ge_zero_imp_ge_one) |
1031 |
1030 |
|
1031 lemma ln_less_zero_iff [simp]: "0 < x ==> (ln x < 0) = (x < 1)" |
|
1032 by (insert ln_ge_zero_iff [of x], arith) |
|
1033 |
1032 lemma ln_gt_zero: |
1034 lemma ln_gt_zero: |
1033 assumes x: "1 < x" shows "0 < ln x" |
1035 assumes x: "1 < x" shows "0 < ln x" |
1034 proof - |
1036 proof - |
1035 have "0 < x" using x by arith |
1037 have "0 < x" using x by arith |
1036 hence "exp 0 < exp (ln x)" |
1038 hence "exp 0 < exp (ln x)" |
1048 qed |
1050 qed |
1049 |
1051 |
1050 lemma ln_gt_zero_iff [simp]: "0 < x ==> (0 < ln x) = (1 < x)" |
1052 lemma ln_gt_zero_iff [simp]: "0 < x ==> (0 < ln x) = (1 < x)" |
1051 by (blast intro: ln_gt_zero ln_gt_zero_imp_gt_one) |
1053 by (blast intro: ln_gt_zero ln_gt_zero_imp_gt_one) |
1052 |
1054 |
1053 lemma ln_not_eq_zero [simp]: "[| 0 < x; x \<noteq> 1 |] ==> ln x \<noteq> 0" |
1055 lemma ln_eq_zero_iff [simp]: "0 < x ==> (ln x = 0) = (x = 1)" |
1054 apply safe |
1056 by (insert ln_less_zero_iff [of x] ln_gt_zero_iff [of x], arith) |
1055 apply (drule exp_inj_iff [THEN iffD2]) |
|
1056 apply (drule exp_ln_iff [THEN iffD2], auto) |
|
1057 done |
|
1058 |
1057 |
1059 lemma ln_less_zero: "[| 0 < x; x < 1 |] ==> ln x < 0" |
1058 lemma ln_less_zero: "[| 0 < x; x < 1 |] ==> ln x < 0" |
1060 apply (rule exp_less_cancel_iff [THEN iffD1]) |
1059 by simp |
1061 apply (auto simp add: exp_ln_iff [symmetric] simp del: exp_ln_iff) |
|
1062 done |
|
1063 |
1060 |
1064 lemma exp_ln_eq: "exp u = x ==> ln x = u" |
1061 lemma exp_ln_eq: "exp u = x ==> ln x = u" |
1065 by auto |
1062 by auto |
1066 |
1063 |
1067 |
1064 |
1362 apply (rule_tac n1 = 0 in series_pos_less [THEN [2] order_le_less_trans]) |
1359 apply (rule_tac n1 = 0 in series_pos_less [THEN [2] order_le_less_trans]) |
1363 apply (auto simp del: fact_Suc realpow_Suc) |
1360 apply (auto simp del: fact_Suc realpow_Suc) |
1364 apply (erule sums_summable) |
1361 apply (erule sums_summable) |
1365 apply (case_tac "m=0") |
1362 apply (case_tac "m=0") |
1366 apply (simp (no_asm_simp)) |
1363 apply (simp (no_asm_simp)) |
1367 apply (subgoal_tac "6 * (x * (x * x) / real (Suc (Suc (Suc (Suc (Suc (Suc 0))))))) < 6 * x") |
1364 apply (subgoal_tac "6 * (x * (x * x) / real (Suc (Suc (Suc (Suc (Suc (Suc 0))))))) < 6 * x") |
1368 apply (simp only: mult_less_cancel_left, simp) |
1365 apply (simp only: mult_less_cancel_left, simp add: times_divide_eq) |
1369 apply (simp (no_asm_simp) add: numeral_2_eq_2 [symmetric] mult_assoc [symmetric]) |
1366 apply (simp (no_asm_simp) add: times_divide_eq |
|
1367 numeral_2_eq_2 [symmetric] mult_assoc [symmetric]) |
1370 apply (subgoal_tac "x*x < 2*3", simp) |
1368 apply (subgoal_tac "x*x < 2*3", simp) |
1371 apply (rule mult_strict_mono) |
1369 apply (rule mult_strict_mono) |
1372 apply (auto simp add: real_0_less_add_iff real_of_nat_Suc simp del: fact_Suc) |
1370 apply (auto simp add: real_0_less_add_iff real_of_nat_Suc simp del: fact_Suc) |
1373 apply (subst fact_Suc) |
1371 apply (subst fact_Suc) |
1374 apply (subst fact_Suc) |
1372 apply (subst fact_Suc) |
1423 |
1421 |
1424 lemma cos_two_less_zero: "cos (2) < 0" |
1422 lemma cos_two_less_zero: "cos (2) < 0" |
1425 apply (cut_tac x = 2 in cos_paired) |
1423 apply (cut_tac x = 2 in cos_paired) |
1426 apply (drule sums_minus) |
1424 apply (drule sums_minus) |
1427 apply (rule neg_less_iff_less [THEN iffD1]) |
1425 apply (rule neg_less_iff_less [THEN iffD1]) |
1428 apply (frule sums_unique, auto) |
1426 apply (frule sums_unique, auto simp add: times_divide_eq) |
1429 apply (rule_tac y = "sumr 0 (Suc (Suc (Suc 0))) (%n. - ((- 1) ^ n / (real (fact (2 * n))) * 2 ^ (2 * n)))" in order_less_trans) |
1427 apply (rule_tac y = "sumr 0 (Suc (Suc (Suc 0))) (%n. - ((- 1) ^ n / (real (fact (2 * n))) * 2 ^ (2 * n)))" in order_less_trans) |
1430 apply (simp (no_asm) add: fact_num_eq_if realpow_num_eq_if del: fact_Suc realpow_Suc) |
1428 apply (simp (no_asm) add: fact_num_eq_if realpow_num_eq_if del: fact_Suc realpow_Suc) |
1431 apply (simp (no_asm) add: mult_assoc del: sumr_Suc) |
1429 apply (simp (no_asm) add: mult_assoc times_divide_eq del: sumr_Suc) |
1432 apply (rule sumr_pos_lt_pair) |
1430 apply (rule sumr_pos_lt_pair) |
1433 apply (erule sums_summable, safe) |
1431 apply (erule sums_summable, safe) |
1434 apply (simp (no_asm) add: divide_inverse real_0_less_add_iff mult_assoc [symmetric] |
1432 apply (simp (no_asm) add: divide_inverse real_0_less_add_iff mult_assoc [symmetric] |
1435 del: fact_Suc) |
1433 del: fact_Suc) |
1436 apply (rule real_mult_inverse_cancel2) |
1434 apply (rule real_mult_inverse_cancel2) |
1520 apply (cut_tac sin_gt_zero [OF pi_half_gt_zero pi_half_less_two]) |
1518 apply (cut_tac sin_gt_zero [OF pi_half_gt_zero pi_half_less_two]) |
1521 apply (auto simp add: numeral_2_eq_2) |
1519 apply (auto simp add: numeral_2_eq_2) |
1522 done |
1520 done |
1523 |
1521 |
1524 lemma cos_pi [simp]: "cos pi = -1" |
1522 lemma cos_pi [simp]: "cos pi = -1" |
1525 by (cut_tac x = "pi/2" and y = "pi/2" in cos_add, simp) |
1523 by (cut_tac x = "pi/2" and y = "pi/2" in cos_add, simp add: times_divide_eq) |
1526 |
1524 |
1527 lemma sin_pi [simp]: "sin pi = 0" |
1525 lemma sin_pi [simp]: "sin pi = 0" |
1528 by (cut_tac x = "pi/2" and y = "pi/2" in sin_add, simp) |
1526 by (cut_tac x = "pi/2" and y = "pi/2" in sin_add, simp add: times_divide_eq) |
1529 |
1527 |
1530 lemma sin_cos_eq: "sin x = cos (pi/2 - x)" |
1528 lemma sin_cos_eq: "sin x = cos (pi/2 - x)" |
1531 by (simp add: diff_minus cos_add) |
1529 by (simp add: diff_minus cos_add) |
1532 |
1530 |
1533 lemma minus_sin_cos_eq: "-sin x = cos (x + pi/2)" |
1531 lemma minus_sin_cos_eq: "-sin x = cos (x + pi/2)" |
1701 apply (cut_tac linorder_linear [of 0 x], safe) |
1699 apply (cut_tac linorder_linear [of 0 x], safe) |
1702 apply (drule cos_zero_lemma, assumption+) |
1700 apply (drule cos_zero_lemma, assumption+) |
1703 apply (cut_tac x="-x" in cos_zero_lemma, simp, simp) |
1701 apply (cut_tac x="-x" in cos_zero_lemma, simp, simp) |
1704 apply (force simp add: minus_equation_iff [of x]) |
1702 apply (force simp add: minus_equation_iff [of x]) |
1705 apply (auto simp only: odd_Suc_mult_two_ex real_of_nat_Suc left_distrib) |
1703 apply (auto simp only: odd_Suc_mult_two_ex real_of_nat_Suc left_distrib) |
1706 apply (auto simp add: cos_add) |
1704 apply (auto simp add: cos_add times_divide_eq) |
1707 done |
1705 done |
1708 |
1706 |
1709 (* ditto: but to a lesser extent *) |
1707 (* ditto: but to a lesser extent *) |
1710 lemma sin_zero_iff: |
1708 lemma sin_zero_iff: |
1711 "(sin x = 0) = |
1709 "(sin x = 0) = |
1714 apply (rule iffI) |
1712 apply (rule iffI) |
1715 apply (cut_tac linorder_linear [of 0 x], safe) |
1713 apply (cut_tac linorder_linear [of 0 x], safe) |
1716 apply (drule sin_zero_lemma, assumption+) |
1714 apply (drule sin_zero_lemma, assumption+) |
1717 apply (cut_tac x="-x" in sin_zero_lemma, simp, simp, safe) |
1715 apply (cut_tac x="-x" in sin_zero_lemma, simp, simp, safe) |
1718 apply (force simp add: minus_equation_iff [of x]) |
1716 apply (force simp add: minus_equation_iff [of x]) |
1719 apply (auto simp add: even_mult_two_ex) |
1717 apply (auto simp add: even_mult_two_ex times_divide_eq) |
1720 done |
1718 done |
1721 |
1719 |
1722 |
1720 |
1723 subsection{*Tangent*} |
1721 subsection{*Tangent*} |
1724 |
1722 |
1744 apply (auto simp del: inverse_mult_distrib |
1742 apply (auto simp del: inverse_mult_distrib |
1745 simp add: inverse_mult_distrib [symmetric] mult_ac) |
1743 simp add: inverse_mult_distrib [symmetric] mult_ac) |
1746 apply (rule_tac c1 = "cos x * cos y" in real_mult_right_cancel [THEN subst]) |
1744 apply (rule_tac c1 = "cos x * cos y" in real_mult_right_cancel [THEN subst]) |
1747 apply (auto simp del: inverse_mult_distrib |
1745 apply (auto simp del: inverse_mult_distrib |
1748 simp add: mult_assoc left_diff_distrib cos_add) |
1746 simp add: mult_assoc left_diff_distrib cos_add) |
1749 done |
1747 done |
1750 |
1748 |
1751 lemma add_tan_eq: |
1749 lemma add_tan_eq: |
1752 "[| cos x \<noteq> 0; cos y \<noteq> 0 |] |
1750 "[| cos x \<noteq> 0; cos y \<noteq> 0 |] |
1753 ==> tan x + tan y = sin(x + y)/(cos x * cos y)" |
1751 ==> tan x + tan y = sin(x + y)/(cos x * cos y)" |
1754 apply (simp add: tan_def) |
1752 apply (simp add: tan_def) |
1755 apply (rule_tac c1 = "cos x * cos y" in real_mult_right_cancel [THEN subst]) |
1753 apply (rule_tac c1 = "cos x * cos y" in real_mult_right_cancel [THEN subst]) |
1756 apply (auto simp add: mult_assoc left_distrib) |
1754 apply (auto simp add: mult_assoc left_distrib) |
1757 apply (simp (no_asm) add: sin_add) |
1755 apply (simp add: sin_add times_divide_eq) |
1758 done |
1756 done |
1759 |
1757 |
1760 lemma tan_add: |
1758 lemma tan_add: |
1761 "[| cos x \<noteq> 0; cos y \<noteq> 0; cos (x + y) \<noteq> 0 |] |
1759 "[| cos x \<noteq> 0; cos y \<noteq> 0; cos (x + y) \<noteq> 0 |] |
1762 ==> tan(x + y) = (tan(x) + tan(y))/(1 - tan(x) * tan(y))" |
1760 ==> tan(x + y) = (tan(x) + tan(y))/(1 - tan(x) * tan(y))" |
2063 |
2061 |
2064 lemma isCont_exp [simp]: "isCont exp x" |
2062 lemma isCont_exp [simp]: "isCont exp x" |
2065 by (rule DERIV_exp [THEN DERIV_isCont]) |
2063 by (rule DERIV_exp [THEN DERIV_isCont]) |
2066 |
2064 |
2067 lemma sin_zero_abs_cos_one: "sin x = 0 ==> \<bar>cos x\<bar> = 1" |
2065 lemma sin_zero_abs_cos_one: "sin x = 0 ==> \<bar>cos x\<bar> = 1" |
2068 by (auto simp add: sin_zero_iff even_mult_two_ex) |
2066 by (auto simp add: sin_zero_iff even_mult_two_ex times_divide_eq) |
2069 |
2067 |
2070 lemma exp_eq_one_iff [simp]: "(exp x = 1) = (x = 0)" |
2068 lemma exp_eq_one_iff [simp]: "(exp x = 1) = (x = 0)" |
2071 apply auto |
2069 apply auto |
2072 apply (drule_tac f = ln in arg_cong, auto) |
2070 apply (drule_tac f = ln in arg_cong, auto) |
2073 done |
2071 done |
2128 |
2126 |
2129 lemma real_root_mult: |
2127 lemma real_root_mult: |
2130 "[| 0 \<le> x; 0 \<le> y |] |
2128 "[| 0 \<le> x; 0 \<le> y |] |
2131 ==> root(Suc n) (x * y) = root(Suc n) x * root(Suc n) y" |
2129 ==> root(Suc n) (x * y) = root(Suc n) x * root(Suc n) y" |
2132 apply (rule real_root_pos_unique) |
2130 apply (rule real_root_pos_unique) |
2133 apply (auto intro!: real_root_pos_pos_le simp add: power_mult_distrib zero_le_mult_iff real_root_pow_pos2 simp del: realpow_Suc) |
2131 apply (auto intro!: real_root_pos_pos_le |
|
2132 simp add: power_mult_distrib zero_le_mult_iff real_root_pow_pos2 |
|
2133 simp del: realpow_Suc) |
2134 done |
2134 done |
2135 |
2135 |
2136 lemma real_root_inverse: |
2136 lemma real_root_inverse: |
2137 "0 \<le> x ==> (root(Suc n) (inverse x) = inverse(root(Suc n) x))" |
2137 "0 \<le> x ==> (root(Suc n) (inverse x) = inverse(root(Suc n) x))" |
2138 apply (rule real_root_pos_unique) |
2138 apply (rule real_root_pos_unique) |
2139 apply (auto intro: real_root_pos_pos_le simp add: power_inverse [symmetric] real_root_pow_pos2 simp del: realpow_Suc) |
2139 apply (auto intro: real_root_pos_pos_le |
|
2140 simp add: power_inverse [symmetric] real_root_pow_pos2 |
|
2141 simp del: realpow_Suc) |
2140 done |
2142 done |
2141 |
2143 |
2142 lemma real_root_divide: |
2144 lemma real_root_divide: |
2143 "[| 0 \<le> x; 0 \<le> y |] |
2145 "[| 0 \<le> x; 0 \<le> y |] |
2144 ==> (root(Suc n) (x / y) = root(Suc n) x / root(Suc n) y)" |
2146 ==> (root(Suc n) (x / y) = root(Suc n) x / root(Suc n) y)" |
2447 |
2449 |
2448 lemma real_sqrt_two_gt_one [simp]: "1 < sqrt 2" |
2450 lemma real_sqrt_two_gt_one [simp]: "1 < sqrt 2" |
2449 apply (rule order_less_le_trans [of _ "7/5"], simp) |
2451 apply (rule order_less_le_trans [of _ "7/5"], simp) |
2450 apply (rule_tac n = 1 in realpow_increasing) |
2452 apply (rule_tac n = 1 in realpow_increasing) |
2451 prefer 3 apply (simp add: numeral_2_eq_2 [symmetric] del: realpow_Suc) |
2453 prefer 3 apply (simp add: numeral_2_eq_2 [symmetric] del: realpow_Suc) |
2452 apply (simp_all add: numeral_2_eq_2) |
2454 apply (simp_all add: numeral_2_eq_2 times_divide_eq) |
2453 done |
2455 done |
2454 |
2456 |
2455 lemma lemma_real_divide_sqrt_less: "0 < u ==> u / sqrt 2 < u" |
2457 lemma lemma_real_divide_sqrt_less: "0 < u ==> u / sqrt 2 < u" |
2456 by (rule_tac z1 = "inverse u" in real_mult_less_iff1 [THEN iffD1], auto) |
2458 by (simp add: divide_less_eq mult_compare_simps) |
2457 |
2459 |
2458 lemma four_x_squared: |
2460 lemma four_x_squared: |
2459 fixes x::real |
2461 fixes x::real |
2460 shows "4 * x\<twosuperior> = (2 * x)\<twosuperior>" |
2462 shows "4 * x\<twosuperior> = (2 * x)\<twosuperior>" |
2461 by (simp add: power2_eq_square) |
2463 by (simp add: power2_eq_square) |
2688 val ln_realpow = thm "ln_realpow"; |
2690 val ln_realpow = thm "ln_realpow"; |
2689 val ln_add_one_self_le_self = thm "ln_add_one_self_le_self"; |
2691 val ln_add_one_self_le_self = thm "ln_add_one_self_le_self"; |
2690 val ln_less_self = thm "ln_less_self"; |
2692 val ln_less_self = thm "ln_less_self"; |
2691 val ln_ge_zero = thm "ln_ge_zero"; |
2693 val ln_ge_zero = thm "ln_ge_zero"; |
2692 val ln_gt_zero = thm "ln_gt_zero"; |
2694 val ln_gt_zero = thm "ln_gt_zero"; |
2693 val ln_not_eq_zero = thm "ln_not_eq_zero"; |
|
2694 val ln_less_zero = thm "ln_less_zero"; |
2695 val ln_less_zero = thm "ln_less_zero"; |
2695 val exp_ln_eq = thm "exp_ln_eq"; |
2696 val exp_ln_eq = thm "exp_ln_eq"; |
2696 val sin_zero = thm "sin_zero"; |
2697 val sin_zero = thm "sin_zero"; |
2697 val cos_zero = thm "cos_zero"; |
2698 val cos_zero = thm "cos_zero"; |
2698 val DERIV_sin_sin_mult = thm "DERIV_sin_sin_mult"; |
2699 val DERIV_sin_sin_mult = thm "DERIV_sin_sin_mult"; |