src/HOL/Transcendental.thy
changeset 32036 8a9228872fbd
parent 31881 eba74a5790d2
child 32047 c141f139ce26
equal deleted inserted replaced
31970:ccaadfcf6941 32036:8a9228872fbd
   619 qed
   619 qed
   620 
   620 
   621 
   621 
   622 subsection{* Some properties of factorials *}
   622 subsection{* Some properties of factorials *}
   623 
   623 
   624 lemma real_of_nat_fact_not_zero [simp]: "real (fact n) \<noteq> 0"
   624 lemma real_of_nat_fact_not_zero [simp]: "real (fact (n::nat)) \<noteq> 0"
   625 by auto
   625 by auto
   626 
   626 
   627 lemma real_of_nat_fact_gt_zero [simp]: "0 < real(fact n)"
   627 lemma real_of_nat_fact_gt_zero [simp]: "0 < real(fact (n::nat))"
   628 by auto
   628 by auto
   629 
   629 
   630 lemma real_of_nat_fact_ge_zero [simp]: "0 \<le> real(fact n)"
   630 lemma real_of_nat_fact_ge_zero [simp]: "0 \<le> real(fact (n::nat))"
   631 by simp
   631 by simp
   632 
   632 
   633 lemma inv_real_of_nat_fact_gt_zero [simp]: "0 < inverse (real (fact n))"
   633 lemma inv_real_of_nat_fact_gt_zero [simp]: "0 < inverse (real (fact (n::nat)))"
   634 by (auto simp add: positive_imp_inverse_positive)
   634 by (auto simp add: positive_imp_inverse_positive)
   635 
   635 
   636 lemma inv_real_of_nat_fact_ge_zero [simp]: "0 \<le> inverse (real (fact n))"
   636 lemma inv_real_of_nat_fact_ge_zero [simp]: "0 \<le> inverse (real (fact (n::nat)))"
   637 by (auto intro: order_less_imp_le)
   637 by (auto intro: order_less_imp_le)
   638 
   638 
   639 subsection {* Derivability of power series *}
   639 subsection {* Derivability of power series *}
   640 
   640 
   641 lemma DERIV_series': fixes f :: "real \<Rightarrow> nat \<Rightarrow> real"
   641 lemma DERIV_series': fixes f :: "real \<Rightarrow> nat \<Rightarrow> real"
  1602  prefer 2
  1602  prefer 2
  1603  apply (rule sin_paired [THEN sums_summable, THEN sums_group], simp) 
  1603  apply (rule sin_paired [THEN sums_summable, THEN sums_group], simp) 
  1604 apply (rotate_tac 2)
  1604 apply (rotate_tac 2)
  1605 apply (drule sin_paired [THEN sums_unique, THEN ssubst])
  1605 apply (drule sin_paired [THEN sums_unique, THEN ssubst])
  1606 unfolding One_nat_def
  1606 unfolding One_nat_def
  1607 apply (auto simp del: fact_Suc)
  1607 apply (auto simp del: fact_Suc_nat)
  1608 apply (frule sums_unique)
  1608 apply (frule sums_unique)
  1609 apply (auto simp del: fact_Suc)
  1609 apply (auto simp del: fact_Suc_nat)
  1610 apply (rule_tac n1 = 0 in series_pos_less [THEN [2] order_le_less_trans])
  1610 apply (rule_tac n1 = 0 in series_pos_less [THEN [2] order_le_less_trans])
  1611 apply (auto simp del: fact_Suc)
  1611 apply (auto simp del: fact_Suc_nat)
  1612 apply (erule sums_summable)
  1612 apply (erule sums_summable)
  1613 apply (case_tac "m=0")
  1613 apply (case_tac "m=0")
  1614 apply (simp (no_asm_simp))
  1614 apply (simp (no_asm_simp))
  1615 apply (subgoal_tac "6 * (x * (x * x) / real (Suc (Suc (Suc (Suc (Suc (Suc 0))))))) < 6 * x") 
  1615 apply (subgoal_tac "6 * (x * (x * x) / real (Suc (Suc (Suc (Suc (Suc (Suc 0))))))) < 6 * x") 
  1616 apply (simp only: mult_less_cancel_left, simp)  
  1616 apply (simp only: mult_less_cancel_left, simp)  
  1617 apply (simp (no_asm_simp) add: numeral_2_eq_2 [symmetric] mult_assoc [symmetric])
  1617 apply (simp (no_asm_simp) add: numeral_2_eq_2 [symmetric] mult_assoc [symmetric])
  1618 apply (subgoal_tac "x*x < 2*3", simp) 
  1618 apply (subgoal_tac "x*x < 2*3", simp) 
  1619 apply (rule mult_strict_mono)
  1619 apply (rule mult_strict_mono)
  1620 apply (auto simp add: real_0_less_add_iff real_of_nat_Suc simp del: fact_Suc)
  1620 apply (auto simp add: real_0_less_add_iff real_of_nat_Suc simp del: fact_Suc_nat)
  1621 apply (subst fact_Suc)
  1621 apply (subst fact_Suc_nat)
  1622 apply (subst fact_Suc)
  1622 apply (subst fact_Suc_nat)
  1623 apply (subst fact_Suc)
  1623 apply (subst fact_Suc_nat)
  1624 apply (subst fact_Suc)
  1624 apply (subst fact_Suc_nat)
  1625 apply (subst real_of_nat_mult)
  1625 apply (subst real_of_nat_mult)
  1626 apply (subst real_of_nat_mult)
  1626 apply (subst real_of_nat_mult)
  1627 apply (subst real_of_nat_mult)
  1627 apply (subst real_of_nat_mult)
  1628 apply (subst real_of_nat_mult)
  1628 apply (subst real_of_nat_mult)
  1629 apply (simp (no_asm) add: divide_inverse del: fact_Suc)
  1629 apply (simp (no_asm) add: divide_inverse del: fact_Suc_nat)
  1630 apply (auto simp add: mult_assoc [symmetric] simp del: fact_Suc)
  1630 apply (auto simp add: mult_assoc [symmetric] simp del: fact_Suc_nat)
  1631 apply (rule_tac c="real (Suc (Suc (4*m)))" in mult_less_imp_less_right) 
  1631 apply (rule_tac c="real (Suc (Suc (4*m)))" in mult_less_imp_less_right) 
  1632 apply (auto simp add: mult_assoc simp del: fact_Suc)
  1632 apply (auto simp add: mult_assoc simp del: fact_Suc_nat)
  1633 apply (rule_tac c="real (Suc (Suc (Suc (4*m))))" in mult_less_imp_less_right) 
  1633 apply (rule_tac c="real (Suc (Suc (Suc (4*m))))" in mult_less_imp_less_right) 
  1634 apply (auto simp add: mult_assoc mult_less_cancel_left simp del: fact_Suc)
  1634 apply (auto simp add: mult_assoc mult_less_cancel_left simp del: fact_Suc_nat)
  1635 apply (subgoal_tac "x * (x * x ^ (4*m)) = (x ^ (4*m)) * (x * x)") 
  1635 apply (subgoal_tac "x * (x * x ^ (4*m)) = (x ^ (4*m)) * (x * x)") 
  1636 apply (erule ssubst)+
  1636 apply (erule ssubst)+
  1637 apply (auto simp del: fact_Suc)
  1637 apply (auto simp del: fact_Suc_nat)
  1638 apply (subgoal_tac "0 < x ^ (4 * m) ")
  1638 apply (subgoal_tac "0 < x ^ (4 * m) ")
  1639  prefer 2 apply (simp only: zero_less_power) 
  1639  prefer 2 apply (simp only: zero_less_power) 
  1640 apply (simp (no_asm_simp) add: mult_less_cancel_left)
  1640 apply (simp (no_asm_simp) add: mult_less_cancel_left)
  1641 apply (rule mult_strict_mono)
  1641 apply (rule mult_strict_mono)
  1642 apply (simp_all (no_asm_simp))
  1642 apply (simp_all (no_asm_simp))
  1668 apply (rule neg_less_iff_less [THEN iffD1]) 
  1668 apply (rule neg_less_iff_less [THEN iffD1]) 
  1669 apply (frule sums_unique, auto)
  1669 apply (frule sums_unique, auto)
  1670 apply (rule_tac y =
  1670 apply (rule_tac y =
  1671  "\<Sum>n=0..< Suc(Suc(Suc 0)). - (-1 ^ n / (real(fact (2*n))) * 2 ^ (2*n))"
  1671  "\<Sum>n=0..< Suc(Suc(Suc 0)). - (-1 ^ n / (real(fact (2*n))) * 2 ^ (2*n))"
  1672        in order_less_trans)
  1672        in order_less_trans)
  1673 apply (simp (no_asm) add: fact_num_eq_if realpow_num_eq_if del: fact_Suc)
  1673 apply (simp (no_asm) add: fact_num_eq_if_nat realpow_num_eq_if del: fact_Suc_nat)
  1674 apply (simp (no_asm) add: mult_assoc del: setsum_op_ivl_Suc)
  1674 apply (simp (no_asm) add: mult_assoc del: setsum_op_ivl_Suc)
  1675 apply (rule sumr_pos_lt_pair)
  1675 apply (rule sumr_pos_lt_pair)
  1676 apply (erule sums_summable, safe)
  1676 apply (erule sums_summable, safe)
  1677 unfolding One_nat_def
  1677 unfolding One_nat_def
  1678 apply (simp (no_asm) add: divide_inverse real_0_less_add_iff mult_assoc [symmetric] 
  1678 apply (simp (no_asm) add: divide_inverse real_0_less_add_iff mult_assoc [symmetric] 
  1679             del: fact_Suc)
  1679             del: fact_Suc_nat)
  1680 apply (rule real_mult_inverse_cancel2)
  1680 apply (rule real_mult_inverse_cancel2)
  1681 apply (rule real_of_nat_fact_gt_zero)+
  1681 apply (rule real_of_nat_fact_gt_zero)+
  1682 apply (simp (no_asm) add: mult_assoc [symmetric] del: fact_Suc)
  1682 apply (simp (no_asm) add: mult_assoc [symmetric] del: fact_Suc_nat)
  1683 apply (subst fact_lemma) 
  1683 apply (subst fact_lemma) 
  1684 apply (subst fact_Suc [of "Suc (Suc (Suc (Suc (Suc (Suc (Suc (4 * d)))))))"])
  1684 apply (subst fact_Suc_nat [of "Suc (Suc (Suc (Suc (Suc (Suc (Suc (4 * d)))))))"])
  1685 apply (simp only: real_of_nat_mult)
  1685 apply (simp only: real_of_nat_mult)
  1686 apply (rule mult_strict_mono, force)
  1686 apply (rule mult_strict_mono, force)
  1687   apply (rule_tac [3] real_of_nat_ge_zero)
  1687   apply (rule_tac [3] real_of_nat_ge_zero)
  1688  prefer 2 apply force
  1688  prefer 2 apply force
  1689 apply (rule real_of_nat_less_iff [THEN iffD2])
  1689 apply (rule real_of_nat_less_iff [THEN iffD2])
  1690 apply (rule fact_less_mono, auto)
  1690 apply (rule fact_less_mono_nat, auto)
  1691 done
  1691 done
  1692 
  1692 
  1693 lemmas cos_two_neq_zero [simp] = cos_two_less_zero [THEN less_imp_neq]
  1693 lemmas cos_two_neq_zero [simp] = cos_two_less_zero [THEN less_imp_neq]
  1694 lemmas cos_two_le_zero [simp] = cos_two_less_zero [THEN order_less_imp_le]
  1694 lemmas cos_two_le_zero [simp] = cos_two_less_zero [THEN order_less_imp_le]
  1695 
  1695