equal
deleted
inserted
replaced
556 using ln_gt_zero_iff[OF yp] y1 |
556 using ln_gt_zero_iff[OF yp] y1 |
557 by (simp add: minus_divide_left field_simps del: minus_divide_left[symmetric]) |
557 by (simp add: minus_divide_left field_simps del: minus_divide_left[symmetric]) |
558 then have "ln y * real k + ln x > 0" |
558 then have "ln y * real k + ln x > 0" |
559 by simp |
559 by simp |
560 then have "exp (real k * ln y + ln x) > exp 0" |
560 then have "exp (real k * ln y + ln x) > exp 0" |
561 by (simp add: mult_ac) |
561 by (simp add: ac_simps) |
562 then have "y ^ k * x > 1" |
562 then have "y ^ k * x > 1" |
563 unfolding exp_zero exp_add exp_real_of_nat_mult exp_ln [OF xp] exp_ln [OF yp] |
563 unfolding exp_zero exp_add exp_real_of_nat_mult exp_ln [OF xp] exp_ln [OF yp] |
564 by simp |
564 by simp |
565 then have "x > (1 / y)^k" using yp |
565 then have "x > (1 / y)^k" using yp |
566 by (simp add: field_simps nonzero_power_divide) |
566 by (simp add: field_simps nonzero_power_divide) |
722 shows "inverse (inverse f) = f" |
722 shows "inverse (inverse f) = f" |
723 proof - |
723 proof - |
724 from f0 have if0: "inverse f $ 0 \<noteq> 0" by simp |
724 from f0 have if0: "inverse f $ 0 \<noteq> 0" by simp |
725 from inverse_mult_eq_1[OF f0] inverse_mult_eq_1[OF if0] |
725 from inverse_mult_eq_1[OF f0] inverse_mult_eq_1[OF if0] |
726 have "inverse f * f = inverse f * inverse (inverse f)" |
726 have "inverse f * f = inverse f * inverse (inverse f)" |
727 by (simp add: mult_ac) |
727 by (simp add: ac_simps) |
728 then show ?thesis |
728 then show ?thesis |
729 using f0 unfolding mult_cancel_left by simp |
729 using f0 unfolding mult_cancel_left by simp |
730 qed |
730 qed |
731 |
731 |
732 lemma fps_inverse_unique: |
732 lemma fps_inverse_unique: |
734 and fg: "f*g = 1" |
734 and fg: "f*g = 1" |
735 shows "inverse f = g" |
735 shows "inverse f = g" |
736 proof - |
736 proof - |
737 from inverse_mult_eq_1[OF f0] fg |
737 from inverse_mult_eq_1[OF f0] fg |
738 have th0: "inverse f * f = g * f" |
738 have th0: "inverse f * f = g * f" |
739 by (simp add: mult_ac) |
739 by (simp add: ac_simps) |
740 then show ?thesis |
740 then show ?thesis |
741 using f0 |
741 using f0 |
742 unfolding mult_cancel_right |
742 unfolding mult_cancel_right |
743 by (auto simp add: expand_fps_eq) |
743 by (auto simp add: expand_fps_eq) |
744 qed |
744 qed |
1398 by simp |
1398 by simp |
1399 have "a /?X = ?X * Abs_fps (\<lambda>n::nat. setsum (op $ a) {0..n}) * inverse ?X" |
1399 have "a /?X = ?X * Abs_fps (\<lambda>n::nat. setsum (op $ a) {0..n}) * inverse ?X" |
1400 using fps_divide_X_minus1_setsum_lemma[of a, symmetric] th0 |
1400 using fps_divide_X_minus1_setsum_lemma[of a, symmetric] th0 |
1401 by (simp add: fps_divide_def mult.assoc) |
1401 by (simp add: fps_divide_def mult.assoc) |
1402 also have "\<dots> = (inverse ?X * ?X) * Abs_fps (\<lambda>n::nat. setsum (op $ a) {0..n}) " |
1402 also have "\<dots> = (inverse ?X * ?X) * Abs_fps (\<lambda>n::nat. setsum (op $ a) {0..n}) " |
1403 by (simp add: mult_ac) |
1403 by (simp add: ac_simps) |
1404 finally show ?thesis |
1404 finally show ?thesis |
1405 by (simp add: inverse_mult_eq_1[OF th0]) |
1405 by (simp add: inverse_mult_eq_1[OF th0]) |
1406 qed |
1406 qed |
1407 |
1407 |
1408 |
1408 |
2072 then have "a$n = (b$n - setsum ?f ?Pnknn) / (of_nat (k+1) * (?r $ 0)^k)" |
2072 then have "a$n = (b$n - setsum ?f ?Pnknn) / (of_nat (k+1) * (?r $ 0)^k)" |
2073 apply - |
2073 apply - |
2074 apply (rule eq_divide_imp') |
2074 apply (rule eq_divide_imp') |
2075 using r00 |
2075 using r00 |
2076 apply (simp del: of_nat_Suc) |
2076 apply (simp del: of_nat_Suc) |
2077 apply (simp add: mult_ac) |
2077 apply (simp add: ac_simps) |
2078 done |
2078 done |
2079 then have "a$n = ?r $n" |
2079 then have "a$n = ?r $n" |
2080 apply (simp del: of_nat_Suc) |
2080 apply (simp del: of_nat_Suc) |
2081 unfolding fps_radical_def n1 |
2081 unfolding fps_radical_def n1 |
2082 apply (simp add: field_simps n1 th00 del: of_nat_Suc) |
2082 apply (simp add: field_simps n1 th00 del: of_nat_Suc) |
2126 let ?iw = "inverse ?w" |
2126 let ?iw = "inverse ?w" |
2127 from iffD1[OF power_radical[of a r], OF a0 r0] |
2127 from iffD1[OF power_radical[of a r], OF a0 r0] |
2128 have "fps_deriv (?r ^ Suc k) = fps_deriv a" |
2128 have "fps_deriv (?r ^ Suc k) = fps_deriv a" |
2129 by simp |
2129 by simp |
2130 then have "fps_deriv ?r * ?w = fps_deriv a" |
2130 then have "fps_deriv ?r * ?w = fps_deriv a" |
2131 by (simp add: fps_deriv_power mult_ac del: power_Suc) |
2131 by (simp add: fps_deriv_power ac_simps del: power_Suc) |
2132 then have "?iw * fps_deriv ?r * ?w = ?iw * fps_deriv a" |
2132 then have "?iw * fps_deriv ?r * ?w = ?iw * fps_deriv a" |
2133 by simp |
2133 by simp |
2134 then have "fps_deriv ?r * (?iw * ?w) = fps_deriv a / ?w" |
2134 then have "fps_deriv ?r * (?iw * ?w) = fps_deriv a / ?w" |
2135 by (simp add: fps_divide_def) |
2135 by (simp add: fps_divide_def) |
2136 then show ?thesis unfolding th0 by simp |
2136 then show ?thesis unfolding th0 by simp |
2292 by (rule setsum.reindex_cong [of Suc]) (auto simp add: mult.assoc) |
2292 by (rule setsum.reindex_cong [of Suc]) (auto simp add: mult.assoc) |
2293 finally have th0: "(fps_deriv (a oo b))$n = |
2293 finally have th0: "(fps_deriv (a oo b))$n = |
2294 setsum (\<lambda>i. of_nat (i + 1) * a$(i+1) * (setsum (\<lambda>j. (b^ i)$j * of_nat (n - j + 1) * b$(n - j + 1)) {0..n})) {0.. n}" . |
2294 setsum (\<lambda>i. of_nat (i + 1) * a$(i+1) * (setsum (\<lambda>j. (b^ i)$j * of_nat (n - j + 1) * b$(n - j + 1)) {0..n})) {0.. n}" . |
2295 |
2295 |
2296 have "(((fps_deriv a) oo b) * (fps_deriv b))$n = setsum (\<lambda>i. (fps_deriv b)$ (n - i) * ((fps_deriv a) oo b)$i) {0..n}" |
2296 have "(((fps_deriv a) oo b) * (fps_deriv b))$n = setsum (\<lambda>i. (fps_deriv b)$ (n - i) * ((fps_deriv a) oo b)$i) {0..n}" |
2297 unfolding fps_mult_nth by (simp add: mult_ac) |
2297 unfolding fps_mult_nth by (simp add: ac_simps) |
2298 also have "\<dots> = setsum (\<lambda>i. setsum (\<lambda>j. of_nat (n - i +1) * b$(n - i + 1) * of_nat (j + 1) * a$(j+1) * (b^j)$i) {0..n}) {0..n}" |
2298 also have "\<dots> = setsum (\<lambda>i. setsum (\<lambda>j. of_nat (n - i +1) * b$(n - i + 1) * of_nat (j + 1) * a$(j+1) * (b^j)$i) {0..n}) {0..n}" |
2299 unfolding fps_deriv_nth fps_compose_nth setsum_right_distrib mult.assoc |
2299 unfolding fps_deriv_nth fps_compose_nth setsum_right_distrib mult.assoc |
2300 apply (rule setsum.cong) |
2300 apply (rule setsum.cong) |
2301 apply (rule refl) |
2301 apply (rule refl) |
2302 apply (rule setsum.mono_neutral_left) |
2302 apply (rule setsum.mono_neutral_left) |
3530 apply (simp add: nat_add_1_add_1 fps_sin_nth_add_2 |
3530 apply (simp add: nat_add_1_add_1 fps_sin_nth_add_2 |
3531 del: One_nat_def of_nat_Suc of_nat_add add_2_eq_Suc') |
3531 del: One_nat_def of_nat_Suc of_nat_add add_2_eq_Suc') |
3532 apply (subst minus_divide_left) |
3532 apply (subst minus_divide_left) |
3533 apply (subst eq_divide_iff) |
3533 apply (subst eq_divide_iff) |
3534 apply (simp del: of_nat_add of_nat_Suc) |
3534 apply (simp del: of_nat_add of_nat_Suc) |
3535 apply (simp only: mult_ac) |
3535 apply (simp only: ac_simps) |
3536 done |
3536 done |
3537 |
3537 |
3538 lemma eq_fps_cos: |
3538 lemma eq_fps_cos: |
3539 assumes 0: "a $ 0 = 1" |
3539 assumes 0: "a $ 0 = 1" |
3540 and 1: "a $ 1 = 0" |
3540 and 1: "a $ 1 = 0" |
3548 apply (simp add: nat_add_1_add_1 fps_cos_nth_add_2 |
3548 apply (simp add: nat_add_1_add_1 fps_cos_nth_add_2 |
3549 del: One_nat_def of_nat_Suc of_nat_add add_2_eq_Suc') |
3549 del: One_nat_def of_nat_Suc of_nat_add add_2_eq_Suc') |
3550 apply (subst minus_divide_left) |
3550 apply (subst minus_divide_left) |
3551 apply (subst eq_divide_iff) |
3551 apply (subst eq_divide_iff) |
3552 apply (simp del: of_nat_add of_nat_Suc) |
3552 apply (simp del: of_nat_add of_nat_Suc) |
3553 apply (simp only: mult_ac) |
3553 apply (simp only: ac_simps) |
3554 done |
3554 done |
3555 |
3555 |
3556 lemma mult_nth_0 [simp]: "(a * b) $ 0 = a $ 0 * b $ 0" |
3556 lemma mult_nth_0 [simp]: "(a * b) $ 0 = a $ 0 * b $ 0" |
3557 by (simp add: fps_mult_nth) |
3557 by (simp add: fps_mult_nth) |
3558 |
3558 |
3653 apply simp |
3653 apply simp |
3654 done |
3654 done |
3655 |
3655 |
3656 lemma fps_demoivre: "(fps_cos a + fps_const ii * fps_sin a)^n = fps_cos (of_nat n * a) + fps_const ii * fps_sin (of_nat n * a)" |
3656 lemma fps_demoivre: "(fps_cos a + fps_const ii * fps_sin a)^n = fps_cos (of_nat n * a) + fps_const ii * fps_sin (of_nat n * a)" |
3657 unfolding Eii_sin_cos[symmetric] E_power_mult |
3657 unfolding Eii_sin_cos[symmetric] E_power_mult |
3658 by (simp add: mult_ac) |
3658 by (simp add: ac_simps) |
3659 |
3659 |
3660 |
3660 |
3661 subsection {* Hypergeometric series *} |
3661 subsection {* Hypergeometric series *} |
3662 |
3662 |
3663 definition "F as bs (c::'a::{field_char_0,field_inverse_zero}) = |
3663 definition "F as bs (c::'a::{field_char_0,field_inverse_zero}) = |