# HG changeset patch # User Wenda Li # Date 1531613644 -3600 # Node ID f36858fdf7686cf9f49f4bbec0255eff45b753ff # Parent 958511f53de8de6954b4c72a4c19975e251e3ea0 Tagged Conformal_Mappings in HOL-Analysis diff -r 958511f53de8 -r f36858fdf768 src/HOL/Analysis/Conformal_Mappings.thy --- a/src/HOL/Analysis/Conformal_Mappings.thy Fri Jul 13 22:10:05 2018 +0100 +++ b/src/HOL/Analysis/Conformal_Mappings.thy Sun Jul 15 01:14:04 2018 +0100 @@ -9,6 +9,7 @@ begin +(* FIXME mv to Cauchy_Integral_Theorem.thy *) subsection\Cauchy's inequality and more versions of Liouville\ lemma Cauchy_higher_deriv_bound: @@ -54,7 +55,7 @@ by (auto simp: norm_divide norm_mult norm_power field_simps der_dif le_B0) qed -proposition Cauchy_inequality: +lemma Cauchy_inequality: assumes holf: "f holomorphic_on (ball \ r)" and contf: "continuous_on (cball \ r) f" and "0 < r" @@ -79,7 +80,7 @@ by (simp add: norm_divide norm_mult field_simps) qed -proposition Liouville_polynomial: +lemma Liouville_polynomial: assumes holf: "f holomorphic_on UNIV" and nof: "\z. A \ norm z \ norm(f z) \ B * norm z ^ n" shows "f \ = (\k\n. (deriv^^k) f 0 / fact k * \ ^ k)" @@ -165,11 +166,9 @@ using Liouville_polynomial [OF holf, of 0 B 0, simplified] that by blast qed - - text\A holomorphic function f has only isolated zeros unless f is 0.\ -proposition powser_0_nonzero: +lemma powser_0_nonzero: fixes a :: "nat \ 'a::{real_normed_field,banach}" assumes r: "0 < r" and sm: "\x. norm (x - \) < r \ (\n. a n * (x - \) ^ n) sums (f x)" @@ -222,10 +221,13 @@ using \0 < r\ \0 < s\ by (auto simp: dist_commute dist_norm) qed +subsection \Analytic continuation\ + proposition isolated_zeros: assumes holf: "f holomorphic_on S" and "open S" "connected S" "\ \ S" "f \ = 0" "\ \ S" "f \ \ 0" - obtains r where "0 < r" "ball \ r \ S" "\z. z \ ball \ r - {\} \ f z \ 0" + obtains r where "0 < r" and "ball \ r \ S" and + "\z. z \ ball \ r - {\} \ f z \ 0" proof - obtain r where "0 < r" and r: "ball \ r \ S" using \open S\ \\ \ S\ open_contains_ball_eq by blast @@ -246,11 +248,10 @@ using r s by auto qed - proposition analytic_continuation: assumes holf: "f holomorphic_on S" - and S: "open S" "connected S" - and "U \ S" "\ \ S" + and "open S" and "connected S" + and "U \ S" and "\ \ S" and "\ islimpt U" and fU0 [simp]: "\z. z \ U \ f z = 0" and "w \ S" @@ -279,8 +280,10 @@ qed corollary analytic_continuation_open: - assumes "open s" "open s'" "s \ {}" "connected s'" "s \ s'" - assumes "f holomorphic_on s'" "g holomorphic_on s'" "\z. z \ s \ f z = g z" + assumes "open s" and "open s'" and "s \ {}" and "connected s'" + and "s \ s'" + assumes "f holomorphic_on s'" and "g holomorphic_on s'" + and "\z. z \ s \ f z = g z" assumes "z \ s'" shows "f z = g z" proof - @@ -293,7 +296,6 @@ thus ?thesis by simp qed - subsection\Open mapping theorem\ lemma holomorphic_contract_to_zero: @@ -353,11 +355,10 @@ with that show ?thesis by blast qed - theorem open_mapping_thm: assumes holf: "f holomorphic_on S" - and S: "open S" "connected S" - and "open U" "U \ S" + and S: "open S" and "connected S" + and "open U" and "U \ S" and fne: "~ f constant_on S" shows "open (f ` U)" proof - @@ -449,8 +450,8 @@ using w \open X\ interior_eq by auto have hol: "(\z. f z - x) holomorphic_on S" by (simp add: holf holomorphic_on_diff) - with fne [unfolded constant_on_def] analytic_continuation [OF hol S \X \ S\ _ wis] - not \X \ S\ w + with fne [unfolded constant_on_def] + analytic_continuation[OF hol S \connected S\ \X \ S\ _ wis] not \X \ S\ w show False by auto qed ultimately show ?thesis @@ -462,9 +463,8 @@ by force qed - text\No need for @{term S} to be connected. But the nonconstant condition is stronger.\ -corollary open_mapping_thm2: +corollary%unimportant open_mapping_thm2: assumes holf: "f holomorphic_on S" and S: "open S" and "open U" "U \ S" @@ -494,7 +494,7 @@ by force qed -corollary open_mapping_thm3: +corollary%unimportant open_mapping_thm3: assumes holf: "f holomorphic_on S" and "open S" and injf: "inj_on f S" shows "open (f ` S)" @@ -503,17 +503,15 @@ apply (simp_all add:) using injective_not_constant subset_inj_on by blast - - -subsection\Maximum Modulus Principle\ +subsection\Maximum modulus principle\ text\If @{term f} is holomorphic, then its norm (modulus) cannot exhibit a true local maximum that is properly within the domain of @{term f}.\ proposition maximum_modulus_principle: assumes holf: "f holomorphic_on S" - and S: "open S" "connected S" - and "open U" "U \ S" "\ \ U" + and S: "open S" and "connected S" + and "open U" and "U \ S" and "\ \ U" and no: "\z. z \ U \ norm(f z) \ norm(f \)" shows "f constant_on S" proof (rule ccontr) @@ -535,7 +533,6 @@ by blast qed - proposition maximum_modulus_frontier: assumes holf: "f holomorphic_on (interior S)" and contf: "continuous_on (closure S) f" @@ -588,7 +585,7 @@ using z \\ \ S\ closure_subset by fastforce qed -corollary maximum_real_frontier: +corollary%unimportant maximum_real_frontier: assumes holf: "f holomorphic_on (interior S)" and contf: "continuous_on (closure S) f" and bos: "bounded S" @@ -599,8 +596,7 @@ Transcendental.continuous_on_exp holomorphic_on_compose holomorphic_on_exp assms by auto - -subsection\Factoring out a zero according to its order\ +subsection%unimportant \Factoring out a zero according to its order\ lemma holomorphic_factor_order_of_zero: assumes holf: "f holomorphic_on S" @@ -900,8 +896,7 @@ by meson+ qed - -proposition pole_at_infinity: +lemma pole_at_infinity: assumes holf: "f holomorphic_on UNIV" and lim: "((inverse o f) \ l) at_infinity" obtains a n where "\z. f z = (\i\n. a i * z^i)" proof (cases "l = 0") @@ -1016,10 +1011,9 @@ qed qed +subsection%unimportant \Entire proper functions are precisely the non-trivial polynomials\ -subsection\Entire proper functions are precisely the non-trivial polynomials\ - -proposition proper_map_polyfun: +lemma proper_map_polyfun: fixes c :: "nat \ 'a::{real_normed_div_algebra,heine_borel}" assumes "closed S" and "compact K" and c: "c i \ 0" "1 \ i" "i \ n" shows "compact (S \ {z. (\i\n. c i * z^i) \ K})" @@ -1048,14 +1042,13 @@ by (auto simp add: vimage_def) qed -corollary proper_map_polyfun_univ: +lemma proper_map_polyfun_univ: fixes c :: "nat \ 'a::{real_normed_div_algebra,heine_borel}" assumes "compact K" "c i \ 0" "1 \ i" "i \ n" shows "compact ({z. (\i\n. c i * z^i) \ K})" -using proper_map_polyfun [of UNIV K c i n] assms by simp + using proper_map_polyfun [of UNIV K c i n] assms by simp - -proposition proper_map_polyfun_eq: +lemma proper_map_polyfun_eq: assumes "f holomorphic_on UNIV" shows "(\k. compact k \ compact {z. f z \ k}) \ (\c n. 0 < n \ (c n \ 0) \ f = (\z. \i\n. c i * z^i))" @@ -1113,10 +1106,9 @@ then show ?lhs by blast qed +subsection \Relating invertibility and nonvanishing of derivative\ -subsection\Relating invertibility and nonvanishing of derivative\ - -proposition has_complex_derivative_locally_injective: +lemma has_complex_derivative_locally_injective: assumes holf: "f holomorphic_on S" and S: "\ \ S" "open S" and dnz: "deriv f \ \ 0" @@ -1155,8 +1147,7 @@ done qed - -proposition has_complex_derivative_locally_invertible: +lemma has_complex_derivative_locally_invertible: assumes holf: "f holomorphic_on S" and S: "\ \ S" "open S" and dnz: "deriv f \ \ 0" @@ -1177,8 +1168,7 @@ using \0 < r\ \ball \ r \ S\ \inj_on f (ball \ r)\ that by blast qed - -proposition holomorphic_injective_imp_regular: +lemma holomorphic_injective_imp_regular: assumes holf: "f holomorphic_on S" and "open S" and injf: "inj_on f S" and "\ \ S" @@ -1268,7 +1258,6 @@ qed qed - text\Hence a nice clean inverse function theorem\ proposition holomorphic_has_inverse: @@ -1311,7 +1300,6 @@ qed qed - subsection\The Schwarz Lemma\ lemma Schwarz1: @@ -1321,7 +1309,7 @@ and boS: "bounded S" and "S \ {}" obtains w where "w \ frontier S" - "\z. z \ closure S \ norm (f z) \ norm (f w)" + "\z. z \ closure S \ norm (f z) \ norm (f w)" proof - have connf: "continuous_on (closure S) (norm o f)" using contf continuous_on_compose continuous_on_norm_id by blast @@ -1376,14 +1364,15 @@ using that by blast qed - proposition Schwarz_Lemma: assumes holf: "f holomorphic_on (ball 0 1)" and [simp]: "f 0 = 0" and no: "\z. norm z < 1 \ norm (f z) < 1" and \: "norm \ < 1" shows "norm (f \) \ norm \" and "norm(deriv f 0) \ 1" - and "((\z. norm z < 1 \ z \ 0 \ norm(f z) = norm z) \ norm(deriv f 0) = 1) - \ \\. (\z. norm z < 1 \ f z = \ * z) \ norm \ = 1" (is "?P \ ?Q") + and "((\z. norm z < 1 \ z \ 0 \ norm(f z) = norm z) + \ norm(deriv f 0) = 1) + \ \\. (\z. norm z < 1 \ f z = \ * z) \ norm \ = 1" + (is "?P \ ?Q") proof - obtain h where holh: "h holomorphic_on (ball 0 1)" and fz_eq: "\z. norm z < 1 \ f z = z * (h z)" and df0: "deriv f 0 = h 0" @@ -1457,9 +1446,11 @@ corollary Schwarz_Lemma': assumes holf: "f holomorphic_on (ball 0 1)" and [simp]: "f 0 = 0" and no: "\z. norm z < 1 \ norm (f z) < 1" - shows "((\\. norm \ < 1 \ norm (f \) \ norm \) \ norm(deriv f 0) \ 1) \ - (((\z. norm z < 1 \ z \ 0 \ norm(f z) = norm z) \ norm(deriv f 0) = 1) - \ (\\. (\z. norm z < 1 \ f z = \ * z) \ norm \ = 1))" + shows "((\\. norm \ < 1 \ norm (f \) \ norm \) + \ norm(deriv f 0) \ 1) + \ (((\z. norm z < 1 \ z \ 0 \ norm(f z) = norm z) + \ norm(deriv f 0) = 1) + \ (\\. (\z. norm z < 1 \ f z = \ * z) \ norm \ = 1))" using Schwarz_Lemma [OF assms] by (metis (no_types) norm_eq_zero zero_less_one) @@ -1667,7 +1658,7 @@ using \d \ 0\ False by (simp_all add: holf1 holf2 contf) qed -proposition holomorphic_on_paste_across_line: +lemma holomorphic_on_paste_across_line: assumes S: "open S" and "d \ 0" and holf1: "f holomorphic_on (S \ {z. d \ z < k})" and holf2: "f holomorphic_on (S \ {z. k < d \ z})" @@ -1954,7 +1945,7 @@ proposition Bloch_unit: assumes holf: "f holomorphic_on ball a 1" and [simp]: "deriv f a = 1" - obtains b r where "1/12 < r" "ball b r \ f ` (ball a 1)" + obtains b r where "1/12 < r" and "ball b r \ f ` (ball a 1)" proof - define r :: real where "r = 249/256" have "0 < r" "r < 1" by (auto simp: r_def) @@ -2042,7 +2033,6 @@ by (rule that) qed - theorem Bloch: assumes holf: "f holomorphic_on ball a r" and "0 < r" and r': "r' \ r * norm (deriv f a) / 12" @@ -2158,12 +2148,12 @@ qed qed -subsection \Foundations of Cauchy's residue theorem\ +subsection \Cauchy's residue theorem\ text\Wenda Li and LC Paulson (2016). A Formal Proof of Cauchy's Residue Theorem. Interactive Theorem Proving\ -definition residue :: "(complex \ complex) \ complex \ complex" where +definition%important residue :: "(complex \ complex) \ complex \ complex" where "residue f z = (SOME int. \e>0. \\>0. \ (f has_contour_integral 2*pi* \ *int) (circlepath z \))" @@ -2356,7 +2346,6 @@ by (auto elim: has_contour_integral_eqpath[of _ _ "circlepath z \" "circlepath z r"]) qed - lemma residue_holo: assumes "open s" "z \ s" and f_holo: "f holomorphic_on s" shows "residue f z = 0" @@ -2375,11 +2364,9 @@ thus ?thesis unfolding c_def by auto qed - lemma residue_const:"residue (\_. c) z = 0" by (intro residue_holo[of "UNIV::complex set"],auto intro:holomorphic_intros) - lemma residue_add: assumes "open s" "z \ s" and f_holo: "f holomorphic_on s - {z}" and g_holo:"g holomorphic_on s - {z}" @@ -2402,7 +2389,6 @@ by (auto simp add:c_def) qed - lemma residue_lmul: assumes "open s" "z \ s" and f_holo: "f holomorphic_on s - {z}" shows "residue (\z. c * (f z)) z= c * residue f z" @@ -2524,8 +2510,6 @@ shows "residue (\z. f z / z ^ Suc n) 0 = (deriv ^^ n) f 0 / fact n" using residue_holomorphic_over_power[OF assms] by simp -subsubsection \Cauchy's residue theorem\ - lemma get_integrable_path: assumes "open s" "connected (s-pts)" "finite pts" "f holomorphic_on (s-pts) " "a\s-pts" "b\s-pts" obtains g where "valid_path g" "pathstart g = a" "pathfinish g = b" @@ -2929,7 +2913,7 @@ by auto qed -lemma Residue_theorem: +theorem Residue_theorem: fixes s pts::"complex set" and f::"complex \ complex" and g::"real \ complex" assumes "open s" "connected s" "finite pts" and @@ -2973,7 +2957,8 @@ subsection \Non-essential singular points\ -definition is_pole :: "('a::topological_space \ 'b::real_normed_vector) \ 'a \ bool" where +definition%important is_pole :: + "('a::topological_space \ 'b::real_normed_vector) \ 'a \ bool" where "is_pole f a = (LIM x (at a). f x :> at_infinity)" lemma is_pole_cong: @@ -3699,13 +3684,17 @@ subsubsection \The order of non-essential singularities (i.e. removable singularities or poles)\ -definition zorder :: "(complex \ complex) \ complex \ int" where + +definition%important zorder :: "(complex \ complex) \ complex \ int" where "zorder f z = (THE n. (\h r. r>0 \ h holomorphic_on cball z r \ h z\0 - \ (\w\cball z r - {z}. f w = h w * (w-z) powr (of_int n) \ h w \0)))" + \ (\w\cball z r - {z}. f w = h w * (w-z) powr (of_int n) + \ h w \0)))" -definition zor_poly::"[complex \ complex,complex]\complex \ complex" where - "zor_poly f z = (SOME h. \r . r>0 \ h holomorphic_on cball z r \ h z\0 - \ (\w\cball z r-{z}. f w = h w * (w-z) powr (zorder f z) \ h w \0))" +definition%important zor_poly + ::"[complex \ complex, complex] \ complex \ complex" where + "zor_poly f z = (SOME h. \r. r > 0 \ h holomorphic_on cball z r \ h z \ 0 + \ (\w\cball z r - {z}. f w = h w * (w - z) powr (zorder f z) + \ h w \0))" lemma zorder_exist: fixes f::"complex \ complex" and z::complex @@ -3803,7 +3792,6 @@ by (auto simp add:dist_commute) qed - lemma fixes f g::"complex \ complex" and z::complex assumes f_iso:"isolated_singularity_at f z" and g_iso:"isolated_singularity_at g z" @@ -4881,8 +4869,8 @@ theorem Rouche_theorem: fixes f g::"complex \ complex" and s:: "complex set" - defines "fg\(\p. f p+ g p)" - defines "zeros_fg\{p. fg p =0}" and "zeros_f\{p. f p=0}" + defines "fg\(\p. f p + g p)" + defines "zeros_fg\{p. fg p = 0}" and "zeros_f\{p. f p = 0}" assumes "open s" and "connected s" and "finite zeros_fg" and