src/HOL/Analysis/Homeomorphism.thy
changeset 69064 5840724b1d71
parent 68833 fde093888c16
child 69313 b021008c5397
equal deleted inserted replaced
69045:8c240fdeffcb 69064:5840724b1d71
   833   then have inj: "inj (\<lambda>x::'a. x /\<^sub>R norm (a - b))"
   833   then have inj: "inj (\<lambda>x::'a. x /\<^sub>R norm (a - b))"
   834     by (simp add: inj_on_def)
   834     by (simp add: inj_on_def)
   835   have "((sphere a r \<inter> T) - {b}) homeomorphic
   835   have "((sphere a r \<inter> T) - {b}) homeomorphic
   836         (+) (-a) ` ((sphere a r \<inter> T) - {b})"
   836         (+) (-a) ` ((sphere a r \<inter> T) - {b})"
   837     by (rule homeomorphic_translation)
   837     by (rule homeomorphic_translation)
   838   also have "... homeomorphic ( *\<^sub>R) (inverse r) ` (+) (- a) ` (sphere a r \<inter> T - {b})"
   838   also have "... homeomorphic (*\<^sub>R) (inverse r) ` (+) (- a) ` (sphere a r \<inter> T - {b})"
   839     by (metis \<open>0 < r\<close> homeomorphic_scaling inverse_inverse_eq inverse_zero less_irrefl)
   839     by (metis \<open>0 < r\<close> homeomorphic_scaling inverse_inverse_eq inverse_zero less_irrefl)
   840   also have "... = sphere 0 1 \<inter> (( *\<^sub>R) (inverse r) ` (+) (- a) ` T) - {(b - a) /\<^sub>R r}"
   840   also have "... = sphere 0 1 \<inter> ((*\<^sub>R) (inverse r) ` (+) (- a) ` T) - {(b - a) /\<^sub>R r}"
   841     using assms by (auto simp: dist_norm norm_minus_commute divide_simps)
   841     using assms by (auto simp: dist_norm norm_minus_commute divide_simps)
   842   also have "... homeomorphic p"
   842   also have "... homeomorphic p"
   843     apply (rule homeomorphic_punctured_affine_sphere_affine_01)
   843     apply (rule homeomorphic_punctured_affine_sphere_affine_01)
   844     using assms
   844     using assms
   845     apply (auto simp: dist_norm norm_minus_commute affine_scaling affine_translation [symmetric] aff_dim_translation_eq inj)
   845     apply (auto simp: dist_norm norm_minus_commute affine_scaling affine_translation [symmetric] aff_dim_translation_eq inj)
  2208       obtain q' where "path q'" "path_image q' \<subseteq> C"
  2208       obtain q' where "path q'" "path_image q' \<subseteq> C"
  2209                 and "pathstart q' = pathstart q" "pathfinish q' = pathfinish q"
  2209                 and "pathstart q' = pathstart q" "pathfinish q' = pathfinish q"
  2210                 and pq'_eq: "\<And>t. t \<in> {0..1} \<Longrightarrow> p (q' t) = (f \<circ> g +++ reversepath g') t"
  2210                 and pq'_eq: "\<And>t. t \<in> {0..1} \<Longrightarrow> p (q' t) = (f \<circ> g +++ reversepath g') t"
  2211         using covering_space_lift_homotopic_path [OF cov homotopic_paths_sym [OF homS] \<open>path q\<close> piq refl refl]
  2211         using covering_space_lift_homotopic_path [OF cov homotopic_paths_sym [OF homS] \<open>path q\<close> piq refl refl]
  2212         by auto
  2212         by auto
  2213       have "q' t = (h \<circ> ( *\<^sub>R) 2) t" if "0 \<le> t" "t \<le> 1/2" for t
  2213       have "q' t = (h \<circ> (*\<^sub>R) 2) t" if "0 \<le> t" "t \<le> 1/2" for t
  2214       proof (rule covering_space_lift_unique [OF cov, of q' 0 "h \<circ> ( *\<^sub>R) 2" "{0..1/2}" "f \<circ> g \<circ> ( *\<^sub>R) 2" t])
  2214       proof (rule covering_space_lift_unique [OF cov, of q' 0 "h \<circ> (*\<^sub>R) 2" "{0..1/2}" "f \<circ> g \<circ> (*\<^sub>R) 2" t])
  2215         show "q' 0 = (h \<circ> ( *\<^sub>R) 2) 0"
  2215         show "q' 0 = (h \<circ> (*\<^sub>R) 2) 0"
  2216           by (metis \<open>pathstart q' = pathstart q\<close> comp_def g h pastq pathstart_def pth_4(2))
  2216           by (metis \<open>pathstart q' = pathstart q\<close> comp_def g h pastq pathstart_def pth_4(2))
  2217         show "continuous_on {0..1/2} (f \<circ> g \<circ> ( *\<^sub>R) 2)"
  2217         show "continuous_on {0..1/2} (f \<circ> g \<circ> (*\<^sub>R) 2)"
  2218           apply (intro continuous_intros continuous_on_compose continuous_on_path [OF \<open>path g\<close>] continuous_on_subset [OF contf])
  2218           apply (intro continuous_intros continuous_on_compose continuous_on_path [OF \<open>path g\<close>] continuous_on_subset [OF contf])
  2219           using g(2) path_image_def by fastforce+
  2219           using g(2) path_image_def by fastforce+
  2220         show "(f \<circ> g \<circ> ( *\<^sub>R) 2) ` {0..1/2} \<subseteq> S"
  2220         show "(f \<circ> g \<circ> (*\<^sub>R) 2) ` {0..1/2} \<subseteq> S"
  2221           using g(2) path_image_def fim by fastforce
  2221           using g(2) path_image_def fim by fastforce
  2222         show "(h \<circ> ( *\<^sub>R) 2) ` {0..1/2} \<subseteq> C"
  2222         show "(h \<circ> (*\<^sub>R) 2) ` {0..1/2} \<subseteq> C"
  2223           using h path_image_def by fastforce
  2223           using h path_image_def by fastforce
  2224         show "q' ` {0..1/2} \<subseteq> C"
  2224         show "q' ` {0..1/2} \<subseteq> C"
  2225           using \<open>path_image q' \<subseteq> C\<close> path_image_def by fastforce
  2225           using \<open>path_image q' \<subseteq> C\<close> path_image_def by fastforce
  2226         show "\<And>x. x \<in> {0..1/2} \<Longrightarrow> (f \<circ> g \<circ> ( *\<^sub>R) 2) x = p (q' x)"
  2226         show "\<And>x. x \<in> {0..1/2} \<Longrightarrow> (f \<circ> g \<circ> (*\<^sub>R) 2) x = p (q' x)"
  2227           by (auto simp: joinpaths_def pq'_eq)
  2227           by (auto simp: joinpaths_def pq'_eq)
  2228         show "\<And>x. x \<in> {0..1/2} \<Longrightarrow> (f \<circ> g \<circ> ( *\<^sub>R) 2) x = p ((h \<circ> ( *\<^sub>R) 2) x)"
  2228         show "\<And>x. x \<in> {0..1/2} \<Longrightarrow> (f \<circ> g \<circ> (*\<^sub>R) 2) x = p ((h \<circ> (*\<^sub>R) 2) x)"
  2229           by (simp add: phg)
  2229           by (simp add: phg)
  2230         show "continuous_on {0..1/2} q'"
  2230         show "continuous_on {0..1/2} q'"
  2231           by (simp add: continuous_on_path \<open>path q'\<close>)
  2231           by (simp add: continuous_on_path \<open>path q'\<close>)
  2232         show "continuous_on {0..1/2} (h \<circ> ( *\<^sub>R) 2)"
  2232         show "continuous_on {0..1/2} (h \<circ> (*\<^sub>R) 2)"
  2233           apply (intro continuous_intros continuous_on_compose continuous_on_path [OF \<open>path h\<close>], force)
  2233           apply (intro continuous_intros continuous_on_compose continuous_on_path [OF \<open>path h\<close>], force)
  2234           done
  2234           done
  2235       qed (use that in auto)
  2235       qed (use that in auto)
  2236       moreover have "q' t = (reversepath h' \<circ> (\<lambda>t. 2 *\<^sub>R t - 1)) t" if "1/2 < t" "t \<le> 1" for t
  2236       moreover have "q' t = (reversepath h' \<circ> (\<lambda>t. 2 *\<^sub>R t - 1)) t" if "1/2 < t" "t \<le> 1" for t
  2237       proof (rule covering_space_lift_unique [OF cov, of q' 1 "reversepath h' \<circ> (\<lambda>t. 2 *\<^sub>R t - 1)" "{1/2<..1}" "f \<circ> reversepath g' \<circ> (\<lambda>t. 2 *\<^sub>R t - 1)" t])
  2237       proof (rule covering_space_lift_unique [OF cov, of q' 1 "reversepath h' \<circ> (\<lambda>t. 2 *\<^sub>R t - 1)" "{1/2<..1}" "f \<circ> reversepath g' \<circ> (\<lambda>t. 2 *\<^sub>R t - 1)" t])