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 |