src/HOL/Multivariate_Analysis/Cauchy_Integral_Thm.thy
changeset 61973 0c7e865fa7cb
parent 61945 1135b8de26c3
child 61975 b4b11391c676
equal deleted inserted replaced
61972:a70b89a3e02e 61973:0c7e865fa7cb
  2662         using i yx  by (simp add: contour_integral_unique divide_less_eq)
  2662         using i yx  by (simp add: contour_integral_unique divide_less_eq)
  2663     }
  2663     }
  2664     then have "\<exists>d>0. \<forall>y\<in>s. y \<noteq> x \<and> cmod (y-x) < d \<longrightarrow> cmod (?pathint x y - f x * (y-x)) / cmod (y-x) < e"
  2664     then have "\<exists>d>0. \<forall>y\<in>s. y \<noteq> x \<and> cmod (y-x) < d \<longrightarrow> cmod (?pathint x y - f x * (y-x)) / cmod (y-x) < e"
  2665       using d1 by blast
  2665       using d1 by blast
  2666   }
  2666   }
  2667   then have *: "((\<lambda>y. (contour_integral (linepath x y) f - f x * (y - x)) /\<^sub>R cmod (y - x)) ---> 0) (at x within s)"
  2667   then have *: "((\<lambda>y. (contour_integral (linepath x y) f - f x * (y - x)) /\<^sub>R cmod (y - x)) \<longlongrightarrow> 0) (at x within s)"
  2668     by (simp add: Lim_within dist_norm inverse_eq_divide)
  2668     by (simp add: Lim_within dist_norm inverse_eq_divide)
  2669   show ?thesis
  2669   show ?thesis
  2670     apply (simp add: has_field_derivative_def has_derivative_within bounded_linear_mult_right)
  2670     apply (simp add: has_field_derivative_def has_derivative_within bounded_linear_mult_right)
  2671     apply (rule Lim_transform [OF * Lim_eventually])
  2671     apply (rule Lim_transform [OF * Lim_eventually])
  2672     using linordered_field_no_ub
  2672     using linordered_field_no_ub
  5235   assumes ev_fint: "eventually (\<lambda>n::'a. (f n) contour_integrable_on \<gamma>) F"
  5235   assumes ev_fint: "eventually (\<lambda>n::'a. (f n) contour_integrable_on \<gamma>) F"
  5236       and ev_no: "\<And>e. 0 < e \<Longrightarrow> eventually (\<lambda>n. \<forall>x \<in> path_image \<gamma>. norm(f n x - l x) < e) F"
  5236       and ev_no: "\<And>e. 0 < e \<Longrightarrow> eventually (\<lambda>n. \<forall>x \<in> path_image \<gamma>. norm(f n x - l x) < e) F"
  5237       and noleB: "\<And>t. t \<in> {0..1} \<Longrightarrow> norm (vector_derivative \<gamma> (at t)) \<le> B"
  5237       and noleB: "\<And>t. t \<in> {0..1} \<Longrightarrow> norm (vector_derivative \<gamma> (at t)) \<le> B"
  5238       and \<gamma>: "valid_path \<gamma>"
  5238       and \<gamma>: "valid_path \<gamma>"
  5239       and [simp]: "~ (trivial_limit F)"
  5239       and [simp]: "~ (trivial_limit F)"
  5240   shows "l contour_integrable_on \<gamma>" "((\<lambda>n. contour_integral \<gamma> (f n)) ---> contour_integral \<gamma> l) F"
  5240   shows "l contour_integrable_on \<gamma>" "((\<lambda>n. contour_integral \<gamma> (f n)) \<longlongrightarrow> contour_integral \<gamma> l) F"
  5241 proof -
  5241 proof -
  5242   have "0 \<le> B" by (meson noleB [of 0] atLeastAtMost_iff norm_ge_zero order_refl order_trans zero_le_one)
  5242   have "0 \<le> B" by (meson noleB [of 0] atLeastAtMost_iff norm_ge_zero order_refl order_trans zero_le_one)
  5243   { fix e::real
  5243   { fix e::real
  5244     assume "0 < e"
  5244     assume "0 < e"
  5245     then have eB: "0 < e / (\<bar>B\<bar> + 1)" by simp
  5245     then have eB: "0 < e / (\<bar>B\<bar> + 1)" by simp
  5290       apply (rule le_less_trans [OF integral_norm_bound_integral ie])
  5290       apply (rule le_less_trans [OF integral_norm_bound_integral ie])
  5291       apply (simp add: lintg integrable_diff contour_integrable_on [symmetric])
  5291       apply (simp add: lintg integrable_diff contour_integrable_on [symmetric])
  5292       apply (blast intro: *)+
  5292       apply (blast intro: *)+
  5293       done
  5293       done
  5294   }
  5294   }
  5295   then show "((\<lambda>n. contour_integral \<gamma> (f n)) ---> contour_integral \<gamma> l) F"
  5295   then show "((\<lambda>n. contour_integral \<gamma> (f n)) \<longlongrightarrow> contour_integral \<gamma> l) F"
  5296     by (rule tendstoI)
  5296     by (rule tendstoI)
  5297 qed
  5297 qed
  5298 
  5298 
  5299 proposition contour_integral_uniform_limit_circlepath:
  5299 proposition contour_integral_uniform_limit_circlepath:
  5300   assumes ev_fint: "eventually (\<lambda>n::'a. (f n) contour_integrable_on (circlepath z r)) F"
  5300   assumes ev_fint: "eventually (\<lambda>n::'a. (f n) contour_integrable_on (circlepath z r)) F"
  5301       and ev_no: "\<And>e. 0 < e \<Longrightarrow> eventually (\<lambda>n. \<forall>x \<in> path_image (circlepath z r). norm(f n x - l x) < e) F"
  5301       and ev_no: "\<And>e. 0 < e \<Longrightarrow> eventually (\<lambda>n. \<forall>x \<in> path_image (circlepath z r). norm(f n x - l x) < e) F"
  5302       and [simp]: "~ (trivial_limit F)" "0 < r"
  5302       and [simp]: "~ (trivial_limit F)" "0 < r"
  5303   shows "l contour_integrable_on (circlepath z r)" "((\<lambda>n. contour_integral (circlepath z r) (f n)) ---> contour_integral (circlepath z r) l) F"
  5303   shows "l contour_integrable_on (circlepath z r)" "((\<lambda>n. contour_integral (circlepath z r) (f n)) \<longlongrightarrow> contour_integral (circlepath z r) l) F"
  5304 by (auto simp: vector_derivative_circlepath norm_mult intro: contour_integral_uniform_limit assms)
  5304 by (auto simp: vector_derivative_circlepath norm_mult intro: contour_integral_uniform_limit assms)
  5305 
  5305 
  5306 
  5306 
  5307 subsection\<open> General stepping result for derivative formulas.\<close>
  5307 subsection\<open> General stepping result for derivative formulas.\<close>
  5308 
  5308 
  6154 subsection\<open>The Liouville theorem and the Fundamental Theorem of Algebra.\<close>
  6154 subsection\<open>The Liouville theorem and the Fundamental Theorem of Algebra.\<close>
  6155 
  6155 
  6156 text\<open> These weak Liouville versions don't even need the derivative formula.\<close>
  6156 text\<open> These weak Liouville versions don't even need the derivative formula.\<close>
  6157 
  6157 
  6158 lemma Liouville_weak_0: 
  6158 lemma Liouville_weak_0: 
  6159   assumes holf: "f holomorphic_on UNIV" and inf: "(f ---> 0) at_infinity"
  6159   assumes holf: "f holomorphic_on UNIV" and inf: "(f \<longlongrightarrow> 0) at_infinity"
  6160     shows "f z = 0"
  6160     shows "f z = 0"
  6161 proof (rule ccontr)
  6161 proof (rule ccontr)
  6162   assume fz: "f z \<noteq> 0"
  6162   assume fz: "f z \<noteq> 0"
  6163   with inf [unfolded Lim_at_infinity, rule_format, of "norm(f z)/2"]
  6163   with inf [unfolded Lim_at_infinity, rule_format, of "norm(f z)/2"]
  6164   obtain B where B: "\<And>x. B \<le> cmod x \<Longrightarrow> norm (f x) * 2 < cmod (f z)"
  6164   obtain B where B: "\<And>x. B \<le> cmod x \<Longrightarrow> norm (f x) * 2 < cmod (f z)"
  6180     using has_contour_integral_bound_circlepath [OF *, of "norm(f z)/2/R"]
  6180     using has_contour_integral_bound_circlepath [OF *, of "norm(f z)/2/R"]
  6181     by (auto simp: norm_mult norm_divide divide_simps)
  6181     by (auto simp: norm_mult norm_divide divide_simps)
  6182 qed
  6182 qed
  6183 
  6183 
  6184 proposition Liouville_weak: 
  6184 proposition Liouville_weak: 
  6185   assumes "f holomorphic_on UNIV" and "(f ---> l) at_infinity"
  6185   assumes "f holomorphic_on UNIV" and "(f \<longlongrightarrow> l) at_infinity"
  6186     shows "f z = l"
  6186     shows "f z = l"
  6187   using Liouville_weak_0 [of "\<lambda>z. f z - l"]
  6187   using Liouville_weak_0 [of "\<lambda>z. f z - l"]
  6188   by (simp add: assms holomorphic_on_const holomorphic_on_diff LIM_zero)
  6188   by (simp add: assms holomorphic_on_const holomorphic_on_diff LIM_zero)
  6189 
  6189 
  6190 
  6190 
  6193     obtains z where "f z = 0"
  6193     obtains z where "f z = 0"
  6194 proof -
  6194 proof -
  6195   { assume f: "\<And>z. f z \<noteq> 0"
  6195   { assume f: "\<And>z. f z \<noteq> 0"
  6196     have 1: "(\<lambda>x. 1 / f x) holomorphic_on UNIV"
  6196     have 1: "(\<lambda>x. 1 / f x) holomorphic_on UNIV"
  6197       by (simp add: holomorphic_on_divide holomorphic_on_const assms f)
  6197       by (simp add: holomorphic_on_divide holomorphic_on_const assms f)
  6198     have 2: "((\<lambda>x. 1 / f x) ---> 0) at_infinity"
  6198     have 2: "((\<lambda>x. 1 / f x) \<longlongrightarrow> 0) at_infinity"
  6199       apply (rule tendstoI [OF eventually_mono])
  6199       apply (rule tendstoI [OF eventually_mono])
  6200       apply (rule_tac B="2/e" in unbounded)
  6200       apply (rule_tac B="2/e" in unbounded)
  6201       apply (simp add: dist_norm norm_divide divide_simps mult_ac)
  6201       apply (simp add: dist_norm norm_divide divide_simps mult_ac)
  6202       done
  6202       done
  6203     have False
  6203     have False
  6272       apply (rule_tac e1="e * d" in eventually_mono [OF lim])
  6272       apply (rule_tac e1="e * d" in eventually_mono [OF lim])
  6273       apply (force simp: dist_norm intro: dle mult_left_mono less_le_trans)+
  6273       apply (force simp: dist_norm intro: dle mult_left_mono less_le_trans)+
  6274       done
  6274       done
  6275     have g_cint: "(\<lambda>u. g u/(u - w)) contour_integrable_on circlepath z r"
  6275     have g_cint: "(\<lambda>u. g u/(u - w)) contour_integrable_on circlepath z r"
  6276       by (rule contour_integral_uniform_limit_circlepath [OF ev_int ev_less F \<open>0 < r\<close>])
  6276       by (rule contour_integral_uniform_limit_circlepath [OF ev_int ev_less F \<open>0 < r\<close>])
  6277     have cif_tends_cig: "((\<lambda>n. contour_integral(circlepath z r) (\<lambda>u. f n u / (u - w))) ---> contour_integral(circlepath z r) (\<lambda>u. g u/(u - w))) F"
  6277     have cif_tends_cig: "((\<lambda>n. contour_integral(circlepath z r) (\<lambda>u. f n u / (u - w))) \<longlongrightarrow> contour_integral(circlepath z r) (\<lambda>u. g u/(u - w))) F"
  6278       by (rule contour_integral_uniform_limit_circlepath [OF ev_int ev_less F \<open>0 < r\<close>])
  6278       by (rule contour_integral_uniform_limit_circlepath [OF ev_int ev_less F \<open>0 < r\<close>])
  6279     have f_tends_cig: "((\<lambda>n. 2 * of_real pi * ii * f n w) ---> contour_integral (circlepath z r) (\<lambda>u. g u / (u - w))) F"
  6279     have f_tends_cig: "((\<lambda>n. 2 * of_real pi * ii * f n w) \<longlongrightarrow> contour_integral (circlepath z r) (\<lambda>u. g u / (u - w))) F"
  6280       apply (rule Lim_transform_eventually [where f = "\<lambda>n. contour_integral (circlepath z r) (\<lambda>u. f n u/(u - w))"])
  6280       apply (rule Lim_transform_eventually [where f = "\<lambda>n. contour_integral (circlepath z r) (\<lambda>u. f n u/(u - w))"])
  6281       apply (rule eventually_mono [OF cont])
  6281       apply (rule eventually_mono [OF cont])
  6282       apply (rule contour_integral_unique [OF Cauchy_integral_circlepath])
  6282       apply (rule contour_integral_unique [OF Cauchy_integral_circlepath])
  6283       using w
  6283       using w
  6284       apply (auto simp: norm_minus_commute dist_norm cif_tends_cig)
  6284       apply (auto simp: norm_minus_commute dist_norm cif_tends_cig)
  6285       done
  6285       done
  6286     have "((\<lambda>n. 2 * of_real pi * \<i> * f n w) ---> 2 * of_real pi * \<i> * g w) F"
  6286     have "((\<lambda>n. 2 * of_real pi * \<i> * f n w) \<longlongrightarrow> 2 * of_real pi * \<i> * g w) F"
  6287       apply (rule tendsto_mult_left [OF tendstoI])
  6287       apply (rule tendsto_mult_left [OF tendstoI])
  6288       apply (rule eventually_mono [OF lim], assumption)
  6288       apply (rule eventually_mono [OF lim], assumption)
  6289       using w
  6289       using w
  6290       apply (force simp add: dist_norm)
  6290       apply (force simp add: dist_norm)
  6291       done
  6291       done
  6312                                (\<forall>w \<in> ball z r. ((f n) has_field_derivative (f' n w)) (at w))) F"
  6312                                (\<forall>w \<in> ball z r. ((f n) has_field_derivative (f' n w)) (at w))) F"
  6313       and lim: "\<And>e. 0 < e \<Longrightarrow> eventually (\<lambda>n. \<forall>x \<in> cball z r. norm(f n x - g x) < e) F"
  6313       and lim: "\<And>e. 0 < e \<Longrightarrow> eventually (\<lambda>n. \<forall>x \<in> cball z r. norm(f n x - g x) < e) F"
  6314       and F:  "~ trivial_limit F" and "0 < r"
  6314       and F:  "~ trivial_limit F" and "0 < r"
  6315   obtains g' where
  6315   obtains g' where
  6316       "continuous_on (cball z r) g" 
  6316       "continuous_on (cball z r) g" 
  6317       "\<And>w. w \<in> ball z r \<Longrightarrow> (g has_field_derivative (g' w)) (at w) \<and> ((\<lambda>n. f' n w) ---> g' w) F"
  6317       "\<And>w. w \<in> ball z r \<Longrightarrow> (g has_field_derivative (g' w)) (at w) \<and> ((\<lambda>n. f' n w) \<longlongrightarrow> g' w) F"
  6318 proof -
  6318 proof -
  6319   let ?conint = "contour_integral (circlepath z r)"
  6319   let ?conint = "contour_integral (circlepath z r)"
  6320   have g: "continuous_on (cball z r) g" "g holomorphic_on ball z r"
  6320   have g: "continuous_on (cball z r) g" "g holomorphic_on ball z r"
  6321     by (rule holomorphic_uniform_limit [OF eventually_mono [OF cont] lim F]; 
  6321     by (rule holomorphic_uniform_limit [OF eventually_mono [OF cont] lim F]; 
  6322              auto simp: holomorphic_on_open complex_differentiable_def)+
  6322              auto simp: holomorphic_on_open complex_differentiable_def)+
  6323   then obtain g' where g': "\<And>x. x \<in> ball z r \<Longrightarrow> (g has_field_derivative g' x) (at x)"
  6323   then obtain g' where g': "\<And>x. x \<in> ball z r \<Longrightarrow> (g has_field_derivative g' x) (at x)"
  6324     using DERIV_deriv_iff_has_field_derivative
  6324     using DERIV_deriv_iff_has_field_derivative
  6325     by (fastforce simp add: holomorphic_on_open)
  6325     by (fastforce simp add: holomorphic_on_open)
  6326   then have derg: "\<And>x. x \<in> ball z r \<Longrightarrow> deriv g x = g' x"
  6326   then have derg: "\<And>x. x \<in> ball z r \<Longrightarrow> deriv g x = g' x"
  6327     by (simp add: DERIV_imp_deriv)
  6327     by (simp add: DERIV_imp_deriv)
  6328   have tends_f'n_g': "((\<lambda>n. f' n w) ---> g' w) F" if w: "w \<in> ball z r" for w
  6328   have tends_f'n_g': "((\<lambda>n. f' n w) \<longlongrightarrow> g' w) F" if w: "w \<in> ball z r" for w
  6329   proof -
  6329   proof -
  6330     have eq_f': "?conint (\<lambda>x. f n x / (x - w)\<^sup>2) - ?conint (\<lambda>x. g x / (x - w)\<^sup>2) = (f' n w - g' w) * (2 * of_real pi * \<i>)" 
  6330     have eq_f': "?conint (\<lambda>x. f n x / (x - w)\<^sup>2) - ?conint (\<lambda>x. g x / (x - w)\<^sup>2) = (f' n w - g' w) * (2 * of_real pi * \<i>)" 
  6331              if cont_fn: "continuous_on (cball z r) (f n)" 
  6331              if cont_fn: "continuous_on (cball z r) (f n)" 
  6332              and fnd: "\<And>w. w \<in> ball z r \<Longrightarrow> (f n has_field_derivative f' n w) (at w)" for n
  6332              and fnd: "\<And>w. w \<in> ball z r \<Longrightarrow> (f n has_field_derivative f' n w) (at w)" for n
  6333     proof -
  6333     proof -
  6357       apply (rule eventually_mono [OF lim, of "e*d"])
  6357       apply (rule eventually_mono [OF lim, of "e*d"])
  6358       apply (simp add: \<open>0 < d\<close>)
  6358       apply (simp add: \<open>0 < d\<close>)
  6359       apply (force simp add: dist_norm dle intro: less_le_trans)
  6359       apply (force simp add: dist_norm dle intro: less_le_trans)
  6360       done
  6360       done
  6361     have "((\<lambda>n. contour_integral (circlepath z r) (\<lambda>x. f n x / (x - w)\<^sup>2)) 
  6361     have "((\<lambda>n. contour_integral (circlepath z r) (\<lambda>x. f n x / (x - w)\<^sup>2)) 
  6362              ---> contour_integral (circlepath z r) ((\<lambda>x. g x / (x - w)\<^sup>2))) F"
  6362              \<longlongrightarrow> contour_integral (circlepath z r) ((\<lambda>x. g x / (x - w)\<^sup>2))) F"
  6363       by (rule Cauchy_Integral_Thm.contour_integral_uniform_limit_circlepath [OF 1 2 F \<open>0 < r\<close>])
  6363       by (rule Cauchy_Integral_Thm.contour_integral_uniform_limit_circlepath [OF 1 2 F \<open>0 < r\<close>])
  6364     then have tendsto_0: "((\<lambda>n. 1 / (2 * of_real pi * \<i>) * (?conint (\<lambda>x. f n x / (x - w)\<^sup>2) - ?conint (\<lambda>x. g x / (x - w)\<^sup>2))) ---> 0) F"
  6364     then have tendsto_0: "((\<lambda>n. 1 / (2 * of_real pi * \<i>) * (?conint (\<lambda>x. f n x / (x - w)\<^sup>2) - ?conint (\<lambda>x. g x / (x - w)\<^sup>2))) \<longlongrightarrow> 0) F"
  6365       using Lim_null by (force intro!: tendsto_mult_right_zero)
  6365       using Lim_null by (force intro!: tendsto_mult_right_zero)
  6366     have "((\<lambda>n. f' n w - g' w) ---> 0) F"
  6366     have "((\<lambda>n. f' n w - g' w) \<longlongrightarrow> 0) F"
  6367       apply (rule Lim_transform_eventually [OF _ tendsto_0])
  6367       apply (rule Lim_transform_eventually [OF _ tendsto_0])
  6368       apply (force simp add: divide_simps intro: eq_f' eventually_mono [OF cont])
  6368       apply (force simp add: divide_simps intro: eq_f' eventually_mono [OF cont])
  6369       done
  6369       done
  6370     then show ?thesis using Lim_null by blast
  6370     then show ?thesis using Lim_null by blast
  6371   qed
  6371   qed
  6372   obtain g' where "\<And>w. w \<in> ball z r \<Longrightarrow> (g has_field_derivative (g' w)) (at w) \<and> ((\<lambda>n. f' n w) ---> g' w) F"
  6372   obtain g' where "\<And>w. w \<in> ball z r \<Longrightarrow> (g has_field_derivative (g' w)) (at w) \<and> ((\<lambda>n. f' n w) \<longlongrightarrow> g' w) F"
  6373       by (blast intro: tends_f'n_g' g' )
  6373       by (blast intro: tends_f'n_g' g' )
  6374   then show ?thesis using g
  6374   then show ?thesis using g
  6375     using that by blast
  6375     using that by blast
  6376 qed
  6376 qed
  6377 
  6377