equal
deleted
inserted
replaced
16 |
16 |
17 lemma face_ofD: "\<lbrakk>T face_of S; x \<in> open_segment a b; a \<in> S; b \<in> S; x \<in> T\<rbrakk> \<Longrightarrow> a \<in> T \<and> b \<in> T" |
17 lemma face_ofD: "\<lbrakk>T face_of S; x \<in> open_segment a b; a \<in> S; b \<in> S; x \<in> T\<rbrakk> \<Longrightarrow> a \<in> T \<and> b \<in> T" |
18 unfolding face_of_def by blast |
18 unfolding face_of_def by blast |
19 |
19 |
20 lemma face_of_translation_eq [simp]: |
20 lemma face_of_translation_eq [simp]: |
21 "(op + a ` T face_of op + a ` S) \<longleftrightarrow> T face_of S" |
21 "((+) a ` T face_of (+) a ` S) \<longleftrightarrow> T face_of S" |
22 proof - |
22 proof - |
23 have *: "\<And>a T S. T face_of S \<Longrightarrow> (op + a ` T face_of op + a ` S)" |
23 have *: "\<And>a T S. T face_of S \<Longrightarrow> ((+) a ` T face_of (+) a ` S)" |
24 apply (simp add: face_of_def Ball_def, clarify) |
24 apply (simp add: face_of_def Ball_def, clarify) |
25 apply (drule open_segment_translation_eq [THEN iffD1]) |
25 apply (drule open_segment_translation_eq [THEN iffD1]) |
26 using inj_image_mem_iff inj_add_left apply metis |
26 using inj_image_mem_iff inj_add_left apply metis |
27 done |
27 done |
28 show ?thesis |
28 show ?thesis |
1123 assume unot: "u \<notin> closure(convex hull {x. x extreme_point_of S})" |
1123 assume unot: "u \<notin> closure(convex hull {x. x extreme_point_of S})" |
1124 then obtain a b where "a \<bullet> u < b" |
1124 then obtain a b where "a \<bullet> u < b" |
1125 and ab: "\<And>x. x \<in> closure(convex hull {x. x extreme_point_of S}) \<Longrightarrow> b < a \<bullet> x" |
1125 and ab: "\<And>x. x \<in> closure(convex hull {x. x extreme_point_of S}) \<Longrightarrow> b < a \<bullet> x" |
1126 using separating_hyperplane_closed_point [of "closure(convex hull {x. x extreme_point_of S})"] |
1126 using separating_hyperplane_closed_point [of "closure(convex hull {x. x extreme_point_of S})"] |
1127 by blast |
1127 by blast |
1128 have "continuous_on S (op \<bullet> a)" |
1128 have "continuous_on S ((\<bullet>) a)" |
1129 by (rule continuous_intros)+ |
1129 by (rule continuous_intros)+ |
1130 then obtain m where "m \<in> S" and m: "\<And>y. y \<in> S \<Longrightarrow> a \<bullet> m \<le> a \<bullet> y" |
1130 then obtain m where "m \<in> S" and m: "\<And>y. y \<in> S \<Longrightarrow> a \<bullet> m \<le> a \<bullet> y" |
1131 using continuous_attains_inf [of S "\<lambda>x. a \<bullet> x"] \<open>compact S\<close> \<open>u \<in> S\<close> |
1131 using continuous_attains_inf [of S "\<lambda>x. a \<bullet> x"] \<open>compact S\<close> \<open>u \<in> S\<close> |
1132 by auto |
1132 by auto |
1133 define T where "T = S \<inter> {x. a \<bullet> x = a \<bullet> m}" |
1133 define T where "T = S \<inter> {x. a \<bullet> x = a \<bullet> m}" |
1204 shows "S = convex hull {x. x extreme_point_of S}" |
1204 shows "S = convex hull {x. x extreme_point_of S}" |
1205 proof |
1205 proof |
1206 show "S \<subseteq> convex hull {x. x extreme_point_of S}" |
1206 show "S \<subseteq> convex hull {x. x extreme_point_of S}" |
1207 proof |
1207 proof |
1208 fix a assume [simp]: "a \<in> S" |
1208 fix a assume [simp]: "a \<in> S" |
1209 have 1: "compact (op + (- a) ` S)" |
1209 have 1: "compact ((+) (- a) ` S)" |
1210 by (simp add: \<open>compact S\<close> compact_translation) |
1210 by (simp add: \<open>compact S\<close> compact_translation) |
1211 have 2: "convex (op + (- a) ` S)" |
1211 have 2: "convex ((+) (- a) ` S)" |
1212 by (simp add: \<open>convex S\<close> convex_translation) |
1212 by (simp add: \<open>convex S\<close> convex_translation) |
1213 show a_invex: "a \<in> convex hull {x. x extreme_point_of S}" |
1213 show a_invex: "a \<in> convex hull {x. x extreme_point_of S}" |
1214 using Krein_Milman_Minkowski_aux [OF refl 1 2] |
1214 using Krein_Milman_Minkowski_aux [OF refl 1 2] |
1215 convex_hull_translation [of "-a"] |
1215 convex_hull_translation [of "-a"] |
1216 by (auto simp: extreme_points_of_translation translation_assoc) |
1216 by (auto simp: extreme_points_of_translation translation_assoc) |
1628 assumes "polytope S" |
1628 assumes "polytope S" |
1629 shows "finite {F. F face_of S}" |
1629 shows "finite {F. F face_of S}" |
1630 proof - |
1630 proof - |
1631 obtain v where "finite v" "S = convex hull v" |
1631 obtain v where "finite v" "S = convex hull v" |
1632 using assms polytope_def by auto |
1632 using assms polytope_def by auto |
1633 have "finite (op hull convex ` {T. T \<subseteq> v})" |
1633 have "finite ((hull) convex ` {T. T \<subseteq> v})" |
1634 by (simp add: \<open>finite v\<close>) |
1634 by (simp add: \<open>finite v\<close>) |
1635 moreover have "{F. F face_of S} \<subseteq> (op hull convex ` {T. T \<subseteq> v})" |
1635 moreover have "{F. F face_of S} \<subseteq> ((hull) convex ` {T. T \<subseteq> v})" |
1636 by (metis (no_types, lifting) \<open>finite v\<close> \<open>S = convex hull v\<close> face_of_convex_hull_subset finite_imp_compact image_eqI mem_Collect_eq subsetI) |
1636 by (metis (no_types, lifting) \<open>finite v\<close> \<open>S = convex hull v\<close> face_of_convex_hull_subset finite_imp_compact image_eqI mem_Collect_eq subsetI) |
1637 ultimately show ?thesis |
1637 ultimately show ?thesis |
1638 by (blast intro: finite_subset) |
1638 by (blast intro: finite_subset) |
1639 qed |
1639 qed |
1640 |
1640 |
2501 then show ?thesis |
2501 then show ?thesis |
2502 proof cases |
2502 proof cases |
2503 case 1 then show ?thesis . |
2503 case 1 then show ?thesis . |
2504 next |
2504 next |
2505 case 2 |
2505 case 2 |
2506 have "Collect (op \<in> x) \<notin> Collect (op \<in> (\<Union>{A. A facet_of S}))" |
2506 have "Collect ((\<in>) x) \<notin> Collect ((\<in>) (\<Union>{A. A facet_of S}))" |
2507 using xnot by fastforce |
2507 using xnot by fastforce |
2508 then have "F \<notin> Collect (op \<in> h)" |
2508 then have "F \<notin> Collect ((\<in>) h)" |
2509 using 2 \<open>x \<in> S\<close> facet by blast |
2509 using 2 \<open>x \<in> S\<close> facet by blast |
2510 with \<open>h \<in> F\<close> have "\<Inter>F \<subseteq> S \<inter> {x. a h \<bullet> x = b h}" by blast |
2510 with \<open>h \<in> F\<close> have "\<Inter>F \<subseteq> S \<inter> {x. a h \<bullet> x = b h}" by blast |
2511 with 2 that \<open>x \<in> \<Inter>F\<close> show ?thesis |
2511 with 2 that \<open>x \<in> \<Inter>F\<close> show ?thesis |
2512 apply simp |
2512 apply simp |
2513 apply (drule_tac x="\<Inter>F" in spec) |
2513 apply (drule_tac x="\<Inter>F" in spec) |
2659 apply safe |
2659 apply safe |
2660 apply (rule_tac x="inv h ` x" in image_eqI) |
2660 apply (rule_tac x="inv h ` x" in image_eqI) |
2661 apply (auto simp: \<open>bij h\<close> bij_is_surj image_f_inv_f) |
2661 apply (auto simp: \<open>bij h\<close> bij_is_surj image_f_inv_f) |
2662 done |
2662 done |
2663 have "inj h" using bij_is_inj assms by blast |
2663 have "inj h" using bij_is_inj assms by blast |
2664 then have injim: "inj_on (op ` h) A" for A |
2664 then have injim: "inj_on ((`) h) A" for A |
2665 by (simp add: inj_on_def inj_image_eq_iff) |
2665 by (simp add: inj_on_def inj_image_eq_iff) |
2666 show ?thesis |
2666 show ?thesis |
2667 using \<open>linear h\<close> \<open>inj h\<close> |
2667 using \<open>linear h\<close> \<open>inj h\<close> |
2668 apply (simp add: polyhedron_eq_finite_faces closed_injective_linear_image_eq) |
2668 apply (simp add: polyhedron_eq_finite_faces closed_injective_linear_image_eq) |
2669 apply (simp add: * face_of_linear_image [of h _ S, symmetric] finite_image_iff injim) |
2669 apply (simp add: * face_of_linear_image [of h _ S, symmetric] finite_image_iff injim) |