382 unfolding affine_alt by (auto simp add: scaleR_left_distrib [symmetric]) |
382 unfolding affine_alt by (auto simp add: scaleR_left_distrib [symmetric]) |
383 |
383 |
384 lemma affine_UNIV[intro]: "affine UNIV" |
384 lemma affine_UNIV[intro]: "affine UNIV" |
385 unfolding affine_def by auto |
385 unfolding affine_def by auto |
386 |
386 |
387 lemma affine_Inter: "(\<forall>s\<in>f. affine s) \<Longrightarrow> affine (\<Inter> f)" |
387 lemma affine_Inter[intro]: "(\<forall>s\<in>f. affine s) \<Longrightarrow> affine (\<Inter> f)" |
388 unfolding affine_def by auto |
388 unfolding affine_def by auto |
389 |
389 |
390 lemma affine_Int: "affine s \<Longrightarrow> affine t \<Longrightarrow> affine (s \<inter> t)" |
390 lemma affine_Int[intro]: "affine s \<Longrightarrow> affine t \<Longrightarrow> affine (s \<inter> t)" |
391 unfolding affine_def by auto |
391 unfolding affine_def by auto |
392 |
392 |
393 lemma affine_affine_hull: "affine(affine hull s)" |
393 lemma affine_affine_hull [simp]: "affine(affine hull s)" |
394 unfolding hull_def |
394 unfolding hull_def |
395 using affine_Inter[of "{t. affine t \<and> s \<subseteq> t}"] by auto |
395 using affine_Inter[of "{t. affine t \<and> s \<subseteq> t}"] by auto |
396 |
396 |
397 lemma affine_hull_eq[simp]: "(affine hull s = s) \<longleftrightarrow> affine s" |
397 lemma affine_hull_eq[simp]: "(affine hull s = s) \<longleftrightarrow> affine s" |
398 by (metis affine_affine_hull hull_same) |
398 by (metis affine_affine_hull hull_same) |
2353 by (simp add: affine_dependent_def) |
2353 by (simp add: affine_dependent_def) |
2354 |
2354 |
2355 lemma affine_hull_translation: "affine hull ((\<lambda>x. a + x) ` S) = (\<lambda>x. a + x) ` (affine hull S)" |
2355 lemma affine_hull_translation: "affine hull ((\<lambda>x. a + x) ` S) = (\<lambda>x. a + x) ` (affine hull S)" |
2356 proof - |
2356 proof - |
2357 have "affine ((\<lambda>x. a + x) ` (affine hull S))" |
2357 have "affine ((\<lambda>x. a + x) ` (affine hull S))" |
2358 using affine_translation affine_affine_hull by auto |
2358 using affine_translation affine_affine_hull by blast |
2359 moreover have "(\<lambda>x. a + x) ` S \<subseteq> (\<lambda>x. a + x) ` (affine hull S)" |
2359 moreover have "(\<lambda>x. a + x) ` S \<subseteq> (\<lambda>x. a + x) ` (affine hull S)" |
2360 using hull_subset[of S] by auto |
2360 using hull_subset[of S] by auto |
2361 ultimately have h1: "affine hull ((\<lambda>x. a + x) ` S) \<subseteq> (\<lambda>x. a + x) ` (affine hull S)" |
2361 ultimately have h1: "affine hull ((\<lambda>x. a + x) ` S) \<subseteq> (\<lambda>x. a + x) ` (affine hull S)" |
2362 by (metis hull_minimal) |
2362 by (metis hull_minimal) |
2363 have "affine((\<lambda>x. -a + x) ` (affine hull ((\<lambda>x. a + x) ` S)))" |
2363 have "affine((\<lambda>x. -a + x) ` (affine hull ((\<lambda>x. a + x) ` S)))" |
2364 using affine_translation affine_affine_hull by (auto simp del: uminus_add_conv_diff) |
2364 using affine_translation affine_affine_hull by blast |
2365 moreover have "(\<lambda>x. -a + x) ` (\<lambda>x. a + x) ` S \<subseteq> (\<lambda>x. -a + x) ` (affine hull ((\<lambda>x. a + x) ` S))" |
2365 moreover have "(\<lambda>x. -a + x) ` (\<lambda>x. a + x) ` S \<subseteq> (\<lambda>x. -a + x) ` (affine hull ((\<lambda>x. a + x) ` S))" |
2366 using hull_subset[of "(\<lambda>x. a + x) ` S"] by auto |
2366 using hull_subset[of "(\<lambda>x. a + x) ` S"] by auto |
2367 moreover have "S = (\<lambda>x. -a + x) ` (\<lambda>x. a + x) ` S" |
2367 moreover have "S = (\<lambda>x. -a + x) ` (\<lambda>x. a + x) ` S" |
2368 using translation_assoc[of "-a" a] by auto |
2368 using translation_assoc[of "-a" a] by auto |
2369 ultimately have "(\<lambda>x. -a + x) ` (affine hull ((\<lambda>x. a + x) ` S)) >= (affine hull S)" |
2369 ultimately have "(\<lambda>x. -a + x) ` (affine hull ((\<lambda>x. a + x) ` S)) >= (affine hull S)" |
2931 shows "dim (affine hull S) = dim S" |
2931 shows "dim (affine hull S) = dim S" |
2932 proof - |
2932 proof - |
2933 have "dim (affine hull S) \<ge> dim S" |
2933 have "dim (affine hull S) \<ge> dim S" |
2934 using dim_subset by auto |
2934 using dim_subset by auto |
2935 moreover have "dim (span S) \<ge> dim (affine hull S)" |
2935 moreover have "dim (span S) \<ge> dim (affine hull S)" |
2936 using dim_subset affine_hull_subset_span by auto |
2936 using dim_subset affine_hull_subset_span by blast |
2937 moreover have "dim (span S) = dim S" |
2937 moreover have "dim (span S) = dim S" |
2938 using dim_span by auto |
2938 using dim_span by auto |
2939 ultimately show ?thesis by auto |
2939 ultimately show ?thesis by auto |
2940 qed |
2940 qed |
2941 |
2941 |
3176 |
3176 |
3177 lemma rel_interior_cball: |
3177 lemma rel_interior_cball: |
3178 "rel_interior S = {x \<in> S. \<exists>e. e > 0 \<and> cball x e \<inter> affine hull S \<subseteq> S}" |
3178 "rel_interior S = {x \<in> S. \<exists>e. e > 0 \<and> cball x e \<inter> affine hull S \<subseteq> S}" |
3179 using mem_rel_interior_cball [of _ S] by auto |
3179 using mem_rel_interior_cball [of _ S] by auto |
3180 |
3180 |
3181 lemma rel_interior_empty: "rel_interior {} = {}" |
3181 lemma rel_interior_empty [simp]: "rel_interior {} = {}" |
3182 by (auto simp add: rel_interior_def) |
3182 by (auto simp add: rel_interior_def) |
3183 |
3183 |
3184 lemma affine_hull_sing: "affine hull {a :: 'n::euclidean_space} = {a}" |
3184 lemma affine_hull_sing [simp]: "affine hull {a :: 'n::euclidean_space} = {a}" |
3185 by (metis affine_hull_eq affine_sing) |
3185 by (metis affine_hull_eq affine_sing) |
3186 |
3186 |
3187 lemma rel_interior_sing: "rel_interior {a :: 'n::euclidean_space} = {a}" |
3187 lemma rel_interior_sing [simp]: "rel_interior {a :: 'n::euclidean_space} = {a}" |
3188 unfolding rel_interior_ball affine_hull_sing |
3188 unfolding rel_interior_ball affine_hull_sing |
3189 apply auto |
3189 apply auto |
3190 apply (rule_tac x = "1 :: real" in exI) |
3190 apply (rule_tac x = "1 :: real" in exI) |
3191 apply simp |
3191 apply simp |
3192 done |
3192 done |
3215 have "affine hull S = UNIV" |
3215 have "affine hull S = UNIV" |
3216 using assms affine_hull_univ[of S] by auto |
3216 using assms affine_hull_univ[of S] by auto |
3217 then show ?thesis |
3217 then show ?thesis |
3218 unfolding rel_interior interior_def by auto |
3218 unfolding rel_interior interior_def by auto |
3219 qed |
3219 qed |
|
3220 |
|
3221 lemma rel_interior_interior: |
|
3222 fixes S :: "'n::euclidean_space set" |
|
3223 assumes "affine hull S = UNIV" |
|
3224 shows "rel_interior S = interior S" |
|
3225 using assms unfolding rel_interior interior_def by auto |
3220 |
3226 |
3221 lemma rel_interior_open: |
3227 lemma rel_interior_open: |
3222 fixes S :: "'n::euclidean_space set" |
3228 fixes S :: "'n::euclidean_space set" |
3223 assumes "open S" |
3229 assumes "open S" |
3224 shows "rel_interior S = S" |
3230 shows "rel_interior S = S" |
3692 by auto |
3698 by auto |
3693 show ?thesis |
3699 show ?thesis |
3694 unfolding affine_hull_insert_span_gen span_substd_basis[OF assms,symmetric] * .. |
3700 unfolding affine_hull_insert_span_gen span_substd_basis[OF assms,symmetric] * .. |
3695 qed |
3701 qed |
3696 |
3702 |
3697 lemma affine_hull_convex_hull: "affine hull (convex hull S) = affine hull S" |
3703 lemma affine_hull_convex_hull [simp]: "affine hull (convex hull S) = affine hull S" |
3698 by (metis Int_absorb1 Int_absorb2 convex_hull_subset_affine_hull hull_hull hull_mono hull_subset) |
3704 by (metis Int_absorb1 Int_absorb2 convex_hull_subset_affine_hull hull_hull hull_mono hull_subset) |
3699 |
3705 |
3700 |
3706 |
3701 subsection {* Openness and compactness are preserved by convex hull operation. *} |
3707 subsection {* Openness and compactness are preserved by convex hull operation. *} |
3702 |
3708 |
8038 and T :: "'m::euclidean_space set" |
8044 and T :: "'m::euclidean_space set" |
8039 assumes "convex S" |
8045 assumes "convex S" |
8040 and "convex T" |
8046 and "convex T" |
8041 shows "rel_interior (S \<times> T) = rel_interior S \<times> rel_interior T" |
8047 shows "rel_interior (S \<times> T) = rel_interior S \<times> rel_interior T" |
8042 proof - |
8048 proof - |
8043 { |
8049 { assume "S = {}" |
8044 assume "S = {}" |
|
8045 then have ?thesis |
8050 then have ?thesis |
8046 apply auto |
8051 by auto |
8047 using rel_interior_empty |
|
8048 apply auto |
|
8049 done |
|
8050 } |
8052 } |
8051 moreover |
8053 moreover |
8052 { |
8054 { assume "T = {}" |
8053 assume "T = {}" |
|
8054 then have ?thesis |
8055 then have ?thesis |
8055 apply auto |
8056 by auto |
8056 using rel_interior_empty |
|
8057 apply auto |
|
8058 done |
|
8059 } |
8057 } |
8060 moreover |
8058 moreover |
8061 { |
8059 { |
8062 assume "S \<noteq> {}" "T \<noteq> {}" |
8060 assume "S \<noteq> {}" "T \<noteq> {}" |
8063 then have ri: "rel_interior S \<noteq> {}" "rel_interior T \<noteq> {}" |
8061 then have ri: "rel_interior S \<noteq> {}" "rel_interior T \<noteq> {}" |