src/HOL/Analysis/ex/Approximations.thy
changeset 70114 089c17514794
parent 70113 c8deb8ba6d05
child 70817 dd675800469d
equal deleted inserted replaced
70113:c8deb8ba6d05 70114:089c17514794
   197 qed
   197 qed
   198 
   198 
   199 lemma euler_approx_aux_Suc:
   199 lemma euler_approx_aux_Suc:
   200   "euler_approx_aux (Suc m) = 1 + Suc m * euler_approx_aux m"
   200   "euler_approx_aux (Suc m) = 1 + Suc m * euler_approx_aux m"
   201   unfolding euler_approx_aux_def
   201   unfolding euler_approx_aux_def
   202   by (subst sum_distrib_left) (simp add: atLeastAtMostSuc_conv)
   202   by (subst sum_distrib_left) (simp add: atLeastAtMostSuc_conv mult.commute)
   203 
   203 
   204 lemma eval_euler_approx_aux:
   204 lemma eval_euler_approx_aux:
   205   "euler_approx_aux 0 = 1"
   205   "euler_approx_aux 0 = 1"
   206   "euler_approx_aux 1 = 2"
   206   "euler_approx_aux 1 = 2"
   207   "euler_approx_aux (Suc 0) = 2"
   207   "euler_approx_aux (Suc 0) = 2"
   208   "euler_approx_aux (numeral n) = 1 + numeral n * euler_approx_aux (pred_numeral n)" (is "?th")
   208   "euler_approx_aux (numeral n) = 1 + numeral n * euler_approx_aux (pred_numeral n)" (is "?th")
   209 proof -
   209 proof -
   210   have A: "euler_approx_aux (Suc m) = 1 + Suc m * euler_approx_aux m" for m :: nat
   210   have A: "euler_approx_aux (Suc m) = 1 + Suc m * euler_approx_aux m" for m :: nat
   211     unfolding euler_approx_aux_def
   211     unfolding euler_approx_aux_def
   212     by (subst sum_distrib_left) (simp add: atLeastAtMostSuc_conv)
   212     by (subst sum_distrib_left) (simp add: atLeastAtMostSuc_conv mult.commute)
   213   show ?th by (subst numeral_eq_Suc, subst A, subst numeral_eq_Suc [symmetric]) simp
   213   show ?th by (subst numeral_eq_Suc, subst A, subst numeral_eq_Suc [symmetric]) simp
   214 qed (simp_all add: euler_approx_aux_def)
   214 qed (simp_all add: euler_approx_aux_def)
   215 
   215 
   216 lemma euler_approx_aux_code [code]:
   216 lemma euler_approx_aux_code [code]:
   217   "euler_approx_aux n = (if n = 0 then 1 else 1 + n * euler_approx_aux (n - 1))"
   217   "euler_approx_aux n = (if n = 0 then 1 else 1 + n * euler_approx_aux (n - 1))"