139 by (simp add: deriv_def diff_minus [symmetric] DERIV_LIM_iff) |
139 by (simp add: deriv_def diff_minus [symmetric] DERIV_LIM_iff) |
140 |
140 |
141 lemma inverse_diff_inverse: |
141 lemma inverse_diff_inverse: |
142 "\<lbrakk>(a::'a::division_ring) \<noteq> 0; b \<noteq> 0\<rbrakk> |
142 "\<lbrakk>(a::'a::division_ring) \<noteq> 0; b \<noteq> 0\<rbrakk> |
143 \<Longrightarrow> inverse a - inverse b = - (inverse a * (a - b) * inverse b)" |
143 \<Longrightarrow> inverse a - inverse b = - (inverse a * (a - b) * inverse b)" |
144 by (simp add: ring_simps) |
144 by (simp add: algebra_simps) |
145 |
145 |
146 lemma DERIV_inverse_lemma: |
146 lemma DERIV_inverse_lemma: |
147 "\<lbrakk>a \<noteq> 0; b \<noteq> (0::'a::real_normed_field)\<rbrakk> |
147 "\<lbrakk>a \<noteq> 0; b \<noteq> (0::'a::real_normed_field)\<rbrakk> |
148 \<Longrightarrow> (inverse a - inverse b) / h |
148 \<Longrightarrow> (inverse a - inverse b) / h |
149 = - (inverse a * ((a - b) / h) * inverse b)" |
149 = - (inverse a * ((a - b) / h) * inverse b)" |
204 case 0 |
204 case 0 |
205 show ?case by (simp add: power_Suc f) |
205 show ?case by (simp add: power_Suc f) |
206 case (Suc k) |
206 case (Suc k) |
207 from DERIV_mult' [OF f Suc] show ?case |
207 from DERIV_mult' [OF f Suc] show ?case |
208 apply (simp only: of_nat_Suc ring_distribs mult_1_left) |
208 apply (simp only: of_nat_Suc ring_distribs mult_1_left) |
209 apply (simp only: power_Suc right_distrib mult_ac add_ac) |
209 apply (simp only: power_Suc algebra_simps) |
210 done |
210 done |
211 qed |
211 qed |
212 |
212 |
213 lemma DERIV_power: |
213 lemma DERIV_power: |
214 fixes f :: "'a \<Rightarrow> 'a::{real_normed_field,recpower}" |
214 fixes f :: "'a \<Rightarrow> 'a::{real_normed_field,recpower}" |
722 hence "\<forall>x. a \<le> x & x \<le> b --> isCont (%x. inverse (M - f x)) x" |
722 hence "\<forall>x. a \<le> x & x \<le> b --> isCont (%x. inverse (M - f x)) x" |
723 by (auto simp add: isCont_inverse isCont_diff con) |
723 by (auto simp add: isCont_inverse isCont_diff con) |
724 from isCont_bounded [OF le this] |
724 from isCont_bounded [OF le this] |
725 obtain k where k: "!!x. a \<le> x & x \<le> b --> inverse (M - f x) \<le> k" by auto |
725 obtain k where k: "!!x. a \<le> x & x \<le> b --> inverse (M - f x) \<le> k" by auto |
726 have Minv: "!!x. a \<le> x & x \<le> b --> 0 < inverse (M - f (x))" |
726 have Minv: "!!x. a \<le> x & x \<le> b --> 0 < inverse (M - f (x))" |
727 by (simp add: M3 compare_rls) |
727 by (simp add: M3 algebra_simps) |
728 have "!!x. a \<le> x & x \<le> b --> inverse (M - f x) < k+1" using k |
728 have "!!x. a \<le> x & x \<le> b --> inverse (M - f x) < k+1" using k |
729 by (auto intro: order_le_less_trans [of _ k]) |
729 by (auto intro: order_le_less_trans [of _ k]) |
730 with Minv |
730 with Minv |
731 have "!!x. a \<le> x & x \<le> b --> inverse(k+1) < inverse(inverse(M - f x))" |
731 have "!!x. a \<le> x & x \<le> b --> inverse(k+1) < inverse(inverse(M - f x))" |
732 by (intro strip less_imp_inverse_less, simp_all) |
732 by (intro strip less_imp_inverse_less, simp_all) |
1396 moreover |
1396 moreover |
1397 { |
1397 { |
1398 have "?h b - ?h a = |
1398 have "?h b - ?h a = |
1399 ((f b)*(g b) - (f a)*(g b) - (g b)*(f b) + (g a)*(f b)) - |
1399 ((f b)*(g b) - (f a)*(g b) - (g b)*(f b) + (g a)*(f b)) - |
1400 ((f b)*(g a) - (f a)*(g a) - (g b)*(f a) + (g a)*(f a))" |
1400 ((f b)*(g a) - (f a)*(g a) - (g b)*(f a) + (g a)*(f a))" |
1401 by (simp add: mult_ac add_ac right_diff_distrib) |
1401 by (simp add: algebra_simps) |
1402 hence "?h b - ?h a = 0" by auto |
1402 hence "?h b - ?h a = 0" by auto |
1403 } |
1403 } |
1404 ultimately have "(b - a) * (g'c * (f b - f a) - f'c * (g b - g a)) = 0" by auto |
1404 ultimately have "(b - a) * (g'c * (f b - f a) - f'c * (g b - g a)) = 0" by auto |
1405 with alb have "g'c * (f b - f a) - f'c * (g b - g a) = 0" by simp |
1405 with alb have "g'c * (f b - f a) - f'c * (g b - g a) = 0" by simp |
1406 hence "g'c * (f b - f a) = f'c * (g b - g a)" by simp |
1406 hence "g'c * (f b - f a) = f'c * (g b - g a)" by simp |
1425 lemma pderiv_pCons: "pderiv (pCons a p) = p + pCons 0 (pderiv p)" |
1425 lemma pderiv_pCons: "pderiv (pCons a p) = p + pCons 0 (pderiv p)" |
1426 unfolding pderiv_def by (simp add: poly_rec_pCons) |
1426 unfolding pderiv_def by (simp add: poly_rec_pCons) |
1427 |
1427 |
1428 lemma coeff_pderiv: "coeff (pderiv p) n = of_nat (Suc n) * coeff p (Suc n)" |
1428 lemma coeff_pderiv: "coeff (pderiv p) n = of_nat (Suc n) * coeff p (Suc n)" |
1429 apply (induct p arbitrary: n, simp) |
1429 apply (induct p arbitrary: n, simp) |
1430 apply (simp add: pderiv_pCons coeff_pCons ring_simps split: nat.split) |
1430 apply (simp add: pderiv_pCons coeff_pCons algebra_simps split: nat.split) |
1431 done |
1431 done |
1432 |
1432 |
1433 lemma pderiv_eq_0_iff: "pderiv p = 0 \<longleftrightarrow> degree p = 0" |
1433 lemma pderiv_eq_0_iff: "pderiv p = 0 \<longleftrightarrow> degree p = 0" |
1434 apply (rule iffI) |
1434 apply (rule iffI) |
1435 apply (cases p, simp) |
1435 apply (cases p, simp) |
1449 |
1449 |
1450 lemma pderiv_singleton [simp]: "pderiv [:a:] = 0" |
1450 lemma pderiv_singleton [simp]: "pderiv [:a:] = 0" |
1451 by (simp add: pderiv_pCons) |
1451 by (simp add: pderiv_pCons) |
1452 |
1452 |
1453 lemma pderiv_add: "pderiv (p + q) = pderiv p + pderiv q" |
1453 lemma pderiv_add: "pderiv (p + q) = pderiv p + pderiv q" |
1454 by (rule poly_ext, simp add: coeff_pderiv ring_simps) |
1454 by (rule poly_ext, simp add: coeff_pderiv algebra_simps) |
1455 |
1455 |
1456 lemma pderiv_minus: "pderiv (- p) = - pderiv p" |
1456 lemma pderiv_minus: "pderiv (- p) = - pderiv p" |
1457 by (rule poly_ext, simp add: coeff_pderiv) |
1457 by (rule poly_ext, simp add: coeff_pderiv) |
1458 |
1458 |
1459 lemma pderiv_diff: "pderiv (p - q) = pderiv p - pderiv q" |
1459 lemma pderiv_diff: "pderiv (p - q) = pderiv p - pderiv q" |
1460 by (rule poly_ext, simp add: coeff_pderiv ring_simps) |
1460 by (rule poly_ext, simp add: coeff_pderiv algebra_simps) |
1461 |
1461 |
1462 lemma pderiv_smult: "pderiv (smult a p) = smult a (pderiv p)" |
1462 lemma pderiv_smult: "pderiv (smult a p) = smult a (pderiv p)" |
1463 by (rule poly_ext, simp add: coeff_pderiv ring_simps) |
1463 by (rule poly_ext, simp add: coeff_pderiv algebra_simps) |
1464 |
1464 |
1465 lemma pderiv_mult: "pderiv (p * q) = p * pderiv q + q * pderiv p" |
1465 lemma pderiv_mult: "pderiv (p * q) = p * pderiv q + q * pderiv p" |
1466 apply (induct p) |
1466 apply (induct p) |
1467 apply simp |
1467 apply simp |
1468 apply (simp add: pderiv_add pderiv_smult pderiv_pCons ring_simps) |
1468 apply (simp add: pderiv_add pderiv_smult pderiv_pCons algebra_simps) |
1469 done |
1469 done |
1470 |
1470 |
1471 lemma pderiv_power_Suc: |
1471 lemma pderiv_power_Suc: |
1472 "pderiv (p ^ Suc n) = smult (of_nat (Suc n)) (p ^ n) * pderiv p" |
1472 "pderiv (p ^ Suc n) = smult (of_nat (Suc n)) (p ^ n) * pderiv p" |
1473 apply (induct n) |
1473 apply (induct n) |
1474 apply simp |
1474 apply simp |
1475 apply (subst power_Suc) |
1475 apply (subst power_Suc) |
1476 apply (subst pderiv_mult) |
1476 apply (subst pderiv_mult) |
1477 apply (erule ssubst) |
1477 apply (erule ssubst) |
1478 apply (simp add: smult_add_left ring_simps) |
1478 apply (simp add: smult_add_left algebra_simps) |
1479 done |
1479 done |
1480 |
1480 |
1481 lemma DERIV_cmult2: "DERIV f x :> D ==> DERIV (%x. (f x) * c :: real) x :> D * c" |
1481 lemma DERIV_cmult2: "DERIV f x :> D ==> DERIV (%x. (f x) * c :: real) x :> D * c" |
1482 by (simp add: DERIV_cmult mult_commute [of _ c]) |
1482 by (simp add: DERIV_cmult mult_commute [of _ c]) |
1483 |
1483 |