src/HOL/Analysis/Cauchy_Integral_Theorem.thy
changeset 70817 dd675800469d
parent 70804 4eef7c6ef7bf
child 71029 934e0044e94b
child 71031 66c025383422
equal deleted inserted replaced
70816:5bc338cee4a0 70817:dd675800469d
   321       then show "g1 +++ g2 \<circ> (\<lambda>x. (x+1) / 2) differentiable at x within {0..1}"
   321       then show "g1 +++ g2 \<circ> (\<lambda>x. (x+1) / 2) differentiable at x within {0..1}"
   322         by (auto intro: differentiable_chain_within)
   322         by (auto intro: differentiable_chain_within)
   323       show "(g1 +++ g2 \<circ> (\<lambda>x. (x + 1) / 2)) x' = g2 x'" if "x' \<in> {0..1}" "dist x' x < dist ((x + 1) / 2) (1/2)" for x'
   323       show "(g1 +++ g2 \<circ> (\<lambda>x. (x + 1) / 2)) x' = g2 x'" if "x' \<in> {0..1}" "dist x' x < dist ((x + 1) / 2) (1/2)" for x'
   324       proof -
   324       proof -
   325         have [simp]: "(2*x'+2)/2 = x'+1"
   325         have [simp]: "(2*x'+2)/2 = x'+1"
   326           by (simp add: divide_simps)
   326           by (simp add: field_split_simps)
   327         show ?thesis
   327         show ?thesis
   328           using that by (auto simp: joinpaths_def)
   328           using that by (auto simp: joinpaths_def)
   329       qed
   329       qed
   330     qed (use that in \<open>auto simp: joinpaths_def\<close>)
   330     qed (use that in \<open>auto simp: joinpaths_def\<close>)
   331   qed
   331   qed
   689   have g2D: "g2 differentiable at x" if "x \<in> {0..1} - insert 0 ((\<lambda>x. 2*x-1) ` S)" for x
   689   have g2D: "g2 differentiable at x" if "x \<in> {0..1} - insert 0 ((\<lambda>x. 2*x-1) ` S)" for x
   690   proof (rule differentiable_transform_within)
   690   proof (rule differentiable_transform_within)
   691     show "g1 +++ g2 \<circ> (\<lambda>x. (x + 1) / 2) differentiable at x"
   691     show "g1 +++ g2 \<circ> (\<lambda>x. (x + 1) / 2) differentiable at x"
   692       using g12D that
   692       using g12D that
   693       apply (simp only: joinpaths_def)
   693       apply (simp only: joinpaths_def)
   694       apply (drule_tac x= "(x+1) / 2" in bspec, force simp: divide_simps)
   694       apply (drule_tac x= "(x+1) / 2" in bspec, force simp: field_split_simps)
   695       apply (rule differentiable_chain_at derivative_intros | force)+
   695       apply (rule differentiable_chain_at derivative_intros | force)+
   696       done
   696       done
   697     show "\<And>x'. dist x' x < dist ((x + 1) / 2) (1/2) \<Longrightarrow> (g1 +++ g2 \<circ> (\<lambda>x. (x + 1) / 2)) x' = g2 x'"
   697     show "\<And>x'. dist x' x < dist ((x + 1) / 2) (1/2) \<Longrightarrow> (g1 +++ g2 \<circ> (\<lambda>x. (x + 1) / 2)) x' = g2 x'"
   698       using that by (auto simp: dist_real_def joinpaths_def field_simps)
   698       using that by (auto simp: dist_real_def joinpaths_def field_simps)
   699     qed (use that in \<open>auto simp: dist_norm\<close>)
   699     qed (use that in \<open>auto simp: dist_norm\<close>)
   700   have [simp]: "vector_derivative (g2 \<circ> (\<lambda>x. 2*x-1)) (at ((x+1)/2)) = 2 *\<^sub>R vector_derivative g2 (at x)"
   700   have [simp]: "vector_derivative (g2 \<circ> (\<lambda>x. 2*x-1)) (at ((x+1)/2)) = 2 *\<^sub>R vector_derivative g2 (at x)"
   701                if "x \<in> {0..1} - insert 0 ((\<lambda>x. 2*x-1) ` S)" for x
   701                if "x \<in> {0..1} - insert 0 ((\<lambda>x. 2*x-1) ` S)" for x
   702     using that  by (auto simp: vector_derivative_chain_at divide_simps g2D)
   702     using that  by (auto simp: vector_derivative_chain_at field_split_simps g2D)
   703   have "continuous_on ({1/2..1} - insert (1/2) S) (\<lambda>x. vector_derivative (g1 +++ g2) (at x))"
   703   have "continuous_on ({1/2..1} - insert (1/2) S) (\<lambda>x. vector_derivative (g1 +++ g2) (at x))"
   704     using co12 by (rule continuous_on_subset) force
   704     using co12 by (rule continuous_on_subset) force
   705   then have coDhalf: "continuous_on ({1/2..1} - insert (1/2) S) (\<lambda>x. vector_derivative (g2 \<circ> (\<lambda>x. 2*x-1)) (at x))"
   705   then have coDhalf: "continuous_on ({1/2..1} - insert (1/2) S) (\<lambda>x. vector_derivative (g2 \<circ> (\<lambda>x. 2*x-1)) (at x))"
   706   proof (rule continuous_on_eq [OF _ vector_derivative_at])
   706   proof (rule continuous_on_eq [OF _ vector_derivative_at])
   707     show "(g1 +++ g2 has_vector_derivative vector_derivative (g2 \<circ> (\<lambda>x. 2 * x - 1)) (at x))
   707     show "(g1 +++ g2 has_vector_derivative vector_derivative (g2 \<circ> (\<lambda>x. 2 * x - 1)) (at x))
  1924   have bc: "(b - c) = (1 - k) *\<^sub>R (b - a)"
  1924   have bc: "(b - c) = (1 - k) *\<^sub>R (b - a)"
  1925     by (simp add: algebra_simps c')
  1925     by (simp add: algebra_simps c')
  1926   { assume *: "((\<lambda>x. f ((1 - x) *\<^sub>R a + x *\<^sub>R c) * (c - a)) has_integral i) {0..1}"
  1926   { assume *: "((\<lambda>x. f ((1 - x) *\<^sub>R a + x *\<^sub>R c) * (c - a)) has_integral i) {0..1}"
  1927     have **: "\<And>x. ((k - x) / k) *\<^sub>R a + (x / k) *\<^sub>R c = (1 - x) *\<^sub>R a + x *\<^sub>R b"
  1927     have **: "\<And>x. ((k - x) / k) *\<^sub>R a + (x / k) *\<^sub>R c = (1 - x) *\<^sub>R a + x *\<^sub>R b"
  1928       using False apply (simp add: c' algebra_simps)
  1928       using False apply (simp add: c' algebra_simps)
  1929       apply (simp add: real_vector.scale_left_distrib [symmetric] divide_simps)
  1929       apply (simp add: real_vector.scale_left_distrib [symmetric] field_split_simps)
  1930       done
  1930       done
  1931     have "((\<lambda>x. f ((1 - x) *\<^sub>R a + x *\<^sub>R b) * (b - a)) has_integral i) {0..k}"
  1931     have "((\<lambda>x. f ((1 - x) *\<^sub>R a + x *\<^sub>R b) * (b - a)) has_integral i) {0..k}"
  1932       using k has_integral_affinity01 [OF *, of "inverse k" "0"]
  1932       using k has_integral_affinity01 [OF *, of "inverse k" "0"]
  1933       apply (simp add: divide_simps mult.commute [of _ "k"] image_affinity_atLeastAtMost ** c)
  1933       apply (simp add: divide_simps mult.commute [of _ "k"] image_affinity_atLeastAtMost ** c)
  1934       apply (auto dest: has_integral_cmul [where c = "inverse k"])
  1934       apply (auto dest: has_integral_cmul [where c = "inverse k"])
  2183   then show ?thesis
  2183   then show ?thesis
  2184   proof cases
  2184   proof cases
  2185     case 1 then have "?\<Phi> a c' b'"
  2185     case 1 then have "?\<Phi> a c' b'"
  2186       using assms
  2186       using assms
  2187       apply (clarsimp simp: c'_def b'_def midpoints_in_convex_hull hull_subset [THEN subsetD])
  2187       apply (clarsimp simp: c'_def b'_def midpoints_in_convex_hull hull_subset [THEN subsetD])
  2188       apply (auto simp: midpoint_def dist_norm scaleR_conv_of_real divide_simps)
  2188       apply (auto simp: midpoint_def dist_norm scaleR_conv_of_real field_split_simps)
  2189       done
  2189       done
  2190     then show ?thesis by blast
  2190     then show ?thesis by blast
  2191   next
  2191   next
  2192     case 2 then  have "?\<Phi> a' c' b"
  2192     case 2 then  have "?\<Phi> a' c' b"
  2193       using assms
  2193       using assms
  2194       apply (clarsimp simp: a'_def c'_def midpoints_in_convex_hull hull_subset [THEN subsetD])
  2194       apply (clarsimp simp: a'_def c'_def midpoints_in_convex_hull hull_subset [THEN subsetD])
  2195       apply (auto simp: midpoint_def dist_norm scaleR_conv_of_real divide_simps)
  2195       apply (auto simp: midpoint_def dist_norm scaleR_conv_of_real field_split_simps)
  2196       done
  2196       done
  2197     then show ?thesis by blast
  2197     then show ?thesis by blast
  2198   next
  2198   next
  2199     case 3 then have "?\<Phi> a' c b'"
  2199     case 3 then have "?\<Phi> a' c b'"
  2200       using assms
  2200       using assms
  2201       apply (clarsimp simp: a'_def b'_def midpoints_in_convex_hull hull_subset [THEN subsetD])
  2201       apply (clarsimp simp: a'_def b'_def midpoints_in_convex_hull hull_subset [THEN subsetD])
  2202       apply (auto simp: midpoint_def dist_norm scaleR_conv_of_real divide_simps)
  2202       apply (auto simp: midpoint_def dist_norm scaleR_conv_of_real field_split_simps)
  2203       done
  2203       done
  2204     then show ?thesis by blast
  2204     then show ?thesis by blast
  2205   next
  2205   next
  2206     case 4 then have "?\<Phi> a' b' c'"
  2206     case 4 then have "?\<Phi> a' b' c'"
  2207       using assms
  2207       using assms
  2208       apply (clarsimp simp: a'_def c'_def b'_def midpoints_in_convex_hull hull_subset [THEN subsetD])
  2208       apply (clarsimp simp: a'_def c'_def b'_def midpoints_in_convex_hull hull_subset [THEN subsetD])
  2209       apply (auto simp: midpoint_def dist_norm scaleR_conv_of_real divide_simps)
  2209       apply (auto simp: midpoint_def dist_norm scaleR_conv_of_real field_split_simps)
  2210       done
  2210       done
  2211     then show ?thesis by blast
  2211     then show ?thesis by blast
  2212   qed
  2212   qed
  2213 qed
  2213 qed
  2214 
  2214 
  2574           using e by (simp add: shrink_def real_vector.scale_right_diff_distrib [symmetric])
  2574           using e by (simp add: shrink_def real_vector.scale_right_diff_distrib [symmetric])
  2575         have sh_eq: "\<And>a b d::complex. (b - e *\<^sub>R (b - d)) - (a - e *\<^sub>R (a - d)) - (b - a) = e *\<^sub>R (a - b)"
  2575         have sh_eq: "\<And>a b d::complex. (b - e *\<^sub>R (b - d)) - (a - e *\<^sub>R (a - d)) - (b - a) = e *\<^sub>R (a - b)"
  2576           by (simp add: algebra_simps)
  2576           by (simp add: algebra_simps)
  2577         have "cmod y / (24 * C) \<le> cmod y / cmod (b - a) / 12"
  2577         have "cmod y / (24 * C) \<le> cmod y / cmod (b - a) / 12"
  2578           using False \<open>C>0\<close> diff_2C [of b a] ynz
  2578           using False \<open>C>0\<close> diff_2C [of b a] ynz
  2579           by (auto simp: divide_simps hull_inc)
  2579           by (auto simp: field_split_simps hull_inc)
  2580         have less_C: "\<lbrakk>u \<in> convex hull {a, b, c}; 0 \<le> x; x \<le> 1\<rbrakk> \<Longrightarrow> x * cmod u < C" for x u
  2580         have less_C: "\<lbrakk>u \<in> convex hull {a, b, c}; 0 \<le> x; x \<le> 1\<rbrakk> \<Longrightarrow> x * cmod u < C" for x u
  2581           apply (cases "x=0", simp add: \<open>0<C\<close>)
  2581           apply (cases "x=0", simp add: \<open>0<C\<close>)
  2582           using Cno [of u] mult_left_le_one_le [of "cmod u" x] le_less_trans norm_ge_zero by blast
  2582           using Cno [of u] mult_left_le_one_le [of "cmod u" x] le_less_trans norm_ge_zero by blast
  2583         { fix u v
  2583         { fix u v
  2584           assume uv: "u \<in> convex hull {a, b, c}" "v \<in> convex hull {a, b, c}" "u\<noteq>v"
  2584           assume uv: "u \<in> convex hull {a, b, c}" "v \<in> convex hull {a, b, c}" "u\<noteq>v"
  2608             have "cmod (f (linepath (shrink u) (shrink v) x) - f (linepath u v x)) < cmod y / (24 * C)"
  2608             have "cmod (f (linepath (shrink u) (shrink v) x) - f (linepath u v x)) < cmod y / (24 * C)"
  2609               using x uv shr_uv cmod_less_dt
  2609               using x uv shr_uv cmod_less_dt
  2610               by (auto simp: hull_inc intro: d1 interior_subset [THEN subsetD] linepath_in_convex_hull)
  2610               by (auto simp: hull_inc intro: d1 interior_subset [THEN subsetD] linepath_in_convex_hull)
  2611             also have "\<dots> \<le> cmod y / cmod (v - u) / 12"
  2611             also have "\<dots> \<le> cmod y / cmod (v - u) / 12"
  2612               using False uv \<open>C>0\<close> diff_2C [of v u] ynz
  2612               using False uv \<open>C>0\<close> diff_2C [of v u] ynz
  2613               by (auto simp: divide_simps hull_inc)
  2613               by (auto simp: field_split_simps hull_inc)
  2614             finally have "cmod (f (linepath (shrink u) (shrink v) x) - f (linepath u v x)) \<le> cmod y / cmod (v - u) / 12"
  2614             finally have "cmod (f (linepath (shrink u) (shrink v) x) - f (linepath u v x)) \<le> cmod y / cmod (v - u) / 12"
  2615               by simp
  2615               by simp
  2616             then have cmod_12_le: "cmod (v - u) * cmod (f (linepath (shrink u) (shrink v) x) - f (linepath u v x)) * 12 \<le> cmod y"
  2616             then have cmod_12_le: "cmod (v - u) * cmod (f (linepath (shrink u) (shrink v) x) - f (linepath u v x)) * 12 \<le> cmod y"
  2617               using uv False by (auto simp: field_simps)
  2617               using uv False by (auto simp: field_simps)
  2618             have "cmod (f (linepath (shrink u) (shrink v) x)) * cmod (shrink v - shrink u - (v - u)) +
  2618             have "cmod (f (linepath (shrink u) (shrink v) x)) * cmod (shrink v - shrink u - (v - u)) +
  3991       using eq winding_number_valid_path by force
  3991       using eq winding_number_valid_path by force
  3992   have iff: "(winding_number \<gamma> z \<in> \<int>) \<longleftrightarrow> (exp (contour_integral p (\<lambda>w. 1 / (w - z))) = 1)"
  3992   have iff: "(winding_number \<gamma> z \<in> \<int>) \<longleftrightarrow> (exp (contour_integral p (\<lambda>w. 1 / (w - z))) = 1)"
  3993     using eq by (simp add: exp_eq_1 complex_is_Int_iff)
  3993     using eq by (simp add: exp_eq_1 complex_is_Int_iff)
  3994   have "exp (contour_integral p (\<lambda>w. 1 / (w - z))) = (\<gamma> 1 - z) / (\<gamma> 0 - z)"
  3994   have "exp (contour_integral p (\<lambda>w. 1 / (w - z))) = (\<gamma> 1 - z) / (\<gamma> 0 - z)"
  3995     using p winding_number_exp_integral(2) [of p 0 1 z]
  3995     using p winding_number_exp_integral(2) [of p 0 1 z]
  3996     apply (simp add: valid_path_def path_defs contour_integral_integral exp_minus divide_simps)
  3996     apply (simp add: valid_path_def path_defs contour_integral_integral exp_minus field_split_simps)
  3997     by (metis path_image_def pathstart_def pathstart_in_path_image)
  3997     by (metis path_image_def pathstart_def pathstart_in_path_image)
  3998   then have "winding_number p z \<in> \<int> \<longleftrightarrow> pathfinish p = pathstart p"
  3998   then have "winding_number p z \<in> \<int> \<longleftrightarrow> pathfinish p = pathstart p"
  3999     using p wneq iff by (auto simp: path_defs)
  3999     using p wneq iff by (auto simp: path_defs)
  4000   then show ?thesis using p eq
  4000   then show ?thesis using p eq
  4001     by (auto simp: winding_number_valid_path)
  4001     by (auto simp: winding_number_valid_path)
  4526     then obtain d where "d>0" and d: "\<And>x'. dist x' z < d \<Longrightarrow> dist (winding_number \<gamma> x') (winding_number \<gamma> z) < \<bar>Re(winding_number \<gamma> z)\<bar> - 1/2"
  4526     then obtain d where "d>0" and d: "\<And>x'. dist x' z < d \<Longrightarrow> dist (winding_number \<gamma> x') (winding_number \<gamma> z) < \<bar>Re(winding_number \<gamma> z)\<bar> - 1/2"
  4527       using continuous_at_eps_delta wnz_12 diff_gt_0_iff_gt by blast
  4527       using continuous_at_eps_delta wnz_12 diff_gt_0_iff_gt by blast
  4528     define z' where "z' = z - (d / (2 * cmod a)) *\<^sub>R a"
  4528     define z' where "z' = z - (d / (2 * cmod a)) *\<^sub>R a"
  4529     have *: "a \<bullet> z' \<le> b - d / 3 * cmod a"
  4529     have *: "a \<bullet> z' \<le> b - d / 3 * cmod a"
  4530       unfolding z'_def inner_mult_right' divide_inverse
  4530       unfolding z'_def inner_mult_right' divide_inverse
  4531       apply (simp add: divide_simps algebra_simps dot_square_norm power2_eq_square anz)
  4531       apply (simp add: field_split_simps algebra_simps dot_square_norm power2_eq_square anz)
  4532       apply (metis \<open>0 < d\<close> add_increasing azb less_eq_real_def mult_nonneg_nonneg mult_right_mono norm_ge_zero norm_numeral)
  4532       apply (metis \<open>0 < d\<close> add_increasing azb less_eq_real_def mult_nonneg_nonneg mult_right_mono norm_ge_zero norm_numeral)
  4533       done
  4533       done
  4534     have "cmod (winding_number \<gamma> z' - winding_number \<gamma> z) < \<bar>Re (winding_number \<gamma> z)\<bar> - 1/2"
  4534     have "cmod (winding_number \<gamma> z' - winding_number \<gamma> z) < \<bar>Re (winding_number \<gamma> z)\<bar> - 1/2"
  4535       using d [of z'] anz \<open>d>0\<close> by (simp add: dist_norm z'_def)
  4535       using d [of z'] anz \<open>d>0\<close> by (simp add: dist_norm z'_def)
  4536     then have "1/2 < \<bar>Re (winding_number \<gamma> z)\<bar> - cmod (winding_number \<gamma> z' - winding_number \<gamma> z)"
  4536     then have "1/2 < \<bar>Re (winding_number \<gamma> z)\<bar> - cmod (winding_number \<gamma> z' - winding_number \<gamma> z)"
  4540     then have wnz_12': "\<bar>Re (winding_number \<gamma> z')\<bar> > 1/2"
  4540     then have wnz_12': "\<bar>Re (winding_number \<gamma> z')\<bar> > 1/2"
  4541       by linarith
  4541       by linarith
  4542     moreover have "\<bar>Re (winding_number \<gamma> z')\<bar> < 1/2"
  4542     moreover have "\<bar>Re (winding_number \<gamma> z')\<bar> < 1/2"
  4543       apply (rule winding_number_lt_half [OF \<gamma> *])
  4543       apply (rule winding_number_lt_half [OF \<gamma> *])
  4544       using azb \<open>d>0\<close> pag
  4544       using azb \<open>d>0\<close> pag
  4545       apply (auto simp: add_strict_increasing anz divide_simps algebra_simps dest!: subsetD)
  4545       apply (auto simp: add_strict_increasing anz field_split_simps algebra_simps dest!: subsetD)
  4546       done
  4546       done
  4547     ultimately have False
  4547     ultimately have False
  4548       by simp
  4548       by simp
  4549   }
  4549   }
  4550   then show ?thesis by force
  4550   then show ?thesis by force
  4618     apply (rule derivative_intros fcd | simp)+
  4618     apply (rule derivative_intros fcd | simp)+
  4619     done
  4619     done
  4620   show ?thesis
  4620   show ?thesis
  4621     apply (rule has_contour_integral_eq)
  4621     apply (rule has_contour_integral_eq)
  4622     using znotin has_contour_integral_add [OF has_contour_integral_lmul [OF has_contour_integral_winding_number [OF vpg znotin], of "f z"] *]
  4622     using znotin has_contour_integral_add [OF has_contour_integral_lmul [OF has_contour_integral_winding_number [OF vpg znotin], of "f z"] *]
  4623     apply (auto simp: mult_ac divide_simps)
  4623     apply (auto simp: ac_simps divide_simps)
  4624     done
  4624     done
  4625 qed
  4625 qed
  4626 
  4626 
  4627 theorem Cauchy_integral_formula_convex_simple:
  4627 theorem Cauchy_integral_formula_convex_simple:
  4628     "\<lbrakk>convex s; f holomorphic_on s; z \<in> interior s; valid_path \<gamma>; path_image \<gamma> \<subseteq> s - {z};
  4628     "\<lbrakk>convex s; f holomorphic_on s; z \<in> interior s; valid_path \<gamma>; path_image \<gamma> \<subseteq> s - {z};
  5007   { fix z
  5007   { fix z
  5008     assume "s \<le> z" "z \<le> t"
  5008     assume "s \<le> z" "z \<le> t"
  5009     then have "z + of_real r * exp (\<i> * of_real z) \<in> (\<lambda>x. z + of_real r * exp (\<i> * linepath s t x)) ` {0..1}"
  5009     then have "z + of_real r * exp (\<i> * of_real z) \<in> (\<lambda>x. z + of_real r * exp (\<i> * linepath s t x)) ` {0..1}"
  5010       apply (rule_tac x="(z - s)/(t - s)" in image_eqI)
  5010       apply (rule_tac x="(z - s)/(t - s)" in image_eqI)
  5011       apply (simp add: linepath_def scaleR_conv_of_real divide_simps exp_eq)
  5011       apply (simp add: linepath_def scaleR_conv_of_real divide_simps exp_eq)
  5012       apply (auto simp: algebra_simps divide_simps)
  5012       apply (auto simp: field_split_simps)
  5013       done
  5013       done
  5014   }
  5014   }
  5015   ultimately show ?thesis
  5015   ultimately show ?thesis
  5016     by (fastforce simp add: path_image_def part_circlepath_def)
  5016     by (fastforce simp add: path_image_def part_circlepath_def)
  5017 qed
  5017 qed
  5146 next
  5146 next
  5147   case False
  5147   case False
  5148   have *: "finite {x. cmod (complex_of_real (2 * real_of_int x * pi) * \<i>) \<le> b + cmod (Ln w)}"
  5148   have *: "finite {x. cmod (complex_of_real (2 * real_of_int x * pi) * \<i>) \<le> b + cmod (Ln w)}"
  5149     apply (simp add: norm_mult finite_int_iff_bounded_le)
  5149     apply (simp add: norm_mult finite_int_iff_bounded_le)
  5150     apply (rule_tac x="\<lfloor>(b + cmod (Ln w)) / (2*pi)\<rfloor>" in exI)
  5150     apply (rule_tac x="\<lfloor>(b + cmod (Ln w)) / (2*pi)\<rfloor>" in exI)
  5151     apply (auto simp: divide_simps le_floor_iff)
  5151     apply (auto simp: field_split_simps le_floor_iff)
  5152     done
  5152     done
  5153   have [simp]: "\<And>P f. {z. P z \<and> (\<exists>n. z = f n)} = f ` {n. P (f n)}"
  5153   have [simp]: "\<And>P f. {z. P z \<and> (\<exists>n. z = f n)} = f ` {n. P (f n)}"
  5154     by blast
  5154     by blast
  5155   show ?thesis
  5155   show ?thesis
  5156     apply (subst exp_Ln [OF False, symmetric])
  5156     apply (subst exp_Ln [OF False, symmetric])
  5272   have 1: "\<bar>s - t\<bar> \<le> 2 * pi"
  5272   have 1: "\<bar>s - t\<bar> \<le> 2 * pi"
  5273     if "\<And>x. 0 \<le> x \<and> x \<le> 1 \<Longrightarrow> (\<exists>n. x * (t - s) = 2 * (real_of_int n * pi)) \<longrightarrow> x = 0 \<or> x = 1"
  5273     if "\<And>x. 0 \<le> x \<and> x \<le> 1 \<Longrightarrow> (\<exists>n. x * (t - s) = 2 * (real_of_int n * pi)) \<longrightarrow> x = 0 \<or> x = 1"
  5274   proof (rule ccontr)
  5274   proof (rule ccontr)
  5275     assume "\<not> \<bar>s - t\<bar> \<le> 2 * pi"
  5275     assume "\<not> \<bar>s - t\<bar> \<le> 2 * pi"
  5276     then have *: "\<And>n. t - s \<noteq> of_int n * \<bar>s - t\<bar>"
  5276     then have *: "\<And>n. t - s \<noteq> of_int n * \<bar>s - t\<bar>"
  5277       using False that [of "2*pi / \<bar>t - s\<bar>"] by (simp add: abs_minus_commute divide_simps)
  5277       using False that [of "2*pi / \<bar>t - s\<bar>"]
       
  5278       by (simp add: abs_minus_commute divide_simps)
  5278     show False
  5279     show False
  5279       using * [of 1] * [of "-1"] by auto
  5280       using * [of 1] * [of "-1"] by auto
  5280   qed
  5281   qed
  5281   have 2: "\<bar>s - t\<bar> = \<bar>2 * (real_of_int n * pi) / x\<bar>" if "x \<noteq> 0" "x * (t - s) = 2 * (real_of_int n * pi)" for x n
  5282   have 2: "\<bar>s - t\<bar> = \<bar>2 * (real_of_int n * pi) / x\<bar>" if "x \<noteq> 0" "x * (t - s) = 2 * (real_of_int n * pi)" for x n
  5282   proof -
  5283   proof -
  5290     apply (simp add: simple_path_def)
  5291     apply (simp add: simple_path_def)
  5291     apply (simp add: part_circlepath_def linepath_def exp_eq  * ** abs01  del: Set.insert_iff)
  5292     apply (simp add: part_circlepath_def linepath_def exp_eq  * ** abs01  del: Set.insert_iff)
  5292     apply (subst abs_away)
  5293     apply (subst abs_away)
  5293     apply (auto simp: 1)
  5294     apply (auto simp: 1)
  5294     apply (rule ccontr)
  5295     apply (rule ccontr)
  5295     apply (auto simp: 2 divide_simps abs_mult dest: of_int_leD)
  5296     apply (auto simp: 2 field_split_simps abs_mult dest: of_int_leD)
  5296     done
  5297     done
  5297 qed
  5298 qed
  5298 
  5299 
  5299 lemma arc_part_circlepath:
  5300 lemma arc_part_circlepath:
  5300   assumes "r \<noteq> 0" "s \<noteq> t" "\<bar>s - t\<bar> < 2*pi"
  5301   assumes "r \<noteq> 0" "s \<noteq> t" "\<bar>s - t\<bar> < 2*pi"
  5406       using cis_conv_exp complex_eq_iff by auto
  5407       using cis_conv_exp complex_eq_iff by auto
  5407     show ?thesis
  5408     show ?thesis
  5408       apply (rule sincos_total_2pi [of "Re(w/of_real(norm w))" "Im(w/of_real(norm w))"])
  5409       apply (rule sincos_total_2pi [of "Re(w/of_real(norm w))" "Im(w/of_real(norm w))"])
  5409       apply (simp add: divide_simps \<open>w \<noteq> 0\<close> cmod_power2 [symmetric])
  5410       apply (simp add: divide_simps \<open>w \<noteq> 0\<close> cmod_power2 [symmetric])
  5410       apply (rule_tac x="t / (2*pi)" in image_eqI)
  5411       apply (rule_tac x="t / (2*pi)" in image_eqI)
  5411       apply (simp add: divide_simps \<open>w \<noteq> 0\<close>)
  5412       apply (simp add: field_simps \<open>w \<noteq> 0\<close>)
  5412       using False **
  5413       using False **
  5413       apply (auto simp: w_def)
  5414       apply (auto simp: w_def)
  5414       done
  5415       done
  5415   qed
  5416   qed
  5416   show ?thesis
  5417   show ?thesis
  5563     obtain a where fga: "\<And>x. x \<in> {0..1} \<Longrightarrow> cmod (f a (\<gamma> x) - l (\<gamma> x)) < e / (\<bar>B\<bar> + 1)"
  5564     obtain a where fga: "\<And>x. x \<in> {0..1} \<Longrightarrow> cmod (f a (\<gamma> x) - l (\<gamma> x)) < e / (\<bar>B\<bar> + 1)"
  5564                and inta: "(\<lambda>t. f a (\<gamma> t) * vector_derivative \<gamma> (at t)) integrable_on {0..1}"
  5565                and inta: "(\<lambda>t. f a (\<gamma> t) * vector_derivative \<gamma> (at t)) integrable_on {0..1}"
  5565       using eventually_happens [OF eventually_conj]
  5566       using eventually_happens [OF eventually_conj]
  5566       by (fastforce simp: contour_integrable_on path_image_def)
  5567       by (fastforce simp: contour_integrable_on path_image_def)
  5567     have Ble: "B * e / (\<bar>B\<bar> + 1) \<le> e"
  5568     have Ble: "B * e / (\<bar>B\<bar> + 1) \<le> e"
  5568       using \<open>0 \<le> B\<close>  \<open>0 < e\<close> by (simp add: divide_simps)
  5569       using \<open>0 \<le> B\<close>  \<open>0 < e\<close> by (simp add: field_split_simps)
  5569     have "\<exists>h. (\<forall>x\<in>{0..1}. cmod (l (\<gamma> x) * vector_derivative \<gamma> (at x) - h x) \<le> e) \<and> h integrable_on {0..1}"
  5570     have "\<exists>h. (\<forall>x\<in>{0..1}. cmod (l (\<gamma> x) * vector_derivative \<gamma> (at x) - h x) \<le> e) \<and> h integrable_on {0..1}"
  5570     proof (intro exI conjI ballI)
  5571     proof (intro exI conjI ballI)
  5571       show "cmod (l (\<gamma> x) * vector_derivative \<gamma> (at x) - f a (\<gamma> x) * vector_derivative \<gamma> (at x)) \<le> e"
  5572       show "cmod (l (\<gamma> x) * vector_derivative \<gamma> (at x) - f a (\<gamma> x) * vector_derivative \<gamma> (at x)) \<le> e"
  5572         if "x \<in> {0..1}" for x
  5573         if "x \<in> {0..1}" for x
  5573         apply (rule order_trans [OF _ Ble])
  5574         apply (rule order_trans [OF _ Ble])
  5691           apply (rule derivative_eq_intros | simp add: km1 | simp add: field_simps neq neqq)+
  5692           apply (rule derivative_eq_intros | simp add: km1 | simp add: field_simps neq neqq)+
  5692           done
  5693           done
  5693       qed
  5694       qed
  5694       { fix a::real and b::real assume ab: "a > 0" "b > 0"
  5695       { fix a::real and b::real assume ab: "a > 0" "b > 0"
  5695         then have "k * (1 + real k) * (1 / a) \<le> k * (1 + real k) * (4 / b) \<longleftrightarrow> b \<le> 4 * a"
  5696         then have "k * (1 + real k) * (1 / a) \<le> k * (1 + real k) * (4 / b) \<longleftrightarrow> b \<le> 4 * a"
  5696           by (subst mult_le_cancel_left_pos) (use \<open>k \<noteq> 0\<close> in \<open>auto simp: divide_simps\<close>)
  5697           by (subst mult_le_cancel_left_pos)
       
  5698             (use \<open>k \<noteq> 0\<close> in \<open>auto simp: divide_simps\<close>)
  5697         with ab have "real k * (1 + real k) / a \<le> (real k * 4 + real k * real k * 4) / b \<longleftrightarrow> b \<le> 4 * a"
  5699         with ab have "real k * (1 + real k) / a \<le> (real k * 4 + real k * real k * 4) / b \<longleftrightarrow> b \<le> 4 * a"
  5698           by (simp add: field_simps)
  5700           by (simp add: field_simps)
  5699       } note canc = this
  5701       } note canc = this
  5700       have ff2: "cmod (ff (Suc 1) v) \<le> real (k * (k + 1)) / (d/2) ^ (k + 2)"
  5702       have ff2: "cmod (ff (Suc 1) v) \<le> real (k * (k + 1)) / (d/2) ^ (k + 2)"
  5701                 if "v \<in> ball w (d/2)" for v
  5703                 if "v \<in> ball w (d/2)" for v
  5704           by (metis that norm_minus_commute norm_triangle_half_r dist_norm mem_ball)
  5706           by (metis that norm_minus_commute norm_triangle_half_r dist_norm mem_ball)
  5705         have "d/2 \<le> cmod (x - v)" using d x that
  5707         have "d/2 \<le> cmod (x - v)" using d x that
  5706           using lessd d x
  5708           using lessd d x
  5707           by (auto simp add: dist_norm path_image_def ball_def not_less [symmetric] del: divide_const_simps)
  5709           by (auto simp add: dist_norm path_image_def ball_def not_less [symmetric] del: divide_const_simps)
  5708         then have "d \<le> cmod (x - v) * 2"
  5710         then have "d \<le> cmod (x - v) * 2"
  5709           by (simp add: divide_simps)
  5711           by (simp add: field_split_simps)
  5710         then have dpow_le: "d ^ (k+2) \<le> (cmod (x - v) * 2) ^ (k+2)"
  5712         then have dpow_le: "d ^ (k+2) \<le> (cmod (x - v) * 2) ^ (k+2)"
  5711           using \<open>0 < d\<close> order_less_imp_le power_mono by blast
  5713           using \<open>0 < d\<close> order_less_imp_le power_mono by blast
  5712         have "x \<noteq> v" using that
  5714         have "x \<noteq> v" using that
  5713           using \<open>x \<in> path_image \<gamma>\<close> ball_divide_subset_numeral d by fastforce
  5715           using \<open>x \<in> path_image \<gamma>\<close> ball_divide_subset_numeral d by fastforce
  5714         then show ?thesis
  5716         then show ?thesis
  5715         using \<open>d > 0\<close> apply (simp add: ff_def norm_mult norm_divide norm_power dist_norm canc)
  5717         using \<open>d > 0\<close> apply (simp add: ff_def norm_mult norm_divide norm_power dist_norm canc)
  5716         using dpow_le apply (simp add: algebra_simps divide_simps mult_less_0_iff)
  5718         using dpow_le apply (simp add: algebra_simps field_split_simps mult_less_0_iff)
  5717         done
  5719         done
  5718       qed
  5720       qed
  5719       have ub: "u \<in> ball w (d/2)"
  5721       have ub: "u \<in> ball w (d/2)"
  5720         using uwd by (simp add: dist_commute dist_norm)
  5722         using uwd by (simp add: dist_commute dist_norm)
  5721       have "cmod (inverse (x - u) ^ k - (inverse (x - w) ^ k + of_nat k * (u - w) / ((x - w) * (x - w) ^ k)))
  5723       have "cmod (inverse (x - u) ^ k - (inverse (x - w) ^ k + of_nat k * (u - w) / ((x - w) * (x - w) ^ k)))
  6368     using Cauchy_has_contour_integral_higher_derivative_circlepath [OF assms]
  6370     using Cauchy_has_contour_integral_higher_derivative_circlepath [OF assms]
  6369     by simp
  6371     by simp
  6370   show ?thes1 using *
  6372   show ?thes1 using *
  6371     using contour_integrable_on_def by blast
  6373     using contour_integrable_on_def by blast
  6372   show ?thes2
  6374   show ?thes2
  6373     unfolding contour_integral_unique [OF *] by (simp add: divide_simps)
  6375     unfolding contour_integral_unique [OF *] by (simp add: field_split_simps)
  6374 qed
  6376 qed
  6375 
  6377 
  6376 corollary Cauchy_contour_integral_circlepath:
  6378 corollary Cauchy_contour_integral_circlepath:
  6377   assumes "continuous_on (cball z r) f" "f holomorphic_on ball z r" "w \<in> ball z r"
  6379   assumes "continuous_on (cball z r) f" "f holomorphic_on ball z r" "w \<in> ball z r"
  6378     shows "contour_integral(circlepath z r) (\<lambda>u. f u/(u - w)^(Suc k)) = (2 * pi * \<i>) * (deriv ^^ k) f w / (fact k)"
  6380     shows "contour_integral(circlepath z r) (\<lambda>u. f u/(u - w)^(Suc k)) = (2 * pi * \<i>) * (deriv ^^ k) f w / (fact k)"
  6459       also have "\<dots> < e * k"
  6461       also have "\<dots> < e * k"
  6460         using \<open>0 < B\<close> N by (simp add: divide_simps)
  6462         using \<open>0 < B\<close> N by (simp add: divide_simps)
  6461       also have "\<dots> \<le> e * norm (u - w)"
  6463       also have "\<dots> \<le> e * norm (u - w)"
  6462         using r kle \<open>0 < e\<close> by (simp add: dist_commute dist_norm)
  6464         using r kle \<open>0 < e\<close> by (simp add: dist_commute dist_norm)
  6463       finally show ?thesis
  6465       finally show ?thesis
  6464         by (simp add: divide_simps norm_divide del: power_Suc)
  6466         by (simp add: field_split_simps norm_divide del: power_Suc)
  6465     qed
  6467     qed
  6466     with \<open>0 < r\<close> show "\<forall>\<^sub>F n in sequentially. \<forall>x\<in>sphere z r.
  6468     with \<open>0 < r\<close> show "\<forall>\<^sub>F n in sequentially. \<forall>x\<in>sphere z r.
  6467                 norm ((\<Sum>k<n. (w - z) ^ k * (f x / (x - z) ^ Suc k)) - f x / (x - w)) < e"
  6469                 norm ((\<Sum>k<n. (w - z) ^ k * (f x / (x - z) ^ Suc k)) - f x / (x - w)) < e"
  6468       by (auto simp: mult_ac less_imp_le eventually_sequentially Ball_def)
  6470       by (auto simp: mult_ac less_imp_le eventually_sequentially Ball_def)
  6469   qed
  6471   qed
  6525   have "cmod (x - z) = R \<Longrightarrow> cmod (f x) * 2 < cmod (f z)" for x
  6527   have "cmod (x - z) = R \<Longrightarrow> cmod (f x) * 2 < cmod (f z)" for x
  6526     unfolding R_def
  6528     unfolding R_def
  6527     by (rule B) (use norm_triangle_ineq4 [of x z] in auto)
  6529     by (rule B) (use norm_triangle_ineq4 [of x z] in auto)
  6528   with \<open>R > 0\<close> fz show False
  6530   with \<open>R > 0\<close> fz show False
  6529     using has_contour_integral_bound_circlepath [OF *, of "norm(f z)/2/R"]
  6531     using has_contour_integral_bound_circlepath [OF *, of "norm(f z)/2/R"]
  6530     by (auto simp: less_imp_le norm_mult norm_divide divide_simps)
  6532     by (auto simp: less_imp_le norm_mult norm_divide field_split_simps)
  6531 qed
  6533 qed
  6532 
  6534 
  6533 proposition Liouville_weak:
  6535 proposition Liouville_weak:
  6534   assumes "f holomorphic_on UNIV" and "(f \<longlongrightarrow> l) at_infinity"
  6536   assumes "f holomorphic_on UNIV" and "(f \<longlongrightarrow> l) at_infinity"
  6535     shows "f z = l"
  6537     shows "f z = l"
  6544     have 1: "(\<lambda>x. 1 / f x) holomorphic_on UNIV"
  6546     have 1: "(\<lambda>x. 1 / f x) holomorphic_on UNIV"
  6545       by (simp add: holomorphic_on_divide holomorphic_on_const assms f)
  6547       by (simp add: holomorphic_on_divide holomorphic_on_const assms f)
  6546     have 2: "((\<lambda>x. 1 / f x) \<longlongrightarrow> 0) at_infinity"
  6548     have 2: "((\<lambda>x. 1 / f x) \<longlongrightarrow> 0) at_infinity"
  6547       apply (rule tendstoI [OF eventually_mono])
  6549       apply (rule tendstoI [OF eventually_mono])
  6548       apply (rule_tac B="2/e" in unbounded)
  6550       apply (rule_tac B="2/e" in unbounded)
  6549       apply (simp add: dist_norm norm_divide divide_simps mult_ac)
  6551       apply (simp add: dist_norm norm_divide field_split_simps mult_ac)
  6550       done
  6552       done
  6551     have False
  6553     have False
  6552       using Liouville_weak_0 [OF 1 2] f by simp
  6554       using Liouville_weak_0 [OF 1 2] f by simp
  6553   }
  6555   }
  6554   then show ?thesis
  6556   then show ?thesis
  6677       have "(f n has_field_derivative 1 / (2 * of_real pi * \<i>) * ?conint (\<lambda>u. f n u / (u - w)\<^sup>2)) (at w)"
  6679       have "(f n has_field_derivative 1 / (2 * of_real pi * \<i>) * ?conint (\<lambda>u. f n u / (u - w)\<^sup>2)) (at w)"
  6678         by (rule Cauchy_derivative_integral_circlepath [OF cont_fn hol_fn w])
  6680         by (rule Cauchy_derivative_integral_circlepath [OF cont_fn hol_fn w])
  6679       then have f': "f' n w = 1 / (2 * of_real pi * \<i>) * ?conint (\<lambda>u. f n u / (u - w)\<^sup>2)"
  6681       then have f': "f' n w = 1 / (2 * of_real pi * \<i>) * ?conint (\<lambda>u. f n u / (u - w)\<^sup>2)"
  6680         using DERIV_unique [OF fnd] w by blast
  6682         using DERIV_unique [OF fnd] w by blast
  6681       show ?thesis
  6683       show ?thesis
  6682         by (simp add: f' Cauchy_contour_integral_circlepath_2 [OF g w] derg [OF w] divide_simps)
  6684         by (simp add: f' Cauchy_contour_integral_circlepath_2 [OF g w] derg [OF w] field_split_simps)
  6683     qed
  6685     qed
  6684     define d where "d = (r - norm(w - z))^2"
  6686     define d where "d = (r - norm(w - z))^2"
  6685     have "d > 0"
  6687     have "d > 0"
  6686       using w by (simp add: dist_commute dist_norm d_def)
  6688       using w by (simp add: dist_commute dist_norm d_def)
  6687     have dle: "d \<le> cmod ((y - w)\<^sup>2)" if "r = cmod (z - y)" for y
  6689     have dle: "d \<le> cmod ((y - w)\<^sup>2)" if "r = cmod (z - y)" for y
  6701       unfolding uniform_limit_iff
  6703       unfolding uniform_limit_iff
  6702     proof clarify
  6704     proof clarify
  6703       fix e::real
  6705       fix e::real
  6704       assume "0 < e"
  6706       assume "0 < e"
  6705       with \<open>r > 0\<close> show "\<forall>\<^sub>F n in F. \<forall>x\<in>sphere z r. dist (f n x / (x - w)\<^sup>2) (g x / (x - w)\<^sup>2) < e"
  6707       with \<open>r > 0\<close> show "\<forall>\<^sub>F n in F. \<forall>x\<in>sphere z r. dist (f n x / (x - w)\<^sup>2) (g x / (x - w)\<^sup>2) < e"
  6706         apply (simp add: norm_divide divide_simps sphere_def dist_norm)
  6708         apply (simp add: norm_divide field_split_simps sphere_def dist_norm)
  6707         apply (rule eventually_mono [OF uniform_limitD [OF ulim], of "e*d"])
  6709         apply (rule eventually_mono [OF uniform_limitD [OF ulim], of "e*d"])
  6708          apply (simp add: \<open>0 < d\<close>)
  6710          apply (simp add: \<open>0 < d\<close>)
  6709         apply (force simp: dist_norm dle intro: less_le_trans)
  6711         apply (force simp: dist_norm dle intro: less_le_trans)
  6710         done
  6712         done
  6711     qed
  6713     qed
  6947   have "\<exists>f'. (f has_field_derivative f') (at w)" if w: "dist z w < r" for w
  6949   have "\<exists>f'. (f has_field_derivative f') (at w)" if w: "dist z w < r" for w
  6948   proof -
  6950   proof -
  6949     have inb: "z + complex_of_real ((dist z w + r) / 2) \<in> ball z r"
  6951     have inb: "z + complex_of_real ((dist z w + r) / 2) \<in> ball z r"
  6950     proof -
  6952     proof -
  6951       have wz: "cmod (w - z) < r" using w
  6953       have wz: "cmod (w - z) < r" using w
  6952         by (auto simp: divide_simps dist_norm norm_minus_commute)
  6954         by (auto simp: field_split_simps dist_norm norm_minus_commute)
  6953       then have "0 \<le> r"
  6955       then have "0 \<le> r"
  6954         by (meson less_eq_real_def norm_ge_zero order_trans)
  6956         by (meson less_eq_real_def norm_ge_zero order_trans)
  6955       show ?thesis
  6957       show ?thesis
  6956         using w by (simp add: dist_norm \<open>0\<le>r\<close> flip: of_real_add)
  6958         using w by (simp add: dist_norm \<open>0\<le>r\<close> flip: of_real_add)
  6957     qed
  6959     qed
  7143   assumes holg: "g holomorphic_on S" and a: "a \<in> interior S"
  7145   assumes holg: "g holomorphic_on S" and a: "a \<in> interior S"
  7144       and eq: "\<And>z. z \<in> S - {a} \<Longrightarrow> g z = (z - a) * f z"
  7146       and eq: "\<And>z. z \<in> S - {a} \<Longrightarrow> g z = (z - a) * f z"
  7145     shows "(\<lambda>z. if z = a then deriv g a
  7147     shows "(\<lambda>z. if z = a then deriv g a
  7146                  else f z - g a/(z - a)) holomorphic_on S"
  7148                  else f z - g a/(z - a)) holomorphic_on S"
  7147   using pole_lemma [OF holg a]
  7149   using pole_lemma [OF holg a]
  7148   by (rule holomorphic_transform) (simp add: eq divide_simps)
  7150   by (rule holomorphic_transform) (simp add: eq field_split_simps)
  7149 
  7151 
  7150 lemma pole_lemma_open:
  7152 lemma pole_lemma_open:
  7151   assumes "f holomorphic_on S" "open S"
  7153   assumes "f holomorphic_on S" "open S"
  7152     shows "(\<lambda>z. if z = a then deriv f a else (f z - f a)/(z - a)) holomorphic_on S"
  7154     shows "(\<lambda>z. if z = a then deriv f a else (f z - f a)/(z - a)) holomorphic_on S"
  7153 proof (cases "a \<in> S")
  7155 proof (cases "a \<in> S")
  7173   assumes holg: "g holomorphic_on S" and a: "a \<in> interior S"
  7175   assumes holg: "g holomorphic_on S" and a: "a \<in> interior S"
  7174       and eq: "\<And>z. z \<in> S - {a} \<Longrightarrow> g z = (z - a) * f z"
  7176       and eq: "\<And>z. z \<in> S - {a} \<Longrightarrow> g z = (z - a) * f z"
  7175       and [simp]: "f a = deriv g a" "g a = 0"
  7177       and [simp]: "f a = deriv g a" "g a = 0"
  7176     shows "f holomorphic_on S"
  7178     shows "f holomorphic_on S"
  7177   using pole_theorem [OF holg a eq]
  7179   using pole_theorem [OF holg a eq]
  7178   by (rule holomorphic_transform) (auto simp: eq divide_simps)
  7180   by (rule holomorphic_transform) (auto simp: eq field_split_simps)
  7179 
  7181 
  7180 lemma pole_theorem_open_0:
  7182 lemma pole_theorem_open_0:
  7181   assumes holg: "g holomorphic_on S" and S: "open S"
  7183   assumes holg: "g holomorphic_on S" and S: "open S"
  7182       and eq: "\<And>z. z \<in> S - {a} \<Longrightarrow> g z = (z - a) * f z"
  7184       and eq: "\<And>z. z \<in> S - {a} \<Longrightarrow> g z = (z - a) * f z"
  7183       and [simp]: "f a = deriv g a" "g a = 0"
  7185       and [simp]: "f a = deriv g a" "g a = 0"
  7184     shows "f holomorphic_on S"
  7186     shows "f holomorphic_on S"
  7185   using pole_theorem_open [OF holg S eq]
  7187   using pole_theorem_open [OF holg S eq]
  7186   by (rule holomorphic_transform) (auto simp: eq divide_simps)
  7188   by (rule holomorphic_transform) (auto simp: eq field_split_simps)
  7187 
  7189 
  7188 lemma pole_theorem_analytic:
  7190 lemma pole_theorem_analytic:
  7189   assumes g: "g analytic_on S"
  7191   assumes g: "g analytic_on S"
  7190       and eq: "\<And>z. z \<in> S
  7192       and eq: "\<And>z. z \<in> S
  7191              \<Longrightarrow> \<exists>d. 0 < d \<and> (\<forall>w \<in> ball z d - {a}. g w = (w - a) * f w)"
  7193              \<Longrightarrow> \<exists>d. 0 < d \<and> (\<forall>w \<in> ball z d - {a}. g w = (w - a) * f w)"
  7377     then have "((\<lambda>x. 1 / (x - z)) has_contour_integral 0) \<gamma>"
  7379     then have "((\<lambda>x. 1 / (x - z)) has_contour_integral 0) \<gamma>"
  7378      using z v_def  has_contour_integral_winding_number [OF \<open>valid_path \<gamma>\<close>] by fastforce
  7380      using z v_def  has_contour_integral_winding_number [OF \<open>valid_path \<gamma>\<close>] by fastforce
  7379     then have "((\<lambda>x. f z * (1 / (x - z))) has_contour_integral 0) \<gamma>"
  7381     then have "((\<lambda>x. f z * (1 / (x - z))) has_contour_integral 0) \<gamma>"
  7380       using has_contour_integral_lmul by fastforce
  7382       using has_contour_integral_lmul by fastforce
  7381     then have "((\<lambda>x. f z / (x - z)) has_contour_integral 0) \<gamma>"
  7383     then have "((\<lambda>x. f z / (x - z)) has_contour_integral 0) \<gamma>"
  7382       by (simp add: divide_simps)
  7384       by (simp add: field_split_simps)
  7383     moreover have "((\<lambda>x. (f x - f z) / (x - z)) has_contour_integral contour_integral \<gamma> (d z)) \<gamma>"
  7385     moreover have "((\<lambda>x. (f x - f z) / (x - z)) has_contour_integral contour_integral \<gamma> (d z)) \<gamma>"
  7384       using z
  7386       using z
  7385       apply (auto simp: v_def)
  7387       apply (auto simp: v_def)
  7386       apply (metis (no_types, lifting) contour_integrable_eq d_def has_contour_integral_eq has_contour_integral_integral cint_fxy)
  7388       apply (metis (no_types, lifting) contour_integrable_eq d_def has_contour_integral_eq has_contour_integral_integral cint_fxy)
  7387       done
  7389       done
  7465         by (simp add: norm_mult norm_inverse Fields.field_class.field_divide_inverse)
  7467         by (simp add: norm_mult norm_inverse Fields.field_class.field_divide_inverse)
  7466       also have "\<dots> \<le> D * (e / L / D)"
  7468       also have "\<dots> \<le> D * (e / L / D)"
  7467         apply (rule mult_mono)
  7469         apply (rule mult_mono)
  7468         using that D interior_subset apply blast
  7470         using that D interior_subset apply blast
  7469         using \<open>L>0\<close> \<open>e>0\<close> \<open>D>0\<close> DL2
  7471         using \<open>L>0\<close> \<open>e>0\<close> \<open>D>0\<close> DL2
  7470         apply (auto simp: norm_divide divide_simps algebra_simps)
  7472         apply (auto simp: norm_divide field_split_simps algebra_simps)
  7471         done
  7473         done
  7472       finally show ?thesis .
  7474       finally show ?thesis .
  7473     qed
  7475     qed
  7474     have "dist (h y) 0 = cmod (contour_integral \<gamma> (\<lambda>w. f w / (w - y)))"
  7476     have "dist (h y) 0 = cmod (contour_integral \<gamma> (\<lambda>w. f w / (w - y)))"
  7475       by (simp add: dist_norm)
  7477       by (simp add: dist_norm)
  7699   have "((\<lambda>w. 1 / (w - z)) has_contour_integral complex_of_real (2 * pi) * \<i> * winding_number \<gamma> z) \<gamma>"
  7701   have "((\<lambda>w. 1 / (w - z)) has_contour_integral complex_of_real (2 * pi) * \<i> * winding_number \<gamma> z) \<gamma>"
  7700     by (rule has_contour_integral_winding_number [OF \<open>valid_path \<gamma>\<close> znot])
  7702     by (rule has_contour_integral_winding_number [OF \<open>valid_path \<gamma>\<close> znot])
  7701   then have "((\<lambda>w. f z * (1 / (w - z))) has_contour_integral complex_of_real (2 * pi) * \<i> * winding_number \<gamma> z * f z) \<gamma>"
  7703   then have "((\<lambda>w. f z * (1 / (w - z))) has_contour_integral complex_of_real (2 * pi) * \<i> * winding_number \<gamma> z * f z) \<gamma>"
  7702     by (metis mult.commute has_contour_integral_lmul)
  7704     by (metis mult.commute has_contour_integral_lmul)
  7703   then have 1: "((\<lambda>w. f z / (w - z)) has_contour_integral complex_of_real (2 * pi) * \<i> * winding_number \<gamma> z * f z) \<gamma>"
  7705   then have 1: "((\<lambda>w. f z / (w - z)) has_contour_integral complex_of_real (2 * pi) * \<i> * winding_number \<gamma> z * f z) \<gamma>"
  7704     by (simp add: divide_simps)
  7706     by (simp add: field_split_simps)
  7705   moreover have 2: "((\<lambda>w. (f w - f z) / (w - z)) has_contour_integral 0) \<gamma>"
  7707   moreover have 2: "((\<lambda>w. (f w - f z) / (w - z)) has_contour_integral 0) \<gamma>"
  7706     using U [OF z] pasz d_def by (force elim: has_contour_integral_eq [where g = "\<lambda>w. (f w - f z)/(w - z)"])
  7708     using U [OF z] pasz d_def by (force elim: has_contour_integral_eq [where g = "\<lambda>w. (f w - f z)/(w - z)"])
  7707   show ?thesis
  7709   show ?thesis
  7708     using has_contour_integral_add [OF 1 2]  by (simp add: diff_divide_distrib)
  7710     using has_contour_integral_add [OF 1 2]  by (simp add: diff_divide_distrib)
  7709 qed
  7711 qed