# HG changeset patch # User paulson # Date 1602880066 -3600 # Node ID 18e760349b86d3bb1a452efea48db8a8a4ed3782 # Parent e4d707eb7d1bff22384271f7121d14f9e89ee39f# Parent df988eac234e0f5dac7113524885655d9dc9c4e9 merged diff -r e4d707eb7d1b -r 18e760349b86 src/HOL/Analysis/Retracts.thy --- a/src/HOL/Analysis/Retracts.thy Fri Oct 16 19:34:37 2020 +0200 +++ b/src/HOL/Analysis/Retracts.thy Fri Oct 16 21:27:46 2020 +0100 @@ -65,9 +65,14 @@ show ?thesis proof (rule_tac g = "h \ r \ f'" in that) show "continuous_on U (h \ r \ f')" - apply (intro continuous_on_compose f') - using continuous_on_subset contr f' apply blast - by (meson \homeomorphism S S' g h\ \r ` C \ S'\ continuous_on_subset \f' ` U \ C\ homeomorphism_def image_mono) + proof (intro continuous_on_compose f') + show "continuous_on (f' ` U) r" + using continuous_on_subset contr f' by blast + show "continuous_on (r ` f' ` U) h" + using \homeomorphism S S' g h\ \f' ` U \ C\ + unfolding homeomorphism_def + by (metis \r ` C \ S'\ continuous_on_subset image_mono) + qed show "(h \ r \ f') ` U \ S" using \homeomorphism S S' g h\ \r ` C \ S'\ \f' ` U \ C\ by (fastforce simp: homeomorphism_def) @@ -85,10 +90,8 @@ proof - obtain g h where hom: "homeomorphism S S' g h" using assms by (force simp: homeomorphic_def) - have h: "continuous_on S' h" " h ` S' \ S" - using hom homeomorphism_def apply blast - apply (metis hom equalityE homeomorphism_def) - done + obtain h: "continuous_on S' h" " h ` S' \ S" + using hom homeomorphism_def by blast obtain h' where h': "continuous_on U h'" "h' ` U \ S" and h'h: "\x. x \ S' \ h' x = h x" by (blast intro: AR_imp_absolute_extensor [OF \AR S\ h clo]) @@ -96,9 +99,7 @@ show ?thesis proof (simp add: retraction_def retract_of_def, intro exI conjI) show "continuous_on U (g \ h')" - apply (intro continuous_on_compose h') - apply (meson hom continuous_on_subset h' homeomorphism_cont1) - done + by (meson continuous_on_compose continuous_on_subset h' hom homeomorphism_cont1) show "(g \ h') ` U \ S'" using h' by clarsimp (metis hom subsetD homeomorphism_def imageI) show "\x\S'. (g \ h') x = x" @@ -108,11 +109,9 @@ lemma AR_imp_absolute_retract_UNIV: fixes S :: "'a::euclidean_space set" and S' :: "'b::euclidean_space set" - assumes "AR S" and hom: "S homeomorphic S'" - and clo: "closed S'" + assumes "AR S" "S homeomorphic S'" "closed S'" shows "S' retract_of UNIV" -apply (rule AR_imp_absolute_retract [OF \AR S\ hom]) -using clo closed_closedin by auto + using AR_imp_absolute_retract assms by fastforce lemma absolute_extensor_imp_AR: fixes S :: "'a::euclidean_space set" @@ -126,10 +125,8 @@ assume "S homeomorphic T" and clo: "closedin (top_of_set U) T" then obtain g h where hom: "homeomorphism S T g h" by (force simp: homeomorphic_def) - have h: "continuous_on T h" " h ` T \ S" - using hom homeomorphism_def apply blast - apply (metis hom equalityE homeomorphism_def) - done + obtain h: "continuous_on T h" " h ` T \ S" + using hom homeomorphism_def by blast obtain h' where h': "continuous_on U h'" "h' ` U \ S" and h'h: "\x\T. h' x = h x" using assms [OF h clo] by blast @@ -138,9 +135,7 @@ show "T retract_of U" proof (simp add: retraction_def retract_of_def, intro exI conjI) show "continuous_on U (g \ h')" - apply (intro continuous_on_compose h') - apply (meson hom continuous_on_subset h' homeomorphism_cont1) - done + by (meson continuous_on_compose continuous_on_subset h' hom homeomorphism_cont1) show "(g \ h') ` U \ T" using h' by clarsimp (metis hom subsetD homeomorphism_def imageI) show "\x\T. (g \ h') x = x" @@ -155,10 +150,7 @@ \U T. continuous_on T f \ f ` T \ S \ closedin (top_of_set U) T \ (\g. continuous_on U g \ g ` U \ S \ (\x \ T. g x = f x)))" -apply (rule iffI) - apply (metis AR_imp_absolute_extensor) -apply (simp add: absolute_extensor_imp_AR) -done + by (metis (mono_tags, hide_lams) AR_imp_absolute_extensor absolute_extensor_imp_AR) lemma AR_imp_retract: fixes S :: "'a::euclidean_space set" @@ -224,13 +216,12 @@ show ope: "openin (top_of_set U) (U \ f' -` D)" using \f' ` U \ C\ by (auto simp: opD contf' continuous_openin_preimage) have conth: "continuous_on (r ` f' ` (U \ f' -` D)) h" - apply (rule continuous_on_subset [of S']) - using homeomorphism_def homgh apply blast - using \r ` D \ S'\ by blast + proof (rule continuous_on_subset [of S']) + show "continuous_on S' h" + using homeomorphism_def homgh by blast + qed (use \r ` D \ S'\ in blast) show "continuous_on (U \ f' -` D) (h \ r \ f')" - apply (intro continuous_on_compose conth - continuous_on_subset [OF contr] continuous_on_subset [OF contf'], auto) - done + by (blast intro: continuous_on_compose conth continuous_on_subset [OF contr] continuous_on_subset [OF contf']) show "(h \ r \ f') ` (U \ f' -` D) \ S" using \homeomorphism S S' g h\ \f' ` U \ C\ \r ` D \ S'\ by (auto simp: homeomorphism_def) @@ -249,10 +240,8 @@ proof - obtain g h where hom: "homeomorphism S S' g h" using assms by (force simp: homeomorphic_def) - have h: "continuous_on S' h" " h ` S' \ S" - using hom homeomorphism_def apply blast - apply (metis hom equalityE homeomorphism_def) - done + obtain h: "continuous_on S' h" " h ` S' \ S" + using hom homeomorphism_def by blast from ANR_imp_absolute_neighbourhood_extensor [OF \ANR S\ h clo] obtain V h' where "S' \ V" and opUV: "openin (top_of_set U) V" and h': "continuous_on V h'" "h' ` V \ S" @@ -261,9 +250,7 @@ have "S' retract_of V" proof (simp add: retraction_def retract_of_def, intro exI conjI \S' \ V\) show "continuous_on V (g \ h')" - apply (intro continuous_on_compose h') - apply (meson hom continuous_on_subset h' homeomorphism_cont1) - done + by (meson continuous_on_compose continuous_on_subset h'(1) h'(2) hom homeomorphism_cont1) show "(g \ h') ` V \ S'" using h' by clarsimp (metis hom subsetD homeomorphism_def imageI) show "\x\S'. (g \ h') x = x" @@ -301,10 +288,8 @@ assume "S homeomorphic T" and clo: "closedin (top_of_set U) T" then obtain g h where hom: "homeomorphism S T g h" by (force simp: homeomorphic_def) - have h: "continuous_on T h" " h ` T \ S" - using hom homeomorphism_def apply blast - apply (metis hom equalityE homeomorphism_def) - done + obtain h: "continuous_on T h" " h ` T \ S" + using hom homeomorphism_def by blast obtain V h' where "T \ V" and opV: "openin (top_of_set U) V" and h': "continuous_on V h'" "h' ` V \ S" and h'h: "\x\T. h' x = h x" @@ -314,9 +299,7 @@ have "T retract_of V" proof (simp add: retraction_def retract_of_def, intro exI conjI \T \ V\) show "continuous_on V (g \ h')" - apply (intro continuous_on_compose h') - apply (meson hom continuous_on_subset h' homeomorphism_cont1) - done + by (meson continuous_on_compose continuous_on_subset h' hom homeomorphism_cont1) show "(g \ h') ` V \ T" using h' by clarsimp (metis hom subsetD homeomorphism_def imageI) show "\x\T. (g \ h') x = x" @@ -333,11 +316,11 @@ \U T. continuous_on T f \ f ` T \ S \ closedin (top_of_set U) T \ (\V g. T \ V \ openin (top_of_set U) V \ - continuous_on V g \ g ` V \ S \ (\x \ T. g x = f x)))" -apply (rule iffI) - apply (metis ANR_imp_absolute_neighbourhood_extensor) -apply (simp add: absolute_neighbourhood_extensor_imp_ANR) -done + continuous_on V g \ g ` V \ S \ (\x \ T. g x = f x)))" (is "_ = ?rhs") +proof + assume "ANR S" then show ?rhs + by (metis ANR_imp_absolute_neighbourhood_extensor) +qed (simp add: absolute_neighbourhood_extensor_imp_ANR) lemma ANR_imp_neighbourhood_retract: fixes S :: "'a::euclidean_space set" @@ -365,13 +348,14 @@ and "S' \ V" "U - Z \ W" "V \ W = {}" using separation_normal_local [OF US' UUZ] by auto moreover have "S' retract_of U - W" - apply (rule retract_of_subset [OF S'Z]) - using US' \S' \ V\ \V \ W = {}\ closedin_subset apply fastforce - using Diff_subset_conv \U - Z \ W\ by blast + proof (rule retract_of_subset [OF S'Z]) + show "S' \ U - W" + using US' \S' \ V\ \V \ W = {}\ closedin_subset by fastforce + show "U - W \ Z" + using Diff_subset_conv \U - Z \ W\ by blast + qed ultimately show ?thesis - apply (rule_tac V=V and W = "U-W" in that) - using openin_imp_subset apply force+ - done + by (metis Diff_subset_conv Diff_triv Int_Diff_Un Int_absorb1 openin_closedin_eq that topspace_euclidean_subtopology) qed lemma ANR_imp_closed_neighbourhood_retract: @@ -412,9 +396,7 @@ then obtain W where UW: "openin (top_of_set U) W" and WS': "closedin (top_of_set W) S'" apply (rule locally_compact_closedin_open) - apply (rename_tac W) - apply (rule_tac W = "U \ W" in that, blast) - by (simp add: \S' \ U\ closedin_limpt) + by (meson Int_lower2 assms(3) closedin_imp_subset closedin_subset_trans le_inf_iff openin_open) obtain f g where hom: "homeomorphism S S' f g" using assms by (force simp: homeomorphic_def) have contg: "continuous_on S' g" @@ -442,11 +424,12 @@ by (meson \retraction X S r\ continuous_on_subset retraction) qed show "continuous_on (r ` h ` (W \ h -` X)) f" - apply (rule continuous_on_subset [of S]) - using hom homeomorphism_def apply blast - apply clarify - apply (meson \retraction X S r\ subsetD imageI retraction_def) - done + proof (rule continuous_on_subset [of S]) + show "continuous_on S f" + using hom homeomorphism_def by blast + show "r ` h ` (W \ h -` X) \ S" + by (metis \retraction X S r\ image_mono image_subset_iff_subset_vimage inf_le2 retraction) + qed qed show "(f \ r \ h) ` (W \ h -` X) \ S'" using \retraction X S r\ hom @@ -455,10 +438,7 @@ using \retraction X S r\ hom by (auto simp: retraction_def homeomorphism_def hg) qed then show ?thesis - apply (rule_tac V = "W \ h -` X" in that) - apply (rule openin_trans [OF _ UW]) - using \continuous_on W h\ \open X\ continuous_openin_preimage_eq apply blast+ - done + using UW \open X\ conth continuous_openin_preimage_eq openin_trans that by blast qed corollary ENR_imp_absolute_neighbourhood_retract_UNIV: @@ -489,8 +469,7 @@ fixes f :: "'a::euclidean_space \ 'b::euclidean_space" assumes "linear f" "inj f" shows "ENR (image f S) \ ENR S" -apply (rule homeomorphic_ENR_iff_ENR) -using assms homeomorphic_sym linear_homeomorphic_image by auto + by (meson assms homeomorphic_ENR_iff_ENR linear_homeomorphic_image) text \Some relations among the concepts. We also relate AR to being a retract of UNIV, which is often a more convenient proxy in the closed case.\ @@ -501,8 +480,7 @@ lemma ENR_imp_ANR: fixes S :: "'a::euclidean_space set" shows "ENR S \ ANR S" -apply (simp add: ANR_def) -by (metis ENR_imp_absolute_neighbourhood_retract closedin_imp_subset) + by (meson ANR_def ENR_imp_absolute_neighbourhood_retract closedin_imp_subset) lemma ENR_ANR: fixes S :: "'a::euclidean_space set" @@ -521,11 +499,7 @@ by (metis DIM_prod DIM_real Suc_eq_plus1 lessI) then show "ENR S" using \ANR S\ - apply (simp add: ANR_def) - apply (drule_tac x=UNIV in spec) - apply (drule_tac x=T in spec, clarsimp) - apply (meson ENR_def ENR_homeomorphic_ENR open_openin) - done + by (meson ANR_imp_absolute_neighbourhood_retract_UNIV ENR_def ENR_homeomorphic_ENR) qed @@ -535,19 +509,15 @@ (is "?lhs = ?rhs") proof assume ?lhs - obtain C and S' :: "('a * real) set" + have "aff_dim S < int DIM('a \ real)" + using aff_dim_le_DIM [of S] by auto + then obtain C and S' :: "('a * real) set" where "convex C" "C \ {}" "closedin (top_of_set C) S'" "S homeomorphic S'" - apply (rule homeomorphic_closedin_convex [of S, where 'n = "'a * real"]) - using aff_dim_le_DIM [of S] by auto + using homeomorphic_closedin_convex by blast with \AR S\ have "contractible S" - apply (simp add: AR_def) - apply (drule_tac x=C in spec) - apply (drule_tac x="S'" in spec, simp) - using convex_imp_contractible homeomorphic_contractible_eq retract_of_contractible by fastforce + by (meson AR_def convex_imp_contractible homeomorphic_contractible_eq retract_of_contractible) with \AR S\ show ?rhs - apply (auto simp: AR_imp_ANR) - apply (force simp: AR_def) - done + using AR_imp_ANR AR_imp_retract by fastforce next assume ?rhs then obtain a and h:: "real \ 'a \ 'a" @@ -594,19 +564,19 @@ show ?thesis proof (intro conjI exI) have *: "continuous_on (W - V') (\x. h (j x, g x))" - apply (rule continuous_on_compose2 [OF conth continuous_on_Pair]) - apply (rule continuous_on_subset [OF contj Diff_subset]) - apply (rule continuous_on_subset [OF contg]) - apply (metis Diff_subset_conv Un_commute \W - U \ V'\) - using j \g ` U \ S\ \W - U \ V'\ apply fastforce - done + proof (rule continuous_on_compose2 [OF conth continuous_on_Pair]) + show "continuous_on (W - V') j" + by (rule continuous_on_subset [OF contj Diff_subset]) + show "continuous_on (W - V') g" + by (metis Diff_subset_conv \W - U \ V'\ contg continuous_on_subset Un_commute) + show "(\x. (j x, g x)) ` (W - V') \ {0..1} \ S" + using j \g ` U \ S\ \W - U \ V'\ by fastforce + qed show "continuous_on W (\x. if x \ W - V then a else h (j x, g x))" - apply (subst Weq) - apply (rule continuous_on_cases_local) - apply (simp_all add: Weq [symmetric] WWV *) - using WV' closedin_diff apply fastforce - apply (auto simp: j0 j1) - done + proof (subst Weq, rule continuous_on_cases_local) + show "continuous_on (W - V') (\x. h (j x, g x))" + using "*" by blast + qed (use WWV WV' Weq j0 j1 in auto) next have "h (j (x, y), g (x, y)) \ S" if "(x, y) \ W" "(x, y) \ V" for x y proof - @@ -632,15 +602,23 @@ lemma ANR_retract_of_ANR: fixes S :: "'a::euclidean_space set" - assumes "ANR T" "S retract_of T" + assumes "ANR T" and ST: "S retract_of T" shows "ANR S" -using assms -apply (simp add: ANR_eq_absolute_neighbourhood_extensor retract_of_def retraction_def) -apply (clarsimp elim!: all_forward) -apply (erule impCE, metis subset_trans) -apply (clarsimp elim!: ex_forward) -apply (rule_tac x="r \ g" in exI) -by (metis comp_apply continuous_on_compose continuous_on_subset subsetD imageI image_comp image_mono subset_trans) +proof (clarsimp simp add: ANR_eq_absolute_neighbourhood_extensor) + fix f::"'a \ real \ 'a" and U W + assume W: "continuous_on W f" "f ` W \ S" "closedin (top_of_set U) W" + then obtain r where "S \ T" and r: "continuous_on T r" "r ` T \ S" "\x\S. r x = x" "continuous_on W f" "f ` W \ S" + "closedin (top_of_set U) W" + by (meson ST retract_of_def retraction_def) + then have "f ` W \ T" + by blast + with W obtain V g where V: "W \ V" "openin (top_of_set U) V" "continuous_on V g" "g ` V \ T" "\x\W. g x = f x" + by (metis ANR_imp_absolute_neighbourhood_extensor \ANR T\) + with r have "continuous_on V (r \ g) \ (r \ g) ` V \ S \ (\x\W. (r \ g) x = f x)" + by (metis (no_types, lifting) comp_apply continuous_on_compose continuous_on_subset image_subset_iff) + then show "\V. W \ V \ openin (top_of_set U) V \ (\g. continuous_on V g \ g ` V \ S \ (\x\W. g x = f x))" + by (meson V) +qed lemma AR_retract_of_AR: fixes S :: "'a::euclidean_space set" @@ -675,9 +653,7 @@ lemma convex_imp_AR: fixes S :: "'a::euclidean_space set" shows "\convex S; S \ {}\ \ AR S" -apply (rule absolute_extensor_imp_AR) -apply (rule Dugundji, assumption+) -by blast + by (metis (mono_tags, lifting) Dugundji absolute_extensor_imp_AR) lemma convex_imp_ANR: fixes S :: "'a::euclidean_space set" @@ -740,11 +716,12 @@ have "S \ T \ W" "W \ U" using \S \ U\ by (auto simp: W_def setdist_sing_in_set) have "(S \ T) retract_of W" - apply (rule AR_imp_absolute_retract [OF \AR(S \ T)\]) - apply (simp add: homeomorphic_refl) - apply (rule closedin_subset_trans [of U]) - apply (simp_all add: assms closedin_Int \S \ T \ W\ \W \ U\) - done + proof (rule AR_imp_absolute_retract [OF \AR(S \ T)\]) + show "S \ T homeomorphic S \ T" + by (simp add: homeomorphic_refl) + show "closedin (top_of_set W) (S \ T)" + by (meson \S \ T \ W\ \W \ U\ assms closedin_Int closedin_subset_trans) + qed then obtain r0 where "S \ T \ W" and contr0: "continuous_on W r0" and "r0 ` W \ S \ T" @@ -758,8 +735,6 @@ then have cloUW: "closedin (top_of_set U) W" using closedin_Int US' UT' by blast define r where "r \ \x. if x \ W then r0 x else x" - have "r ` (W \ S) \ S" "r ` (W \ T) \ T" - using \r0 ` W \ S \ T\ r_def by auto have contr: "continuous_on (W \ (S \ T)) r" unfolding r_def proof (rule continuous_on_cases_local [OF _ _ contr0 continuous_on_id]) @@ -770,37 +745,37 @@ show "\x. x \ W \ x \ W \ x \ S \ T \ x \ W \ r0 x = x" by (auto simp: ST) qed + have rim: "r ` (W \ S) \ S" "r ` (W \ T) \ T" + using \r0 ` W \ S \ T\ r_def by auto have cloUWS: "closedin (top_of_set U) (W \ S)" by (simp add: cloUW assms closedin_Un) obtain g where contg: "continuous_on U g" - and "g ` U \ S" and geqr: "\x. x \ W \ S \ g x = r x" - apply (rule AR_imp_absolute_extensor [OF \AR S\ _ _ cloUWS]) - apply (rule continuous_on_subset [OF contr]) - using \r ` (W \ S) \ S\ apply auto - done + and "g ` U \ S" and geqr: "\x. x \ W \ S \ g x = r x" + proof (rule AR_imp_absolute_extensor [OF \AR S\ _ _ cloUWS]) + show "continuous_on (W \ S) r" + using continuous_on_subset contr sup_assoc by blast + qed (use rim in auto) have cloUWT: "closedin (top_of_set U) (W \ T)" by (simp add: cloUW assms closedin_Un) obtain h where conth: "continuous_on U h" and "h ` U \ T" and heqr: "\x. x \ W \ T \ h x = r x" - apply (rule AR_imp_absolute_extensor [OF \AR T\ _ _ cloUWT]) - apply (rule continuous_on_subset [OF contr]) - using \r ` (W \ T) \ T\ apply auto - done - have "U = S' \ T'" + proof (rule AR_imp_absolute_extensor [OF \AR T\ _ _ cloUWT]) + show "continuous_on (W \ T) r" + using continuous_on_subset contr sup_assoc by blast + qed (use rim in auto) + have U: "U = S' \ T'" by (force simp: S'_def T'_def) - then have cont: "continuous_on U (\x. if x \ S' then g x else h x)" - apply (rule ssubst) + have cont: "continuous_on U (\x. if x \ S' then g x else h x)" + unfolding U apply (rule continuous_on_cases_local) using US' UT' \S' \ T' = W\ \U = S' \ T'\ - contg conth continuous_on_subset geqr heqr apply auto - done + contg conth continuous_on_subset geqr heqr by auto have UST: "(\x. if x \ S' then g x else h x) ` U \ S \ T" using \g ` U \ S\ \h ` U \ T\ by auto show ?thesis apply (simp add: retract_of_def retraction_def \S \ U\ \T \ U\) apply (rule_tac x="\x. if x \ S' then g x else h x" in exI) - apply (intro conjI cont UST) - by (metis IntI ST Un_iff \S \ S'\ \S' \ T' = W\ \T \ T'\ subsetD geqr heqr r0 r_def) + using ST UST \S \ S'\ \S' \ T' = W\ \T \ T'\ cont geqr heqr r_def by auto qed @@ -818,42 +793,30 @@ obtain f g where hom: "homeomorphism (S \ T) C f g" using hom by (force simp: homeomorphic_def) have US: "closedin (top_of_set U) (C \ g -` S)" - apply (rule closedin_trans [OF _ UC]) - apply (rule continuous_closedin_preimage_gen [OF _ _ STS]) - using hom homeomorphism_def apply blast - apply (metis hom homeomorphism_def set_eq_subset) - done + by (metis STS continuous_on_imp_closedin hom homeomorphism_def closedin_trans [OF _ UC]) have UT: "closedin (top_of_set U) (C \ g -` T)" - apply (rule closedin_trans [OF _ UC]) - apply (rule continuous_closedin_preimage_gen [OF _ _ STT]) - using hom homeomorphism_def apply blast - apply (metis hom homeomorphism_def set_eq_subset) - done - have ARS: "AR (C \ g -` S)" - apply (rule AR_homeomorphic_AR [OF \AR S\]) - apply (simp add: homeomorphic_def) - apply (rule_tac x=g in exI) - apply (rule_tac x=f in exI) - using hom apply (auto simp: homeomorphism_def elim!: continuous_on_subset) + by (metis STT continuous_on_closed hom homeomorphism_def closedin_trans [OF _ UC]) + have "homeomorphism (C \ g -` S) S g f" + using hom + apply (auto simp: homeomorphism_def elim!: continuous_on_subset) apply (rule_tac x="f x" in image_eqI, auto) done - have ART: "AR (C \ g -` T)" - apply (rule AR_homeomorphic_AR [OF \AR T\]) - apply (simp add: homeomorphic_def) - apply (rule_tac x=g in exI) - apply (rule_tac x=f in exI) - using hom apply (auto simp: homeomorphism_def elim!: continuous_on_subset) + then have ARS: "AR (C \ g -` S)" + using \AR S\ homeomorphic_AR_iff_AR homeomorphic_def by blast + have "homeomorphism (C \ g -` T) T g f" + using hom + apply (auto simp: homeomorphism_def elim!: continuous_on_subset) apply (rule_tac x="f x" in image_eqI, auto) done - have ARI: "AR ((C \ g -` S) \ (C \ g -` T))" - apply (rule AR_homeomorphic_AR [OF \AR (S \ T)\]) - apply (simp add: homeomorphic_def) - apply (rule_tac x=g in exI) - apply (rule_tac x=f in exI) + then have ART: "AR (C \ g -` T)" + using \AR T\ homeomorphic_AR_iff_AR homeomorphic_def by blast + have "homeomorphism (C \ g -` S \ (C \ g -` T)) (S \ T) g f" using hom apply (auto simp: homeomorphism_def elim!: continuous_on_subset) apply (rule_tac x="f x" in image_eqI, auto) done + then have ARI: "AR ((C \ g -` S) \ (C \ g -` T))" + using \AR (S \ T)\ homeomorphic_AR_iff_AR homeomorphic_def by blast have "C = (C \ g -` S) \ (C \ g -` T)" using hom by (auto simp: homeomorphism_def) then show ?thesis @@ -913,10 +876,7 @@ and cloWW0: "closedin (top_of_set W) W0" and "S \ T \ W'" "W' \ W0" and ret: "(S \ T) retract_of W0" - apply (rule ANR_imp_closed_neighbourhood_retract [OF \ANR(S \ T)\]) - apply (rule closedin_subset_trans [of U, OF _ ST_W \W \ U\]) - apply (blast intro: assms)+ - done + by (meson ANR_imp_closed_neighbourhood_retract ST_W US UT \W \ U\ \ANR(S \ T)\ closedin_Int closedin_subset_trans) then obtain U0 where opeUU0: "openin (top_of_set U) U0" and U0: "S \ T \ U0" "U0 \ W \ W0" unfolding openin_open using \W \ U\ by blast @@ -935,9 +895,8 @@ unfolding r_def proof (rule continuous_on_cases_local [OF _ _ contr0 continuous_on_id]) show "closedin (top_of_set (W0 \ (S \ T))) W0" - apply (rule closedin_subset_trans [of U]) - using cloWW0 cloUW closedin_trans \W0 \ U\ \S \ U\ \T \ U\ apply blast+ - done + using closedin_subset_trans [of U] + by (metis le_sup_iff order_refl cloWW0 cloUW closedin_trans \W0 \ U\ \S \ U\ \T \ U\) show "closedin (top_of_set (W0 \ (S \ T))) (S \ T)" by (meson \S \ U\ \T \ U\ \W0 \ U\ assms closedin_Un closedin_subset_trans sup.bounded_iff sup.cobounded2) show "\x. x \ W0 \ x \ W0 \ x \ S \ T \ x \ W0 \ r0 x = x" @@ -949,60 +908,63 @@ obtain W1 g where "W0 \ S \ W1" and contg: "continuous_on W1 g" and opeSW1: "openin (top_of_set S') W1" and "g ` W1 \ S" and geqr: "\x. x \ W0 \ S \ g x = r x" - apply (rule ANR_imp_absolute_neighbourhood_extensor [OF \ANR S\ _ \r ` (W0 \ S) \ S\ cloS'WS]) - apply (rule continuous_on_subset [OF contr], blast+) - done + proof (rule ANR_imp_absolute_neighbourhood_extensor [OF \ANR S\ _ \r ` (W0 \ S) \ S\ cloS'WS]) + show "continuous_on (W0 \ S) r" + using continuous_on_subset contr sup_assoc by blast + qed auto have cloT'WT: "closedin (top_of_set T') (W0 \ T)" by (meson closedin_subset_trans UT cloUT' \T \ T'\ \W \ T'\ cloUW cloWW0 closedin_Un closedin_imp_subset closedin_trans) obtain W2 h where "W0 \ T \ W2" and conth: "continuous_on W2 h" and opeSW2: "openin (top_of_set T') W2" and "h ` W2 \ T" and heqr: "\x. x \ W0 \ T \ h x = r x" - apply (rule ANR_imp_absolute_neighbourhood_extensor [OF \ANR T\ _ \r ` (W0 \ T) \ T\ cloT'WT]) - apply (rule continuous_on_subset [OF contr], blast+) - done + proof (rule ANR_imp_absolute_neighbourhood_extensor [OF \ANR T\ _ \r ` (W0 \ T) \ T\ cloT'WT]) + show "continuous_on (W0 \ T) r" + using continuous_on_subset contr sup_assoc by blast + qed auto have "S' \ T' = W" by (force simp: S'_def T'_def W_def) - obtain O1 O2 where "open O1" "W1 = S' \ O1" "open O2" "W2 = T' \ O2" + obtain O1 O2 where O12: "open O1" "W1 = S' \ O1" "open O2" "W2 = T' \ O2" using opeSW1 opeSW2 by (force simp: openin_open) show ?thesis proof - have eq: "W1 - (W - U0) \ (W2 - (W - U0)) = - ((U - T') \ O1 \ (U - S') \ O2 \ U \ O1 \ O2) - (W - U0)" - using \U0 \ W \ W0\ \W0 \ S \ W1\ \W0 \ T \ W2\ + have eq: "W1 - (W - U0) \ (W2 - (W - U0)) + = ((U - T') \ O1 \ (U - S') \ O2 \ U \ O1 \ O2) - (W - U0)" (is "?WW1 \ ?WW2 = ?rhs") + using \U0 \ W \ W0\ \W0 \ S \ W1\ \W0 \ T \ W2\ by (auto simp: \S' \ T' = U\ [symmetric] \S' \ T' = W\ [symmetric] \W1 = S' \ O1\ \W2 = T' \ O2\) - show "openin (top_of_set U) (W1 - (W - U0) \ (W2 - (W - U0)))" - apply (subst eq) - apply (intro openin_Un openin_Int_open openin_diff closedin_diff cloUW opeUU0 cloUS' cloUT' \open O1\ \open O2\, simp_all) - done - have cloW1: "closedin (top_of_set (W1 - (W - U0) \ (W2 - (W - U0)))) (W1 - (W - U0))" - using cloUS' apply (simp add: closedin_closed) - apply (erule ex_forward) - using U0 \W0 \ S \ W1\ - apply (auto simp: \W1 = S' \ O1\ \W2 = T' \ O2\ \S' \ T' = U\ [symmetric]\S' \ T' = W\ [symmetric]) - done - have cloW2: "closedin (top_of_set (W1 - (W - U0) \ (W2 - (W - U0)))) (W2 - (W - U0))" - using cloUT' apply (simp add: closedin_closed) - apply (erule ex_forward) - using U0 \W0 \ T \ W2\ - apply (auto simp: \W1 = S' \ O1\ \W2 = T' \ O2\ \S' \ T' = U\ [symmetric]\S' \ T' = W\ [symmetric]) - done - have *: "\x\S \ T. (if x \ S' then g x else h x) = x" - using ST \S' \ T' = W\ cloT'WT closedin_subset geqr heqr - apply (auto simp: r_def, fastforce) - using \S \ S'\ \T \ T'\ \W0 \ S \ W1\ \W1 = S' \ O1\ by auto - have "\r. continuous_on (W1 - (W - U0) \ (W2 - (W - U0))) r \ - r ` (W1 - (W - U0) \ (W2 - (W - U0))) \ S \ T \ - (\x\S \ T. r x = x)" - apply (rule_tac x = "\x. if x \ S' then g x else h x" in exI) - apply (intro conjI *) - apply (rule continuous_on_cases_local - [OF cloW1 cloW2 continuous_on_subset [OF contg] continuous_on_subset [OF conth]]) - using \W1 = S' \ O1\ \W2 = T' \ O2\ \S' \ T' = W\ - \g ` W1 \ S\ \h ` W2 \ T\ apply auto - using \U0 \ W \ W0\ \W0 \ S \ W1\ apply (fastforce simp add: geqr heqr)+ - done - then show "S \ T retract_of W1 - (W - U0) \ (W2 - (W - U0))" + show "openin (top_of_set U) (?WW1 \ ?WW2)" + by (simp add: eq \open O1\ \open O2\ cloUS' cloUT' cloUW closedin_diff opeUU0 openin_Int_open openin_Un openin_diff) + obtain SU' where "closed SU'" "S' = U \ SU'" + using cloUS' by (auto simp add: closedin_closed) + moreover have "?WW1 = (?WW1 \ ?WW2) \ SU'" + using \S' = U \ SU'\ \W1 = S' \ O1\ \S' \ T' = U\ \W2 = T' \ O2\ \S' \ T' = W\ \W0 \ S \ W1\ U0 + by auto + ultimately have cloW1: "closedin (top_of_set (W1 - (W - U0) \ (W2 - (W - U0)))) (W1 - (W - U0))" + by (metis closedin_closed_Int) + obtain TU' where "closed TU'" "T' = U \ TU'" + using cloUT' by (auto simp add: closedin_closed) + moreover have "?WW2 = (?WW1 \ ?WW2) \ TU'" + using \T' = U \ TU'\ \W1 = S' \ O1\ \S' \ T' = U\ \W2 = T' \ O2\ \S' \ T' = W\ \W0 \ T \ W2\ U0 + by auto + ultimately have cloW2: "closedin (top_of_set (?WW1 \ ?WW2)) ?WW2" + by (metis closedin_closed_Int) + let ?gh = "\x. if x \ S' then g x else h x" + have "\r. continuous_on (?WW1 \ ?WW2) r \ r ` (?WW1 \ ?WW2) \ S \ T \ (\x\S \ T. r x = x)" + proof (intro exI conjI) + show "\x\S \ T. ?gh x = x" + using ST \S' \ T' = W\ geqr heqr O12 + by (metis Int_iff Un_iff \W0 \ S \ W1\ \W0 \ T \ W2\ r0 r_def sup.order_iff) + have "\x. x \ ?WW1 \ x \ S' \ x \ ?WW2 \ x \ S' \ g x = h x" + using O12 + by (metis (full_types) DiffD1 DiffD2 DiffI IntE IntI U0(2) UnCI \S' \ T' = W\ geqr heqr in_mono) + then show "continuous_on (?WW1 \ ?WW2) ?gh" + using continuous_on_cases_local [OF cloW1 cloW2 continuous_on_subset [OF contg] continuous_on_subset [OF conth]] + by simp + show "?gh ` (?WW1 \ ?WW2) \ S \ T" + using \W1 = S' \ O1\ \W2 = T' \ O2\ \S' \ T' = W\ \g ` W1 \ S\ \h ` W2 \ T\ \U0 \ W \ W0\ \W0 \ S \ W1\ + by (auto simp add: image_subset_iff) + qed + then show "S \ T retract_of ?WW1 \ ?WW2" using \W0 \ S \ W1\ \W0 \ T \ W2\ ST opeUU0 U0 by (auto simp: retract_of_def retraction_def) qed @@ -1023,42 +985,26 @@ obtain f g where hom: "homeomorphism (S \ T) C f g" using hom by (force simp: homeomorphic_def) have US: "closedin (top_of_set U) (C \ g -` S)" - apply (rule closedin_trans [OF _ UC]) - apply (rule continuous_closedin_preimage_gen [OF _ _ STS]) - using hom [unfolded homeomorphism_def] apply blast - apply (metis hom homeomorphism_def set_eq_subset) - done + by (metis STS UC closedin_trans continuous_on_imp_closedin hom homeomorphism_def) have UT: "closedin (top_of_set U) (C \ g -` T)" - apply (rule closedin_trans [OF _ UC]) - apply (rule continuous_closedin_preimage_gen [OF _ _ STT]) - using hom [unfolded homeomorphism_def] apply blast - apply (metis hom homeomorphism_def set_eq_subset) - done - have ANRS: "ANR (C \ g -` S)" - apply (rule ANR_homeomorphic_ANR [OF \ANR S\]) - apply (simp add: homeomorphic_def) - apply (rule_tac x=g in exI) - apply (rule_tac x=f in exI) + by (metis STT UC closedin_trans continuous_on_imp_closedin hom homeomorphism_def) + have "homeomorphism (C \ g -` S) S g f" + using hom + apply (auto simp: homeomorphism_def elim!: continuous_on_subset) + by (rule_tac x="f x" in image_eqI, auto) + then have ANRS: "ANR (C \ g -` S)" + using \ANR S\ homeomorphic_ANR_iff_ANR homeomorphic_def by blast + have "homeomorphism (C \ g -` T) T g f" using hom apply (auto simp: homeomorphism_def elim!: continuous_on_subset) - apply (rule_tac x="f x" in image_eqI, auto) - done - have ANRT: "ANR (C \ g -` T)" - apply (rule ANR_homeomorphic_ANR [OF \ANR T\]) - apply (simp add: homeomorphic_def) - apply (rule_tac x=g in exI) - apply (rule_tac x=f in exI) - using hom apply (auto simp: homeomorphism_def elim!: continuous_on_subset) - apply (rule_tac x="f x" in image_eqI, auto) - done - have ANRI: "ANR ((C \ g -` S) \ (C \ g -` T))" - apply (rule ANR_homeomorphic_ANR [OF \ANR (S \ T)\]) - apply (simp add: homeomorphic_def) - apply (rule_tac x=g in exI) - apply (rule_tac x=f in exI) + by (rule_tac x="f x" in image_eqI, auto) + then have ANRT: "ANR (C \ g -` T)" + using \ANR T\ homeomorphic_ANR_iff_ANR homeomorphic_def by blast + have "homeomorphism (C \ g -` S \ (C \ g -` T)) (S \ T) g f" using hom apply (auto simp: homeomorphism_def elim!: continuous_on_subset) - apply (rule_tac x="f x" in image_eqI, auto) - done + by (rule_tac x="f x" in image_eqI, auto) + then have ANRI: "ANR ((C \ g -` S) \ (C \ g -` T))" + using \ANR (S \ T)\ homeomorphic_ANR_iff_ANR homeomorphic_def by blast have "C = (C \ g -` S) \ (C \ g -` T)" using hom by (auto simp: homeomorphism_def) then show ?thesis @@ -1088,8 +1034,7 @@ and contg: "continuous_on W g" and gim: "g ` W \ T" and geq: "\x. x \ C \ g x = f x" - apply (rule ANR_imp_absolute_neighbourhood_extensor [OF \ANR T\ contf \f ` C \ T\ cloUC]) - using fim by auto + using ANR_imp_absolute_neighbourhood_extensor [OF \ANR T\ contf \f ` C \ T\ cloUC] fim by auto show "\V g. C \ V \ openin (top_of_set U) V \ continuous_on V g \ g ` V \ S \ (\x\C. g x = f x)" proof (intro exI conjI) show "C \ W \ g -` S" @@ -1107,10 +1052,9 @@ lemma ENR_openin: fixes S :: "'a::euclidean_space set" - assumes "ENR T" and opeTS: "openin (top_of_set T) S" + assumes "ENR T" "openin (top_of_set T) S" shows "ENR S" - using assms apply (simp add: ENR_ANR) - using ANR_openin locally_open_subset by blast + by (meson ANR_openin ENR_ANR assms locally_open_subset) lemma ANR_neighborhood_retract: fixes S :: "'a::euclidean_space set" @@ -1188,8 +1132,7 @@ lemma ENR_box [iff]: fixes a :: "'a::euclidean_space" shows "ENR(cbox a b)" "ENR(box a b)" -apply (simp add: ENR_convex_closed closed_cbox) -by (simp add: open_box open_imp_ENR) + by (simp_all add: ENR_convex_closed closed_cbox open_box open_imp_ENR) lemma AR_box [simp]: "AR(cbox a b) \ cbox a b \ {}" "AR(box a b) \ box a b \ {}" @@ -1222,24 +1165,21 @@ proof - obtain U and T :: "('a \ real) set" where "convex U" "U \ {}" - and UT: "closedin (top_of_set U) T" - and "S homeomorphic T" - apply (rule homeomorphic_closedin_convex [of S]) - using aff_dim_le_DIM [of S] apply auto - done + and UT: "closedin (top_of_set U) T" and "S homeomorphic T" + proof (rule homeomorphic_closedin_convex) + show "aff_dim S < int DIM('a \ real)" + using aff_dim_le_DIM [of S] by auto + qed auto then have "locally path_connected T" by (meson ANR_imp_absolute_neighbourhood_retract assms convex_imp_locally_path_connected locally_open_subset retract_of_locally_path_connected) then have S: "locally path_connected S" if "openin (top_of_set U) V" "T retract_of V" "U \ {}" for V using \S homeomorphic T\ homeomorphic_locally homeomorphic_path_connectedness by blast - show ?thesis - using assms - apply (clarsimp simp: ANR_def) - apply (drule_tac x=U in spec) - apply (drule_tac x=T in spec) - using \S homeomorphic T\ \U \ {}\ UT apply (blast intro: S) - done + obtain Ta where "(openin (top_of_set U) Ta \ T retract_of Ta)" + using ANR_def UT \S homeomorphic T\ assms by moura + then show ?thesis + using S \U \ {}\ by blast qed lemma ANR_imp_locally_connected: @@ -1286,9 +1226,10 @@ and contg: "continuous_on W1 g" and gim: "g ` W1 \ S" and geq: "\x. x \ C \ g x = (fst \ f) x" - apply (rule ANR_imp_absolute_neighbourhood_extensor [OF \ANR S\ contf1 _ cloUC]) - using fim apply auto - done + proof (rule ANR_imp_absolute_neighbourhood_extensor [OF \ANR S\ contf1 _ cloUC]) + show "(fst \ f) ` C \ S" + using fim by auto + qed auto have contf2: "continuous_on C (snd \ f)" by (simp add: \continuous_on C f\ continuous_on_snd) obtain W2 h where "C \ W2" @@ -1296,9 +1237,10 @@ and conth: "continuous_on W2 h" and him: "h ` W2 \ T" and heq: "\x. x \ C \ h x = (snd \ f) x" - apply (rule ANR_imp_absolute_neighbourhood_extensor [OF \ANR T\ contf2 _ cloUC]) - using fim apply auto - done + proof (rule ANR_imp_absolute_neighbourhood_extensor [OF \ANR T\ contf2 _ cloUC]) + show "(snd \ f) ` C \ T" + using fim by auto + qed auto show "\V g. C \ V \ openin (top_of_set U) V \ continuous_on V g \ g ` V \ S \ T \ (\x\C. g x = f x)" @@ -1321,7 +1263,7 @@ assumes "AR S" "AR T" shows "AR(S \ T)" using assms by (simp add: AR_ANR ANR_Times contractible_Times) -(* Unused +(* Unused and requires ordered_euclidean_space subsection\<^marker>\tag unimportant\\Retracts and intervals in ordered euclidean space\ lemma ANR_interval [iff]: @@ -1355,20 +1297,16 @@ have "rel_frontier S retract_of affine hull S - {a}" by (simp add: assms a rel_frontier_retract_of_punctured_affine_hull) also have "\ retract_of {x. closest_point (affine hull S) x \ a}" - apply (simp add: retract_of_def retraction_def ahS) + unfolding retract_of_def retraction_def ahS apply (rule_tac x="closest_point (affine hull S)" in exI) apply (auto simp: False closest_point_self affine_imp_convex closest_point_in_set continuous_on_closest_point) done finally have "rel_frontier S retract_of {x. closest_point (affine hull S) x \ a}" . moreover have "openin (top_of_set UNIV) (UNIV \ closest_point (affine hull S) -` (- {a}))" - apply (rule continuous_openin_preimage_gen) - apply (auto simp: False affine_imp_convex continuous_on_closest_point) - done + by (intro continuous_openin_preimage_gen) (auto simp: False affine_imp_convex continuous_on_closest_point) ultimately show ?thesis - unfolding ENR_def - apply (rule_tac x = "closest_point (affine hull S) -` (- {a})" in exI) - apply (simp add: vimage_def) - done + by (meson ENR_convex_closed ENR_delete ENR_retract_of_ENR \rel_frontier S retract_of affine hull S - {a}\ + closed_affine_hull convex_affine_hull) qed lemma ANR_rel_frontier_convex: @@ -1408,8 +1346,7 @@ unfolding retraction_def retract_of_def proof (intro exI conjI) show "continuous_on (S \ T) (\x. if x \ S then x else r x)" - apply (rule continuous_on_cases_local [OF clS clT]) - using r by (auto) + using r by (intro continuous_on_cases_local [OF clS clT]) auto qed (use r in auto) also have "\ retract_of U" by (rule Un) @@ -1422,8 +1359,8 @@ and clT: "closedin (top_of_set (S \ T)) T" and Un: "AR(S \ T)" and Int: "AR(S \ T)" shows "AR S" - apply (rule AR_retract_of_AR [OF Un]) - by (meson AR_imp_retract clS clT closedin_closed_subset local.Int retract_from_Un_Int retract_of_refl sup_ge2) + by (meson AR_imp_retract AR_retract_of_AR Un assms closedin_closed_subset local.Int + retract_from_Un_Int retract_of_refl sup_ge2) lemma AR_from_Un_Int_local': fixes S :: "'a::euclidean_space set" @@ -1470,10 +1407,7 @@ by (meson Int_lower1 continuous_on_subset r) qed (use req continuous_on_id in auto) with rim have "S retract_of S \ V" - unfolding retraction_def retract_of_def - apply (rule_tac x="\x. if x \ S then x else r x" in exI) - apply (auto simp: eq') - done + unfolding retraction_def retract_of_def using eq' by fastforce then show ?thesis using ANR_neighborhood_retract [OF Un] using \S \ V = S \ T - T \ V\ clT ope by fastforce @@ -1581,9 +1515,8 @@ using bounded_subset_ballD assms by blast assume ?lhs then show ?rhs - apply (clarsimp simp: ENR_def) - apply (rule_tac x="ball 0 r \ U" in exI, auto) - using r retract_of_imp_subset retract_of_subset by fastforce + by (meson ENR_def Elementary_Metric_Spaces.open_ball bounded_Int bounded_ball inf_le2 le_inf_iff + open_Int r retract_of_imp_subset retract_of_subset) next assume ?rhs then show ?lhs @@ -1614,9 +1547,7 @@ assumes "S homeomorphic S'" shows "compact S \ S retract_of UNIV \ compact S' \ S' retract_of UNIV" using assms homeomorphic_compactness - apply auto - apply (meson assms compact_AR homeomorphic_AR_iff_AR homeomorphic_compactness)+ - done + by (metis compact_AR homeomorphic_AR_iff_AR) lemma absolute_retract_from_Un_Int: fixes S :: "'a::euclidean_space set" @@ -1628,8 +1559,7 @@ fixes S :: "'a::euclidean_space set" assumes "closedin (top_of_set (S \ T)) S" "closedin (top_of_set (S \ T)) T" "ENR(S \ T)" "ENR(S \ T)" shows "ENR S" - apply (simp add: ENR_ANR) - using ANR_from_Un_Int_local ENR_ANR assms locally_compact_closedin by blast + by (meson ANR_from_Un_Int_local ANR_imp_neighbourhood_retract ENR_ANR ENR_neighborhood_retract assms) lemma ENR_from_Un_Int: @@ -1699,8 +1629,7 @@ shows "sphere a r retract_of (- {b})" proof - have "frontier (cball a r) retract_of (- {b})" - apply (rule frontier_retract_of_punctured_universe) - using assms by auto + using assms frontier_retract_of_punctured_universe interior_cball by blast then show ?thesis by simp qed @@ -1806,13 +1735,14 @@ using \S \ T\ closedin_subset_trans [OF clo0T] by (metis B_def Un_upper1 clo0TB closedin_closed inf_le1) moreover have "continuous_on ({0} \ T) (f \ snd)" - apply (rule continuous_intros)+ - apply (simp add: contf) - done - ultimately have conth': "continuous_on B h'" - apply (simp add: h'_def B_def Un_commute [of "{0} \ T"]) - apply (auto intro!: continuous_on_cases_local conth) - done + proof (rule continuous_intros)+ + show "continuous_on (snd ` ({0} \ T)) f" + by (simp add: contf) + qed + ultimately have "continuous_on ({0..1} \ S \ {0} \ T) (\x. if snd x \ S then h x else (f \ snd) x)" + by (auto intro!: continuous_on_cases_local conth simp: B_def Un_commute [of "{0} \ T"]) + then have conth': "continuous_on B h'" + by (simp add: h'_def B_def Un_commute [of "{0} \ T"]) have "image h' B \ U" using \f ` T \ U\ him by (auto simp: h'_def B_def) obtain V k where "B \ V" and opeTV: "openin (top_of_set ({0..1} \ T)) V" @@ -1824,25 +1754,26 @@ have eq: "({0} \ T \ {0..1} \ S) = {0::real} \ S" using \S \ T\ by auto have "ANR B" - apply (simp add: B_def) - apply (rule ANR_closed_Un_local) - apply (metis cloBT B_def) - apply (metis Un_commute cloBS B_def) - apply (simp_all add: ANR_Times convex_imp_ANR ANR_singleton ST eq) - done + unfolding B_def + proof (rule ANR_closed_Un_local) + show "closedin (top_of_set ({0} \ T \ {0..1} \ S)) ({0::real} \ T)" + by (metis cloBT B_def) + show "closedin (top_of_set ({0} \ T \ {0..1} \ S)) ({0..1::real} \ S)" + by (metis Un_commute cloBS B_def) + qed (simp_all add: ANR_Times convex_imp_ANR ANR_singleton ST eq) note Vk = that have *: thesis if "openin (top_of_set ({0..1::real} \ T)) V" "retraction V B r" for V r - using that - apply (clarsimp simp add: retraction_def) - apply (rule Vk [of V "h' \ r"], assumption+) - apply (metis continuous_on_compose conth' continuous_on_subset) - using \h' ` B \ U\ apply force+ - done + proof - + have "continuous_on V (h' \ r)" + using conth' continuous_on_compose retractionE that(2) by blast + moreover have "(h' \ r) ` V \ U" + by (metis \h' ` B \ U\ image_comp retractionE that(2)) + ultimately show ?thesis + using Vk [of V "h' \ r"] by (metis comp_apply retraction that) + qed show thesis - apply (rule ANR_imp_neighbourhood_retract [OF \ANR B\ clo0TB]) - apply (auto simp: ANR_Times ANR_singleton ST retract_of_def *) - done + by (meson "*" ANR_imp_neighbourhood_retract \ANR B\ clo0TB retract_of_def) next assume "ANR U" with ANR_imp_absolute_neighbourhood_extensor \h' ` B \ U\ clo0TB conth' that @@ -1850,9 +1781,8 @@ qed define S' where "S' \ {x. \u::real. u \ {0..1} \ (u, x::'a) \ {0..1} \ T - V}" have "closedin (top_of_set T) S'" - unfolding S'_def - apply (rule closedin_compact_projection, blast) - using closedin_self opeTV by blast + unfolding S'_def using closedin_self opeTV + by (blast intro: closedin_compact_projection) have S'_def: "S' = {x. \u::real. (u, x::'a) \ {0..1} \ T - V}" by (auto simp: S'_def) have cloTS': "closedin (top_of_set T) S'" @@ -1863,8 +1793,7 @@ and "\x. x \ T \ a x \ closed_segment 1 0" and a1: "\x. x \ S \ a x = 1" and a0: "\x. x \ S' \ a x = 0" - apply (rule Urysohn_local [OF cloTS cloTS' \S \ S' = {}\, of 1 0], blast) - done + by (rule Urysohn_local [OF cloTS cloTS' \S \ S' = {}\, of 1 0], blast) then have ain: "\x. x \ T \ a x \ {0..1}" using closed_segment_eq_real_ivl by auto have inV: "(u * a t, t) \ V" if "t \ T" "0 \ u" "u \ 1" for t u @@ -1872,8 +1801,7 @@ assume "(u * a t, t) \ V" with ain [OF \t \ T\] have "a t = 0" apply simp - apply (rule a0) - by (metis (no_types, lifting) Diff_iff S'_def SigmaI atLeastAtMost_iff mem_Collect_eq mult_le_one mult_nonneg_nonneg that) + by (metis (no_types, lifting) a0 DiffI S'_def SigmaI atLeastAtMost_iff mem_Collect_eq mult_le_one mult_nonneg_nonneg that) show False using B_def \(u * a t, t) \ V\ \B \ V\ \a t = 0\ that by auto qed @@ -1883,9 +1811,7 @@ proof (simp add: homotopic_with, intro exI conjI) show "continuous_on ({0..1} \ T) (k \ (\z. (fst z *\<^sub>R (a \ snd) z, snd z)))" apply (intro continuous_on_compose continuous_intros) - apply (rule continuous_on_subset [OF conta], force) - apply (rule continuous_on_subset [OF contk]) - apply (force intro: inV) + apply (force intro: inV continuous_on_subset [OF contk] continuous_on_subset [OF conta])+ done show "(k \ (\z. (fst z *\<^sub>R (a \ snd) z, snd z))) ` ({0..1} \ T) \ U" using inV kim by auto @@ -1927,9 +1853,10 @@ using \closed S\ closed_closedin by fastforce then obtain g where "continuous_on UNIV g" "range g \ T" "\x. x \ S \ g x = f x" - apply (rule Borsuk_homotopy_extension_homotopic [OF _ _ continuous_on_const _ c, where T=UNIV]) - using \ANR T\ \S \ {}\ c homotopic_with_imp_subset1 apply fastforce+ - done + proof (rule Borsuk_homotopy_extension_homotopic) + show "range (\x. c) \ T" + using \S \ {}\ c homotopic_with_imp_subset1 by fastforce + qed (use assms c in auto) then show ?rhs by blast next assume ?rhs @@ -1963,17 +1890,13 @@ (is "?lhs = ?rhs") proof (cases "r = 0") case True with fim show ?thesis - apply auto - using fim continuous_on_const apply fastforce - by (metis contf contractible_sing nullhomotopic_into_contractible) + by (metis ANR_sphere \closed S\ \S \ {}\ contf nullhomotopic_into_ANR_extension) next case False then have eq: "sphere a r = rel_frontier (cball a r)" by simp show ?thesis - using fim unfolding eq - apply (rule nullhomotopic_into_rel_frontier_extension [OF \closed S\ contf convex_cball bounded_cball]) - apply (rule \S \ {}\) - done + using fim nullhomotopic_into_rel_frontier_extension [OF \closed S\ contf convex_cball bounded_cball] + by (simp add: \S \ {}\ eq) qed proposition\<^marker>\tag unimportant\ Borsuk_map_essential_bounded_component: @@ -2002,18 +1925,15 @@ have nog: "\g. continuous_on (S \ connected_component_set (- S) a) g \ g ` (S \ connected_component_set (- S) a) \ sphere 0 1 \ (\x\S. g x = (x - a) /\<^sub>R norm (x - a))" - if "bounded (connected_component_set (- S) a)" - apply (rule non_extensible_Borsuk_map [OF \compact S\ componentsI _ aincc]) - using \a \ S\ that by auto + if "bounded (connected_component_set (- S) a)" + using non_extensible_Borsuk_map [OF \compact S\ componentsI _ aincc] \a \ S\ that by auto obtain g where "range g \ sphere 0 1" "continuous_on UNIV g" "\x. x \ S \ g x = (x - a) /\<^sub>R norm (x - a)" using notr by (auto simp: nullhomotopic_into_sphere_extension [OF \closed S\ continuous_on_Borsuk_map [OF \a \ S\] False s01]) with \a \ S\ show "\ ?lhs" - apply (clarsimp simp: Borsuk_map_into_sphere [of a S, symmetric] dest!: nog) - apply (drule_tac x=g in spec) - using continuous_on_subset by fastforce + by (metis UNIV_I continuous_on_subset image_subset_iff nog subsetI) next assume "\ ?lhs" then obtain b where b: "b \ connected_component_set (- S) a" and "r \ norm b" @@ -2021,10 +1941,13 @@ then have bnot: "b \ ball 0 r" by simp have "homotopic_with_canon (\x. True) S (sphere 0 1) (\x. (x - a) /\<^sub>R norm (x - a)) - (\x. (x - b) /\<^sub>R norm (x - b))" - apply (rule Borsuk_maps_homotopic_in_path_component) - using \closed S\ b open_Compl open_path_connected_component apply fastforce - done + (\x. (x - b) /\<^sub>R norm (x - b))" + proof - + have "path_component (- S) a b" + by (metis (full_types) \closed S\ b mem_Collect_eq open_Compl open_path_connected_component) + then show ?thesis + using Borsuk_maps_homotopic_in_path_component by blast + qed moreover obtain c where "homotopic_with_canon (\x. True) (ball 0 r) (sphere 0 1) (\x. inverse (norm (x - b)) *\<^sub>R (x - b)) (\x. c)" @@ -2136,8 +2059,7 @@ show ?thesis proof have "continuous_on (T \ (S - T)) ?g" - apply (rule continuous_on_cases_local) - using Seq clo ope by (auto simp: contf intro: continuous_on_cases_local) + using Seq clo ope by (intro continuous_on_cases_local) (auto simp: contf) with Seq show "continuous_on S ?g" by metis show "?g ` S \ U" @@ -2445,8 +2367,7 @@ qed show ?lhs apply (subst Seq) - apply (rule homotopic_on_clopen_Union) - using Seq clo\ ope\ hom\ by auto + using Seq clo\ ope\ hom\ by (intro homotopic_on_clopen_Union) auto qed ultimately show ?thesis by blast qed @@ -2539,11 +2460,14 @@ have "S retract_of UNIV" using S compact_AR by blast show ?thesis - apply (clarsimp simp: connected_iff_connected_component_eq) - apply (rule cobounded_unique_unbounded_component [OF _ 2]) - apply (simp add: \compact S\ compact_imp_bounded) - apply (meson ComplI S componentsI unbounded_components_complement_absolute_retract)+ - done + proof (clarsimp simp: connected_iff_connected_component_eq) + have "\ bounded (connected_component_set (- S) x)" if "x \ S" for x + by (meson Compl_iff assms componentsI that unbounded_components_complement_absolute_retract) + then show "connected_component_set (- S) x = connected_component_set (- S) y" + if "x \ S" "y \ S" for x y + using cobounded_unique_unbounded_component [OF _ 2] + by (metis \compact S\ compact_imp_bounded double_compl that) + qed qed lemma path_connected_complement_absolute_retract: @@ -2591,5 +2515,4 @@ shows "connected(-S)" using assms path_connected_complement_homeomorphic_interval path_connected_imp_connected by blast - end