# HG changeset patch # User paulson # Date 1604791231 0 # Node ID cd93b8c9671070050214b515c8d89ee66e11e90d # Parent 726d17b280ea0e37ac43f9e7af063d7cc5cda3ab another big cleanup diff -r 726d17b280ea -r cd93b8c96710 src/HOL/Complex_Analysis/Great_Picard.thy --- a/src/HOL/Complex_Analysis/Great_Picard.thy Thu Nov 05 19:09:11 2020 +0000 +++ b/src/HOL/Complex_Analysis/Great_Picard.thy Sat Nov 07 23:20:31 2020 +0000 @@ -42,14 +42,10 @@ assumes "0 < n" shows "0 < n + sqrt(real n ^ 2 - 1)" proof - - have "(n-1)^2 \ n^2 - 1" - using assms by (simp add: algebra_simps power2_eq_square) - then have "real (n - 1) \ sqrt (real (n\<^sup>2 - 1))" - by (metis of_nat_le_iff of_nat_power real_le_rsqrt) - then have "n-1 \ sqrt(real n ^ 2 - 1)" - by (simp add: Suc_leI assms of_nat_diff) + have "0 < n * n" + by (simp add: assms) then show ?thesis - using assms by linarith + by (metis add.commute add.right_neutral add_pos_nonneg assms diff_ge_0_iff_ge nat_less_real_le of_nat_0 of_nat_0_less_iff of_nat_power power2_eq_square real_sqrt_ge_0_iff) qed @@ -131,8 +127,8 @@ have "((1 + real n + sqrt ((1 + real n)\<^sup>2 - 1)) / (real n + sqrt ((real n)\<^sup>2 - 1))) \ 2" using Schottky_lemma1 \0 < n\ by (simp add: field_split_simps) then have "ln ((1 + real n + sqrt ((1 + real n)\<^sup>2 - 1)) / (real n + sqrt ((real n)\<^sup>2 - 1))) \ ln 2" - apply (subst ln_le_cancel_iff) - using Schottky_lemma1 \0 < n\ by auto (force simp: field_split_simps) + using Schottky_lemma1 [of n] \0 < n\ + by (simp add: field_split_simps add_pos_nonneg) also have "... \ 3" using ln_add_one_self_le_self [of 1] by auto finally show ?thesis . @@ -146,11 +142,11 @@ by (auto simp: abs_if) then show thesis proof - assume "\x - a\ < 1 / 2" + assume "\x - a\ < 1/2" then show ?thesis by (rule_tac n=n in that) (auto simp: a_def \0 < n\) next - assume "\x - b\ < 1 / 2" + assume "\x - b\ < 1/2" then show ?thesis by (rule_tac n="Suc n" in that) (auto simp: b_def \0 < n\) qed @@ -165,54 +161,65 @@ proof - have sqrt2 [simp]: "complex_of_real (sqrt x) * complex_of_real (sqrt x) = x" if "x \ 0" for x::real by (metis abs_of_nonneg of_real_mult real_sqrt_mult_self that) - have 1: "\k. exp (\ * (of_int m * complex_of_real pi) - - (ln (real n + sqrt ((real n)\<^sup>2 - 1)))) + - inverse - (exp (\ * (of_int m * complex_of_real pi) - - (ln (real n + sqrt ((real n)\<^sup>2 - 1))))) = of_int k * 2" + define plusi where "plusi (e::complex) \ e + inverse e" for e + have 1: "\k. plusi (exp (\ * (of_int m * complex_of_real pi) - ln (real n + sqrt ((real n)\<^sup>2 - 1)))) = of_int k * 2" + (is "\k. ?\ k") if "n > 0" for m n proof - - have eeq: "e \ 0 \ e + inverse e = n*2 \ inverse e^2 - 2 * n*inverse e + 1 = 0" for n e::complex - by (auto simp: field_simps power2_eq_square) + have eeq: "e \ 0 \ plusi e = n \ (inverse e) ^ 2 = n/e - 1" for n e::complex + by (auto simp: plusi_def field_simps power2_eq_square) + have [simp]: "1 \ real n * real n" + using nat_0_less_mult_iff nat_less_real_le that by force + consider "odd m" | "even m" + by blast + then have "\k. ?\ k" + proof cases + case 1 + then have "?\ (- n)" + using Schottky_lemma1 [OF that] + by (simp add: eeq) (simp add: power2_eq_square exp_diff exp_Euler exp_of_real algebra_simps sin_int_times_real cos_int_times_real) + then show ?thesis .. + next + case 2 + then have "?\ n" + using Schottky_lemma1 [OF that] + by (simp add: eeq) (simp add: power2_eq_square exp_diff exp_Euler exp_of_real algebra_simps) + then show ?thesis .. + qed + then show ?thesis by blast + qed + have 2: "\k. plusi (exp (\ * (of_int m * complex_of_real pi) + + (ln (real n + sqrt ((real n)\<^sup>2 - 1))))) = of_int k * 2" + (is "\k. ?\ k") + if "n > 0" for m n + proof - + have eeq: "e \ 0 \ plusi e = n \ e^2 - n*e + 1 = 0" for n e::complex + by (auto simp: plusi_def field_simps power2_eq_square) have [simp]: "1 \ real n * real n" by (metis One_nat_def add.commute nat_less_real_le of_nat_1 of_nat_Suc one_le_power power2_eq_square that) - show ?thesis - apply (simp add: eeq) - using Schottky_lemma1 [OF that] - apply (auto simp: eeq exp_diff exp_Euler exp_of_real algebra_simps sin_int_times_real cos_int_times_real) - apply (rule_tac x="int n" in exI) - apply (auto simp: power2_eq_square algebra_simps) - apply (rule_tac x="- int n" in exI) - apply (auto simp: power2_eq_square algebra_simps) - done - qed - have 2: "\k. exp (\ * (of_int m * complex_of_real pi) + - (ln (real n + sqrt ((real n)\<^sup>2 - 1)))) + - inverse - (exp (\ * (of_int m * complex_of_real pi) + - (ln (real n + sqrt ((real n)\<^sup>2 - 1))))) = of_int k * 2" - if "n > 0" for m n - proof - - have eeq: "e \ 0 \ e + inverse e = n*2 \ e^2 - 2 * n*e + 1 = 0" for n e::complex - by (auto simp: field_simps power2_eq_square) - have [simp]: "1 \ real n * real n" - by (metis One_nat_def add.commute nat_less_real_le of_nat_1 of_nat_Suc one_le_power power2_eq_square that) - show ?thesis - apply (simp add: eeq) - using Schottky_lemma1 [OF that] - apply (auto simp: exp_add exp_Euler exp_of_real algebra_simps sin_int_times_real cos_int_times_real) - apply (rule_tac x="int n" in exI) - apply (auto simp: power2_eq_square algebra_simps) - apply (rule_tac x="- int n" in exI) - apply (auto simp: power2_eq_square algebra_simps) - done + consider "odd m" | "even m" + by blast + then have "\k. ?\ k" + proof cases + case 1 + then have "?\ (- n)" + using Schottky_lemma1 [OF that] + by (simp add: eeq) (simp add: power2_eq_square exp_add exp_Euler exp_of_real algebra_simps sin_int_times_real cos_int_times_real) + then show ?thesis .. + next + case 2 + then have "?\ n" + using Schottky_lemma1 [OF that] + by (simp add: eeq) (simp add: power2_eq_square exp_add exp_Euler exp_of_real algebra_simps) + then show ?thesis .. + qed + then show ?thesis by blast qed have "\x. cos (complex_of_real pi * z) = of_int x" using assms - apply safe - apply (auto simp: Ints_def cos_exp_eq exp_minus Complex_eq) + apply (auto simp: Ints_def cos_exp_eq exp_minus Complex_eq simp flip: plusi_def) apply (auto simp: algebra_simps dest: 1 2) - done + done then have "sin(pi * cos(pi * z)) ^ 2 = 0" by (simp add: Complex_Transcendental.sin_eq_0) then have "1 - cos(pi * cos(pi * z)) ^ 2 = 0" @@ -251,12 +258,10 @@ proof - have "cmod (2 * f 0 - 1) \ cmod (2 * f 0) + 1" by (metis norm_one norm_triangle_ineq4) - also have "... \ 2 + cmod (f 0) * 3" - by simp + also have "... \ 6 + 9 * cmod (f 0)" + by auto finally have "1 + norm(2 * f 0 - 1) / 3 \ (2 + norm(f 0) - 1) * 3" - apply (simp add: field_split_simps) - using norm_ge_zero [of "f 0 * 2 - 1"] - by linarith + by (simp add: divide_simps) with nh0 have "norm(h 0) \ (2 + norm(f 0) - 1) * 3" by linarith then have "1 + norm(h 0) / 3 \ 2 + norm(f 0)" @@ -277,12 +282,11 @@ proof - have w: "w \ ball 0 1" using segment_bound [OF that] \z \ ball 0 1\ by simp - have ttt: "\z. z \ frontier (cball 0 1) \ 1 - t \ dist w z" - using \norm z \ t\ segment_bound1 [OF \w \ closed_segment 0 z\] - apply (simp add: dist_complex_def) - by (metis diff_left_mono dist_commute dist_complex_def norm_triangle_ineq2 order_trans) have *: "\\b. (\w \ T \ U. w \ ball b 1); \x. x \ D \ g x \ T \ U\ \ \b. ball b 1 \ g ` D" for T U D by force + have ttt: "1 - t \ dist w u" if "cmod u = 1" for u + using \norm z \ t\ segment_bound1 [OF \w \ closed_segment 0 z\] norm_triangle_ineq2 [of u w] that + by (simp add: dist_norm norm_minus_commute) have "\b. ball b 1 \ g ` cball 0 1" proof (rule *) show "(\w \ (\m \ Ints. \n \ {0<..}. {Complex m (ln(n + sqrt(real n ^ 2 - 1)) / pi)}) \ @@ -304,8 +308,7 @@ by (simp add: dist_triangle_lt [of b "Complex m (Im b)"] dist_commute) with le m \0 < n\ show ?thesis apply (rule_tac x = "Complex m (ln (real n + sqrt ((real n)\<^sup>2 - 1)) / pi)" in bexI) - apply (simp_all del: Complex_eq greaterThan_0) - by blast + by (force simp del: Complex_eq greaterThan_0)+ next case ge then obtain n where "0 < n" and n: "\- Im b - ln (real n + sqrt ((real n)\<^sup>2 - 1)) / pi\ < 1/2" @@ -313,16 +316,13 @@ have "dist b (Complex m (Im b)) \ 1/2" by (metis cancel_comm_monoid_add_class.diff_cancel cmod_eq_Re complex.sel(1) complex.sel(2) dist_norm m(2) minus_complex.code) moreover - have "dist (Complex m (- ln (n + sqrt ((real n)\<^sup>2 - 1)) / pi)) (Complex m (Im b)) < 1/2" - using n - apply (simp add: complex_norm cmod_eq_Re complex_diff dist_norm del: Complex_eq) - by (metis add.commute add_uminus_conv_diff) + have "dist (Complex m (- ln (n + sqrt ((real n)\<^sup>2 - 1)) / pi)) (Complex m (Im b)) + = \ - Im b - ln (real n + sqrt ((real n)\<^sup>2 - 1)) / pi\" + by (simp add: complex_norm dist_norm cmod_eq_Re complex_diff) ultimately have "dist b (Complex m (- ln (real n + sqrt ((real n)\<^sup>2 - 1)) / pi)) < 1" - by (simp add: dist_triangle_lt [of b "Complex m (Im b)"] dist_commute) + using n by (simp add: dist_triangle_lt [of b "Complex m (Im b)"] dist_commute) with ge m \0 < n\ show ?thesis - apply (rule_tac x = "Complex m (- ln (real n + sqrt ((real n)\<^sup>2 - 1)) / pi)" in bexI) - apply (simp_all del: Complex_eq greaterThan_0) - by blast + by (rule_tac x = "Complex m (- ln (real n + sqrt ((real n)\<^sup>2 - 1)) / pi)" in bexI) auto qed qed show "g v \ (\m \ Ints. \n \ {0<..}. {Complex m (ln(n + sqrt(real n ^ 2 - 1)) / pi)}) \ @@ -396,8 +396,10 @@ using Rpos by blast have holg: "g holomorphic_on cball 0 1" unfolding g_def - apply (intro holomorphic_intros holomorphic_on_compose holomorphic_on_subset [OF holf]) - using Rpos by (auto simp: less_imp_le norm_mult) + proof (intro holomorphic_intros holomorphic_on_compose holomorphic_on_subset [OF holf]) + show "(*) (complex_of_real (R (f 0))) ` cball 0 1 \ cball 0 (R (f 0))" + using Rpos by (auto simp: less_imp_le norm_mult) + qed have *: "norm(g z) \ exp(pi * exp(pi * (2 + 2 * norm (f 0) + 12 * t / (1 - t))))" if "0 < t" "t < 1" "norm z \ t" for t z proof (rule Schottky [OF holg]) @@ -406,9 +408,9 @@ show "\z. z \ cball 0 1 \ \ (g z = 0 \ g z = 1)" using Rpos by (simp add: g_def less_imp_le norm_mult Rf) qed (auto simp: that) - have C1: "g holomorphic_on ball 0 (1 / 2)" + have C1: "g holomorphic_on ball 0 (1/2)" by (rule holomorphic_on_subset [OF holg]) auto - have C2: "continuous_on (cball 0 (1 / 2)) g" + have C2: "continuous_on (cball 0 (1/2)) g" by (meson cball_divide_subset_numeral holg holomorphic_on_imp_continuous_on holomorphic_on_subset) have C3: "cmod (g z) \ R (f 0) / 3" if "cmod (0 - z) = 1/2" for z proof - @@ -426,9 +428,8 @@ by (rule holomorphic_on_imp_differentiable_at [OF _ open_ball]) (auto simp: Rpos [of "f 0"]) have g_eq: "deriv g 0 = of_real ?r * deriv f 0" - apply (rule DERIV_imp_deriv) - apply (simp add: g_def) - by (metis DERIV_chain DERIV_cmult_Id fd0 field_differentiable_derivI mult.commute mult_zero_right) + unfolding g_def + by (metis DERIV_imp_deriv DERIV_chain DERIV_cmult_Id fd0 field_differentiable_derivI mult.commute mult_zero_right) show ?thesis using cmod_g'_le Rpos [of "f 0"] by (simp add: g_eq norm_mult) qed @@ -449,10 +450,10 @@ show ?thesis proof (cases "\x. deriv f x = 0") case True - obtain c where "\x. f(x) = c" - apply (rule DERIV_zero_connected_constant [OF connected_UNIV open_UNIV finite.emptyI contf]) - apply (metis True DiffE holf holomorphic_derivI open_UNIV, auto) - done + have "(f has_field_derivative 0) (at x)" for x + by (metis True UNIV_I holf holomorphic_derivI open_UNIV) + then obtain c where "\x. f(x) = c" + by (meson UNIV_I DERIV_zero_connected_constant [OF connected_UNIV open_UNIV finite.emptyI contf]) then show ?thesis using that by auto next @@ -468,12 +469,9 @@ using f01 by (simp add: fw_def) qed have "(fw has_field_derivative deriv f w * inverse (deriv f w)) (at 0)" - apply (simp add: fw_def) - apply (rule DERIV_chain) - using holf holomorphic_derivI apply force - apply (intro derivative_eq_intros w) - apply (auto simp: field_simps) - done + unfolding fw_def + apply (intro DERIV_chain derivative_eq_intros w)+ + using holf holomorphic_derivI by (force simp: field_simps)+ then show ?thesis using norm_let1 w by (simp add: DERIV_imp_deriv) qed @@ -538,8 +536,8 @@ obtain c where c: "(\x. (f(f x) - x)/(f x - x)) = (\x. c)" proof (rule little_Picard_01) show "(\x. (f(f x) - x)/(f x - x)) holomorphic_on UNIV" - apply (intro holomorphic_intros holf holomorphic_on_compose [unfolded o_def, OF holf]) - using non_fp by auto + using non_fp + by (intro holomorphic_intros holf holomorphic_on_compose [unfolded o_def, OF holf]) auto qed auto then obtain "c \ 0" "c \ 1" by (metis (no_types, hide_lams) non_ff diff_zero divide_eq_0_iff right_inverse_eq) @@ -549,10 +547,8 @@ proof (rule DERIV_unique) show "((\x. f (f x) - c * f x) has_field_derivative deriv f z * (deriv f (f z) - c)) (at z)" - apply (intro derivative_eq_intros) - apply (rule DERIV_chain [unfolded o_def, of f]) - apply (auto simp: algebra_simps intro!: holomorphic_derivI [OF holfU]) - done + by (rule derivative_eq_intros holomorphic_derivI [OF holfU] + DERIV_chain [unfolded o_def, where f=f and g=f] | simp add: algebra_simps)+ show "((\x. f (f x) - c * f x) has_field_derivative 1 * (1 - c)) (at z)" by (simp add: eq mult_commute_abs) qed @@ -601,8 +597,8 @@ next case False have "\x. (1 - k) * x \ f 0" - using l [of 0] apply (simp add: algebra_simps) - by (metis diff_add_cancel l mult.commute non_fp) + using l [of 0] + by (simp add: algebra_simps) (metis diff_add_cancel l mult.commute non_fp) then show False by (metis False eq_iff_diff_eq_0 mult.commute nonzero_mult_div_cancel_right times_divide_eq_right) qed @@ -641,17 +637,20 @@ by simp next case (Suc d) then show ?case - apply simp - using seq_suble [OF sub_kk] order_trans strict_mono_less_eq [OF sub_rr] by blast + using seq_suble [OF sub_kk] strict_mono_less_eq [OF sub_rr] + by (simp add: order_subst1) qed then have "\i j n. i \ j \ rr i n \ rr j n" by (metis le_iff_add) show "strict_mono (\n. rr n n)" - apply (simp add: strict_mono_Suc_iff) - by (meson lessI less_le_trans seq_suble strict_monoD sub_kk sub_rr) + unfolding strict_mono_Suc_iff + by (simp add: Suc_le_lessD strict_monoD strict_mono_imp_increasing sub_kk sub_rr) have "\j. i \ j \ rr (n+d) i = rr n j" for d n i - apply (induction d arbitrary: i, auto) - by (meson order_trans seq_suble sub_kk) + proof (induction d arbitrary: i) + case (Suc d) + then show ?case + using seq_suble [OF sub_kk] by simp (meson order_trans) + qed auto then have "\m n i. n \ m \ \j. i \ j \ rr m i = rr n j" by (metis le_iff_add) then show "P i (r \ (\n. rr n n))" for i @@ -679,18 +678,13 @@ have "f (r n) (\ i) \ cball 0 M" for n by (simp add: \ M) then show ?thesis - using compact_def [of "cball (0::'b) M"] apply simp - apply (drule_tac x="(\n. f (r n) (\ i))" in spec) - apply (force simp: o_def) - done + using compact_def [of "cball (0::'b) M"] by (force simp: o_def) qed - show "\i r k1 k2 N. - \\l. (\n. (f \ (r \ k1)) n (\ i)) \ l; \j. N \ j \ \j'\j. k2 j = k1 j'\ - \ \l. (\n. (f \ (r \ k2)) n (\ i)) \ l" - apply (simp add: lim_sequentially) - apply (erule ex_forward all_forward imp_forward)+ - apply auto - by (metis (no_types, hide_lams) le_cases order_trans) + show "\l. (\n. (f \ (r \ k2)) n (\ i)) \ l" + if "\l. (\n. (f \ (r \ k1)) n (\ i)) \ l" "\j. N \ j \ \j'\j. k2 j = k1 j'" + for i N and r k1 k2 :: "nat\nat" + using that + by (simp add: lim_sequentially) (metis (no_types, hide_lams) le_cases order_trans) qed auto with \ that show ?thesis by force @@ -714,22 +708,18 @@ if "\e. 0 < e \ \N. \n x. n \ N \ x \ S \ norm(\(r n) x - g x) < e" for g:: "'a \ 'b" and r :: "nat \ nat" proof (rule uniform_limit_theorem [of _ "\ \ r"]) - show "\\<^sub>F n in sequentially. continuous_on S ((\ \ r) n)" - apply (simp add: eventually_sequentially) - apply (rule_tac x=0 in exI) - using UEQ apply (force simp: continuous_on_iff) - done + have "continuous_on S (\ (r n))" for n + using UEQ by (force simp: continuous_on_iff) + then show "\\<^sub>F n in sequentially. continuous_on S ((\ \ r) n)" + by (simp add: eventually_sequentially) show "uniform_limit S (\ \ r) g sequentially" - apply (simp add: uniform_limit_iff eventually_sequentially) - by (metis dist_norm that) + using that by (metis (mono_tags, hide_lams) comp_apply dist_norm uniform_limit_sequentially_iff) qed auto moreover obtain R where "countable R" "R \ S" and SR: "S \ closure R" by (metis separable that) obtain k where "strict_mono k" and k: "\x. x \ R \ \l. (\n. \ (k n) x) \ l" - apply (rule function_convergent_subsequence [OF \countable R\ M]) - using \R \ S\ apply force+ - done + using \R \ S\ by (force intro: function_convergent_subsequence [OF \countable R\ M]) then have Cauchy: "Cauchy ((\n. \ (k n) x))" if "x \ R" for x using convergent_eq_Cauchy that by blast have "\N. \m n x. N \ m \ N \ n \ x \ S \ dist ((\ \ k) m x) ((\ \ k) n x) < e" @@ -741,8 +731,7 @@ obtain T where "T \ R" and "finite T" and T: "S \ (\c\T. ball c d)" proof (rule compactE_image [OF \compact S\, of R "(\x. ball x d)"]) have "closure R \ (\c\R. ball c d)" - apply clarsimp - using \0 < d\ closure_approachable by blast + using \0 < d\ by (auto simp: closure_approachable) with SR show "S \ (\c\R. ball c d)" by auto qed auto @@ -777,12 +766,10 @@ then show ?thesis by force qed - then have "\g. \e>0. \N. \n\N. \x \ S. norm(\(k n) x - g x) < e" - using uniformly_convergent_eq_cauchy [of "\x. x \ S" "\ \ k"] - apply (simp add: o_def dist_norm) - by meson + then obtain g where "\e>0. \N. \n x. N \ n \ x \ S \ norm ((\ \ k) n x - g x) < e" + using uniformly_convergent_eq_cauchy [of "\x. x \ S" "\ \ k"] by (auto simp add: dist_norm) ultimately show thesis - by (metis that \strict_mono k\) + by (metis \strict_mono k\ comp_apply that) qed @@ -823,15 +810,15 @@ proof - obtain r where "0 < r" and r: "cball z r \ S" using z KS [of i] \open S\ by (force simp: open_contains_cball) - have "cball z (2 / 3 * r) \ cball z r" + have "cball z (2/3 * r) \ cball z r" using \0 < r\ by (simp add: cball_subset_cball_iff) - then have z23S: "cball z (2 / 3 * r) \ S" + then have z23S: "cball z (2/3 * r) \ S" using r by blast obtain M where "0 < M" and M: "\n w. dist z w \ 2/3 * r \ norm(\ n w) \ M" proof - obtain N where N: "\n\N. cball z (2/3 * r) \ K n" - using subK compact_cball [of z "(2 / 3 * r)"] z23S by force - have "cmod (\ n w) \ \B N\ + 1" if "dist z w \ 2 / 3 * r" for n w + using subK compact_cball [of z "(2/3 * r)"] z23S by force + have "cmod (\ n w) \ \B N\ + 1" if "dist z w \ 2/3 * r" for n w proof - have "w \ K N" using N mem_cball that by blast @@ -849,27 +836,28 @@ for n y proof - have "((\w. \ n w / (w - \)) has_contour_integral - (2 * pi) * \ * winding_number (circlepath z (2 / 3 * r)) \ * \ n \) - (circlepath z (2 / 3 * r))" - if "dist \ z < (2 / 3 * r)" for \ + (2 * pi) * \ * winding_number (circlepath z (2/3 * r)) \ * \ n \) + (circlepath z (2/3 * r))" + if "dist \ z < (2/3 * r)" for \ proof (rule Cauchy_integral_formula_convex_simple) have "\ n holomorphic_on S" by (simp add: \ \\n. \ n \ \\) - with z23S show "\ n holomorphic_on cball z (2 / 3 * r)" + with z23S show "\ n holomorphic_on cball z (2/3 * r)" using holomorphic_on_subset by blast qed (use that \0 < r\ in \auto simp: dist_commute\) then have *: "((\w. \ n w / (w - \)) has_contour_integral (2 * pi) * \ * \ n \) - (circlepath z (2 / 3 * r))" - if "dist \ z < (2 / 3 * r)" for \ + (circlepath z (2/3 * r))" + if "dist \ z < (2/3 * r)" for \ using that by (simp add: winding_number_circlepath dist_norm) have y: "((\w. \ n w / (w - y)) has_contour_integral (2 * pi) * \ * \ n y) - (circlepath z (2 / 3 * r))" - apply (rule *) - using that \0 < r\ by (simp only: dist_norm norm_minus_commute) + (circlepath z (2/3 * r))" + proof (rule *) + show "dist y z < 2/3 * r" + using that \0 < r\ by (simp only: dist_norm norm_minus_commute) + qed have z: "((\w. \ n w / (w - z)) has_contour_integral (2 * pi) * \ * \ n z) - (circlepath z (2 / 3 * r))" - apply (rule *) - using \0 < r\ by simp + (circlepath z (2/3 * r))" + using \0 < r\ by (force intro!: *) have le_er: "cmod (\ n x / (x - y) - \ n x / (x - z)) \ e / r" if "cmod (x - z) = r/3 + r/3" for x proof - @@ -889,26 +877,26 @@ also have "... = cmod (\ n x) * (cmod (y - z) / (cmod(x - y) * (2/3 * r)))" by (simp add: norm_mult norm_divide that) also have "... \ M * (cmod (y - z) / (cmod(x - y) * (2/3 * r)))" - apply (rule mult_mono) - apply (rule leM) - using \r > 0\ \M > 0\ neq by auto - also have "... < M * ((e * r / (6 * M)) / (cmod(x - y) * (2/3 * r)))" - unfolding mult_less_cancel_left - using y_near_z(2) \M > 0\ \r > 0\ neq - apply (simp add: field_simps mult_less_0_iff norm_minus_commute) - done + using \r > 0\ \M > 0\ by (intro mult_mono [OF leM]) auto + also have "... < M * ((e * r / (6 * M)) / (cmod(x - y) * (2/3 * r)))" + unfolding mult_less_cancel_left + using y_near_z(2) \M > 0\ \r > 0\ neq + by (simp add: field_simps mult_less_0_iff norm_minus_commute) also have "... \ e/r" using \e > 0\ \r > 0\ r4_le_xy by (simp add: field_split_simps) finally show ?thesis by simp qed have "(2 * pi) * cmod (\ n y - \ n z) = cmod ((2 * pi) * \ * \ n y - (2 * pi) * \ * \ n z)" by (simp add: right_diff_distrib [symmetric] norm_mult) - also have "cmod ((2 * pi) * \ * \ n y - (2 * pi) * \ * \ n z) \ e / r * (2 * pi * (2 / 3 * r))" - apply (rule has_contour_integral_bound_circlepath [OF has_contour_integral_diff [OF y z], of "e/r"]) - using \e > 0\ \r > 0\ le_er by auto - also have "... = (2 * pi) * e * ((2 / 3))" + also have "cmod ((2 * pi) * \ * \ n y - (2 * pi) * \ * \ n z) \ e / r * (2 * pi * (2/3 * r))" + + proof (rule has_contour_integral_bound_circlepath [OF has_contour_integral_diff [OF y z]]) + show "\x. cmod (x - z) = 2/3 * r \ cmod (\ n x / (x - y) - \ n x / (x - z)) \ e / r" + using le_er by auto + qed (use \e > 0\ \r > 0\ in auto) + also have "... = (2 * pi) * e * ((2/3))" using \r > 0\ by (simp add: field_split_simps) - finally have "cmod (\ n y - \ n z) \ e * (2 / 3)" + finally have "cmod (\ n y - \ n z) \ e * (2/3)" by simp also have "... < e" using \e > 0\ by simp @@ -934,29 +922,30 @@ then show ?thesis by auto qed - have "\k g. strict_mono (k::nat\nat) \ (\e > 0. \N. \n\N. \x \ K i. norm((\ \ r \ k) n x - g x) < e)" - for i r - apply (rule *) - using rng_f by auto - then have **: "\i r. \k. strict_mono (k::nat\nat) \ (\g. \e>0. \N. \n\N. \x \ K i. norm((\ \ (r \ k)) n x - g x) < e)" - by (force simp: o_assoc) - obtain k :: "nat \ nat" where "strict_mono k" - and "\i. \g. \e>0. \N. \n\N. \x\K i. cmod ((\ \ (id \ k)) n x - g x) < e" - (* TODO: clean up this mess *) - apply (rule subsequence_diagonalization_lemma [OF **, of id id]) - apply (erule ex_forward all_forward imp_forward)+ - apply force - apply (erule exE) - apply (rename_tac i r k1 k2 N g e Na) - apply (rule_tac x="max N Na" in exI) - apply fastforce+ - done - then have lt_e: "\i. \g. \e>0. \N. \n\N. \x\K i. cmod ((\ \ k) n x - g x) < e" - by simp + define \ where "\ \ \g i r. \k::nat\nat. \e>0. \N. \n\N. \x\K i. cmod ((\ \ (r \ k)) n x - g x) < e" + obtain k :: "nat \ nat" where "strict_mono k" and k: "\i. \g. \ g i id k" + proof (rule subsequence_diagonalization_lemma [where r=id]) + show "\g. \ g i id (r \ k2)" + if ex: "\g. \ g i id (r \ k1)" and "\j. N \ j \ \j'\j. k2 j = k1 j'" + for i k1 k2 N and r::"nat\nat" + proof - + obtain g where "\ g i id (r \ k1)" + using ex by blast + then have "\ g i id (r \ k2)" + using that + by (simp add: \_def) (metis (no_types, hide_lams) le_trans linear) + then show ?thesis + by metis + qed + have "\k g. strict_mono (k::nat\nat) \ \ g i id (r \ k)" for i r + unfolding \_def o_assoc using rng_f by (force intro!: *) + then show "\i r. \k. strict_mono (k::nat\nat) \ (\g. \ g i id (r \ k))" + by force + qed fastforce have "\l. \e>0. \N. \n\N. norm(\ (k n) z - l) < e" if "z \ S" for z proof - obtain G where G: "\i e. e > 0 \ \M. \n\M. \x\K i. cmod ((\ \ k) n x - G i x) < e" - using lt_e by metis + using k unfolding \_def by (metis id_comp) obtain N where "\n. n \ N \ z \ K n" using subK [of "{z}"] that \z \ S\ by auto moreover have "\e. e > 0 \ \M. \n\M. \x\K N. cmod ((\ \ k) n x - G N x) < e" @@ -976,11 +965,14 @@ obtain N where N: "\n. n \ N \ T \ K n" using subK [OF T] by blast obtain h where h: "\e. e>0 \ \M. \n\M. \x\K N. cmod ((\ \ k) n x - h x) < e" - using lt_e by blast + using k unfolding \_def by (metis id_comp) have geq: "g w = h w" if "w \ T" for w - apply (rule LIMSEQ_unique [of "\n. \(k n) w"]) - using \T \ S\ g_lim that apply blast - using h N that by (force simp: lim_sequentially dist_norm) + proof (rule LIMSEQ_unique) + show "(\n. \ (k n) w) \ g w" + using \T \ S\ g_lim that by blast + show "(\n. \ (k n) w) \ h w" + using h N that by (force simp: lim_sequentially dist_norm) + qed show ?thesis using T h N \0 < e\ by (fastforce simp add: geq) qed @@ -1028,23 +1020,22 @@ then have holf0: "\ n holomorphic_on ball z0 r" for n by (meson holf holomorphic_on_subset) have *: "((\z. deriv (\ n) z / \ n z) has_contour_integral 0) (circlepath z0 (r/2))" for n - proof (rule Cauchy_theorem_disc_simple [of _ z0 r]) + proof (rule Cauchy_theorem_disc_simple) show "(\z. deriv (\ n) z / \ n z) holomorphic_on ball z0 r" - apply (intro holomorphic_intros holomorphic_deriv holf holf0 open_ball nz) - using \ball z0 r \ S\ by blast + by (metis (no_types) \open S\ holf holomorphic_deriv holomorphic_on_divide holomorphic_on_subset nz subS) qed (use \0 < r\ in auto) have hol_dg: "deriv g holomorphic_on S" by (simp add: \open S\ holg holomorphic_deriv) have "continuous_on (sphere z0 (r/2)) (deriv g)" - apply (intro holomorphic_on_imp_continuous_on holomorphic_on_subset [OF hol_dg]) - using \0 < r\ subS by auto + using \0 < r\ subS + by (intro holomorphic_on_imp_continuous_on holomorphic_on_subset [OF hol_dg]) auto then have "compact (deriv g ` (sphere z0 (r/2)))" by (rule compact_continuous_image [OF _ compact_sphere]) then have bo_dg: "bounded (deriv g ` (sphere z0 (r/2)))" using compact_imp_bounded by blast have "continuous_on (sphere z0 (r/2)) (cmod \ g)" - apply (intro continuous_intros holomorphic_on_imp_continuous_on holomorphic_on_subset [OF holg]) - using \0 < r\ subS by auto + using \0 < r\ subS + by (intro continuous_intros holomorphic_on_imp_continuous_on holomorphic_on_subset [OF holg]) auto then have "compact ((cmod \ g) ` sphere z0 (r/2))" by (rule compact_continuous_image [OF _ compact_sphere]) moreover have "(cmod \ g) ` sphere z0 (r/2) \ {}" @@ -1063,51 +1054,54 @@ proof (rule uniform_limitI) fix e::real assume "0 < e" - have *: "dist (deriv (\ n) w) (deriv g w) < e" - if e8: "\x. dist z0 x \ 3 * r / 4 \ dist (\ n x) (g x) * 8 < r * e" - and w: "dist w z0 = r/2" for n w + + show "\\<^sub>F n in sequentially. \x \ sphere z0 (r/2). dist (deriv (\ n) x) (deriv g x) < e" proof - - have "ball w (r/4) \ ball z0 r" "cball w (r/4) \ ball z0 r" - using \0 < r\ by (simp_all add: ball_subset_ball_iff cball_subset_ball_iff w) - with subS have wr4_sub: "ball w (r/4) \ S" "cball w (r/4) \ S" by force+ - moreover - have "(\z. \ n z - g z) holomorphic_on S" - by (intro holomorphic_intros holf holg) - ultimately have hol: "(\z. \ n z - g z) holomorphic_on ball w (r/4)" - and cont: "continuous_on (cball w (r / 4)) (\z. \ n z - g z)" - using holomorphic_on_subset by (blast intro: holomorphic_on_imp_continuous_on)+ - have "w \ S" - using \0 < r\ wr4_sub by auto - have "\y. dist w y < r / 4 \ dist z0 y \ 3 * r / 4" - apply (rule dist_triangle_le [where z=w]) - using w by (simp add: dist_commute) - with e8 have in_ball: "\y. y \ ball w (r/4) \ \ n y - g y \ ball 0 (r/4 * e/2)" - by (simp add: dist_norm [symmetric]) - have "\ n field_differentiable at w" - by (metis holomorphic_on_imp_differentiable_at \w \ S\ holf \open S\) + have "dist (deriv (\ n) w) (deriv g w) < e" + if e8: "\x. dist z0 x \ 3 * r / 4 \ dist (\ n x) (g x) * 8 < r * e" + and w: "w \ sphere z0 (r/2)" for n w + proof - + have "ball w (r/4) \ ball z0 r" "cball w (r/4) \ ball z0 r" + using \0 < r\ w by (simp_all add: ball_subset_ball_iff cball_subset_ball_iff dist_commute) + with subS have wr4_sub: "ball w (r/4) \ S" "cball w (r/4) \ S" by force+ + moreover + have "(\z. \ n z - g z) holomorphic_on S" + by (intro holomorphic_intros holf holg) + ultimately have hol: "(\z. \ n z - g z) holomorphic_on ball w (r/4)" + and cont: "continuous_on (cball w (r / 4)) (\z. \ n z - g z)" + using holomorphic_on_subset by (blast intro: holomorphic_on_imp_continuous_on)+ + have "w \ S" + using \0 < r\ wr4_sub by auto + have "dist z0 y \ 3 * r / 4" if "dist w y < r/4" for y + proof (rule dist_triangle_le [where z=w]) + show "dist z0 w + dist y w \ 3 * r / 4" + using w that by (simp add: dist_commute) + qed + with e8 have in_ball: "\y. y \ ball w (r/4) \ \ n y - g y \ ball 0 (r/4 * e/2)" + by (simp add: dist_norm [symmetric]) + have "\ n field_differentiable at w" + by (metis holomorphic_on_imp_differentiable_at \w \ S\ holf \open S\) + moreover + have "g field_differentiable at w" + using \w \ S\ \open S\ holg holomorphic_on_imp_differentiable_at by auto + moreover + have "cmod (deriv (\w. \ n w - g w) w) * 2 \ e" + using Cauchy_higher_deriv_bound [OF hol cont in_ball, of 1] \r > 0\ by auto + ultimately have "dist (deriv (\ n) w) (deriv g w) \ e/2" + by (simp add: dist_norm) + then show ?thesis + using \e > 0\ by auto + qed moreover - have "g field_differentiable at w" - using \w \ S\ \open S\ holg holomorphic_on_imp_differentiable_at by auto - moreover - have "cmod (deriv (\w. \ n w - g w) w) * 2 \ e" - apply (rule Cauchy_higher_deriv_bound [OF hol cont in_ball, of 1, simplified]) - using \r > 0\ by auto - ultimately have "dist (deriv (\ n) w) (deriv g w) \ e/2" - by (simp add: dist_norm) - then show ?thesis - using \e > 0\ by auto + have "cball z0 (3 * r / 4) \ ball z0 r" + by (simp add: cball_subset_ball_iff \0 < r\) + with subS have "uniform_limit (cball z0 (3 * r/4)) \ g sequentially" + by (force intro: ul_g) + then have "\\<^sub>F n in sequentially. \x\cball z0 (3 * r / 4). dist (\ n x) (g x) < r / 4 * e / 2" + using \0 < e\ \0 < r\ by (force simp: intro!: uniform_limitD) + ultimately show ?thesis + by (force simp add: eventually_sequentially) qed - have "cball z0 (3 * r / 4) \ ball z0 r" - by (simp add: cball_subset_ball_iff \0 < r\) - with subS have "uniform_limit (cball z0 (3 * r/4)) \ g sequentially" - by (force intro: ul_g) - then have "\\<^sub>F n in sequentially. \x\cball z0 (3 * r / 4). dist (\ n x) (g x) < r / 4 * e / 2" - using \0 < e\ \0 < r\ by (force simp: intro!: uniform_limitD) - then show "\\<^sub>F n in sequentially. \x \ sphere z0 (r/2). dist (deriv (\ n) x) (deriv g x) < e" - apply (simp add: eventually_sequentially) - apply (elim ex_forward all_forward imp_forward asm_rl) - using * apply (force simp: dist_commute) - done qed show "uniform_limit (sphere z0 (r/2)) \ g sequentially" proof (rule uniform_limitI) @@ -1118,8 +1112,7 @@ with subS have "uniform_limit (sphere z0 (r/2)) \ g sequentially" by (force intro: ul_g) then show "\\<^sub>F n in sequentially. \x \ sphere z0 (r/2). dist (\ n x) (g x) < e" - apply (rule uniform_limitD) - using \0 < e\ by force + using \0 < e\ uniform_limit_iff by blast qed show "b > 0" "\x. x \ sphere z0 (r/2) \ b \ cmod (g x)" using b \0 < r\ by (fastforce simp: geq hnz)+ @@ -1140,19 +1133,18 @@ have h_der: "(h has_field_derivative deriv h w) (at w)" using holh holomorphic_derivI w_inb by blast have "deriv g w = ((of_nat m * h w + deriv h w * (w - z0)) * (w - z0) ^ m) / (w - z0)" - if "r = dist z0 w * 2" "w \ z0" + if "r = dist z0 w * 2" "w \ z0" proof - have "((\w. (w - z0) ^ m * h w) has_field_derivative (m * h w + deriv h w * (w - z0)) * (w - z0) ^ m / (w - z0)) (at w)" apply (rule derivative_eq_intros h_der refl)+ using that \m > 0\ \0 < r\ apply (simp add: divide_simps distrib_right) - apply (metis Suc_pred mult.commute power_Suc) - done + by (metis Suc_pred mult.commute power_Suc) then show ?thesis - apply (rule DERIV_imp_deriv [OF has_field_derivative_transform_within_open [where S = "ball z0 r"]]) - using that \m > 0\ \0 < r\ - apply (simp_all add: hnz geq) - done + proof (rule DERIV_imp_deriv [OF has_field_derivative_transform_within_open]) + show "\x. x \ ball z0 r \ (x - z0) ^ m * h x = g x" + by (simp add: hnz geq) + qed (use that \m > 0\ \0 < r\ in auto) qed with \0 < r\ \0 < m\ w w_inb show "deriv g w / g w = of_nat m / (w - z0) + deriv h w / h w" by (auto simp: geq field_split_simps hnz) @@ -1164,10 +1156,8 @@ show "((\x. m / (x - z0)) has_contour_integral 2 * of_real pi * \ * m) (circlepath z0 (r/2))" by (force simp: \0 < r\ intro: Cauchy_integral_circlepath_simple) show "((\x. deriv h x / h x) has_contour_integral 0) (circlepath z0 (r/2))" - apply (rule Cauchy_theorem_disc_simple [of _ z0 r]) using hnz holh holomorphic_deriv holomorphic_on_divide \0 < r\ - apply force+ - done + by (fastforce intro!: Cauchy_theorem_disc_simple [of _ z0 r]) qed ultimately show False using \0 < m\ by auto qed @@ -1215,17 +1205,9 @@ using \0 < e\ by (force simp: intro!: uniform_limitD) then have z1: "\\<^sub>F n in sequentially. dist (\ n z1) (g z1) < e/2" by simp - have "\\<^sub>F n in sequentially. \x\K. dist (\ n x - \ n z1) (g x - g z1) < e/2 + e/2" - apply (rule eventually_mono [OF eventually_conj [OF K z1]]) - apply (simp add: dist_norm algebra_simps del: divide_const_simps) - by (metis add.commute dist_commute dist_norm dist_triangle_add_half) - have "\\<^sub>F n in sequentially. \x\K. dist (\ n x - \ n z1) (g x - g z1) < e/2 + e/2" - using eventually_conj [OF K z1] - apply (rule eventually_mono) - by (metis (no_types, hide_lams) diff_add_eq diff_diff_eq2 dist_commute dist_norm dist_triangle_add_half field_sum_of_halves) - then - show "\\<^sub>F n in sequentially. \x\K. dist (\ n x - \ n z1) (g x - g z1) < e" - by simp + show "\\<^sub>F n in sequentially. \x\K. dist (\ n x - \ n z1) (g x - g z1) < e" + apply (rule eventually_mono [OF eventually_conj [OF K z1]]) + by (metis (no_types, hide_lams) diff_add_eq diff_diff_eq2 dist_commute dist_norm dist_triangle_add_half) qed show "\ (\z. g z - g z1) constant_on S - {z1}" unfolding constant_on_def @@ -1264,22 +1246,28 @@ proof - have "h \ X" using \Y \ X\ \h \ Y\ by blast - with holX have "h holomorphic_on S" - by auto - then have "h holomorphic_on cball w e" - by (metis e holomorphic_on_subset) - then have hol_h_o: "(h \ (\z. (w + of_real e * z))) holomorphic_on cball 0 1" - apply (intro holomorphic_intros holomorphic_on_compose) - apply (erule holomorphic_on_subset) - using that \e > 0\ by (auto simp: dist_norm norm_mult) + have hol_h_o: "(h \ (\z. (w + of_real e * z))) holomorphic_on cball 0 1" + proof (intro holomorphic_intros holomorphic_on_compose) + have "h holomorphic_on S" + using holX \h \ X\ by auto + then have "h holomorphic_on cball w e" + by (metis e holomorphic_on_subset) + moreover have "(\z. w + complex_of_real e * z) ` cball 0 1 \ cball w e" + using that \e > 0\ by (auto simp: dist_norm norm_mult) + ultimately show "h holomorphic_on (\z. w + complex_of_real e * z) ` cball 0 1" + by (rule holomorphic_on_subset) + qed have norm_le_r: "cmod ((h \ (\z. w + complex_of_real e * z)) 0) \ r" by (auto simp: r \h \ Y\) have le12: "norm (of_real(inverse e) * (z - w)) \ 1/2" using that \e > 0\ by (simp add: inverse_eq_divide dist_norm norm_minus_commute norm_divide) - have non01: "\z::complex. cmod z \ 1 \ h (w + e * z) \ 0 \ h (w + e * z) \ 1" - apply (rule X01 [OF \h \ X\]) - apply (rule subsetD [OF e]) - using \0 < e\ by (auto simp: dist_norm norm_mult) + have non01: "h (w + e * z) \ 0 \ h (w + e * z) \ 1" if "z \ cball 0 1" for z::complex + proof (rule X01 [OF \h \ X\]) + have "w + complex_of_real e * z \ cball w e" + using \0 < e\ that by (auto simp: dist_norm norm_mult) + then show "w + complex_of_real e * z \ S" + by (rule subsetD [OF e]) + qed have "cmod (h z) \ cmod (h (w + of_real e * (inverse e * (z - w))))" using \0 < e\ by (simp add: field_split_simps) also have "... \ exp (pi * exp (pi * (14 + 2 * r)))" @@ -1313,8 +1301,7 @@ proof - obtain B Z where "0 < B" "open Z" "w \ Z" "Z \ S" and "\h z. \h \ Y; z \ Z\ \ norm(h z) \ B" - apply (rule GPicard1 [OF S zero_less_one \Y \ X\ holX]) - using no_hw_le1 X01 by force+ + using GPicard1 [OF S zero_less_one \Y \ X\ holX] X01 no_hw_le1 by blast then show ?thesis unfolding U_def using \w \ S\ by blast qed @@ -1331,9 +1318,10 @@ by metis define \ where "\ \ \n z. inverse(\ n z)" have hol\: "\ n holomorphic_on S" for n - apply (simp add: \_def) - using FY X01 \Y \ X\ holX apply (blast intro: holomorphic_on_inverse) - done + proof (simp add: \_def) + show "(\z. inverse (\ n z)) holomorphic_on S" + using FY X01 \Y \ X\ holX by (blast intro: holomorphic_on_inverse) + qed have \not0: "\ n z \ 0" and \not1: "\ n z \ 1" if "z \ S" for n z using FY X01 \Y \ X\ that by (force simp: \_def)+ have \_le1: "cmod (\ n v) \ 1" for n @@ -1387,7 +1375,8 @@ and "\h z'. \h \ Y; z' \ T\ \ cmod (h z') \ C" using \y \ U\ by (auto simp: U_def) then have le_C: "\n. cmod (\ n y) \ C" - using FY by blast + using FY by blast + have "\\<^sub>F n in sequentially. dist (\ (j n) y) (h y) < inverse C" using uniform_limitD [OF ulim [of "{y}"], of "inverse C"] \C > 0\ y by (simp add: dist_commute) @@ -1396,11 +1385,10 @@ moreover have "h y = h v" by (metis \h v = c\ dist_commute that y) - ultimately have "norm (\ (j n) y) < inverse C" - by (simp add: \h v = 0\) + ultimately have "cmod (inverse (\ (j n) y)) < inverse C" + by (simp add: \h v = 0\ \_def) then have "C < norm (\ (j n) y)" - apply (simp add: \_def) - by (metis FY X01 \0 < C\ \y \ S\ \Y \ X\ inverse_less_iff_less norm_inverse subsetD zero_less_norm_iff) + by (metis \_def \not0 \y \ S\ inverse_less_imp_less inverse_zero norm_inverse zero_less_norm_iff) show False using \C < cmod (\ (j n) y)\ le_C not_less by blast qed @@ -1413,11 +1401,14 @@ qed (use \e > 0\ in auto) with \h v = 0\ show False by blast qed - then show "v \ U" - apply (clarsimp simp add: U_def v) - apply (rule GPicard1[OF \open S\ \connected S\ \v \ S\ _ \Y \ X\ holX]) - using X01 no_hw_le1 apply (meson | force simp: not_less)+ - done + then obtain r where "0 < r" and r: "\h. h \ Y \ cmod (h v) \ r" + by (metis not_le) + moreover + obtain B Z where "0 < B" "open Z" "v \ Z" "Z \ S" "\h z. \h \ Y; z \ Z\ \ norm(h z) \ B" + using X01 + by (auto simp: r intro: GPicard1[OF \open S\ \connected S\ \v \ S\ \r>0\ \Y \ X\ holX] X01) + ultimately show "v \ U" + using v by (simp add: U_def) meson qed have "\x. x \ K \ x \ U" using \U = S\ \K \ S\ by blast @@ -1436,10 +1427,10 @@ case True with L show ?thesis by simp next case False - with \finite L\ show ?thesis - apply (rule_tac x = "Max (F ` L)" in exI) - apply (simp add: linorder_class.Max_ge_iff) - using * F by (metis L UN_E subsetD) + then have "\h z. h \ Y \ z \ K \ (\x\L. cmod (h z) \ F x)" + by (metis "*" L UN_E subset_iff) + with False \finite L\ show ?thesis + by (rule_tac x = "Max (F ` L)" in exI) (simp add: linorder_class.Max_ge_iff) qed with that show ?thesis by metis qed @@ -1467,15 +1458,15 @@ have *: "norm(f w) \ B" if "w \ cball 0 \ - ball 0 d" for w proof (rule maximum_modulus_frontier [of f "cball 0 \ - ball 0 d"]) show "f holomorphic_on interior (cball 0 \ - ball 0 d)" - apply (rule holomorphic_on_subset [OF holf]) - using \\ < k\ \0 < d\ that by auto + using \\ < k\ \0 < d\ that by (auto intro: holomorphic_on_subset [OF holf]) show "continuous_on (closure (cball 0 \ - ball 0 d)) f" - apply (rule holomorphic_on_imp_continuous_on) - apply (rule holomorphic_on_subset [OF holf]) - using \0 < d\ \\ < k\ by auto + proof (intro holomorphic_on_imp_continuous_on holomorphic_on_subset [OF holf]) + show "closure (cball 0 \ - ball 0 d) \ ball 0 k - {0}" + using \0 < d\ \\ < k\ by auto + qed show "\z. z \ frontier (cball 0 \ - ball 0 d) \ cmod (f z) \ B" - apply (simp add: frontier_def) - using \ d less_eq_real_def by blast + unfolding frontier_def + using \ d less_eq_real_def by force qed (use that in auto) show ?thesis using * \d < cmod \\ that by auto @@ -1505,9 +1496,8 @@ by (intro holomorphic_intros) auto qed have h01: "\n z. z \ ball 0 1 - {0} \ h n z \ 0 \ h n z \ 1" - unfolding h_def - apply (rule f01) - using * by force + unfolding h_def + using * by (force intro!: f01) obtain w where w: "w \ ball 0 1 - {0::complex}" by (rule_tac w = "1/2" in that) auto consider "infinite {n. norm(h n w) \ 1}" | "infinite {n. 1 \ norm(h n w)}" @@ -1521,11 +1511,8 @@ obtain B where B: "\j z. \norm z = 1/2; j \ range (h \ r)\ \ norm(j z) \ B" proof (rule GPicard3 [OF _ _ w, where K = "sphere 0 (1/2)"]) show "range (h \ r) \ - {g. g holomorphic_on ball 0 1 - {0} \ (\z\ball 0 1 - {0}. g z \ 0 \ g z \ 1)}" - apply clarsimp - apply (intro conjI holomorphic_intros holomorphic_on_compose holh) - using h01 apply auto - done + {g. g holomorphic_on ball 0 1 - {0} \ (\z \ ball 0 1 - {0}. g z \ 0 \ g z \ 1)}" + using h01 by (auto intro: holomorphic_intros holomorphic_on_compose holh) show "connected (ball 0 1 - {0::complex})" by (simp add: connected_open_delete) qed (use r in auto) @@ -1558,8 +1545,7 @@ have "0 < \B\ + 1" by simp then show ?thesis - apply (rule that [OF \0 < \\ \\ < 1\]) - using \ by auto + using \ by (force intro!: that [OF \0 < \\ \\ < 1\]) next case 2 with infinite_enumerate obtain r :: "nat \ nat" @@ -1569,10 +1555,7 @@ proof (rule GPicard3 [OF _ _ w, where K = "sphere 0 (1/2)"]) show "range (\n. inverse \ h (r n)) \ {g. g holomorphic_on ball 0 1 - {0} \ (\z\ball 0 1 - {0}. g z \ 0 \ g z \ 1)}" - apply clarsimp - apply (intro conjI holomorphic_intros holomorphic_on_compose_gen [unfolded o_def, OF _ holh] holomorphic_on_compose) - using h01 apply auto - done + using h01 by (auto intro!: holomorphic_intros holomorphic_on_compose_gen [unfolded o_def, OF _ holh] holomorphic_on_compose) show "connected (ball 0 1 - {0::complex})" by (simp add: connected_open_delete) show "\j. j \ range (\n. inverse \ h (r n)) \ cmod (j w) \ 1" @@ -1621,8 +1604,8 @@ then have "inverse B > 0" by (simp add: field_split_simps) then show ?thesis - apply (rule that [OF \0 < \\ \\ < 1\]) - using \ by auto + using \ that [OF \0 < \\ \\ < 1\] + by (metis Diff_iff dist_0_norm insert_iff mem_ball) qed qed @@ -1641,13 +1624,14 @@ and B: "(\z \ ball 0 e - {0}. norm(?g z) \ B) \ (\z \ ball 0 e - {0}. norm(?g z) \ B)" proof (rule GPicard5) show "?g holomorphic_on ball 0 1 - {0}" - apply (intro holomorphic_intros holomorphic_on_compose_gen [unfolded o_def, OF _ holf]) - using \0 < r\ \a \ 0\ r - by (auto simp: dist_norm norm_mult subset_eq) + proof (intro holomorphic_intros holomorphic_on_compose_gen [unfolded o_def, OF _ holf]) + show "(\x. z + complex_of_real r * x) ` (ball 0 1 - {0}) \ M - {z}" + using \0 < r\ r + by (auto simp: dist_norm norm_mult subset_eq) + qed (use \a \ 0\ in auto) show "\w. w \ ball 0 1 - {0} \ f (z + of_real r * w) / a \ 0 \ f (z + of_real r * w) / a \ 1" - apply (simp add: field_split_simps \a \ 0\) - apply (rule f0a) - using \0 < r\ r by (auto simp: dist_norm norm_mult subset_eq) + using f0a \0 < r\ \a \ 0\ r + by (auto simp: field_split_simps dist_norm norm_mult subset_eq) qed show ?thesis proof @@ -1697,50 +1681,50 @@ by (intro holomorphic_intros holf) qed (use fab in auto) have holfb: "f holomorphic_on ball z r - {z}" - apply (rule holomorphic_on_subset [OF holf]) - using zrM by auto + using zrM by (auto intro: holomorphic_on_subset [OF holf]) have holfb_i: "(\z. inverse(f z - a)) holomorphic_on ball z r - {z}" - apply (intro holomorphic_intros holfb) - using fab zrM by fastforce + using fab zrM by (fastforce intro!: holomorphic_intros holfb) show ?thesis using r proof assume "bounded ((\z. f z - a) ` (ball z r - {z}))" then obtain B where B: "\w. w \ (\z. f z - a) ` (ball z r - {z}) \ norm w \ B" by (force simp: bounded_iff) - have "\\<^sub>F w in at z. cmod (f w - a) \ B" - apply (simp add: eventually_at) - apply (rule_tac x=r in exI) - using \0 < r\ by (auto simp: dist_commute intro!: B) - then have "\B. \\<^sub>F w in at z. cmod (f w) \ B" - apply (rule_tac x="B + norm a" in exI) - apply (erule eventually_mono) + then have "\x. x \ z \ dist x z < r \ cmod (f x - a) \ B" + by (simp add: dist_commute) + with \0 < r\ have "\\<^sub>F w in at z. cmod (f w - a) \ B" + by (force simp add: eventually_at) + moreover have "\x. cmod (f x - a) \ B \ cmod (f x) \ B + cmod a" by (metis add.commute add_le_cancel_right norm_triangle_sub order.trans) + ultimately have "\B. \\<^sub>F w in at z. cmod (f w) \ B" + by (metis (mono_tags, lifting) eventually_at) then obtain g where holg: "g holomorphic_on ball z r" and gf: "\w. w \ ball z r - {z} \ g w = f w" using \0 < r\ holomorphic_on_extend_bounded [OF holfb] by auto then have "g \z\ g z" - apply (simp add: continuous_at [symmetric]) - using \0 < r\ centre_in_ball field_differentiable_imp_continuous_at holomorphic_on_imp_differentiable_at by blast + unfolding continuous_at [symmetric] + using \0 < r\ centre_in_ball field_differentiable_imp_continuous_at + holomorphic_on_imp_differentiable_at by blast then have "(f \ g z) (at z)" - apply (rule Lim_transform_within_open [of g "g z" z UNIV "ball z r"]) - using \0 < r\ by (auto simp: gf) + using Lim_transform_within_open [of g "g z" z] + using \0 < r\ centre_in_ball gf by blast then show ?thesis using that by blast next assume "bounded((inverse \ (\z. f z - a)) ` (ball z r - {z}))" then obtain B where B: "\w. w \ (inverse \ (\z. f z - a)) ` (ball z r - {z}) \ norm w \ B" by (force simp: bounded_iff) - have "\\<^sub>F w in at z. cmod (inverse (f w - a)) \ B" - apply (simp add: eventually_at) - apply (rule_tac x=r in exI) - using \0 < r\ by (auto simp: dist_commute intro!: B) + then have "\x. x \ z \ dist x z < r \ cmod (inverse (f x - a)) \ B" + by (simp add: dist_commute) + with \0 < r\ have "\\<^sub>F w in at z. cmod (inverse (f w - a)) \ B" + by (auto simp add: eventually_at) then have "\B. \\<^sub>F z in at z. cmod (inverse (f z - a)) \ B" by blast then obtain g where holg: "g holomorphic_on ball z r" and gf: "\w. w \ ball z r - {z} \ g w = inverse (f w - a)" using \0 < r\ holomorphic_on_extend_bounded [OF holfb_i] by auto then have gz: "g \z\ g z" - apply (simp add: continuous_at [symmetric]) - using \0 < r\ centre_in_ball field_differentiable_imp_continuous_at holomorphic_on_imp_differentiable_at by blast + unfolding continuous_at [symmetric] + using \0 < r\ centre_in_ball field_differentiable_imp_continuous_at + holomorphic_on_imp_differentiable_at by blast have gnz: "\w. w \ ball z r - {z} \ g w \ 0" using gf fab zrM by fastforce show ?thesis @@ -1764,8 +1748,7 @@ have "(f \ 0) (at z)" proof (rule Lim_transform_within_open [of "\w. (1 + a * g w) / g w" _ _ _ "ball z r"]) show "(\w. (1 + a * g w) / g w) \z\ 0" - apply (rule tendsto_eq_intros refl gz \g z \ 0\)+ - by (simp add: True) + by (rule tendsto_eq_intros refl gz \g z \ 0\ | simp add: True)+ show "\x. \x \ ball z r; x \ z\ \ (1 + a * g x) / g x = f x" using fab fab zrM by (fastforce simp add: gf field_split_simps) qed (use \0 < r\ in auto) @@ -1793,8 +1776,8 @@ assumes M: "open M" "z \ M" and holf: "f holomorphic_on (M - {z})" and non: "\l. \ (f \ l) (at z)" "\l. \ ((inverse \ f) \ l) (at z)" obtains a where "- {a} \ f ` (M - {z})" - apply (simp add: subset_iff image_iff) - by (metis great_Picard [OF M _ holf] non) +unfolding subset_iff image_iff + by (metis great_Picard [OF M _ holf] non Compl_iff insertI1) corollary great_Picard_infinite: @@ -1815,8 +1798,7 @@ proof (cases "{x \ M - {z}. f x \ {a, b}} = {}") case True then show ?thesis - apply (rule_tac r=e in that) - using e \e > 0\ by auto + using e \e > 0\ that by fastforce next case False let ?r = "min e (Min (dist z ` {x \ M - {z}. f x \ {a,b}}))"