src/HOL/Analysis/Further_Topology.thy
changeset 66955 289f390c4e57
parent 66941 c67bb79a0ceb
child 67399 eab6ce8368fa
equal deleted inserted replaced
66954:0230af0f3c59 66955:289f390c4e57
  3797     by (simp add: openin_open_Int oo)
  3797     by (simp add: openin_open_Int oo)
  3798   then have "openin (subtopology euclidean S) (\<Inter>a \<in> C. {x \<in> S. f x \<inter> T \<inter> ball a (e/2) \<noteq> {}})"
  3798   then have "openin (subtopology euclidean S) (\<Inter>a \<in> C. {x \<in> S. f x \<inter> T \<inter> ball a (e/2) \<noteq> {}})"
  3799     by (simp add: Int_assoc openin_INT2 [OF \<open>finite C\<close> \<open>C \<noteq> {}\<close>])
  3799     by (simp add: Int_assoc openin_INT2 [OF \<open>finite C\<close> \<open>C \<noteq> {}\<close>])
  3800   with xin obtain d2 where "d2>0"
  3800   with xin obtain d2 where "d2>0"
  3801               and d2: "\<And>u v. \<lbrakk>u \<in> S; dist u x < d2; v \<in> C\<rbrakk> \<Longrightarrow> f u \<inter> T \<inter> ball v (e/2) \<noteq> {}"
  3801               and d2: "\<And>u v. \<lbrakk>u \<in> S; dist u x < d2; v \<in> C\<rbrakk> \<Longrightarrow> f u \<inter> T \<inter> ball v (e/2) \<noteq> {}"
  3802     by (force simp: openin_euclidean_subtopology_iff)
  3802     unfolding openin_euclidean_subtopology_iff using xin by fastforce
  3803   show ?thesis
  3803   show ?thesis
  3804   proof (intro that conjI ballI)
  3804   proof (intro that conjI ballI)
  3805     show "0 < min d1 d2"
  3805     show "0 < min d1 d2"
  3806       using \<open>0 < d1\<close> \<open>0 < d2\<close> by linarith
  3806       using \<open>0 < d1\<close> \<open>0 < d2\<close> by linarith
  3807   next
  3807   next
  3825       by (metis add_diff_cancel_left' dist_norm)
  3825       by (metis add_diff_cancel_left' dist_norm)
  3826   qed
  3826   qed
  3827 qed
  3827 qed
  3828 
  3828 
  3829 
  3829 
  3830 subsection\<open>complex logs exist on various "well-behaved" sets\<close>
  3830 subsection\<open>Complex logs exist on various "well-behaved" sets\<close>
  3831 
  3831 
  3832 lemma continuous_logarithm_on_contractible:
  3832 lemma continuous_logarithm_on_contractible:
  3833   fixes f :: "'a::real_normed_vector \<Rightarrow> complex"
  3833   fixes f :: "'a::real_normed_vector \<Rightarrow> complex"
  3834   assumes "continuous_on S f" "contractible S" "\<And>z. z \<in> S \<Longrightarrow> f z \<noteq> 0"
  3834   assumes "continuous_on S f" "contractible S" "\<And>z. z \<in> S \<Longrightarrow> f z \<noteq> 0"
  3835   obtains g where "continuous_on S g" "\<And>x. x \<in> S \<Longrightarrow> f x = exp(g x)"
  3835   obtains g where "continuous_on S g" "\<And>x. x \<in> S \<Longrightarrow> f x = exp(g x)"
  3836 proof -
  3836 proof -
  3837   obtain c where hom: "homotopic_with (\<lambda>h. True) S (-{0}) f (\<lambda>x. c)"
  3837   obtain c where hom: "homotopic_with (\<lambda>h. True) S (-{0}) f (\<lambda>x. c)"
  3838     using nullhomotopic_from_contractible assms
  3838     using nullhomotopic_from_contractible assms
  3839     by (metis imageE subset_Compl_singleton)
  3839     by (metis imageE subset_Compl_singleton)
  3840   then show ?thesis
  3840   then show ?thesis
  3841     by (metis inessential_eq_continuous_logarithm of_real_0 that)
  3841     by (metis inessential_eq_continuous_logarithm that)
  3842 qed
  3842 qed
  3843 
  3843 
  3844 lemma continuous_logarithm_on_simply_connected:
  3844 lemma continuous_logarithm_on_simply_connected:
  3845   fixes f :: "'a::real_normed_vector \<Rightarrow> complex"
  3845   fixes f :: "'a::real_normed_vector \<Rightarrow> complex"
  3846   assumes contf: "continuous_on S f" and S: "simply_connected S" "locally path_connected S"
  3846   assumes contf: "continuous_on S f" and S: "simply_connected S" "locally path_connected S"
  3891     show "continuous_on S (\<lambda>z. exp (g z / 2))"
  3891     show "continuous_on S (\<lambda>z. exp (g z / 2))"
  3892       by (rule continuous_on_compose2 [of UNIV exp]; intro continuous_intros contg subset_UNIV) auto
  3892       by (rule continuous_on_compose2 [of UNIV exp]; intro continuous_intros contg subset_UNIV) auto
  3893     show "\<And>x. x \<in> S \<Longrightarrow> f x = (exp (g x / 2))\<^sup>2"
  3893     show "\<And>x. x \<in> S \<Longrightarrow> f x = (exp (g x / 2))\<^sup>2"
  3894       by (metis exp_double feq nonzero_mult_div_cancel_left times_divide_eq_right zero_neq_numeral)
  3894       by (metis exp_double feq nonzero_mult_div_cancel_left times_divide_eq_right zero_neq_numeral)
  3895   qed
  3895   qed
       
  3896 qed
       
  3897 
       
  3898 
       
  3899 subsection\<open>Another simple case where sphere maps are nullhomotopic.\<close>
       
  3900 
       
  3901 lemma inessential_spheremap_2_aux:
       
  3902   fixes f :: "'a::euclidean_space \<Rightarrow> complex"
       
  3903   assumes 2: "2 < DIM('a)" and contf: "continuous_on (sphere a r) f" 
       
  3904       and fim: "f `(sphere a r) \<subseteq> (sphere 0 1)" 
       
  3905   obtains c where "homotopic_with (\<lambda>z. True) (sphere a r) (sphere 0 1) f (\<lambda>x. c)"
       
  3906 proof -
       
  3907   obtain g where contg: "continuous_on (sphere a r) g" 
       
  3908              and feq: "\<And>x. x \<in> sphere a r \<Longrightarrow> f x = exp(g x)"
       
  3909   proof (rule continuous_logarithm_on_simply_connected [OF contf])
       
  3910     show "simply_connected (sphere a r)"
       
  3911       using 2 by (simp add: simply_connected_sphere_eq)
       
  3912     show "locally path_connected (sphere a r)"
       
  3913       by (simp add: locally_path_connected_sphere)
       
  3914     show "\<And>z.  z \<in> sphere a r \<Longrightarrow> f z \<noteq> 0"
       
  3915       using fim by force
       
  3916   qed auto
       
  3917   have "\<exists>g. continuous_on (sphere a r) g \<and> (\<forall>x\<in>sphere a r. f x = exp (\<i> * complex_of_real (g x)))"
       
  3918   proof (intro exI conjI)
       
  3919     show "continuous_on (sphere a r) (Im \<circ> g)"
       
  3920       by (intro contg continuous_intros continuous_on_compose)
       
  3921     show "\<forall>x\<in>sphere a r. f x = exp (\<i> * complex_of_real ((Im \<circ> g) x))"
       
  3922       using exp_eq_polar feq fim norm_exp_eq_Re by auto
       
  3923   qed
       
  3924   with inessential_eq_continuous_logarithm_circle that show ?thesis 
       
  3925     by metis
       
  3926 qed
       
  3927 
       
  3928 lemma inessential_spheremap_2:
       
  3929   fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space"
       
  3930   assumes a2: "2 < DIM('a)" and b2: "DIM('b) = 2" 
       
  3931       and contf: "continuous_on (sphere a r) f" and fim: "f `(sphere a r) \<subseteq> (sphere b s)"
       
  3932   obtains c where "homotopic_with (\<lambda>z. True) (sphere a r) (sphere b s) f (\<lambda>x. c)"
       
  3933 proof (cases "s \<le> 0")
       
  3934   case True
       
  3935   then show ?thesis
       
  3936     using contf contractible_sphere fim nullhomotopic_into_contractible that by blast
       
  3937 next
       
  3938   case False
       
  3939   then have "sphere b s homeomorphic sphere (0::complex) 1"
       
  3940     using assms by (simp add: homeomorphic_spheres_gen)
       
  3941   then obtain h k where hk: "homeomorphism (sphere b s) (sphere (0::complex) 1) h k"
       
  3942     by (auto simp: homeomorphic_def)
       
  3943   then have conth: "continuous_on (sphere b s) h"
       
  3944        and  contk: "continuous_on (sphere 0 1) k"
       
  3945        and  him: "h ` sphere b s \<subseteq> sphere 0 1"
       
  3946        and  kim: "k ` sphere 0 1 \<subseteq> sphere b s"
       
  3947     by (simp_all add: homeomorphism_def)
       
  3948   obtain c where "homotopic_with (\<lambda>z. True) (sphere a r) (sphere 0 1) (h \<circ> f) (\<lambda>x. c)"
       
  3949   proof (rule inessential_spheremap_2_aux [OF a2])
       
  3950     show "continuous_on (sphere a r) (h \<circ> f)"
       
  3951       by (meson continuous_on_compose [OF contf] conth continuous_on_subset fim)
       
  3952     show "(h \<circ> f) ` sphere a r \<subseteq> sphere 0 1"
       
  3953       using fim him by force
       
  3954   qed auto
       
  3955   then have "homotopic_with (\<lambda>f. True) (sphere a r) (sphere b s) (k \<circ> (h \<circ> f)) (k \<circ> (\<lambda>x. c))"
       
  3956     by (rule homotopic_compose_continuous_left [OF _ contk kim])
       
  3957   then have "homotopic_with (\<lambda>z. True) (sphere a r) (sphere b s) f (\<lambda>x. k c)"
       
  3958     apply (rule homotopic_with_eq, auto)
       
  3959     by (metis fim hk homeomorphism_def image_subset_iff mem_sphere)
       
  3960   then show ?thesis
       
  3961     by (metis that)
  3896 qed
  3962 qed
  3897 
  3963 
  3898 
  3964 
  3899 subsection\<open>Holomorphic logarithms and square roots.\<close>
  3965 subsection\<open>Holomorphic logarithms and square roots.\<close>
  3900 
  3966