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 |