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 |
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}))" |