src/HOL/Hyperreal/Transcendental.thy
changeset 15079 2ef899e4526d
parent 15077 89840837108e
child 15081 32402f5624d1
equal deleted inserted replaced
15078:8beb68a7afd9 15079:2ef899e4526d
   663 apply (rule_tac [2] powser_inside, rule_tac [4] powser_inside)
   663 apply (rule_tac [2] powser_inside, rule_tac [4] powser_inside)
   664 apply (auto simp add: add_commute)
   664 apply (auto simp add: add_commute)
   665 apply (drule_tac x="(\<lambda>n. c n * (xa + x) ^ n)" in sums_diff, assumption) 
   665 apply (drule_tac x="(\<lambda>n. c n * (xa + x) ^ n)" in sums_diff, assumption) 
   666 apply (drule_tac x = " (%n. c n * (xa + x) ^ n - c n * x ^ n) " and c = "inverse xa" in sums_mult)
   666 apply (drule_tac x = " (%n. c n * (xa + x) ^ n - c n * x ^ n) " and c = "inverse xa" in sums_mult)
   667 apply (rule sums_unique [symmetric])
   667 apply (rule sums_unique [symmetric])
   668 apply (simp add: diff_def real_divide_def add_ac mult_ac)
   668 apply (simp add: diff_def divide_inverse add_ac mult_ac)
   669 apply (rule LIM_zero_cancel)
   669 apply (rule LIM_zero_cancel)
   670 apply (rule_tac g = "%h. suminf (%n. c (n) * ((( ((x + h) ^ n) - (x ^ n)) * inverse h) - (real n * (x ^ (n - Suc 0))))) " in LIM_trans)
   670 apply (rule_tac g = "%h. suminf (%n. c (n) * ((( ((x + h) ^ n) - (x ^ n)) * inverse h) - (real n * (x ^ (n - Suc 0))))) " in LIM_trans)
   671  prefer 2 apply (blast intro: termdiffs_aux) 
   671  prefer 2 apply (blast intro: termdiffs_aux) 
   672 apply (simp add: LIM_def, safe)
   672 apply (simp add: LIM_def, safe)
   673 apply (rule_tac x = "\<bar>K\<bar> - \<bar>x\<bar>" in exI)
   673 apply (rule_tac x = "\<bar>K\<bar> - \<bar>x\<bar>" in exI)
  1375 apply (subst fact_Suc)
  1375 apply (subst fact_Suc)
  1376 apply (subst real_of_nat_mult)
  1376 apply (subst real_of_nat_mult)
  1377 apply (subst real_of_nat_mult)
  1377 apply (subst real_of_nat_mult)
  1378 apply (subst real_of_nat_mult)
  1378 apply (subst real_of_nat_mult)
  1379 apply (subst real_of_nat_mult)
  1379 apply (subst real_of_nat_mult)
  1380 apply (simp (no_asm) add: real_divide_def inverse_mult_distrib del: fact_Suc)
  1380 apply (simp (no_asm) add: divide_inverse inverse_mult_distrib del: fact_Suc)
  1381 apply (auto simp add: mult_assoc [symmetric] simp del: fact_Suc)
  1381 apply (auto simp add: mult_assoc [symmetric] simp del: fact_Suc)
  1382 apply (rule_tac c="real (Suc (Suc (4*m)))" in mult_less_imp_less_right) 
  1382 apply (rule_tac c="real (Suc (Suc (4*m)))" in mult_less_imp_less_right) 
  1383 apply (auto simp add: mult_assoc simp del: fact_Suc)
  1383 apply (auto simp add: mult_assoc simp del: fact_Suc)
  1384 apply (rule_tac c="real (Suc (Suc (Suc (4*m))))" in mult_less_imp_less_right) 
  1384 apply (rule_tac c="real (Suc (Suc (Suc (4*m))))" in mult_less_imp_less_right) 
  1385 apply (auto simp add: mult_assoc mult_less_cancel_left simp del: fact_Suc)
  1385 apply (auto simp add: mult_assoc mult_less_cancel_left simp del: fact_Suc)
  1428 apply (rule_tac y = "sumr 0 (Suc (Suc (Suc 0))) (%n. - ((- 1) ^ n / (real (fact (2 * n))) * 2 ^ (2 * n))) " in order_less_trans)
  1428 apply (rule_tac y = "sumr 0 (Suc (Suc (Suc 0))) (%n. - ((- 1) ^ n / (real (fact (2 * n))) * 2 ^ (2 * n))) " in order_less_trans)
  1429 apply (simp (no_asm) add: fact_num_eq_if realpow_num_eq_if del: fact_Suc realpow_Suc)
  1429 apply (simp (no_asm) add: fact_num_eq_if realpow_num_eq_if del: fact_Suc realpow_Suc)
  1430 apply (simp (no_asm) add: mult_assoc del: sumr_Suc)
  1430 apply (simp (no_asm) add: mult_assoc del: sumr_Suc)
  1431 apply (rule sumr_pos_lt_pair)
  1431 apply (rule sumr_pos_lt_pair)
  1432 apply (erule sums_summable, safe)
  1432 apply (erule sums_summable, safe)
  1433 apply (simp (no_asm) add: real_divide_def mult_assoc [symmetric] del: fact_Suc)
  1433 apply (simp (no_asm) add: divide_inverse mult_assoc [symmetric] del: fact_Suc)
  1434 apply (rule real_mult_inverse_cancel2)
  1434 apply (rule real_mult_inverse_cancel2)
  1435 apply (rule real_of_nat_fact_gt_zero)+
  1435 apply (rule real_of_nat_fact_gt_zero)+
  1436 apply (simp (no_asm) add: mult_assoc [symmetric] del: fact_Suc)
  1436 apply (simp (no_asm) add: mult_assoc [symmetric] del: fact_Suc)
  1437 apply (subst fact_lemma) 
  1437 apply (subst fact_lemma) 
  1438 apply (subst fact_Suc)
  1438 apply (subst fact_Suc)
  1786 
  1786 
  1787 lemma lemma_DERIV_tan:
  1787 lemma lemma_DERIV_tan:
  1788      "cos x \<noteq> 0 ==> DERIV (%x. sin(x)/cos(x)) x :> inverse((cos x)\<twosuperior>)"
  1788      "cos x \<noteq> 0 ==> DERIV (%x. sin(x)/cos(x)) x :> inverse((cos x)\<twosuperior>)"
  1789 apply (rule lemma_DERIV_subst)
  1789 apply (rule lemma_DERIV_subst)
  1790 apply (best intro!: DERIV_intros intro: DERIV_chain2) 
  1790 apply (best intro!: DERIV_intros intro: DERIV_chain2) 
  1791 apply (auto simp add: real_divide_def numeral_2_eq_2)
  1791 apply (auto simp add: divide_inverse numeral_2_eq_2)
  1792 done
  1792 done
  1793 
  1793 
  1794 lemma DERIV_tan [simp]: "cos x \<noteq> 0 ==> DERIV tan x :> inverse((cos x)\<twosuperior>)"
  1794 lemma DERIV_tan [simp]: "cos x \<noteq> 0 ==> DERIV tan x :> inverse((cos x)\<twosuperior>)"
  1795 by (auto dest: lemma_DERIV_tan simp add: tan_def [symmetric])
  1795 by (auto dest: lemma_DERIV_tan simp add: tan_def [symmetric])
  1796 
  1796 
  1814 apply (rule_tac x = " (pi/2) - e" in exI)
  1814 apply (rule_tac x = " (pi/2) - e" in exI)
  1815 apply (simp (no_asm_simp))
  1815 apply (simp (no_asm_simp))
  1816 apply (drule_tac x = " (pi/2) - e" in spec)
  1816 apply (drule_tac x = " (pi/2) - e" in spec)
  1817 apply (auto simp add: abs_eqI2 tan_def)
  1817 apply (auto simp add: abs_eqI2 tan_def)
  1818 apply (rule inverse_less_iff_less [THEN iffD1])
  1818 apply (rule inverse_less_iff_less [THEN iffD1])
  1819 apply (auto simp add: real_divide_def)
  1819 apply (auto simp add: divide_inverse)
  1820 apply (rule real_mult_order)
  1820 apply (rule real_mult_order)
  1821 apply (subgoal_tac [3] "0 < sin e")
  1821 apply (subgoal_tac [3] "0 < sin e")
  1822 apply (subgoal_tac [3] "0 < cos e")
  1822 apply (subgoal_tac [3] "0 < cos e")
  1823 apply (auto intro: cos_gt_zero sin_gt_zero2 simp add: inverse_mult_distrib abs_mult)
  1823 apply (auto intro: cos_gt_zero sin_gt_zero2 simp add: inverse_mult_distrib abs_mult)
  1824 apply (drule_tac a = "cos e" in positive_imp_inverse_positive)
  1824 apply (drule_tac a = "cos e" in positive_imp_inverse_positive)
  1997 apply (simp only: cos_add sin_add real_of_nat_Suc left_distrib right_distrib, auto)
  1997 apply (simp only: cos_add sin_add real_of_nat_Suc left_distrib right_distrib, auto)
  1998 done
  1998 done
  1999 
  1999 
  2000 lemma lemma_sin_cos_eq2 [simp]: "sin (xa + real (Suc m) * pi / 2) =  
  2000 lemma lemma_sin_cos_eq2 [simp]: "sin (xa + real (Suc m) * pi / 2) =  
  2001       cos (xa + real (m) * pi / 2)"
  2001       cos (xa + real (m) * pi / 2)"
  2002 apply (simp only: cos_add sin_add real_divide_def real_of_nat_Suc left_distrib right_distrib, auto)
  2002 apply (simp only: cos_add sin_add divide_inverse real_of_nat_Suc left_distrib right_distrib, auto)
  2003 done
  2003 done
  2004 
  2004 
  2005 lemma DERIV_sin_add [simp]: "DERIV (%x. sin (x + k)) xa :> cos (xa + k)"
  2005 lemma DERIV_sin_add [simp]: "DERIV (%x. sin (x + k)) xa :> cos (xa + k)"
  2006 apply (rule lemma_DERIV_subst)
  2006 apply (rule lemma_DERIV_subst)
  2007 apply (rule_tac f = sin and g = "%x. x + k" in DERIV_chain2)
  2007 apply (rule_tac f = sin and g = "%x. x + k" in DERIV_chain2)
  2013 lemma sin_cos_npi [simp]: "sin ((real m + 1/2) * pi) = cos (real m * pi)"
  2013 lemma sin_cos_npi [simp]: "sin ((real m + 1/2) * pi) = cos (real m * pi)"
  2014 by (auto simp add: right_distrib sin_add left_distrib mult_ac)
  2014 by (auto simp add: right_distrib sin_add left_distrib mult_ac)
  2015 
  2015 
  2016 lemma sin_cos_npi2 [simp]: "sin (real (Suc (2 * n)) * pi / 2) = (-1) ^ n"
  2016 lemma sin_cos_npi2 [simp]: "sin (real (Suc (2 * n)) * pi / 2) = (-1) ^ n"
  2017 apply (cut_tac m = n in sin_cos_npi)
  2017 apply (cut_tac m = n in sin_cos_npi)
  2018 apply (simp only: real_of_nat_Suc left_distrib real_divide_def, auto)
  2018 apply (simp only: real_of_nat_Suc left_distrib divide_inverse, auto)
  2019 done
  2019 done
  2020 
  2020 
  2021 lemma cos_2npi [simp]: "cos (2 * real (n::nat) * pi) = 1"
  2021 lemma cos_2npi [simp]: "cos (2 * real (n::nat) * pi) = 1"
  2022 by (simp add: cos_double mult_assoc power_add [symmetric] numeral_2_eq_2)
  2022 by (simp add: cos_double mult_assoc power_add [symmetric] numeral_2_eq_2)
  2023 
  2023 
  2041 apply (simp only: cos_add sin_add real_of_nat_Suc right_distrib left_distrib minus_mult_right, auto)
  2041 apply (simp only: cos_add sin_add real_of_nat_Suc right_distrib left_distrib minus_mult_right, auto)
  2042 done
  2042 done
  2043 
  2043 
  2044 (*NEEDED??*)
  2044 (*NEEDED??*)
  2045 lemma [simp]: "cos (x + real(Suc m) * pi / 2) = -sin (x + real m * pi / 2)"
  2045 lemma [simp]: "cos (x + real(Suc m) * pi / 2) = -sin (x + real m * pi / 2)"
  2046 apply (simp only: cos_add sin_add real_divide_def real_of_nat_Suc left_distrib right_distrib, auto)
  2046 apply (simp only: cos_add sin_add divide_inverse real_of_nat_Suc left_distrib right_distrib, auto)
  2047 done
  2047 done
  2048 
  2048 
  2049 lemma cos_pi_eq_zero [simp]: "cos (pi * real (Suc (2 * m)) / 2) = 0"
  2049 lemma cos_pi_eq_zero [simp]: "cos (pi * real (Suc (2 * m)) / 2) = 0"
  2050 by (simp only: cos_add sin_add real_divide_def real_of_nat_Suc left_distrib right_distrib, auto)
  2050 by (simp only: cos_add sin_add divide_inverse real_of_nat_Suc left_distrib right_distrib, auto)
  2051 
  2051 
  2052 lemma DERIV_cos_add [simp]: "DERIV (%x. cos (x + k)) xa :> - sin (xa + k)"
  2052 lemma DERIV_cos_add [simp]: "DERIV (%x. cos (x + k)) xa :> - sin (xa + k)"
  2053 apply (rule lemma_DERIV_subst)
  2053 apply (rule lemma_DERIV_subst)
  2054 apply (rule_tac f = cos and g = "%x. x + k" in DERIV_chain2)
  2054 apply (rule_tac f = cos and g = "%x. x + k" in DERIV_chain2)
  2055 apply (best intro!: DERIV_intros intro: DERIV_chain2)+
  2055 apply (best intro!: DERIV_intros intro: DERIV_chain2)+
  2371 
  2371 
  2372 lemma real_sqrt_divide_less_zero: "0 < y ==> - y / sqrt (x * x + y * y) < 0"
  2372 lemma real_sqrt_divide_less_zero: "0 < y ==> - y / sqrt (x * x + y * y) < 0"
  2373 apply (case_tac "x = 0")
  2373 apply (case_tac "x = 0")
  2374 apply (auto simp add: abs_eqI2)
  2374 apply (auto simp add: abs_eqI2)
  2375 apply (drule_tac y = y in real_sqrt_sum_squares_gt_zero3)
  2375 apply (drule_tac y = y in real_sqrt_sum_squares_gt_zero3)
  2376 apply (auto simp add: zero_less_mult_iff real_divide_def power2_eq_square)
  2376 apply (auto simp add: zero_less_mult_iff divide_inverse power2_eq_square)
  2377 done
  2377 done
  2378 
  2378 
  2379 lemma polar_ex1: "[| x \<noteq> 0; 0 < y |] ==> \<exists>r a. x = r * cos a & y = r * sin a"
  2379 lemma polar_ex1: "[| x \<noteq> 0; 0 < y |] ==> \<exists>r a. x = r * cos a & y = r * sin a"
  2380 apply (rule_tac x = "sqrt (x\<twosuperior> + y\<twosuperior>) " in exI)
  2380 apply (rule_tac x = "sqrt (x\<twosuperior> + y\<twosuperior>) " in exI)
  2381 apply (rule_tac x = "arcos (x / sqrt (x * x + y * y))" in exI)
  2381 apply (rule_tac x = "arcos (x / sqrt (x * x + y * y))" in exI)