src/HOL/Multivariate_Analysis/Convex_Euclidean_Space.thy
changeset 61222 05d28dc76e5c
parent 61104 3c2d4636cebc
child 61426 d53db136e8fd
equal deleted inserted replaced
61221:bf194f7c4c8e 61222:05d28dc76e5c
  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