3330 using continuous_transform_within [of d x UNIV f g] assms |
3330 using continuous_transform_within [of d x UNIV f g] assms |
3331 by (simp add: within_UNIV) |
3331 by (simp add: within_UNIV) |
3332 |
3332 |
3333 text{* Combination results for pointwise continuity. *} |
3333 text{* Combination results for pointwise continuity. *} |
3334 |
3334 |
3335 lemma continuous_const: "continuous net (\<lambda>x. c)" |
3335 lemma continuous_within_id: "continuous (at a within s) (\<lambda>x. x)" |
3336 by (auto simp add: continuous_def tendsto_const) |
3336 unfolding continuous_within by (rule tendsto_ident_at_within) |
3337 |
3337 |
3338 lemma continuous_cmul: |
3338 lemma continuous_at_id: "continuous (at a) (\<lambda>x. x)" |
3339 fixes f :: "'a::t2_space \<Rightarrow> 'b::real_normed_vector" |
3339 unfolding continuous_at by (rule tendsto_ident_at) |
3340 shows "continuous net f ==> continuous net (\<lambda>x. c *\<^sub>R f x)" |
3340 |
3341 by (auto simp add: continuous_def intro: tendsto_intros) |
3341 lemma continuous_const: "continuous F (\<lambda>x. c)" |
3342 |
3342 unfolding continuous_def by (rule tendsto_const) |
3343 lemma continuous_neg: |
3343 |
3344 fixes f :: "'a::t2_space \<Rightarrow> 'b::real_normed_vector" |
3344 lemma continuous_dist: |
3345 shows "continuous net f ==> continuous net (\<lambda>x. -(f x))" |
3345 assumes "continuous F f" and "continuous F g" |
3346 by (auto simp add: continuous_def tendsto_minus) |
3346 shows "continuous F (\<lambda>x. dist (f x) (g x))" |
|
3347 using assms unfolding continuous_def by (rule tendsto_dist) |
|
3348 |
|
3349 lemma continuous_norm: |
|
3350 shows "continuous F f \<Longrightarrow> continuous F (\<lambda>x. norm (f x))" |
|
3351 unfolding continuous_def by (rule tendsto_norm) |
|
3352 |
|
3353 lemma continuous_infnorm: |
|
3354 shows "continuous F f \<Longrightarrow> continuous F (\<lambda>x. infnorm (f x))" |
|
3355 unfolding continuous_def by (rule tendsto_infnorm) |
3347 |
3356 |
3348 lemma continuous_add: |
3357 lemma continuous_add: |
3349 fixes f g :: "'a::t2_space \<Rightarrow> 'b::real_normed_vector" |
3358 fixes f g :: "'a::t2_space \<Rightarrow> 'b::real_normed_vector" |
3350 shows "continuous net f \<Longrightarrow> continuous net g \<Longrightarrow> continuous net (\<lambda>x. f x + g x)" |
3359 shows "\<lbrakk>continuous F f; continuous F g\<rbrakk> \<Longrightarrow> continuous F (\<lambda>x. f x + g x)" |
3351 by (auto simp add: continuous_def tendsto_add) |
3360 unfolding continuous_def by (rule tendsto_add) |
3352 |
3361 |
3353 lemma continuous_sub: |
3362 lemma continuous_minus: |
|
3363 fixes f :: "'a::t2_space \<Rightarrow> 'b::real_normed_vector" |
|
3364 shows "continuous F f \<Longrightarrow> continuous F (\<lambda>x. - f x)" |
|
3365 unfolding continuous_def by (rule tendsto_minus) |
|
3366 |
|
3367 lemma continuous_diff: |
3354 fixes f g :: "'a::t2_space \<Rightarrow> 'b::real_normed_vector" |
3368 fixes f g :: "'a::t2_space \<Rightarrow> 'b::real_normed_vector" |
3355 shows "continuous net f \<Longrightarrow> continuous net g \<Longrightarrow> continuous net (\<lambda>x. f x - g x)" |
3369 shows "\<lbrakk>continuous F f; continuous F g\<rbrakk> \<Longrightarrow> continuous F (\<lambda>x. f x - g x)" |
3356 by (auto simp add: continuous_def tendsto_diff) |
3370 unfolding continuous_def by (rule tendsto_diff) |
3357 |
3371 |
|
3372 lemma continuous_scaleR: |
|
3373 fixes g :: "'a::t2_space \<Rightarrow> 'b::real_normed_vector" |
|
3374 shows "\<lbrakk>continuous F f; continuous F g\<rbrakk> \<Longrightarrow> continuous F (\<lambda>x. f x *\<^sub>R g x)" |
|
3375 unfolding continuous_def by (rule tendsto_scaleR) |
|
3376 |
|
3377 lemma continuous_mult: |
|
3378 fixes f g :: "'a::t2_space \<Rightarrow> 'b::real_normed_algebra" |
|
3379 shows "\<lbrakk>continuous F f; continuous F g\<rbrakk> \<Longrightarrow> continuous F (\<lambda>x. f x * g x)" |
|
3380 unfolding continuous_def by (rule tendsto_mult) |
|
3381 |
|
3382 lemma continuous_inner: |
|
3383 assumes "continuous F f" and "continuous F g" |
|
3384 shows "continuous F (\<lambda>x. inner (f x) (g x))" |
|
3385 using assms unfolding continuous_def by (rule tendsto_inner) |
|
3386 |
|
3387 lemma continuous_euclidean_component: |
|
3388 shows "continuous F f \<Longrightarrow> continuous F (\<lambda>x. f x $$ i)" |
|
3389 unfolding continuous_def by (rule tendsto_euclidean_component) |
|
3390 |
|
3391 lemma continuous_inverse: |
|
3392 fixes f :: "'a::t2_space \<Rightarrow> 'b::real_normed_div_algebra" |
|
3393 assumes "continuous F f" and "f (netlimit F) \<noteq> 0" |
|
3394 shows "continuous F (\<lambda>x. inverse (f x))" |
|
3395 using assms unfolding continuous_def by (rule tendsto_inverse) |
|
3396 |
|
3397 lemma continuous_at_within_inverse: |
|
3398 fixes f :: "'a::t2_space \<Rightarrow> 'b::real_normed_div_algebra" |
|
3399 assumes "continuous (at a within s) f" and "f a \<noteq> 0" |
|
3400 shows "continuous (at a within s) (\<lambda>x. inverse (f x))" |
|
3401 using assms unfolding continuous_within by (rule tendsto_inverse) |
|
3402 |
|
3403 lemma continuous_at_inverse: |
|
3404 fixes f :: "'a::t2_space \<Rightarrow> 'b::real_normed_div_algebra" |
|
3405 assumes "continuous (at a) f" and "f a \<noteq> 0" |
|
3406 shows "continuous (at a) (\<lambda>x. inverse (f x))" |
|
3407 using assms unfolding continuous_at by (rule tendsto_inverse) |
|
3408 |
|
3409 lemmas continuous_intros = continuous_at_id continuous_within_id |
|
3410 continuous_const continuous_dist continuous_norm continuous_infnorm |
|
3411 continuous_add continuous_minus continuous_diff |
|
3412 continuous_scaleR continuous_mult |
|
3413 continuous_inner continuous_euclidean_component |
|
3414 continuous_at_inverse continuous_at_within_inverse |
3358 |
3415 |
3359 text{* Same thing for setwise continuity. *} |
3416 text{* Same thing for setwise continuity. *} |
|
3417 |
|
3418 lemma continuous_on_id: "continuous_on s (\<lambda>x. x)" |
|
3419 unfolding continuous_on_def by (fast intro: tendsto_ident_at_within) |
3360 |
3420 |
3361 lemma continuous_on_const: "continuous_on s (\<lambda>x. c)" |
3421 lemma continuous_on_const: "continuous_on s (\<lambda>x. c)" |
3362 unfolding continuous_on_def by (auto intro: tendsto_intros) |
3422 unfolding continuous_on_def by (auto intro: tendsto_intros) |
|
3423 |
|
3424 lemma continuous_on_norm: |
|
3425 shows "continuous_on s f \<Longrightarrow> continuous_on s (\<lambda>x. norm (f x))" |
|
3426 unfolding continuous_on_def by (fast intro: tendsto_norm) |
|
3427 |
|
3428 lemma continuous_on_infnorm: |
|
3429 shows "continuous_on s f \<Longrightarrow> continuous_on s (\<lambda>x. infnorm (f x))" |
|
3430 unfolding continuous_on by (fast intro: tendsto_infnorm) |
3363 |
3431 |
3364 lemma continuous_on_minus: |
3432 lemma continuous_on_minus: |
3365 fixes f :: "'a::topological_space \<Rightarrow> 'b::real_normed_vector" |
3433 fixes f :: "'a::topological_space \<Rightarrow> 'b::real_normed_vector" |
3366 shows "continuous_on s f \<Longrightarrow> continuous_on s (\<lambda>x. - f x)" |
3434 shows "continuous_on s f \<Longrightarrow> continuous_on s (\<lambda>x. - f x)" |
3367 unfolding continuous_on_def by (auto intro: tendsto_intros) |
3435 unfolding continuous_on_def by (auto intro: tendsto_intros) |
3410 lemma continuous_on_euclidean_component: |
3478 lemma continuous_on_euclidean_component: |
3411 "continuous_on s f \<Longrightarrow> continuous_on s (\<lambda>x. f x $$ i)" |
3479 "continuous_on s f \<Longrightarrow> continuous_on s (\<lambda>x. f x $$ i)" |
3412 using bounded_linear_euclidean_component |
3480 using bounded_linear_euclidean_component |
3413 by (rule bounded_linear.continuous_on) |
3481 by (rule bounded_linear.continuous_on) |
3414 |
3482 |
|
3483 lemma continuous_on_inverse: |
|
3484 fixes f :: "'a::topological_space \<Rightarrow> 'b::real_normed_div_algebra" |
|
3485 assumes "continuous_on s f" and "\<forall>x\<in>s. f x \<noteq> 0" |
|
3486 shows "continuous_on s (\<lambda>x. inverse (f x))" |
|
3487 using assms unfolding continuous_on by (fast intro: tendsto_inverse) |
|
3488 |
3415 text{* Same thing for uniform continuity, using sequential formulations. *} |
3489 text{* Same thing for uniform continuity, using sequential formulations. *} |
|
3490 |
|
3491 lemma uniformly_continuous_on_id: |
|
3492 "uniformly_continuous_on s (\<lambda>x. x)" |
|
3493 unfolding uniformly_continuous_on_def by auto |
3416 |
3494 |
3417 lemma uniformly_continuous_on_const: |
3495 lemma uniformly_continuous_on_const: |
3418 "uniformly_continuous_on s (\<lambda>x. c)" |
3496 "uniformly_continuous_on s (\<lambda>x. c)" |
3419 unfolding uniformly_continuous_on_def by simp |
3497 unfolding uniformly_continuous_on_def by simp |
3420 |
3498 |
3463 ==> uniformly_continuous_on s (\<lambda>x. f x - g x)" |
3541 ==> uniformly_continuous_on s (\<lambda>x. f x - g x)" |
3464 unfolding ab_diff_minus |
3542 unfolding ab_diff_minus |
3465 using uniformly_continuous_on_add[of s f "\<lambda>x. - g x"] |
3543 using uniformly_continuous_on_add[of s f "\<lambda>x. - g x"] |
3466 using uniformly_continuous_on_neg[of s g] by auto |
3544 using uniformly_continuous_on_neg[of s g] by auto |
3467 |
3545 |
3468 text{* Identity function is continuous in every sense. *} |
|
3469 |
|
3470 lemma continuous_within_id: |
|
3471 "continuous (at a within s) (\<lambda>x. x)" |
|
3472 unfolding continuous_within by (rule Lim_at_within [OF tendsto_ident_at]) |
|
3473 |
|
3474 lemma continuous_at_id: |
|
3475 "continuous (at a) (\<lambda>x. x)" |
|
3476 unfolding continuous_at by (rule tendsto_ident_at) |
|
3477 |
|
3478 lemma continuous_on_id: |
|
3479 "continuous_on s (\<lambda>x. x)" |
|
3480 unfolding continuous_on_def by (auto intro: tendsto_ident_at_within) |
|
3481 |
|
3482 lemma uniformly_continuous_on_id: |
|
3483 "uniformly_continuous_on s (\<lambda>x. x)" |
|
3484 unfolding uniformly_continuous_on_def by auto |
|
3485 |
|
3486 text{* Continuity of all kinds is preserved under composition. *} |
3546 text{* Continuity of all kinds is preserved under composition. *} |
3487 |
3547 |
3488 lemma continuous_within_topological: |
3548 lemma continuous_within_topological: |
3489 "continuous (at x within s) f \<longleftrightarrow> |
3549 "continuous (at x within s) f \<longleftrightarrow> |
3490 (\<forall>B. open B \<longrightarrow> f x \<in> B \<longrightarrow> |
3550 (\<forall>B. open B \<longrightarrow> f x \<in> B \<longrightarrow> |
3519 then obtain d where "d>0" and d:"\<forall>x\<in>f ` s. \<forall>x'\<in>f ` s. dist x' x < d \<longrightarrow> dist (g x') (g x) < e" using assms(2) unfolding uniformly_continuous_on_def by auto |
3579 then obtain d where "d>0" and d:"\<forall>x\<in>f ` s. \<forall>x'\<in>f ` s. dist x' x < d \<longrightarrow> dist (g x') (g x) < e" using assms(2) unfolding uniformly_continuous_on_def by auto |
3520 obtain d' where "d'>0" "\<forall>x\<in>s. \<forall>x'\<in>s. dist x' x < d' \<longrightarrow> dist (f x') (f x) < d" using `d>0` using assms(1) unfolding uniformly_continuous_on_def by auto |
3580 obtain d' where "d'>0" "\<forall>x\<in>s. \<forall>x'\<in>s. dist x' x < d' \<longrightarrow> dist (f x') (f x) < d" using `d>0` using assms(1) unfolding uniformly_continuous_on_def by auto |
3521 hence "\<exists>d>0. \<forall>x\<in>s. \<forall>x'\<in>s. dist x' x < d \<longrightarrow> dist ((g \<circ> f) x') ((g \<circ> f) x) < e" using `d>0` using d by auto } |
3581 hence "\<exists>d>0. \<forall>x\<in>s. \<forall>x'\<in>s. dist x' x < d \<longrightarrow> dist ((g \<circ> f) x') ((g \<circ> f) x) < e" using `d>0` using d by auto } |
3522 thus ?thesis using assms unfolding uniformly_continuous_on_def by auto |
3582 thus ?thesis using assms unfolding uniformly_continuous_on_def by auto |
3523 qed |
3583 qed |
|
3584 |
|
3585 lemmas continuous_on_intros = continuous_on_id continuous_on_const |
|
3586 continuous_on_compose continuous_on_norm continuous_on_infnorm |
|
3587 continuous_on_add continuous_on_minus continuous_on_diff |
|
3588 continuous_on_scaleR continuous_on_mult continuous_on_inverse |
|
3589 continuous_on_inner continuous_on_euclidean_component |
|
3590 uniformly_continuous_on_add uniformly_continuous_on_const |
|
3591 uniformly_continuous_on_id uniformly_continuous_on_compose |
|
3592 uniformly_continuous_on_cmul uniformly_continuous_on_neg |
|
3593 uniformly_continuous_on_sub |
3524 |
3594 |
3525 text{* Continuity in terms of open preimages. *} |
3595 text{* Continuity in terms of open preimages. *} |
3526 |
3596 |
3527 lemma continuous_at_open: |
3597 lemma continuous_at_open: |
3528 shows "continuous (at x) f \<longleftrightarrow> (\<forall>t. open t \<and> f x \<in> t --> (\<exists>s. open s \<and> x \<in> s \<and> (\<forall>x' \<in> s. (f x') \<in> t)))" |
3598 shows "continuous (at x) f \<longleftrightarrow> (\<forall>t. open t \<and> f x \<in> t --> (\<exists>s. open s \<and> x \<in> s \<and> (\<forall>x' \<in> s. (f x') \<in> t)))" |
3836 hence "z \<in> op + a ` s" unfolding image_iff by(auto intro!: bexI[where x="z - a"]) } |
3907 hence "z \<in> op + a ` s" unfolding image_iff by(auto intro!: bexI[where x="z - a"]) } |
3837 hence "ball x e \<subseteq> op + a ` s" unfolding subset_eq by auto |
3908 hence "ball x e \<subseteq> op + a ` s" unfolding subset_eq by auto |
3838 thus "x \<in> interior (op + a ` s)" unfolding mem_interior using `e>0` by auto |
3909 thus "x \<in> interior (op + a ` s)" unfolding mem_interior using `e>0` by auto |
3839 qed |
3910 qed |
3840 |
3911 |
3841 text {* We can now extend limit compositions to consider the scalar multiplier. *} |
|
3842 |
|
3843 lemma continuous_vmul: |
|
3844 fixes c :: "'a::metric_space \<Rightarrow> real" and v :: "'b::real_normed_vector" |
|
3845 shows "continuous net c ==> continuous net (\<lambda>x. c(x) *\<^sub>R v)" |
|
3846 unfolding continuous_def by (intro tendsto_intros) |
|
3847 |
|
3848 lemma continuous_mul: |
|
3849 fixes c :: "'a::metric_space \<Rightarrow> real" |
|
3850 fixes f :: "'a::metric_space \<Rightarrow> 'b::real_normed_vector" |
|
3851 shows "continuous net c \<Longrightarrow> continuous net f |
|
3852 ==> continuous net (\<lambda>x. c(x) *\<^sub>R f x) " |
|
3853 unfolding continuous_def by (intro tendsto_intros) |
|
3854 |
|
3855 lemmas continuous_intros = continuous_add continuous_vmul continuous_cmul |
|
3856 continuous_const continuous_sub continuous_at_id continuous_within_id continuous_mul |
|
3857 |
|
3858 lemmas continuous_on_intros = continuous_on_add continuous_on_const |
|
3859 continuous_on_id continuous_on_compose continuous_on_minus |
|
3860 continuous_on_diff continuous_on_scaleR continuous_on_mult |
|
3861 continuous_on_inner continuous_on_euclidean_component |
|
3862 uniformly_continuous_on_add uniformly_continuous_on_const |
|
3863 uniformly_continuous_on_id uniformly_continuous_on_compose |
|
3864 uniformly_continuous_on_cmul uniformly_continuous_on_neg |
|
3865 uniformly_continuous_on_sub |
|
3866 |
|
3867 text {* And so we have continuity of inverse. *} |
|
3868 |
|
3869 lemma continuous_inv: |
|
3870 fixes f :: "'a::metric_space \<Rightarrow> real" |
|
3871 shows "continuous net f \<Longrightarrow> f(netlimit net) \<noteq> 0 |
|
3872 ==> continuous net (inverse o f)" |
|
3873 unfolding continuous_def using Lim_inv by auto |
|
3874 |
|
3875 lemma continuous_at_within_inv: |
|
3876 fixes f :: "'a::metric_space \<Rightarrow> 'b::real_normed_field" |
|
3877 assumes "continuous (at a within s) f" "f a \<noteq> 0" |
|
3878 shows "continuous (at a within s) (inverse o f)" |
|
3879 using assms unfolding continuous_within o_def |
|
3880 by (intro tendsto_intros) |
|
3881 |
|
3882 lemma continuous_at_inv: |
|
3883 fixes f :: "'a::metric_space \<Rightarrow> 'b::real_normed_field" |
|
3884 shows "continuous (at a) f \<Longrightarrow> f a \<noteq> 0 |
|
3885 ==> continuous (at a) (inverse o f) " |
|
3886 using within_UNIV[THEN sym, of "at a"] using continuous_at_within_inv[of a UNIV] by auto |
|
3887 |
|
3888 text {* Topological properties of linear functions. *} |
3912 text {* Topological properties of linear functions. *} |
3889 |
3913 |
3890 lemma linear_lim_0: |
3914 lemma linear_lim_0: |
3891 assumes "bounded_linear f" shows "(f ---> 0) (at (0))" |
3915 assumes "bounded_linear f" shows "(f ---> 0) (at (0))" |
3892 proof- |
3916 proof- |
4087 |
4111 |
4088 lemma continuous_on_real_range: |
4112 lemma continuous_on_real_range: |
4089 fixes f :: "'a::real_normed_vector \<Rightarrow> real" |
4113 fixes f :: "'a::real_normed_vector \<Rightarrow> real" |
4090 shows "continuous_on s f \<longleftrightarrow> (\<forall>x \<in> s. \<forall>e>0. \<exists>d>0. (\<forall>x' \<in> s. norm(x' - x) < d --> abs(f x' - f x) < e))" |
4114 shows "continuous_on s f \<longleftrightarrow> (\<forall>x \<in> s. \<forall>e>0. \<exists>d>0. (\<forall>x' \<in> s. norm(x' - x) < d --> abs(f x' - f x) < e))" |
4091 unfolding continuous_on_iff dist_norm by simp |
4115 unfolding continuous_on_iff dist_norm by simp |
4092 |
|
4093 lemma continuous_at_norm: "continuous (at x) norm" |
|
4094 unfolding continuous_at by (intro tendsto_intros) |
|
4095 |
|
4096 lemma continuous_on_norm: "continuous_on s norm" |
|
4097 unfolding continuous_on by (intro ballI tendsto_intros) |
|
4098 |
|
4099 lemma continuous_at_infnorm: "continuous (at x) infnorm" |
|
4100 unfolding continuous_at Lim_at o_def unfolding dist_norm |
|
4101 apply auto apply (rule_tac x=e in exI) apply auto |
|
4102 using order_trans[OF real_abs_sub_infnorm infnorm_le_norm, of _ x] by (metis xt1(7)) |
|
4103 |
4116 |
4104 text {* Hence some handy theorems on distance, diameter etc. of/from a set. *} |
4117 text {* Hence some handy theorems on distance, diameter etc. of/from a set. *} |
4105 |
4118 |
4106 lemma compact_attains_sup: |
4119 lemma compact_attains_sup: |
4107 fixes s :: "real set" |
4120 fixes s :: "real set" |
5240 hence "x \<in> s" unfolding g_def using someI2[of "\<lambda>b. b\<in>s \<and> f b = y" x' "\<lambda>x. x\<in>s"] unfolding y(2)[THEN sym] and g_def by auto } |
5253 hence "x \<in> s" unfolding g_def using someI2[of "\<lambda>b. b\<in>s \<and> f b = y" x' "\<lambda>x. x\<in>s"] unfolding y(2)[THEN sym] and g_def by auto } |
5241 ultimately have "x\<in>s \<longleftrightarrow> x \<in> g ` t" .. } |
5254 ultimately have "x\<in>s \<longleftrightarrow> x \<in> g ` t" .. } |
5242 hence "g ` t = s" by auto |
5255 hence "g ` t = s" by auto |
5243 ultimately |
5256 ultimately |
5244 show ?thesis unfolding homeomorphism_def homeomorphic_def |
5257 show ?thesis unfolding homeomorphism_def homeomorphic_def |
5245 apply(rule_tac x=g in exI) using g and assms(3) and continuous_on_inverse[OF assms(2,1), of g, unfolded assms(3)] and assms(2) by auto |
5258 apply(rule_tac x=g in exI) using g and assms(3) and continuous_on_inv[OF assms(2,1), of g, unfolded assms(3)] and assms(2) by auto |
5246 qed |
5259 qed |
5247 |
5260 |
5248 lemma homeomorphic_compact: |
5261 lemma homeomorphic_compact: |
5249 fixes f :: "'a::heine_borel \<Rightarrow> 'b::heine_borel" |
5262 fixes f :: "'a::heine_borel \<Rightarrow> 'b::heine_borel" |
5250 (* class constraint due to continuous_on_inverse *) |
5263 (* class constraint due to continuous_on_inv *) |
5251 shows "compact s \<Longrightarrow> continuous_on s f \<Longrightarrow> (f ` s = t) \<Longrightarrow> inj_on f s |
5264 shows "compact s \<Longrightarrow> continuous_on s f \<Longrightarrow> (f ` s = t) \<Longrightarrow> inj_on f s |
5252 \<Longrightarrow> s homeomorphic t" |
5265 \<Longrightarrow> s homeomorphic t" |
5253 unfolding homeomorphic_def by (metis homeomorphism_compact) |
5266 unfolding homeomorphic_def by (metis homeomorphism_compact) |
5254 |
5267 |
5255 text{* Preservation of topological properties. *} |
5268 text{* Preservation of topological properties. *} |