4255 shows "continuous (at a) (\<lambda>x. inverse (f x))" |
4255 shows "continuous (at a) (\<lambda>x. inverse (f x))" |
4256 using assms unfolding continuous_at by (rule tendsto_inverse) |
4256 using assms unfolding continuous_at by (rule tendsto_inverse) |
4257 |
4257 |
4258 subsubsection {* Structural rules for setwise continuity *} |
4258 subsubsection {* Structural rules for setwise continuity *} |
4259 |
4259 |
4260 lemma continuous_on_id: "continuous_on s (\<lambda>x. x)" |
4260 ML {* |
|
4261 |
|
4262 structure Continuous_On_Intros = Named_Thms |
|
4263 ( |
|
4264 val name = @{binding continuous_on_intros} |
|
4265 val description = "Structural introduction rules for setwise continuity" |
|
4266 ) |
|
4267 |
|
4268 *} |
|
4269 |
|
4270 setup Continuous_On_Intros.setup |
|
4271 |
|
4272 lemma continuous_on_id[continuous_on_intros]: "continuous_on s (\<lambda>x. x)" |
4261 unfolding continuous_on_def by (fast intro: tendsto_ident_at_within) |
4273 unfolding continuous_on_def by (fast intro: tendsto_ident_at_within) |
4262 |
4274 |
4263 lemma continuous_on_const: "continuous_on s (\<lambda>x. c)" |
4275 lemma continuous_on_const[continuous_on_intros]: "continuous_on s (\<lambda>x. c)" |
4264 unfolding continuous_on_def by (auto intro: tendsto_intros) |
4276 unfolding continuous_on_def by (auto intro: tendsto_intros) |
4265 |
4277 |
4266 lemma continuous_on_norm: |
4278 lemma continuous_on_norm[continuous_on_intros]: |
4267 shows "continuous_on s f \<Longrightarrow> continuous_on s (\<lambda>x. norm (f x))" |
4279 shows "continuous_on s f \<Longrightarrow> continuous_on s (\<lambda>x. norm (f x))" |
4268 unfolding continuous_on_def by (fast intro: tendsto_norm) |
4280 unfolding continuous_on_def by (fast intro: tendsto_norm) |
4269 |
4281 |
4270 lemma continuous_on_infnorm: |
4282 lemma continuous_on_infnorm[continuous_on_intros]: |
4271 shows "continuous_on s f \<Longrightarrow> continuous_on s (\<lambda>x. infnorm (f x))" |
4283 shows "continuous_on s f \<Longrightarrow> continuous_on s (\<lambda>x. infnorm (f x))" |
4272 unfolding continuous_on by (fast intro: tendsto_infnorm) |
4284 unfolding continuous_on by (fast intro: tendsto_infnorm) |
4273 |
4285 |
4274 lemma continuous_on_minus: |
4286 lemma continuous_on_minus[continuous_on_intros]: |
4275 fixes f :: "'a::topological_space \<Rightarrow> 'b::real_normed_vector" |
4287 fixes f :: "'a::topological_space \<Rightarrow> 'b::real_normed_vector" |
4276 shows "continuous_on s f \<Longrightarrow> continuous_on s (\<lambda>x. - f x)" |
4288 shows "continuous_on s f \<Longrightarrow> continuous_on s (\<lambda>x. - f x)" |
4277 unfolding continuous_on_def by (auto intro: tendsto_intros) |
4289 unfolding continuous_on_def by (auto intro: tendsto_intros) |
4278 |
4290 |
4279 lemma continuous_on_add: |
4291 lemma continuous_on_add[continuous_on_intros]: |
4280 fixes f g :: "'a::topological_space \<Rightarrow> 'b::real_normed_vector" |
4292 fixes f g :: "'a::topological_space \<Rightarrow> 'b::real_normed_vector" |
4281 shows "continuous_on s f \<Longrightarrow> continuous_on s g |
4293 shows "continuous_on s f \<Longrightarrow> continuous_on s g |
4282 \<Longrightarrow> continuous_on s (\<lambda>x. f x + g x)" |
4294 \<Longrightarrow> continuous_on s (\<lambda>x. f x + g x)" |
4283 unfolding continuous_on_def by (auto intro: tendsto_intros) |
4295 unfolding continuous_on_def by (auto intro: tendsto_intros) |
4284 |
4296 |
4285 lemma continuous_on_diff: |
4297 lemma continuous_on_diff[continuous_on_intros]: |
4286 fixes f g :: "'a::topological_space \<Rightarrow> 'b::real_normed_vector" |
4298 fixes f g :: "'a::topological_space \<Rightarrow> 'b::real_normed_vector" |
4287 shows "continuous_on s f \<Longrightarrow> continuous_on s g |
4299 shows "continuous_on s f \<Longrightarrow> continuous_on s g |
4288 \<Longrightarrow> continuous_on s (\<lambda>x. f x - g x)" |
4300 \<Longrightarrow> continuous_on s (\<lambda>x. f x - g x)" |
4289 unfolding continuous_on_def by (auto intro: tendsto_intros) |
4301 unfolding continuous_on_def by (auto intro: tendsto_intros) |
4290 |
4302 |
4291 lemma (in bounded_linear) continuous_on: |
4303 lemma (in bounded_linear) continuous_on[continuous_on_intros]: |
4292 "continuous_on s g \<Longrightarrow> continuous_on s (\<lambda>x. f (g x))" |
4304 "continuous_on s g \<Longrightarrow> continuous_on s (\<lambda>x. f (g x))" |
4293 unfolding continuous_on_def by (fast intro: tendsto) |
4305 unfolding continuous_on_def by (fast intro: tendsto) |
4294 |
4306 |
4295 lemma (in bounded_bilinear) continuous_on: |
4307 lemma (in bounded_bilinear) continuous_on[continuous_on_intros]: |
4296 "\<lbrakk>continuous_on s f; continuous_on s g\<rbrakk> \<Longrightarrow> continuous_on s (\<lambda>x. f x ** g x)" |
4308 "\<lbrakk>continuous_on s f; continuous_on s g\<rbrakk> \<Longrightarrow> continuous_on s (\<lambda>x. f x ** g x)" |
4297 unfolding continuous_on_def by (fast intro: tendsto) |
4309 unfolding continuous_on_def by (fast intro: tendsto) |
4298 |
4310 |
4299 lemma continuous_on_scaleR: |
4311 lemma continuous_on_scaleR[continuous_on_intros]: |
4300 fixes g :: "'a::topological_space \<Rightarrow> 'b::real_normed_vector" |
4312 fixes g :: "'a::topological_space \<Rightarrow> 'b::real_normed_vector" |
4301 assumes "continuous_on s f" and "continuous_on s g" |
4313 assumes "continuous_on s f" and "continuous_on s g" |
4302 shows "continuous_on s (\<lambda>x. f x *\<^sub>R g x)" |
4314 shows "continuous_on s (\<lambda>x. f x *\<^sub>R g x)" |
4303 using bounded_bilinear_scaleR assms |
4315 using bounded_bilinear_scaleR assms |
4304 by (rule bounded_bilinear.continuous_on) |
4316 by (rule bounded_bilinear.continuous_on) |
4305 |
4317 |
4306 lemma continuous_on_mult: |
4318 lemma continuous_on_mult[continuous_on_intros]: |
4307 fixes g :: "'a::topological_space \<Rightarrow> 'b::real_normed_algebra" |
4319 fixes g :: "'a::topological_space \<Rightarrow> 'b::real_normed_algebra" |
4308 assumes "continuous_on s f" and "continuous_on s g" |
4320 assumes "continuous_on s f" and "continuous_on s g" |
4309 shows "continuous_on s (\<lambda>x. f x * g x)" |
4321 shows "continuous_on s (\<lambda>x. f x * g x)" |
4310 using bounded_bilinear_mult assms |
4322 using bounded_bilinear_mult assms |
4311 by (rule bounded_bilinear.continuous_on) |
4323 by (rule bounded_bilinear.continuous_on) |
4312 |
4324 |
4313 lemma continuous_on_inner: |
4325 lemma continuous_on_inner[continuous_on_intros]: |
4314 fixes g :: "'a::topological_space \<Rightarrow> 'b::real_inner" |
4326 fixes g :: "'a::topological_space \<Rightarrow> 'b::real_inner" |
4315 assumes "continuous_on s f" and "continuous_on s g" |
4327 assumes "continuous_on s f" and "continuous_on s g" |
4316 shows "continuous_on s (\<lambda>x. inner (f x) (g x))" |
4328 shows "continuous_on s (\<lambda>x. inner (f x) (g x))" |
4317 using bounded_bilinear_inner assms |
4329 using bounded_bilinear_inner assms |
4318 by (rule bounded_bilinear.continuous_on) |
4330 by (rule bounded_bilinear.continuous_on) |
4319 |
4331 |
4320 lemma continuous_on_inverse: |
4332 lemma continuous_on_inverse[continuous_on_intros]: |
4321 fixes f :: "'a::topological_space \<Rightarrow> 'b::real_normed_div_algebra" |
4333 fixes f :: "'a::topological_space \<Rightarrow> 'b::real_normed_div_algebra" |
4322 assumes "continuous_on s f" and "\<forall>x\<in>s. f x \<noteq> 0" |
4334 assumes "continuous_on s f" and "\<forall>x\<in>s. f x \<noteq> 0" |
4323 shows "continuous_on s (\<lambda>x. inverse (f x))" |
4335 shows "continuous_on s (\<lambda>x. inverse (f x))" |
4324 using assms unfolding continuous_on by (fast intro: tendsto_inverse) |
4336 using assms unfolding continuous_on by (fast intro: tendsto_inverse) |
4325 |
4337 |
4326 subsubsection {* Structural rules for uniform continuity *} |
4338 subsubsection {* Structural rules for uniform continuity *} |
4327 |
4339 |
4328 lemma uniformly_continuous_on_id: |
4340 lemma uniformly_continuous_on_id[continuous_on_intros]: |
4329 shows "uniformly_continuous_on s (\<lambda>x. x)" |
4341 shows "uniformly_continuous_on s (\<lambda>x. x)" |
4330 unfolding uniformly_continuous_on_def by auto |
4342 unfolding uniformly_continuous_on_def by auto |
4331 |
4343 |
4332 lemma uniformly_continuous_on_const: |
4344 lemma uniformly_continuous_on_const[continuous_on_intros]: |
4333 shows "uniformly_continuous_on s (\<lambda>x. c)" |
4345 shows "uniformly_continuous_on s (\<lambda>x. c)" |
4334 unfolding uniformly_continuous_on_def by simp |
4346 unfolding uniformly_continuous_on_def by simp |
4335 |
4347 |
4336 lemma uniformly_continuous_on_dist: |
4348 lemma uniformly_continuous_on_dist[continuous_on_intros]: |
4337 fixes f g :: "'a::metric_space \<Rightarrow> 'b::metric_space" |
4349 fixes f g :: "'a::metric_space \<Rightarrow> 'b::metric_space" |
4338 assumes "uniformly_continuous_on s f" |
4350 assumes "uniformly_continuous_on s f" |
4339 assumes "uniformly_continuous_on s g" |
4351 assumes "uniformly_continuous_on s g" |
4340 shows "uniformly_continuous_on s (\<lambda>x. dist (f x) (g x))" |
4352 shows "uniformly_continuous_on s (\<lambda>x. dist (f x) (g x))" |
4341 proof - |
4353 proof - |
4353 } |
4365 } |
4354 thus ?thesis using assms unfolding uniformly_continuous_on_sequentially |
4366 thus ?thesis using assms unfolding uniformly_continuous_on_sequentially |
4355 unfolding dist_real_def by simp |
4367 unfolding dist_real_def by simp |
4356 qed |
4368 qed |
4357 |
4369 |
4358 lemma uniformly_continuous_on_norm: |
4370 lemma uniformly_continuous_on_norm[continuous_on_intros]: |
4359 assumes "uniformly_continuous_on s f" |
4371 assumes "uniformly_continuous_on s f" |
4360 shows "uniformly_continuous_on s (\<lambda>x. norm (f x))" |
4372 shows "uniformly_continuous_on s (\<lambda>x. norm (f x))" |
4361 unfolding norm_conv_dist using assms |
4373 unfolding norm_conv_dist using assms |
4362 by (intro uniformly_continuous_on_dist uniformly_continuous_on_const) |
4374 by (intro uniformly_continuous_on_dist uniformly_continuous_on_const) |
4363 |
4375 |
4364 lemma (in bounded_linear) uniformly_continuous_on: |
4376 lemma (in bounded_linear) uniformly_continuous_on[continuous_on_intros]: |
4365 assumes "uniformly_continuous_on s g" |
4377 assumes "uniformly_continuous_on s g" |
4366 shows "uniformly_continuous_on s (\<lambda>x. f (g x))" |
4378 shows "uniformly_continuous_on s (\<lambda>x. f (g x))" |
4367 using assms unfolding uniformly_continuous_on_sequentially |
4379 using assms unfolding uniformly_continuous_on_sequentially |
4368 unfolding dist_norm tendsto_norm_zero_iff diff[symmetric] |
4380 unfolding dist_norm tendsto_norm_zero_iff diff[symmetric] |
4369 by (auto intro: tendsto_zero) |
4381 by (auto intro: tendsto_zero) |
4370 |
4382 |
4371 lemma uniformly_continuous_on_cmul: |
4383 lemma uniformly_continuous_on_cmul[continuous_on_intros]: |
4372 fixes f :: "'a::metric_space \<Rightarrow> 'b::real_normed_vector" |
4384 fixes f :: "'a::metric_space \<Rightarrow> 'b::real_normed_vector" |
4373 assumes "uniformly_continuous_on s f" |
4385 assumes "uniformly_continuous_on s f" |
4374 shows "uniformly_continuous_on s (\<lambda>x. c *\<^sub>R f(x))" |
4386 shows "uniformly_continuous_on s (\<lambda>x. c *\<^sub>R f(x))" |
4375 using bounded_linear_scaleR_right assms |
4387 using bounded_linear_scaleR_right assms |
4376 by (rule bounded_linear.uniformly_continuous_on) |
4388 by (rule bounded_linear.uniformly_continuous_on) |
4378 lemma dist_minus: |
4390 lemma dist_minus: |
4379 fixes x y :: "'a::real_normed_vector" |
4391 fixes x y :: "'a::real_normed_vector" |
4380 shows "dist (- x) (- y) = dist x y" |
4392 shows "dist (- x) (- y) = dist x y" |
4381 unfolding dist_norm minus_diff_minus norm_minus_cancel .. |
4393 unfolding dist_norm minus_diff_minus norm_minus_cancel .. |
4382 |
4394 |
4383 lemma uniformly_continuous_on_minus: |
4395 lemma uniformly_continuous_on_minus[continuous_on_intros]: |
4384 fixes f :: "'a::metric_space \<Rightarrow> 'b::real_normed_vector" |
4396 fixes f :: "'a::metric_space \<Rightarrow> 'b::real_normed_vector" |
4385 shows "uniformly_continuous_on s f \<Longrightarrow> uniformly_continuous_on s (\<lambda>x. - f x)" |
4397 shows "uniformly_continuous_on s f \<Longrightarrow> uniformly_continuous_on s (\<lambda>x. - f x)" |
4386 unfolding uniformly_continuous_on_def dist_minus . |
4398 unfolding uniformly_continuous_on_def dist_minus . |
4387 |
4399 |
4388 lemma uniformly_continuous_on_add: |
4400 lemma uniformly_continuous_on_add[continuous_on_intros]: |
4389 fixes f g :: "'a::metric_space \<Rightarrow> 'b::real_normed_vector" |
4401 fixes f g :: "'a::metric_space \<Rightarrow> 'b::real_normed_vector" |
4390 assumes "uniformly_continuous_on s f" |
4402 assumes "uniformly_continuous_on s f" |
4391 assumes "uniformly_continuous_on s g" |
4403 assumes "uniformly_continuous_on s g" |
4392 shows "uniformly_continuous_on s (\<lambda>x. f x + g x)" |
4404 shows "uniformly_continuous_on s (\<lambda>x. f x + g x)" |
4393 using assms unfolding uniformly_continuous_on_sequentially |
4405 using assms unfolding uniformly_continuous_on_sequentially |
4394 unfolding dist_norm tendsto_norm_zero_iff add_diff_add |
4406 unfolding dist_norm tendsto_norm_zero_iff add_diff_add |
4395 by (auto intro: tendsto_add_zero) |
4407 by (auto intro: tendsto_add_zero) |
4396 |
4408 |
4397 lemma uniformly_continuous_on_diff: |
4409 lemma uniformly_continuous_on_diff[continuous_on_intros]: |
4398 fixes f :: "'a::metric_space \<Rightarrow> 'b::real_normed_vector" |
4410 fixes f :: "'a::metric_space \<Rightarrow> 'b::real_normed_vector" |
4399 assumes "uniformly_continuous_on s f" and "uniformly_continuous_on s g" |
4411 assumes "uniformly_continuous_on s f" and "uniformly_continuous_on s g" |
4400 shows "uniformly_continuous_on s (\<lambda>x. f x - g x)" |
4412 shows "uniformly_continuous_on s (\<lambda>x. f x - g x)" |
4401 unfolding ab_diff_minus using assms |
4413 unfolding ab_diff_minus using assms |
4402 by (intro uniformly_continuous_on_add uniformly_continuous_on_minus) |
4414 by (intro uniformly_continuous_on_add uniformly_continuous_on_minus) |
4409 (\<exists>A. open A \<and> x \<in> A \<and> (\<forall>y\<in>s. y \<in> A \<longrightarrow> f y \<in> B)))" |
4421 (\<exists>A. open A \<and> x \<in> A \<and> (\<forall>y\<in>s. y \<in> A \<longrightarrow> f y \<in> B)))" |
4410 unfolding continuous_within |
4422 unfolding continuous_within |
4411 unfolding tendsto_def Limits.eventually_within eventually_at_topological |
4423 unfolding tendsto_def Limits.eventually_within eventually_at_topological |
4412 by (intro ball_cong [OF refl] all_cong imp_cong ex_cong conj_cong refl) auto |
4424 by (intro ball_cong [OF refl] all_cong imp_cong ex_cong conj_cong refl) auto |
4413 |
4425 |
4414 lemma continuous_within_compose: |
4426 lemma continuous_within_compose[continuous_intros]: |
4415 assumes "continuous (at x within s) f" |
4427 assumes "continuous (at x within s) f" |
4416 assumes "continuous (at (f x) within f ` s) g" |
4428 assumes "continuous (at (f x) within f ` s) g" |
4417 shows "continuous (at x within s) (g o f)" |
4429 shows "continuous (at x within s) (g o f)" |
4418 using assms unfolding continuous_within_topological by simp metis |
4430 using assms unfolding continuous_within_topological by simp metis |
4419 |
4431 |
4420 lemma continuous_at_compose: |
4432 lemma continuous_at_compose[continuous_intros]: |
4421 assumes "continuous (at x) f" and "continuous (at (f x)) g" |
4433 assumes "continuous (at x) f" and "continuous (at (f x)) g" |
4422 shows "continuous (at x) (g o f)" |
4434 shows "continuous (at x) (g o f)" |
4423 proof- |
4435 proof- |
4424 have "continuous (at (f x) within range f) g" using assms(2) |
4436 have "continuous (at (f x) within range f) g" using assms(2) |
4425 using continuous_within_subset[of "f x" UNIV g "range f"] by simp |
4437 using continuous_within_subset[of "f x" UNIV g "range f"] by simp |
4426 thus ?thesis using assms(1) |
4438 thus ?thesis using assms(1) |
4427 using continuous_within_compose[of x UNIV f g] by simp |
4439 using continuous_within_compose[of x UNIV f g] by simp |
4428 qed |
4440 qed |
4429 |
4441 |
4430 lemma continuous_on_compose: |
4442 lemma continuous_on_compose[continuous_on_intros]: |
4431 "continuous_on s f \<Longrightarrow> continuous_on (f ` s) g \<Longrightarrow> continuous_on s (g o f)" |
4443 "continuous_on s f \<Longrightarrow> continuous_on (f ` s) g \<Longrightarrow> continuous_on s (g o f)" |
4432 unfolding continuous_on_topological by simp metis |
4444 unfolding continuous_on_topological by simp metis |
4433 |
4445 |
4434 lemma uniformly_continuous_on_compose: |
4446 lemma uniformly_continuous_on_compose[continuous_on_intros]: |
4435 assumes "uniformly_continuous_on s f" "uniformly_continuous_on (f ` s) g" |
4447 assumes "uniformly_continuous_on s f" "uniformly_continuous_on (f ` s) g" |
4436 shows "uniformly_continuous_on s (g o f)" |
4448 shows "uniformly_continuous_on s (g o f)" |
4437 proof- |
4449 proof- |
4438 { fix e::real assume "e>0" |
4450 { fix e::real assume "e>0" |
4439 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 |
4451 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 |
4440 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 |
4452 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 |
4441 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 } |
4453 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 } |
4442 thus ?thesis using assms unfolding uniformly_continuous_on_def by auto |
4454 thus ?thesis using assms unfolding uniformly_continuous_on_def by auto |
4443 qed |
4455 qed |
4444 |
|
4445 lemmas continuous_on_intros = continuous_on_id continuous_on_const |
|
4446 continuous_on_compose continuous_on_norm continuous_on_infnorm |
|
4447 continuous_on_add continuous_on_minus continuous_on_diff |
|
4448 continuous_on_scaleR continuous_on_mult continuous_on_inverse |
|
4449 continuous_on_inner |
|
4450 uniformly_continuous_on_id uniformly_continuous_on_const |
|
4451 uniformly_continuous_on_dist uniformly_continuous_on_norm |
|
4452 uniformly_continuous_on_compose uniformly_continuous_on_add |
|
4453 uniformly_continuous_on_minus uniformly_continuous_on_diff |
|
4454 uniformly_continuous_on_cmul |
|
4455 |
4456 |
4456 text{* Continuity in terms of open preimages. *} |
4457 text{* Continuity in terms of open preimages. *} |
4457 |
4458 |
4458 lemma continuous_at_open: |
4459 lemma continuous_at_open: |
4459 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)))" |
4460 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)))" |