src/HOL/Analysis/Arcwise_Connected.thy
changeset 69313 b021008c5397
parent 68833 fde093888c16
child 69517 dc20f278e8f3
equal deleted inserted replaced
69312:e0f68a507683 69313:b021008c5397
    37     by (induction n) (auto simp: assms ASuc dest!: someI_ex)
    37     by (induction n) (auto simp: assms ASuc dest!: someI_ex)
    38   show ?thesis
    38   show ?thesis
    39   proof
    39   proof
    40     show "\<Inter>range A \<subseteq> S"
    40     show "\<Inter>range A \<subseteq> S"
    41       using \<open>\<And>n. A n \<subseteq> S\<close> by blast
    41       using \<open>\<And>n. A n \<subseteq> S\<close> by blast
    42     show "closed (INTER UNIV A)"
    42     show "closed (\<Inter>(A ` UNIV))"
    43       using clo by blast
    43       using clo by blast
    44     show "\<phi> (INTER UNIV A)"
    44     show "\<phi> (\<Inter>(A ` UNIV))"
    45       by (simp add: clo \<phi> sub)
    45       by (simp add: clo \<phi> sub)
    46     show "\<not> U \<subset> INTER UNIV A" if "U \<subseteq> S" "closed U" "\<phi> U" for U
    46     show "\<not> U \<subset> \<Inter>(A ` UNIV)" if "U \<subseteq> S" "closed U" "\<phi> U" for U
    47     proof -
    47     proof -
    48       have "\<exists>y. x \<notin> A y" if "x \<notin> U" and Usub: "U \<subseteq> (\<Inter>x. A x)" for x
    48       have "\<exists>y. x \<notin> A y" if "x \<notin> U" and Usub: "U \<subseteq> (\<Inter>x. A x)" for x
    49       proof -
    49       proof -
    50         obtain e where "e > 0" and e: "ball x e \<subseteq> -U"
    50         obtain e where "e > 0" and e: "ball x e \<subseteq> -U"
    51           using \<open>closed U\<close> \<open>x \<notin> U\<close> openE [of "-U"] by blast
    51           using \<open>closed U\<close> \<open>x \<notin> U\<close> openE [of "-U"] by blast
    52         moreover obtain K where K: "ball x e = UNION K B"
    52         moreover obtain K where K: "ball x e = \<Union>(B ` K)"
    53           using open_cov [of "ball x e"] by auto
    53           using open_cov [of "ball x e"] by auto
    54         ultimately have "UNION K B \<subseteq> -U"
    54         ultimately have "\<Union>(B ` K) \<subseteq> -U"
    55           by blast
    55           by blast
    56         have "K \<noteq> {}"
    56         have "K \<noteq> {}"
    57           using \<open>0 < e\<close> \<open>ball x e = UNION K B\<close> by auto
    57           using \<open>0 < e\<close> \<open>ball x e = \<Union>(B ` K)\<close> by auto
    58         then obtain n where "n \<in> K" "x \<in> B n"
    58         then obtain n where "n \<in> K" "x \<in> B n"
    59           by (metis K UN_E \<open>0 < e\<close> centre_in_ball)
    59           by (metis K UN_E \<open>0 < e\<close> centre_in_ball)
    60         then have "U \<inter> B n = {}"
    60         then have "U \<inter> B n = {}"
    61           using K e by auto
    61           using K e by auto
    62         show ?thesis
    62         show ?thesis
    87                   "\<And>U. \<lbrakk>U \<subseteq> S; closed U; U \<noteq> {}; \<phi> U\<rbrakk> \<Longrightarrow> \<not> (U \<subset> T)"
    87                   "\<And>U. \<lbrakk>U \<subseteq> S; closed U; U \<noteq> {}; \<phi> U\<rbrakk> \<Longrightarrow> \<not> (U \<subset> T)"
    88 proof%unimportant (rule Brouwer_reduction_theorem_gen [of S "\<lambda>T. T \<noteq> {} \<and> T \<subseteq> S \<and> \<phi> T"])
    88 proof%unimportant (rule Brouwer_reduction_theorem_gen [of S "\<lambda>T. T \<noteq> {} \<and> T \<subseteq> S \<and> \<phi> T"])
    89   fix F
    89   fix F
    90   assume cloF: "\<And>n. closed (F n)"
    90   assume cloF: "\<And>n. closed (F n)"
    91      and F: "\<And>n. F n \<noteq> {} \<and> F n \<subseteq> S \<and> \<phi> (F n)" and Fsub: "\<And>n. F (Suc n) \<subseteq> F n"
    91      and F: "\<And>n. F n \<noteq> {} \<and> F n \<subseteq> S \<and> \<phi> (F n)" and Fsub: "\<And>n. F (Suc n) \<subseteq> F n"
    92   show "INTER UNIV F \<noteq> {} \<and> INTER UNIV F \<subseteq> S \<and> \<phi> (INTER UNIV F)"
    92   show "\<Inter>(F ` UNIV) \<noteq> {} \<and> \<Inter>(F ` UNIV) \<subseteq> S \<and> \<phi> (\<Inter>(F ` UNIV))"
    93   proof (intro conjI)
    93   proof (intro conjI)
    94     show "INTER UNIV F \<noteq> {}"
    94     show "\<Inter>(F ` UNIV) \<noteq> {}"
    95       apply (rule compact_nest)
    95       apply (rule compact_nest)
    96       apply (meson F cloF \<open>compact S\<close> seq_compact_closed_subset seq_compact_eq_compact)
    96       apply (meson F cloF \<open>compact S\<close> seq_compact_closed_subset seq_compact_eq_compact)
    97        apply (simp add: F)
    97        apply (simp add: F)
    98       by (meson Fsub lift_Suc_antimono_le)
    98       by (meson Fsub lift_Suc_antimono_le)
    99     show " INTER UNIV F \<subseteq> S"
    99     show " \<Inter>(F ` UNIV) \<subseteq> S"
   100       using F by blast
   100       using F by blast
   101     show "\<phi> (INTER UNIV F)"
   101     show "\<phi> (\<Inter>(F ` UNIV))"
   102       by (metis F Fsub \<phi> \<open>compact S\<close> cloF closed_Int_compact inf.orderE)
   102       by (metis F Fsub \<phi> \<open>compact S\<close> cloF closed_Int_compact inf.orderE)
   103   qed
   103   qed
   104 next
   104 next
   105   show "S \<noteq> {} \<and> S \<subseteq> S \<and> \<phi> S"
   105   show "S \<noteq> {} \<and> S \<subseteq> S \<and> \<phi> S"
   106     by (simp add: assms)
   106     by (simp add: assms)
  1678   proof (rule Brouwer_reduction_theorem_gen [of "{0..1}" \<phi>])
  1678   proof (rule Brouwer_reduction_theorem_gen [of "{0..1}" \<phi>])
  1679     have *: "{x<..<y} \<inter> {0..1} = {x<..<y}" if "0 \<le> x" "y \<le> 1" "x \<le> y" for x y::real
  1679     have *: "{x<..<y} \<inter> {0..1} = {x<..<y}" if "0 \<le> x" "y \<le> 1" "x \<le> y" for x y::real
  1680       using that by auto
  1680       using that by auto
  1681     show "\<phi> {0..1}"
  1681     show "\<phi> {0..1}"
  1682       by (auto simp: \<phi>_def open_segment_eq_real_ivl *)
  1682       by (auto simp: \<phi>_def open_segment_eq_real_ivl *)
  1683     show "\<phi> (INTER UNIV F)"
  1683     show "\<phi> (\<Inter>(F ` UNIV))"
  1684       if "\<And>n. closed (F n)" and \<phi>: "\<And>n. \<phi> (F n)" and Fsub: "\<And>n. F (Suc n) \<subseteq> F n" for F
  1684       if "\<And>n. closed (F n)" and \<phi>: "\<And>n. \<phi> (F n)" and Fsub: "\<And>n. F (Suc n) \<subseteq> F n" for F
  1685     proof -
  1685     proof -
  1686       have F01: "\<And>n. F n \<subseteq> {0..1} \<and> 0 \<in> F n \<and> 1 \<in> F n"
  1686       have F01: "\<And>n. F n \<subseteq> {0..1} \<and> 0 \<in> F n \<and> 1 \<in> F n"
  1687         and peq: "\<And>n x y. \<lbrakk>x \<in> F n; y \<in> F n; open_segment x y \<inter> F n = {}\<rbrakk> \<Longrightarrow> p x = p y"
  1687         and peq: "\<And>n x y. \<lbrakk>x \<in> F n; y \<in> F n; open_segment x y \<inter> F n = {}\<rbrakk> \<Longrightarrow> p x = p y"
  1688         by (metis \<phi> \<phi>_def)+
  1688         by (metis \<phi> \<phi>_def)+
  1704           and wxe: "norm(w - x) < e" and zye: "norm(z - y) < e"
  1704           and wxe: "norm(w - x) < e" and zye: "norm(z - y) < e"
  1705           apply (rule_tac w = "x + (min e (y - x) / 3)" and z = "y - (min e (y - x) / 3)" in that)
  1705           apply (rule_tac w = "x + (min e (y - x) / 3)" and z = "y - (min e (y - x) / 3)" in that)
  1706           using minxy \<open>0 < e\<close> less by simp_all
  1706           using minxy \<open>0 < e\<close> less by simp_all
  1707         have Fclo: "\<And>T. T \<in> range F \<Longrightarrow> closed T"
  1707         have Fclo: "\<And>T. T \<in> range F \<Longrightarrow> closed T"
  1708           by (metis \<open>\<And>n. closed (F n)\<close> image_iff)
  1708           by (metis \<open>\<And>n. closed (F n)\<close> image_iff)
  1709         have eq: "{w..z} \<inter> INTER UNIV F = {}"
  1709         have eq: "{w..z} \<inter> \<Inter>(F ` UNIV) = {}"
  1710           using less w z apply (auto simp: open_segment_eq_real_ivl)
  1710           using less w z apply (auto simp: open_segment_eq_real_ivl)
  1711           by (metis (no_types, hide_lams) INT_I IntI empty_iff greaterThanLessThan_iff not_le order.trans)
  1711           by (metis (no_types, hide_lams) INT_I IntI empty_iff greaterThanLessThan_iff not_le order.trans)
  1712         then obtain K where "finite K" and K: "{w..z} \<inter> (\<Inter> (F ` K)) = {}"
  1712         then obtain K where "finite K" and K: "{w..z} \<inter> (\<Inter> (F ` K)) = {}"
  1713           by (metis finite_subset_image compact_imp_fip [OF compact_interval Fclo])
  1713           by (metis finite_subset_image compact_imp_fip [OF compact_interval Fclo])
  1714         then have "K \<noteq> {}"
  1714         then have "K \<noteq> {}"
  1715           using \<open>w < z\<close> \<open>{w..z} \<inter> INTER K F = {}\<close> by auto
  1715           using \<open>w < z\<close> \<open>{w..z} \<inter> \<Inter>(F ` K) = {}\<close> by auto
  1716         define n where "n \<equiv> Max K"
  1716         define n where "n \<equiv> Max K"
  1717         have "n \<in> K" unfolding n_def by (metis \<open>K \<noteq> {}\<close> \<open>finite K\<close> Max_in)
  1717         have "n \<in> K" unfolding n_def by (metis \<open>K \<noteq> {}\<close> \<open>finite K\<close> Max_in)
  1718         have "F n \<subseteq> \<Inter> (F ` K)"
  1718         have "F n \<subseteq> \<Inter> (F ` K)"
  1719           unfolding n_def by (metis Fsub Max_ge \<open>K \<noteq> {}\<close> \<open>finite K\<close> cINF_greatest lift_Suc_antimono_le)
  1719           unfolding n_def by (metis Fsub Max_ge \<open>K \<noteq> {}\<close> \<open>finite K\<close> cINF_greatest lift_Suc_antimono_le)
  1720         with K have wzF_null: "{w..z} \<inter> F n = {}"
  1720         with K have wzF_null: "{w..z} \<inter> F n = {}"