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 |
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+) |
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) |