# HG changeset patch # User paulson # Date 1527976664 -3600 # Node ID 0f19c98fa7be2a4b76fc5430621cc27cdccdb64b # Parent e761afd35baa3f9964aa58e94d6f3ec5f1940ab7# Parent 8cd3d0305269233d7a4588f4b0136f7df955f2c4 merged diff -r e761afd35baa -r 0f19c98fa7be src/HOL/Analysis/Cauchy_Integral_Theorem.thy --- a/src/HOL/Analysis/Cauchy_Integral_Theorem.thy Sat Jun 02 22:40:03 2018 +0200 +++ b/src/HOL/Analysis/Cauchy_Integral_Theorem.thy Sat Jun 02 22:57:44 2018 +0100 @@ -3370,7 +3370,7 @@ fix e::real assume e: "e>0" obtain p where p: "polynomial_function p \ - pathstart p = pathstart \ \ pathfinish p = pathfinish \ \ (\t\{0..1}. cmod (p t - \ t) < min e (d / 2))" + pathstart p = pathstart \ \ pathfinish p = pathfinish \ \ (\t\{0..1}. cmod (p t - \ t) < min e (d/2))" using path_approx_polynomial_function [OF \path \\, of "min e (d/2)"] d \0 by auto have "(\w. 1 / (w - z)) holomorphic_on UNIV - {z}" by (auto simp: intro!: holomorphic_intros) @@ -4650,17 +4650,19 @@ have lpa: "linked_paths atends g p" by (metis (mono_tags, lifting) N01(1) ksf linked_paths_def pathfinish_def pathstart_def psf) show ?case - apply (rule_tac x="min d1 d2" in exI) - apply (simp add: \0 < d1\ \0 < d2\, clarify) - apply (rule_tac s="contour_integral p f" in trans) - using pk_le N01(1) ksf pathfinish_def pathstart_def - apply (force intro!: vpp d1 simp add: linked_paths_def psf ksf) - using pk_le N01 apply (force intro!: vpp d2 lpa simp add: linked_paths_def psf ksf) - done + proof (intro exI; safe) + fix j + assume "valid_path j" "linked_paths atends g j" + and "\u\{0..1}. cmod (j u - k (real (Suc n) / real N, u)) < min d1 d2" + then have "contour_integral j f = contour_integral p f" + using pk_le N01(1) ksf by (force intro!: vpp d1 simp add: linked_paths_def psf) + also have "... = contour_integral g f" + using pk_le by (force intro!: vpp d2 lpa) + finally show "contour_integral j f = contour_integral g f" . + qed (simp add: \0 < d1\ \0 < d2\) qed then obtain d where "0 < d" - "\j. valid_path j \ (\u \ {0..1}. norm(j u - k (1,u)) < d) \ - linked_paths atends g j + "\j. valid_path j \ (\u \ {0..1}. norm(j u - k (1,u)) < d) \ linked_paths atends g j \ contour_integral j f = contour_integral g f" using \N>0\ by auto then have "linked_paths atends g h \ contour_integral h f = contour_integral g f" @@ -4726,15 +4728,14 @@ and hq_less: "\t\{0..1}. cmod (h t - q t) < e" and paq: "contour_integral q (\w. 1 / (w - z)) = complex_of_real (2 * pi) * \ * winding_number h z" using winding_number [OF \path h\ pah \0 < e\] unfolding winding_number_prop_def by blast - have gp: "homotopic_paths (- {z}) g p" + have "homotopic_paths (- {z}) g p" by (simp add: d p valid_path_imp_path norm_minus_commute gp_less) - have hq: "homotopic_paths (- {z}) h q" + moreover have "homotopic_paths (- {z}) h q" by (simp add: e q valid_path_imp_path norm_minus_commute hq_less) - have "contour_integral p (\w. 1/(w - z)) = contour_integral q (\w. 1/(w - z))" - apply (rule Cauchy_theorem_homotopic_paths [of "-{z}"]) - apply (blast intro: homotopic_paths_trans homotopic_paths_sym gp hq assms) - apply (auto intro!: holomorphic_intros simp: p q) - done + ultimately have "homotopic_paths (- {z}) p q" + by (blast intro: homotopic_paths_trans homotopic_paths_sym assms) + then have "contour_integral p (\w. 1/(w - z)) = contour_integral q (\w. 1/(w - z))" + by (rule Cauchy_theorem_homotopic_paths) (auto intro!: holomorphic_intros simp: p q) then show ?thesis by (simp add: pap paq) qed @@ -4792,16 +4793,13 @@ by (blast intro: sym homotopic_loops_linear winding_number_homotopic_loops) lemma winding_number_nearby_paths_eq: - "\path g; path h; - pathstart h = pathstart g; pathfinish h = pathfinish g; + "\path g; path h; pathstart h = pathstart g; pathfinish h = pathfinish g; \t. t \ {0..1} \ norm(h t - g t) < norm(g t - z)\ \ winding_number h z = winding_number g z" by (metis segment_bound(2) norm_minus_commute not_le winding_number_paths_linear_eq) lemma winding_number_nearby_loops_eq: - "\path g; path h; - pathfinish g = pathstart g; - pathfinish h = pathstart h; + "\path g; path h; pathfinish g = pathstart g; pathfinish h = pathstart h; \t. t \ {0..1} \ norm(h t - g t) < norm(g t - z)\ \ winding_number h z = winding_number g z" by (metis segment_bound(2) norm_minus_commute not_le winding_number_loops_linear_eq) @@ -4968,12 +4966,7 @@ have **: "((\x. if (part_circlepath z r s t x) \ k then 0 else f(part_circlepath z r s t x) * vector_derivative (part_circlepath z r s t) (at x)) has_integral i) {0..1}" - apply (rule has_integral_spike - [where f = "\x. f(part_circlepath z r s t x) * vector_derivative (part_circlepath z r s t) (at x)"]) - apply (rule negligible_finite [OF fin01]) - using fi has_contour_integral - apply auto - done + by (rule has_integral_spike [OF negligible_finite [OF fin01]]) (use fi has_contour_integral in auto) have *: "\x. \0 \ x; x \ 1; part_circlepath z r s t x \ k\ \ cmod (f (part_circlepath z r s t x)) \ B" by (auto intro!: B [unfolded path_image_def image_def, simplified]) show ?thesis @@ -5023,9 +5016,8 @@ proof (cases "r = 0 \ s = t") case True then show ?thesis - apply (rule disjE) - apply (force simp: part_circlepath_def simple_path_def intro: bexI [where x = "1/4"] bexI [where x = "1/3"])+ - done + unfolding part_circlepath_def simple_path_def + by (rule disjE) (force intro: bexI [where x = "1/4"] bexI [where x = "1/3"])+ next case False then have "r \ 0" "s \ t" by auto have *: "\x y z s t. \*((1 - x) * s + x * t) = \*(((1 - y) * s + y * t)) + z \ \*(x - y) * (t - s) = z" @@ -5033,28 +5025,29 @@ have abs01: "\x y::real. 0 \ x \ x \ 1 \ 0 \ y \ y \ 1 \ (x = y \ x = 0 \ y = 1 \ x = 1 \ y = 0 \ \x - y\ \ {0,1})" by auto - have abs_away: "\P. (\x\{0..1}. \y\{0..1}. P \x - y\) \ (\x::real. 0 \ x \ x \ 1 \ P x)" - by force have **: "\x y. (\n. (complex_of_real x - of_real y) * (of_real t - of_real s) = 2 * (of_int n * of_real pi)) \ (\n. \x - y\ * (t - s) = 2 * (of_int n * pi))" by (force simp: algebra_simps abs_if dest: arg_cong [where f=Re] arg_cong [where f=complex_of_real] intro: exI [where x = "-n" for n]) - have 1: "\x. 0 \ x \ x \ 1 \ (\n. x * (t - s) = 2 * (real_of_int n * pi)) \ x = 0 \ x = 1 \ \s - t\ \ 2 * pi" - apply (rule ccontr) - apply (drule_tac x="2*pi / \t - s\" in spec) - using False - apply (simp add: abs_minus_commute divide_simps) - apply (frule_tac x=1 in spec) - apply (drule_tac x="-1" in spec, simp) - done + have 1: "\s - t\ \ 2 * pi" + if "\x. 0 \ x \ x \ 1 \ (\n. x * (t - s) = 2 * (real_of_int n * pi)) \ x = 0 \ x = 1" + proof (rule ccontr) + assume "\ \s - t\ \ 2 * pi" + then have *: "\n. t - s \ of_int n * \s - t\" + using False that [of "2*pi / \t - s\"] by (simp add: abs_minus_commute divide_simps) + show False + using * [of 1] * [of "-1"] by auto + qed have 2: "\s - t\ = \2 * (real_of_int n * pi) / x\" if "x \ 0" "x * (t - s) = 2 * (real_of_int n * pi)" for x n proof - have "t-s = 2 * (real_of_int n * pi)/x" using that by (simp add: field_simps) then show ?thesis by (metis abs_minus_commute) qed + have abs_away: "\P. (\x\{0..1}. \y\{0..1}. P \x - y\) \ (\x::real. 0 \ x \ x \ 1 \ P x)" + by force show ?thesis using False - apply (simp add: simple_path_def path_part_circlepath) + apply (simp add: simple_path_def) apply (simp add: part_circlepath_def linepath_def exp_eq * ** abs01 del: Set.insert_iff) apply (subst abs_away) apply (auto simp: 1) @@ -5068,22 +5061,20 @@ shows "arc (part_circlepath z r s t)" proof - have *: "x = y" if eq: "\ * (linepath s t x) = \ * (linepath s t y) + 2 * of_int n * complex_of_real pi * \" - and x: "x \ {0..1}" and y: "y \ {0..1}" for x y n - proof - - have "(linepath s t x) = (linepath s t y) + 2 * of_int n * complex_of_real pi" - by (metis add_divide_eq_iff complex_i_not_zero mult.commute nonzero_mult_div_cancel_left eq) - then have "s*y + t*x = s*x + (t*y + of_int n * (pi * 2))" - by (force simp: algebra_simps linepath_def dest: arg_cong [where f=Re]) - then have st: "x \ y \ (s-t) = (of_int n * (pi * 2) / (y-x))" - by (force simp: field_simps) - show ?thesis - apply (rule ccontr) - using assms x y - apply (simp add: st abs_mult field_simps) - using st - apply (auto simp: dest: of_int_lessD) - done - qed + and x: "x \ {0..1}" and y: "y \ {0..1}" for x y n + proof (rule ccontr) + assume "x \ y" + have "(linepath s t x) = (linepath s t y) + 2 * of_int n * complex_of_real pi" + by (metis add_divide_eq_iff complex_i_not_zero mult.commute nonzero_mult_div_cancel_left eq) + then have "s*y + t*x = s*x + (t*y + of_int n * (pi * 2))" + by (force simp: algebra_simps linepath_def dest: arg_cong [where f=Re]) + with \x \ y\ have st: "s-t = (of_int n * (pi * 2) / (y-x))" + by (force simp: field_simps) + have "\real_of_int n\ < \y - x\" + using assms \x \ y\ by (simp add: st abs_mult field_simps) + then show False + using assms x y st by (auto dest: of_int_lessD) + qed show ?thesis using assms apply (simp add: arc_def) @@ -5219,14 +5210,16 @@ by (simp add: sphere_def dist_norm norm_minus_commute) proposition contour_integral_circlepath: - "0 < r \ contour_integral (circlepath z r) (\w. 1 / (w - z)) = 2 * complex_of_real pi * \" - apply (rule contour_integral_unique) - apply (simp add: has_contour_integral_def) - apply (subst has_integral_cong) - apply (simp add: vector_derivative_circlepath01) - using has_integral_const_real [of _ 0 1] - apply (force simp: circlepath) - done + assumes "r > 0" + shows "contour_integral (circlepath z r) (\w. 1 / (w - z)) = 2 * complex_of_real pi * \" +proof (rule contour_integral_unique) + show "((\w. 1 / (w - z)) has_contour_integral 2 * complex_of_real pi * \) (circlepath z r)" + unfolding has_contour_integral_def using assms + apply (subst has_integral_cong) + apply (simp add: vector_derivative_circlepath01) + using has_integral_const_real [of _ 0 1] apply (force simp: circlepath) + done +qed lemma winding_number_circlepath_centre: "0 < r \ winding_number (circlepath z r) z = 1" apply (rule winding_number_unique_loop) @@ -5250,10 +5243,12 @@ have disjo: "cball z r' \ sphere z r = {}" using \r' < r\ by (force simp: cball_def sphere_def) have "winding_number(circlepath z r) w = winding_number(circlepath z r) z" - apply (rule winding_number_around_inside [where s = "cball z r'"]) - apply (simp_all add: disjo order.strict_implies_order winding_number_circlepath_centre) - apply (simp_all add: False r'_def dist_norm norm_minus_commute) - done + proof (rule winding_number_around_inside [where s = "cball z r'"]) + show "winding_number (circlepath z r) z \ 0" + by (simp add: winding_number_circlepath_centre) + show "cball z r' \ path_image (circlepath z r) = {}" + by (simp add: disjo less_eq_real_def) + qed (auto simp: r'_def dist_norm norm_minus_commute) also have "\ = 1" by (simp add: winding_number_circlepath_centre) finally show ?thesis . @@ -5263,7 +5258,7 @@ text\ Hence the Cauchy formula for points inside a circle.\ theorem Cauchy_integral_circlepath: - assumes "continuous_on (cball z r) f" "f holomorphic_on (ball z r)" "norm(w - z) < r" + assumes contf: "continuous_on (cball z r) f" and holf: "f holomorphic_on (ball z r)" and wz: "norm(w - z) < r" shows "((\u. f u/(u - w)) has_contour_integral (2 * of_real pi * \ * f w)) (circlepath z r)" proof - @@ -5271,12 +5266,15 @@ using assms le_less_trans norm_ge_zero by blast have "((\u. f u / (u - w)) has_contour_integral (2 * pi) * \ * winding_number (circlepath z r) w * f w) (circlepath z r)" - apply (rule Cauchy_integral_formula_weak [where s = "cball z r" and k = "{}"]) - using assms \r > 0\ - apply (simp_all add: dist_norm norm_minus_commute) - apply (metis at_within_interior dist_norm holomorphic_on_def interior_ball mem_ball norm_minus_commute) - apply (simp add: cball_def sphere_def dist_norm, clarify, simp) - by (metis dist_commute dist_norm less_irrefl) + proof (rule Cauchy_integral_formula_weak [where s = "cball z r" and k = "{}"]) + show "\x. x \ interior (cball z r) - {} \ + f field_differentiable at x" + using holf holomorphic_on_imp_differentiable_at by auto + have "w \ sphere z r" + by simp (metis dist_commute dist_norm not_le order_refl wz) + then show "path_image (circlepath z r) \ cball z r - {w}" + using \r > 0\ by (auto simp add: cball_def sphere_def) + qed (use wz in \simp_all add: dist_norm norm_minus_commute contf\) then show ?thesis by (simp add: winding_number_circlepath assms) qed @@ -5330,20 +5328,18 @@ have Ble: "B * e / (\B\ + 1) \ e" using \0 \ B\ \0 < e\ by (simp add: divide_simps) have "\h. (\x\{0..1}. cmod (l (\ x) * vector_derivative \ (at x) - h x) \ e) \ h integrable_on {0..1}" - apply (rule_tac x="\x. f (a::'a) (\ x) * vector_derivative \ (at x)" in exI) - apply (intro inta conjI ballI) - apply (rule order_trans [OF _ Ble]) - apply (frule noleB) - apply (frule fga) - using \0 \ B\ \0 < e\ - apply (simp add: norm_mult left_diff_distrib [symmetric] norm_minus_commute divide_simps) - apply (drule (1) mult_mono [OF less_imp_le]) - apply (simp_all add: mult_ac) - done + proof (intro exI conjI ballI) + show "cmod (l (\ x) * vector_derivative \ (at x) - f a (\ x) * vector_derivative \ (at x)) \ e" + if "x \ {0..1}" for x + apply (rule order_trans [OF _ Ble]) + using noleB [OF that] fga [OF that] \0 \ B\ \0 < e\ + apply (simp add: norm_mult left_diff_distrib [symmetric] norm_minus_commute divide_simps) + apply (fastforce simp: mult_ac dest: mult_mono [OF less_imp_le]) + done + qed (rule inta) } then show lintg: "l contour_integrable_on \" - apply (simp add: contour_integrable_on) - by (metis (mono_tags, lifting)integrable_uniform_limit_real) + unfolding contour_integrable_on by (metis (mono_tags, lifting)integrable_uniform_limit_real) { fix e::real define B' where "B' = B + 1" have B': "B' > 0" "B' > B" using \0 \ B\ by (auto simp: B'_def) @@ -5363,13 +5359,17 @@ then show ?thesis by (simp add: left_diff_distrib [symmetric] norm_mult) qed + have le_e: "\x. \\xa\{0..1}. 2 * cmod (f x (\ xa) - l (\ xa)) < e / B'; f x contour_integrable_on \\ + \ cmod (integral {0..1} + (\u. f x (\ u) * vector_derivative \ (at u) - l (\ u) * vector_derivative \ (at u))) < e" + apply (rule le_less_trans [OF integral_norm_bound_integral ie]) + apply (simp add: lintg integrable_diff contour_integrable_on [symmetric]) + apply (blast intro: *)+ + done have "\\<^sub>F x in F. dist (contour_integral \ (f x)) (contour_integral \ l) < e" apply (rule eventually_mono [OF eventually_conj [OF ev_no' ev_fint]]) apply (simp add: dist_norm contour_integrable_on path_image_def contour_integral_integral) - apply (simp add: lintg integral_diff [symmetric] contour_integrable_on [symmetric], clarify) - apply (rule le_less_trans [OF integral_norm_bound_integral ie]) - apply (simp add: lintg integrable_diff contour_integrable_on [symmetric]) - apply (blast intro: *)+ + apply (simp add: lintg integral_diff [symmetric] contour_integrable_on [symmetric] le_e) done } then show "((\n. contour_integral \ (f n)) \ contour_integral \ l) F" @@ -5404,14 +5404,16 @@ using open_contains_ball by blast have [simp]: "\n. cmod (1 + of_nat n) = 1 + of_nat n" by (metis norm_of_nat of_nat_Suc) + have cint: "\x. \x \ w; cmod (x - w) < d\ + \ (\z. (f' z / (z - x) ^ k - f' z / (z - w) ^ k) / (x * k - w * k)) contour_integrable_on \" + apply (rule contour_integrable_div [OF contour_integrable_diff]) + using int w d + by (force simp: dist_norm norm_minus_commute intro!: has_contour_integral_integrable)+ have 1: "\\<^sub>F n in at w. (\x. f' x * (inverse (x - n) ^ k - inverse (x - w) ^ k) / (n - w) / of_nat k) contour_integrable_on \" - apply (simp add: eventually_at) + unfolding eventually_at apply (rule_tac x=d in exI) - apply (simp add: \d > 0\ dist_norm field_simps, clarify) - apply (rule contour_integrable_div [OF contour_integrable_diff]) - using int w d - apply (force simp: dist_norm norm_minus_commute intro!: has_contour_integral_integrable)+ + apply (simp add: \d > 0\ dist_norm field_simps cint) done have bim_g: "bounded (image f' (path_image \))" by (simp add: compact_imp_bounded compact_continuous_image compact_valid_path_image assms) @@ -5424,7 +5426,7 @@ proof - have *: "cmod ((inverse (x - u) ^ k - inverse (x - w) ^ k) / ((u - w) * k) - inverse (x - w) ^ Suc k) < e" if x: "x \ path_image \" and "u \ w" and uwd: "cmod (u - w) < d/2" - and uw_less: "cmod (u - w) < e * (d / 2) ^ (k+2) / (1 + real k)" + and uw_less: "cmod (u - w) < e * (d/2) ^ (k+2) / (1 + real k)" for u x proof - define ff where [abs_def]: @@ -5434,8 +5436,8 @@ else (k * of_real(Suc k)) / (x - w)^(k + 2))" for n :: nat and w have km1: "\z::complex. z \ 0 \ z ^ (k - Suc 0) = z ^ k / z" by (simp add: field_simps) (metis Suc_pred \k \ 0\ neq0_conv power_Suc) - have ff1: "(ff i has_field_derivative ff (Suc i) z) (at z within ball w (d / 2))" - if "z \ ball w (d / 2)" "i \ 1" for i z + have ff1: "(ff i has_field_derivative ff (Suc i) z) (at z within ball w (d/2))" + if "z \ ball w (d/2)" "i \ 1" for i z proof - have "z \ path_image \" using \x \ path_image \\ d that ball_divide_subset_numeral by blast @@ -5452,22 +5454,18 @@ qed { fix a::real and b::real assume ab: "a > 0" "b > 0" then have "k * (1 + real k) * (1 / a) \ k * (1 + real k) * (4 / b) \ b \ 4 * a" - apply (subst mult_le_cancel_left_pos) - using \k \ 0\ - apply (auto simp: divide_simps) - done + by (subst mult_le_cancel_left_pos) (use \k \ 0\ in \auto simp: divide_simps\) with ab have "real k * (1 + real k) / a \ (real k * 4 + real k * real k * 4) / b \ b \ 4 * a" by (simp add: field_simps) } note canc = this - have ff2: "cmod (ff (Suc 1) v) \ real (k * (k + 1)) / (d / 2) ^ (k + 2)" - if "v \ ball w (d / 2)" for v + have ff2: "cmod (ff (Suc 1) v) \ real (k * (k + 1)) / (d/2) ^ (k + 2)" + if "v \ ball w (d/2)" for v proof - + have lessd: "\z. cmod (\ z - v) < d/2 \ cmod (w - \ z) < d" + by (metis that norm_minus_commute norm_triangle_half_r dist_norm mem_ball) have "d/2 \ cmod (x - v)" using d x that - apply (simp add: dist_norm path_image_def ball_def not_less [symmetric] del: divide_const_simps, clarify) - apply (drule subsetD) - prefer 2 apply blast - apply (metis norm_minus_commute norm_triangle_half_r CollectI) - done + using lessd d x + by (auto simp add: dist_norm path_image_def ball_def not_less [symmetric] del: divide_const_simps) then have "d \ cmod (x - v) * 2" by (simp add: divide_simps) then have dpow_le: "d ^ (k+2) \ (cmod (x - v) * 2) ^ (k+2)" @@ -5475,24 +5473,22 @@ have "x \ v" using that using \x \ path_image \\ ball_divide_subset_numeral d by fastforce then show ?thesis - using \d > 0\ - apply (simp add: ff_def norm_mult norm_divide norm_power dist_norm canc) - using dpow_le - apply (simp add: algebra_simps divide_simps mult_less_0_iff) + using \d > 0\ apply (simp add: ff_def norm_mult norm_divide norm_power dist_norm canc) + using dpow_le apply (simp add: algebra_simps divide_simps mult_less_0_iff) done qed - have ub: "u \ ball w (d / 2)" + have ub: "u \ ball w (d/2)" using uwd by (simp add: dist_commute dist_norm) have "cmod (inverse (x - u) ^ k - (inverse (x - w) ^ k + of_nat k * (u - w) / ((x - w) * (x - w) ^ k))) - \ (real k * 4 + real k * real k * 4) * (cmod (u - w) * cmod (u - w)) / (d * (d * (d / 2) ^ k))" + \ (real k * 4 + real k * real k * 4) * (cmod (u - w) * cmod (u - w)) / (d * (d * (d/2) ^ k))" using complex_taylor [OF _ ff1 ff2 _ ub, of w, simplified] by (simp add: ff_def \0 < d\) then have "cmod (inverse (x - u) ^ k - (inverse (x - w) ^ k + of_nat k * (u - w) / ((x - w) * (x - w) ^ k))) - \ (cmod (u - w) * real k) * (1 + real k) * cmod (u - w) / (d / 2) ^ (k+2)" + \ (cmod (u - w) * real k) * (1 + real k) * cmod (u - w) / (d/2) ^ (k+2)" by (simp add: field_simps) then have "cmod (inverse (x - u) ^ k - (inverse (x - w) ^ k + of_nat k * (u - w) / ((x - w) * (x - w) ^ k))) / (cmod (u - w) * real k) - \ (1 + real k) * cmod (u - w) / (d / 2) ^ (k+2)" + \ (1 + real k) * cmod (u - w) / (d/2) ^ (k+2)" using \k \ 0\ \u \ w\ by (simp add: mult_ac zero_less_mult_iff pos_divide_le_eq) also have "\ < e" using uw_less \0 < d\ by (simp add: mult_ac divide_simps) @@ -5503,7 +5499,7 @@ using uwd \0 < d\ x d by (force simp: dist_norm ball_def norm_minus_commute) show ?thesis apply (rule le_less_trans [OF _ e]) - using \k \ 0\ \x \ u\ \u \ w\ + using \k \ 0\ \x \ u\ \u \ w\ apply (simp add: field_simps norm_divide [symmetric]) done qed @@ -5538,8 +5534,7 @@ inverse (\ x - w) * inverse (\ x - w) ^ k)" by (simp add: norm_mult) also have "\ < cmod (f' (\ x)) * (e/C)" - apply (rule mult_strict_left_mono [OF ec]) - using False by simp + using False mult_strict_left_mono [OF ec] by force also have "\ \ e" using C by (metis False \0 < e\ frac_le less_eq_real_def mult.commute pos_le_divide_eq x zero_less_norm_iff) finally show ?thesis . @@ -5557,13 +5552,17 @@ by (rule contour_integral_uniform_limit [OF 1 2 leB \]) auto have **: "contour_integral \ (\x. f' x * (inverse (x - u) ^ k - inverse (x - w) ^ k) / ((u - w) * k)) = (f u - f w) / (u - w) / k" - if "dist u w < d" for u - apply (rule contour_integral_unique) - apply (simp add: diff_divide_distrib algebra_simps) - apply (rule has_contour_integral_diff; rule has_contour_integral_div; simp add: field_simps; rule int) - apply (metis contra_subsetD d dist_commute mem_ball that) - apply (rule w) - done + if "dist u w < d" for u + proof - + have u: "u \ s - path_image \" + by (metis subsetD d dist_commute mem_ball that) + show ?thesis + apply (rule contour_integral_unique) + apply (simp add: diff_divide_distrib algebra_simps) + apply (intro has_contour_integral_diff has_contour_integral_div) + using u w apply (simp_all add: field_simps int) + done + qed show ?thes2 apply (simp add: has_field_derivative_iff del: power_Suc) apply (rule Lim_transform_within [OF tendsto_mult_left [OF *] \0 < d\ ]) @@ -5628,14 +5627,14 @@ subsection\Existence of all higher derivatives\ proposition derivative_is_holomorphic: - assumes "open s" - and fder: "\z. z \ s \ (f has_field_derivative f' z) (at z)" - shows "f' holomorphic_on s" + assumes "open S" + and fder: "\z. z \ S \ (f has_field_derivative f' z) (at z)" + shows "f' holomorphic_on S" proof - - have *: "\h. (f' has_field_derivative h) (at z)" if "z \ s" for z + have *: "\h. (f' has_field_derivative h) (at z)" if "z \ S" for z proof - - obtain r where "r > 0" and r: "cball z r \ s" - using open_contains_cball \z \ s\ \open s\ by blast + obtain r where "r > 0" and r: "cball z r \ S" + using open_contains_cball \z \ S\ \open S\ by blast then have holf_cball: "f holomorphic_on cball z r" apply (simp add: holomorphic_on_def) using field_differentiable_at_within field_differentiable_def fder by blast @@ -5673,38 +5672,38 @@ done qed show ?thesis - by (simp add: holomorphic_on_open [OF \open s\] *) + by (simp add: holomorphic_on_open [OF \open S\] *) qed lemma holomorphic_deriv [holomorphic_intros]: - "\f holomorphic_on s; open s\ \ (deriv f) holomorphic_on s" + "\f holomorphic_on S; open S\ \ (deriv f) holomorphic_on S" by (metis DERIV_deriv_iff_field_differentiable at_within_open derivative_is_holomorphic holomorphic_on_def) -lemma analytic_deriv [analytic_intros]: "f analytic_on s \ (deriv f) analytic_on s" +lemma analytic_deriv [analytic_intros]: "f analytic_on S \ (deriv f) analytic_on S" using analytic_on_holomorphic holomorphic_deriv by auto -lemma holomorphic_higher_deriv [holomorphic_intros]: "\f holomorphic_on s; open s\ \ (deriv ^^ n) f holomorphic_on s" +lemma holomorphic_higher_deriv [holomorphic_intros]: "\f holomorphic_on S; open S\ \ (deriv ^^ n) f holomorphic_on S" by (induction n) (auto simp: holomorphic_deriv) -lemma analytic_higher_deriv [analytic_intros]: "f analytic_on s \ (deriv ^^ n) f analytic_on s" +lemma analytic_higher_deriv [analytic_intros]: "f analytic_on S \ (deriv ^^ n) f analytic_on S" unfolding analytic_on_def using holomorphic_higher_deriv by blast lemma has_field_derivative_higher_deriv: - "\f holomorphic_on s; open s; x \ s\ + "\f holomorphic_on S; open S; x \ S\ \ ((deriv ^^ n) f has_field_derivative (deriv ^^ (Suc n)) f x) (at x)" by (metis (no_types, hide_lams) DERIV_deriv_iff_field_differentiable at_within_open comp_apply funpow.simps(2) holomorphic_higher_deriv holomorphic_on_def) lemma valid_path_compose_holomorphic: - assumes "valid_path g" and holo:"f holomorphic_on s" and "open s" "path_image g \ s" + assumes "valid_path g" and holo:"f holomorphic_on S" and "open S" "path_image g \ S" shows "valid_path (f \ g)" proof (rule valid_path_compose[OF \valid_path g\]) fix x assume "x \ path_image g" then show "f field_differentiable at x" using analytic_on_imp_differentiable_at analytic_on_open assms holo by blast next - have "deriv f holomorphic_on s" - using holomorphic_deriv holo \open s\ by auto + have "deriv f holomorphic_on S" + using holomorphic_deriv holo \open S\ by auto then show "continuous_on (path_image g) (deriv f)" using assms(4) holomorphic_on_imp_continuous_on holomorphic_on_subset by auto qed @@ -5713,15 +5712,15 @@ subsection\Morera's theorem\ lemma Morera_local_triangle_ball: - assumes "\z. z \ s + assumes "\z. z \ S \ \e a. 0 < e \ z \ ball a e \ continuous_on (ball a e) f \ (\b c. closed_segment b c \ ball a e \ contour_integral (linepath a b) f + contour_integral (linepath b c) f + contour_integral (linepath c a) f = 0)" - shows "f analytic_on s" + shows "f analytic_on S" proof - - { fix z assume "z \ s" + { fix z assume "z \ S" with assms obtain e a where "0 < e" and z: "z \ ball a e" and contf: "continuous_on (ball a e) f" and 0: "\b c. closed_segment b c \ ball a e @@ -5733,29 +5732,31 @@ have sb_ball: "ball z (e - dist a z) \ ball a e" by (simp add: dist_commute ball_subset_ball_iff) have "\e>0. f holomorphic_on ball z e" - apply (rule_tac x="e - dist a z" in exI) - apply (simp add: az) - apply (rule holomorphic_on_subset [OF _ sb_ball]) - apply (rule derivative_is_holomorphic[OF open_ball]) - apply (rule triangle_contour_integrals_starlike_primitive [OF contf _ open_ball, of a]) - apply (simp_all add: 0 \0 < e\) - apply (meson \0 < e\ centre_in_ball convex_ball convex_contains_segment mem_ball) - done + proof (intro exI conjI) + have sub_ball: "\y. dist a y < e \ closed_segment a y \ ball a e" + by (meson \0 < e\ centre_in_ball convex_ball convex_contains_segment mem_ball) + show "f holomorphic_on ball z (e - dist a z)" + apply (rule holomorphic_on_subset [OF _ sb_ball]) + apply (rule derivative_is_holomorphic[OF open_ball]) + apply (rule triangle_contour_integrals_starlike_primitive [OF contf _ open_ball, of a]) + apply (simp_all add: 0 \0 < e\ sub_ball) + done + qed (simp add: az) } then show ?thesis by (simp add: analytic_on_def) qed lemma Morera_local_triangle: - assumes "\z. z \ s + assumes "\z. z \ S \ \t. open t \ z \ t \ continuous_on t f \ (\a b c. convex hull {a,b,c} \ t \ contour_integral (linepath a b) f + contour_integral (linepath b c) f + contour_integral (linepath c a) f = 0)" - shows "f analytic_on s" + shows "f analytic_on S" proof - - { fix z assume "z \ s" + { fix z assume "z \ S" with assms obtain t where "open t" and z: "z \ t" and contf: "continuous_on t f" and 0: "\a b c. convex hull {a,b,c} \ t @@ -5767,29 +5768,27 @@ using open_contains_ball by blast have [simp]: "continuous_on (ball z e) f" using contf using continuous_on_subset e by blast - have "\e a. 0 < e \ - z \ ball a e \ - continuous_on (ball a e) f \ - (\b c. closed_segment b c \ ball a e \ - contour_integral (linepath a b) f + contour_integral (linepath b c) f + contour_integral (linepath c a) f = 0)" - apply (rule_tac x=e in exI) - apply (rule_tac x=z in exI) - apply (simp add: \e > 0\, clarify) - apply (rule 0) - apply (meson z \0 < e\ centre_in_ball closed_segment_subset convex_ball dual_order.trans e starlike_convex_subset) - done + have eq0: "\b c. closed_segment b c \ ball z e \ + contour_integral (linepath z b) f + + contour_integral (linepath b c) f + + contour_integral (linepath c z) f = 0" + by (meson 0 z \0 < e\ centre_in_ball closed_segment_subset convex_ball dual_order.trans e starlike_convex_subset) + have "\e a. 0 < e \ z \ ball a e \ continuous_on (ball a e) f \ + (\b c. closed_segment b c \ ball a e \ + contour_integral (linepath a b) f + contour_integral (linepath b c) f + contour_integral (linepath c a) f = 0)" + using \e > 0\ eq0 by force } then show ?thesis by (simp add: Morera_local_triangle_ball) qed proposition Morera_triangle: - "\continuous_on s f; open s; - \a b c. convex hull {a,b,c} \ s + "\continuous_on S f; open S; + \a b c. convex hull {a,b,c} \ S \ contour_integral (linepath a b) f + contour_integral (linepath b c) f + contour_integral (linepath c a) f = 0\ - \ f analytic_on s" + \ f analytic_on S" using Morera_local_triangle by blast @@ -5798,10 +5797,10 @@ lemma higher_deriv_linear [simp]: "(deriv ^^ n) (\w. c*w) = (\z. if n = 0 then c*z else if n = 1 then c else 0)" - by (induction n) (auto simp: deriv_const deriv_linear) + by (induction n) auto lemma higher_deriv_const [simp]: "(deriv ^^ n) (\w. c) = (\w. if n=0 then c else 0)" - by (induction n) (auto simp: deriv_const) + by (induction n) auto lemma higher_deriv_ident [simp]: "(deriv ^^ n) (\w. w) z = (if n = 0 then z else if n = 1 then 1 else 0)" @@ -5820,7 +5819,7 @@ by (metis DERIV_chain comp_funpow comp_id funpow_swap1 mult.right_neutral) proposition higher_deriv_uminus: - assumes "f holomorphic_on s" "open s" and z: "z \ s" + assumes "f holomorphic_on S" "open S" and z: "z \ S" shows "(deriv ^^ n) (\w. -(f w)) z = - ((deriv ^^ n) f z)" using z proof (induction n arbitrary: z) @@ -5829,18 +5828,18 @@ case (Suc n z) have *: "((deriv ^^ n) f has_field_derivative deriv ((deriv ^^ n) f) z) (at z)" using Suc.prems assms has_field_derivative_higher_deriv by auto - show ?case - apply simp - apply (rule DERIV_imp_deriv) + have "((deriv ^^ n) (\w. - f w) has_field_derivative - deriv ((deriv ^^ n) f) z) (at z)" apply (rule DERIV_transform_within_open [of "\w. -((deriv ^^ n) f w)"]) - apply (rule derivative_eq_intros | rule * refl assms Suc)+ - apply (simp add: Suc) + apply (rule derivative_eq_intros | rule * refl assms)+ + apply (auto simp add: Suc) done + then show ?case + by (simp add: DERIV_imp_deriv) qed proposition higher_deriv_add: fixes z::complex - assumes "f holomorphic_on s" "g holomorphic_on s" "open s" and z: "z \ s" + assumes "f holomorphic_on S" "g holomorphic_on S" "open S" and z: "z \ S" shows "(deriv ^^ n) (\w. f w + g w) z = (deriv ^^ n) f z + (deriv ^^ n) g z" using z proof (induction n arbitrary: z) @@ -5850,18 +5849,19 @@ have *: "((deriv ^^ n) f has_field_derivative deriv ((deriv ^^ n) f) z) (at z)" "((deriv ^^ n) g has_field_derivative deriv ((deriv ^^ n) g) z) (at z)" using Suc.prems assms has_field_derivative_higher_deriv by auto - show ?case - apply simp - apply (rule DERIV_imp_deriv) + have "((deriv ^^ n) (\w. f w + g w) has_field_derivative + deriv ((deriv ^^ n) f) z + deriv ((deriv ^^ n) g) z) (at z)" apply (rule DERIV_transform_within_open [of "\w. (deriv ^^ n) f w + (deriv ^^ n) g w"]) - apply (rule derivative_eq_intros | rule * refl assms Suc)+ - apply (simp add: Suc) + apply (rule derivative_eq_intros | rule * refl assms)+ + apply (auto simp add: Suc) done + then show ?case + by (simp add: DERIV_imp_deriv) qed corollary higher_deriv_diff: fixes z::complex - assumes "f holomorphic_on s" "g holomorphic_on s" "open s" and z: "z \ s" + assumes "f holomorphic_on S" "g holomorphic_on S" "open S" and z: "z \ S" shows "(deriv ^^ n) (\w. f w - g w) z = (deriv ^^ n) f z - (deriv ^^ n) g z" apply (simp only: Groups.group_add_class.diff_conv_add_uminus higher_deriv_add) apply (subst higher_deriv_add) @@ -5874,7 +5874,7 @@ proposition higher_deriv_mult: fixes z::complex - assumes "f holomorphic_on s" "g holomorphic_on s" "open s" and z: "z \ s" + assumes "f holomorphic_on S" "g holomorphic_on S" "open S" and z: "z \ S" shows "(deriv ^^ n) (\w. f w * g w) z = (\i = 0..n. of_nat (n choose i) * (deriv ^^ i) f z * (deriv ^^ (n - i)) g z)" using z @@ -5892,23 +5892,26 @@ apply (subst (4) sum_Suc_reindex) apply (auto simp: algebra_simps Suc_diff_le intro: sum.cong) done - show ?case - apply (simp only: funpow.simps o_apply) - apply (rule DERIV_imp_deriv) + have "((deriv ^^ n) (\w. f w * g w) has_field_derivative + (\i = 0..Suc n. (Suc n choose i) * (deriv ^^ i) f z * (deriv ^^ (Suc n - i)) g z)) + (at z)" apply (rule DERIV_transform_within_open - [of "\w. (\i = 0..n. of_nat (n choose i) * (deriv ^^ i) f w * (deriv ^^ (n - i)) g w)"]) - apply (simp add: algebra_simps) - apply (rule DERIV_cong [OF DERIV_sum]) - apply (rule DERIV_cmult) - apply (auto intro: DERIV_mult * sumeq \open s\ Suc.prems Suc.IH [symmetric]) + [of "\w. (\i = 0..n. of_nat (n choose i) * (deriv ^^ i) f w * (deriv ^^ (n - i)) g w)"]) + apply (simp add: algebra_simps) + apply (rule DERIV_cong [OF DERIV_sum]) + apply (rule DERIV_cmult) + apply (auto intro: DERIV_mult * sumeq \open S\ Suc.prems Suc.IH [symmetric]) done + then show ?case + unfolding funpow.simps o_apply + by (simp add: DERIV_imp_deriv) qed proposition higher_deriv_transform_within_open: fixes z::complex - assumes "f holomorphic_on s" "g holomorphic_on s" "open s" and z: "z \ s" - and fg: "\w. w \ s \ f w = g w" + assumes "f holomorphic_on S" "g holomorphic_on S" "open S" and z: "z \ S" + and fg: "\w. w \ S \ f w = g w" shows "(deriv ^^ i) f z = (deriv ^^ i) g z" using z by (induction i arbitrary: z) @@ -5916,45 +5919,41 @@ proposition higher_deriv_compose_linear: fixes z::complex - assumes f: "f holomorphic_on t" and s: "open s" and t: "open t" and z: "z \ s" - and fg: "\w. w \ s \ u * w \ t" + assumes f: "f holomorphic_on T" and S: "open S" and T: "open T" and z: "z \ S" + and fg: "\w. w \ S \ u * w \ T" shows "(deriv ^^ n) (\w. f (u * w)) z = u^n * (deriv ^^ n) f (u * z)" using z proof (induction n arbitrary: z) case 0 then show ?case by simp next case (Suc n z) - have holo0: "f holomorphic_on ( *) u ` s" + have holo0: "f holomorphic_on ( *) u ` S" by (meson fg f holomorphic_on_subset image_subset_iff) - have holo1: "(\w. f (u * w)) holomorphic_on s" + have holo2: "(deriv ^^ n) f holomorphic_on ( * ) u ` S" + by (meson f fg holomorphic_higher_deriv holomorphic_on_subset image_subset_iff T) + have holo3: "(\z. u ^ n * (deriv ^^ n) f (u * z)) holomorphic_on S" + by (intro holo2 holomorphic_on_compose [where g="(deriv ^^ n) f", unfolded o_def] holomorphic_intros) + have holo1: "(\w. f (u * w)) holomorphic_on S" apply (rule holomorphic_on_compose [where g=f, unfolded o_def]) apply (rule holo0 holomorphic_intros)+ done - have holo2: "(\z. u ^ n * (deriv ^^ n) f (u * z)) holomorphic_on s" - apply (rule holomorphic_intros)+ - apply (rule holomorphic_on_compose [where g="(deriv ^^ n) f", unfolded o_def]) - apply (rule holomorphic_intros) - apply (rule holomorphic_on_subset [where s=t]) - apply (rule holomorphic_intros assms)+ - apply (blast intro: fg) - done have "deriv ((deriv ^^ n) (\w. f (u * w))) z = deriv (\z. u^n * (deriv ^^ n) f (u*z)) z" - apply (rule complex_derivative_transform_within_open [OF _ holo2 s Suc.prems]) - apply (rule holomorphic_higher_deriv [OF holo1 s]) + apply (rule complex_derivative_transform_within_open [OF _ holo3 S Suc.prems]) + apply (rule holomorphic_higher_deriv [OF holo1 S]) apply (simp add: Suc.IH) done also have "\ = u^n * deriv (\z. (deriv ^^ n) f (u * z)) z" apply (rule deriv_cmult) apply (rule analytic_on_imp_differentiable_at [OF _ Suc.prems]) - apply (rule analytic_on_compose_gen [where g="(deriv ^^ n) f" and T=t, unfolded o_def]) + apply (rule analytic_on_compose_gen [where g="(deriv ^^ n) f" and T=T, unfolded o_def]) apply (simp add: analytic_on_linear) - apply (simp add: analytic_on_open f holomorphic_higher_deriv t) + apply (simp add: analytic_on_open f holomorphic_higher_deriv T) apply (blast intro: fg) done also have "\ = u * u ^ n * deriv ((deriv ^^ n) f) (u * z)" apply (subst complex_derivative_chain [where g = "(deriv ^^ n) f" and f = "( *) u", unfolded o_def]) apply (rule derivative_intros) - using Suc.prems field_differentiable_def f fg has_field_derivative_higher_deriv t apply blast + using Suc.prems field_differentiable_def f fg has_field_derivative_higher_deriv T apply blast apply (simp add: deriv_linear) done finally show ?case @@ -6002,26 +6001,26 @@ proposition no_isolated_singularity: fixes z::complex - assumes f: "continuous_on s f" and holf: "f holomorphic_on (s - k)" and s: "open s" and k: "finite k" - shows "f holomorphic_on s" + assumes f: "continuous_on S f" and holf: "f holomorphic_on (S - K)" and S: "open S" and K: "finite K" + shows "f holomorphic_on S" proof - { fix z - assume "z \ s" and cdf: "\x. x\s - k \ f field_differentiable at x" + assume "z \ S" and cdf: "\x. x\S - K \ f field_differentiable at x" have "f field_differentiable at z" - proof (cases "z \ k") - case False then show ?thesis by (blast intro: cdf \z \ s\) + proof (cases "z \ K") + case False then show ?thesis by (blast intro: cdf \z \ S\) next case True - with finite_set_avoid [OF k, of z] - obtain d where "d>0" and d: "\x. \x\k; x \ z\ \ d \ dist z x" + with finite_set_avoid [OF K, of z] + obtain d where "d>0" and d: "\x. \x\K; x \ z\ \ d \ dist z x" by blast - obtain e where "e>0" and e: "ball z e \ s" - using s \z \ s\ by (force simp: open_contains_ball) + obtain e where "e>0" and e: "ball z e \ S" + using S \z \ S\ by (force simp: open_contains_ball) have fde: "continuous_on (ball z (min d e)) f" by (metis Int_iff ball_min_Int continuous_on_subset e f subsetI) obtain g where "\w. w \ ball z (min d e) \ (g has_field_derivative f w) (at w within ball z (min d e))" apply (rule contour_integral_convex_primitive [OF convex_ball fde]) - apply (rule Cauchy_theorem_triangle_cofinite [OF _ k]) + apply (rule Cauchy_theorem_triangle_cofinite [OF _ K]) apply (metis continuous_on_subset [OF fde] closed_segment_subset convex_ball starlike_convex_subset) apply (rule cdf) apply (metis Diff_iff Int_iff ball_min_Int bot_least contra_subsetD convex_ball e insert_subset @@ -6034,43 +6033,43 @@ by (metis open_ball \0 < d\ \0 < e\ at_within_open centre_in_ball min_less_iff_conj) qed } - with holf s k show ?thesis + with holf S K show ?thesis by (simp add: holomorphic_on_open open_Diff finite_imp_closed field_differentiable_def [symmetric]) qed lemma no_isolated_singularity': fixes z::complex - assumes f: "\z. z \ k \ (f \ f z) (at z within s)" - and holf: "f holomorphic_on (s - k)" and s: "open s" and k: "finite k" - shows "f holomorphic_on s" + assumes f: "\z. z \ K \ (f \ f z) (at z within S)" + and holf: "f holomorphic_on (S - K)" and S: "open S" and K: "finite K" + shows "f holomorphic_on S" proof (rule no_isolated_singularity[OF _ assms(2-)]) - show "continuous_on s f" unfolding continuous_on_def + show "continuous_on S f" unfolding continuous_on_def proof - fix z assume z: "z \ s" - show "(f \ f z) (at z within s)" - proof (cases "z \ k") + fix z assume z: "z \ S" + show "(f \ f z) (at z within S)" + proof (cases "z \ K") case False - from holf have "continuous_on (s - k) f" + from holf have "continuous_on (S - K) f" by (rule holomorphic_on_imp_continuous_on) - with z False have "(f \ f z) (at z within (s - k))" + with z False have "(f \ f z) (at z within (S - K))" by (simp add: continuous_on_def) - also from z k s False have "at z within (s - k) = at z within s" + also from z K S False have "at z within (S - K) = at z within S" by (subst (1 2) at_within_open) (auto intro: finite_imp_closed) - finally show "(f \ f z) (at z within s)" . + finally show "(f \ f z) (at z within S)" . qed (insert assms z, simp_all) qed qed proposition Cauchy_integral_formula_convex: - assumes s: "convex s" and k: "finite k" and contf: "continuous_on s f" - and fcd: "(\x. x \ interior s - k \ f field_differentiable at x)" - and z: "z \ interior s" and vpg: "valid_path \" - and pasz: "path_image \ \ s - {z}" and loop: "pathfinish \ = pathstart \" + assumes S: "convex S" and K: "finite K" and contf: "continuous_on S f" + and fcd: "(\x. x \ interior S - K \ f field_differentiable at x)" + and z: "z \ interior S" and vpg: "valid_path \" + and pasz: "path_image \ \ S - {z}" and loop: "pathfinish \ = pathstart \" shows "((\w. f w / (w - z)) has_contour_integral (2*pi * \ * winding_number \ z * f z)) \" - apply (rule Cauchy_integral_formula_weak [OF s finite.emptyI contf]) + apply (rule Cauchy_integral_formula_weak [OF S finite.emptyI contf]) apply (simp add: holomorphic_on_open [symmetric] field_differentiable_def) - using no_isolated_singularity [where s = "interior s"] - apply (metis k contf fcd holomorphic_on_open field_differentiable_def continuous_on_subset + using no_isolated_singularity [where S = "interior S"] + apply (metis K contf fcd holomorphic_on_open field_differentiable_def continuous_on_subset has_field_derivative_at_within holomorphic_on_def interior_subset open_interior) using assms apply auto @@ -7330,7 +7329,7 @@ done show ?thesis unfolding d_def - apply (rule no_isolated_singularity [OF * _ u, where k = "{w}"]) + apply (rule no_isolated_singularity [OF * _ u, where K = "{w}"]) apply (auto simp: field_differentiable_def [symmetric] holomorphic_on_open open_Diff u **) done qed diff -r e761afd35baa -r 0f19c98fa7be src/HOL/Analysis/Conformal_Mappings.thy --- a/src/HOL/Analysis/Conformal_Mappings.thy Sat Jun 02 22:40:03 2018 +0200 +++ b/src/HOL/Analysis/Conformal_Mappings.thy Sat Jun 02 22:57:44 2018 +0100 @@ -2489,7 +2489,7 @@ finally have **: "g \z\ g z" . have g_holo: "g holomorphic_on s" - by (rule no_isolated_singularity'[where k = "{z}"]) + by (rule no_isolated_singularity'[where K = "{z}"]) (insert assms * **, simp_all add: at_within_open_NO_MATCH) from s and this have "residue (\w. g w / (w - z)) z = g z" by (rule residue_simple)