src/HOL/Analysis/Great_Picard.thy
changeset 69680 96a43caa4902
parent 69678 0f4d4a13dc16
child 69681 689997a8a582
equal deleted inserted replaced
69679:a8faf6f15da7 69680:96a43caa4902
     7 
     7 
     8 begin
     8 begin
     9   
     9   
    10 subsection\<open>Schottky's theorem\<close>
    10 subsection\<open>Schottky's theorem\<close>
    11 
    11 
    12 lemma Schottky_lemma0:
    12 lemma%important Schottky_lemma0:
    13   assumes holf: "f holomorphic_on S" and cons: "contractible S" and "a \<in> S"
    13   assumes holf: "f holomorphic_on S" and cons: "contractible S" and "a \<in> S"
    14       and f: "\<And>z. z \<in> S \<Longrightarrow> f z \<noteq> 1 \<and> f z \<noteq> -1"
    14       and f: "\<And>z. z \<in> S \<Longrightarrow> f z \<noteq> 1 \<and> f z \<noteq> -1"
    15   obtains g where "g holomorphic_on S"
    15   obtains g where "g holomorphic_on S"
    16                   "norm(g a) \<le> 1 + norm(f a) / 3"
    16                   "norm(g a) \<le> 1 + norm(f a) / 3"
    17                   "\<And>z. z \<in> S \<Longrightarrow> f z = cos(of_real pi * g z)"
    17                   "\<And>z. z \<in> S \<Longrightarrow> f z = cos(of_real pi * g z)"
    18 proof -
    18 proof%unimportant -
    19   obtain g where holg: "g holomorphic_on S" and g: "norm(g a) \<le> pi + norm(f a)"
    19   obtain g where holg: "g holomorphic_on S" and g: "norm(g a) \<le> pi + norm(f a)"
    20              and f_eq_cos: "\<And>z. z \<in> S \<Longrightarrow> f z = cos(g z)"
    20              and f_eq_cos: "\<And>z. z \<in> S \<Longrightarrow> f z = cos(g z)"
    21     using contractible_imp_holomorphic_arccos_bounded [OF assms]
    21     using contractible_imp_holomorphic_arccos_bounded [OF assms]
    22     by blast
    22     by blast
    23   show ?thesis
    23   show ?thesis
    36       by (simp add: f_eq_cos)
    36       by (simp add: f_eq_cos)
    37   qed
    37   qed
    38 qed
    38 qed
    39 
    39 
    40 
    40 
    41 lemma Schottky_lemma1:
    41 lemma%unimportant Schottky_lemma1:
    42   fixes n::nat
    42   fixes n::nat
    43   assumes "0 < n"
    43   assumes "0 < n"
    44   shows "0 < n + sqrt(real n ^ 2 - 1)"
    44   shows "0 < n + sqrt(real n ^ 2 - 1)"
    45 proof -
    45 proof -
    46   have "(n-1)^2 \<le> n^2 - 1"
    46   have "(n-1)^2 \<le> n^2 - 1"
    52   then show ?thesis
    52   then show ?thesis
    53     using assms by linarith
    53     using assms by linarith
    54 qed
    54 qed
    55 
    55 
    56 
    56 
    57 lemma Schottky_lemma2:
    57 lemma%unimportant Schottky_lemma2:
    58   fixes x::real
    58   fixes x::real
    59   assumes "0 \<le> x"
    59   assumes "0 \<le> x"
    60   obtains n where "0 < n" "\<bar>x - ln (real n + sqrt ((real n)\<^sup>2 - 1)) / pi\<bar> < 1/2"
    60   obtains n where "0 < n" "\<bar>x - ln (real n + sqrt ((real n)\<^sup>2 - 1)) / pi\<bar> < 1/2"
    61 proof -
    61 proof -
    62   obtain n0::nat where "0 < n0" "ln(n0 + sqrt(real n0 ^ 2 - 1)) / pi \<le> x"
    62   obtain n0::nat where "0 < n0" "ln(n0 + sqrt(real n0 ^ 2 - 1)) / pi \<le> x"
   156       by (rule_tac n="Suc n" in that) (auto simp: b_def \<open>0 < n\<close>)
   156       by (rule_tac n="Suc n" in that) (auto simp: b_def \<open>0 < n\<close>)
   157   qed
   157   qed
   158 qed
   158 qed
   159 
   159 
   160 
   160 
   161 lemma Schottky_lemma3:
   161 lemma%important Schottky_lemma3:
   162   fixes z::complex
   162   fixes z::complex
   163   assumes "z \<in> (\<Union>m \<in> Ints. \<Union>n \<in> {0<..}. {Complex m (ln(n + sqrt(real n ^ 2 - 1)) / pi)})
   163   assumes "z \<in> (\<Union>m \<in> Ints. \<Union>n \<in> {0<..}. {Complex m (ln(n + sqrt(real n ^ 2 - 1)) / pi)})
   164              \<union> (\<Union>m \<in> Ints. \<Union>n \<in> {0<..}. {Complex m (-ln(n + sqrt(real n ^ 2 - 1)) / pi)})"
   164              \<union> (\<Union>m \<in> Ints. \<Union>n \<in> {0<..}. {Complex m (-ln(n + sqrt(real n ^ 2 - 1)) / pi)})"
   165   shows "cos(pi * cos(pi * z)) = 1 \<or> cos(pi * cos(pi * z)) = -1"
   165   shows "cos(pi * cos(pi * z)) = 1 \<or> cos(pi * cos(pi * z)) = -1"
   166 proof -
   166 proof%unimportant -
   167   have sqrt2 [simp]: "complex_of_real (sqrt x) * complex_of_real (sqrt x) = x" if "x \<ge> 0" for x::real
   167   have sqrt2 [simp]: "complex_of_real (sqrt x) * complex_of_real (sqrt x) = x" if "x \<ge> 0" for x::real
   168     by (metis abs_of_nonneg of_real_mult real_sqrt_mult_self that)
   168     by (metis abs_of_nonneg of_real_mult real_sqrt_mult_self that)
   169   have 1: "\<exists>k. exp (\<i> * (of_int m * complex_of_real pi) -
   169   have 1: "\<exists>k. exp (\<i> * (of_int m * complex_of_real pi) -
   170                  (ln (real n + sqrt ((real n)\<^sup>2 - 1)))) +
   170                  (ln (real n + sqrt ((real n)\<^sup>2 - 1)))) +
   171             inverse
   171             inverse
   221   then show ?thesis
   221   then show ?thesis
   222     using power2_eq_1_iff by auto
   222     using power2_eq_1_iff by auto
   223 qed
   223 qed
   224 
   224 
   225 
   225 
   226 theorem Schottky:
   226 theorem%important Schottky:
   227   assumes holf: "f holomorphic_on cball 0 1"
   227   assumes holf: "f holomorphic_on cball 0 1"
   228       and nof0: "norm(f 0) \<le> r"
   228       and nof0: "norm(f 0) \<le> r"
   229       and not01: "\<And>z. z \<in> cball 0 1 \<Longrightarrow> \<not>(f z = 0 \<or> f z = 1)"
   229       and not01: "\<And>z. z \<in> cball 0 1 \<Longrightarrow> \<not>(f z = 0 \<or> f z = 1)"
   230       and "0 < t" "t < 1" "norm z \<le> t"
   230       and "0 < t" "t < 1" "norm z \<le> t"
   231     shows "norm(f z) \<le> exp(pi * exp(pi * (2 + 2 * r + 12 * t / (1 - t))))"
   231     shows "norm(f z) \<le> exp(pi * exp(pi * (2 + 2 * r + 12 * t / (1 - t))))"
   232 proof -
   232 proof%unimportant -
   233   obtain h where holf: "h holomorphic_on cball 0 1"
   233   obtain h where holf: "h holomorphic_on cball 0 1"
   234              and nh0: "norm (h 0) \<le> 1 + norm(2 * f 0 - 1) / 3"
   234              and nh0: "norm (h 0) \<le> 1 + norm(2 * f 0 - 1) / 3"
   235              and h:   "\<And>z. z \<in> cball 0 1 \<Longrightarrow> 2 * f z - 1 = cos(of_real pi * h z)"
   235              and h:   "\<And>z. z \<in> cball 0 1 \<Longrightarrow> 2 * f z - 1 = cos(of_real pi * h z)"
   236   proof (rule Schottky_lemma0 [of "\<lambda>z. 2 * f z - 1" "cball 0 1" 0])
   236   proof (rule Schottky_lemma0 [of "\<lambda>z. 2 * f z - 1" "cball 0 1" 0])
   237     show "(\<lambda>z. 2 * f z - 1) holomorphic_on cball 0 1"
   237     show "(\<lambda>z. 2 * f z - 1) holomorphic_on cball 0 1"
   374 qed
   374 qed
   375 
   375 
   376   
   376   
   377 subsection%important\<open>The Little Picard Theorem\<close>
   377 subsection%important\<open>The Little Picard Theorem\<close>
   378 
   378 
   379 proposition Landau_Picard:
   379 lemma%important Landau_Picard:
   380   obtains R
   380   obtains R
   381     where "\<And>z. 0 < R z"
   381     where "\<And>z. 0 < R z"
   382           "\<And>f. \<lbrakk>f holomorphic_on cball 0 (R(f 0));
   382           "\<And>f. \<lbrakk>f holomorphic_on cball 0 (R(f 0));
   383                  \<And>z. norm z \<le> R(f 0) \<Longrightarrow> f z \<noteq> 0 \<and> f z \<noteq> 1\<rbrakk> \<Longrightarrow> norm(deriv f 0) < 1"
   383                  \<And>z. norm z \<le> R(f 0) \<Longrightarrow> f z \<noteq> 0 \<and> f z \<noteq> 1\<rbrakk> \<Longrightarrow> norm(deriv f 0) < 1"
   384 proof -
   384 proof%unimportant -
   385   define R where "R \<equiv> \<lambda>z. 3 * exp(pi * exp(pi*(2 + 2 * cmod z + 12)))"
   385   define R where "R \<equiv> \<lambda>z. 3 * exp(pi * exp(pi*(2 + 2 * cmod z + 12)))"
   386   show ?thesis
   386   show ?thesis
   387   proof
   387   proof
   388     show Rpos: "\<And>z. 0 < R z"
   388     show Rpos: "\<And>z. 0 < R z"
   389       by (auto simp: R_def)
   389       by (auto simp: R_def)
   434         using cmod_g'_le Rpos [of "f 0"]  by (simp add: g_eq norm_mult)
   434         using cmod_g'_le Rpos [of "f 0"]  by (simp add: g_eq norm_mult)
   435     qed
   435     qed
   436   qed
   436   qed
   437 qed
   437 qed
   438 
   438 
   439 lemma little_Picard_01:
   439 lemma%important little_Picard_01:
   440   assumes holf: "f holomorphic_on UNIV" and f01: "\<And>z. f z \<noteq> 0 \<and> f z \<noteq> 1"
   440   assumes holf: "f holomorphic_on UNIV" and f01: "\<And>z. f z \<noteq> 0 \<and> f z \<noteq> 1"
   441   obtains c where "f = (\<lambda>x. c)"
   441   obtains c where "f = (\<lambda>x. c)"
   442 proof -
   442 proof%unimportant -
   443   obtain R
   443   obtain R
   444     where Rpos: "\<And>z. 0 < R z"
   444     where Rpos: "\<And>z. 0 < R z"
   445       and R:    "\<And>h. \<lbrakk>h holomorphic_on cball 0 (R(h 0));
   445       and R:    "\<And>h. \<lbrakk>h holomorphic_on cball 0 (R(h 0));
   446                       \<And>z. norm z \<le> R(h 0) \<Longrightarrow> h z \<noteq> 0 \<and> h z \<noteq> 1\<rbrakk> \<Longrightarrow> norm(deriv h 0) < 1"
   446                       \<And>z. norm z \<le> R(h 0) \<Longrightarrow> h z \<noteq> 0 \<and> h z \<noteq> 1\<rbrakk> \<Longrightarrow> norm(deriv h 0) < 1"
   447     using Landau_Picard by metis
   447     using Landau_Picard by metis
   479       using norm_let1 w by (simp add: DERIV_imp_deriv)
   479       using norm_let1 w by (simp add: DERIV_imp_deriv)
   480   qed
   480   qed
   481 qed
   481 qed
   482 
   482 
   483 
   483 
   484 theorem little_Picard:
   484 theorem%important little_Picard:
   485   assumes holf: "f holomorphic_on UNIV"
   485   assumes holf: "f holomorphic_on UNIV"
   486       and "a \<noteq> b" "range f \<inter> {a,b} = {}"
   486       and "a \<noteq> b" "range f \<inter> {a,b} = {}"
   487     obtains c where "f = (\<lambda>x. c)"
   487     obtains c where "f = (\<lambda>x. c)"
   488 proof -
   488 proof%unimportant -
   489   let ?g = "\<lambda>x. 1/(b - a)*(f x - b) + 1"
   489   let ?g = "\<lambda>x. 1/(b - a)*(f x - b) + 1"
   490   obtain c where "?g = (\<lambda>x. c)"
   490   obtain c where "?g = (\<lambda>x. c)"
   491   proof (rule little_Picard_01)
   491   proof (rule little_Picard_01)
   492     show "?g holomorphic_on UNIV"
   492     show "?g holomorphic_on UNIV"
   493       by (intro holomorphic_intros holf)
   493       by (intro holomorphic_intros holf)
   503 qed
   503 qed
   504 
   504 
   505 
   505 
   506 text\<open>A couple of little applications of Little Picard\<close>
   506 text\<open>A couple of little applications of Little Picard\<close>
   507 
   507 
   508 lemma holomorphic_periodic_fixpoint:
   508 lemma%unimportant holomorphic_periodic_fixpoint:
   509   assumes holf: "f holomorphic_on UNIV"
   509   assumes holf: "f holomorphic_on UNIV"
   510       and "p \<noteq> 0" and per: "\<And>z. f(z + p) = f z"
   510       and "p \<noteq> 0" and per: "\<And>z. f(z + p) = f z"
   511   obtains x where "f x = x"
   511   obtains x where "f x = x"
   512 proof -
   512 proof -
   513   have False if non: "\<And>x. f x \<noteq> x"
   513   have False if non: "\<And>x. f x \<noteq> x"
   525   then show ?thesis
   525   then show ?thesis
   526     using that by blast
   526     using that by blast
   527 qed
   527 qed
   528 
   528 
   529 
   529 
   530 lemma holomorphic_involution_point:
   530 lemma%unimportant holomorphic_involution_point:
   531   assumes holfU: "f holomorphic_on UNIV" and non: "\<And>a. f \<noteq> (\<lambda>x. a + x)"
   531   assumes holfU: "f holomorphic_on UNIV" and non: "\<And>a. f \<noteq> (\<lambda>x. a + x)"
   532   obtains x where "f(f x) = x"
   532   obtains x where "f(f x) = x"
   533 proof -
   533 proof -
   534   { assume non_ff [simp]: "\<And>x. f(f x) \<noteq> x"
   534   { assume non_ff [simp]: "\<And>x. f(f x) \<noteq> x"
   535     then have non_fp [simp]: "f z \<noteq> z" for z
   535     then have non_fp [simp]: "f z \<noteq> z" for z
   614 qed
   614 qed
   615 
   615 
   616 
   616 
   617 subsection%important\<open>The ArzelĂ --Ascoli theorem\<close>
   617 subsection%important\<open>The ArzelĂ --Ascoli theorem\<close>
   618 
   618 
   619 lemma subsequence_diagonalization_lemma:
   619 lemma%unimportant subsequence_diagonalization_lemma:
   620   fixes P :: "nat \<Rightarrow> (nat \<Rightarrow> 'a) \<Rightarrow> bool"
   620   fixes P :: "nat \<Rightarrow> (nat \<Rightarrow> 'a) \<Rightarrow> bool"
   621   assumes sub: "\<And>i r. \<exists>k. strict_mono (k :: nat \<Rightarrow> nat) \<and> P i (r \<circ> k)"
   621   assumes sub: "\<And>i r. \<exists>k. strict_mono (k :: nat \<Rightarrow> nat) \<and> P i (r \<circ> k)"
   622       and P_P:  "\<And>i r::nat \<Rightarrow> 'a. \<And>k1 k2 N.
   622       and P_P:  "\<And>i r::nat \<Rightarrow> 'a. \<And>k1 k2 N.
   623                    \<lbrakk>P i (r \<circ> k1); \<And>j. N \<le> j \<Longrightarrow> \<exists>j'. j \<le> j' \<and> k2 j = k1 j'\<rbrakk> \<Longrightarrow> P i (r \<circ> k2)"
   623                    \<lbrakk>P i (r \<circ> k1); \<And>j. N \<le> j \<Longrightarrow> \<exists>j'. j \<le> j' \<and> k2 j = k1 j'\<rbrakk> \<Longrightarrow> P i (r \<circ> k2)"
   624    obtains k where "strict_mono (k :: nat \<Rightarrow> nat)" "\<And>i. P i (r \<circ> k)"
   624    obtains k where "strict_mono (k :: nat \<Rightarrow> nat)" "\<And>i. P i (r \<circ> k)"
   658     then show "P i (r \<circ> (\<lambda>n. rr n n))" for i
   658     then show "P i (r \<circ> (\<lambda>n. rr n n))" for i
   659       by (meson P_rr P_P)
   659       by (meson P_rr P_P)
   660   qed
   660   qed
   661 qed
   661 qed
   662 
   662 
   663 lemma function_convergent_subsequence:
   663 lemma%unimportant function_convergent_subsequence:
   664   fixes f :: "[nat,'a] \<Rightarrow> 'b::{real_normed_vector,heine_borel}"
   664   fixes f :: "[nat,'a] \<Rightarrow> 'b::{real_normed_vector,heine_borel}"
   665   assumes "countable S" and M: "\<And>n::nat. \<And>x. x \<in> S \<Longrightarrow> norm(f n x) \<le> M"
   665   assumes "countable S" and M: "\<And>n::nat. \<And>x. x \<in> S \<Longrightarrow> norm(f n x) \<le> M"
   666    obtains k where "strict_mono (k::nat\<Rightarrow>nat)" "\<And>x. x \<in> S \<Longrightarrow> \<exists>l. (\<lambda>n. f (k n) x) \<longlonglongrightarrow> l"
   666    obtains k where "strict_mono (k::nat\<Rightarrow>nat)" "\<And>x. x \<in> S \<Longrightarrow> \<exists>l. (\<lambda>n. f (k n) x) \<longlonglongrightarrow> l"
   667 proof (cases "S = {}")
   667 proof (cases "S = {}")
   668   case True
   668   case True
   696   with \<sigma> that show ?thesis
   696   with \<sigma> that show ?thesis
   697     by force
   697     by force
   698 qed
   698 qed
   699 
   699 
   700 
   700 
   701 theorem Arzela_Ascoli:
   701 theorem%important Arzela_Ascoli:
   702   fixes \<F> :: "[nat,'a::euclidean_space] \<Rightarrow> 'b::{real_normed_vector,heine_borel}"
   702   fixes \<F> :: "[nat,'a::euclidean_space] \<Rightarrow> 'b::{real_normed_vector,heine_borel}"
   703   assumes "compact S"
   703   assumes "compact S"
   704       and M: "\<And>n x. x \<in> S \<Longrightarrow> norm(\<F> n x) \<le> M"
   704       and M: "\<And>n x. x \<in> S \<Longrightarrow> norm(\<F> n x) \<le> M"
   705       and equicont:
   705       and equicont:
   706           "\<And>x e. \<lbrakk>x \<in> S; 0 < e\<rbrakk>
   706           "\<And>x e. \<lbrakk>x \<in> S; 0 < e\<rbrakk>
   707                  \<Longrightarrow> \<exists>d. 0 < d \<and> (\<forall>n y. y \<in> S \<and> norm(x - y) < d \<longrightarrow> norm(\<F> n x - \<F> n y) < e)"
   707                  \<Longrightarrow> \<exists>d. 0 < d \<and> (\<forall>n y. y \<in> S \<and> norm(x - y) < d \<longrightarrow> norm(\<F> n x - \<F> n y) < e)"
   708   obtains g k where "continuous_on S g" "strict_mono (k :: nat \<Rightarrow> nat)"
   708   obtains g k where "continuous_on S g" "strict_mono (k :: nat \<Rightarrow> nat)"
   709                     "\<And>e. 0 < e \<Longrightarrow> \<exists>N. \<forall>n x. n \<ge> N \<and> x \<in> S \<longrightarrow> norm(\<F>(k n) x - g x) < e"
   709                     "\<And>e. 0 < e \<Longrightarrow> \<exists>N. \<forall>n x. n \<ge> N \<and> x \<in> S \<longrightarrow> norm(\<F>(k n) x - g x) < e"
   710 proof -
   710 proof%unimportant -
   711   have UEQ: "\<And>e. 0 < e \<Longrightarrow> \<exists>d. 0 < d \<and> (\<forall>n. \<forall>x \<in> S. \<forall>x' \<in> S. dist x' x < d \<longrightarrow> dist (\<F> n x') (\<F> n x) < e)"
   711   have UEQ: "\<And>e. 0 < e \<Longrightarrow> \<exists>d. 0 < d \<and> (\<forall>n. \<forall>x \<in> S. \<forall>x' \<in> S. dist x' x < d \<longrightarrow> dist (\<F> n x') (\<F> n x) < e)"
   712     apply (rule compact_uniformly_equicontinuous [OF \<open>compact S\<close>, of "range \<F>"])
   712     apply (rule compact_uniformly_equicontinuous [OF \<open>compact S\<close>, of "range \<F>"])
   713     using equicont by (force simp: dist_commute dist_norm)+
   713     using equicont by (force simp: dist_commute dist_norm)+
   714   have "continuous_on S g"
   714   have "continuous_on S g"
   715        if "\<And>e. 0 < e \<Longrightarrow> \<exists>N. \<forall>n x. n \<ge> N \<and> x \<in> S \<longrightarrow> norm(\<F>(r n) x - g x) < e"
   715        if "\<And>e. 0 < e \<Longrightarrow> \<exists>N. \<forall>n x. n \<ge> N \<and> x \<in> S \<longrightarrow> norm(\<F>(r n) x - g x) < e"
   793 text\<open>a sequence of holomorphic functions uniformly bounded
   793 text\<open>a sequence of holomorphic functions uniformly bounded
   794 on compact subsets of an open set S has a subsequence that converges to a
   794 on compact subsets of an open set S has a subsequence that converges to a
   795 holomorphic function, and converges \emph{uniformly} on compact subsets of S.\<close>
   795 holomorphic function, and converges \emph{uniformly} on compact subsets of S.\<close>
   796 
   796 
   797 
   797 
   798 theorem Montel:
   798 theorem%important Montel:
   799   fixes \<F> :: "[nat,complex] \<Rightarrow> complex"
   799   fixes \<F> :: "[nat,complex] \<Rightarrow> complex"
   800   assumes "open S"
   800   assumes "open S"
   801       and \<H>: "\<And>h. h \<in> \<H> \<Longrightarrow> h holomorphic_on S"
   801       and \<H>: "\<And>h. h \<in> \<H> \<Longrightarrow> h holomorphic_on S"
   802       and bounded: "\<And>K. \<lbrakk>compact K; K \<subseteq> S\<rbrakk> \<Longrightarrow> \<exists>B. \<forall>h \<in> \<H>. \<forall> z \<in> K. norm(h z) \<le> B"
   802       and bounded: "\<And>K. \<lbrakk>compact K; K \<subseteq> S\<rbrakk> \<Longrightarrow> \<exists>B. \<forall>h \<in> \<H>. \<forall> z \<in> K. norm(h z) \<le> B"
   803       and rng_f: "range \<F> \<subseteq> \<H>"
   803       and rng_f: "range \<F> \<subseteq> \<H>"
   804   obtains g r
   804   obtains g r
   805     where "g holomorphic_on S" "strict_mono (r :: nat \<Rightarrow> nat)"
   805     where "g holomorphic_on S" "strict_mono (r :: nat \<Rightarrow> nat)"
   806           "\<And>x. x \<in> S \<Longrightarrow> ((\<lambda>n. \<F> (r n) x) \<longlongrightarrow> g x) sequentially"
   806           "\<And>x. x \<in> S \<Longrightarrow> ((\<lambda>n. \<F> (r n) x) \<longlongrightarrow> g x) sequentially"
   807           "\<And>K. \<lbrakk>compact K; K \<subseteq> S\<rbrakk> \<Longrightarrow> uniform_limit K (\<F> \<circ> r) g sequentially"        
   807           "\<And>K. \<lbrakk>compact K; K \<subseteq> S\<rbrakk> \<Longrightarrow> uniform_limit K (\<F> \<circ> r) g sequentially"        
   808 proof -
   808 proof%unimportant -
   809   obtain K where comK: "\<And>n. compact(K n)" and KS: "\<And>n::nat. K n \<subseteq> S"
   809   obtain K where comK: "\<And>n. compact(K n)" and KS: "\<And>n::nat. K n \<subseteq> S"
   810              and subK: "\<And>X. \<lbrakk>compact X; X \<subseteq> S\<rbrakk> \<Longrightarrow> \<exists>N. \<forall>n\<ge>N. X \<subseteq> K n"
   810              and subK: "\<And>X. \<lbrakk>compact X; X \<subseteq> S\<rbrakk> \<Longrightarrow> \<exists>N. \<forall>n\<ge>N. X \<subseteq> K n"
   811     using open_Union_compact_subsets [OF \<open>open S\<close>] by metis
   811     using open_Union_compact_subsets [OF \<open>open S\<close>] by metis
   812   then have "\<And>i. \<exists>B. \<forall>h \<in> \<H>. \<forall> z \<in> K i. norm(h z) \<le> B"
   812   then have "\<And>i. \<exists>B. \<forall>h \<in> \<H>. \<forall> z \<in> K i. norm(h z) \<le> B"
   813     by (simp add: bounded)
   813     by (simp add: bounded)
   993 
   993 
   994 
   994 
   995 
   995 
   996 subsection%important\<open>Some simple but useful cases of Hurwitz's theorem\<close>
   996 subsection%important\<open>Some simple but useful cases of Hurwitz's theorem\<close>
   997 
   997 
   998 proposition Hurwitz_no_zeros:
   998 proposition%important Hurwitz_no_zeros:
   999   assumes S: "open S" "connected S"
   999   assumes S: "open S" "connected S"
  1000       and holf: "\<And>n::nat. \<F> n holomorphic_on S"
  1000       and holf: "\<And>n::nat. \<F> n holomorphic_on S"
  1001       and holg: "g holomorphic_on S"
  1001       and holg: "g holomorphic_on S"
  1002       and ul_g: "\<And>K. \<lbrakk>compact K; K \<subseteq> S\<rbrakk> \<Longrightarrow> uniform_limit K \<F> g sequentially"
  1002       and ul_g: "\<And>K. \<lbrakk>compact K; K \<subseteq> S\<rbrakk> \<Longrightarrow> uniform_limit K \<F> g sequentially"
  1003       and nonconst: "\<not> g constant_on S"
  1003       and nonconst: "\<not> g constant_on S"
  1004       and nz: "\<And>n z. z \<in> S \<Longrightarrow> \<F> n z \<noteq> 0"
  1004       and nz: "\<And>n z. z \<in> S \<Longrightarrow> \<F> n z \<noteq> 0"
  1005       and "z0 \<in> S"
  1005       and "z0 \<in> S"
  1006       shows "g z0 \<noteq> 0"
  1006       shows "g z0 \<noteq> 0"
  1007 proof
  1007 proof%unimportant
  1008   assume g0: "g z0 = 0"
  1008   assume g0: "g z0 = 0"
  1009   obtain h r m
  1009   obtain h r m
  1010     where "0 < m" "0 < r" and subS: "ball z0 r \<subseteq> S"
  1010     where "0 < m" "0 < r" and subS: "ball z0 r \<subseteq> S"
  1011       and holh: "h holomorphic_on ball z0 r"
  1011       and holh: "h holomorphic_on ball z0 r"
  1012       and geq:  "\<And>w. w \<in> ball z0 r \<Longrightarrow> g w = (w - z0)^m * h w"
  1012       and geq:  "\<And>w. w \<in> ball z0 r \<Longrightarrow> g w = (w - z0)^m * h w"
  1157       done
  1157       done
  1158   qed
  1158   qed
  1159   ultimately show False using \<open>0 < m\<close> by auto
  1159   ultimately show False using \<open>0 < m\<close> by auto
  1160 qed
  1160 qed
  1161 
  1161 
  1162 corollary Hurwitz_injective:
  1162 corollary%important Hurwitz_injective:
  1163   assumes S: "open S" "connected S"
  1163   assumes S: "open S" "connected S"
  1164       and holf: "\<And>n::nat. \<F> n holomorphic_on S"
  1164       and holf: "\<And>n::nat. \<F> n holomorphic_on S"
  1165       and holg: "g holomorphic_on S"
  1165       and holg: "g holomorphic_on S"
  1166       and ul_g: "\<And>K. \<lbrakk>compact K; K \<subseteq> S\<rbrakk> \<Longrightarrow> uniform_limit K \<F> g sequentially"
  1166       and ul_g: "\<And>K. \<lbrakk>compact K; K \<subseteq> S\<rbrakk> \<Longrightarrow> uniform_limit K \<F> g sequentially"
  1167       and nonconst: "\<not> g constant_on S"
  1167       and nonconst: "\<not> g constant_on S"
  1168       and inj: "\<And>n. inj_on (\<F> n) S"
  1168       and inj: "\<And>n. inj_on (\<F> n) S"
  1169     shows "inj_on g S"
  1169     shows "inj_on g S"
  1170 proof -
  1170 proof%unimportant -
  1171   have False if z12: "z1 \<in> S" "z2 \<in> S" "z1 \<noteq> z2" "g z2 = g z1" for z1 z2
  1171   have False if z12: "z1 \<in> S" "z2 \<in> S" "z1 \<noteq> z2" "g z2 = g z1" for z1 z2
  1172   proof -
  1172   proof -
  1173     obtain z0 where "z0 \<in> S" and z0: "g z0 \<noteq> g z2"
  1173     obtain z0 where "z0 \<in> S" and z0: "g z0 \<noteq> g z2"
  1174       using constant_on_def nonconst by blast
  1174       using constant_on_def nonconst by blast
  1175     have "(\<lambda>z. g z - g z1) holomorphic_on S"
  1175     have "(\<lambda>z. g z - g z1) holomorphic_on S"
  1229 
  1229 
  1230 
  1230 
  1231 
  1231 
  1232 subsection%important\<open>The Great Picard theorem\<close>
  1232 subsection%important\<open>The Great Picard theorem\<close>
  1233 
  1233 
  1234 lemma GPicard1:
  1234 lemma%important GPicard1:
  1235   assumes S: "open S" "connected S" and "w \<in> S" "0 < r" "Y \<subseteq> X"
  1235   assumes S: "open S" "connected S" and "w \<in> S" "0 < r" "Y \<subseteq> X"
  1236       and holX: "\<And>h. h \<in> X \<Longrightarrow> h holomorphic_on S"
  1236       and holX: "\<And>h. h \<in> X \<Longrightarrow> h holomorphic_on S"
  1237       and X01:  "\<And>h z. \<lbrakk>h \<in> X; z \<in> S\<rbrakk> \<Longrightarrow> h z \<noteq> 0 \<and> h z \<noteq> 1"
  1237       and X01:  "\<And>h z. \<lbrakk>h \<in> X; z \<in> S\<rbrakk> \<Longrightarrow> h z \<noteq> 0 \<and> h z \<noteq> 1"
  1238       and r:    "\<And>h. h \<in> Y \<Longrightarrow> norm(h w) \<le> r"
  1238       and r:    "\<And>h. h \<in> Y \<Longrightarrow> norm(h w) \<le> r"
  1239   obtains B Z where "0 < B" "open Z" "w \<in> Z" "Z \<subseteq> S" "\<And>h z. \<lbrakk>h \<in> Y; z \<in> Z\<rbrakk> \<Longrightarrow> norm(h z) \<le> B"
  1239   obtains B Z where "0 < B" "open Z" "w \<in> Z" "Z \<subseteq> S" "\<And>h z. \<lbrakk>h \<in> Y; z \<in> Z\<rbrakk> \<Longrightarrow> norm(h z) \<le> B"
  1240 proof -
  1240 proof%unimportant -
  1241   obtain e where "e > 0" and e: "cball w e \<subseteq> S"
  1241   obtain e where "e > 0" and e: "cball w e \<subseteq> S"
  1242     using assms open_contains_cball_eq by blast
  1242     using assms open_contains_cball_eq by blast
  1243   show ?thesis
  1243   show ?thesis
  1244   proof
  1244   proof
  1245     show "0 < exp(pi * exp(pi * (2 + 2 * r + 12)))"
  1245     show "0 < exp(pi * exp(pi * (2 + 2 * r + 12)))"
  1275       show ?thesis by simp
  1275       show ?thesis by simp
  1276     qed
  1276     qed
  1277   qed (use \<open>e > 0\<close> in auto)
  1277   qed (use \<open>e > 0\<close> in auto)
  1278 qed 
  1278 qed 
  1279 
  1279 
  1280 lemma GPicard2:
  1280 lemma%important GPicard2:
  1281   assumes "S \<subseteq> T" "connected T" "S \<noteq> {}" "open S" "\<And>x. \<lbrakk>x islimpt S; x \<in> T\<rbrakk> \<Longrightarrow> x \<in> S"
  1281   assumes "S \<subseteq> T" "connected T" "S \<noteq> {}" "open S" "\<And>x. \<lbrakk>x islimpt S; x \<in> T\<rbrakk> \<Longrightarrow> x \<in> S"
  1282     shows "S = T"
  1282     shows "S = T"
  1283   by (metis assms open_subset connected_clopen closedin_limpt)
  1283   by%unimportant (metis assms open_subset connected_clopen closedin_limpt)
  1284 
  1284 
  1285     
  1285     
  1286 lemma GPicard3:
  1286 lemma%important GPicard3:
  1287   assumes S: "open S" "connected S" "w \<in> S" and "Y \<subseteq> X"
  1287   assumes S: "open S" "connected S" "w \<in> S" and "Y \<subseteq> X"
  1288       and holX: "\<And>h. h \<in> X \<Longrightarrow> h holomorphic_on S"
  1288       and holX: "\<And>h. h \<in> X \<Longrightarrow> h holomorphic_on S"
  1289       and X01:  "\<And>h z. \<lbrakk>h \<in> X; z \<in> S\<rbrakk> \<Longrightarrow> h z \<noteq> 0 \<and> h z \<noteq> 1"
  1289       and X01:  "\<And>h z. \<lbrakk>h \<in> X; z \<in> S\<rbrakk> \<Longrightarrow> h z \<noteq> 0 \<and> h z \<noteq> 1"
  1290       and no_hw_le1: "\<And>h. h \<in> Y \<Longrightarrow> norm(h w) \<le> 1"
  1290       and no_hw_le1: "\<And>h. h \<in> Y \<Longrightarrow> norm(h w) \<le> 1"
  1291       and "compact K" "K \<subseteq> S"
  1291       and "compact K" "K \<subseteq> S"
  1292   obtains B where "\<And>h z. \<lbrakk>h \<in> Y; z \<in> K\<rbrakk> \<Longrightarrow> norm(h z) \<le> B"
  1292   obtains B where "\<And>h z. \<lbrakk>h \<in> Y; z \<in> K\<rbrakk> \<Longrightarrow> norm(h z) \<le> B"
  1293 proof -
  1293 proof%unimportant -
  1294   define U where "U \<equiv> {z \<in> S. \<exists>B Z. 0 < B \<and> open Z \<and> z \<in> Z \<and> Z \<subseteq> S \<and>
  1294   define U where "U \<equiv> {z \<in> S. \<exists>B Z. 0 < B \<and> open Z \<and> z \<in> Z \<and> Z \<subseteq> S \<and>
  1295                                (\<forall>h z'. h \<in> Y \<and> z' \<in> Z \<longrightarrow> norm(h z') \<le> B)}"
  1295                                (\<forall>h z'. h \<in> Y \<and> z' \<in> Z \<longrightarrow> norm(h z') \<le> B)}"
  1296   then have "U \<subseteq> S" by blast
  1296   then have "U \<subseteq> S" by blast
  1297   have "U = S"
  1297   have "U = S"
  1298   proof (rule GPicard2 [OF \<open>U \<subseteq> S\<close> \<open>connected S\<close>])
  1298   proof (rule GPicard2 [OF \<open>U \<subseteq> S\<close> \<open>connected S\<close>])
  1430   qed
  1430   qed
  1431   with that show ?thesis by metis
  1431   with that show ?thesis by metis
  1432 qed
  1432 qed
  1433 
  1433 
  1434 
  1434 
  1435 lemma GPicard4:
  1435 lemma%important GPicard4:
  1436   assumes "0 < k" and holf: "f holomorphic_on (ball 0 k - {0})" 
  1436   assumes "0 < k" and holf: "f holomorphic_on (ball 0 k - {0})" 
  1437       and AE: "\<And>e. \<lbrakk>0 < e; e < k\<rbrakk> \<Longrightarrow> \<exists>d. 0 < d \<and> d < e \<and> (\<forall>z \<in> sphere 0 d. norm(f z) \<le> B)"
  1437       and AE: "\<And>e. \<lbrakk>0 < e; e < k\<rbrakk> \<Longrightarrow> \<exists>d. 0 < d \<and> d < e \<and> (\<forall>z \<in> sphere 0 d. norm(f z) \<le> B)"
  1438   obtains \<epsilon> where "0 < \<epsilon>" "\<epsilon> < k" "\<And>z. z \<in> ball 0 \<epsilon> - {0} \<Longrightarrow> norm(f z) \<le> B"
  1438   obtains \<epsilon> where "0 < \<epsilon>" "\<epsilon> < k" "\<And>z. z \<in> ball 0 \<epsilon> - {0} \<Longrightarrow> norm(f z) \<le> B"
  1439 proof -
  1439 proof%unimportant -
  1440   obtain \<epsilon> where "0 < \<epsilon>" "\<epsilon> < k/2" and \<epsilon>: "\<And>z. norm z = \<epsilon> \<Longrightarrow> norm(f z) \<le> B"
  1440   obtain \<epsilon> where "0 < \<epsilon>" "\<epsilon> < k/2" and \<epsilon>: "\<And>z. norm z = \<epsilon> \<Longrightarrow> norm(f z) \<le> B"
  1441     using AE [of "k/2"] \<open>0 < k\<close> by auto
  1441     using AE [of "k/2"] \<open>0 < k\<close> by auto
  1442   show ?thesis
  1442   show ?thesis
  1443   proof
  1443   proof
  1444     show "\<epsilon> < k"
  1444     show "\<epsilon> < k"
  1469     qed
  1469     qed
  1470   qed (use \<open>0 < \<epsilon>\<close> in auto)
  1470   qed (use \<open>0 < \<epsilon>\<close> in auto)
  1471 qed
  1471 qed
  1472   
  1472   
  1473 
  1473 
  1474 lemma GPicard5:
  1474 lemma%important GPicard5:
  1475   assumes holf: "f holomorphic_on (ball 0 1 - {0})"
  1475   assumes holf: "f holomorphic_on (ball 0 1 - {0})"
  1476       and f01:  "\<And>z. z \<in> ball 0 1 - {0} \<Longrightarrow> f z \<noteq> 0 \<and> f z \<noteq> 1"
  1476       and f01:  "\<And>z. z \<in> ball 0 1 - {0} \<Longrightarrow> f z \<noteq> 0 \<and> f z \<noteq> 1"
  1477   obtains e B where "0 < e" "e < 1" "0 < B" 
  1477   obtains e B where "0 < e" "e < 1" "0 < B" 
  1478                     "(\<forall>z \<in> ball 0 e - {0}. norm(f z) \<le> B) \<or>
  1478                     "(\<forall>z \<in> ball 0 e - {0}. norm(f z) \<le> B) \<or>
  1479                      (\<forall>z \<in> ball 0 e - {0}. norm(f z) \<ge> B)"
  1479                      (\<forall>z \<in> ball 0 e - {0}. norm(f z) \<ge> B)"
  1480 proof -
  1480 proof%unimportant -
  1481   have [simp]: "1 + of_nat n \<noteq> (0::complex)" for n
  1481   have [simp]: "1 + of_nat n \<noteq> (0::complex)" for n
  1482     using of_nat_eq_0_iff by fastforce
  1482     using of_nat_eq_0_iff by fastforce
  1483   have [simp]: "cmod (1 + of_nat n) = 1 + of_nat n" for n
  1483   have [simp]: "cmod (1 + of_nat n) = 1 + of_nat n" for n
  1484     by (metis norm_of_nat of_nat_Suc)
  1484     by (metis norm_of_nat of_nat_Suc)
  1485   have *: "(\<lambda>x::complex. x / of_nat (Suc n)) ` (ball 0 1 - {0}) \<subseteq> ball 0 1 - {0}" for n
  1485   have *: "(\<lambda>x::complex. x / of_nat (Suc n)) ` (ball 0 1 - {0}) \<subseteq> ball 0 1 - {0}" for n
  1612       using \<epsilon> by auto 
  1612       using \<epsilon> by auto 
  1613   qed
  1613   qed
  1614 qed
  1614 qed
  1615 
  1615 
  1616   
  1616   
  1617 lemma GPicard6:
  1617 lemma%important GPicard6:
  1618   assumes "open M" "z \<in> M" "a \<noteq> 0" and holf: "f holomorphic_on (M - {z})"
  1618   assumes "open M" "z \<in> M" "a \<noteq> 0" and holf: "f holomorphic_on (M - {z})"
  1619       and f0a: "\<And>w. w \<in> M - {z} \<Longrightarrow> f w \<noteq> 0 \<and> f w \<noteq> a"
  1619       and f0a: "\<And>w. w \<in> M - {z} \<Longrightarrow> f w \<noteq> 0 \<and> f w \<noteq> a"
  1620   obtains r where "0 < r" "ball z r \<subseteq> M" 
  1620   obtains r where "0 < r" "ball z r \<subseteq> M" 
  1621                   "bounded(f ` (ball z r - {z})) \<or>
  1621                   "bounded(f ` (ball z r - {z})) \<or>
  1622                    bounded((inverse \<circ> f) ` (ball z r - {z}))"
  1622                    bounded((inverse \<circ> f) ` (ball z r - {z}))"
  1623 proof -
  1623 proof%unimportant -
  1624   obtain r where "0 < r" and r: "ball z r \<subseteq> M"
  1624   obtain r where "0 < r" and r: "ball z r \<subseteq> M"
  1625     using assms openE by blast 
  1625     using assms openE by blast 
  1626   let ?g = "\<lambda>w. f (z + of_real r * w) / a"
  1626   let ?g = "\<lambda>w. f (z + of_real r * w) / a"
  1627   obtain e B where "0 < e" "e < 1" "0 < B" 
  1627   obtain e B where "0 < e" "e < 1" "0 < B" 
  1628     and B: "(\<forall>z \<in> ball 0 e - {0}. norm(?g z) \<le> B) \<or> (\<forall>z \<in> ball 0 e - {0}. norm(?g z) \<ge> B)"
  1628     and B: "(\<forall>z \<in> ball 0 e - {0}. norm(?g z) \<le> B) \<or> (\<forall>z \<in> ball 0 e - {0}. norm(?g z) \<ge> B)"
  1667     qed
  1667     qed
  1668   qed
  1668   qed
  1669 qed
  1669 qed
  1670   
  1670   
  1671 
  1671 
  1672 theorem great_Picard:
  1672 theorem%important great_Picard:
  1673   assumes "open M" "z \<in> M" "a \<noteq> b" and holf: "f holomorphic_on (M - {z})"
  1673   assumes "open M" "z \<in> M" "a \<noteq> b" and holf: "f holomorphic_on (M - {z})"
  1674       and fab: "\<And>w. w \<in> M - {z} \<Longrightarrow> f w \<noteq> a \<and> f w \<noteq> b"
  1674       and fab: "\<And>w. w \<in> M - {z} \<Longrightarrow> f w \<noteq> a \<and> f w \<noteq> b"
  1675   obtains l where "(f \<longlongrightarrow> l) (at z) \<or> ((inverse \<circ> f) \<longlongrightarrow> l) (at z)"
  1675   obtains l where "(f \<longlongrightarrow> l) (at z) \<or> ((inverse \<circ> f) \<longlongrightarrow> l) (at z)"
  1676 proof -
  1676 proof%unimportant -
  1677   obtain r where "0 < r" and zrM: "ball z r \<subseteq> M" 
  1677   obtain r where "0 < r" and zrM: "ball z r \<subseteq> M" 
  1678              and r: "bounded((\<lambda>z. f z - a) ` (ball z r - {z})) \<or>
  1678              and r: "bounded((\<lambda>z. f z - a) ` (ball z r - {z})) \<or>
  1679                      bounded((inverse \<circ> (\<lambda>z. f z - a)) ` (ball z r - {z}))"
  1679                      bounded((inverse \<circ> (\<lambda>z. f z - a)) ` (ball z r - {z}))"
  1680   proof (rule GPicard6 [OF \<open>open M\<close> \<open>z \<in> M\<close>])
  1680   proof (rule GPicard6 [OF \<open>open M\<close> \<open>z \<in> M\<close>])
  1681     show "b - a \<noteq> 0"
  1681     show "b - a \<noteq> 0"
  1774     qed 
  1774     qed 
  1775   qed
  1775   qed
  1776 qed
  1776 qed
  1777 
  1777 
  1778 
  1778 
  1779 corollary great_Picard_alt:
  1779 corollary%important great_Picard_alt:
  1780   assumes M: "open M" "z \<in> M" and holf: "f holomorphic_on (M - {z})"
  1780   assumes M: "open M" "z \<in> M" and holf: "f holomorphic_on (M - {z})"
  1781     and non: "\<And>l. \<not> (f \<longlongrightarrow> l) (at z)" "\<And>l. \<not> ((inverse \<circ> f) \<longlongrightarrow> l) (at z)"
  1781     and non: "\<And>l. \<not> (f \<longlongrightarrow> l) (at z)" "\<And>l. \<not> ((inverse \<circ> f) \<longlongrightarrow> l) (at z)"
  1782   obtains a where "- {a} \<subseteq> f ` (M - {z})"
  1782   obtains a where "- {a} \<subseteq> f ` (M - {z})"
  1783   apply%unimportant (simp add: subset_iff image_iff)
  1783   apply%unimportant (simp add: subset_iff image_iff)
  1784   by%unimportant (metis great_Picard [OF M _ holf] non)
  1784   by%unimportant (metis great_Picard [OF M _ holf] non)
  1785     
  1785     
  1786 
  1786 
  1787 corollary great_Picard_infinite:
  1787 corollary%important great_Picard_infinite:
  1788   assumes M: "open M" "z \<in> M" and holf: "f holomorphic_on (M - {z})"
  1788   assumes M: "open M" "z \<in> M" and holf: "f holomorphic_on (M - {z})"
  1789     and non: "\<And>l. \<not> (f \<longlongrightarrow> l) (at z)" "\<And>l. \<not> ((inverse \<circ> f) \<longlongrightarrow> l) (at z)"
  1789     and non: "\<And>l. \<not> (f \<longlongrightarrow> l) (at z)" "\<And>l. \<not> ((inverse \<circ> f) \<longlongrightarrow> l) (at z)"
  1790   obtains a where "\<And>w. w \<noteq> a \<Longrightarrow> infinite {x. x \<in> M - {z} \<and> f x = w}"
  1790   obtains a where "\<And>w. w \<noteq> a \<Longrightarrow> infinite {x. x \<in> M - {z} \<and> f x = w}"
  1791 proof -
  1791 proof%unimportant -
  1792   have False if "a \<noteq> b" and ab: "finite {x. x \<in> M - {z} \<and> f x = a}" "finite {x. x \<in> M - {z} \<and> f x = b}" for a b
  1792   have False if "a \<noteq> b" and ab: "finite {x. x \<in> M - {z} \<and> f x = a}" "finite {x. x \<in> M - {z} \<and> f x = b}" for a b
  1793   proof -
  1793   proof -
  1794     have finab: "finite {x. x \<in> M - {z} \<and> f x \<in> {a,b}}"
  1794     have finab: "finite {x. x \<in> M - {z} \<and> f x \<in> {a,b}}"
  1795       using finite_UnI [OF ab]  unfolding mem_Collect_eq insert_iff empty_iff
  1795       using finite_UnI [OF ab]  unfolding mem_Collect_eq insert_iff empty_iff
  1796       by (simp add: conj_disj_distribL)
  1796       by (simp add: conj_disj_distribL)
  1828   qed
  1828   qed
  1829   with that show thesis
  1829   with that show thesis
  1830     by meson
  1830     by meson
  1831 qed
  1831 qed
  1832 
  1832 
  1833 theorem Casorati_Weierstrass:
  1833 corollary%important Casorati_Weierstrass:
  1834   assumes "open M" "z \<in> M" "f holomorphic_on (M - {z})"
  1834   assumes "open M" "z \<in> M" "f holomorphic_on (M - {z})"
  1835       and "\<And>l. \<not> (f \<longlongrightarrow> l) (at z)" "\<And>l. \<not> ((inverse \<circ> f) \<longlongrightarrow> l) (at z)"
  1835       and "\<And>l. \<not> (f \<longlongrightarrow> l) (at z)" "\<And>l. \<not> ((inverse \<circ> f) \<longlongrightarrow> l) (at z)"
  1836   shows "closure(f ` (M - {z})) = UNIV"
  1836   shows "closure(f ` (M - {z})) = UNIV"
  1837 proof -
  1837 proof%unimportant -
  1838   obtain a where a: "- {a} \<subseteq> f ` (M - {z})"
  1838   obtain a where a: "- {a} \<subseteq> f ` (M - {z})"
  1839     using great_Picard_alt [OF assms] .
  1839     using great_Picard_alt [OF assms] .
  1840   have "UNIV = closure(- {a})"
  1840   have "UNIV = closure(- {a})"
  1841     by (simp add: closure_interior)
  1841     by (simp add: closure_interior)
  1842   also have "... \<subseteq> closure(f ` (M - {z}))"
  1842   also have "... \<subseteq> closure(f ` (M - {z}))"