7525 shows "connected (f ` s)" |
7525 shows "connected (f ` s)" |
7526 using connected_continuous_image assms linear_continuous_on linear_conv_bounded_linear by blast |
7526 using connected_continuous_image assms linear_continuous_on linear_conv_bounded_linear by blast |
7527 |
7527 |
7528 text \<open>Continuity implies uniform continuity on a compact domain.\<close> |
7528 text \<open>Continuity implies uniform continuity on a compact domain.\<close> |
7529 |
7529 |
7530 lemma compact_uniformly_continuous: |
7530 subsection \<open>Continuity implies uniform continuity on a compact domain.\<close> |
|
7531 |
|
7532 text\<open>From the proof of the Heine-Borel theorem: Lemma 2 in section 3.7, page 69 of |
|
7533 J. C. Burkill and H. Burkill. A Second Course in Mathematical Analysis (CUP, 2002)\<close> |
|
7534 |
|
7535 lemma Heine_Borel_lemma: |
|
7536 assumes "compact S" and Ssub: "S \<subseteq> \<Union>\<G>" and op: "\<And>G. G \<in> \<G> \<Longrightarrow> open G" |
|
7537 obtains e where "0 < e" "\<And>x. x \<in> S \<Longrightarrow> \<exists>G \<in> \<G>. ball x e \<subseteq> G" |
|
7538 proof - |
|
7539 have False if neg: "\<And>e. 0 < e \<Longrightarrow> \<exists>x \<in> S. \<forall>G \<in> \<G>. \<not> ball x e \<subseteq> G" |
|
7540 proof - |
|
7541 have "\<exists>x \<in> S. \<forall>G \<in> \<G>. \<not> ball x (1 / Suc n) \<subseteq> G" for n |
|
7542 using neg by simp |
|
7543 then obtain f where "\<And>n. f n \<in> S" and fG: "\<And>G n. G \<in> \<G> \<Longrightarrow> \<not> ball (f n) (1 / Suc n) \<subseteq> G" |
|
7544 by metis |
|
7545 then obtain l r where "l \<in> S" "subseq r" and to_l: "(f \<circ> r) \<longlonglongrightarrow> l" |
|
7546 using \<open>compact S\<close> compact_def that by metis |
|
7547 then obtain G where "l \<in> G" "G \<in> \<G>" |
|
7548 using Ssub by auto |
|
7549 then obtain e where "0 < e" and e: "\<And>z. dist z l < e \<Longrightarrow> z \<in> G" |
|
7550 using op open_dist by blast |
|
7551 obtain N1 where N1: "\<And>n. n \<ge> N1 \<Longrightarrow> dist (f (r n)) l < e/2" |
|
7552 using to_l apply (simp add: lim_sequentially) |
|
7553 using \<open>0 < e\<close> half_gt_zero that by blast |
|
7554 obtain N2 where N2: "of_nat N2 > 2/e" |
|
7555 using reals_Archimedean2 by blast |
|
7556 obtain x where "x \<in> ball (f (r (max N1 N2))) (1 / real (Suc (r (max N1 N2))))" and "x \<notin> G" |
|
7557 using fG [OF \<open>G \<in> \<G>\<close>, of "r (max N1 N2)"] by blast |
|
7558 then have "dist (f (r (max N1 N2))) x < 1 / real (Suc (r (max N1 N2)))" |
|
7559 by simp |
|
7560 also have "... \<le> 1 / real (Suc (max N1 N2))" |
|
7561 apply (simp add: divide_simps del: max.bounded_iff) |
|
7562 using \<open>subseq r\<close> seq_suble by blast |
|
7563 also have "... \<le> 1 / real (Suc N2)" |
|
7564 by (simp add: field_simps) |
|
7565 also have "... < e/2" |
|
7566 using N2 \<open>0 < e\<close> by (simp add: field_simps) |
|
7567 finally have "dist (f (r (max N1 N2))) x < e / 2" . |
|
7568 moreover have "dist (f (r (max N1 N2))) l < e/2" |
|
7569 using N1 max.cobounded1 by blast |
|
7570 ultimately have "dist x l < e" |
|
7571 using dist_triangle_half_r by blast |
|
7572 then show ?thesis |
|
7573 using e \<open>x \<notin> G\<close> by blast |
|
7574 qed |
|
7575 then show ?thesis |
|
7576 by (meson that) |
|
7577 qed |
|
7578 |
|
7579 lemma compact_uniformly_equicontinuous: |
|
7580 assumes "compact S" |
|
7581 and cont: "\<And>x e. \<lbrakk>x \<in> S; 0 < e\<rbrakk> |
|
7582 \<Longrightarrow> \<exists>d. 0 < d \<and> |
|
7583 (\<forall>f \<in> \<F>. \<forall>x' \<in> S. dist x' x < d \<longrightarrow> dist (f x') (f x) < e)" |
|
7584 and "0 < e" |
|
7585 obtains d where "0 < d" |
|
7586 "\<And>f x x'. \<lbrakk>f \<in> \<F>; x \<in> S; x' \<in> S; dist x' x < d\<rbrakk> \<Longrightarrow> dist (f x') (f x) < e" |
|
7587 proof - |
|
7588 obtain d where d_pos: "\<And>x e. \<lbrakk>x \<in> S; 0 < e\<rbrakk> \<Longrightarrow> 0 < d x e" |
|
7589 and d_dist : "\<And>x x' e f. \<lbrakk>dist x' x < d x e; x \<in> S; x' \<in> S; 0 < e; f \<in> \<F>\<rbrakk> \<Longrightarrow> dist (f x') (f x) < e" |
|
7590 using cont by metis |
|
7591 let ?\<G> = "((\<lambda>x. ball x (d x (e / 2))) ` S)" |
|
7592 have Ssub: "S \<subseteq> \<Union> ?\<G>" |
|
7593 by clarsimp (metis d_pos \<open>0 < e\<close> dist_self half_gt_zero_iff) |
|
7594 then obtain k where "0 < k" and k: "\<And>x. x \<in> S \<Longrightarrow> \<exists>G \<in> ?\<G>. ball x k \<subseteq> G" |
|
7595 by (rule Heine_Borel_lemma [OF \<open>compact S\<close>]) auto |
|
7596 moreover have "dist (f v) (f u) < e" if "f \<in> \<F>" "u \<in> S" "v \<in> S" "dist v u < k" for f u v |
|
7597 proof - |
|
7598 obtain G where "G \<in> ?\<G>" "u \<in> G" "v \<in> G" |
|
7599 using k that |
|
7600 by (metis \<open>dist v u < k\<close> \<open>u \<in> S\<close> \<open>0 < k\<close> centre_in_ball subsetD dist_commute mem_ball) |
|
7601 then obtain w where w: "dist w u < d w (e / 2)" "dist w v < d w (e / 2)" "w \<in> S" |
|
7602 by auto |
|
7603 with that d_dist have "dist (f w) (f v) < e/2" |
|
7604 by (metis \<open>0 < e\<close> dist_commute half_gt_zero) |
|
7605 moreover |
|
7606 have "dist (f w) (f u) < e/2" |
|
7607 using that d_dist w by (metis \<open>0 < e\<close> dist_commute divide_pos_pos zero_less_numeral) |
|
7608 ultimately show ?thesis |
|
7609 using dist_triangle_half_r by blast |
|
7610 qed |
|
7611 ultimately show ?thesis using that by blast |
|
7612 qed |
|
7613 |
|
7614 corollary compact_uniformly_continuous: |
7531 fixes f :: "'a :: metric_space \<Rightarrow> 'b :: metric_space" |
7615 fixes f :: "'a :: metric_space \<Rightarrow> 'b :: metric_space" |
7532 assumes f: "continuous_on s f" |
7616 assumes f: "continuous_on S f" and S: "compact S" |
7533 and s: "compact s" |
7617 shows "uniformly_continuous_on S f" |
7534 shows "uniformly_continuous_on s f" |
7618 using f |
7535 unfolding uniformly_continuous_on_def |
7619 unfolding continuous_on_iff uniformly_continuous_on_def |
7536 proof (cases, safe) |
7620 by (force intro: compact_uniformly_equicontinuous [OF S, of "{f}"]) |
7537 fix e :: real |
|
7538 assume "0 < e" "s \<noteq> {}" |
|
7539 define R where [simp]: |
|
7540 "R = {(y, d). y \<in> s \<and> 0 < d \<and> ball y d \<inter> s \<subseteq> {x \<in> s. f x \<in> ball (f y) (e/2)}}" |
|
7541 let ?b = "(\<lambda>(y, d). ball y (d/2))" |
|
7542 have "(\<forall>r\<in>R. open (?b r))" "s \<subseteq> (\<Union>r\<in>R. ?b r)" |
|
7543 proof safe |
|
7544 fix y |
|
7545 assume "y \<in> s" |
|
7546 from continuous_openin_preimage_gen[OF f open_ball] |
|
7547 obtain T where "open T" and T: "{x \<in> s. f x \<in> ball (f y) (e/2)} = T \<inter> s" |
|
7548 unfolding openin_subtopology open_openin by metis |
|
7549 then obtain d where "ball y d \<subseteq> T" "0 < d" |
|
7550 using \<open>0 < e\<close> \<open>y \<in> s\<close> by (auto elim!: openE) |
|
7551 with T \<open>y \<in> s\<close> show "y \<in> (\<Union>r\<in>R. ?b r)" |
|
7552 by (intro UN_I[of "(y, d)"]) auto |
|
7553 qed auto |
|
7554 with s obtain D where D: "finite D" "D \<subseteq> R" "s \<subseteq> (\<Union>(y, d)\<in>D. ball y (d/2))" |
|
7555 by (rule compactE_image) |
|
7556 with \<open>s \<noteq> {}\<close> have [simp]: "\<And>x. x < Min (snd ` D) \<longleftrightarrow> (\<forall>(y, d)\<in>D. x < d)" |
|
7557 by (subst Min_gr_iff) auto |
|
7558 show "\<exists>d>0. \<forall>x\<in>s. \<forall>x'\<in>s. dist x' x < d \<longrightarrow> dist (f x') (f x) < e" |
|
7559 proof (rule, safe) |
|
7560 fix x x' |
|
7561 assume in_s: "x' \<in> s" "x \<in> s" |
|
7562 with D obtain y d where x: "x \<in> ball y (d/2)" "(y, d) \<in> D" |
|
7563 by blast |
|
7564 moreover assume "dist x x' < Min (snd`D) / 2" |
|
7565 ultimately have "dist y x' < d" |
|
7566 by (intro dist_triangle_half_r[of x _ d]) (auto simp: dist_commute) |
|
7567 with D x in_s show "dist (f x) (f x') < e" |
|
7568 by (intro dist_triangle_half_r[of "f y" _ e]) (auto simp: dist_commute subset_eq) |
|
7569 qed (insert D, auto) |
|
7570 qed auto |
|
7571 |
7621 |
7572 subsection \<open>Topological stuff about the set of Reals\<close> |
7622 subsection \<open>Topological stuff about the set of Reals\<close> |
7573 |
7623 |
7574 lemma open_real: |
7624 lemma open_real: |
7575 fixes s :: "real set" |
7625 fixes s :: "real set" |
10205 obtains \<B> :: "'a::euclidean_space set set" |
10255 obtains \<B> :: "'a::euclidean_space set set" |
10206 where "countable \<B>" "\<And>C. C \<in> \<B> \<Longrightarrow> open C" |
10256 where "countable \<B>" "\<And>C. C \<in> \<B> \<Longrightarrow> open C" |
10207 "\<And>S. open S \<Longrightarrow> \<exists>U. U \<subseteq> \<B> \<and> S = \<Union>U" |
10257 "\<And>S. open S \<Longrightarrow> \<exists>U. U \<subseteq> \<B> \<and> S = \<Union>U" |
10208 by (metis ex_countable_basis topological_basis_def) |
10258 by (metis ex_countable_basis topological_basis_def) |
10209 |
10259 |
|
10260 lemma subset_second_countable: |
|
10261 obtains \<B> :: "'a:: euclidean_space set set" |
|
10262 where "countable \<B>" |
|
10263 "{} \<notin> \<B>" |
|
10264 "\<And>C. C \<in> \<B> \<Longrightarrow> openin(subtopology euclidean S) C" |
|
10265 "\<And>T. openin(subtopology euclidean S) T \<Longrightarrow> \<exists>\<U>. \<U> \<subseteq> \<B> \<and> T = \<Union>\<U>" |
|
10266 proof - |
|
10267 obtain \<B> :: "'a set set" |
|
10268 where "countable \<B>" |
|
10269 and opeB: "\<And>C. C \<in> \<B> \<Longrightarrow> openin(subtopology euclidean S) C" |
|
10270 and \<B>: "\<And>T. openin(subtopology euclidean S) T \<Longrightarrow> \<exists>\<U>. \<U> \<subseteq> \<B> \<and> T = \<Union>\<U>" |
|
10271 proof - |
|
10272 obtain \<C> :: "'a set set" |
|
10273 where "countable \<C>" and ope: "\<And>C. C \<in> \<C> \<Longrightarrow> open C" |
|
10274 and \<C>: "\<And>S. open S \<Longrightarrow> \<exists>U. U \<subseteq> \<C> \<and> S = \<Union>U" |
|
10275 by (metis univ_second_countable that) |
|
10276 show ?thesis |
|
10277 proof |
|
10278 show "countable ((\<lambda>C. S \<inter> C) ` \<C>)" |
|
10279 by (simp add: \<open>countable \<C>\<close>) |
|
10280 show "\<And>C. C \<in> op \<inter> S ` \<C> \<Longrightarrow> openin (subtopology euclidean S) C" |
|
10281 using ope by auto |
|
10282 show "\<And>T. openin (subtopology euclidean S) T \<Longrightarrow> \<exists>\<U>\<subseteq>op \<inter> S ` \<C>. T = \<Union>\<U>" |
|
10283 by (metis \<C> image_mono inf_Sup openin_open) |
|
10284 qed |
|
10285 qed |
|
10286 show ?thesis |
|
10287 proof |
|
10288 show "countable (\<B> - {{}})" |
|
10289 using \<open>countable \<B>\<close> by blast |
|
10290 show "\<And>C. \<lbrakk>C \<in> \<B> - {{}}\<rbrakk> \<Longrightarrow> openin (subtopology euclidean S) C" |
|
10291 by (simp add: \<open>\<And>C. C \<in> \<B> \<Longrightarrow> openin (subtopology euclidean S) C\<close>) |
|
10292 show "\<exists>\<U>\<subseteq>\<B> - {{}}. T = \<Union>\<U>" if "openin (subtopology euclidean S) T" for T |
|
10293 using \<B> [OF that] |
|
10294 apply clarify |
|
10295 apply (rule_tac x="\<U> - {{}}" in exI, auto) |
|
10296 done |
|
10297 qed auto |
|
10298 qed |
|
10299 |
10210 lemma univ_second_countable_sequence: |
10300 lemma univ_second_countable_sequence: |
10211 obtains B :: "nat \<Rightarrow> 'a::euclidean_space set" |
10301 obtains B :: "nat \<Rightarrow> 'a::euclidean_space set" |
10212 where "inj B" "\<And>n. open(B n)" "\<And>S. open S \<Longrightarrow> \<exists>k. S = \<Union>{B n |n. n \<in> k}" |
10302 where "inj B" "\<And>n. open(B n)" "\<And>S. open S \<Longrightarrow> \<exists>k. S = \<Union>{B n |n. n \<in> k}" |
10213 proof - |
10303 proof - |
10214 obtain \<B> :: "'a set set" |
10304 obtain \<B> :: "'a set set" |
10240 done |
10330 done |
10241 show ?thesis |
10331 show ?thesis |
10242 apply (rule that [OF \<open>inj f\<close> _ *]) |
10332 apply (rule that [OF \<open>inj f\<close> _ *]) |
10243 apply (auto simp: \<open>\<B> = range f\<close> op) |
10333 apply (auto simp: \<open>\<B> = range f\<close> op) |
10244 done |
10334 done |
|
10335 qed |
|
10336 |
|
10337 proposition separable: |
|
10338 fixes S :: "'a:: euclidean_space set" |
|
10339 obtains T where "countable T" "T \<subseteq> S" "S \<subseteq> closure T" |
|
10340 proof - |
|
10341 obtain \<B> :: "'a:: euclidean_space set set" |
|
10342 where "countable \<B>" |
|
10343 and "{} \<notin> \<B>" |
|
10344 and ope: "\<And>C. C \<in> \<B> \<Longrightarrow> openin(subtopology euclidean S) C" |
|
10345 and if_ope: "\<And>T. openin(subtopology euclidean S) T \<Longrightarrow> \<exists>\<U>. \<U> \<subseteq> \<B> \<and> T = \<Union>\<U>" |
|
10346 by (meson subset_second_countable) |
|
10347 then obtain f where f: "\<And>C. C \<in> \<B> \<Longrightarrow> f C \<in> C" |
|
10348 by (metis equals0I) |
|
10349 show ?thesis |
|
10350 proof |
|
10351 show "countable (f ` \<B>)" |
|
10352 by (simp add: \<open>countable \<B>\<close>) |
|
10353 show "f ` \<B> \<subseteq> S" |
|
10354 using ope f openin_imp_subset by blast |
|
10355 show "S \<subseteq> closure (f ` \<B>)" |
|
10356 proof (clarsimp simp: closure_approachable) |
|
10357 fix x and e::real |
|
10358 assume "x \<in> S" "0 < e" |
|
10359 have "openin (subtopology euclidean S) (S \<inter> ball x e)" |
|
10360 by (simp add: openin_Int_open) |
|
10361 with if_ope obtain \<U> where \<U>: "\<U> \<subseteq> \<B>" "S \<inter> ball x e = \<Union>\<U>" |
|
10362 by meson |
|
10363 show "\<exists>C \<in> \<B>. dist (f C) x < e" |
|
10364 proof (cases "\<U> = {}") |
|
10365 case True |
|
10366 then show ?thesis |
|
10367 using \<open>0 < e\<close> \<U> \<open>x \<in> S\<close> by auto |
|
10368 next |
|
10369 case False |
|
10370 then obtain C where "C \<in> \<U>" by blast |
|
10371 show ?thesis |
|
10372 proof |
|
10373 show "dist (f C) x < e" |
|
10374 by (metis Int_iff Union_iff \<U> \<open>C \<in> \<U>\<close> dist_commute f mem_ball subsetCE) |
|
10375 show "C \<in> \<B>" |
|
10376 using \<open>\<U> \<subseteq> \<B>\<close> \<open>C \<in> \<U>\<close> by blast |
|
10377 qed |
|
10378 qed |
|
10379 qed |
|
10380 qed |
10245 qed |
10381 qed |
10246 |
10382 |
10247 proposition Lindelof: |
10383 proposition Lindelof: |
10248 fixes \<F> :: "'a::euclidean_space set set" |
10384 fixes \<F> :: "'a::euclidean_space set set" |
10249 assumes \<F>: "\<And>S. S \<in> \<F> \<Longrightarrow> open S" |
10385 assumes \<F>: "\<And>S. S \<in> \<F> \<Longrightarrow> open S" |
10787 then show ?thesis |
10923 then show ?thesis |
10788 by (simp add: connected_closedin_eq) |
10924 by (simp add: connected_closedin_eq) |
10789 qed |
10925 qed |
10790 |
10926 |
10791 lemma continuous_disconnected_range_constant_eq: |
10927 lemma continuous_disconnected_range_constant_eq: |
10792 "(connected s \<longleftrightarrow> |
10928 "(connected S \<longleftrightarrow> |
10793 (\<forall>f::'a::topological_space \<Rightarrow> 'b::real_normed_algebra_1. |
10929 (\<forall>f::'a::topological_space \<Rightarrow> 'b::real_normed_algebra_1. |
10794 \<forall>t. continuous_on s f \<and> f ` s \<subseteq> t \<and> (\<forall>y \<in> t. connected_component_set t y = {y}) |
10930 \<forall>t. continuous_on S f \<and> f ` S \<subseteq> t \<and> (\<forall>y \<in> t. connected_component_set t y = {y}) |
10795 \<longrightarrow> (\<exists>a::'b. \<forall>x \<in> s. f x = a)))" (is ?thesis1) |
10931 \<longrightarrow> (\<exists>a::'b. \<forall>x \<in> S. f x = a)))" (is ?thesis1) |
10796 and continuous_discrete_range_constant_eq: |
10932 and continuous_discrete_range_constant_eq: |
10797 "(connected s \<longleftrightarrow> |
10933 "(connected S \<longleftrightarrow> |
10798 (\<forall>f::'a::topological_space \<Rightarrow> 'b::real_normed_algebra_1. |
10934 (\<forall>f::'a::topological_space \<Rightarrow> 'b::real_normed_algebra_1. |
10799 continuous_on s f \<and> |
10935 continuous_on S f \<and> |
10800 (\<forall>x \<in> s. \<exists>e. 0 < e \<and> (\<forall>y. y \<in> s \<and> (f y \<noteq> f x) \<longrightarrow> e \<le> norm(f y - f x))) |
10936 (\<forall>x \<in> S. \<exists>e. 0 < e \<and> (\<forall>y. y \<in> S \<and> (f y \<noteq> f x) \<longrightarrow> e \<le> norm(f y - f x))) |
10801 \<longrightarrow> (\<exists>a::'b. \<forall>x \<in> s. f x = a)))" (is ?thesis2) |
10937 \<longrightarrow> (\<exists>a::'b. \<forall>x \<in> S. f x = a)))" (is ?thesis2) |
10802 and continuous_finite_range_constant_eq: |
10938 and continuous_finite_range_constant_eq: |
10803 "(connected s \<longleftrightarrow> |
10939 "(connected S \<longleftrightarrow> |
10804 (\<forall>f::'a::topological_space \<Rightarrow> 'b::real_normed_algebra_1. |
10940 (\<forall>f::'a::topological_space \<Rightarrow> 'b::real_normed_algebra_1. |
10805 continuous_on s f \<and> finite (f ` s) |
10941 continuous_on S f \<and> finite (f ` S) |
10806 \<longrightarrow> (\<exists>a::'b. \<forall>x \<in> s. f x = a)))" (is ?thesis3) |
10942 \<longrightarrow> (\<exists>a::'b. \<forall>x \<in> S. f x = a)))" (is ?thesis3) |
10807 proof - |
10943 proof - |
10808 have *: "\<And>s t u v. \<lbrakk>s \<Longrightarrow> t; t \<Longrightarrow> u; u \<Longrightarrow> v; v \<Longrightarrow> s\<rbrakk> |
10944 have *: "\<And>s t u v. \<lbrakk>s \<Longrightarrow> t; t \<Longrightarrow> u; u \<Longrightarrow> v; v \<Longrightarrow> s\<rbrakk> |
10809 \<Longrightarrow> (s \<longleftrightarrow> t) \<and> (s \<longleftrightarrow> u) \<and> (s \<longleftrightarrow> v)" |
10945 \<Longrightarrow> (s \<longleftrightarrow> t) \<and> (s \<longleftrightarrow> u) \<and> (s \<longleftrightarrow> v)" |
10810 by blast |
10946 by blast |
10811 have "?thesis1 \<and> ?thesis2 \<and> ?thesis3" |
10947 have "?thesis1 \<and> ?thesis2 \<and> ?thesis3" |
10820 by blast+ |
10956 by blast+ |
10821 qed |
10957 qed |
10822 |
10958 |
10823 lemma continuous_discrete_range_constant: |
10959 lemma continuous_discrete_range_constant: |
10824 fixes f :: "'a::topological_space \<Rightarrow> 'b::real_normed_algebra_1" |
10960 fixes f :: "'a::topological_space \<Rightarrow> 'b::real_normed_algebra_1" |
10825 assumes s: "connected s" |
10961 assumes S: "connected S" |
10826 and "continuous_on s f" |
10962 and "continuous_on S f" |
10827 and "\<And>x. x \<in> s \<Longrightarrow> \<exists>e>0. \<forall>y. y \<in> s \<and> f y \<noteq> f x \<longrightarrow> e \<le> norm (f y - f x)" |
10963 and "\<And>x. x \<in> S \<Longrightarrow> \<exists>e>0. \<forall>y. y \<in> S \<and> f y \<noteq> f x \<longrightarrow> e \<le> norm (f y - f x)" |
10828 shows "\<exists>a. \<forall>x \<in> s. f x = a" |
10964 obtains a where "\<And>x. x \<in> S \<Longrightarrow> f x = a" |
10829 using continuous_discrete_range_constant_eq [THEN iffD1, OF s] assms |
10965 using continuous_discrete_range_constant_eq [THEN iffD1, OF S] assms |
10830 by blast |
10966 by blast |
10831 |
10967 |
10832 lemma continuous_finite_range_constant: |
10968 lemma continuous_finite_range_constant: |
10833 fixes f :: "'a::topological_space \<Rightarrow> 'b::real_normed_algebra_1" |
10969 fixes f :: "'a::topological_space \<Rightarrow> 'b::real_normed_algebra_1" |
10834 assumes "connected s" |
10970 assumes "connected S" |
10835 and "continuous_on s f" |
10971 and "continuous_on S f" |
10836 and "finite (f ` s)" |
10972 and "finite (f ` S)" |
10837 shows "\<exists>a. \<forall>x \<in> s. f x = a" |
10973 obtains a where "\<And>x. x \<in> S \<Longrightarrow> f x = a" |
10838 using assms continuous_finite_range_constant_eq |
10974 using assms continuous_finite_range_constant_eq |
10839 by blast |
10975 by blast |
10840 |
10976 |
10841 |
10977 |
10842 no_notation |
10978 no_notation |