src/HOL/Analysis/Great_Picard.thy
changeset 66447 a1f5c5c26fa6
parent 65823 4f353215888a
child 66660 bc3584f7ac0c
equal deleted inserted replaced
66445:407de0768126 66447:a1f5c5c26fa6
   616 
   616 
   617 subsection\<open>The ArzelĂ --Ascoli theorem\<close>
   617 subsection\<open>The ArzelĂ --Ascoli theorem\<close>
   618 
   618 
   619 lemma subsequence_diagonalization_lemma:
   619 lemma 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. subseq k \<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 "subseq k" "\<And>i. P i (r \<circ> k)"
   624    obtains k where "strict_mono (k :: nat \<Rightarrow> nat)" "\<And>i. P i (r \<circ> k)"
   625 proof -
   625 proof -
   626   obtain kk where "\<And>i r. subseq (kk i r) \<and> P i (r \<circ> (kk i r))"
   626   obtain kk where "\<And>i r. strict_mono (kk i r :: nat \<Rightarrow> nat) \<and> P i (r \<circ> (kk i r))"
   627     using sub by metis
   627     using sub by metis
   628   then have sub_kk: "\<And>i r. subseq (kk i r)" and P_kk: "\<And>i r. P i (r \<circ> (kk i r))"
   628   then have sub_kk: "\<And>i r. strict_mono (kk i r)" and P_kk: "\<And>i r. P i (r \<circ> (kk i r))"
   629     by auto
   629     by auto
   630   define rr where "rr \<equiv> rec_nat (kk 0 r) (\<lambda>n x. x \<circ> kk (Suc n) (r \<circ> x))"
   630   define rr where "rr \<equiv> rec_nat (kk 0 r) (\<lambda>n x. x \<circ> kk (Suc n) (r \<circ> x))"
   631   then have [simp]: "rr 0 = kk 0 r" "\<And>n. rr(Suc n) = rr n \<circ> kk (Suc n) (r \<circ> rr n)"
   631   then have [simp]: "rr 0 = kk 0 r" "\<And>n. rr(Suc n) = rr n \<circ> kk (Suc n) (r \<circ> rr n)"
   632     by auto
   632     by auto
   633   show thesis
   633   show thesis
   634   proof
   634   proof
   635     have sub_rr: "subseq (rr i)" for i
   635     have sub_rr: "strict_mono (rr i)" for i
   636       using sub_kk  by (induction i) (auto simp: subseq_def o_def)
   636       using sub_kk  by (induction i) (auto simp: strict_mono_def o_def)
   637     have P_rr: "P i (r \<circ> rr i)" for i
   637     have P_rr: "P i (r \<circ> rr i)" for i
   638       using P_kk  by (induction i) (auto simp: o_def)
   638       using P_kk  by (induction i) (auto simp: o_def)
   639     have "i \<le> i+d \<Longrightarrow> rr i n \<le> rr (i+d) n" for d i n
   639     have "i \<le> i+d \<Longrightarrow> rr i n \<le> rr (i+d) n" for d i n
   640     proof (induction d)
   640     proof (induction d)
   641       case 0 then show ?case
   641       case 0 then show ?case
   642         by simp
   642         by simp
   643     next
   643     next
   644       case (Suc d) then show ?case
   644       case (Suc d) then show ?case
   645         apply simp
   645         apply simp
   646           using seq_suble [OF sub_kk] order_trans subseq_le_mono [OF sub_rr] by blast
   646           using seq_suble [OF sub_kk] order_trans strict_mono_less_eq [OF sub_rr] by blast
   647     qed
   647     qed
   648     then have "\<And>i j n. i \<le> j \<Longrightarrow> rr i n \<le> rr j n"
   648     then have "\<And>i j n. i \<le> j \<Longrightarrow> rr i n \<le> rr j n"
   649       by (metis le_iff_add)
   649       by (metis le_iff_add)
   650     show "subseq (\<lambda>n. rr n n)"
   650     show "strict_mono (\<lambda>n. rr n n)"
   651       apply (simp add: subseq_Suc_iff)
   651       apply (simp add: strict_mono_Suc_iff)
   652       by (meson Suc_le_eq seq_suble sub_kk sub_rr subseq_mono)
   652       by (meson lessI less_le_trans seq_suble strict_monoD sub_kk sub_rr)
   653     have "\<exists>j. i \<le> j \<and> rr (n+d) i = rr n j" for d n i
   653     have "\<exists>j. i \<le> j \<and> rr (n+d) i = rr n j" for d n i
   654       apply (induction d arbitrary: i, auto)
   654       apply (induction d arbitrary: i, auto)
   655       by (meson order_trans seq_suble sub_kk)
   655       by (meson order_trans seq_suble sub_kk)
   656     then have "\<And>m n i. n \<le> m \<Longrightarrow> \<exists>j. i \<le> j \<and> rr m i = rr n j"
   656     then have "\<And>m n i. n \<le> m \<Longrightarrow> \<exists>j. i \<le> j \<and> rr m i = rr n j"
   657       by (metis le_iff_add)
   657       by (metis le_iff_add)
   661 qed
   661 qed
   662 
   662 
   663 lemma function_convergent_subsequence:
   663 lemma 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 "subseq k" "\<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
   669   then show ?thesis
   669   then show ?thesis
   670     using subseq_id that by fastforce
   670     using strict_mono_id that by fastforce
   671 next
   671 next
   672   case False
   672   case False
   673   with \<open>countable S\<close> obtain \<sigma> :: "nat \<Rightarrow> 'a" where \<sigma>: "S = range \<sigma>"
   673   with \<open>countable S\<close> obtain \<sigma> :: "nat \<Rightarrow> 'a" where \<sigma>: "S = range \<sigma>"
   674     using uncountable_def by blast
   674     using uncountable_def by blast
   675   obtain k where "subseq k" and k: "\<And>i. \<exists>l. (\<lambda>n. (f \<circ> k) n (\<sigma> i)) \<longlonglongrightarrow> l"
   675   obtain k where "strict_mono k" and k: "\<And>i. \<exists>l. (\<lambda>n. (f \<circ> k) n (\<sigma> i)) \<longlonglongrightarrow> l"
   676   proof (rule subsequence_diagonalization_lemma
   676   proof (rule subsequence_diagonalization_lemma
   677       [of "\<lambda>i r. \<exists>l. ((\<lambda>n. (f \<circ> r) n (\<sigma> i)) \<longlongrightarrow> l) sequentially" id])
   677       [of "\<lambda>i r. \<exists>l. ((\<lambda>n. (f \<circ> r) n (\<sigma> i)) \<longlongrightarrow> l) sequentially" id])
   678     show "\<exists>k. subseq k \<and> (\<exists>l. (\<lambda>n. (f \<circ> (r \<circ> k)) n (\<sigma> i)) \<longlonglongrightarrow> l)" for i r
   678     show "\<exists>k::nat\<Rightarrow>nat. strict_mono k \<and> (\<exists>l. (\<lambda>n. (f \<circ> (r \<circ> k)) n (\<sigma> i)) \<longlonglongrightarrow> l)" for i r
   679     proof -
   679     proof -
   680       have "f (r n) (\<sigma> i) \<in> cball 0 M" for n
   680       have "f (r n) (\<sigma> i) \<in> cball 0 M" for n
   681         by (simp add: \<sigma> M)
   681         by (simp add: \<sigma> M)
   682       then show ?thesis
   682       then show ?thesis
   683         using compact_def [of "cball (0::'b) M"] apply simp
   683         using compact_def [of "cball (0::'b) M"] apply simp
   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" "subseq k"
   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 -
   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)+
   725         by (metis dist_norm that)
   725         by (metis dist_norm that)
   726   qed auto
   726   qed auto
   727   moreover
   727   moreover
   728   obtain R where "countable R" "R \<subseteq> S" and SR: "S \<subseteq> closure R"
   728   obtain R where "countable R" "R \<subseteq> S" and SR: "S \<subseteq> closure R"
   729     by (metis separable that)
   729     by (metis separable that)
   730   obtain k where "subseq k" and k: "\<And>x. x \<in> R \<Longrightarrow> \<exists>l. (\<lambda>n. \<F> (k n) x) \<longlonglongrightarrow> l"
   730   obtain k where "strict_mono k" and k: "\<And>x. x \<in> R \<Longrightarrow> \<exists>l. (\<lambda>n. \<F> (k n) x) \<longlonglongrightarrow> l"
   731     apply (rule function_convergent_subsequence [OF \<open>countable R\<close> M])
   731     apply (rule function_convergent_subsequence [OF \<open>countable R\<close> M])
   732     using \<open>R \<subseteq> S\<close> apply force+
   732     using \<open>R \<subseteq> S\<close> apply force+
   733     done
   733     done
   734   then have Cauchy: "Cauchy ((\<lambda>n. \<F> (k n) x))" if "x \<in> R" for x
   734   then have Cauchy: "Cauchy ((\<lambda>n. \<F> (k n) x))" if "x \<in> R" for x
   735     using convergent_eq_Cauchy that by blast
   735     using convergent_eq_Cauchy that by blast
   781   then have "\<exists>g. \<forall>e>0. \<exists>N. \<forall>n\<ge>N. \<forall>x \<in> S. norm(\<F>(k n) x - g x) < e"
   781   then have "\<exists>g. \<forall>e>0. \<exists>N. \<forall>n\<ge>N. \<forall>x \<in> S. norm(\<F>(k n) x - g x) < e"
   782     using uniformly_convergent_eq_cauchy [of "\<lambda>x. x \<in> S" "\<F> \<circ> k"]
   782     using uniformly_convergent_eq_cauchy [of "\<lambda>x. x \<in> S" "\<F> \<circ> k"]
   783     apply (simp add: o_def dist_norm)
   783     apply (simp add: o_def dist_norm)
   784     by meson
   784     by meson
   785   ultimately show thesis
   785   ultimately show thesis
   786     by (metis that \<open>subseq k\<close>)
   786     by (metis that \<open>strict_mono k\<close>)
   787 qed
   787 qed
   788 
   788 
   789 
   789 
   790 
   790 
   791 subsubsection\<open>Montel's theorem\<close>
   791 subsubsection\<open>Montel's theorem\<close>
   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" "subseq r"
   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 -
   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)
   814   then obtain B where B: "\<And>i h z. \<lbrakk>h \<in> \<H>; z \<in> K i\<rbrakk> \<Longrightarrow> norm(h z) \<le> B i"
   814   then obtain B where B: "\<And>i h z. \<lbrakk>h \<in> \<H>; z \<in> K i\<rbrakk> \<Longrightarrow> norm(h z) \<le> B i"
   815     by metis
   815     by metis
   816   have *: "\<exists>r g. subseq r \<and> (\<forall>e > 0. \<exists>N. \<forall>n\<ge>N. \<forall>x \<in> K i. norm((\<F> \<circ> r) n x - g x) < e)"
   816   have *: "\<exists>r g. strict_mono (r::nat\<Rightarrow>nat) \<and> (\<forall>e > 0. \<exists>N. \<forall>n\<ge>N. \<forall>x \<in> K i. norm((\<F> \<circ> r) n x - g x) < e)"
   817         if "\<And>n. \<F> n \<in> \<H>" for \<F> i
   817         if "\<And>n. \<F> n \<in> \<H>" for \<F> i
   818   proof -
   818   proof -
   819     obtain g k where "continuous_on (K i) g" "subseq k"
   819     obtain g k where "continuous_on (K i) g" "strict_mono (k::nat\<Rightarrow>nat)"
   820                     "\<And>e. 0 < e \<Longrightarrow> \<exists>N. \<forall>n\<ge>N. \<forall>x \<in> K i. norm(\<F>(k n) x - g x) < e"
   820                     "\<And>e. 0 < e \<Longrightarrow> \<exists>N. \<forall>n\<ge>N. \<forall>x \<in> K i. norm(\<F>(k n) x - g x) < e"
   821     proof (rule Arzela_Ascoli [of "K i" "\<F>" "B i"])
   821     proof (rule Arzela_Ascoli [of "K i" "\<F>" "B i"])
   822       show "\<exists>d>0. \<forall>n y. y \<in> K i \<and> cmod (z - y) < d \<longrightarrow> cmod (\<F> n z - \<F> n y) < e"
   822       show "\<exists>d>0. \<forall>n y. y \<in> K i \<and> cmod (z - y) < d \<longrightarrow> cmod (\<F> n z - \<F> n y) < e"
   823              if z: "z \<in> K i" and "0 < e" for z e
   823              if z: "z \<in> K i" and "0 < e" for z e
   824       proof -
   824       proof -
   923         using B \<open>\<And>n. \<F> n \<in> \<H>\<close> by blast
   923         using B \<open>\<And>n. \<F> n \<in> \<H>\<close> by blast
   924     qed (use comK in \<open>fastforce+\<close>)
   924     qed (use comK in \<open>fastforce+\<close>)
   925     then show ?thesis
   925     then show ?thesis
   926       by fastforce
   926       by fastforce
   927   qed
   927   qed
   928   have "\<exists>k g. subseq k \<and> (\<forall>e > 0. \<exists>N. \<forall>n\<ge>N. \<forall>x \<in> K i. norm((\<F> \<circ> r \<circ> k) n x - g x) < e)"
   928   have "\<exists>k g. strict_mono (k::nat\<Rightarrow>nat) \<and> (\<forall>e > 0. \<exists>N. \<forall>n\<ge>N. \<forall>x \<in> K i. norm((\<F> \<circ> r \<circ> k) n x - g x) < e)"
   929          for i r
   929          for i r
   930     apply (rule *)
   930     apply (rule *)
   931     using rng_f by auto
   931     using rng_f by auto
   932   then have **: "\<And>i r. \<exists>k. subseq k \<and> (\<exists>g. \<forall>e>0. \<exists>N. \<forall>n\<ge>N. \<forall>x \<in> K i. norm((\<F> \<circ> (r \<circ> k)) n x - g x) < e)"
   932   then have **: "\<And>i r. \<exists>k. strict_mono (k::nat\<Rightarrow>nat) \<and> (\<exists>g. \<forall>e>0. \<exists>N. \<forall>n\<ge>N. \<forall>x \<in> K i. norm((\<F> \<circ> (r \<circ> k)) n x - g x) < e)"
   933     by (force simp: o_assoc)
   933     by (force simp: o_assoc)
   934   obtain k where "subseq k"
   934   obtain k :: "nat \<Rightarrow> nat" where "strict_mono k"
   935              and "\<And>i. \<exists>g. \<forall>e>0. \<exists>N. \<forall>n\<ge>N. \<forall>x\<in>K i. cmod ((\<F> \<circ> (id \<circ> k)) n x - g x) < e"
   935              and "\<And>i. \<exists>g. \<forall>e>0. \<exists>N. \<forall>n\<ge>N. \<forall>x\<in>K i. cmod ((\<F> \<circ> (id \<circ> k)) n x - g x) < e"
   936     apply (rule subsequence_diagonalization_lemma [OF **, of id])
   936     apply (rule subsequence_diagonalization_lemma [OF **, of id])
   937      apply (erule ex_forward all_forward imp_forward)+
   937      apply (erule ex_forward all_forward imp_forward)+
   938       apply auto
   938       apply auto
   939     apply (rule_tac x="max N Na" in exI, fastforce+)
   939     apply (rule_tac x="max N Na" in exI, fastforce+)
   986         then have "uniform_limit (cball z d) (\<F> \<circ> k) g sequentially"
   986         then have "uniform_limit (cball z d) (\<F> \<circ> k) g sequentially"
   987           using dg_le_e compact_cball by (auto simp: uniform_limit_iff eventually_sequentially dist_norm)
   987           using dg_le_e compact_cball by (auto simp: uniform_limit_iff eventually_sequentially dist_norm)
   988         with d show ?thesis by blast
   988         with d show ?thesis by blast
   989       qed
   989       qed
   990     qed
   990     qed
   991   qed (auto simp: \<open>subseq k\<close>)
   991   qed (auto simp: \<open>strict_mono k\<close>)
   992 qed
   992 qed
   993 
   993 
   994 
   994 
   995 
   995 
   996 subsection\<open>Some simple but useful cases of Hurwitz's theorem\<close>
   996 subsection\<open>Some simple but useful cases of Hurwitz's theorem\<close>
  1330                    and B: "\<And>h z. \<lbrakk>h \<in> range \<G>; z \<in> Z\<rbrakk> \<Longrightarrow> norm(h z) \<le> B"
  1330                    and B: "\<And>h z. \<lbrakk>h \<in> range \<G>; z \<in> Z\<rbrakk> \<Longrightarrow> norm(h z) \<le> B"
  1331         apply (rule GPicard1 [OF \<open>open S\<close> \<open>connected S\<close> \<open>v \<in> S\<close> zero_less_one, of "range \<G>" W])
  1331         apply (rule GPicard1 [OF \<open>open S\<close> \<open>connected S\<close> \<open>v \<in> S\<close> zero_less_one, of "range \<G>" W])
  1332         using hol\<G> \<G>not0 \<G>not1 \<G>_le1 by (force simp: W_def)+
  1332         using hol\<G> \<G>not0 \<G>not1 \<G>_le1 by (force simp: W_def)+
  1333       then obtain e where "e > 0" and e: "ball v e \<subseteq> Z"
  1333       then obtain e where "e > 0" and e: "ball v e \<subseteq> Z"
  1334         by (meson open_contains_ball)
  1334         by (meson open_contains_ball)
  1335       obtain h j where holh: "h holomorphic_on ball v e" and "subseq j"
  1335       obtain h j where holh: "h holomorphic_on ball v e" and "strict_mono j"
  1336                    and lim:  "\<And>x. x \<in> ball v e \<Longrightarrow> (\<lambda>n. \<G> (j n) x) \<longlonglongrightarrow> h x"
  1336                    and lim:  "\<And>x. x \<in> ball v e \<Longrightarrow> (\<lambda>n. \<G> (j n) x) \<longlonglongrightarrow> h x"
  1337                    and ulim: "\<And>K. \<lbrakk>compact K; K \<subseteq> ball v e\<rbrakk>
  1337                    and ulim: "\<And>K. \<lbrakk>compact K; K \<subseteq> ball v e\<rbrakk>
  1338                                   \<Longrightarrow> uniform_limit K (\<G> \<circ> j) h sequentially"
  1338                                   \<Longrightarrow> uniform_limit K (\<G> \<circ> j) h sequentially"
  1339       proof (rule Montel)
  1339       proof (rule Montel)
  1340         show "\<And>h. h \<in> range \<G> \<Longrightarrow> h holomorphic_on ball v e"
  1340         show "\<And>h. h \<in> range \<G> \<Longrightarrow> h holomorphic_on ball v e"
  1345       have "h v = 0"
  1345       have "h v = 0"
  1346       proof (rule LIMSEQ_unique)
  1346       proof (rule LIMSEQ_unique)
  1347         show "(\<lambda>n. \<G> (j n) v) \<longlonglongrightarrow> h v"
  1347         show "(\<lambda>n. \<G> (j n) v) \<longlonglongrightarrow> h v"
  1348           using \<open>e > 0\<close> lim by simp
  1348           using \<open>e > 0\<close> lim by simp
  1349         have lt_Fj: "real x \<le> cmod (\<F> (j x) v)" for x
  1349         have lt_Fj: "real x \<le> cmod (\<F> (j x) v)" for x
  1350           by (metis of_nat_Suc ltF \<open>subseq j\<close> add.commute less_eq_real_def less_le_trans nat_le_real_less seq_suble)
  1350           by (metis of_nat_Suc ltF \<open>strict_mono j\<close> add.commute less_eq_real_def less_le_trans nat_le_real_less seq_suble)
  1351         show "(\<lambda>n. \<G> (j n) v) \<longlonglongrightarrow> 0"
  1351         show "(\<lambda>n. \<G> (j n) v) \<longlonglongrightarrow> 0"
  1352         proof (rule Lim_null_comparison [OF eventually_sequentiallyI seq_harmonic])
  1352         proof (rule Lim_null_comparison [OF eventually_sequentiallyI seq_harmonic])
  1353           show "cmod (\<G> (j x) v) \<le> inverse (real x)" if "1 \<le> x" for x
  1353           show "cmod (\<G> (j x) v) \<le> inverse (real x)" if "1 \<le> x" for x
  1354             using that by (simp add: \<G>_def norm_inverse_le_norm [OF lt_Fj])
  1354             using that by (simp add: \<G>_def norm_inverse_le_norm [OF lt_Fj])
  1355         qed        
  1355         qed        
  1426       apply (simp add: linorder_class.Max_ge_iff)
  1426       apply (simp add: linorder_class.Max_ge_iff)
  1427       using * F  by (metis L UN_E subsetD)
  1427       using * F  by (metis L UN_E subsetD)
  1428   qed
  1428   qed
  1429   with that show ?thesis by metis
  1429   with that show ?thesis by metis
  1430 qed
  1430 qed
  1431     
  1431 
  1432   
  1432 
  1433 lemma GPicard4:
  1433 lemma GPicard4:
  1434   assumes "0 < k" and holf: "f holomorphic_on (ball 0 k - {0})" 
  1434   assumes "0 < k" and holf: "f holomorphic_on (ball 0 k - {0})" 
  1435       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)"
  1435       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)"
  1436   obtains \<epsilon> where "0 < \<epsilon>" "\<epsilon> < k" "\<And>z. z \<in> ball 0 \<epsilon> - {0} \<Longrightarrow> norm(f z) \<le> B"
  1436   obtains \<epsilon> where "0 < \<epsilon>" "\<epsilon> < k" "\<And>z. z \<in> ball 0 \<epsilon> - {0} \<Longrightarrow> norm(f z) \<le> B"
  1437 proof -
  1437 proof -
  1498   consider "infinite {n. norm(h n w) \<le> 1}" | "infinite {n. 1 \<le> norm(h n w)}"
  1498   consider "infinite {n. norm(h n w) \<le> 1}" | "infinite {n. 1 \<le> norm(h n w)}"
  1499     by (metis (mono_tags, lifting) infinite_nat_iff_unbounded_le le_cases mem_Collect_eq)
  1499     by (metis (mono_tags, lifting) infinite_nat_iff_unbounded_le le_cases mem_Collect_eq)
  1500   then show ?thesis
  1500   then show ?thesis
  1501   proof cases
  1501   proof cases
  1502     case 1
  1502     case 1
  1503     with infinite_enumerate obtain r where "subseq r" and r: "\<And>n. r n \<in> {n. norm(h n w) \<le> 1}"
  1503     with infinite_enumerate obtain r :: "nat \<Rightarrow> nat" 
       
  1504       where "strict_mono r" and r: "\<And>n. r n \<in> {n. norm(h n w) \<le> 1}"
  1504       by blast
  1505       by blast
  1505     obtain B where B: "\<And>j z. \<lbrakk>norm z = 1/2; j \<in> range (h \<circ> r)\<rbrakk> \<Longrightarrow> norm(j z) \<le> B"
  1506     obtain B where B: "\<And>j z. \<lbrakk>norm z = 1/2; j \<in> range (h \<circ> r)\<rbrakk> \<Longrightarrow> norm(j z) \<le> B"
  1506     proof (rule GPicard3 [OF _ _ w, where K = "sphere 0 (1/2)"])  
  1507     proof (rule GPicard3 [OF _ _ w, where K = "sphere 0 (1/2)"])  
  1507       show "range (h \<circ> r) \<subseteq> 
  1508       show "range (h \<circ> r) \<subseteq> 
  1508             {g. g holomorphic_on ball 0 1 - {0} \<and> (\<forall>z\<in>ball 0 1 - {0}. g z \<noteq> 0 \<and> g z \<noteq> 1)}"
  1509             {g. g holomorphic_on ball 0 1 - {0} \<and> (\<forall>z\<in>ball 0 1 - {0}. g z \<noteq> 0 \<and> g z \<noteq> 1)}"
  1527       fix e::real
  1528       fix e::real
  1528       assume "0 < e" "e < 1"
  1529       assume "0 < e" "e < 1"
  1529       obtain n where "(1/e - 2) / 2 < real n"
  1530       obtain n where "(1/e - 2) / 2 < real n"
  1530         using reals_Archimedean2 by blast
  1531         using reals_Archimedean2 by blast
  1531       also have "... \<le> r n"
  1532       also have "... \<le> r n"
  1532         using \<open>subseq r\<close> by (simp add: seq_suble)
  1533         using \<open>strict_mono r\<close> by (simp add: seq_suble)
  1533       finally have "(1/e - 2) / 2 < real (r n)" .
  1534       finally have "(1/e - 2) / 2 < real (r n)" .
  1534       with \<open>0 < e\<close> have e: "e > 1 / (2 + 2 * real (r n))"
  1535       with \<open>0 < e\<close> have e: "e > 1 / (2 + 2 * real (r n))"
  1535         by (simp add: field_simps)
  1536         by (simp add: field_simps)
  1536       show "\<exists>d>0. d < e \<and> (\<forall>z\<in>sphere 0 d. cmod (f z) \<le> B)"
  1537       show "\<exists>d>0. d < e \<and> (\<forall>z\<in>sphere 0 d. cmod (f z) \<le> B)"
  1537         apply (rule_tac x="1 / (2 * (1 + of_nat (r n)))" in exI)
  1538         apply (rule_tac x="1 / (2 * (1 + of_nat (r n)))" in exI)
  1544     then show ?thesis
  1545     then show ?thesis
  1545       apply (rule that [OF \<open>0 < \<epsilon>\<close> \<open>\<epsilon> < 1\<close>])
  1546       apply (rule that [OF \<open>0 < \<epsilon>\<close> \<open>\<epsilon> < 1\<close>])
  1546       using \<epsilon> by auto 
  1547       using \<epsilon> by auto 
  1547   next
  1548   next
  1548     case 2
  1549     case 2
  1549     with infinite_enumerate obtain r where "subseq r" and r: "\<And>n. r n \<in> {n. norm(h n w) \<ge> 1}"
  1550     with infinite_enumerate obtain r :: "nat \<Rightarrow> nat" 
       
  1551       where "strict_mono r" and r: "\<And>n. r n \<in> {n. norm(h n w) \<ge> 1}"
  1550       by blast
  1552       by blast
  1551     obtain B where B: "\<And>j z. \<lbrakk>norm z = 1/2; j \<in> range (\<lambda>n. inverse \<circ> h (r n))\<rbrakk> \<Longrightarrow> norm(j z) \<le> B"
  1553     obtain B where B: "\<And>j z. \<lbrakk>norm z = 1/2; j \<in> range (\<lambda>n. inverse \<circ> h (r n))\<rbrakk> \<Longrightarrow> norm(j z) \<le> B"
  1552     proof (rule GPicard3 [OF _ _ w, where K = "sphere 0 (1/2)"])  
  1554     proof (rule GPicard3 [OF _ _ w, where K = "sphere 0 (1/2)"])  
  1553       show "range (\<lambda>n. inverse \<circ> h (r n)) \<subseteq> 
  1555       show "range (\<lambda>n. inverse \<circ> h (r n)) \<subseteq> 
  1554             {g. g holomorphic_on ball 0 1 - {0} \<and> (\<forall>z\<in>ball 0 1 - {0}. g z \<noteq> 0 \<and> g z \<noteq> 1)}"
  1556             {g. g holomorphic_on ball 0 1 - {0} \<and> (\<forall>z\<in>ball 0 1 - {0}. g z \<noteq> 0 \<and> g z \<noteq> 1)}"
  1577       fix e::real
  1579       fix e::real
  1578       assume "0 < e" "e < 1"
  1580       assume "0 < e" "e < 1"
  1579       obtain n where "(1/e - 2) / 2 < real n"
  1581       obtain n where "(1/e - 2) / 2 < real n"
  1580         using reals_Archimedean2 by blast
  1582         using reals_Archimedean2 by blast
  1581       also have "... \<le> r n"
  1583       also have "... \<le> r n"
  1582         using \<open>subseq r\<close> by (simp add: seq_suble)
  1584         using \<open>strict_mono r\<close> by (simp add: seq_suble)
  1583       finally have "(1/e - 2) / 2 < real (r n)" .
  1585       finally have "(1/e - 2) / 2 < real (r n)" .
  1584       with \<open>0 < e\<close> have e: "e > 1 / (2 + 2 * real (r n))"
  1586       with \<open>0 < e\<close> have e: "e > 1 / (2 + 2 * real (r n))"
  1585         by (simp add: field_simps)
  1587         by (simp add: field_simps)
  1586       show "\<exists>d>0. d < e \<and> (\<forall>z\<in>sphere 0 d. cmod ((inverse \<circ> f) z) \<le> B)"
  1588       show "\<exists>d>0. d < e \<and> (\<forall>z\<in>sphere 0 d. cmod ((inverse \<circ> f) z) \<le> B)"
  1587         apply (rule_tac x="1 / (2 * (1 + of_nat (r n)))" in exI)
  1589         apply (rule_tac x="1 / (2 * (1 + of_nat (r n)))" in exI)