# HG changeset patch # User paulson # Date 1688989706 -3600 # Node ID 6726b20289b464f6bbb80dfedbdba1c17dbdd161 # Parent aabbf14723fc5bb4a7076f7457cb3ee573e48fd9 A bit of prerelease tidying diff -r aabbf14723fc -r 6726b20289b4 src/HOL/Analysis/Abstract_Topological_Spaces.thy --- a/src/HOL/Analysis/Abstract_Topological_Spaces.thy Mon Jul 10 10:35:38 2023 +0100 +++ b/src/HOL/Analysis/Abstract_Topological_Spaces.thy Mon Jul 10 12:48:26 2023 +0100 @@ -3401,7 +3401,7 @@ strict_mono_iff_mono top_greatest topspace_euclidean topspace_euclidean_subtopology) -subsection\Normal spaces including Urysohn's lemma and the Tietze extension theorem\ +subsection\Normal spaces\ definition normal_space where "normal_space X \ diff -r aabbf14723fc -r 6726b20289b4 src/HOL/Analysis/Continuous_Extension.thy --- a/src/HOL/Analysis/Continuous_Extension.thy Mon Jul 10 10:35:38 2023 +0100 +++ b/src/HOL/Analysis/Continuous_Extension.thy Mon Jul 10 12:48:26 2023 +0100 @@ -5,7 +5,7 @@ section \Continuous Extensions of Functions\ theory Continuous_Extension -imports Starlike +imports Starlike begin subsection\Partitions of unity subordinate to locally finite open coverings\ @@ -152,9 +152,7 @@ proof - have "f x = b \ (setdist {x} S / (setdist {x} S + setdist {x} T)) = 1" unfolding f_def - apply (rule iffI) - apply (metis \a \ b\ add_diff_cancel_left' eq_iff_diff_eq_0 pth_1 real_vector.scale_right_imp_eq, force) - done + by (metis add_diff_cancel_left' \a \ b\ diff_add_cancel eq_iff_diff_eq_0 scaleR_cancel_right scaleR_one) also have "... \ setdist {x} T = 0 \ setdist {x} S \ 0" using sdpos that by (simp add: field_split_simps) linarith @@ -166,6 +164,47 @@ qed qed +lemma Urysohn_local_strong_aux: + assumes US: "closedin (top_of_set U) S" + and UT: "closedin (top_of_set U) T" + and "S \ T = {}" "a \ b" "S \ {}" + obtains f :: "'a::euclidean_space \ 'b::euclidean_space" + where "continuous_on U f" + "\x. x \ U \ f x \ closed_segment a b" + "\x. x \ U \ (f x = a \ x \ S)" + "\x. x \ U \ (f x = b \ x \ T)" +proof (cases "T = {}") + case True show ?thesis + proof (cases "S = U") + case True with \T = {}\ \a \ b\ show ?thesis + by (rule_tac f = "\x. a" in that) (auto) + next + case False + with US closedin_subset obtain c where c: "c \ U" "c \ S" + by fastforce + obtain f where f: "continuous_on U f" + "\x. x \ U \ f x \ closed_segment a (midpoint a b)" + "\x. x \ U \ (f x = midpoint a b \ x = c)" + "\x. x \ U \ (f x = a \ x \ S)" + apply (rule Urysohn_both_ne [of U S "{c}" a "midpoint a b"]) + using c \S \ {}\ assms apply simp_all + apply (metis midpoint_eq_endpoint) + done + show ?thesis + apply (rule_tac f=f in that) + using \S \ {}\ \T = {}\ f \a \ b\ + apply simp_all + apply (metis (no_types) closed_segment_commute csegment_midpoint_subset midpoint_sym subset_iff) + apply (metis closed_segment_commute midpoint_sym notin_segment_midpoint) + done + qed +next + case False + show ?thesis + using Urysohn_both_ne [OF US UT \S \ T = {}\ \S \ {}\ \T \ {}\ \a \ b\] that + by blast +qed + proposition Urysohn_local_strong: assumes US: "closedin (top_of_set U) S" and UT: "closedin (top_of_set U) T" @@ -191,62 +230,13 @@ qed next case False - show ?thesis - proof (cases "T = U") - case True with \S = {}\ \a \ b\ show ?thesis - by (rule_tac f = "\x. b" in that) (auto) - next - case False - with UT closedin_subset obtain c where c: "c \ U" "c \ T" - by fastforce - obtain f where f: "continuous_on U f" - "\x. x \ U \ f x \ closed_segment (midpoint a b) b" - "\x. x \ U \ (f x = midpoint a b \ x = c)" - "\x. x \ U \ (f x = b \ x \ T)" - apply (rule Urysohn_both_ne [of U "{c}" T "midpoint a b" "b"]) - using c \T \ {}\ assms apply simp_all - done - show ?thesis - apply (rule_tac f=f in that) - using \S = {}\ \T \ {}\ f csegment_midpoint_subset notin_segment_midpoint [OF \a \ b\] - apply force+ - done - qed + with Urysohn_local_strong_aux [OF UT US] assms show ?thesis + by (smt (verit) True closed_segment_commute inf_bot_right that) qed next case False - show ?thesis - proof (cases "T = {}") - case True show ?thesis - proof (cases "S = U") - case True with \T = {}\ \a \ b\ show ?thesis - by (rule_tac f = "\x. a" in that) (auto) - next - case False - with US closedin_subset obtain c where c: "c \ U" "c \ S" - by fastforce - obtain f where f: "continuous_on U f" - "\x. x \ U \ f x \ closed_segment a (midpoint a b)" - "\x. x \ U \ (f x = midpoint a b \ x = c)" - "\x. x \ U \ (f x = a \ x \ S)" - apply (rule Urysohn_both_ne [of U S "{c}" a "midpoint a b"]) - using c \S \ {}\ assms apply simp_all - apply (metis midpoint_eq_endpoint) - done - show ?thesis - apply (rule_tac f=f in that) - using \S \ {}\ \T = {}\ f \a \ b\ - apply simp_all - apply (metis (no_types) closed_segment_commute csegment_midpoint_subset midpoint_sym subset_iff) - apply (metis closed_segment_commute midpoint_sym notin_segment_midpoint) - done - qed - next - case False - show ?thesis - using Urysohn_both_ne [OF US UT \S \ T = {}\ \S \ {}\ \T \ {}\ \a \ b\] that - by blast - qed + with Urysohn_local_strong_aux [OF assms] show ?thesis + using that by blast qed lemma Urysohn_local: @@ -263,12 +253,8 @@ by (rule_tac f = "\x. b" in that) (auto) next case False - then show ?thesis - apply (rule Urysohn_local_strong [OF assms]) - apply (erule that, assumption) - apply (meson US closedin_singleton closedin_trans) - apply (meson UT closedin_singleton closedin_trans) - done + with Urysohn_local_strong [OF assms] show ?thesis + by (smt (verit) US UT closedin_imp_subset subset_eq that) qed lemma Urysohn_strong: @@ -298,20 +284,6 @@ text \See \<^cite>\"dugundji"\.\ -lemma convex_supp_sum: - assumes "convex S" and 1: "supp_sum u I = 1" - and "\i. i \ I \ 0 \ u i \ (u i = 0 \ f i \ S)" - shows "supp_sum (\i. u i *\<^sub>R f i) I \ S" -proof - - have fin: "finite {i \ I. u i \ 0}" - using 1 sum.infinite by (force simp: supp_sum_def support_on_def) - then have "supp_sum (\i. u i *\<^sub>R f i) I = sum (\i. u i *\<^sub>R f i) {i \ I. u i \ 0}" - by (force intro: sum.mono_neutral_left simp: supp_sum_def support_on_def) - also have "... \ S" - using 1 assms by (force simp: supp_sum_def support_on_def intro: convex_sum [OF fin \convex S\]) - finally show ?thesis . -qed - theorem Dugundji: fixes f :: "'a::{metric_space,second_countable_topology} \ 'b::real_inner" assumes "convex C" "C \ {}" @@ -320,11 +292,13 @@ obtains g where "continuous_on U g" "g ` U \ C" "\x. x \ S \ g x = f x" proof (cases "S = {}") - case True then show thesis - apply (rule_tac g="\x. SOME y. y \ C" in that) - apply (rule continuous_intros) - apply (meson all_not_in_conv \C \ {}\ image_subsetI someI_ex, simp) - done + case True show thesis + proof + show "continuous_on U (\x. SOME y. y \ C)" + by (rule continuous_intros) + show "(\x. SOME y. y \ C) ` U \ C" + by (simp add: \C \ {}\ image_subsetI some_in_eq) + qed (use True in auto) next case False then have sd_pos: "\x. \x \ U; x \ S\ \ 0 < setdist {x} S" @@ -348,9 +322,7 @@ using setdist_ltE [of "{v}" S "2 * setdist {v} S"] using False sd_pos by force with v show ?thesis - apply (rule_tac x=v in exI) - apply (rule_tac x=a in exI, auto) - done + by force qed then obtain \ \ where VA: "\T. T \ \ \ \ T \ U \ \ T \ S \ \ T \ S \