equal
deleted
inserted
replaced
549 then have "continuous_on {0..1} (p \<circ> f)" |
549 then have "continuous_on {0..1} (p \<circ> f)" |
550 using contf continuous_on_compose continuous_on_subset f01 by blast |
550 using contf continuous_on_compose continuous_on_subset f01 by blast |
551 then have "path q" |
551 then have "path q" |
552 by (simp add: path_def) (metis q continuous_on_cong) |
552 by (simp add: path_def) (metis q continuous_on_cong) |
553 have piqs: "path_image q \<subseteq> s" |
553 have piqs: "path_image q \<subseteq> s" |
554 by (metis (no_types, hide_lams) pips f01 image_subset_iff path_image_def q) |
554 by (metis (no_types, opaque_lifting) pips f01 image_subset_iff path_image_def q) |
555 have fb0: "\<And>a b. \<lbrakk>0 \<le> a; a \<le> 1; 0 \<le> b; b \<le> 1\<rbrakk> \<Longrightarrow> 0 \<le> (1 - a) * f b + a * b" |
555 have fb0: "\<And>a b. \<lbrakk>0 \<le> a; a \<le> 1; 0 \<le> b; b \<le> 1\<rbrakk> \<Longrightarrow> 0 \<le> (1 - a) * f b + a * b" |
556 using f01 by force |
556 using f01 by force |
557 have fb1: "\<lbrakk>0 \<le> a; a \<le> 1; 0 \<le> b; b \<le> 1\<rbrakk> \<Longrightarrow> (1 - a) * f b + a * b \<le> 1" for a b |
557 have fb1: "\<lbrakk>0 \<le> a; a \<le> 1; 0 \<le> b; b \<le> 1\<rbrakk> \<Longrightarrow> (1 - a) * f b + a * b \<le> 1" for a b |
558 using f01 [THEN subsetD, of "f b"] by (simp add: convex_bound_le) |
558 using f01 [THEN subsetD, of "f b"] by (simp add: convex_bound_le) |
559 have "homotopic_paths s q p" |
559 have "homotopic_paths s q p" |
1844 have 1: "openin (top_of_set S) ?A" |
1844 have 1: "openin (top_of_set S) ?A" |
1845 by (subst openin_subopen, blast) |
1845 by (subst openin_subopen, blast) |
1846 have 2: "openin (top_of_set S) ?B" |
1846 have 2: "openin (top_of_set S) ?B" |
1847 by (subst openin_subopen, blast) |
1847 by (subst openin_subopen, blast) |
1848 have \<section>: "?A \<inter> ?B = {}" |
1848 have \<section>: "?A \<inter> ?B = {}" |
1849 by (clarsimp simp: set_eq_iff) (metis (no_types, hide_lams) Int_iff opD openin_Int) |
1849 by (clarsimp simp: set_eq_iff) (metis (no_types, opaque_lifting) Int_iff opD openin_Int) |
1850 have *: "S \<subseteq> ?A \<union> ?B" |
1850 have *: "S \<subseteq> ?A \<union> ?B" |
1851 by clarsimp (meson opI) |
1851 by clarsimp (meson opI) |
1852 have "?A = {} \<or> ?B = {}" |
1852 have "?A = {} \<or> ?B = {}" |
1853 using \<open>connected S\<close> [unfolded connected_openin, simplified, rule_format, OF 1 \<section> * 2] |
1853 using \<open>connected S\<close> [unfolded connected_openin, simplified, rule_format, OF 1 \<section> * 2] |
1854 by blast |
1854 by blast |
1914 shows "locally (\<lambda>U. f constant_on U) S \<longleftrightarrow> f constant_on S" (is "?lhs = ?rhs") |
1914 shows "locally (\<lambda>U. f constant_on U) S \<longleftrightarrow> f constant_on S" (is "?lhs = ?rhs") |
1915 proof |
1915 proof |
1916 assume ?lhs |
1916 assume ?lhs |
1917 then have "\<And>a. a \<in> S \<Longrightarrow> \<exists>T. openin (top_of_set S) T \<and> a \<in> T \<and> (\<forall>x\<in>T. f x = f a)" |
1917 then have "\<And>a. a \<in> S \<Longrightarrow> \<exists>T. openin (top_of_set S) T \<and> a \<in> T \<and> (\<forall>x\<in>T. f x = f a)" |
1918 unfolding locally_def |
1918 unfolding locally_def |
1919 by (metis (mono_tags, hide_lams) constant_on_def constant_on_subset openin_subtopology_self) |
1919 by (metis (mono_tags, opaque_lifting) constant_on_def constant_on_subset openin_subtopology_self) |
1920 then show ?rhs |
1920 then show ?rhs |
1921 using assms |
1921 using assms |
1922 by (simp add: locally_constant_imp_constant) |
1922 by (simp add: locally_constant_imp_constant) |
1923 next |
1923 next |
1924 assume ?rhs then show ?lhs |
1924 assume ?rhs then show ?lhs |
4517 then have conv: "convex (ball x r \<inter> affine hull S)" |
4517 then have conv: "convex (ball x r \<inter> affine hull S)" |
4518 by (simp add: affine_imp_convex convex_Int) |
4518 by (simp add: affine_imp_convex convex_Int) |
4519 have "\<not> aff_dim (affine hull S) \<le> 1" |
4519 have "\<not> aff_dim (affine hull S) \<le> 1" |
4520 using \<open>\<not> collinear S\<close> collinear_aff_dim by auto |
4520 using \<open>\<not> collinear S\<close> collinear_aff_dim by auto |
4521 then have "\<not> aff_dim (ball x r \<inter> affine hull S) \<le> 1" |
4521 then have "\<not> aff_dim (ball x r \<inter> affine hull S) \<le> 1" |
4522 by (metis (no_types, hide_lams) aff_dim_convex_Int_open IntI open_ball \<open>0 < r\<close> aff_dim_affine_hull affine_affine_hull affine_imp_convex centre_in_ball empty_iff hull_subset inf_commute subsetCE that) |
4522 by (metis (no_types, opaque_lifting) aff_dim_convex_Int_open IntI open_ball \<open>0 < r\<close> aff_dim_affine_hull affine_affine_hull affine_imp_convex centre_in_ball empty_iff hull_subset inf_commute subsetCE that) |
4523 then have "\<not> collinear (ball x r \<inter> affine hull S)" |
4523 then have "\<not> collinear (ball x r \<inter> affine hull S)" |
4524 by (simp add: collinear_aff_dim) |
4524 by (simp add: collinear_aff_dim) |
4525 then have *: "path_connected ((ball x r \<inter> affine hull S) - T)" |
4525 then have *: "path_connected ((ball x r \<inter> affine hull S) - T)" |
4526 by (rule path_connected_convex_diff_countable [OF conv _ \<open>countable T\<close>]) |
4526 by (rule path_connected_convex_diff_countable [OF conv _ \<open>countable T\<close>]) |
4527 have ST: "ball x r \<inter> affine hull S - T \<subseteq> S - T" |
4527 have ST: "ball x r \<inter> affine hull S - T \<subseteq> S - T" |
5252 where "linear h" "linear j" |
5252 where "linear h" "linear j" |
5253 and noh: "\<And>x. norm(h x) = norm x" and noj: "\<And>y. norm(j y) = norm y" |
5253 and noh: "\<And>x. norm(h x) = norm x" and noj: "\<And>y. norm(j y) = norm y" |
5254 and hj: "\<And>x. j(h x) = x" "\<And>y. h(j y) = y" |
5254 and hj: "\<And>x. j(h x) = x" "\<And>y. h(j y) = y" |
5255 and ranh: "surj h" |
5255 and ranh: "surj h" |
5256 using isomorphisms_UNIV_UNIV |
5256 using isomorphisms_UNIV_UNIV |
5257 by (metis (mono_tags, hide_lams) DIM_real UNIV_eq_I range_eqI) |
5257 by (metis (mono_tags, opaque_lifting) DIM_real UNIV_eq_I range_eqI) |
5258 obtain f g where hom: "homeomorphism (h ` T) (h ` T) f g" |
5258 obtain f g where hom: "homeomorphism (h ` T) (h ` T) f g" |
5259 and f: "\<And>x. x \<in> h ` K \<Longrightarrow> f x \<in> h ` U" |
5259 and f: "\<And>x. x \<in> h ` K \<Longrightarrow> f x \<in> h ` U" |
5260 and sub: "{x. \<not> (f x = x \<and> g x = x)} \<subseteq> h ` S" |
5260 and sub: "{x. \<not> (f x = x \<and> g x = x)} \<subseteq> h ` S" |
5261 and bou: "bounded {x. \<not> (f x = x \<and> g x = x)}" |
5261 and bou: "bounded {x. \<not> (f x = x \<and> g x = x)}" |
5262 apply (rule homeomorphism_grouping_point_4 [of "h ` U" "h ` S" "h ` K" "h ` T"]) |
5262 apply (rule homeomorphism_grouping_point_4 [of "h ` U" "h ` S" "h ` K" "h ` T"]) |
5273 proof |
5273 proof |
5274 show "continuous_on T (j \<circ> f \<circ> h)" "continuous_on T (j \<circ> g \<circ> h)" |
5274 show "continuous_on T (j \<circ> f \<circ> h)" "continuous_on T (j \<circ> g \<circ> h)" |
5275 using hom homeomorphism_def |
5275 using hom homeomorphism_def |
5276 by (blast intro: continuous_on_compose cont_hj)+ |
5276 by (blast intro: continuous_on_compose cont_hj)+ |
5277 show "(j \<circ> f \<circ> h) ` T \<subseteq> T" "(j \<circ> g \<circ> h) ` T \<subseteq> T" |
5277 show "(j \<circ> f \<circ> h) ` T \<subseteq> T" "(j \<circ> g \<circ> h) ` T \<subseteq> T" |
5278 by auto (metis (mono_tags, hide_lams) hj(1) hom homeomorphism_def imageE imageI)+ |
5278 by auto (metis (mono_tags, opaque_lifting) hj(1) hom homeomorphism_def imageE imageI)+ |
5279 show "\<And>x. x \<in> T \<Longrightarrow> (j \<circ> g \<circ> h) ((j \<circ> f \<circ> h) x) = x" |
5279 show "\<And>x. x \<in> T \<Longrightarrow> (j \<circ> g \<circ> h) ((j \<circ> f \<circ> h) x) = x" |
5280 using hj hom homeomorphism_apply1 by fastforce |
5280 using hj hom homeomorphism_apply1 by fastforce |
5281 show "\<And>y. y \<in> T \<Longrightarrow> (j \<circ> f \<circ> h) ((j \<circ> g \<circ> h) y) = y" |
5281 show "\<And>y. y \<in> T \<Longrightarrow> (j \<circ> f \<circ> h) ((j \<circ> g \<circ> h) y) = y" |
5282 using hj hom homeomorphism_apply2 by fastforce |
5282 using hj hom homeomorphism_apply2 by fastforce |
5283 qed |
5283 qed |