14 assumes f_bound: "\<And>i. i \<in> A \<Longrightarrow> f i \<le> x" |
14 assumes f_bound: "\<And>i. i \<in> A \<Longrightarrow> f i \<le> x" |
15 assumes f_fin: "\<And>i. i \<in> A \<Longrightarrow> f i \<noteq> \<infinity>" |
15 assumes f_fin: "\<And>i. i \<in> A \<Longrightarrow> f i \<noteq> \<infinity>" |
16 assumes f_nonneg: "\<And>i. 0 \<le> f i" |
16 assumes f_nonneg: "\<And>i. 0 \<le> f i" |
17 assumes approx: "\<And>e. (e::real) > 0 \<Longrightarrow> \<exists>i \<in> A. x \<le> f i + e" |
17 assumes approx: "\<And>e. (e::real) > 0 \<Longrightarrow> \<exists>i \<in> A. x \<le> f i + e" |
18 shows "x = (SUP i : A. f i)" |
18 shows "x = (SUP i : A. f i)" |
19 proof (subst eq_commute, rule ereal_SUPI) |
19 proof (subst eq_commute, rule SUP_eqI) |
20 show "\<And>i. i \<in> A \<Longrightarrow> f i \<le> x" using f_bound by simp |
20 show "\<And>i. i \<in> A \<Longrightarrow> f i \<le> x" using f_bound by simp |
21 next |
21 next |
22 fix y :: ereal assume f_le_y: "(\<And>i::'a. i \<in> A \<Longrightarrow> f i \<le> y)" |
22 fix y :: ereal assume f_le_y: "(\<And>i::'a. i \<in> A \<Longrightarrow> f i \<le> y)" |
23 with A_notempty f_nonneg have "y \<ge> 0" by auto (metis order_trans) |
23 with A_notempty f_nonneg have "y \<ge> 0" by auto (metis order_trans) |
24 show "x \<le> y" |
24 show "x \<le> y" |
43 assumes f_bound: "\<And>i. i \<in> A \<Longrightarrow> x \<le> f i" |
43 assumes f_bound: "\<And>i. i \<in> A \<Longrightarrow> x \<le> f i" |
44 assumes f_fin: "\<And>i. i \<in> A \<Longrightarrow> f i \<noteq> \<infinity>" |
44 assumes f_fin: "\<And>i. i \<in> A \<Longrightarrow> f i \<noteq> \<infinity>" |
45 assumes f_nonneg: "\<And>i. 0 \<le> f i" |
45 assumes f_nonneg: "\<And>i. 0 \<le> f i" |
46 assumes approx: "\<And>e. (e::real) > 0 \<Longrightarrow> \<exists>i \<in> A. f i \<le> x + e" |
46 assumes approx: "\<And>e. (e::real) > 0 \<Longrightarrow> \<exists>i \<in> A. f i \<le> x + e" |
47 shows "x = (INF i : A. f i)" |
47 shows "x = (INF i : A. f i)" |
48 proof (subst eq_commute, rule ereal_INFI) |
48 proof (subst eq_commute, rule INF_eqI) |
49 show "\<And>i. i \<in> A \<Longrightarrow> x \<le> f i" using f_bound by simp |
49 show "\<And>i. i \<in> A \<Longrightarrow> x \<le> f i" using f_bound by simp |
50 next |
50 next |
51 fix y :: ereal assume f_le_y: "(\<And>i::'a. i \<in> A \<Longrightarrow> y \<le> f i)" |
51 fix y :: ereal assume f_le_y: "(\<And>i::'a. i \<in> A \<Longrightarrow> y \<le> f i)" |
52 with A_notempty f_fin have "y \<noteq> \<infinity>" by force |
52 with A_notempty f_fin have "y \<noteq> \<infinity>" by force |
53 show "y \<le> x" |
53 show "y \<le> x" |
77 assume "\<forall>i\<in>A. \<not> f i < x + e" |
77 assume "\<forall>i\<in>A. \<not> f i < x + e" |
78 moreover |
78 moreover |
79 from INF have "\<And>y. (\<And>i. i \<in> A \<Longrightarrow> y \<le> f i) \<Longrightarrow> y \<le> x" by (auto intro: INF_greatest) |
79 from INF have "\<And>y. (\<And>i. i \<in> A \<Longrightarrow> y \<le> f i) \<Longrightarrow> y \<le> x" by (auto intro: INF_greatest) |
80 ultimately |
80 ultimately |
81 have "(INF i : A. f i) = x + e" using `e > 0` |
81 have "(INF i : A. f i) = x + e" using `e > 0` |
82 by (intro ereal_INFI) |
82 by (intro INF_eqI) |
83 (force, metis add.comm_neutral add_left_mono ereal_less(1) |
83 (force, metis add.comm_neutral add_left_mono ereal_less(1) |
84 linorder_not_le not_less_iff_gr_or_eq) |
84 linorder_not_le not_less_iff_gr_or_eq) |
85 thus False using assms by auto |
85 thus False using assms by auto |
86 qed |
86 qed |
87 |
87 |
95 assume "\<forall>i\<in>A. \<not> x \<le> f i + e" |
95 assume "\<forall>i\<in>A. \<not> x \<le> f i + e" |
96 moreover |
96 moreover |
97 from SUP have "\<And>y. (\<And>i. i \<in> A \<Longrightarrow> f i \<le> y) \<Longrightarrow> y \<ge> x" by (auto intro: SUP_least) |
97 from SUP have "\<And>y. (\<And>i. i \<in> A \<Longrightarrow> f i \<le> y) \<Longrightarrow> y \<ge> x" by (auto intro: SUP_least) |
98 ultimately |
98 ultimately |
99 have "(SUP i : A. f i) = x - e" using `e > 0` `\<bar>x\<bar> \<noteq> \<infinity>` |
99 have "(SUP i : A. f i) = x - e" using `e > 0` `\<bar>x\<bar> \<noteq> \<infinity>` |
100 by (intro ereal_SUPI) |
100 by (intro SUP_eqI) |
101 (metis PInfty_neq_ereal(2) abs_ereal.simps(1) ereal_minus_le linorder_linear, |
101 (metis PInfty_neq_ereal(2) abs_ereal.simps(1) ereal_minus_le linorder_linear, |
102 metis ereal_between(1) ereal_less(2) less_eq_ereal_def order_trans) |
102 metis ereal_between(1) ereal_less(2) less_eq_ereal_def order_trans) |
103 thus False using assms by auto |
103 thus False using assms by auto |
104 qed |
104 qed |
105 |
105 |
288 qed |
288 qed |
289 moreover |
289 moreover |
290 have "emeasure M A \<le> (INF U:{U. A \<subseteq> U \<and> open U}. emeasure M U)" |
290 have "emeasure M A \<le> (INF U:{U. A \<subseteq> U \<and> open U}. emeasure M U)" |
291 by (rule INF_greatest) (auto intro!: emeasure_mono simp: sb) |
291 by (rule INF_greatest) (auto intro!: emeasure_mono simp: sb) |
292 ultimately show ?thesis by simp |
292 ultimately show ?thesis by simp |
293 qed (auto intro!: ereal_INFI) |
293 qed (auto intro!: INF_eqI) |
294 note `?inner A` `?outer A` } |
294 note `?inner A` `?outer A` } |
295 note closed_in_D = this |
295 note closed_in_D = this |
296 from `B \<in> sets borel` |
296 from `B \<in> sets borel` |
297 have "Int_stable (Collect closed)" "Collect closed \<subseteq> Pow UNIV" "B \<in> sigma_sets UNIV (Collect closed)" |
297 have "Int_stable (Collect closed)" "Collect closed \<subseteq> Pow UNIV" "B \<in> sigma_sets UNIV (Collect closed)" |
298 by (auto simp: Int_stable_def borel_eq_closed) |
298 by (auto simp: Int_stable_def borel_eq_closed) |
299 then show "?inner B" "?outer B" |
299 then show "?inner B" "?outer B" |
300 proof (induct B rule: sigma_sets_induct_disjoint) |
300 proof (induct B rule: sigma_sets_induct_disjoint) |
301 case empty |
301 case empty |
302 { case 1 show ?case by (intro ereal_SUPI[symmetric]) auto } |
302 { case 1 show ?case by (intro SUP_eqI[symmetric]) auto } |
303 { case 2 show ?case by (intro ereal_INFI[symmetric]) (auto elim!: meta_allE[of _ "{}"]) } |
303 { case 2 show ?case by (intro INF_eqI[symmetric]) (auto elim!: meta_allE[of _ "{}"]) } |
304 next |
304 next |
305 case (basic B) |
305 case (basic B) |
306 { case 1 from basic closed_in_D show ?case by auto } |
306 { case 1 from basic closed_in_D show ?case by auto } |
307 { case 2 from basic closed_in_D show ?case by auto } |
307 { case 2 from basic closed_in_D show ?case by auto } |
308 next |
308 next |