src/HOL/Hyperreal/MacLaurin.ML
changeset 14334 6137d24eef79
parent 14269 502a7c95de73
child 14348 744c868ee0b7
equal deleted inserted replaced
14333:14f29eb097a3 14334:6137d24eef79
    99 by DERIV_tac;
    99 by DERIV_tac;
   100 by (rtac lemma_DERIV_subst 3);
   100 by (rtac lemma_DERIV_subst 3);
   101 by (rtac DERIV_quotient 3);
   101 by (rtac DERIV_quotient 3);
   102 by (rtac DERIV_const 4);
   102 by (rtac DERIV_const 4);
   103 by (rtac DERIV_pow 3);
   103 by (rtac DERIV_pow 3);
   104 by (asm_simp_tac (simpset() addsimps [real_inverse_distrib,
   104 by (asm_simp_tac (simpset() addsimps [inverse_mult_distrib,
   105     CLAIM_SIMP "(a::real) * b * c * (d * e) = a * b * (c * d) * e" 
   105     CLAIM_SIMP "(a::real) * b * c * (d * e) = a * b * (c * d) * e" 
   106     real_mult_ac,fact_diff_Suc]) 4);
   106     mult_ac,fact_diff_Suc]) 4);
   107 by (Asm_simp_tac 3);
   107 by (Asm_simp_tac 3);
   108 by (forw_inst_tac [("m","ma")] less_add_one 2);
   108 by (forw_inst_tac [("m","ma")] less_add_one 2);
   109 by (Clarify_tac 2);
   109 by (Clarify_tac 2);
   110 by (asm_simp_tac (simpset() addsimps 
   110 by (asm_simp_tac (simpset() addsimps 
   111     [CLAIM "Suc m = ma + d + 1 ==> m - ma = d"]
   111     [CLAIM "Suc m = ma + d + 1 ==> m - ma = d"]
   124 by (rtac DERIV_cmult 2);
   124 by (rtac DERIV_cmult 2);
   125 by (rtac lemma_DERIV_subst 2);
   125 by (rtac lemma_DERIV_subst 2);
   126 by DERIV_tac;
   126 by DERIV_tac;
   127 by (stac fact_Suc 2);
   127 by (stac fact_Suc 2);
   128 by (stac real_of_nat_mult 2);
   128 by (stac real_of_nat_mult 2);
   129 by (simp_tac (simpset() addsimps [real_inverse_distrib] @
   129 by (simp_tac (simpset() addsimps [inverse_mult_distrib] @
   130     real_mult_ac) 2);
   130     mult_ac) 2);
   131 by (subgoal_tac "ALL ma. ma < n --> \
   131 by (subgoal_tac "ALL ma. ma < n --> \
   132 \        (EX t. 0 < t & t < h & difg (Suc ma) t = 0)" 1);
   132 \        (EX t. 0 < t & t < h & difg (Suc ma) t = 0)" 1);
   133 by (rotate_tac 11 1);
   133 by (rotate_tac 11 1);
   134 by (dres_inst_tac [("x","m")] spec 1);
   134 by (dres_inst_tac [("x","m")] spec 1);
   135 by (etac impE 1);
   135 by (etac impE 1);
   265 by (cut_inst_tac [("f","%x. f (-x)"),
   265 by (cut_inst_tac [("f","%x. f (-x)"),
   266                  ("diff","%n x. ((- 1) ^ n) * diff n (-x)"),
   266                  ("diff","%n x. ((- 1) ^ n) * diff n (-x)"),
   267                  ("h","-h"),("n","n")] Maclaurin_objl 1);
   267                  ("h","-h"),("n","n")] Maclaurin_objl 1);
   268 by (Asm_full_simp_tac 1);
   268 by (Asm_full_simp_tac 1);
   269 by (etac impE 1 THEN Step_tac 1);
   269 by (etac impE 1 THEN Step_tac 1);
   270 by (stac real_minus_mult_eq2 1);
   270 by (stac minus_mult_right 1);
   271 by (rtac DERIV_cmult 1);
   271 by (rtac DERIV_cmult 1);
   272 by (rtac lemma_DERIV_subst 1);
   272 by (rtac lemma_DERIV_subst 1);
   273 by (rtac (read_instantiate [("g","uminus")] DERIV_chain2) 1);
   273 by (rtac (read_instantiate [("g","uminus")] DERIV_chain2) 1);
   274 by (rtac DERIV_minus 2 THEN rtac DERIV_Id 2);
   274 by (rtac DERIV_minus 2 THEN rtac DERIV_Id 2);
   275 by (Force_tac 2);
   275 by (Force_tac 2);
   444 Goal "d < (4::nat) ==> d = 0 | d = 1 | d = 2 | d = 3";
   444 Goal "d < (4::nat) ==> d = 0 | d = 1 | d = 2 | d = 3";
   445 by (case_tac "d" 1 THEN Auto_tac);
   445 by (case_tac "d" 1 THEN Auto_tac);
   446 qed "lemma_exhaust_less_4";
   446 qed "lemma_exhaust_less_4";
   447 
   447 
   448 bind_thm ("real_mult_le_lemma",
   448 bind_thm ("real_mult_le_lemma",
   449           simplify (simpset()) (inst "y" "1" real_mult_le_le_mono2));
   449           simplify (simpset()) (inst "b" "1" mult_right_mono));
   450 
   450 
   451 
   451 
   452 Goal "abs(sin x - \
   452 Goal "abs(sin x - \
   453 \          sumr 0 n (%m. (if even m then 0 \
   453 \          sumr 0 n (%m. (if even m then 0 \
   454 \                         else ((- 1) ^ ((m - (Suc 0)) div 2)) / real (fact m)) * \
   454 \                         else ((- 1) ^ ((m - (Suc 0)) div 2)) / real (fact m)) * \
   487 by (asm_simp_tac (simpset() addsimps [even_num_iff]) 2);
   487 by (asm_simp_tac (simpset() addsimps [even_num_iff]) 2);
   488 by (dtac lemma_even_mod_4_div_2 1);
   488 by (dtac lemma_even_mod_4_div_2 1);
   489 by (asm_full_simp_tac (simpset() addsimps [numeral_2_eq_2,real_divide_def]) 1);
   489 by (asm_full_simp_tac (simpset() addsimps [numeral_2_eq_2,real_divide_def]) 1);
   490 by (dtac lemma_odd_mod_4_div_2 1);
   490 by (dtac lemma_odd_mod_4_div_2 1);
   491 by (asm_full_simp_tac (simpset() addsimps [numeral_2_eq_2, real_divide_def]) 1);
   491 by (asm_full_simp_tac (simpset() addsimps [numeral_2_eq_2, real_divide_def]) 1);
   492 by (auto_tac (claset() addSIs [real_mult_le_lemma,real_mult_le_le_mono2],
   492 by (auto_tac (claset() addSIs [real_mult_le_lemma,mult_right_mono],
   493       simpset() addsimps [real_divide_def,abs_mult,abs_inverse,realpow_abs RS
   493       simpset() addsimps [real_divide_def,abs_mult,abs_inverse,realpow_abs RS
   494 sym]));
   494 sym]));
   495 qed "Maclaurin_sin_bound";
   495 qed "Maclaurin_sin_bound";
   496 
   496 
   497 Goal "0 < n --> Suc (Suc (2 * n - 2)) = 2*n";
   497 Goal "0 < n --> Suc (Suc (2 * n - 2)) = 2*n";
   658 by (arith_tac 1);
   658 by (arith_tac 1);
   659 by (rtac (CLAIM "[|x = y; x' = y'|] ==> x + x' = y + (y'::real)") 1);
   659 by (rtac (CLAIM "[|x = y; x' = y'|] ==> x + x' = y + (y'::real)") 1);
   660 by (rtac sumr_fun_eq 1);
   660 by (rtac sumr_fun_eq 1);
   661 by (auto_tac (claset(),simpset() addsimps [odd_not_even RS sym]));
   661 by (auto_tac (claset(),simpset() addsimps [odd_not_even RS sym]));
   662 by (auto_tac (claset(),simpset() addsimps [odd_Suc_mult_two_ex,
   662 by (auto_tac (claset(),simpset() addsimps [odd_Suc_mult_two_ex,
   663     even_mult_two_ex,real_add_mult_distrib,cos_add]  delsimps 
   663     even_mult_two_ex,left_distrib,cos_add]  delsimps 
   664     [fact_Suc,realpow_Suc]));
   664     [fact_Suc,realpow_Suc]));
   665 by (auto_tac (claset(),simpset() addsimps [real_mult_commute]));
   665 by (auto_tac (claset(),simpset() addsimps [real_mult_commute]));
   666 qed "Maclaurin_cos_expansion";
   666 qed "Maclaurin_cos_expansion";
   667 
   667 
   668 Goal "[| 0 < x; 0 < n |] ==> \
   668 Goal "[| 0 < x; 0 < n |] ==> \
   685 by (assume_tac 1 THEN assume_tac 1);
   685 by (assume_tac 1 THEN assume_tac 1);
   686 by (rtac (CLAIM "[|x = y; x' = y'|] ==> x + x' = y + (y'::real)") 1);
   686 by (rtac (CLAIM "[|x = y; x' = y'|] ==> x + x' = y + (y'::real)") 1);
   687 by (rtac sumr_fun_eq 1);
   687 by (rtac sumr_fun_eq 1);
   688 by (auto_tac (claset(),simpset() addsimps [odd_not_even RS sym]));
   688 by (auto_tac (claset(),simpset() addsimps [odd_not_even RS sym]));
   689 by (auto_tac (claset(),simpset() addsimps [odd_Suc_mult_two_ex,
   689 by (auto_tac (claset(),simpset() addsimps [odd_Suc_mult_two_ex,
   690     even_mult_two_ex,real_add_mult_distrib,cos_add]  delsimps 
   690     even_mult_two_ex,left_distrib,cos_add]  delsimps 
   691     [fact_Suc,realpow_Suc]));
   691     [fact_Suc,realpow_Suc]));
   692 by (auto_tac (claset(),simpset() addsimps [real_mult_commute]));
   692 by (auto_tac (claset(),simpset() addsimps [real_mult_commute]));
   693 qed "Maclaurin_cos_expansion2";
   693 qed "Maclaurin_cos_expansion2";
   694 
   694 
   695 Goal "[| x < 0; 0 < n |] ==> \
   695 Goal "[| x < 0; 0 < n |] ==> \
   712 by (assume_tac 1 THEN assume_tac 1);
   712 by (assume_tac 1 THEN assume_tac 1);
   713 by (rtac (CLAIM "[|x = y; x' = y'|] ==> x + x' = y + (y'::real)") 1);
   713 by (rtac (CLAIM "[|x = y; x' = y'|] ==> x + x' = y + (y'::real)") 1);
   714 by (rtac sumr_fun_eq 1);
   714 by (rtac sumr_fun_eq 1);
   715 by (auto_tac (claset(),simpset() addsimps [odd_not_even RS sym]));
   715 by (auto_tac (claset(),simpset() addsimps [odd_not_even RS sym]));
   716 by (auto_tac (claset(),simpset() addsimps [odd_Suc_mult_two_ex,
   716 by (auto_tac (claset(),simpset() addsimps [odd_Suc_mult_two_ex,
   717     even_mult_two_ex,real_add_mult_distrib,cos_add]  delsimps 
   717     even_mult_two_ex,left_distrib,cos_add]  delsimps 
   718     [fact_Suc,realpow_Suc]));
   718     [fact_Suc,realpow_Suc]));
   719 by (auto_tac (claset(),simpset() addsimps [real_mult_commute]));
   719 by (auto_tac (claset(),simpset() addsimps [real_mult_commute]));
   720 qed "Maclaurin_minus_cos_expansion";
   720 qed "Maclaurin_minus_cos_expansion";
   721 
   721 
   722 (* ------------------------------------------------------------------------- *)
   722 (* ------------------------------------------------------------------------- *)