# HG changeset patch # User hoelzl # Date 1387364020 -3600 # Node ID be020ec8560c598250174a1306c7345e24c7c8d8 # Parent cdc6d8cbf7702d39336cff524cfe45fa07f226da modernized ContNotDenum: use Set_Interval, and finite intersection property to show the nested interval property diff -r cdc6d8cbf770 -r be020ec8560c src/HOL/Library/ContNotDenum.thy --- a/src/HOL/Library/ContNotDenum.thy Tue Dec 17 22:34:26 2013 +0100 +++ b/src/HOL/Library/ContNotDenum.thy Wed Dec 18 11:53:40 2013 +0100 @@ -31,270 +31,43 @@ subsection {* Closed Intervals *} -text {* This section formalises some properties of closed intervals. *} - -subsubsection {* Definition *} - -definition - closed_int :: "real \ real \ real set" where - "closed_int x y = {z. x \ z \ z \ y}" - -subsubsection {* Properties *} - -lemma closed_int_subset: - assumes xy: "x1 \ x0" "y1 \ y0" - shows "closed_int x1 y1 \ closed_int x0 y0" -proof - - { - fix x::real - assume "x \ closed_int x1 y1" - hence "x \ x1 \ x \ y1" by (simp add: closed_int_def) - with xy have "x \ x0 \ x \ y0" by auto - hence "x \ closed_int x0 y0" by (simp add: closed_int_def) - } - thus ?thesis by auto -qed - -lemma closed_int_least: - assumes a: "a \ b" - shows "a \ closed_int a b \ (\x \ closed_int a b. a \ x)" -proof - from a have "a\{x. a\x \ x\b}" by simp - thus "a \ closed_int a b" by (unfold closed_int_def) -next - have "\x\{x. a\x \ x\b}. a\x" by simp - thus "\x \ closed_int a b. a \ x" by (unfold closed_int_def) -qed - -lemma closed_int_most: - assumes a: "a \ b" - shows "b \ closed_int a b \ (\x \ closed_int a b. x \ b)" -proof - from a have "b\{x. a\x \ x\b}" by simp - thus "b \ closed_int a b" by (unfold closed_int_def) -next - have "\x\{x. a\x \ x\b}. x\b" by simp - thus "\x \ closed_int a b. x\b" by (unfold closed_int_def) -qed - -lemma closed_not_empty: - shows "a \ b \ \x. x \ closed_int a b" - by (auto dest: closed_int_least) - -lemma closed_mem: - assumes "a \ c" and "c \ b" - shows "c \ closed_int a b" - using assms unfolding closed_int_def by auto - -lemma closed_subset: - assumes ac: "a \ b" "c \ d" - assumes closed: "closed_int a b \ closed_int c d" - shows "b \ c" -proof - - from closed have "\x\closed_int a b. x\closed_int c d" by auto - hence "\x. a\x \ x\b \ c\x \ x\d" by (unfold closed_int_def, auto) - with ac have "c\b \ b\d" by simp - thus ?thesis by auto -qed - - subsection {* Nested Interval Property *} theorem NIP: fixes f::"nat \ real set" assumes subset: "\n. f (Suc n) \ f n" - and closed: "\n. \a b. f n = closed_int a b \ a \ b" + and closed: "\n. \a b. f n = {a..b} \ a \ b" shows "(\n. f n) \ {}" proof - - let ?g = "\n. (SOME c. c\(f n) \ (\x\(f n). c \ x))" - have ne: "\n. \x. x\(f n)" - proof - fix n - from closed have "\a b. f n = closed_int a b \ a \ b" by simp - then obtain a and b where fn: "f n = closed_int a b \ a \ b" by auto - hence "a \ b" .. - with closed_not_empty have "\x. x\closed_int a b" by simp - with fn show "\x. x\(f n)" by simp - qed - - have gdef: "\n. (?g n)\(f n) \ (\x\(f n). (?g n)\x)" - proof - fix n - from closed have "\a b. f n = closed_int a b \ a \ b" .. - then obtain a and b where ff: "f n = closed_int a b" and "a \ b" by auto - hence "a \ b" by simp - hence "a\closed_int a b \ (\x\closed_int a b. a \ x)" by (rule closed_int_least) - with ff have "a\(f n) \ (\x\(f n). a \ x)" by simp - hence "\c. c\(f n) \ (\x\(f n). c \ x)" .. - thus "(?g n)\(f n) \ (\x\(f n). (?g n)\x)" by (rule someI_ex) - qed - - -- "A denotes the set of all left-most points of all the intervals ..." - moreover obtain A where Adef: "A = ?g ` \" by simp - ultimately have "A \ {}" - proof - - have "(0::nat) \ \" by simp - with Adef show ?thesis - by blast - qed - - -- "Now show that A is bounded above ..." - moreover have "bdd_above A" - proof - - { - fix n - from ne have ex: "\x. x\(f n)" .. - from gdef have "(?g n)\(f n) \ (\x\(f n). (?g n)\x)" by simp - moreover - from closed have "\a b. f n = closed_int a b \ a \ b" .. - then obtain a and b where "f n = closed_int a b \ a \ b" by auto - hence "b\(f n) \ (\x\(f n). x \ b)" using closed_int_most by blast - ultimately have "\x\(f n). (?g n) \ b" by simp - with ex have "(?g n) \ b" by auto - hence "\b. (?g n) \ b" by auto - } - hence aux: "\n. \b. (?g n) \ b" .. - - have fs: "\n::nat. f n \ f 0" - proof (rule allI, induct_tac n) - show "f 0 \ f 0" by simp - next - fix n - assume "f n \ f 0" - moreover from subset have "f (Suc n) \ f n" .. - ultimately show "f (Suc n) \ f 0" by simp - qed - have "\n. (?g n)\(f 0)" - proof - fix n - from gdef have "(?g n)\(f n) \ (\x\(f n). (?g n)\x)" by simp - hence "?g n \ f n" .. - with fs show "?g n \ f 0" by auto - qed - moreover from closed - obtain a and b where "f 0 = closed_int a b" and alb: "a \ b" by blast - ultimately have "\n. ?g n \ closed_int a b" by auto - with alb have "\n. ?g n \ b" using closed_int_most by blast - with Adef show "bdd_above A" by auto - qed - - -- "denote this least upper bound as t ..." - def tdef: t == "Sup A" - - -- "and finally show that this least upper bound is in all the intervals..." - have "\n. t \ f n" - proof - fix n::nat - from closed obtain a and b where - int: "f n = closed_int a b" and alb: "a \ b" by blast + let ?I = "\n. {Inf (f n) .. Sup (f n)}" + { fix n + from closed[rule_format, of n] obtain a b where "f n = {a .. b}" "a \ b" + by auto + then have "f n = {Inf (f n) .. Sup (f n)}" and "Inf (f n) \ Sup (f n)" + by auto } + note f_eq = this + { fix n m :: nat assume "n \ m" then have "f m \ f n" + by (induct rule: dec_induct) (metis order_refl, metis order_trans subset) } + note subset' = this - have "t \ a" - proof - - have "a \ A" - proof - - (* by construction *) - from alb int have ain: "a\f n \ (\x\f n. a \ x)" - using closed_int_least by blast - moreover have "\e. e\f n \ (\x\f n. e \ x) \ e = a" - proof clarsimp - fix e - assume ein: "e \ f n" and lt: "\x\f n. e \ x" - from lt ain have aux: "\x\f n. a \ x \ e \ x" by auto - - from ein aux have "a \ e \ e \ e" by auto - moreover from ain aux have "a \ a \ e \ a" by auto - ultimately show "e = a" by simp - qed - hence "\e. e\f n \ (\x\f n. e \ x) \ e = a" by simp - ultimately have "(?g n) = a" by (rule some_equality) - moreover - { - have "n = of_nat n" by simp - moreover have "of_nat n \ \" by simp - ultimately have "n \ \" - apply - - apply (subst(asm) eq_sym_conv) - apply (erule subst) - . - } - with Adef have "(?g n) \ A" by auto - ultimately show ?thesis by simp - qed - with `bdd_above A` show "a \ t" - unfolding tdef by (intro cSup_upper) + have "compact (f 0)" + by (subst f_eq) (rule compact_Icc) + then have "f 0 \ (\i. f i) \ {}" + proof (rule compact_imp_fip_image) + fix I :: "nat set" assume I: "finite I" + have "{} \ f (Max (insert 0 I))" + using f_eq[of "Max (insert 0 I)"] by auto + also have "\ \ (\i\insert 0 I. f i)" + proof (rule INF_greatest) + fix i assume "i \ insert 0 I" + with I show "f (Max (insert 0 I)) \ f i" + by (intro subset') auto qed - moreover have "t \ b" - unfolding tdef - proof (rule cSup_least) - { - from alb int have - ain: "b\f n \ (\x\f n. x \ b)" using closed_int_most by blast - - have subsetd: "\m. \n. f (n + m) \ f n" - proof (rule allI, induct_tac m) - show "\n. f (n + 0) \ f n" by simp - next - fix m n - assume pp: "\p. f (p + n) \ f p" - { - fix p - from pp have "f (p + n) \ f p" by simp - moreover from subset have "f (Suc (p + n)) \ f (p + n)" by auto - hence "f (p + (Suc n)) \ f (p + n)" by simp - ultimately have "f (p + (Suc n)) \ f p" by simp - } - thus "\p. f (p + Suc n) \ f p" .. - qed - have subsetm: "\\ \. \ \ \ \ (f \) \ (f \)" - proof ((rule allI)+, rule impI) - fix \::nat and \::nat - assume "\ \ \" - hence "\k. \ = \ + k" by (simp only: le_iff_add) - then obtain k where "\ = \ + k" .. - moreover - from subsetd have "f (\ + k) \ f \" by simp - ultimately show "f \ \ f \" by auto - qed - - fix m - { - assume "m \ n" - with subsetm have "f m \ f n" by simp - with ain have "\x\f m. x \ b" by auto - moreover - from gdef have "?g m \ f m \ (\x\f m. ?g m \ x)" by simp - ultimately have "?g m \ b" by auto - } - moreover - { - assume "\(m \ n)" - hence "m < n" by simp - with subsetm have sub: "(f n) \ (f m)" by simp - from closed obtain ma and mb where - "f m = closed_int ma mb \ ma \ mb" by blast - hence one: "ma \ mb" and fm: "f m = closed_int ma mb" by auto - from one alb sub fm int have "ma \ b" using closed_subset by blast - moreover have "(?g m) = ma" - proof - - from gdef have "?g m \ f m \ (\x\f m. ?g m \ x)" .. - moreover from one have - "ma \ closed_int ma mb \ (\x\closed_int ma mb. ma \ x)" - by (rule closed_int_least) - with fm have "ma\f m \ (\x\f m. ma \ x)" by simp - ultimately have "ma \ ?g m \ ?g m \ ma" by auto - thus "?g m = ma" by auto - qed - ultimately have "?g m \ b" by simp - } - ultimately have "?g m \ b" by (rule case_split) - } - with Adef show "\y. y \ A \ y \ b" by auto - qed fact - ultimately have "t \ closed_int a b" by (rule closed_mem) - with int show "t \ f n" by simp - qed - hence "t \ (\n. f n)" by auto - thus ?thesis by auto + finally show "f 0 \ (\i\I. f i) \ {}" + by auto + qed (subst f_eq, auto) + then show "(\n. f n) \ {}" + by auto qed subsection {* Generating the intervals *} @@ -309,14 +82,14 @@ lemma closed_subset_ex: fixes c::real assumes "a < b" - shows "\ka kb. ka < kb \ closed_int ka kb \ closed_int a b \ c \ closed_int ka kb" + shows "\ka kb. ka < kb \ {ka..kb} \ {a..b} \ c \ {ka..kb}" proof (cases "c < b") case True show ?thesis proof (cases "c < a") case True - with `a < b` `c < b` have "c \ closed_int a b" - unfolding closed_int_def by auto + with `a < b` `c < b` have "c \ {a..b}" + by auto with `a < b` show ?thesis by auto next case False @@ -325,11 +98,11 @@ from ka_def `c < b` have kalb: "ka < b" by auto moreover from ka_def `c < b` have kagc: "ka > c" by simp - ultimately have "c\(closed_int ka b)" by (unfold closed_int_def, auto) + ultimately have "c\{ka..b}" by auto moreover from `a \ c` kagc have "ka \ a" by simp - hence "closed_int ka b \ closed_int a b" by (unfold closed_int_def, auto) + hence "{ka..b} \ {a..b}" by auto ultimately have - "ka < b \ closed_int ka b \ closed_int a b \ c \ closed_int ka b" + "ka < b \ {ka..b} \ {a..b} \ c \ {ka..b}" using kalb by auto then show ?thesis by auto @@ -341,11 +114,11 @@ def kb \ "(a + b)/2" with `a < b` have "kb < b" by auto with kb_def `c \ b` have "a < kb" "kb < c" by auto - from `kb < c` have c: "c \ closed_int a kb" - unfolding closed_int_def by auto - with `kb < b` have "closed_int a kb \ closed_int a b" - unfolding closed_int_def by auto - with `a < kb` c have "a < kb \ closed_int a kb \ closed_int a b \ c \ closed_int a kb" + from `kb < c` have c: "c \ {a..kb}" + by auto + with `kb < b` have "{a..kb} \ {a..b}" + by auto + with `a < kb` c have "a < kb \ {a..kb} \ {a..b} \ c \ {a..kb}" by simp then show ?thesis by auto qed @@ -360,13 +133,13 @@ subsubsection {* Definition *} primrec newInt :: "nat \ (nat \ real) \ (real set)" where - "newInt 0 f = closed_int (f 0 + 1) (f 0 + 2)" + "newInt 0 f = {f 0 + 1..f 0 + 2}" | "newInt (Suc n) f = (SOME e. (\e1 e2. e1 < e2 \ - e = closed_int e1 e2 \ - e \ (newInt n f) \ - (f (Suc n)) \ e) + e = {e1..e2} \ + e \ newInt n f \ + f (Suc n) \ e) )" @@ -377,7 +150,7 @@ lemma newInt_ex: "\a b. a < b \ - newInt (Suc n) f = closed_int a b \ + newInt (Suc n) f = {a..b} \ newInt (Suc n) f \ newInt n f \ f (Suc n) \ newInt (Suc n) f" proof (induct n) @@ -385,68 +158,67 @@ let ?e = "SOME e. \e1 e2. e1 < e2 \ - e = closed_int e1 e2 \ - e \ closed_int (f 0 + 1) (f 0 + 2) \ + e = {e1..e2} \ + e \ {f 0 + 1..f 0 + 2} \ f (Suc 0) \ e" have "newInt (Suc 0) f = ?e" by auto moreover have "f 0 + 1 < f 0 + 2" by simp with closed_subset_ex have - "\ka kb. ka < kb \ closed_int ka kb \ closed_int (f 0 + 1) (f 0 + 2) \ - f (Suc 0) \ (closed_int ka kb)" . + "\ka kb. ka < kb \ {ka..kb} \ {f 0 + 1..f 0 + 2} \ + f (Suc 0) \ {ka..kb}" . hence - "\e. \ka kb. ka < kb \ e = closed_int ka kb \ - e \ closed_int (f 0 + 1) (f 0 + 2) \ f (Suc 0) \ e" by simp + "\e. \ka kb. ka < kb \ e = {ka..kb} \ + e \ {f 0 + 1..f 0 + 2} \ f (Suc 0) \ e" by simp hence - "\ka kb. ka < kb \ ?e = closed_int ka kb \ - ?e \ closed_int (f 0 + 1) (f 0 + 2) \ f (Suc 0) \ ?e" + "\ka kb. ka < kb \ ?e = {ka..kb} \ ?e \ {f 0 + 1..f 0 + 2} \ f (Suc 0) \ ?e" by (rule someI_ex) ultimately have "\e1 e2. e1 < e2 \ - newInt (Suc 0) f = closed_int e1 e2 \ - newInt (Suc 0) f \ closed_int (f 0 + 1) (f 0 + 2) \ + newInt (Suc 0) f = {e1..e2} \ + newInt (Suc 0) f \ {f 0 + 1..f 0 + 2} \ f (Suc 0) \ newInt (Suc 0) f" by simp thus - "\a b. a < b \ newInt (Suc 0) f = closed_int a b \ + "\a b. a < b \ newInt (Suc 0) f = {a..b} \ newInt (Suc 0) f \ newInt 0 f \ f (Suc 0) \ newInt (Suc 0) f" by simp next case (Suc n) hence "\a b. a < b \ - newInt (Suc n) f = closed_int a b \ + newInt (Suc n) f = {a..b} \ newInt (Suc n) f \ newInt n f \ f (Suc n) \ newInt (Suc n) f" by simp then obtain a and b where ab: "a < b \ - newInt (Suc n) f = closed_int a b \ + newInt (Suc n) f = {a..b} \ newInt (Suc n) f \ newInt n f \ f (Suc n) \ newInt (Suc n) f" by auto - hence cab: "closed_int a b = newInt (Suc n) f" by simp + hence cab: "{a..b} = newInt (Suc n) f" by simp let ?e = "SOME e. \e1 e2. e1 < e2 \ - e = closed_int e1 e2 \ - e \ closed_int a b \ + e = {e1..e2} \ + e \ {a..b} \ f (Suc (Suc n)) \ e" from cab have ni: "newInt (Suc (Suc n)) f = ?e" by auto from ab have "a < b" by simp with closed_subset_ex have - "\ka kb. ka < kb \ closed_int ka kb \ closed_int a b \ - f (Suc (Suc n)) \ closed_int ka kb" . + "\ka kb. ka < kb \ {ka..kb} \ {a..b} \ + f (Suc (Suc n)) \ {ka..kb}" . hence - "\e. \ka kb. ka < kb \ e = closed_int ka kb \ - closed_int ka kb \ closed_int a b \ f (Suc (Suc n)) \ closed_int ka kb" + "\e. \ka kb. ka < kb \ e = {ka..kb} \ + {ka..kb} \ {a..b} \ f (Suc (Suc n)) \ {ka..kb}" by simp hence - "\e. \ka kb. ka < kb \ e = closed_int ka kb \ - e \ closed_int a b \ f (Suc (Suc n)) \ e" by simp + "\e. \ka kb. ka < kb \ e = {ka..kb} \ + e \ {a..b} \ f (Suc (Suc n)) \ e" by simp hence - "\ka kb. ka < kb \ ?e = closed_int ka kb \ - ?e \ closed_int a b \ f (Suc (Suc n)) \ ?e" by (rule someI_ex) + "\ka kb. ka < kb \ ?e = {ka..kb} \ + ?e \ {a..b} \ f (Suc (Suc n)) \ ?e" by (rule someI_ex) with ab ni show "\ka kb. ka < kb \ - newInt (Suc (Suc n)) f = closed_int ka kb \ + newInt (Suc (Suc n)) f = {ka..kb} \ newInt (Suc (Suc n)) f \ newInt (Suc n) f \ f (Suc (Suc n)) \ newInt (Suc (Suc n)) f" by auto qed @@ -466,8 +238,8 @@ fix n::nat { assume n0: "n = 0" - moreover have "newInt 0 f = closed_int (f 0 + 1) (f 0 + 2)" by simp - ultimately have "f n \ newInt n f" by (unfold closed_int_def, simp) + moreover have "newInt 0 f = {f 0 + 1..f 0 + 2}" by simp + ultimately have "f n \ newInt n f" by simp } moreover { @@ -476,7 +248,7 @@ then obtain m where ndef: "n = Suc m" by (auto simp add: gr0_conv_Suc) from newInt_ex have - "\a b. a < b \ (newInt (Suc m) f) = closed_int a b \ + "\a b. a < b \ (newInt (Suc m) f) = {a..b} \ newInt (Suc m) f \ newInt m f \ f (Suc m) \ newInt (Suc m) f" . then have "f (Suc m) \ newInt (Suc m) f" by auto with ndef have "f n \ newInt n f" by simp @@ -495,15 +267,15 @@ fix n show "?g (Suc n) \ ?g n" by (rule newInt_subset) qed - moreover have "\n. \a b. ?g n = closed_int a b \ a \ b" + moreover have "\n. \a b. ?g n = {a..b} \ a \ b" proof fix n::nat { assume "n = 0" then have - "?g n = closed_int (f 0 + 1) (f 0 + 2) \ (f 0 + 1 \ f 0 + 2)" + "?g n = {f 0 + 1..f 0 + 2} \ (f 0 + 1 \ f 0 + 2)" by simp - hence "\a b. ?g n = closed_int a b \ a \ b" by blast + hence "\a b. ?g n = {a..b} \ a \ b" by blast } moreover { @@ -512,15 +284,15 @@ then obtain m where nd: "n = Suc m" by (auto simp add: gr0_conv_Suc) have - "\a b. a < b \ (newInt (Suc m) f) = closed_int a b \ + "\a b. a < b \ (newInt (Suc m) f) = {a..b} \ (newInt (Suc m) f) \ (newInt m f) \ (f (Suc m)) \ (newInt (Suc m) f)" by (rule newInt_ex) then obtain a and b where - "a < b \ (newInt (Suc m) f) = closed_int a b" by auto - with nd have "?g n = closed_int a b \ a \ b" by auto - hence "\a b. ?g n = closed_int a b \ a \ b" by blast + "a < b \ (newInt (Suc m) f) = {a..b}" by auto + with nd have "?g n = {a..b} \ a \ b" by auto + hence "\a b. ?g n = {a..b} \ a \ b" by blast } - ultimately show "\a b. ?g n = closed_int a b \ a \ b" by (rule case_split) + ultimately show "\a b. ?g n = {a..b} \ a \ b" by (rule case_split) qed ultimately show ?thesis by (rule NIP) qed @@ -542,3 +314,4 @@ qed end + diff -r cdc6d8cbf770 -r be020ec8560c src/HOL/Multivariate_Analysis/Topology_Euclidean_Space.thy --- a/src/HOL/Multivariate_Analysis/Topology_Euclidean_Space.thy Tue Dec 17 22:34:26 2013 +0100 +++ b/src/HOL/Multivariate_Analysis/Topology_Euclidean_Space.thy Wed Dec 18 11:53:40 2013 +0100 @@ -3031,43 +3031,6 @@ shows "open s \ open (s - {x})" by (simp add: open_Diff) -text{* Finite intersection property *} - -lemma inj_setminus: "inj_on uminus (A::'a set set)" - by (auto simp: inj_on_def) - -lemma compact_fip: - "compact U \ - (\A. (\a\A. closed a) \ (\B \ A. finite B \ U \ \B \ {}) \ U \ \A \ {})" - (is "_ \ ?R") -proof (safe intro!: compact_eq_heine_borel[THEN iffD2]) - fix A - assume "compact U" - and A: "\a\A. closed a" "U \ \A = {}" - and fi: "\B \ A. finite B \ U \ \B \ {}" - from A have "(\a\uminus`A. open a) \ U \ \(uminus`A)" - by auto - with `compact U` obtain B where "B \ A" "finite (uminus`B)" "U \ \(uminus`B)" - unfolding compact_eq_heine_borel by (metis subset_image_iff) - with fi[THEN spec, of B] show False - by (auto dest: finite_imageD intro: inj_setminus) -next - fix A - assume ?R - assume "\a\A. open a" "U \ \A" - then have "U \ \(uminus`A) = {}" "\a\uminus`A. closed a" - by auto - with `?R` obtain B where "B \ A" "finite (uminus`B)" "U \ \(uminus`B) = {}" - by (metis subset_image_iff) - then show "\T\A. finite T \ U \ \T" - by (auto intro!: exI[of _ B] inj_setminus dest: finite_imageD) -qed - -lemma compact_imp_fip: - "compact s \ \t \ f. closed t \ \f'. finite f' \ f' \ f \ (s \ (\ f') \ {}) \ - s \ (\ f) \ {}" - unfolding compact_fip by auto - text{*Compactness expressed with filters*} definition "filter_from_subbase B = Abs_filter (\P. \X \ B. finite X \ Inf X \ P)" diff -r cdc6d8cbf770 -r be020ec8560c src/HOL/Topological_Spaces.thy --- a/src/HOL/Topological_Spaces.thy Tue Dec 17 22:34:26 2013 +0100 +++ b/src/HOL/Topological_Spaces.thy Wed Dec 18 11:53:40 2013 +0100 @@ -1906,6 +1906,47 @@ by (intro exI[of _ "D - {-t}"]) auto qed +lemma inj_setminus: "inj_on uminus (A::'a set set)" + by (auto simp: inj_on_def) + +lemma compact_fip: + "compact U \ + (\A. (\a\A. closed a) \ (\B \ A. finite B \ U \ \B \ {}) \ U \ \A \ {})" + (is "_ \ ?R") +proof (safe intro!: compact_eq_heine_borel[THEN iffD2]) + fix A + assume "compact U" + and A: "\a\A. closed a" "U \ \A = {}" + and fi: "\B \ A. finite B \ U \ \B \ {}" + from A have "(\a\uminus`A. open a) \ U \ \(uminus`A)" + by auto + with `compact U` obtain B where "B \ A" "finite (uminus`B)" "U \ \(uminus`B)" + unfolding compact_eq_heine_borel by (metis subset_image_iff) + with fi[THEN spec, of B] show False + by (auto dest: finite_imageD intro: inj_setminus) +next + fix A + assume ?R + assume "\a\A. open a" "U \ \A" + then have "U \ \(uminus`A) = {}" "\a\uminus`A. closed a" + by auto + with `?R` obtain B where "B \ A" "finite (uminus`B)" "U \ \(uminus`B) = {}" + by (metis subset_image_iff) + then show "\T\A. finite T \ U \ \T" + by (auto intro!: exI[of _ B] inj_setminus dest: finite_imageD) +qed + +lemma compact_imp_fip: + "compact s \ \t \ f. closed t \ \f'. finite f' \ f' \ f \ (s \ (\ f') \ {}) \ + s \ (\ f) \ {}" + unfolding compact_fip by auto + +lemma compact_imp_fip_image: + "compact s \ (\i. i \ I \ closed (f i)) \ (\I'. finite I' \ I' \ I \ (s \ (\i\I'. f i) \ {})) \ + s \ (\i\I. f i) \ {}" + using finite_subset_image[of _ f I] compact_imp_fip[of s "f`I"] unfolding ball_simps[symmetric] INF_def + by (metis image_iff) + end lemma (in t2_space) compact_imp_closed: