equal
deleted
inserted
replaced
9465 by blast |
9465 by blast |
9466 then have "s \<subseteq> g ` (affine hull {u, v, w})" |
9466 then have "s \<subseteq> g ` (affine hull {u, v, w})" |
9467 using g by (simp add: Fun.image_comp) |
9467 using g by (simp add: Fun.image_comp) |
9468 then show "coplanar s" |
9468 then show "coplanar s" |
9469 unfolding coplanar_def |
9469 unfolding coplanar_def |
9470 using affine_hull_linear_image [of g "{u,v,w}" for u v w] `linear g` linear_conv_bounded_linear |
9470 using affine_hull_linear_image [of g "{u,v,w}" for u v w] \<open>linear g\<close> linear_conv_bounded_linear |
9471 by fastforce |
9471 by fastforce |
9472 qed |
9472 qed |
9473 (*The HOL Light proof is simply |
9473 (*The HOL Light proof is simply |
9474 MATCH_ACCEPT_TAC(LINEAR_INVARIANT_RULE COPLANAR_LINEAR_IMAGE));; |
9474 MATCH_ACCEPT_TAC(LINEAR_INVARIANT_RULE COPLANAR_LINEAR_IMAGE));; |
9475 *) |
9475 *) |
9649 have "continuous_on (closure s) (\<lambda>a. dist a y)" |
9649 have "continuous_on (closure s) (\<lambda>a. dist a y)" |
9650 by (auto simp: continuous_intros dist_norm) |
9650 by (auto simp: continuous_intros dist_norm) |
9651 then have *: "\<And>x. x \<in> closure s \<Longrightarrow> setdist s t \<le> dist x y" |
9651 then have *: "\<And>x. x \<in> closure s \<Longrightarrow> setdist s t \<le> dist x y" |
9652 apply (rule continuous_ge_on_closure) |
9652 apply (rule continuous_ge_on_closure) |
9653 apply assumption |
9653 apply assumption |
9654 apply (blast intro: setdist_le_dist `y \<in> t` ) |
9654 apply (blast intro: setdist_le_dist \<open>y \<in> t\<close> ) |
9655 done |
9655 done |
9656 } note * = this |
9656 } note * = this |
9657 show ?thesis |
9657 show ?thesis |
9658 apply (rule antisym) |
9658 apply (rule antisym) |
9659 using False closure_subset apply (blast intro: setdist_subset_left) |
9659 using False closure_subset apply (blast intro: setdist_subset_left) |
9685 lemma setdist_closed_compact: |
9685 lemma setdist_closed_compact: |
9686 fixes s :: "'a::euclidean_space set" |
9686 fixes s :: "'a::euclidean_space set" |
9687 assumes s: "closed s" and t: "compact t" |
9687 assumes s: "closed s" and t: "compact t" |
9688 and "s \<noteq> {}" "t \<noteq> {}" |
9688 and "s \<noteq> {}" "t \<noteq> {}" |
9689 shows "\<exists>x \<in> s. \<exists>y \<in> t. dist x y = setdist s t" |
9689 shows "\<exists>x \<in> s. \<exists>y \<in> t. dist x y = setdist s t" |
9690 using setdist_compact_closed [OF t s `t \<noteq> {}` `s \<noteq> {}`] |
9690 using setdist_compact_closed [OF t s \<open>t \<noteq> {}\<close> \<open>s \<noteq> {}\<close>] |
9691 by (metis dist_commute setdist_sym) |
9691 by (metis dist_commute setdist_sym) |
9692 |
9692 |
9693 lemma setdist_eq_0I: "\<lbrakk>x \<in> s; x \<in> t\<rbrakk> \<Longrightarrow> setdist s t = 0" |
9693 lemma setdist_eq_0I: "\<lbrakk>x \<in> s; x \<in> t\<rbrakk> \<Longrightarrow> setdist s t = 0" |
9694 by (metis antisym dist_self setdist_le_dist setdist_pos_le) |
9694 by (metis antisym dist_self setdist_le_dist setdist_pos_le) |
9695 |
9695 |