src/HOL/Analysis/Convex_Euclidean_Space.thy
changeset 66884 c2128ab11f61
parent 66827 c94531b5007d
child 66939 04678058308f
equal deleted inserted replaced
66878:91da58bb560d 66884:c2128ab11f61
  1269     using linear_continuous_on linear_conv_bounded_linear by blast
  1269     using linear_continuous_on linear_conv_bounded_linear by blast
  1270   have [simp]: "g ` f ` S = S"
  1270   have [simp]: "g ` f ` S = S"
  1271     using g by (simp add: image_comp)
  1271     using g by (simp add: image_comp)
  1272   have cgf: "closed (g ` f ` S)"
  1272   have cgf: "closed (g ` f ` S)"
  1273     by (simp add: \<open>g \<circ> f = id\<close> S image_comp)
  1273     by (simp add: \<open>g \<circ> f = id\<close> S image_comp)
  1274   have [simp]: "{x \<in> range f. g x \<in> S} = f ` S"
  1274   have [simp]: "(range f \<inter> g -` S) = f ` S"
  1275     using g by (simp add: o_def id_def image_def) metis
  1275     using g unfolding o_def id_def image_def by auto metis+
  1276   show ?thesis
  1276   show ?thesis
  1277     apply (rule closedin_closed_trans [of "range f"])
  1277   proof (rule closedin_closed_trans [of "range f"])
  1278     apply (rule continuous_closedin_preimage [OF confg cgf, simplified])
  1278     show "closedin (subtopology euclidean (range f)) (f ` S)"
  1279     apply (rule closed_injective_image_subspace)
  1279       using continuous_closedin_preimage [OF confg cgf] by simp
  1280     using f
  1280     show "closed (range f)"
  1281     apply (auto simp: linear_linear linear_injective_0)
  1281       apply (rule closed_injective_image_subspace)
  1282     done
  1282       using f apply (auto simp: linear_linear linear_injective_0)
       
  1283       done
       
  1284   qed
  1283 qed
  1285 qed
  1284 
  1286 
  1285 lemma closed_injective_linear_image_eq:
  1287 lemma closed_injective_linear_image_eq:
  1286     fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space"
  1288     fixes f :: "'a::euclidean_space \<Rightarrow> 'b::euclidean_space"
  1287     assumes f: "linear f" "inj f"
  1289     assumes f: "linear f" "inj f"
  2372 
  2374 
  2373 corollary connected_UNIV[intro]: "connected (UNIV :: 'a::real_normed_vector set)"
  2375 corollary connected_UNIV[intro]: "connected (UNIV :: 'a::real_normed_vector set)"
  2374   by(simp add: convex_connected)
  2376   by(simp add: convex_connected)
  2375 
  2377 
  2376 proposition clopen:
  2378 proposition clopen:
  2377   fixes s :: "'a :: real_normed_vector set"
  2379   fixes S :: "'a :: real_normed_vector set"
  2378   shows "closed s \<and> open s \<longleftrightarrow> s = {} \<or> s = UNIV"
  2380   shows "closed S \<and> open S \<longleftrightarrow> S = {} \<or> S = UNIV"
  2379 apply (rule iffI)
  2381     by (force intro!: connected_UNIV [unfolded connected_clopen, rule_format])
  2380  apply (rule connected_UNIV [unfolded connected_clopen, rule_format])
       
  2381  apply (force simp add: closed_closedin, force)
       
  2382 done
       
  2383 
  2382 
  2384 corollary compact_open:
  2383 corollary compact_open:
  2385   fixes s :: "'a :: euclidean_space set"
  2384   fixes S :: "'a :: euclidean_space set"
  2386   shows "compact s \<and> open s \<longleftrightarrow> s = {}"
  2385   shows "compact S \<and> open S \<longleftrightarrow> S = {}"
  2387   by (auto simp: compact_eq_bounded_closed clopen)
  2386   by (auto simp: compact_eq_bounded_closed clopen)
  2388 
  2387 
  2389 corollary finite_imp_not_open:
  2388 corollary finite_imp_not_open:
  2390     fixes S :: "'a::{real_normed_vector, perfect_space} set"
  2389     fixes S :: "'a::{real_normed_vector, perfect_space} set"
  2391     shows "\<lbrakk>finite S; open S\<rbrakk> \<Longrightarrow> S={}"
  2390     shows "\<lbrakk>finite S; open S\<rbrakk> \<Longrightarrow> S={}"