equal
deleted
inserted
replaced
3297 done |
3297 done |
3298 } |
3298 } |
3299 then have "ball (x - e *\<^sub>R (x - c)) (e*d) \<inter> affine hull S \<subseteq> S" |
3299 then have "ball (x - e *\<^sub>R (x - c)) (e*d) \<inter> affine hull S \<subseteq> S" |
3300 by auto |
3300 by auto |
3301 moreover have "e * d > 0" |
3301 moreover have "e * d > 0" |
3302 using `e > 0` `d > 0` by (rule mult_pos_pos) |
3302 using `e > 0` `d > 0` by simp |
3303 moreover have c: "c \<in> S" |
3303 moreover have c: "c \<in> S" |
3304 using assms rel_interior_subset by auto |
3304 using assms rel_interior_subset by auto |
3305 moreover from c have "x - e *\<^sub>R (x - c) \<in> S" |
3305 moreover from c have "x - e *\<^sub>R (x - c) \<in> S" |
3306 using mem_convex[of S x c e] |
3306 using mem_convex[of S x c e] |
3307 apply (simp add: algebra_simps) |
3307 apply (simp add: algebra_simps) |
3451 have "\<exists>y \<in> S. norm (y - x) * (1 - e) < e * d" |
3451 have "\<exists>y \<in> S. norm (y - x) * (1 - e) < e * d" |
3452 proof (cases "x \<in> S") |
3452 proof (cases "x \<in> S") |
3453 case True |
3453 case True |
3454 then show ?thesis using `e > 0` `d > 0` |
3454 then show ?thesis using `e > 0` `d > 0` |
3455 apply (rule_tac bexI[where x=x]) |
3455 apply (rule_tac bexI[where x=x]) |
3456 apply (auto intro!: mult_pos_pos) |
3456 apply (auto) |
3457 done |
3457 done |
3458 next |
3458 next |
3459 case False |
3459 case False |
3460 then have x: "x islimpt S" |
3460 then have x: "x islimpt S" |
3461 using assms(3)[unfolded closure_def] by auto |
3461 using assms(3)[unfolded closure_def] by auto |
3471 apply auto |
3471 apply auto |
3472 done |
3472 done |
3473 next |
3473 next |
3474 case False |
3474 case False |
3475 then have "0 < e * d / (1 - e)" and *: "1 - e > 0" |
3475 then have "0 < e * d / (1 - e)" and *: "1 - e > 0" |
3476 using `e \<le> 1` `e > 0` `d > 0` |
3476 using `e \<le> 1` `e > 0` `d > 0` by (auto) |
3477 by (auto intro!:mult_pos_pos divide_pos_pos) |
|
3478 then obtain y where "y \<in> S" "y \<noteq> x" "dist y x < e * d / (1 - e)" |
3477 then obtain y where "y \<in> S" "y \<noteq> x" "dist y x < e * d / (1 - e)" |
3479 using x[unfolded islimpt_approachable,THEN spec[where x="e*d / (1 - e)"]] by auto |
3478 using x[unfolded islimpt_approachable,THEN spec[where x="e*d / (1 - e)"]] by auto |
3480 then show ?thesis |
3479 then show ?thesis |
3481 apply (rule_tac x=y in bexI) |
3480 apply (rule_tac x=y in bexI) |
3482 unfolding dist_norm |
3481 unfolding dist_norm |
3600 using assms Real_Vector_Spaces.bounded_linear.pos_bounded[of f] by auto |
3599 using assms Real_Vector_Spaces.bounded_linear.pos_bounded[of f] by auto |
3601 def e1 \<equiv> "1 / K" |
3600 def e1 \<equiv> "1 / K" |
3602 then have e1: "e1 > 0" "\<And>x. e1 * norm (f x) \<le> norm x" |
3601 then have e1: "e1 > 0" "\<And>x. e1 * norm (f x) \<le> norm x" |
3603 using K pos_le_divide_eq[of e1] by auto |
3602 using K pos_le_divide_eq[of e1] by auto |
3604 def e \<equiv> "e1 * e2" |
3603 def e \<equiv> "e1 * e2" |
3605 then have "e > 0" using e1 e2 mult_pos_pos by auto |
3604 then have "e > 0" using e1 e2 by auto |
3606 { |
3605 { |
3607 fix y |
3606 fix y |
3608 assume y: "y \<in> cball x e \<inter> affine hull S" |
3607 assume y: "y \<in> cball x e \<inter> affine hull S" |
3609 then have h1: "f y \<in> affine hull (f ` S)" |
3608 then have h1: "f y \<in> affine hull (f ` S)" |
3610 using affine_hull_linear_image[of f S] assms by auto |
3609 using affine_hull_linear_image[of f S] assms by auto |
3643 then obtain e1 where e1: "e1 > 0" "\<forall>x \<in> span S. e1 * norm x \<le> norm (f x)" |
3642 then obtain e1 where e1: "e1 > 0" "\<forall>x \<in> span S. e1 * norm x \<le> norm (f x)" |
3644 using assms injective_imp_isometric[of "span S" f] |
3643 using assms injective_imp_isometric[of "span S" f] |
3645 subspace_span[of S] closed_subspace[of "span S"] |
3644 subspace_span[of S] closed_subspace[of "span S"] |
3646 by auto |
3645 by auto |
3647 def e \<equiv> "e1 * e2" |
3646 def e \<equiv> "e1 * e2" |
3648 then have "e > 0" |
3647 hence "e > 0" using e1 e2 by auto |
3649 using e1 e2 mult_pos_pos by auto |
|
3650 { |
3648 { |
3651 fix y |
3649 fix y |
3652 assume y: "y \<in> cball (f x) e \<inter> affine hull (f ` S)" |
3650 assume y: "y \<in> cball (f x) e \<inter> affine hull (f ` S)" |
3653 then have "y \<in> f ` (affine hull S)" |
3651 then have "y \<in> f ` (affine hull S)" |
3654 using affine_hull_linear_image[of f S] assms by auto |
3652 using affine_hull_linear_image[of f S] assms by auto |
6089 using `t > 0` * `e > 0` by (auto simp add: field_simps) |
6087 using `t > 0` * `e > 0` by (auto simp add: field_simps) |
6090 finally have "f x - f y < e" by auto |
6088 finally have "f x - f y < e" by auto |
6091 } |
6089 } |
6092 ultimately show ?thesis by auto |
6090 ultimately show ?thesis by auto |
6093 qed (insert `0<e`, auto) |
6091 qed (insert `0<e`, auto) |
6094 qed (insert `0<e` `0<k` `0<B`, auto simp add:field_simps intro!:mult_pos_pos) |
6092 qed (insert `0<e` `0<k` `0<B`, auto simp: field_simps) |
6095 qed |
6093 qed |
6096 |
6094 |
6097 |
6095 |
6098 subsection {* Upper bound on a ball implies upper and lower bounds *} |
6096 subsection {* Upper bound on a ball implies upper and lower bounds *} |
6099 |
6097 |
6511 apply (rule d[unfolded subset_eq,rule_format]) |
6509 apply (rule d[unfolded subset_eq,rule_format]) |
6512 unfolding mem_ball |
6510 unfolding mem_ball |
6513 using assms(3-5) |
6511 using assms(3-5) |
6514 apply auto |
6512 apply auto |
6515 done |
6513 done |
6516 qed (rule mult_pos_pos, insert `e>0` `d>0`, auto) |
6514 qed (insert `e>0` `d>0`, auto) |
6517 qed |
6515 qed |
6518 |
6516 |
6519 lemma mem_interior_closure_convex_shrink: |
6517 lemma mem_interior_closure_convex_shrink: |
6520 fixes s :: "'a::euclidean_space set" |
6518 fixes s :: "'a::euclidean_space set" |
6521 assumes "convex s" |
6519 assumes "convex s" |
6531 proof (cases "x \<in> s") |
6529 proof (cases "x \<in> s") |
6532 case True |
6530 case True |
6533 then show ?thesis |
6531 then show ?thesis |
6534 using `e > 0` `d > 0` |
6532 using `e > 0` `d > 0` |
6535 apply (rule_tac bexI[where x=x]) |
6533 apply (rule_tac bexI[where x=x]) |
6536 apply (auto intro!: mult_pos_pos) |
6534 apply (auto) |
6537 done |
6535 done |
6538 next |
6536 next |
6539 case False |
6537 case False |
6540 then have x: "x islimpt s" |
6538 then have x: "x islimpt s" |
6541 using assms(3)[unfolded closure_def] by auto |
6539 using assms(3)[unfolded closure_def] by auto |
6551 apply auto |
6549 apply auto |
6552 done |
6550 done |
6553 next |
6551 next |
6554 case False |
6552 case False |
6555 then have "0 < e * d / (1 - e)" and *: "1 - e > 0" |
6553 then have "0 < e * d / (1 - e)" and *: "1 - e > 0" |
6556 using `e \<le> 1` `e > 0` `d > 0` |
6554 using `e \<le> 1` `e > 0` `d > 0` by auto |
6557 by (auto intro!:mult_pos_pos divide_pos_pos) |
|
6558 then obtain y where "y \<in> s" "y \<noteq> x" "dist y x < e * d / (1 - e)" |
6555 then obtain y where "y \<in> s" "y \<noteq> x" "dist y x < e * d / (1 - e)" |
6559 using x[unfolded islimpt_approachable,THEN spec[where x="e*d / (1 - e)"]] by auto |
6556 using x[unfolded islimpt_approachable,THEN spec[where x="e*d / (1 - e)"]] by auto |
6560 then show ?thesis |
6557 then show ?thesis |
6561 apply (rule_tac x=y in bexI) |
6558 apply (rule_tac x=y in bexI) |
6562 unfolding dist_norm |
6559 unfolding dist_norm |