src/HOL/Multivariate_Analysis/Complex_Analysis_Basics.thy
changeset 56238 5d147e1e18d1
parent 56223 7696903b9e61
child 56261 918432e3fcfa
equal deleted inserted replaced
56237:69a9dfe71aed 56238:5d147e1e18d1
    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