equal
deleted
inserted
replaced
6 |
6 |
7 theory Homotopy |
7 theory Homotopy |
8 imports Path_Connected Continuum_Not_Denumerable Product_Topology |
8 imports Path_Connected Continuum_Not_Denumerable Product_Topology |
9 begin |
9 begin |
10 |
10 |
11 definition%important homotopic_with |
11 definition\<^marker>\<open>tag important\<close> homotopic_with |
12 where |
12 where |
13 "homotopic_with P X Y f g \<equiv> |
13 "homotopic_with P X Y f g \<equiv> |
14 (\<exists>h. continuous_map (prod_topology (subtopology euclideanreal {0..1}) X) Y h \<and> |
14 (\<exists>h. continuous_map (prod_topology (subtopology euclideanreal {0..1}) X) Y h \<and> |
15 (\<forall>x. h(0, x) = f x) \<and> |
15 (\<forall>x. h(0, x) = f x) \<and> |
16 (\<forall>x. h(1, x) = g x) \<and> |
16 (\<forall>x. h(1, x) = g x) \<and> |
48 shows "continuous_map Y Z (h \<circ> Pair t)" |
48 shows "continuous_map Y Z (h \<circ> Pair t)" |
49 apply (intro continuous_map_compose [OF _ h] continuous_map_id [unfolded id_def] continuous_intros) |
49 apply (intro continuous_map_compose [OF _ h] continuous_map_id [unfolded id_def] continuous_intros) |
50 apply (simp add: t) |
50 apply (simp add: t) |
51 done |
51 done |
52 |
52 |
53 subsection%unimportant\<open>Trivial properties\<close> |
53 subsection\<^marker>\<open>tag unimportant\<close>\<open>Trivial properties\<close> |
54 |
54 |
55 text \<open>We often want to just localize the ending function equality or whatever.\<close> |
55 text \<open>We often want to just localize the ending function equality or whatever.\<close> |
56 text%important \<open>%whitespace\<close> |
56 text\<^marker>\<open>tag important\<close> \<open>%whitespace\<close> |
57 proposition homotopic_with: |
57 proposition homotopic_with: |
58 assumes "\<And>h k. (\<And>x. x \<in> topspace X \<Longrightarrow> h x = k x) \<Longrightarrow> (P h \<longleftrightarrow> P k)" |
58 assumes "\<And>h k. (\<And>x. x \<in> topspace X \<Longrightarrow> h x = k x) \<Longrightarrow> (P h \<longleftrightarrow> P k)" |
59 shows "homotopic_with P X Y p q \<longleftrightarrow> |
59 shows "homotopic_with P X Y p q \<longleftrightarrow> |
60 (\<exists>h. continuous_map (prod_topology (subtopology euclideanreal {0..1}) X) Y h \<and> |
60 (\<exists>h. continuous_map (prod_topology (subtopology euclideanreal {0..1}) X) Y h \<and> |
61 (\<forall>x \<in> topspace X. h(0,x) = p x) \<and> |
61 (\<forall>x \<in> topspace X. h(0,x) = p x) \<and> |
514 |
514 |
515 |
515 |
516 subsection\<open>Homotopy of paths, maintaining the same endpoints\<close> |
516 subsection\<open>Homotopy of paths, maintaining the same endpoints\<close> |
517 |
517 |
518 |
518 |
519 definition%important homotopic_paths :: "['a set, real \<Rightarrow> 'a, real \<Rightarrow> 'a::topological_space] \<Rightarrow> bool" |
519 definition\<^marker>\<open>tag important\<close> homotopic_paths :: "['a set, real \<Rightarrow> 'a, real \<Rightarrow> 'a::topological_space] \<Rightarrow> bool" |
520 where |
520 where |
521 "homotopic_paths s p q \<equiv> |
521 "homotopic_paths s p q \<equiv> |
522 homotopic_with_canon (\<lambda>r. pathstart r = pathstart p \<and> pathfinish r = pathfinish p) {0..1} s p q" |
522 homotopic_with_canon (\<lambda>r. pathstart r = pathstart p \<and> pathfinish r = pathfinish p) {0..1} s p q" |
523 |
523 |
524 lemma homotopic_paths: |
524 lemma homotopic_paths: |
671 by (simp add: homotopic_with_compose_continuous_map_left pathfinish_compose pathstart_compose) |
671 by (simp add: homotopic_with_compose_continuous_map_left pathfinish_compose pathstart_compose) |
672 |
672 |
673 |
673 |
674 subsection\<open>Group properties for homotopy of paths\<close> |
674 subsection\<open>Group properties for homotopy of paths\<close> |
675 |
675 |
676 text%important\<open>So taking equivalence classes under homotopy would give the fundamental group\<close> |
676 text\<^marker>\<open>tag important\<close>\<open>So taking equivalence classes under homotopy would give the fundamental group\<close> |
677 |
677 |
678 proposition homotopic_paths_rid: |
678 proposition homotopic_paths_rid: |
679 "\<lbrakk>path p; path_image p \<subseteq> s\<rbrakk> \<Longrightarrow> homotopic_paths s (p +++ linepath (pathfinish p) (pathfinish p)) p" |
679 "\<lbrakk>path p; path_image p \<subseteq> s\<rbrakk> \<Longrightarrow> homotopic_paths s (p +++ linepath (pathfinish p) (pathfinish p)) p" |
680 apply (subst homotopic_paths_sym) |
680 apply (subst homotopic_paths_sym) |
681 apply (rule homotopic_paths_reparametrize [where f = "\<lambda>t. if t \<le> 1 / 2 then 2 *\<^sub>R t else 1"]) |
681 apply (rule homotopic_paths_reparametrize [where f = "\<lambda>t. if t \<le> 1 / 2 then 2 *\<^sub>R t else 1"]) |
734 using homotopic_paths_rinv [of "reversepath p" s] assms by simp |
734 using homotopic_paths_rinv [of "reversepath p" s] assms by simp |
735 |
735 |
736 |
736 |
737 subsection\<open>Homotopy of loops without requiring preservation of endpoints\<close> |
737 subsection\<open>Homotopy of loops without requiring preservation of endpoints\<close> |
738 |
738 |
739 definition%important homotopic_loops :: "'a::topological_space set \<Rightarrow> (real \<Rightarrow> 'a) \<Rightarrow> (real \<Rightarrow> 'a) \<Rightarrow> bool" where |
739 definition\<^marker>\<open>tag important\<close> homotopic_loops :: "'a::topological_space set \<Rightarrow> (real \<Rightarrow> 'a) \<Rightarrow> (real \<Rightarrow> 'a) \<Rightarrow> bool" where |
740 "homotopic_loops s p q \<equiv> |
740 "homotopic_loops s p q \<equiv> |
741 homotopic_with_canon (\<lambda>r. pathfinish r = pathstart r) {0..1} s p q" |
741 homotopic_with_canon (\<lambda>r. pathfinish r = pathstart r) {0..1} s p q" |
742 |
742 |
743 lemma homotopic_loops: |
743 lemma homotopic_loops: |
744 "homotopic_loops s p q \<longleftrightarrow> |
744 "homotopic_loops s p q \<longleftrightarrow> |
969 using \<open>path q\<close> homotopic_loops_imp_path loops path_join_path_ends by fastforce |
969 using \<open>path q\<close> homotopic_loops_imp_path loops path_join_path_ends by fastforce |
970 qed |
970 qed |
971 qed |
971 qed |
972 |
972 |
973 |
973 |
974 subsection%unimportant\<open>Homotopy of "nearby" function, paths and loops\<close> |
974 subsection\<^marker>\<open>tag unimportant\<close>\<open>Homotopy of "nearby" function, paths and loops\<close> |
975 |
975 |
976 lemma homotopic_with_linear: |
976 lemma homotopic_with_linear: |
977 fixes f g :: "_ \<Rightarrow> 'b::real_normed_vector" |
977 fixes f g :: "_ \<Rightarrow> 'b::real_normed_vector" |
978 assumes contf: "continuous_on s f" |
978 assumes contf: "continuous_on s f" |
979 and contg:"continuous_on s g" |
979 and contg:"continuous_on s g" |
1171 by (auto simp: path_connected_def path_component_def homotopic_points_eq_path_component) |
1171 by (auto simp: path_connected_def path_component_def homotopic_points_eq_path_component) |
1172 |
1172 |
1173 |
1173 |
1174 subsection\<open>Simply connected sets\<close> |
1174 subsection\<open>Simply connected sets\<close> |
1175 |
1175 |
1176 text%important\<open>defined as "all loops are homotopic (as loops)\<close> |
1176 text\<^marker>\<open>tag important\<close>\<open>defined as "all loops are homotopic (as loops)\<close> |
1177 |
1177 |
1178 definition%important simply_connected where |
1178 definition\<^marker>\<open>tag important\<close> simply_connected where |
1179 "simply_connected S \<equiv> |
1179 "simply_connected S \<equiv> |
1180 \<forall>p q. path p \<and> pathfinish p = pathstart p \<and> path_image p \<subseteq> S \<and> |
1180 \<forall>p q. path p \<and> pathfinish p = pathstart p \<and> path_image p \<subseteq> S \<and> |
1181 path q \<and> pathfinish q = pathstart q \<and> path_image q \<subseteq> S |
1181 path q \<and> pathfinish q = pathstart q \<and> path_image q \<subseteq> S |
1182 \<longrightarrow> homotopic_loops S p q" |
1182 \<longrightarrow> homotopic_loops S p q" |
1183 |
1183 |
1355 qed |
1355 qed |
1356 |
1356 |
1357 |
1357 |
1358 subsection\<open>Contractible sets\<close> |
1358 subsection\<open>Contractible sets\<close> |
1359 |
1359 |
1360 definition%important contractible where |
1360 definition\<^marker>\<open>tag important\<close> contractible where |
1361 "contractible S \<equiv> \<exists>a. homotopic_with_canon (\<lambda>x. True) S S id (\<lambda>x. a)" |
1361 "contractible S \<equiv> \<exists>a. homotopic_with_canon (\<lambda>x. True) S S id (\<lambda>x. a)" |
1362 |
1362 |
1363 proposition contractible_imp_simply_connected: |
1363 proposition contractible_imp_simply_connected: |
1364 fixes S :: "_::real_normed_vector set" |
1364 fixes S :: "_::real_normed_vector set" |
1365 assumes "contractible S" shows "simply_connected S" |
1365 assumes "contractible S" shows "simply_connected S" |
1596 qed |
1596 qed |
1597 |
1597 |
1598 |
1598 |
1599 subsection\<open>Local versions of topological properties in general\<close> |
1599 subsection\<open>Local versions of topological properties in general\<close> |
1600 |
1600 |
1601 definition%important locally :: "('a::topological_space set \<Rightarrow> bool) \<Rightarrow> 'a set \<Rightarrow> bool" |
1601 definition\<^marker>\<open>tag important\<close> locally :: "('a::topological_space set \<Rightarrow> bool) \<Rightarrow> 'a set \<Rightarrow> bool" |
1602 where |
1602 where |
1603 "locally P S \<equiv> |
1603 "locally P S \<equiv> |
1604 \<forall>w x. openin (top_of_set S) w \<and> x \<in> w |
1604 \<forall>w x. openin (top_of_set S) w \<and> x \<in> w |
1605 \<longrightarrow> (\<exists>u v. openin (top_of_set S) u \<and> P v \<and> |
1605 \<longrightarrow> (\<exists>u v. openin (top_of_set S) u \<and> P v \<and> |
1606 x \<in> u \<and> u \<subseteq> v \<and> v \<subseteq> w)" |
1606 x \<in> u \<and> u \<subseteq> v \<and> v \<subseteq> w)" |
2973 qed |
2973 qed |
2974 ultimately show "openin (top_of_set (f ` S)) (path_component_set U y)" |
2974 ultimately show "openin (top_of_set (f ` S)) (path_component_set U y)" |
2975 by metis |
2975 by metis |
2976 qed |
2976 qed |
2977 |
2977 |
2978 subsection%unimportant\<open>Components, continuity, openin, closedin\<close> |
2978 subsection\<^marker>\<open>tag unimportant\<close>\<open>Components, continuity, openin, closedin\<close> |
2979 |
2979 |
2980 lemma continuous_on_components_gen: |
2980 lemma continuous_on_components_gen: |
2981 fixes f :: "'a::topological_space \<Rightarrow> 'b::topological_space" |
2981 fixes f :: "'a::topological_space \<Rightarrow> 'b::topological_space" |
2982 assumes "\<And>c. c \<in> components S \<Longrightarrow> |
2982 assumes "\<And>c. c \<in> components S \<Longrightarrow> |
2983 openin (top_of_set S) c \<and> continuous_on c f" |
2983 openin (top_of_set S) c \<and> continuous_on c f" |
3306 qed |
3306 qed |
3307 |
3307 |
3308 |
3308 |
3309 subsection\<open>Retracts, in a general sense, preserve (co)homotopic triviality)\<close> |
3309 subsection\<open>Retracts, in a general sense, preserve (co)homotopic triviality)\<close> |
3310 |
3310 |
3311 locale%important Retracts = |
3311 locale\<^marker>\<open>tag important\<close> Retracts = |
3312 fixes s h t k |
3312 fixes s h t k |
3313 assumes conth: "continuous_on s h" |
3313 assumes conth: "continuous_on s h" |
3314 and imh: "h ` s = t" |
3314 and imh: "h ` s = t" |
3315 and contk: "continuous_on t k" |
3315 and contk: "continuous_on t k" |
3316 and imk: "k ` t \<subseteq> s" |
3316 and imk: "k ` t \<subseteq> s" |
3472 |
3472 |
3473 subsection\<open>Homotopy equivalence\<close> |
3473 subsection\<open>Homotopy equivalence\<close> |
3474 |
3474 |
3475 subsection\<open>Homotopy equivalence of topological spaces.\<close> |
3475 subsection\<open>Homotopy equivalence of topological spaces.\<close> |
3476 |
3476 |
3477 definition%important homotopy_equivalent_space |
3477 definition\<^marker>\<open>tag important\<close> homotopy_equivalent_space |
3478 (infix "homotopy'_equivalent'_space" 50) |
3478 (infix "homotopy'_equivalent'_space" 50) |
3479 where "X homotopy_equivalent_space Y \<equiv> |
3479 where "X homotopy_equivalent_space Y \<equiv> |
3480 (\<exists>f g. continuous_map X Y f \<and> |
3480 (\<exists>f g. continuous_map X Y f \<and> |
3481 continuous_map Y X g \<and> |
3481 continuous_map Y X g \<and> |
3482 homotopic_with (\<lambda>x. True) X X (g \<circ> f) id \<and> |
3482 homotopic_with (\<lambda>x. True) X X (g \<circ> f) id \<and> |
3895 then show ?thesis |
3895 then show ?thesis |
3896 by simp |
3896 by simp |
3897 qed |
3897 qed |
3898 |
3898 |
3899 |
3899 |
3900 abbreviation%important homotopy_eqv :: "'a::topological_space set \<Rightarrow> 'b::topological_space set \<Rightarrow> bool" |
3900 abbreviation\<^marker>\<open>tag important\<close> homotopy_eqv :: "'a::topological_space set \<Rightarrow> 'b::topological_space set \<Rightarrow> bool" |
3901 (infix "homotopy'_eqv" 50) |
3901 (infix "homotopy'_eqv" 50) |
3902 where "S homotopy_eqv T \<equiv> top_of_set S homotopy_equivalent_space top_of_set T" |
3902 where "S homotopy_eqv T \<equiv> top_of_set S homotopy_equivalent_space top_of_set T" |
3903 |
3903 |
3904 |
3904 |
3905 |
3905 |
4142 fixes S :: "'a::real_normed_vector set" and T :: "'b::real_normed_vector set" |
4142 fixes S :: "'a::real_normed_vector set" and T :: "'b::real_normed_vector set" |
4143 shows "\<lbrakk>contractible S; S homeomorphic T\<rbrakk> \<Longrightarrow> contractible T" |
4143 shows "\<lbrakk>contractible S; S homeomorphic T\<rbrakk> \<Longrightarrow> contractible T" |
4144 by (metis homeomorphic_contractible_eq) |
4144 by (metis homeomorphic_contractible_eq) |
4145 |
4145 |
4146 |
4146 |
4147 subsection%unimportant\<open>Misc other results\<close> |
4147 subsection\<^marker>\<open>tag unimportant\<close>\<open>Misc other results\<close> |
4148 |
4148 |
4149 lemma bounded_connected_Compl_real: |
4149 lemma bounded_connected_Compl_real: |
4150 fixes S :: "real set" |
4150 fixes S :: "real set" |
4151 assumes "bounded S" and conn: "connected(- S)" |
4151 assumes "bounded S" and conn: "connected(- S)" |
4152 shows "S = {}" |
4152 shows "S = {}" |
4192 then show ?thesis |
4192 then show ?thesis |
4193 by blast |
4193 by blast |
4194 qed |
4194 qed |
4195 |
4195 |
4196 |
4196 |
4197 subsection%unimportant\<open>Some Uncountable Sets\<close> |
4197 subsection\<^marker>\<open>tag unimportant\<close>\<open>Some Uncountable Sets\<close> |
4198 |
4198 |
4199 lemma uncountable_closed_segment: |
4199 lemma uncountable_closed_segment: |
4200 fixes a :: "'a::real_normed_vector" |
4200 fixes a :: "'a::real_normed_vector" |
4201 assumes "a \<noteq> b" shows "uncountable (closed_segment a b)" |
4201 assumes "a \<noteq> b" shows "uncountable (closed_segment a b)" |
4202 unfolding path_image_linepath [symmetric] path_image_def |
4202 unfolding path_image_linepath [symmetric] path_image_def |
4331 assumes "arc g" |
4331 assumes "arc g" |
4332 shows "uncountable (path_image g)" |
4332 shows "uncountable (path_image g)" |
4333 by (simp add: arc_imp_simple_path assms simple_path_image_uncountable) |
4333 by (simp add: arc_imp_simple_path assms simple_path_image_uncountable) |
4334 |
4334 |
4335 |
4335 |
4336 subsection%unimportant\<open> Some simple positive connection theorems\<close> |
4336 subsection\<^marker>\<open>tag unimportant\<close>\<open> Some simple positive connection theorems\<close> |
4337 |
4337 |
4338 proposition path_connected_convex_diff_countable: |
4338 proposition path_connected_convex_diff_countable: |
4339 fixes U :: "'a::euclidean_space set" |
4339 fixes U :: "'a::euclidean_space set" |
4340 assumes "convex U" "\<not> collinear U" "countable S" |
4340 assumes "convex U" "\<not> collinear U" "countable S" |
4341 shows "path_connected(U - S)" |
4341 shows "path_connected(U - S)" |
4596 shows "connected(S - T)" |
4596 shows "connected(S - T)" |
4597 by (simp add: assms path_connected_imp_connected path_connected_open_diff_countable) |
4597 by (simp add: assms path_connected_imp_connected path_connected_open_diff_countable) |
4598 |
4598 |
4599 |
4599 |
4600 |
4600 |
4601 subsection%unimportant \<open>Self-homeomorphisms shuffling points about\<close> |
4601 subsection\<^marker>\<open>tag unimportant\<close> \<open>Self-homeomorphisms shuffling points about\<close> |
4602 |
4602 |
4603 subsubsection%unimportant\<open>The theorem \<open>homeomorphism_moving_points_exists\<close>\<close> |
4603 subsubsection\<^marker>\<open>tag unimportant\<close>\<open>The theorem \<open>homeomorphism_moving_points_exists\<close>\<close> |
4604 |
4604 |
4605 lemma homeomorphism_moving_point_1: |
4605 lemma homeomorphism_moving_point_1: |
4606 fixes a :: "'a::euclidean_space" |
4606 fixes a :: "'a::euclidean_space" |
4607 assumes "affine T" "a \<in> T" and u: "u \<in> ball a r \<inter> T" |
4607 assumes "affine T" "a \<in> T" and u: "u \<in> ball a r \<inter> T" |
4608 obtains f g where "homeomorphism (cball a r \<inter> T) (cball a r \<inter> T) f g" |
4608 obtains f g where "homeomorphism (cball a r \<inter> T) (cball a r \<inter> T) f g" |
4728 using \<open>r > 0\<close> |
4728 using \<open>r > 0\<close> |
4729 apply (simp_all add: f_def dist_norm norm_minus_commute) |
4729 apply (simp_all add: f_def dist_norm norm_minus_commute) |
4730 done |
4730 done |
4731 qed |
4731 qed |
4732 |
4732 |
4733 corollary%unimportant homeomorphism_moving_point_2: |
4733 corollary\<^marker>\<open>tag unimportant\<close> homeomorphism_moving_point_2: |
4734 fixes a :: "'a::euclidean_space" |
4734 fixes a :: "'a::euclidean_space" |
4735 assumes "affine T" "a \<in> T" and u: "u \<in> ball a r \<inter> T" and v: "v \<in> ball a r \<inter> T" |
4735 assumes "affine T" "a \<in> T" and u: "u \<in> ball a r \<inter> T" and v: "v \<in> ball a r \<inter> T" |
4736 obtains f g where "homeomorphism (cball a r \<inter> T) (cball a r \<inter> T) f g" |
4736 obtains f g where "homeomorphism (cball a r \<inter> T) (cball a r \<inter> T) f g" |
4737 "f u = v" "\<And>x. \<lbrakk>x \<in> sphere a r; x \<in> T\<rbrakk> \<Longrightarrow> f x = x" |
4737 "f u = v" "\<And>x. \<lbrakk>x \<in> sphere a r; x \<in> T\<rbrakk> \<Longrightarrow> f x = x" |
4738 proof - |
4738 proof - |
4756 using f1 f2 hom1 homeomorphism_apply1 by fastforce |
4756 using f1 f2 hom1 homeomorphism_apply1 by fastforce |
4757 qed |
4757 qed |
4758 qed |
4758 qed |
4759 |
4759 |
4760 |
4760 |
4761 corollary%unimportant homeomorphism_moving_point_3: |
4761 corollary\<^marker>\<open>tag unimportant\<close> homeomorphism_moving_point_3: |
4762 fixes a :: "'a::euclidean_space" |
4762 fixes a :: "'a::euclidean_space" |
4763 assumes "affine T" "a \<in> T" and ST: "ball a r \<inter> T \<subseteq> S" "S \<subseteq> T" |
4763 assumes "affine T" "a \<in> T" and ST: "ball a r \<inter> T \<subseteq> S" "S \<subseteq> T" |
4764 and u: "u \<in> ball a r \<inter> T" and v: "v \<in> ball a r \<inter> T" |
4764 and u: "u \<in> ball a r \<inter> T" and v: "v \<in> ball a r \<inter> T" |
4765 obtains f g where "homeomorphism S S f g" |
4765 obtains f g where "homeomorphism S S f g" |
4766 "f u = v" "{x. \<not> (f x = x \<and> g x = x)} \<subseteq> ball a r \<inter> T" |
4766 "f u = v" "{x. \<not> (f x = x \<and> g x = x)} \<subseteq> ball a r \<inter> T" |
4834 by (auto simp: ff_def gg_def) |
4834 by (auto simp: ff_def gg_def) |
4835 qed |
4835 qed |
4836 qed |
4836 qed |
4837 |
4837 |
4838 |
4838 |
4839 proposition%unimportant homeomorphism_moving_point: |
4839 proposition\<^marker>\<open>tag unimportant\<close> homeomorphism_moving_point: |
4840 fixes a :: "'a::euclidean_space" |
4840 fixes a :: "'a::euclidean_space" |
4841 assumes ope: "openin (top_of_set (affine hull S)) S" |
4841 assumes ope: "openin (top_of_set (affine hull S)) S" |
4842 and "S \<subseteq> T" |
4842 and "S \<subseteq> T" |
4843 and TS: "T \<subseteq> affine hull S" |
4843 and TS: "T \<subseteq> affine hull S" |
4844 and S: "connected S" "a \<in> S" "b \<in> S" |
4844 and S: "connected S" "a \<in> S" "b \<in> S" |
4990 then show "bounded {x. \<not> ((h \<circ> f) x = x \<and> (g \<circ> k) x = x)}" |
4990 then show "bounded {x. \<not> ((h \<circ> f) x = x \<and> (g \<circ> k) x = x)}" |
4991 by (rule bounded_subset) auto |
4991 by (rule bounded_subset) auto |
4992 qed |
4992 qed |
4993 qed |
4993 qed |
4994 |
4994 |
4995 proposition%unimportant homeomorphism_moving_points_exists: |
4995 proposition\<^marker>\<open>tag unimportant\<close> homeomorphism_moving_points_exists: |
4996 fixes S :: "'a::euclidean_space set" |
4996 fixes S :: "'a::euclidean_space set" |
4997 assumes 2: "2 \<le> DIM('a)" "open S" "connected S" "S \<subseteq> T" "finite K" |
4997 assumes 2: "2 \<le> DIM('a)" "open S" "connected S" "S \<subseteq> T" "finite K" |
4998 and KS: "\<And>i. i \<in> K \<Longrightarrow> x i \<in> S \<and> y i \<in> S" |
4998 and KS: "\<And>i. i \<in> K \<Longrightarrow> x i \<in> S \<and> y i \<in> S" |
4999 and pw: "pairwise (\<lambda>i j. (x i \<noteq> x j) \<and> (y i \<noteq> y j)) K" |
4999 and pw: "pairwise (\<lambda>i j. (x i \<noteq> x j) \<and> (y i \<noteq> y j)) K" |
5000 and S: "S \<subseteq> T" "T \<subseteq> affine hull S" "connected S" |
5000 and S: "S \<subseteq> T" "T \<subseteq> affine hull S" "connected S" |
5019 by linarith |
5019 by linarith |
5020 then show ?thesis |
5020 then show ?thesis |
5021 using homeomorphism_moving_points_exists_gen [OF \<open>finite K\<close> KS pw _ ope S] that by fastforce |
5021 using homeomorphism_moving_points_exists_gen [OF \<open>finite K\<close> KS pw _ ope S] that by fastforce |
5022 qed |
5022 qed |
5023 |
5023 |
5024 subsubsection%unimportant\<open>The theorem \<open>homeomorphism_grouping_points_exists\<close>\<close> |
5024 subsubsection\<^marker>\<open>tag unimportant\<close>\<open>The theorem \<open>homeomorphism_grouping_points_exists\<close>\<close> |
5025 |
5025 |
5026 lemma homeomorphism_grouping_point_1: |
5026 lemma homeomorphism_grouping_point_1: |
5027 fixes a::real and c::real |
5027 fixes a::real and c::real |
5028 assumes "a < b" "c < d" |
5028 assumes "a < b" "c < d" |
5029 obtains f g where "homeomorphism (cbox a b) (cbox c d) f g" "f a = c" "f b = d" |
5029 obtains f g where "homeomorphism (cbox a b) (cbox c d) f g" "f a = c" "f b = d" |
5256 apply (auto simp: f'_def g'_def) |
5256 apply (auto simp: f'_def g'_def) |
5257 done |
5257 done |
5258 qed |
5258 qed |
5259 qed |
5259 qed |
5260 |
5260 |
5261 proposition%unimportant homeomorphism_grouping_points_exists: |
5261 proposition\<^marker>\<open>tag unimportant\<close> homeomorphism_grouping_points_exists: |
5262 fixes S :: "'a::euclidean_space set" |
5262 fixes S :: "'a::euclidean_space set" |
5263 assumes "open U" "open S" "connected S" "U \<noteq> {}" "finite K" "K \<subseteq> S" "U \<subseteq> S" "S \<subseteq> T" |
5263 assumes "open U" "open S" "connected S" "U \<noteq> {}" "finite K" "K \<subseteq> S" "U \<subseteq> S" "S \<subseteq> T" |
5264 obtains f g where "homeomorphism T T f g" "{x. (\<not> (f x = x \<and> g x = x))} \<subseteq> S" |
5264 obtains f g where "homeomorphism T T f g" "{x. (\<not> (f x = x \<and> g x = x))} \<subseteq> S" |
5265 "bounded {x. (\<not> (f x = x \<and> g x = x))}" "\<And>x. x \<in> K \<Longrightarrow> f x \<in> U" |
5265 "bounded {x. (\<not> (f x = x \<and> g x = x))}" "\<And>x. x \<in> K \<Longrightarrow> f x \<in> U" |
5266 proof (cases "2 \<le> DIM('a)") |
5266 proof (cases "2 \<le> DIM('a)") |
5335 using f hj by fastforce |
5335 using f hj by fastforce |
5336 qed |
5336 qed |
5337 qed |
5337 qed |
5338 |
5338 |
5339 |
5339 |
5340 proposition%unimportant homeomorphism_grouping_points_exists_gen: |
5340 proposition\<^marker>\<open>tag unimportant\<close> homeomorphism_grouping_points_exists_gen: |
5341 fixes S :: "'a::euclidean_space set" |
5341 fixes S :: "'a::euclidean_space set" |
5342 assumes opeU: "openin (top_of_set S) U" |
5342 assumes opeU: "openin (top_of_set S) U" |
5343 and opeS: "openin (top_of_set (affine hull S)) S" |
5343 and opeS: "openin (top_of_set (affine hull S)) S" |
5344 and "U \<noteq> {}" "finite K" "K \<subseteq> S" and S: "S \<subseteq> T" "T \<subseteq> affine hull S" "connected S" |
5344 and "U \<noteq> {}" "finite K" "K \<subseteq> S" and S: "S \<subseteq> T" "T \<subseteq> affine hull S" "connected S" |
5345 obtains f g where "homeomorphism T T f g" "{x. (\<not> (f x = x \<and> g x = x))} \<subseteq> S" |
5345 obtains f g where "homeomorphism T T f g" "{x. (\<not> (f x = x \<and> g x = x))} \<subseteq> S" |