src/HOL/Hyperreal/Transcendental.ML
changeset 12486 0ed8bdd883e0
parent 12481 ea5d6da573c5
child 13097 c9c7f23d0ceb
equal deleted inserted replaced
12485:3df60299a6d0 12486:0ed8bdd883e0
   209 Addsimps [real_sqrt_sum_squares_mult_squared_eq];
   209 Addsimps [real_sqrt_sum_squares_mult_squared_eq];
   210 
   210 
   211 Goal "sqrt(x ^ 2) = abs(x)";
   211 Goal "sqrt(x ^ 2) = abs(x)";
   212 by (rtac (abs_realpow_two RS subst) 1);
   212 by (rtac (abs_realpow_two RS subst) 1);
   213 by (rtac (real_sqrt_abs_abs RS subst) 1);
   213 by (rtac (real_sqrt_abs_abs RS subst) 1);
   214 by (rtac (real_pow_sqrt_eq_sqrt_pow RS ssubst) 1);
   214 by (stac real_pow_sqrt_eq_sqrt_pow 1);
   215 by (auto_tac (claset(),simpset() addsimps [numeral_2_eq_2, abs_mult,abs_ge_zero]));
   215 by (auto_tac (claset(),simpset() addsimps [numeral_2_eq_2, abs_mult,abs_ge_zero]));
   216 qed "real_sqrt_abs";
   216 qed "real_sqrt_abs";
   217 Addsimps [real_sqrt_abs];
   217 Addsimps [real_sqrt_abs];
   218 
   218 
   219 Goal "sqrt(x*x) = abs(x)";
   219 Goal "sqrt(x*x) = abs(x)";
   226 Goal "0 < x ==> 0 < sqrt(x) ^ 2";
   226 Goal "0 < x ==> 0 < sqrt(x) ^ 2";
   227 by (asm_full_simp_tac (simpset() addsimps [real_sqrt_gt_zero_pow2]) 1); 
   227 by (asm_full_simp_tac (simpset() addsimps [real_sqrt_gt_zero_pow2]) 1); 
   228 qed "real_sqrt_pow2_gt_zero";
   228 qed "real_sqrt_pow2_gt_zero";
   229 
   229 
   230 Goal "0 < x ==> sqrt x ~= 0";
   230 Goal "0 < x ==> sqrt x ~= 0";
   231 by (forward_tac [real_sqrt_pow2_gt_zero] 1);
   231 by (ftac real_sqrt_pow2_gt_zero 1);
   232 by (auto_tac (claset(),simpset() addsimps [numeral_2_eq_2, real_less_not_refl]));
   232 by (auto_tac (claset(),simpset() addsimps [numeral_2_eq_2, real_less_not_refl]));
   233 qed "real_sqrt_not_eq_zero";
   233 qed "real_sqrt_not_eq_zero";
   234 
   234 
   235 Goal "0 < x ==> inverse (sqrt(x)) ^ 2 = inverse x";
   235 Goal "0 < x ==> inverse (sqrt(x)) ^ 2 = inverse x";
   236 by (forward_tac [real_sqrt_not_eq_zero] 1);
   236 by (ftac real_sqrt_not_eq_zero 1);
   237 by (cut_inst_tac [("n1","2"),("r1","sqrt x")] (realpow_inverse RS sym) 1);
   237 by (cut_inst_tac [("n1","2"),("r1","sqrt x")] (realpow_inverse RS sym) 1);
   238 by (auto_tac (claset() addDs [real_sqrt_gt_zero_pow2],simpset()));
   238 by (auto_tac (claset() addDs [real_sqrt_gt_zero_pow2],simpset()));
   239 qed "real_inv_sqrt_pow2";
   239 qed "real_inv_sqrt_pow2";
   240 
   240 
   241 Goal "[| 0 <= x; sqrt(x) = 0|] ==> x = 0";
   241 Goal "[| 0 <= x; sqrt(x) = 0|] ==> x = 0";
   284 by (res_inst_tac [("N","n"),("c","r")] ratio_test 1);
   284 by (res_inst_tac [("N","n"),("c","r")] ratio_test 1);
   285 by (auto_tac (claset(),simpset() addsimps [abs_mult,real_mult_assoc RS sym]
   285 by (auto_tac (claset(),simpset() addsimps [abs_mult,real_mult_assoc RS sym]
   286     delsimps [fact_Suc]));
   286     delsimps [fact_Suc]));
   287 by (rtac real_mult_le_le_mono2 1);
   287 by (rtac real_mult_le_le_mono2 1);
   288 by (res_inst_tac [("w1","abs x")] (real_mult_commute RS ssubst) 2);
   288 by (res_inst_tac [("w1","abs x")] (real_mult_commute RS ssubst) 2);
   289 by (rtac (fact_Suc RS ssubst) 2);
   289 by (stac fact_Suc 2);
   290 by (rtac (real_of_nat_mult RS ssubst) 2);
   290 by (stac real_of_nat_mult 2);
   291 by (auto_tac (claset(),simpset() addsimps [abs_mult,real_inverse_distrib,
   291 by (auto_tac (claset(),simpset() addsimps [abs_mult,real_inverse_distrib,
   292     abs_ge_zero]));
   292     abs_ge_zero]));
   293 by (auto_tac (claset(), simpset() addsimps 
   293 by (auto_tac (claset(), simpset() addsimps 
   294      [real_mult_assoc RS sym, abs_ge_zero, abs_eqI2,
   294      [real_mult_assoc RS sym, abs_ge_zero, abs_eqI2,
   295       real_inverse_gt_0]));
   295       real_inverse_gt_0]));
   400 Goal "sumr 0 (Suc n) (%p. (x ^ p) * y ^ ((Suc n) - p)) = \
   400 Goal "sumr 0 (Suc n) (%p. (x ^ p) * y ^ ((Suc n) - p)) = \
   401 \     y * sumr 0 (Suc n) (%p. (x ^ p) * (y ^ (n - p)))";
   401 \     y * sumr 0 (Suc n) (%p. (x ^ p) * (y ^ (n - p)))";
   402 by (auto_tac (claset(),simpset() addsimps [sumr_mult] delsimps [sumr_Suc]));
   402 by (auto_tac (claset(),simpset() addsimps [sumr_mult] delsimps [sumr_Suc]));
   403 by (rtac sumr_subst 1);
   403 by (rtac sumr_subst 1);
   404 by (strip_tac 1);
   404 by (strip_tac 1);
   405 by (rtac (lemma_realpow_diff RS ssubst) 1);
   405 by (stac lemma_realpow_diff 1);
   406 by (auto_tac (claset(),simpset() addsimps real_mult_ac));
   406 by (auto_tac (claset(),simpset() addsimps real_mult_ac));
   407 qed "lemma_realpow_diff_sumr";
   407 qed "lemma_realpow_diff_sumr";
   408 
   408 
   409 Goal "x ^ (Suc n) - y ^ (Suc n) = \
   409 Goal "x ^ (Suc n) - y ^ (Suc n) = \
   410 \     (x - y) * sumr 0 (Suc n) (%p. (x ^ p) * (y ^(n - p)))";
   410 \     (x - y) * sumr 0 (Suc n) (%p. (x ^ p) * (y ^(n - p)))";
   411 by (induct_tac "n" 1);
   411 by (induct_tac "n" 1);
   412 by (auto_tac (claset(),simpset() delsimps [sumr_Suc]));
   412 by (auto_tac (claset(),simpset() delsimps [sumr_Suc]));
   413 by (rtac (sumr_Suc RS ssubst) 1);
   413 by (stac sumr_Suc 1);
   414 by (dtac sym 1);
   414 by (dtac sym 1);
   415 by (auto_tac (claset(),simpset() addsimps [lemma_realpow_diff_sumr,
   415 by (auto_tac (claset(),simpset() addsimps [lemma_realpow_diff_sumr,
   416     real_add_mult_distrib2,real_diff_def] @ 
   416     real_add_mult_distrib2,real_diff_def] @ 
   417     real_mult_ac delsimps [sumr_Suc]));
   417     real_mult_ac delsimps [sumr_Suc]));
   418 qed "lemma_realpow_diff_sumr2";
   418 qed "lemma_realpow_diff_sumr2";
   422 by (case_tac "x = y" 1);
   422 by (case_tac "x = y" 1);
   423 by (auto_tac (claset(),simpset() addsimps [real_mult_commute,
   423 by (auto_tac (claset(),simpset() addsimps [real_mult_commute,
   424     realpow_add RS sym] delsimps [sumr_Suc]));
   424     realpow_add RS sym] delsimps [sumr_Suc]));
   425 by (res_inst_tac [("c1","x - y")] (real_mult_left_cancel RS iffD1) 1);
   425 by (res_inst_tac [("c1","x - y")] (real_mult_left_cancel RS iffD1) 1);
   426 by (rtac (real_minus_minus RS subst) 2);
   426 by (rtac (real_minus_minus RS subst) 2);
   427 by (rtac (real_minus_mult_eq1 RS ssubst) 2);
   427 by (stac real_minus_mult_eq1 2);
   428 by (auto_tac (claset(),simpset() addsimps [lemma_realpow_diff_sumr2 
   428 by (auto_tac (claset(),simpset() addsimps [lemma_realpow_diff_sumr2 
   429     RS sym] delsimps [sumr_Suc]));
   429     RS sym] delsimps [sumr_Suc]));
   430 qed "lemma_realpow_rev_sumr";
   430 qed "lemma_realpow_rev_sumr";
   431 
   431 
   432 (* ------------------------------------------------------------------------ *)
   432 (* ------------------------------------------------------------------------ *)
   579 qed "lemma_termdiff2";
   579 qed "lemma_termdiff2";
   580 
   580 
   581 Goal "[| h ~= 0; abs z <= K; abs (z + h) <= K |] \
   581 Goal "[| h ~= 0; abs z <= K; abs (z + h) <= K |] \
   582 \     ==> abs (((z + h) ^ n - z ^ n) * inverse h - real n * z ^ (n - Suc 0)) \
   582 \     ==> abs (((z + h) ^ n - z ^ n) * inverse h - real n * z ^ (n - Suc 0)) \
   583 \         <= real n * real (n - Suc 0) * K ^ (n - 2) * abs h";
   583 \         <= real n * real (n - Suc 0) * K ^ (n - 2) * abs h";
   584 by (rtac (lemma_termdiff2 RS ssubst) 1);
   584 by (stac lemma_termdiff2 1);
   585 by (asm_full_simp_tac (simpset() addsimps [abs_mult,real_mult_commute]) 2);
   585 by (asm_full_simp_tac (simpset() addsimps [abs_mult,real_mult_commute]) 2);
   586 by (stac real_mult_commute 2); 
   586 by (stac real_mult_commute 2); 
   587 by (rtac (sumr_rabs RS real_le_trans) 2);
   587 by (rtac (sumr_rabs RS real_le_trans) 2);
   588 by (asm_full_simp_tac (simpset() addsimps [real_mult_assoc RS sym]) 2);
   588 by (asm_full_simp_tac (simpset() addsimps [real_mult_assoc RS sym]) 2);
   589 by (rtac (real_mult_commute RS subst) 2);
   589 by (rtac (real_mult_commute RS subst) 2);
   810 (* ------------------------------------------------------------------------ *)
   810 (* ------------------------------------------------------------------------ *)
   811 
   811 
   812 Goalw [diffs_def]  
   812 Goalw [diffs_def]  
   813       "diffs (%n. inverse(real (fact n))) = (%n. inverse(real (fact n)))";
   813       "diffs (%n. inverse(real (fact n))) = (%n. inverse(real (fact n)))";
   814 by (rtac ext 1);
   814 by (rtac ext 1);
   815 by (rtac (fact_Suc RS ssubst) 1);
   815 by (stac fact_Suc 1);
   816 by (rtac (real_of_nat_mult RS ssubst) 1);
   816 by (stac real_of_nat_mult 1);
   817 by (rtac (real_inverse_distrib RS ssubst) 1);
   817 by (stac real_inverse_distrib 1);
   818 by (auto_tac (claset(),simpset() addsimps [real_mult_assoc RS sym]));
   818 by (auto_tac (claset(),simpset() addsimps [real_mult_assoc RS sym]));
   819 qed "exp_fdiffs";
   819 qed "exp_fdiffs";
   820 
   820 
   821 Goalw [diffs_def,real_divide_def]
   821 Goalw [diffs_def,real_divide_def]
   822       "diffs(%n. if even n then 0 \
   822       "diffs(%n. if even n then 0 \
   823 \          else (- 1) ^ ((n - Suc 0) div 2)/(real (fact n))) \
   823 \          else (- 1) ^ ((n - Suc 0) div 2)/(real (fact n))) \
   824 \      = (%n. if even n then \
   824 \      = (%n. if even n then \
   825 \                (- 1) ^ (n div 2)/(real (fact n)) \
   825 \                (- 1) ^ (n div 2)/(real (fact n)) \
   826 \             else 0)";
   826 \             else 0)";
   827 by (rtac ext 1);
   827 by (rtac ext 1);
   828 by (rtac (fact_Suc RS ssubst) 1);
   828 by (stac fact_Suc 1);
   829 by (rtac (real_of_nat_mult RS ssubst) 1);
   829 by (stac real_of_nat_mult 1);
   830 by (rtac (even_Suc RS ssubst) 1);
   830 by (stac even_Suc 1);
   831 by (rtac (real_inverse_distrib RS ssubst) 1);
   831 by (stac real_inverse_distrib 1);
   832 by Auto_tac;
   832 by Auto_tac;
   833 qed "sin_fdiffs";
   833 qed "sin_fdiffs";
   834 
   834 
   835 Goalw  [diffs_def,real_divide_def]
   835 Goalw  [diffs_def,real_divide_def]
   836        "diffs(%n. if even n then 0 \
   836        "diffs(%n. if even n then 0 \
   837 \          else (- 1) ^ ((n - Suc 0) div 2)/(real (fact n))) n \
   837 \          else (- 1) ^ ((n - Suc 0) div 2)/(real (fact n))) n \
   838 \      = (if even n then \
   838 \      = (if even n then \
   839 \                (- 1) ^ (n div 2)/(real (fact n)) \
   839 \                (- 1) ^ (n div 2)/(real (fact n)) \
   840 \             else 0)";
   840 \             else 0)";
   841 by (rtac (fact_Suc RS ssubst) 1);
   841 by (stac fact_Suc 1);
   842 by (rtac (real_of_nat_mult RS ssubst) 1);
   842 by (stac real_of_nat_mult 1);
   843 by (rtac (even_Suc RS ssubst) 1);
   843 by (stac even_Suc 1);
   844 by (rtac (real_inverse_distrib RS ssubst) 1);
   844 by (stac real_inverse_distrib 1);
   845 by Auto_tac;
   845 by Auto_tac;
   846 qed "sin_fdiffs2";
   846 qed "sin_fdiffs2";
   847 
   847 
   848 (* thms in EvenOdd needed *)
   848 (* thms in EvenOdd needed *)
   849 Goalw [diffs_def,real_divide_def]
   849 Goalw [diffs_def,real_divide_def]
   850       "diffs(%n. if even n then \
   850       "diffs(%n. if even n then \
   851 \                (- 1) ^ (n div 2)/(real (fact n)) else 0) \
   851 \                (- 1) ^ (n div 2)/(real (fact n)) else 0) \
   852 \      = (%n. - (if even n then 0 \
   852 \      = (%n. - (if even n then 0 \
   853 \          else (- 1) ^ ((n - Suc 0)div 2)/(real (fact n))))";
   853 \          else (- 1) ^ ((n - Suc 0)div 2)/(real (fact n))))";
   854 by (rtac ext 1);
   854 by (rtac ext 1);
   855 by (rtac (fact_Suc RS ssubst) 1);
   855 by (stac fact_Suc 1);
   856 by (rtac (real_of_nat_mult RS ssubst) 1);
   856 by (stac real_of_nat_mult 1);
   857 by (rtac (even_Suc RS ssubst) 1);
   857 by (stac even_Suc 1);
   858 by (rtac (real_inverse_distrib RS ssubst) 1);
   858 by (stac real_inverse_distrib 1);
   859 by (res_inst_tac [("z1","real (Suc n)")] (real_mult_commute RS ssubst) 1);
   859 by (res_inst_tac [("z1","real (Suc n)")] (real_mult_commute RS ssubst) 1);
   860 by (res_inst_tac [("z1","inverse(real (Suc n))")] 
   860 by (res_inst_tac [("z1","inverse(real (Suc n))")] 
   861      (real_mult_commute RS ssubst) 1);
   861      (real_mult_commute RS ssubst) 1);
   862 by (auto_tac (claset(),simpset() addsimps [real_mult_assoc,
   862 by (auto_tac (claset(),simpset() addsimps [real_mult_assoc,
   863     odd_not_even RS sym,odd_Suc_mult_two_ex]));
   863     odd_not_even RS sym,odd_Suc_mult_two_ex]));
   867 Goalw [diffs_def,real_divide_def]
   867 Goalw [diffs_def,real_divide_def]
   868       "diffs(%n. if even n then \
   868       "diffs(%n. if even n then \
   869 \                (- 1) ^ (n div 2)/(real (fact n)) else 0) n\
   869 \                (- 1) ^ (n div 2)/(real (fact n)) else 0) n\
   870 \      = - (if even n then 0 \
   870 \      = - (if even n then 0 \
   871 \          else (- 1) ^ ((n - Suc 0)div 2)/(real (fact n)))";
   871 \          else (- 1) ^ ((n - Suc 0)div 2)/(real (fact n)))";
   872 by (rtac (fact_Suc RS ssubst) 1);
   872 by (stac fact_Suc 1);
   873 by (rtac (real_of_nat_mult RS ssubst) 1);
   873 by (stac real_of_nat_mult 1);
   874 by (rtac (even_Suc RS ssubst) 1);
   874 by (stac even_Suc 1);
   875 by (rtac (real_inverse_distrib RS ssubst) 1);
   875 by (stac real_inverse_distrib 1);
   876 by (res_inst_tac [("z1","real (Suc n)")] (real_mult_commute RS ssubst) 1);
   876 by (res_inst_tac [("z1","real (Suc n)")] (real_mult_commute RS ssubst) 1);
   877 by (res_inst_tac [("z1","inverse (real (Suc n))")] 
   877 by (res_inst_tac [("z1","inverse (real (Suc n))")] 
   878      (real_mult_commute RS ssubst) 1);
   878      (real_mult_commute RS ssubst) 1);
   879 by (auto_tac (claset(),simpset() addsimps [real_mult_assoc,
   879 by (auto_tac (claset(),simpset() addsimps [real_mult_assoc,
   880     odd_not_even RS sym,odd_Suc_mult_two_ex]));
   880     odd_not_even RS sym,odd_Suc_mult_two_ex]));
   893 Goal "exp = (%x. suminf (%n. inverse (real (fact n)) * x ^ n))";
   893 Goal "exp = (%x. suminf (%n. inverse (real (fact n)) * x ^ n))";
   894 by (auto_tac (claset() addSIs [ext],simpset() addsimps [exp_def]));
   894 by (auto_tac (claset() addSIs [ext],simpset() addsimps [exp_def]));
   895 val lemma_exp_ext = result();
   895 val lemma_exp_ext = result();
   896 
   896 
   897 Goalw [exp_def] "DERIV exp x :> exp(x)";
   897 Goalw [exp_def] "DERIV exp x :> exp(x)";
   898 by (rtac (lemma_exp_ext RS ssubst) 1);
   898 by (stac lemma_exp_ext 1);
   899 by (subgoal_tac "DERIV (%u. suminf (%n. inverse (real (fact n)) * u ^ n)) x \
   899 by (subgoal_tac "DERIV (%u. suminf (%n. inverse (real (fact n)) * u ^ n)) x \
   900 \    :> suminf (%n. diffs (%n. inverse (real (fact n))) n * x ^ n)" 1);
   900 \    :> suminf (%n. diffs (%n. inverse (real (fact n))) n * x ^ n)" 1);
   901 by (res_inst_tac [("K","1 + abs(x)")] termdiffs 2);
   901 by (res_inst_tac [("K","1 + abs(x)")] termdiffs 2);
   902 by (auto_tac (claset() addIs [exp_converges RS sums_summable],
   902 by (auto_tac (claset() addIs [exp_converges RS sums_summable],
   903     simpset() addsimps [exp_fdiffs]));
   903     simpset() addsimps [exp_fdiffs]));
   916 \          else 0) * x ^ n))";
   916 \          else 0) * x ^ n))";
   917 by (auto_tac (claset() addSIs [ext],simpset() addsimps [cos_def]));
   917 by (auto_tac (claset() addSIs [ext],simpset() addsimps [cos_def]));
   918 val lemma_cos_ext = result();
   918 val lemma_cos_ext = result();
   919 
   919 
   920 Goalw [cos_def] "DERIV sin x :> cos(x)";
   920 Goalw [cos_def] "DERIV sin x :> cos(x)";
   921 by (rtac (lemma_sin_ext RS ssubst) 1);
   921 by (stac lemma_sin_ext 1);
   922 by (auto_tac (claset(),simpset() addsimps [sin_fdiffs2 RS sym]));
   922 by (auto_tac (claset(),simpset() addsimps [sin_fdiffs2 RS sym]));
   923 by (res_inst_tac [("K","1 + abs(x)")] termdiffs 1);
   923 by (res_inst_tac [("K","1 + abs(x)")] termdiffs 1);
   924 by (auto_tac (claset() addIs [sin_converges, cos_converges, sums_summable] 
   924 by (auto_tac (claset() addIs [sin_converges, cos_converges, sums_summable] 
   925     addSIs [sums_minus RS sums_summable],
   925     addSIs [sums_minus RS sums_summable],
   926     simpset() addsimps [cos_fdiffs,sin_fdiffs]));
   926     simpset() addsimps [cos_fdiffs,sin_fdiffs]));
   927 by (arith_tac 1);
   927 by (arith_tac 1);
   928 qed "DERIV_sin";
   928 qed "DERIV_sin";
   929 Addsimps [DERIV_sin];
   929 Addsimps [DERIV_sin];
   930 
   930 
   931 Goal "DERIV cos x :> -sin(x)";
   931 Goal "DERIV cos x :> -sin(x)";
   932 by (rtac (lemma_cos_ext RS ssubst) 1);
   932 by (stac lemma_cos_ext 1);
   933 by (auto_tac (claset(),simpset() addsimps [lemma_sin_minus,
   933 by (auto_tac (claset(),simpset() addsimps [lemma_sin_minus,
   934     cos_fdiffs2 RS sym,real_minus_mult_eq1]));
   934     cos_fdiffs2 RS sym,real_minus_mult_eq1]));
   935 by (res_inst_tac [("K","1 + abs(x)")] termdiffs 1);
   935 by (res_inst_tac [("K","1 + abs(x)")] termdiffs 1);
   936 by (auto_tac (claset() addIs [sin_converges,cos_converges, sums_summable] 
   936 by (auto_tac (claset() addIs [sin_converges,cos_converges, sums_summable] 
   937     addSIs [sums_minus RS sums_summable],
   937     addSIs [sums_minus RS sums_summable],
   986 Goal "DERIV (%x. exp (-x)) x :> - exp(-x)";
   986 Goal "DERIV (%x. exp (-x)) x :> - exp(-x)";
   987 by (auto_tac (claset(),simpset() addsimps
   987 by (auto_tac (claset(),simpset() addsimps
   988     [CLAIM_SIMP "(%x. exp(-x)) = exp o (%x. - x)" [ext]]));
   988     [CLAIM_SIMP "(%x. exp(-x)) = exp o (%x. - x)" [ext]]));
   989 by (rtac (real_mult_1_right RS subst) 1);
   989 by (rtac (real_mult_1_right RS subst) 1);
   990 by (rtac (real_minus_mult_eq1 RS subst) 1);
   990 by (rtac (real_minus_mult_eq1 RS subst) 1);
   991 by (rtac (real_minus_mult_eq2 RS ssubst) 1);
   991 by (stac real_minus_mult_eq2 1);
   992 by (rtac DERIV_chain 1);
   992 by (rtac DERIV_chain 1);
   993 by (rtac DERIV_minus 2);
   993 by (rtac DERIV_minus 2);
   994 by Auto_tac;
   994 by Auto_tac;
   995 qed "DERIV_exp_minus";
   995 qed "DERIV_exp_minus";
   996 Addsimps [DERIV_exp_minus];
   996 Addsimps [DERIV_exp_minus];
  1032     addsimps real_mult_ac) 1);
  1032     addsimps real_mult_ac) 1);
  1033 qed "exp_add";
  1033 qed "exp_add";
  1034 
  1034 
  1035 Goal "0 <= exp x";
  1035 Goal "0 <= exp x";
  1036 by (res_inst_tac [("t","x")] (real_sum_of_halves RS subst) 1);
  1036 by (res_inst_tac [("t","x")] (real_sum_of_halves RS subst) 1);
  1037 by (rtac (exp_add RS ssubst) 1 THEN Auto_tac);
  1037 by (stac exp_add 1 THEN Auto_tac);
  1038 qed "exp_ge_zero";
  1038 qed "exp_ge_zero";
  1039 Addsimps [exp_ge_zero];
  1039 Addsimps [exp_ge_zero];
  1040 
  1040 
  1041 Goal "exp x ~= 0";
  1041 Goal "exp x ~= 0";
  1042 by (cut_inst_tac [("x","x")] exp_mult_minus2 1);
  1042 by (cut_inst_tac [("x","x")] exp_mult_minus2 1);
  1335 by (auto_tac (claset(), simpset() addsimps [numeral_2_eq_2])); 
  1335 by (auto_tac (claset(), simpset() addsimps [numeral_2_eq_2])); 
  1336 qed "sin_cos_squared_add";
  1336 qed "sin_cos_squared_add";
  1337 Addsimps [sin_cos_squared_add];
  1337 Addsimps [sin_cos_squared_add];
  1338 
  1338 
  1339 Goal "(cos(x) ^ 2) + (sin(x) ^ 2) = 1";
  1339 Goal "(cos(x) ^ 2) + (sin(x) ^ 2) = 1";
  1340 by (rtac (real_add_commute RS ssubst) 1);
  1340 by (stac real_add_commute 1);
  1341 by (simp_tac (simpset() delsimps [realpow_Suc]) 1);
  1341 by (simp_tac (simpset() delsimps [realpow_Suc]) 1);
  1342 qed "sin_cos_squared_add2";
  1342 qed "sin_cos_squared_add2";
  1343 Addsimps [sin_cos_squared_add2];
  1343 Addsimps [sin_cos_squared_add2];
  1344 
  1344 
  1345 Goal "cos x * cos x + sin x * sin x = 1";
  1345 Goal "cos x * cos x + sin x * sin x = 1";
  1584     (CLAIM "[|(0::real)<z; z*x<z*y |] ==> x<y") 1);
  1584     (CLAIM "[|(0::real)<z; z*x<z*y |] ==> x<y") 1);
  1585 by (asm_simp_tac (simpset() addsimps [numeral_2_eq_2 RS sym, real_mult_assoc RS sym]) 2);
  1585 by (asm_simp_tac (simpset() addsimps [numeral_2_eq_2 RS sym, real_mult_assoc RS sym]) 2);
  1586 by (stac (CLAIM "6 = 2 * (3::real)") 2);
  1586 by (stac (CLAIM "6 = 2 * (3::real)") 2);
  1587 by (rtac real_mult_less_mono 2);  
  1587 by (rtac real_mult_less_mono 2);  
  1588 by (auto_tac (claset(),simpset() addsimps [real_of_nat_Suc] delsimps [fact_Suc]));
  1588 by (auto_tac (claset(),simpset() addsimps [real_of_nat_Suc] delsimps [fact_Suc]));
  1589 by (rtac (fact_Suc RS ssubst) 1);
  1589 by (stac fact_Suc 1);
  1590 by (rtac (fact_Suc RS ssubst) 1);
  1590 by (stac fact_Suc 1);
  1591 by (rtac (fact_Suc RS ssubst) 1);
  1591 by (stac fact_Suc 1);
  1592 by (rtac (fact_Suc RS ssubst) 1);
  1592 by (stac fact_Suc 1);
  1593 by (rtac (real_of_nat_mult RS ssubst) 1);
  1593 by (stac real_of_nat_mult 1);
  1594 by (rtac (real_of_nat_mult RS ssubst) 1);
  1594 by (stac real_of_nat_mult 1);
  1595 by (rtac (real_of_nat_mult RS ssubst) 1);
  1595 by (stac real_of_nat_mult 1);
  1596 by (rtac (real_of_nat_mult RS ssubst) 1);
  1596 by (stac real_of_nat_mult 1);
  1597 by (simp_tac (simpset() addsimps [real_divide_def,
  1597 by (simp_tac (simpset() addsimps [real_divide_def,
  1598     real_inverse_distrib] delsimps [fact_Suc]) 1);
  1598     real_inverse_distrib] delsimps [fact_Suc]) 1);
  1599 by (auto_tac (claset(),simpset() addsimps [real_mult_assoc RS sym] 
  1599 by (auto_tac (claset(),simpset() addsimps [real_mult_assoc RS sym] 
  1600     delsimps [fact_Suc]));
  1600     delsimps [fact_Suc]));
  1601 by (multr_by_tac "real (Suc (Suc (4*m)))" 1);
  1601 by (multr_by_tac "real (Suc (Suc (4*m)))" 1);
  1657 by (rtac real_mult_inverse_cancel2 1);
  1657 by (rtac real_mult_inverse_cancel2 1);
  1658 by (TRYALL(rtac (real_of_nat_fact_gt_zero)));
  1658 by (TRYALL(rtac (real_of_nat_fact_gt_zero)));
  1659 by (simp_tac (simpset() addsimps [real_mult_assoc RS sym] 
  1659 by (simp_tac (simpset() addsimps [real_mult_assoc RS sym] 
  1660     delsimps [fact_Suc]) 1);
  1660     delsimps [fact_Suc]) 1);
  1661 by (rtac ((CLAIM "real(n::nat) * 4 = real(4 * n)") RS ssubst) 1);
  1661 by (rtac ((CLAIM "real(n::nat) * 4 = real(4 * n)") RS ssubst) 1);
  1662 by (rtac (fact_Suc RS ssubst) 1);
  1662 by (stac fact_Suc 1);
  1663 by (rtac (real_of_nat_mult RS ssubst) 1);
  1663 by (stac real_of_nat_mult 1);
  1664 by (rtac (real_of_nat_mult RS ssubst) 1);
  1664 by (stac real_of_nat_mult 1);
  1665 by (rtac real_mult_less_mono 1);
  1665 by (rtac real_mult_less_mono 1);
  1666 by (Force_tac 1);
  1666 by (Force_tac 1);
  1667 by (Force_tac 2);
  1667 by (Force_tac 2);
  1668 by (rtac real_of_nat_fact_gt_zero 2);
  1668 by (rtac real_of_nat_fact_gt_zero 2);
  1669 by (rtac (real_of_nat_less_iff RS iffD2) 1);
  1669 by (rtac (real_of_nat_less_iff RS iffD2) 1);
  1882     cos_gt_zero_pi]));
  1882     cos_gt_zero_pi]));
  1883 by Auto_tac;
  1883 by Auto_tac;
  1884 qed "cos_ge_zero";
  1884 qed "cos_ge_zero";
  1885 
  1885 
  1886 Goal "[| 0 < x; x < pi  |] ==> 0 < sin x";
  1886 Goal "[| 0 < x; x < pi  |] ==> 0 < sin x";
  1887 by (rtac (sin_cos_eq RS ssubst) 1);
  1887 by (stac sin_cos_eq 1);
  1888 by (rotate_tac 1 1);
  1888 by (rotate_tac 1 1);
  1889 by (dtac (real_sum_of_halves RS ssubst) 1);
  1889 by (dtac (real_sum_of_halves RS ssubst) 1);
  1890 by (auto_tac (claset() addSIs [cos_gt_zero_pi],
  1890 by (auto_tac (claset() addSIs [cos_gt_zero_pi],
  1891     simpset() delsimps [sin_cos_eq RS sym]));
  1891     simpset() delsimps [sin_cos_eq RS sym]));
  1892 qed "sin_gt_zero_pi";
  1892 qed "sin_gt_zero_pi";
  2423 qed "cos_2npi";
  2423 qed "cos_2npi";
  2424 Addsimps [cos_2npi];
  2424 Addsimps [cos_2npi];
  2425 
  2425 
  2426 Goal "cos (3 / 2 * pi) = 0";
  2426 Goal "cos (3 / 2 * pi) = 0";
  2427 by (rtac (CLAIM "(1::real) + 1/2 = 3/2" RS subst) 1);
  2427 by (rtac (CLAIM "(1::real) + 1/2 = 3/2" RS subst) 1);
  2428 by (rtac (real_add_mult_distrib RS ssubst) 1);
  2428 by (stac real_add_mult_distrib 1);
  2429 by (auto_tac (claset(),simpset() addsimps [cos_add] @ real_mult_ac));
  2429 by (auto_tac (claset(),simpset() addsimps [cos_add] @ real_mult_ac));
  2430 qed "cos_3over2_pi";
  2430 qed "cos_3over2_pi";
  2431 Addsimps [cos_3over2_pi];
  2431 Addsimps [cos_3over2_pi];
  2432 
  2432 
  2433 Goal "sin (2 * real (n::nat) * pi) = 0";
  2433 Goal "sin (2 * real (n::nat) * pi) = 0";
  2435 qed "sin_2npi";
  2435 qed "sin_2npi";
  2436 Addsimps [sin_2npi];
  2436 Addsimps [sin_2npi];
  2437 
  2437 
  2438 Goal "sin (3 / 2 * pi) = - 1";
  2438 Goal "sin (3 / 2 * pi) = - 1";
  2439 by (rtac (CLAIM "(1::real) + 1/2 = 3/2" RS subst) 1);
  2439 by (rtac (CLAIM "(1::real) + 1/2 = 3/2" RS subst) 1);
  2440 by (rtac (real_add_mult_distrib RS ssubst) 1);
  2440 by (stac real_add_mult_distrib 1);
  2441 by (auto_tac (claset(),simpset() addsimps [sin_add] @real_mult_ac));
  2441 by (auto_tac (claset(),simpset() addsimps [sin_add] @real_mult_ac));
  2442 qed "sin_3over2_pi";
  2442 qed "sin_3over2_pi";
  2443 Addsimps [sin_3over2_pi];
  2443 Addsimps [sin_3over2_pi];
  2444 
  2444 
  2445 Goal "cos(xa + 1 / 2 * real (Suc m) * pi) = \
  2445 Goal "cos(xa + 1 / 2 * real (Suc m) * pi) = \