# HG changeset patch # User paulson # Date 1600009865 -3600 # Node ID 25cf074a41884cf3e5914675ccfd8359c37d2b66 # Parent 4a7e85560df758c7d9bdab58602987978d1e4c73 de-applying diff -r 4a7e85560df7 -r 25cf074a4188 src/HOL/Complex_Analysis/Conformal_Mappings.thy --- a/src/HOL/Complex_Analysis/Conformal_Mappings.thy Fri Sep 11 18:55:31 2020 +0100 +++ b/src/HOL/Complex_Analysis/Conformal_Mappings.thy Sun Sep 13 16:11:05 2020 +0100 @@ -20,18 +20,16 @@ obtain r where "0 < r" and r: "ball \ r \ S" using \open S\ \\ \ S\ open_contains_ball_eq by blast have powf: "((\n. (deriv ^^ n) f \ / (fact n) * (z - \)^n) sums f z)" if "z \ ball \ r" for z - apply (rule holomorphic_power_series [OF _ that]) - apply (rule holomorphic_on_subset [OF holf r]) - done + by (intro holomorphic_power_series [OF _ that] holomorphic_on_subset [OF holf r]) obtain m where m: "(deriv ^^ m) f \ / (fact m) \ 0" using holomorphic_fun_eq_0_on_connected [OF holf \open S\ \connected S\ _ \\ \ S\ \\ \ S\] \f \ \ 0\ by auto then have "m \ 0" using assms(5) funpow_0 by fastforce obtain s where "0 < s" and s: "\z. z \ cball \ s - {\} \ f z \ 0" - apply (rule powser_0_nonzero [OF \0 < r\ powf \f \ = 0\ m]) - using \m \ 0\ by (auto simp: dist_commute dist_norm) + using powser_0_nonzero [OF \0 < r\ powf \f \ = 0\ m] + by (metis \m \ 0\ dist_norm mem_ball norm_minus_commute not_gr_zero) have "0 < min r s" by (simp add: \0 < r\ \0 < s\) - then show ?thesis + then show thesis apply (rule that) using r s by auto qed @@ -61,10 +59,10 @@ by (simp add: closure_def) then have "f \ = 0" by (auto simp: continuous_constant_on_closure [OF contf]) - show ?thesis - apply (rule ccontr) - apply (rule isolated_zeros [OF holf \open S\ \connected S\ \\ \ S\ \f \ = 0\ \w \ S\], assumption) + moreover have "\r. \0 < r; \z. z \ ball \ r - {\} \ f z \ 0\ \ False" by (metis open_ball \\ islimpt T\ centre_in_ball fT0 insertE insert_Diff islimptE) + ultimately show ?thesis + by (metis \open S\ \connected S\ \\ \ S\ \w \ S\ holf isolated_zeros) qed corollary analytic_continuation_open: @@ -116,27 +114,26 @@ using contf' continuous_on_compose continuous_on_norm_id by blast ultimately obtain w where w: "w \ frontier(cball \ r)" and now: "\x. x \ frontier(cball \ r) \ norm (f w) \ norm (f x)" - apply (rule bexE [OF continuous_attains_inf [OF compact_frontier [OF compact_cball]]]) - apply simp - done + using continuous_attains_inf [OF compact_frontier [OF compact_cball]] + by (metis comp_apply) then have fw: "0 < norm (f w)" by (simp add: fnz') have "continuous_on (frontier (cball \ r)) (norm o g)" using contg' continuous_on_compose continuous_on_norm_id by blast then obtain v where v: "v \ frontier(cball \ r)" and nov: "\x. x \ frontier(cball \ r) \ norm (g v) \ norm (g x)" - apply (rule bexE [OF continuous_attains_sup [OF compact_frontier [OF compact_cball] froc]]) - apply simp - done + using continuous_attains_sup [OF compact_frontier [OF compact_cball] froc] by force then have fv: "0 < norm (f v)" by (simp add: fnz') have "norm ((deriv ^^ 0) g \) \ fact 0 * norm (g v) / r ^ 0" by (rule Cauchy_inequality [OF holg contg \0 < r\]) (simp add: dist_norm nov) - then have "cmod (g \) \ norm (g v)" + then have "cmod (g \) \ cmod (g v)" by simp - with w have wr: "norm (\ - w) = r" and nfw: "norm (f w) \ norm (f \)" - apply (simp_all add: dist_norm) - by (metis \0 < cmod (f \)\ g_def less_imp_inverse_less norm_inverse not_le now order_trans v) + moreover have "cmod (\ - w) = r" + by (metis (no_types) dist_norm frontier_cball mem_sphere w) + ultimately obtain wr: "norm (\ - w) = r" and nfw: "norm (f w) \ norm (f \)" + unfolding g_def + by (metis (no_types) \0 < cmod (f \)\ less_imp_inverse_less norm_inverse not_le now order_trans v) with fw have False using norm_less by force } @@ -163,8 +160,7 @@ and sne: "\z. z \ ball \ s - {\} \ (\z. f z - f \) z \ 0" using isolated_zeros [OF hol U \] by (metis fneU right_minus_eq) obtain r where "0 < r" and r: "cball \ r \ ball \ s" - apply (rule_tac r="s/2" in that) - using \0 < s\ by auto + using \0 < s\ by (rule_tac r="s/2" in that) auto have "cball \ r \ U" using sbU r by blast then have frsbU: "frontier (cball \ r) \ U" @@ -177,9 +173,7 @@ by (metis continuous_on_norm continuous_on_subset frsbU hol holomorphic_on_imp_continuous_on) obtain w where "norm (\ - w) = r" and w: "(\z. norm (\ - z) = r \ norm (f w - f \) \ norm(f z - f \))" - apply (rule bexE [OF continuous_attains_inf [OF cof frne contfr]]) - apply (simp add: dist_norm) - done + using continuous_attains_inf [OF cof frne contfr] by (auto simp: dist_norm) moreover define \ where "\ \ norm (f w - f \) / 3" ultimately have "0 < \" using \0 < r\ dist_complex_def r sne by auto @@ -195,20 +189,15 @@ by (simp add: \_def dist_norm norm_minus_commute) show ?thesis by (metis \_def dist_commute dist_norm less_trans lt mem_ball \) - qed + qed have "continuous_on (cball \ r) (\z. \ - f z)" - apply (rule continuous_intros)+ using \cball \ r \ U\ \f holomorphic_on U\ - apply (blast intro: continuous_on_subset holomorphic_on_imp_continuous_on) - done + by (force intro: continuous_intros continuous_on_subset holomorphic_on_imp_continuous_on) moreover have "(\z. \ - f z) holomorphic_on ball \ r" - apply (rule holomorphic_intros)+ - apply (metis \cball \ r \ U\ \f holomorphic_on U\ holomorphic_on_subset interior_cball interior_subset) - done + using \cball \ r \ U\ ball_subset_cball holomorphic_on_subset that(4) + by (intro holomorphic_intros) blast ultimately obtain z where "z \ ball \ r" "\ - f z = 0" - apply (rule holomorphic_contract_to_zero) - apply (blast intro!: \0 < r\ *)+ - done + using "*" \0 < r\ holomorphic_contract_to_zero by blast then show "\ \ f ` U" using \cball \ r \ U\ by fastforce qed @@ -269,14 +258,11 @@ have "C \ S" by (metis \C \ components S\ in_components_maximal) have nf: "\ f constant_on C" - apply (rule fnc) - using C \C \ S\ \C \ components S\ in_components_nonempty by auto + using \open C\ \C \ components S\ \C \ S\ fnc in_components_nonempty by blast have "f holomorphic_on C" by (metis holf holomorphic_on_subset \C \ S\) then have "open (f ` (C \ U))" - apply (rule open_mapping_thm [OF _ C _ _ nf]) - apply (simp add: C \open U\ open_Int, blast) - done + by (meson C \open U\ inf_le1 nf open_Int open_mapping_thm) } ultimately show ?thesis by force qed @@ -285,10 +271,10 @@ assumes holf: "f holomorphic_on S" and "open S" and injf: "inj_on f S" shows "open (f ` S)" -apply (rule open_mapping_thm2 [OF holf]) -using assms -apply (simp_all add:) -using injective_not_constant subset_inj_on by blast +proof (rule open_mapping_thm2 [OF holf]) + show "\X. \open X; X \ S; X \ {}\ \ \ f constant_on X" + using inj_on_subset injective_not_constant injf by blast +qed (use assms in auto) subsection\Maximum modulus principle\ @@ -308,8 +294,8 @@ moreover have "\ open (f ` U)" proof - have "\t. cmod (f \ - t) < e \ t \ f ` U" if "0 < e" for e + using that apply (rule_tac x="if 0 < Re(f \) then f \ + (e/2) else f \ - (e/2)" in exI) - using that apply (simp add: dist_norm) apply (fastforce simp: cmod_Re_le_iff dest!: no dest: sym) done @@ -332,7 +318,7 @@ by (simp add: bounded_closure compact_eq_bounded_closed) moreover have "continuous_on (closure S) (cmod \ f)" using contf continuous_on_compose continuous_on_norm_id by blast - ultimately obtain z where zin: "z \ closure S" and z: "\y. y \ closure S \ (cmod \ f) y \ (cmod \ f) z" + ultimately obtain z where "z \ closure S" and z: "\y. y \ closure S \ (cmod \ f) y \ (cmod \ f) z" using continuous_attains_sup [of "closure S" "norm o f"] \\ \ S\ by auto then consider "z \ frontier S" | "z \ interior S" using frontier_def by auto then have "norm(f z) \ B" @@ -340,32 +326,35 @@ case 1 then show ?thesis using leB by blast next case 2 - have zin: "z \ connected_component_set (interior S) z" - by (simp add: 2) have "f constant_on (connected_component_set (interior S) z)" - apply (rule maximum_modulus_principle [OF _ _ _ _ _ zin]) - apply (metis connected_component_subset holf holomorphic_on_subset) - apply (simp_all add: open_connected_component) - by (metis closure_subset comp_eq_dest_lhs interior_subset subsetCE z connected_component_in) + proof (rule maximum_modulus_principle) + show "f holomorphic_on connected_component_set (interior S) z" + by (metis connected_component_subset holf holomorphic_on_subset) + show zin: "z \ connected_component_set (interior S) z" + by (simp add: 2) + show "\W. W \ connected_component_set (interior S) z \ cmod (f W) \ cmod (f z)" + using closure_def connected_component_subset z by fastforce + qed (auto simp: open_connected_component) then obtain c where c: "\w. w \ connected_component_set (interior S) z \ f w = c" by (auto simp: constant_on_def) have "f ` closure(connected_component_set (interior S) z) \ {c}" - apply (rule image_closure_subset) - apply (meson closure_mono connected_component_subset contf continuous_on_subset interior_subset) - using c - apply auto - done + proof (rule image_closure_subset) + show "continuous_on (closure (connected_component_set (interior S) z)) f" + by (meson closure_mono connected_component_subset contf continuous_on_subset interior_subset) + qed (use c in auto) then have cc: "\w. w \ closure(connected_component_set (interior S) z) \ f w = c" by blast - have "frontier(connected_component_set (interior S) z) \ {}" - apply (simp add: frontier_eq_empty) - by (metis "2" bos bounded_interior connected_component_eq_UNIV connected_component_refl not_bounded_UNIV) + have "connected_component (interior S) z z" + by (simp add: "2") + moreover have "connected_component_set (interior S) z \ UNIV" + by (metis bos bounded_interior connected_component_eq_UNIV not_bounded_UNIV) + ultimately have "frontier(connected_component_set (interior S) z) \ {}" + by (meson "2" connected_component_eq_empty frontier_not_empty) then obtain w where w: "w \ frontier(connected_component_set (interior S) z)" by auto then have "norm (f z) = norm (f w)" by (simp add: "2" c cc frontier_def) also have "... \ B" - apply (rule leB) - using w -using frontier_interior_subset frontier_of_connected_component_subset by blast + using w frontier_interior_subset frontier_of_connected_component_subset + by (blast intro: leB) finally show ?thesis . qed then show ?thesis @@ -405,16 +394,14 @@ if w: "w \ ball \ r" for w proof - define powf where "powf = (\i. (deriv ^^ i) f \/(fact i) * (w - \)^i)" + have [simp]: "powf 0 = f \" + by (simp add: powf_def) have sing: "{.. = 0 then {} else {0})" unfolding powf_def using \0 < n\ dfz by (auto simp: dfz; metis funpow_0 not_gr0) have "powf sums f w" unfolding powf_def by (rule holomorphic_power_series [OF holfb w]) moreover have "(\i" - apply (subst Groups_Big.comm_monoid_add_class.sum.setdiff_irrelevant [symmetric]) - apply simp - apply (simp only: dfz sing) - apply (simp add: powf_def) - done + by (subst sum.setdiff_irrelevant [symmetric]; simp add: dfz sing) ultimately have fsums: "(\i. powf (i+n)) sums (f w - f \)" using w sums_iff_shift' by metis then have *: "summable (\i. (w - \) ^ n * ((deriv ^^ (i + n)) f \ * (w - \) ^ i / fact (i + n)))" @@ -432,10 +419,8 @@ then show sumsg: "(\i. (deriv ^^ (i + n)) f \ / (fact(i + n)) * (w - \)^i) sums g w" by (simp add: summable_sums_iff g_def) show "f w - f \ = (w - \)^n * g w" - apply (rule sums_unique2) - apply (rule fsums [unfolded powf_def]) using sums_mult [OF sumsg, of "(w - \) ^ n"] - by (auto simp: power_add mult_ac) + by (intro sums_unique2 [OF fsums]) (auto simp: power_add mult_ac powf_def) qed then have holg: "g holomorphic_on ball \ r" by (meson sumsg power_series_holomorphic) @@ -445,15 +430,13 @@ using dnz unfolding g_def by (subst suminf_finite [of "{0}"]) auto obtain d where "0 < d" and d: "\w. w \ ball \ d \ g w \ 0" - apply (rule exE [OF continuous_on_avoid [OF contg _ \g \ \ 0\]]) - using \0 < r\ - apply force - by (metis \0 < r\ less_trans mem_ball not_less_iff_gr_or_eq) + using \0 < r\ continuous_on_avoid [OF contg _ \g \ \ 0\] + by (metis centre_in_ball le_cases mem_ball mem_ball_leI) show ?thesis - apply (rule that [where g=g and r ="min r d"]) - using \0 < r\ \0 < d\ holg - apply (auto simp: feq holomorphic_on_subset subset_ball d) - done + proof + show "g holomorphic_on ball \ (min r d)" + using holg by (auto simp: feq holomorphic_on_subset subset_ball d) + qed (use \0 < r\ \0 < d\ in \auto simp: feq d\) qed @@ -473,42 +456,36 @@ by (auto intro: holomorphic_factor_order_of_zero [OF assms]) have con: "continuous_on (ball \ r) (\z. deriv g z / g z)" by (rule continuous_intros) (auto simp: gne holg holomorphic_deriv holomorphic_on_imp_continuous_on) - have cd: "\x. dist \ x < r \ (\z. deriv g z / g z) field_differentiable at x" - apply (rule derivative_intros)+ - using holg mem_ball apply (blast intro: holomorphic_deriv holomorphic_on_imp_differentiable_at) - apply (metis open_ball at_within_open holg holomorphic_on_def mem_ball) - using gne mem_ball by blast - obtain h where h: "\x. x \ ball \ r \ (h has_field_derivative deriv g x / g x) (at x)" - apply (rule exE [OF holomorphic_convex_primitive [of "ball \ r" "{}" "\z. deriv g z / g z"]]) - apply (auto simp: con cd) - apply (metis open_ball at_within_open mem_ball) - done + have cd: "(\z. deriv g z / g z) field_differentiable at x" if "dist \ x < r" for x + proof (intro derivative_intros) + show "deriv g field_differentiable at x" + using that holg mem_ball by (blast intro: holomorphic_deriv holomorphic_on_imp_differentiable_at) + show "g field_differentiable at x" + by (metis that open_ball at_within_open holg holomorphic_on_def mem_ball) + qed (simp add: gne that) + obtain h where h: "\x. x \ ball \ r \ (h has_field_derivative deriv g x / g x) (at x)" + using holomorphic_convex_primitive [of "ball \ r" "{}" "\z. deriv g z / g z"] + by (metis (no_types, lifting) Diff_empty at_within_interior cd con convex_ball infinite_imp_nonempty interior_ball mem_ball) then have "continuous_on (ball \ r) h" by (metis open_ball holomorphic_on_imp_continuous_on holomorphic_on_open) then have con: "continuous_on (ball \ r) (\x. exp (h x) / g x)" by (auto intro!: continuous_intros simp add: holg holomorphic_on_imp_continuous_on gne) have 0: "dist \ x < r \ ((\x. exp (h x) / g x) has_field_derivative 0) (at x)" for x - apply (rule h derivative_eq_intros | simp)+ - apply (rule DERIV_deriv_iff_field_differentiable [THEN iffD2]) - using holg apply (auto simp: holomorphic_on_imp_differentiable_at gne h) - done + apply (rule h derivative_eq_intros DERIV_deriv_iff_field_differentiable [THEN iffD2] | simp)+ + using holg by (auto simp: holomorphic_on_imp_differentiable_at gne h) obtain c where c: "\x. x \ ball \ r \ exp (h x) / g x = c" by (rule DERIV_zero_connected_constant [of "ball \ r" "{}" "\x. exp(h x) / g x"]) (auto simp: con 0) have hol: "(\z. exp ((Ln (inverse c) + h z) / of_nat n)) holomorphic_on ball \ r" - apply (rule holomorphic_on_compose [unfolded o_def, where g = exp]) - apply (rule holomorphic_intros)+ - using h holomorphic_on_open apply blast - apply (rule holomorphic_intros)+ - using \0 < n\ apply simp - apply (rule holomorphic_intros)+ - done + proof (intro holomorphic_intros holomorphic_on_compose [unfolded o_def, where g = exp]) + show "h holomorphic_on ball \ r" + using h holomorphic_on_open by blast + qed (use \0 < n\ in auto) show ?thesis - apply (rule that [where g="\z. exp((Ln(inverse c) + h z)/n)" and r =r]) - using \0 < r\ \0 < n\ - apply (auto simp: feq power_mult_distrib exp_divide_power_eq c [symmetric]) - apply (rule hol) - apply (simp add: Transcendental.exp_add gne) - done + proof + show "\w. w \ ball \ r \ f w - f \ = ((w - \) * exp ((Ln (inverse c) + h w) / of_nat n)) ^ n" + using \0 < n\ + by (auto simp: feq power_mult_distrib exp_divide_power_eq exp_add gne simp flip: c) + qed (use hol \0 < r\ in auto) qed @@ -543,15 +520,17 @@ have n_min: "\k. k < n \ (deriv ^^ k) f \ = 0" using def_Least_le [OF n_def] not_le by blast then obtain g r1 - where "0 < r1" "g holomorphic_on ball \ r1" - "\w. w \ ball \ r1 \ f w = (w - \) ^ n * g w" - "\w. w \ ball \ r1 \ g w \ 0" + where g: "0 < r1" "g holomorphic_on ball \ r1" + and geq: "\w. w \ ball \ r1 \ f w = (w - \) ^ n * g w" + and g0: "\w. w \ ball \ r1 \ g w \ 0" by (auto intro: holomorphic_factor_order_of_zero [OF holf \open S\ \\ \ S\ \n > 0\ n_ne] simp: \f \ = 0\) - then show ?thesis - apply (rule_tac g=g and r="min r0 r1" and n=n in that) - using \0 < n\ \0 < r0\ \0 < r1\ \ball \ r0 \ S\ - apply (auto simp: subset_ball intro: holomorphic_on_subset) - done + show ?thesis + proof + show "g holomorphic_on ball \ (min r0 r1)" + using g by auto + show "\w. w \ ball \ (min r0 r1) \ f w = (w - \) ^ n * g w" + by (simp add: geq) + qed (use \0 < n\ \0 < r0\ \0 < r1\ \ball \ r0 \ S\ g0 in auto) qed @@ -599,12 +578,12 @@ also have "... \ ball \ e" using \0 < d\ d_def by auto also have "... \ S" by (rule e) finally have dS: "ball \ d \ S" . - moreover have "x \ 0" using gnz x \d < r\ by auto - ultimately show ?thesis - apply (rule_tac k="norm x" and n=n and r=d in that) - using \d < r\ leg - apply (auto simp: \0 < d\ fne norm_mult norm_power algebra_simps mult_right_mono) - done + have "x \ 0" using gnz x \d < r\ by auto + show thesis + proof + show "\w. w \ ball \ d \ cmod x * cmod (w - \) ^ n \ cmod (f w - f \)" + using \d < r\ leg by (auto simp: fne norm_mult norm_power algebra_simps mult_right_mono) + qed (use dS \x \ 0\ \d > 0\ in auto) qed lemma @@ -622,14 +601,15 @@ using \ mem_interior by blast have "?R" if holg: "g holomorphic_on S" and gf: "\z. z \ S - {\} \ g z = f z" for g proof - - have *: "\\<^sub>F z in at \. dist (g z) (g \) < 1 \ cmod (f z) \ cmod (g \) + 1" - apply (simp add: eventually_at) - apply (rule_tac x="\" in exI) - using \ \0 < \\ - apply (clarsimp simp:) - apply (drule_tac c=x in subsetD) - apply (simp add: dist_commute) - by (metis DiffI add.commute diff_le_eq dist_norm gf le_less_trans less_eq_real_def norm_triangle_ineq2 singletonD) + have \
: "cmod (f x) \ cmod (g \) + 1" if "x \ \" "dist x \ < \" "dist (g x) (g \) < 1" for x + proof - + have "x \ S" + by (metis \ dist_commute mem_ball subsetD that(2)) + with that gf [of x] show ?thesis + using norm_triangle_ineq2 [of "f x" "g \"] dist_complex_def by auto + qed + then have *: "\\<^sub>F z in at \. dist (g z) (g \) < 1 \ cmod (f z) \ cmod (g \) + 1" + using \0 < \\ eventually_at by blast have "continuous_on (interior S) g" by (meson continuous_on_subset holg holomorphic_on_imp_continuous_on interior_subset) then have "\x. x \ interior S \ (g \ g x) (at x)" @@ -648,8 +628,7 @@ define h where [abs_def]: "h z = (z - \)^2 * f z" for z have h0: "(h has_field_derivative 0) (at \)" apply (simp add: h_def has_field_derivative_iff) - apply (rule Lim_transform_within [OF that, of 1]) - apply (auto simp: field_split_simps power2_eq_square) + apply (auto simp: field_split_simps power2_eq_square Lim_transform_within [OF that, of 1]) done have holh: "h holomorphic_on S" proof (simp add: holomorphic_on_def, clarify) @@ -671,12 +650,12 @@ define g where [abs_def]: "g z = (if z = \ then deriv h \ else (h z - h \) / (z - \))" for z have holg: "g holomorphic_on S" unfolding g_def by (rule pole_lemma [OF holh \]) + have \
: "\z\S - {\}. (g z - g \) / (z - \) = f z" + using h0 by (auto simp: g_def power2_eq_square divide_simps DERIV_imp_deriv h_def) show ?thesis - apply (rule_tac x="\z. if z = \ then deriv g \ else (g z - g \)/(z - \)" in exI) - apply (rule conjI) - apply (rule pole_lemma [OF holg \]) - apply (auto simp: g_def power2_eq_square divide_simps) - using h0 apply (simp add: h0 DERIV_imp_deriv h_def power2_eq_square) + apply (intro exI conjI) + apply (rule pole_lemma [OF holg \]) + apply (simp add: \
) done qed ultimately show "?P = ?Q" and "?P = ?R" @@ -688,10 +667,11 @@ obtains a n where "\z. f z = (\i\n. a i * z^i)" proof (cases "l = 0") case False - with tendsto_inverse [OF lim] show ?thesis - apply (rule_tac a="(\n. inverse l)" and n=0 in that) - apply (simp add: Liouville_weak [OF holf, of "inverse l"]) - done + show thesis + proof + show "f z = (\i\0. inverse l * z ^ i)" for z + using False tendsto_inverse [OF lim] by (simp add: Liouville_weak [OF holf]) + qed next case True then have [simp]: "l = 0" . @@ -706,11 +686,8 @@ using \0 < r\ by simp have "\B. 0 eventually (\z. cmod ((inverse \ f \ inverse) z) \ B) (at 0)" apply (rule exI [where x=1]) - apply simp using tendstoD [OF lim [unfolded lim_at_infinity_0] zero_less_one] - apply (rule eventually_mono) - apply (simp add: dist_norm) - done + by (simp add: eventually_mono) with holomorphic_on_extend_bounded [OF 1 2] obtain g where holg: "g holomorphic_on ball 0 r" and geq: "\z. z \ ball 0 r - {0} \ g z = (inverse \ f \ inverse) z" @@ -726,17 +703,18 @@ have [simp]: "g 0 = 0" by (rule tendsto_unique [OF _ g2g0 g2g1]) simp have "ball 0 r - {0::complex} \ {}" - using \0 < r\ - apply (clarsimp simp: ball_def dist_norm) - apply (drule_tac c="of_real r/2" in subsetD, auto) - done + using \0 < r\ by (metis "2" Diff_iff insert_Diff interior_ball interior_singleton) then obtain w::complex where "w \ 0" and w: "norm w < r" by force then have "g w \ 0" by (simp add: geq r) obtain B n e where "0 < B" "0 < e" "e \ r" and leg: "\w. norm w < e \ B * cmod w ^ n \ cmod (g w)" - apply (rule holomorphic_lower_bound_difference [OF holg open_ball connected_ball, of 0 w]) - using \0 < r\ w \g w \ 0\ by (auto simp: ball_subset_ball_iff) - have "cmod (f z) \ cmod z ^ n / B" if "2/e \ cmod z" for z + proof (rule holomorphic_lower_bound_difference [OF holg open_ball connected_ball]) + show "g w \ g 0" + by (simp add: \g w \ 0\) + show "w \ ball 0 r" + using mem_ball_0 w by blast + qed (use \0 < r\ in \auto simp: ball_subset_ball_iff\) + have \
: "cmod (f z) \ cmod z ^ n / B" if "2/e \ cmod z" for z proof - have ize: "inverse z \ ball 0 e - {0}" using that \0 < e\ by (auto simp: norm_divide field_split_simps algebra_simps) @@ -749,10 +727,11 @@ show ?thesis using ize leg [of "inverse z"] \0 < B\ \0 < e\ by (simp add: field_split_simps norm_divide algebra_simps) qed - then show ?thesis - apply (rule_tac a = "\k. (deriv ^^ k) f 0 / (fact k)" and n=n in that) - apply (rule_tac A = "2/e" and B = "1/B" in Liouville_polynomial [OF holf], simp) - done + show thesis + proof + show "f z = (\i\n. (deriv ^^ i) f 0 / fact i * z ^ i)" for z + using \
by (rule_tac A = "2/e" and B = "1/B" in Liouville_polynomial [OF holf], simp) + qed next case False then have fi0: "\r. r > 0 \ \z\ball 0 r - {0}. f (inverse z) = 0" @@ -773,39 +752,29 @@ have "continuous_on (inverse ` (ball 0 r - {0})) f" using continuous_on_subset holf holomorphic_on_imp_continuous_on by blast then have "connected ((f \ inverse) ` (ball 0 r - {0}))" - apply (intro connected_continuous_image continuous_intros) - apply (force intro: connected_punctured_ball)+ - done + using connected_punctured_ball + by (intro connected_continuous_image continuous_intros; force) then have "{0} \ (f \ inverse) ` (ball 0 r - {0}) = {} \ - ball 0 1 \ (f \ inverse) ` (ball 0 r - {0}) = {}" by (rule connected_closedD) (use * in auto) - then have "w \ 0 \ cmod w < r \ f (inverse w) = 0" for w - using fi0 **[of w] \0 < r\ - apply (auto simp add: inf.commute [of "- ball 0 1"] Diff_eq [symmetric] image_subset_iff dest: less_imp_le) - apply fastforce - apply (drule bspec [of _ _ w]) - apply (auto dest: less_imp_le) - done + then have "f (inverse w) = 0" if "w \ 0" "cmod w < r" for w + using **[of w] fi0 \0 < r\ that by force then show ?thesis - apply (simp add: lim_at_infinity_0) - apply (rule tendsto_eventually) - apply (simp add: eventually_at) - apply (rule_tac x=r in exI) - apply (simp add: \0 < r\ dist_norm) - done + unfolding lim_at_infinity_0 + using eventually_at \r > 0\ by (force simp add: intro: tendsto_eventually) qed obtain w where "w \ ball 0 r - {0}" and "f (inverse w) = 0" using False \0 < r\ by blast then show ?thesis by (auto simp: f0 Liouville_weak [OF holf, of 0]) qed - show ?thesis - apply (rule that [of "\n. 0" 0]) - using lim [unfolded lim_at_infinity_0] - apply (simp add: Lim_at dist_norm norm_inverse) - apply (drule_tac x=1 in spec) - using fz0 apply auto - done + show thesis + proof + show "\z. f z = (\i\0. 0 * z ^ i)" + using lim + apply (simp add: lim_at_infinity_0 Lim_at dist_norm norm_inverse) + using fz0 zero_less_one by blast qed + qed qed subsection\<^marker>\tag unimportant\ \Entire proper functions are precisely the non-trivial polynomials\ @@ -832,8 +801,8 @@ using Limits.polyfun_extremal [where c=c and B="B+1", OF c] by (auto simp: bounded_pos eventually_at_infinity_pos *) moreover have "closed ((\z. (\i\n. c i * z ^ i)) -` K)" - apply (intro allI continuous_closed_vimage continuous_intros) - using \compact K\ compact_eq_bounded_closed by blast + using \compact K\ compact_eq_bounded_closed + by (intro allI continuous_closed_vimage continuous_intros; force) ultimately show ?thesis using closed_Int_compact [OF \closed S\] compact_eq_bounded_closed by (auto simp add: vimage_def) @@ -866,35 +835,28 @@ define m where "m = (GREATEST k. k\n \ a k \ 0)" have m: "m\n \ a m \ 0" unfolding m_def - apply (rule GreatestI_nat [where b = n]) - using k apply auto - done + using GreatestI_nat [where b = n] k by (metis (mono_tags, lifting)) have [simp]: "a i = 0" if "m < i" "i \ n" for i using Greatest_le_nat [where b = "n" and P = "\k. k\n \ a k \ 0"] using m_def not_le that by auto have "k \ m" unfolding m_def - apply (rule Greatest_le_nat [where b = "n"]) - using k apply auto - done + using Greatest_le_nat [where b = n] k by (metis (mono_tags, lifting)) with k m show ?thesis by (rule_tac x=m in exI) (auto simp: that comm_monoid_add_class.sum.mono_neutral_right) qed - have "((inverse \ f) \ 0) at_infinity" + have \
: "((inverse \ f) \ 0) at_infinity" proof (rule Lim_at_infinityI) fix e::real assume "0 < e" with compf [of "cball 0 (inverse e)"] show "\B. \x. B \ cmod x \ dist ((inverse \ f) x) 0 \ e" apply simp apply (clarsimp simp add: compact_eq_bounded_closed bounded_pos norm_inverse) - apply (rule_tac x="b+1" in exI) - apply (metis inverse_inverse_eq less_add_same_cancel2 less_imp_inverse_less add.commute not_le not_less_iff_gr_or_eq order_trans zero_less_one) - done + by (metis (no_types, hide_lams) inverse_inverse_eq le_less_trans less_eq_real_def less_imp_inverse_less linordered_field_no_ub not_less) qed - then show ?rhs - apply (rule pole_at_infinity [OF assms]) - using 2 apply blast - done + then obtain a n where "\z. f z = (\i\n. a i * z^i)" + using assms pole_at_infinity by blast + with \
2 show ?rhs by blast next assume ?rhs then obtain c n where "0 < n" "c n \ 0" "f = (\z. \i\n. c i * z ^ i)" by blast @@ -918,30 +880,27 @@ obtain \ where "\>0" and \: "\x. \x \ S; dist x \ \ \\ \ cmod (deriv f x - deriv f \) \ e/2" using continuous_onE [OF contdf \\ \ S\, of "e/2"] \0 < e\ by (metis dist_complex_def half_gt_zero less_imp_le) + have \
: "\\ z. \\ \ S; dist \ \ < \\ \ cmod (deriv f \ - deriv f \) * cmod z \ e/2 * cmod z" + by (intro mult_right_mono [OF \]) (auto simp: dist_commute) obtain \ where "\>0" "ball \ \ \ S" by (metis openE [OF \open S\ \\ \ S\]) with \\>0\ have "\\>0. \x. dist \ x < \ \ onorm (\v. deriv f x * v - deriv f \ * v) \ e/2" + using \
apply (rule_tac x="min \ \" in exI) apply (intro conjI allI impI Operator_Norm.onorm_le) - apply simp - apply (simp only: Rings.ring_class.left_diff_distrib [symmetric] norm_mult) - apply (rule mult_right_mono [OF \]) - apply (auto simp: dist_commute Rings.ordered_semiring_class.mult_right_mono \) + apply (force simp: mult_right_mono norm_mult [symmetric] left_diff_distrib \)+ done with \e>0\ show ?thesis by force qed have "inj ((*) (deriv f \))" using dnz by simp then obtain g' where g': "linear g'" "g' \ (*) (deriv f \) = id" - using linear_injective_left_inverse [of "(*) (deriv f \)"] - by (auto simp: linear_times) + using linear_injective_left_inverse [of "(*) (deriv f \)"] by auto show ?thesis apply (rule has_derivative_locally_injective [OF S, where f=f and f' = "\z h. deriv f z * h" and g' = g']) - using g' * + using g' * apply (simp_all add: linear_conv_bounded_linear that) - using DERIV_deriv_iff_field_differentiable has_field_derivative_imp_has_derivative holf - holomorphic_on_imp_differentiable_at \open S\ apply blast - done + using \open S\ has_field_derivative_imp_has_derivative holf holomorphic_derivI by blast qed lemma has_complex_derivative_locally_invertible: @@ -958,9 +917,7 @@ have holf': "f holomorphic_on ball \ r" using \ball \ r \ S\ holf holomorphic_on_subset by blast have "open (f ` ball \ r)" - apply (rule open_mapping_thm [OF holf']) - using nc apply auto - done + by (simp add: \inj_on f (ball \ r)\ holf' open_mapping_thm3) then show ?thesis using \0 < r\ \ball \ r \ S\ \inj_on f (ball \ r)\ that by blast qed @@ -978,8 +935,8 @@ proof (cases "\n>0. (deriv ^^ n) f \ = 0") case True have fcon: "f w = f \" if "w \ ball \ r" for w - apply (rule holomorphic_fun_eq_const_on_connected [OF holf']) - using True \0 < r\ that by auto + by (meson open_ball True \0 < r\ centre_in_ball connected_ball holf' + holomorphic_fun_eq_const_on_connected that) have False using fcon [of "\ + r/2"] \0 < r\ r injf unfolding inj_on_def by (metis \\ \ S\ contra_subsetD dist_commute fcon mem_ball perfect_choose_dist) @@ -996,18 +953,17 @@ and holg: "g holomorphic_on ball \ \" and fd: "\w. w \ ball \ \ \ f w - f \ = ((w - \) * g w) ^ n" and gnz: "\w. w \ ball \ \ \ g w \ 0" - apply (rule holomorphic_factor_order_of_zero_strong [OF holf \open S\ \\ \ S\ n_ne]) - apply (blast intro: n_min)+ - done + by (blast intro: n_min holomorphic_factor_order_of_zero_strong [OF holf \open S\ \\ \ S\ n_ne]) show ?thesis proof (cases "n=1") case True with n_ne show ?thesis by auto next case False - have holgw: "(\w. (w - \) * g w) holomorphic_on ball \ (min r \)" - apply (rule holomorphic_intros)+ + have "g holomorphic_on ball \ (min r \)" using holg by (simp add: holomorphic_on_subset subset_ball) + then have holgw: "(\w. (w - \) * g w) holomorphic_on ball \ (min r \)" + by (intro holomorphic_intros) have gd: "\w. dist \ w < \ \ (g has_field_derivative deriv g w) (at w)" using holg by (simp add: DERIV_deriv_iff_field_differentiable holomorphic_on_def at_within_open_NO_MATCH) @@ -1018,10 +974,8 @@ have [simp]: "deriv (\w. (w - \) * g w) \ \ 0" using * [of \] \0 < \\ \0 < r\ by (simp add: DERIV_imp_deriv gnz) obtain T where "\ \ T" "open T" and Tsb: "T \ ball \ (min r \)" and oimT: "open ((\w. (w - \) * g w) ` T)" - apply (rule has_complex_derivative_locally_invertible [OF holgw, of \]) - using \0 < r\ \0 < \\ - apply (simp_all add:) - by (meson open_ball centre_in_ball) + using \0 < r\ \0 < \\ has_complex_derivative_locally_invertible [OF holgw, of \] + by force define U where "U = (\w. (w - \) * g w) ` T" have "open U" by (metis oimT U_def) moreover have "0 \ U" @@ -1037,13 +991,15 @@ and "y1 \ T" and y1: "(y1 - \) * g y1 = \ * exp(2 * of_real pi * \ * (1/n))" by (auto simp: U_def) then have "y0 \ ball \ \" "y1 \ ball \ \" using Tsb by auto + then have "f y0 - f \ = ((y0 - \) * g y0) ^ n" "f y1 - f \ = ((y1 - \) * g y1) ^ n" + using fd by blast+ moreover have "y0 \ y1" using y0 y1 \\ > 0\ complex_root_unity_eq_1 [of n 1] \n > 0\ False by auto moreover have "T \ S" by (meson Tsb min.cobounded1 order_trans r subset_ball) ultimately have False using inj_onD [OF injf, of y0 y1] \y0 \ T\ \y1 \ T\ - using fd [of y0] fd [of y1] complex_root_unity [of n 1] n_ne + using complex_root_unity [of n 1] apply (simp add: y0 y1 power_mult_distrib) apply (force simp: algebra_simps) done @@ -1089,9 +1045,12 @@ have 2: "deriv f z \ 0" using \z \ S\ \open S\ holf holomorphic_injective_imp_regular injf by blast show ?thesis - apply (rule has_field_derivative_inverse_strong [OF 1 2 \open S\ \z \ S\]) - apply (simp add: holf holomorphic_on_imp_continuous_on) - by (simp add: injf the_inv_into_f_f) + proof (rule has_field_derivative_inverse_strong [OF 1 2 \open S\ \z \ S\]) + show "continuous_on S f" + by (simp add: holf holomorphic_on_imp_continuous_on) + show "\z. z \ S \ the_inv_into S f (f z) = z" + by (simp add: injf the_inv_into_f_f) + qed qed show ?thesis proof @@ -1126,9 +1085,7 @@ have coc: "compact (closure S)" by (simp add: \bounded S\ bounded_closure compact_eq_bounded_closed) then obtain x where x: "x \ closure S" and xmax: "\z. z \ closure S \ norm(f z) \ norm(f x)" - apply (rule bexE [OF continuous_attains_sup [OF _ _ connf]]) - using \S \ {}\ apply auto - done + using continuous_attains_sup [OF _ _ connf] \S \ {}\ by auto then show ?thesis proof (cases "x \ frontier S") case True @@ -1138,9 +1095,10 @@ then have "x \ S" using \open S\ frontier_def interior_eq x by auto then have "f constant_on S" - apply (rule maximum_modulus_principle [OF holf S \open S\ order_refl]) - using closure_subset apply (blast intro: xmax) - done + proof (rule maximum_modulus_principle [OF holf S \open S\ order_refl]) + show "\z. z \ S \ cmod (f z) \ cmod (f x)" + using closure_subset by (blast intro: xmax) + qed then have "f constant_on (closure S)" by (rule constant_on_closureI [OF _ contf]) then obtain c where c: "\x. x \ closure S \ f x = c" @@ -1231,11 +1189,10 @@ then obtain \ where \: "cmod \ < 1" "\ \ 0" "cmod (f \) = cmod \" by blast then have [simp]: "norm (h \) = 1" by (simp add: fz_eq norm_mult) - have "ball \ (1 - cmod \) \ ball 0 1" + have \
: "ball \ (1 - cmod \) \ ball 0 1" by (simp add: ball_subset_ball_iff) moreover have "\z. cmod (\ - z) < 1 - cmod \ \ cmod (h z) \ cmod (h \)" - apply (simp add: algebra_simps) - by (metis add_diff_cancel_left' diff_diff_eq2 le_less_trans noh_le norm_triangle_ineq4) + by (metis \cmod (h \) = 1\ \
dist_0_norm dist_complex_def in_mono mem_ball noh_le) ultimately obtain c where c: "\z. norm z < 1 \ h z = c" using Schwarz2 [OF holh, of "1 - norm \" \, unfolded constant_on_def] \ by auto then have "norm c = 1" @@ -1293,11 +1250,12 @@ contour_integral (linepath c a) f = 0" proof - have "interior (convex hull {a, b, c}) \ interior(S \ {x. d \ x \ k})" - apply (rule interior_mono) - apply (rule hull_minimal) - apply (simp add: abc lek) - apply (rule convex_Int [OF \convex S\ convex_halfspace_le]) - done + proof (intro interior_mono hull_minimal) + show "{a, b, c} \ S \ {x. d \ x \ k}" + by (simp add: abc lek) + show "convex (S \ {x. d \ x \ k})" + by (rule convex_Int [OF \convex S\ convex_halfspace_le]) + qed also have "... \ {z \ S. d \ z < k}" by (force simp: interior_open [OF \open S\] \d \ 0\) finally have *: "interior (convex hull {a, b, c}) \ {z \ S. d \ z < k}" . @@ -1330,21 +1288,18 @@ obtain a' where a': "a' \ closed_segment b c" and "d \ a' = k" and ba': "\z. z \ closed_segment b a' \ d \ z \ k" and a'c: "\z. z \ closed_segment a' c \ k \ d \ z" - apply (rule hol_pal_lem0 [of d b k c, OF \d \ b \ k\]) - using False by auto + using False hol_pal_lem0 [of d b k c, OF \d \ b \ k\] by auto obtain b' where b': "b' \ closed_segment a c" and "d \ b' = k" and ab': "\z. z \ closed_segment a b' \ d \ z \ k" and b'c: "\z. z \ closed_segment b' c \ k \ d \ z" - apply (rule hol_pal_lem0 [of d a k c, OF \d \ a \ k\]) - using False by auto + using False hol_pal_lem0 [of d a k c, OF \d \ a \ k\] by auto have a'b': "a' \ S \ b' \ S" using a' abc b' convex_contains_segment \convex S\ by auto have "continuous_on (closed_segment c a) f" by (meson abc contf continuous_on_subset convex_contains_segment \convex S\) then have 1: "contour_integral (linepath c a) f = contour_integral (linepath c b') f + contour_integral (linepath b' a) f" - apply (rule contour_integral_split_linepath) - using b' by (simp add: closed_segment_commute) + using b' closed_segment_commute contour_integral_split_linepath by blast have "continuous_on (closed_segment b c) f" by (meson abc contf continuous_on_subset convex_contains_segment \convex S\) then have 2: "contour_integral (linepath b c) f = @@ -1373,14 +1328,15 @@ then show "d \ x \ k" by (metis lek convex_halfspace_le mem_Collect_eq) qed + have cs: "closed_segment a' b' \ {x. d \ x \ k} \ closed_segment b' a \ {x. d \ x \ k}" + by (simp add: \d \ a' = k\ \d \ b' = k\ closed_segment_subset convex_halfspace_le lek(1)) have "continuous_on (S \ {x. d \ x \ k}) f" using contf by (simp add: continuous_on_subset) then have "(f has_contour_integral 0) (linepath a b +++ linepath b a' +++ linepath a' b' +++ linepath b' a)" apply (rule Cauchy_theorem_convex [where K = "{}"]) - apply (simp_all add: path_image_join convex_Int convex_halfspace_le \convex S\ fcd_le ab_le - closed_segment_subset abc a'b' ba') - by (metis \d \ a' = k\ \d \ b' = k\ convex_contains_segment convex_halfspace_le lek(1) mem_Collect_eq order_refl) + by (simp_all add: path_image_join convex_Int convex_halfspace_le \convex S\ fcd_le ab_le + closed_segment_subset abc a'b' ba' cs) then have 4: "contour_integral (linepath a b) f + contour_integral (linepath b a') f + contour_integral (linepath a' b') f + @@ -1399,14 +1355,14 @@ using f3 f2 unfolding holomorphic_on_def by (metis (no_types) \d \ 0\ at_within_interior interior_Int interior_halfspace_ge interior_interior) qed + have cs: "closed_segment c b' \ {x. k \ d \ x} \ closed_segment b' a' \ {x. k \ d \ x}" + by (simp add: \d \ a' = k\ b'c closed_segment_subset convex_halfspace_ge) have "continuous_on (S \ {x. k \ d \ x}) f" using contf by (simp add: continuous_on_subset) then have "(f has_contour_integral 0) (linepath a' c +++ linepath c b' +++ linepath b' a')" apply (rule Cauchy_theorem_convex [where K = "{}"]) - apply (simp_all add: path_image_join convex_Int convex_halfspace_ge \convex S\ - fcd_ge closed_segment_subset abc a'b' a'c) - by (metis \d \ a' = k\ b'c closed_segment_commute convex_contains_segment - convex_halfspace_ge ends_in_segment(2) mem_Collect_eq order_refl) + by (simp_all add: path_image_join convex_Int convex_halfspace_ge \convex S\ + fcd_ge closed_segment_subset abc a'b' a'c cs) then have 5: "contour_integral (linepath a' c) f + contour_integral (linepath c b') f + contour_integral (linepath b' a') f = 0" by (rule has_chain_integral_chain_integral3) show ?thesis @@ -1442,7 +1398,7 @@ have "contour_integral (linepath b c) f + contour_integral (linepath c a) f + contour_integral (linepath a b) f = 0" - apply (rule hol_pal_lem2 [OF S \b \ S\ \c \ S\ \a \ S\, of "-d" "-k"]) + using hol_pal_lem2 [OF S \b \ S\ \c \ S\ \a \ S\, of "-d" "-k"] using \d \ 0\ \\ d \ b \ k\ False by (simp_all add: holf1 holf2 contf) then show ?thesis by (simp add: algebra_simps) @@ -1464,8 +1420,8 @@ next case False show ?thesis - apply (rule hol_pal_lem3 [OF S abc, of "-d" "-k"]) - using \d \ 0\ False by (simp_all add: holf1 holf2 contf) + using \d \ 0\ hol_pal_lem3 [OF S abc, of "-d" "-k"] False + by (simp_all add: holf1 holf2 contf) qed lemma holomorphic_on_paste_across_line: @@ -1494,11 +1450,8 @@ using e by auto ultimately show ?thesis apply (rule_tac x="ball p e" in exI) - using \e > 0\ e \d \ 0\ - apply (simp add:, clarify) - apply (rule hol_pal_lem4 [of "ball p e" _ _ _ d _ k]) - apply (auto simp: subset_hull) - done + using \e > 0\ e \d \ 0\ hol_pal_lem4 [of "ball p e" _ _ _ d _ k] + by (force simp add: subset_hull) qed show ?thesis by (blast intro: * Morera_local_triangle analytic_imp_holomorphic) @@ -1514,13 +1467,12 @@ have 1: "(\z. if 0 \ Im z then f z else cnj (f (cnj z))) holomorphic_on (S \ {z. 0 < Im z})" by (force intro: iffD1 [OF holomorphic_cong [OF refl] holf]) have cont_cfc: "continuous_on (S \ {z. Im z \ 0}) (cnj o f o cnj)" - apply (intro continuous_intros continuous_on_compose continuous_on_subset [OF contf]) - using cnjs apply auto - done + using cnjs + by (intro continuous_intros continuous_on_compose continuous_on_subset [OF contf]) auto have "cnj \ f \ cnj field_differentiable at x within S \ {z. Im z < 0}" if "x \ S" "Im x < 0" "f field_differentiable at (cnj x) within S \ {z. 0 < Im z}" for x using that - apply (simp add: field_differentiable_def has_field_derivative_iff Lim_within dist_norm, clarify) + apply (clarsimp simp add: field_differentiable_def has_field_derivative_iff Lim_within dist_norm) apply (rule_tac x="cnj f'" in exI) apply (elim all_forward ex_forward conj_forward imp_forward asm_rl, clarify) apply (drule_tac x="cnj xa" in bspec) @@ -1535,20 +1487,18 @@ using hol_cfc by auto have [simp]: "(S \ {z. 0 \ Im z}) \ (S \ {z. Im z \ 0}) = S" by force + have eq: "\z. \z \ S; Im z \ 0; 0 \ Im z\ \ f z = cnj (f (cnj z))" + using f Reals_cnj_iff complex_is_Real_iff by auto have "continuous_on ((S \ {z. 0 \ Im z}) \ (S \ {z. Im z \ 0})) (\z. if 0 \ Im z then f z else cnj (f (cnj z)))" apply (rule continuous_on_cases_local) using cont_cfc contf - apply (simp_all add: closedin_closed_Int closed_halfspace_Im_le closed_halfspace_Im_ge) - using f Reals_cnj_iff complex_is_Real_iff apply auto - done + by (simp_all add: closedin_closed_Int closed_halfspace_Im_le closed_halfspace_Im_ge eq) then have 3: "continuous_on S (\z. if 0 \ Im z then f z else cnj (f (cnj z)))" by force show ?thesis apply (rule holomorphic_on_paste_across_line [OF \open S\, of "- \" _ 0]) - using 1 2 3 - apply auto - done + using 1 2 3 by auto qed subsection\Bloch's theorem\ @@ -1584,7 +1534,7 @@ have df_le: "\x. norm x < r \ norm (deriv f x) \ C" using le by (simp add: C_def) have hol_df: "deriv f holomorphic_on cball 0 R" - apply (rule holomorphic_on_subset) using R holdf' by auto + using R holdf' holomorphic_on_subset by auto have *: "((\w. deriv f w / (w - z)) has_contour_integral 2 * pi * \ * deriv f z) (circlepath 0 R)" if "norm z < R" for z using \0 < R\ that Cauchy_integral_formula_convex_simple [OF convex_cball hol_df, of _ "circlepath 0 R"] @@ -1603,10 +1553,8 @@ norm (deriv f x) * norm z" by (simp add: norm_mult right_diff_distrib') show ?thesis - using \0 < R\ \0 < C\ R that - apply (simp add: norm_mult norm_divide divide_simps) - using df_le norm_triangle_ineq2 \0 < C\ apply (auto intro!: mult_mono) - done + using \0 < R\ \0 < C\ R that + by (auto simp add: norm_mult norm_divide divide_simps df_le mult_mono norm_triangle_ineq2) qed then show ?thesis using has_contour_integral_bound_circlepath @@ -1623,10 +1571,8 @@ apply (rule continuous_ge_on_closure [where f = "\r. norm z / (r - norm z) * C" and s = "{r'<.. norm(f z)" if r: "norm z < r" for z @@ -1637,12 +1583,6 @@ by (rule derivative_eq_intros holomorphic_derivI holf' | simp)+ have 2: "closed_segment 0 z \ ball 0 r" by (metis \0 < r\ convex_ball convex_contains_segment dist_self mem_ball mem_ball_0 that) - have 3: "(\t. (norm z)\<^sup>2 * t / (r - norm z) * C) integrable_on {0..1}" - apply (rule integrable_on_cmult_right [where 'b=real, simplified]) - apply (rule integrable_on_cdivide [where 'b=real, simplified]) - apply (rule integrable_on_cmult_left [where 'b=real, simplified]) - apply (rule ident_integrable_on) - done have 4: "norm (deriv f (x *\<^sub>R z) - deriv f 0) * norm z \ norm z * norm z * x * C / (r - norm z)" if x: "0 \ x" "x \ 1" for x proof - @@ -1662,70 +1602,78 @@ by (metis add_diff_cancel_left' add_diff_eq diff_left_mono norm_diff_ineq order_trans) have "norm (integral {0..1} (\x. (deriv f (x *\<^sub>R z) - deriv f 0) * z)) \ integral {0..1} (\t. (norm z)\<^sup>2 * t / (r - norm z) * C)" - apply (rule integral_norm_bound_integral) - using contour_integral_primitive [OF 1, of "linepath 0 z"] 2 - apply (simp add: has_contour_integral_linepath has_integral_integrable_integral) - apply (rule 3) - apply (simp add: norm_mult power2_eq_square 4) - done + proof (rule integral_norm_bound_integral) + show "(\x. (deriv f (x *\<^sub>R z) - deriv f 0) * z) integrable_on {0..1}" + using contour_integral_primitive [OF 1, of "linepath 0 z"] 2 + by (simp add: has_contour_integral_linepath has_integral_integrable_integral) + have "(*) ((cmod z)\<^sup>2) integrable_on {0..1}" + by (metis ident_integrable_on integrable_0 integrable_eq integrable_on_cmult_iff lambda_zero) + then show "(\t. (norm z)\<^sup>2 * t / (r - norm z) * C) integrable_on {0..1}" + using integrable_on_cmult_right[where 'b=real, simplified] integrable_on_cdivide [where 'b=real, simplified] + by blast + qed (simp add: norm_mult power2_eq_square 4) then have int_le: "norm (f z - deriv f 0 * z) \ (norm z)\<^sup>2 * norm(deriv f 0) / ((r - norm z))" using contour_integral_primitive [OF 1, of "linepath 0 z"] 2 - apply (simp add: has_contour_integral_linepath has_integral_integrable_integral C_def) - done + by (simp add: has_contour_integral_linepath has_integral_integrable_integral C_def) + have "norm z * (norm (deriv f 0) * (r - norm z - norm z)) \ norm z * (norm (deriv f 0) * (r - norm z) - norm (deriv f 0) * norm z)" + by (simp add: algebra_simps) + then have \
: "(norm z * (r - norm z) - norm z * norm z) * norm (deriv f 0) \ norm (deriv f 0) * norm z * (r - norm z) - norm z * norm z * norm (deriv f 0)" + by (simp add: algebra_simps) show ?thesis apply (rule le_norm [OF _ int_le]) using \norm z < r\ - apply (simp add: power2_eq_square divide_simps C_def norm_mult) - proof - - have "norm z * (norm (deriv f 0) * (r - norm z - norm z)) \ norm z * (norm (deriv f 0) * (r - norm z) - norm (deriv f 0) * norm z)" - by (simp add: algebra_simps) - then show "(norm z * (r - norm z) - norm z * norm z) * norm (deriv f 0) \ norm (deriv f 0) * norm z * (r - norm z) - norm z * norm z * norm (deriv f 0)" - by (simp add: algebra_simps) - qed + by (simp add: power2_eq_square divide_simps C_def norm_mult \
) qed have sq201 [simp]: "0 < (1 - sqrt 2 / 2)" "(1 - sqrt 2 / 2) < 1" by (auto simp: sqrt2_less_2) have 1: "continuous_on (closure (ball 0 ((1 - sqrt 2 / 2) * r))) f" - apply (rule continuous_on_subset [OF holomorphic_on_imp_continuous_on [OF holf]]) - apply (subst closure_ball) - using \0 < r\ mult_pos_pos sq201 - apply (auto simp: cball_subset_cball_iff) - done + proof (rule continuous_on_subset [OF holomorphic_on_imp_continuous_on [OF holf]]) + show "closure (ball 0 ((1 - sqrt 2 / 2) * r)) \ cball 0 r" + proof - + have "(1 - sqrt 2 / 2) * r \ r" + by (simp add: \0 < r\) + then show ?thesis + by (meson ball_subset_cball closed_cball closure_minimal dual_order.trans subset_ball) + qed + qed have 2: "open (f ` interior (ball 0 ((1 - sqrt 2 / 2) * r)))" - apply (rule open_mapping_thm [OF holf' open_ball connected_ball], force) - using \0 < r\ mult_pos_pos sq201 apply (simp add: ball_subset_ball_iff) - using False \0 < r\ centre_in_ball holf' holomorphic_nonconstant by blast + proof (rule open_mapping_thm [OF holf' open_ball connected_ball]) + show "interior (ball 0 ((1 - sqrt 2 / 2) * r)) \ ball (0::complex) r" + using \0 < r\ mult_pos_pos sq201 by (simp add: ball_subset_ball_iff) + show "\ f constant_on ball 0 r" + using False \0 < r\ centre_in_ball holf' holomorphic_nonconstant by blast + qed auto have "ball 0 ((3 - 2 * sqrt 2) * r * norm (deriv f 0)) = ball (f 0) ((3 - 2 * sqrt 2) * r * norm (deriv f 0))" by simp also have "... \ f ` ball 0 ((1 - sqrt 2 / 2) * r)" proof - have 3: "(3 - 2 * sqrt 2) * r * norm (deriv f 0) \ norm (f z)" - if "norm z = (1 - sqrt 2 / 2) * r" for z + if "norm z = (1 - sqrt 2 / 2) * r" for z apply (rule order_trans [OF _ *]) using \0 < r\ - apply (simp_all add: field_simps power2_eq_square that) + apply (simp_all add: field_simps power2_eq_square that) apply (simp add: mult.assoc [symmetric]) done show ?thesis apply (rule ball_subset_open_map_image [OF 1 2 _ bounded_ball]) - using \0 < r\ sq201 3 apply simp_all - using C_def \0 < C\ sq3 apply force - done - qed + using \0 < r\ sq201 3 C_def \0 < C\ sq3 by auto + qed also have "... \ f ` ball 0 r" - apply (rule image_subsetI [OF imageI], simp) - apply (erule less_le_trans) - using \0 < r\ apply (auto simp: field_simps) - done + proof - + have "\x. (1 - sqrt 2 / 2) * r \ r" + using \0 < r\ by (auto simp: field_simps) + then show ?thesis + by auto + qed finally show ?thesis . qed qed lemma Bloch_lemma: assumes holf: "f holomorphic_on cball a r" and "0 < r" - and le: "\z. z \ ball a r \ norm(deriv f z) \ 2 * norm(deriv f a)" - shows "ball (f a) ((3 - 2 * sqrt 2) * r * norm(deriv f a)) \ f ` ball a r" + and le: "\z. z \ ball a r \ norm(deriv f z) \ 2 * norm(deriv f a)" + shows "ball (f a) ((3 - 2 * sqrt 2) * r * norm(deriv f a)) \ f ` ball a r" (is "?lhs \ ?rhs") proof - have fz: "(\z. f (a + z)) = f o (\z. (a + z))" by (simp add: o_def) @@ -1739,18 +1687,20 @@ by (metis add.comm_neutral \0 < r\ norm_eq_zero) have hol1: "(\z. f (a + z) - f a) holomorphic_on cball 0 r" by (intro holomorphic_intros hol0) - then have "ball 0 ((3 - 2 * sqrt 2) * r * norm (deriv (\z. f (a + z) - f a) 0)) - \ (\z. f (a + z) - f a) ` ball 0 r" + then have \
: "ball 0 ((3 - 2 * sqrt 2) * r * norm (deriv (\z. f (a + z) - f a) 0)) + \ (\z. f (a + z) - f a) ` ball 0 r" apply (rule Bloch_lemma_0) - apply (simp_all add: \0 < r\) - apply (simp add: fz deriv_chain) - apply (simp add: dist_norm le) + using \0 < r\ + apply (simp_all add: \0 < r\) + apply (simp add: fz deriv_chain dist_norm le) done - then show ?thesis - apply clarify - apply (drule_tac c="x - f a" in subsetD) - apply (force simp: fz \0 < r\ dist_norm deriv_chain field_differentiable_compose)+ - done + show ?thesis + proof clarify + fix x + assume "x \ ?lhs" + with subsetD [OF \
, of "x - f a"] show "x \ ?rhs" + by (force simp: fz \0 < r\ dist_norm deriv_chain field_differentiable_compose) + qed qed proposition Bloch_unit: @@ -1799,8 +1749,8 @@ have le_norm_dfp: "r / (r - norm (p - a)) \ norm (deriv f p)" using gen_le_dfp [of a] \r > 0\ by auto have 1: "f holomorphic_on cball p t" - apply (rule holomorphic_on_subset [OF holf]) - using cpt \r < 1\ order_subst1 subset_ball by auto + using cpt \r < 1\ order_subst1 subset_ball + by (force simp add: intro!: holomorphic_on_subset [OF holf]) have 2: "norm (deriv f z) \ 2 * norm (deriv f p)" if "z \ ball p t" for z proof - have z: "z \ cball a r" @@ -1811,12 +1761,13 @@ using gen_le_dfp [OF z] by simp with \norm (z - a) < r\ \norm (p - a) < r\ have "norm (deriv f z) \ (r - norm (p - a)) / (r - norm (z - a)) * norm (deriv f p)" - by (simp add: field_simps) + by (simp add: field_simps) also have "... \ 2 * norm (deriv f p)" - apply (rule mult_right_mono) - using that \norm (p - a) < r\ \norm(z - a) < r\ - apply (simp_all add: field_simps t_def dist_norm [symmetric]) - using dist_triangle3 [of z a p] by linarith + proof (rule mult_right_mono) + show "(r - cmod (p - a)) / (r - cmod (z - a)) \ 2" + using that \norm (p - a) < r\ \norm(z - a) < r\ dist_triangle3 [of z a p] + by (simp add: field_simps t_def dist_norm [symmetric]) + qed auto finally show ?thesis . qed have sqrt2: "sqrt 2 < 2113/1494" @@ -1833,11 +1784,12 @@ have "ball (f p) ((3 - 2 * sqrt 2) * t * norm (deriv f p)) \ f ` ball p t" by (rule Bloch_lemma [OF 1 \0 < t\ 2]) also have "... \ f ` ball a 1" - apply (rule image_mono) - apply (rule order_trans [OF ball_subset_cball]) - apply (rule order_trans [OF cpt]) - using \0 < t\ \r < 1\ apply (simp add: ball_subset_ball_iff dist_norm) - done + proof - + have "ball a r \ ball a 1" + using \0 < t\ \r < 1\ by (simp add: ball_subset_ball_iff dist_norm) + then show ?thesis + using ball_subset_cball cpt by blast + qed finally have "ball (f p) ((3 - 2 * sqrt 2) * t * norm (deriv f p)) \ f ` ball a 1" . with ** show ?thesis by (rule that) @@ -1855,44 +1807,34 @@ define C where "C = deriv f a" have "0 < norm C" using False by (simp add: C_def) have dfa: "f field_differentiable at a" - apply (rule holomorphic_on_imp_differentiable_at [OF holf]) - using \0 < r\ by auto + using \0 < r\ holomorphic_on_imp_differentiable_at [OF holf] by auto have fo: "(\z. f (a + of_real r * z)) = f o (\z. (a + of_real r * z))" by (simp add: o_def) have holf': "f holomorphic_on (\z. a + complex_of_real r * z) ` ball 0 1" - apply (rule holomorphic_on_subset [OF holf]) - using \0 < r\ apply (force simp: dist_norm norm_mult) - done + using \0 < r\ holomorphic_on_subset [OF holf] by (force simp: dist_norm norm_mult) have 1: "(\z. f (a + r * z) / (C * r)) holomorphic_on ball 0 1" - apply (rule holomorphic_intros holomorphic_on_compose holf' | simp add: fo)+ - using \0 < r\ by (simp add: C_def False) + using \0 < r\ \0 < norm C\ + by (intro holomorphic_intros holomorphic_on_compose holf'; simp add: fo)+ have "((\z. f (a + of_real r * z) / (C * of_real r)) has_field_derivative (deriv f (a + of_real r * z) / C)) (at z)" if "norm z < 1" for z proof - + have fd: "f field_differentiable at (a + complex_of_real r * z)" + using \0 < r\ by (simp_all add: dist_norm norm_mult holomorphic_on_imp_differentiable_at [OF holf] that) have *: "((\x. f (a + of_real r * x)) has_field_derivative (deriv f (a + of_real r * z) * of_real r)) (at z)" - apply (simp add: fo) - apply (rule DERIV_chain [OF field_differentiable_derivI]) - apply (rule holomorphic_on_imp_differentiable_at [OF holf], simp) - using \0 < r\ apply (simp add: dist_norm norm_mult that) - apply (rule derivative_eq_intros | simp)+ - done + by (rule fd DERIV_chain [OF field_differentiable_derivI]derivative_eq_intros | simp add: fo)+ show ?thesis apply (rule derivative_eq_intros * | simp)+ using \0 < r\ by (auto simp: C_def False) qed - have 2: "deriv (\z. f (a + of_real r * z) / (C * of_real r)) 0 = 1" - apply (subst deriv_cdivide_right) - apply (simp add: field_differentiable_def fo) - apply (rule exI) - apply (rule DERIV_chain [OF field_differentiable_derivI]) - apply (simp add: dfa) - apply (rule derivative_eq_intros | simp add: C_def False fo)+ - using \0 < r\ - apply (simp add: C_def False fo) - apply (simp add: derivative_intros dfa deriv_chain) - done + have "deriv (\z. f (a + of_real r * z) / (C * of_real r)) 0 = deriv (\z. f (a + complex_of_real r * z)) 0 / + (C * complex_of_real r)" + apply (rule deriv_cdivide_right) + by (metis (no_types) DERIV_chain2 add.right_neutral dfa field_differentiable_add_const field_differentiable_def field_differentiable_linear fo mult_zero_right) + also have "... = 1" + using \0 < r\ by (simp add: C_def False fo derivative_intros dfa deriv_chain) + finally have 2: "deriv (\z. f (a + of_real r * z) / (C * of_real r)) 0 = 1" . have sb1: "(*) (C * r) ` (\z. f (a + of_real r * z) / (C * r)) ` ball 0 1 \ f ` ball a r" using \0 < r\ by (auto simp: dist_norm norm_mult C_def False) @@ -1905,27 +1847,20 @@ show ?thesis apply clarify apply (rule_tac x="x / (C * r)" in image_eqI) - using \0 < r\ - apply (simp_all add: dist_norm norm_mult norm_divide C_def False field_simps) - apply (erule less_le_trans) - apply (rule order_trans [OF r' *]) - done + using \0 < r\ apply (simp_all add: dist_norm norm_mult norm_divide C_def False field_simps) + using "*" r' by linarith qed show ?thesis apply (rule Bloch_unit [OF 1 2]) - apply (rename_tac t) apply (rule_tac b="(C * of_real r) * b" in that) - apply (drule image_mono [where f = "\z. (C * of_real r) * z"]) - using sb1 sb2 - apply force - done + using image_mono sb1 sb2 by fastforce qed corollary Bloch_general: - assumes holf: "f holomorphic_on s" and "a \ s" - and tle: "\z. z \ frontier s \ t \ dist a z" + assumes holf: "f holomorphic_on S" and "a \ S" + and tle: "\z. z \ frontier S \ t \ dist a z" and rle: "r \ t * norm(deriv f a) / 12" - obtains b where "ball b r \ f ` s" + obtains b where "ball b r \ f ` S" proof - consider "r \ 0" | "0 < t * norm(deriv f a) / 12" using rle by force then show ?thesis @@ -1942,11 +1877,9 @@ case False then have "t > 0" using 2 by (force simp: zero_less_mult_iff) - have "\ ball a t \ s \ ball a t \ frontier s \ {}" - apply (rule connected_Int_frontier [of "ball a t" s], simp_all) - using \0 < t\ \a \ s\ centre_in_ball apply blast - done - with tle have *: "ball a t \ s" by fastforce + have "\ ball a t \ S \ ball a t \ frontier S \ {}" + by (metis Diff_eq_empty_iff \0 < t\ \a \ S\ closure_Int_ball_not_empty closure_subset connected_Int_frontier connected_ball inf.commute) + with tle have *: "ball a t \ S" by fastforce then have 1: "f holomorphic_on ball a t" using holf using holomorphic_on_subset by blast show ?thesis