33 continuous_on_cong continuous_on_id) |
33 continuous_on_cong continuous_on_id) |
34 |
34 |
35 lemma continuous_Im: "continuous_on UNIV Im" |
35 lemma continuous_Im: "continuous_on UNIV Im" |
36 by (metis (poly_guards_query) bounded_linear.continuous_on bounded_linear_Im |
36 by (metis (poly_guards_query) bounded_linear.continuous_on bounded_linear_Im |
37 continuous_on_cong continuous_on_id) |
37 continuous_on_cong continuous_on_id) |
|
38 |
|
39 lemma open_closed_segment: "u \<in> open_segment w z \<Longrightarrow> u \<in> closed_segment w z" |
|
40 by (auto simp add: closed_segment_def open_segment_def) |
|
41 |
|
42 lemma has_derivative_Re [has_derivative_intros] : "(Re has_derivative Re) F" |
|
43 by (auto simp add: has_derivative_def bounded_linear_Re) |
|
44 |
|
45 lemma has_derivative_Im [has_derivative_intros] : "(Im has_derivative Im) F" |
|
46 by (auto simp add: has_derivative_def bounded_linear_Im) |
|
47 |
|
48 lemma fact_cancel: |
|
49 fixes c :: "'a::real_field" |
|
50 shows "of_nat (Suc n) * c / of_nat (fact (Suc n)) = c / of_nat (fact n)" |
|
51 apply (subst frac_eq_eq [OF of_nat_fact_not_zero of_nat_fact_not_zero]) |
|
52 apply (simp add: algebra_simps of_nat_mult) |
|
53 done |
38 |
54 |
39 lemma open_halfspace_Re_lt: "open {z. Re(z) < b}" |
55 lemma open_halfspace_Re_lt: "open {z. Re(z) < b}" |
40 proof - |
56 proof - |
41 have "{z. Re(z) < b} = Re -`{..<b}" |
57 have "{z. Re(z) < b} = Re -`{..<b}" |
42 by blast |
58 by blast |
1401 also have "... \<le> B * cmod (z - w) ^ Suc n / real (fact n)" |
1417 also have "... \<le> B * cmod (z - w) ^ Suc n / real (fact n)" |
1402 by (simp add: algebra_simps norm_minus_commute real_of_nat_def) |
1418 by (simp add: algebra_simps norm_minus_commute real_of_nat_def) |
1403 finally show ?thesis . |
1419 finally show ?thesis . |
1404 qed |
1420 qed |
1405 |
1421 |
|
1422 text{* Something more like the traditional MVT for real components.*} |
|
1423 lemma complex_mvt_line: |
|
1424 assumes "\<And>u. u \<in> closed_segment w z ==> (f has_field_derivative f'(u)) (at u)" |
|
1425 shows "\<exists>u. u \<in> open_segment w z \<and> Re(f z) - Re(f w) = Re(f'(u) * (z - w))" |
|
1426 proof - |
|
1427 have twz: "\<And>t. (1 - t) *\<^sub>R w + t *\<^sub>R z = w + t *\<^sub>R (z - w)" |
|
1428 by (simp add: real_vector.scale_left_diff_distrib real_vector.scale_right_diff_distrib) |
|
1429 show ?thesis |
|
1430 apply (cut_tac mvt_simple |
|
1431 [of 0 1 "Re o f o (\<lambda>t. (1 - t) *\<^sub>R w + t *\<^sub>R z)" |
|
1432 "\<lambda>u. Re o (\<lambda>h. f'((1 - u) *\<^sub>R w + u *\<^sub>R z) * h) o (\<lambda>t. t *\<^sub>R (z - w))"]) |
|
1433 apply auto |
|
1434 apply (rule_tac x="(1 - x) *\<^sub>R w + x *\<^sub>R z" in exI) |
|
1435 apply (simp add: open_segment_def) |
|
1436 apply (auto simp add: twz) |
|
1437 apply (rule has_derivative_at_within) |
|
1438 apply (intro has_derivative_intros has_derivative_add [OF has_derivative_const, simplified])+ |
|
1439 apply (rule assms [unfolded has_field_derivative_def]) |
|
1440 apply (force simp add: twz closed_segment_def) |
|
1441 done |
|
1442 qed |
|
1443 |
|
1444 lemma complex_taylor_mvt: |
|
1445 assumes "\<And>i x. \<lbrakk>x \<in> closed_segment w z; i \<le> n\<rbrakk> \<Longrightarrow> ((f i) has_field_derivative f (Suc i) x) (at x)" |
|
1446 shows "\<exists>u. u \<in> closed_segment w z \<and> |
|
1447 Re (f 0 z) = |
|
1448 Re ((\<Sum>i = 0..n. f i w * (z - w) ^ i / of_nat (fact i)) + |
|
1449 (f (Suc n) u * (z-u)^n / of_nat (fact n)) * (z - w))" |
|
1450 proof - |
|
1451 { fix u |
|
1452 assume u: "u \<in> closed_segment w z" |
|
1453 have "(\<Sum>i = 0..n. |
|
1454 (f (Suc i) u * (z-u) ^ i - of_nat i * (f i u * (z-u) ^ (i - Suc 0))) / |
|
1455 of_nat (fact i)) = |
|
1456 f (Suc 0) u - |
|
1457 (f (Suc (Suc n)) u * ((z-u) ^ Suc n) - (of_nat (Suc n)) * (z-u) ^ n * f (Suc n) u) / |
|
1458 of_nat (fact (Suc n)) + |
|
1459 (\<Sum>i = 0..n. |
|
1460 (f (Suc (Suc i)) u * ((z-u) ^ Suc i) - of_nat (Suc i) * (f (Suc i) u * (z-u) ^ i)) / |
|
1461 of_nat (fact (Suc i)))" |
|
1462 by (subst setsum_Suc_reindex) simp |
|
1463 also have "... = f (Suc 0) u - |
|
1464 (f (Suc (Suc n)) u * ((z-u) ^ Suc n) - (of_nat (Suc n)) * (z-u) ^ n * f (Suc n) u) / |
|
1465 of_nat (fact (Suc n)) + |
|
1466 (\<Sum>i = 0..n. |
|
1467 f (Suc (Suc i)) u * ((z-u) ^ Suc i) / of_nat (fact (Suc i)) - |
|
1468 f (Suc i) u * (z-u) ^ i / of_nat (fact i))" |
|
1469 by (simp only: diff_divide_distrib fact_cancel mult_ac) |
|
1470 also have "... = f (Suc 0) u - |
|
1471 (f (Suc (Suc n)) u * (z-u) ^ Suc n - of_nat (Suc n) * (z-u) ^ n * f (Suc n) u) / |
|
1472 of_nat (fact (Suc n)) + |
|
1473 f (Suc (Suc n)) u * (z-u) ^ Suc n / of_nat (fact (Suc n)) - f (Suc 0) u" |
|
1474 by (subst setsum_Suc_diff) auto |
|
1475 also have "... = f (Suc n) u * (z-u) ^ n / of_nat (fact n)" |
|
1476 by (simp only: algebra_simps diff_divide_distrib fact_cancel) |
|
1477 finally have "(\<Sum>i = 0..n. (f (Suc i) u * (z - u) ^ i |
|
1478 - of_nat i * (f i u * (z-u) ^ (i - Suc 0))) / of_nat (fact i)) = |
|
1479 f (Suc n) u * (z - u) ^ n / of_nat (fact n)" . |
|
1480 then have "((\<lambda>u. \<Sum>i = 0..n. f i u * (z - u) ^ i / of_nat (fact i)) has_field_derivative |
|
1481 f (Suc n) u * (z - u) ^ n / of_nat (fact n)) (at u)" |
|
1482 apply (intro DERIV_intros)+ |
|
1483 apply (force intro: u assms) |
|
1484 apply (rule refl)+ |
|
1485 apply (auto simp: mult_ac) |
|
1486 done |
|
1487 } |
|
1488 then show ?thesis |
|
1489 apply (cut_tac complex_mvt_line [of w z "\<lambda>u. \<Sum>i = 0..n. f i u * (z-u) ^ i / of_nat (fact i)" |
|
1490 "\<lambda>u. (f (Suc n) u * (z-u)^n / of_nat (fact n))"]) |
|
1491 apply (auto simp add: intro: open_closed_segment) |
|
1492 done |
|
1493 qed |
|
1494 |
|
1495 text{*Relations among convergence and absolute convergence for power series.*} |
|
1496 lemma abel_lemma: |
|
1497 fixes a :: "nat \<Rightarrow> 'a::real_normed_vector" |
|
1498 assumes r: "0 \<le> r" and r0: "r < r0" and M: "\<And>n. norm(a n) * r0^n \<le> M" |
|
1499 shows "summable (\<lambda>n. norm(a(n)) * r^n)" |
|
1500 proof (rule summable_comparison_test' [of "\<lambda>n. M * (r / r0)^n"]) |
|
1501 show "summable (\<lambda>n. M * (r / r0) ^ n)" |
|
1502 using assms |
|
1503 by (auto simp add: summable_mult summable_geometric) |
|
1504 next |
|
1505 fix n |
|
1506 show "norm (norm (a n) * r ^ n) \<le> M * (r / r0) ^ n" |
|
1507 using r r0 M [of n] |
|
1508 apply (auto simp add: abs_mult field_simps power_divide) |
|
1509 apply (cases "r=0", simp) |
|
1510 apply (cases n, auto) |
|
1511 done |
|
1512 qed |
|
1513 |
|
1514 |
1406 end |
1515 end |