122 (force intro!: emeasure_mono simp: compact_imp_closed emeasure_eq_measure)+ |
122 (force intro!: emeasure_mono simp: compact_imp_closed emeasure_eq_measure)+ |
123 have approx_outer: "\<And>A. A \<in> sets M \<Longrightarrow> |
123 have approx_outer: "\<And>A. A \<in> sets M \<Longrightarrow> |
124 (\<And>e. e > 0 \<Longrightarrow> \<exists>B. A \<subseteq> B \<and> open B \<and> emeasure M B \<le> emeasure M A + ereal e) \<Longrightarrow> ?outer A" |
124 (\<And>e. e > 0 \<Longrightarrow> \<exists>B. A \<subseteq> B \<and> open B \<and> emeasure M B \<le> emeasure M A + ereal e) \<Longrightarrow> ?outer A" |
125 by (rule ereal_approx_INF) |
125 by (rule ereal_approx_INF) |
126 (force intro!: emeasure_mono simp: emeasure_eq_measure sb)+ |
126 (force intro!: emeasure_mono simp: emeasure_eq_measure sb)+ |
127 from countable_dense_setE guess x::"nat \<Rightarrow> 'a" . note x = this |
127 from countable_dense_setE guess X::"'a set" . note X = this |
128 { |
128 { |
129 fix r::real assume "r > 0" hence "\<And>y. open (ball y r)" "\<And>y. ball y r \<noteq> {}" by auto |
129 fix r::real assume "r > 0" hence "\<And>y. open (ball y r)" "\<And>y. ball y r \<noteq> {}" by auto |
130 with x[OF this] |
130 with X(2)[OF this] |
131 have x: "space M = (\<Union>n. cball (x n) r)" |
131 have x: "space M = (\<Union>x\<in>X. cball x r)" |
132 by (auto simp add: sU) (metis dist_commute order_less_imp_le) |
132 by (auto simp add: sU) (metis dist_commute order_less_imp_le) |
133 have "(\<lambda>k. emeasure M (\<Union>n\<in>{0..k}. cball (x n) r)) ----> M (\<Union>k. (\<Union>n\<in>{0..k}. cball (x n) r))" |
133 let ?U = "\<Union>k. (\<Union>n\<in>{0..k}. cball (from_nat_into X n) r)" |
|
134 have "(\<lambda>k. emeasure M (\<Union>n\<in>{0..k}. cball (from_nat_into X n) r)) ----> M ?U" |
134 by (rule Lim_emeasure_incseq) |
135 by (rule Lim_emeasure_incseq) |
135 (auto intro!: borel_closed bexI simp: closed_cball incseq_def Us sb) |
136 (auto intro!: borel_closed bexI simp: closed_cball incseq_def Us sb) |
136 also have "(\<Union>k. (\<Union>n\<in>{0..k}. cball (x n) r)) = space M" |
137 also have "?U = space M" |
137 unfolding x by force |
138 proof safe |
138 finally have "(\<lambda>k. M (\<Union>n\<in>{0..k}. cball (x n) r)) ----> M (space M)" . |
139 fix x from X(2)[OF open_ball[of x r]] `r > 0` obtain d where d: "d\<in>X" "d \<in> ball x r" by auto |
|
140 show "x \<in> ?U" |
|
141 using X(1) d by (auto intro!: exI[where x="to_nat_on X d"] simp: dist_commute Bex_def) |
|
142 qed (simp add: sU) |
|
143 finally have "(\<lambda>k. M (\<Union>n\<in>{0..k}. cball (from_nat_into X n) r)) ----> M (space M)" . |
139 } note M_space = this |
144 } note M_space = this |
140 { |
145 { |
141 fix e ::real and n :: nat assume "e > 0" "n > 0" |
146 fix e ::real and n :: nat assume "e > 0" "n > 0" |
142 hence "1/n > 0" "e * 2 powr - n > 0" by (auto intro: mult_pos_pos) |
147 hence "1/n > 0" "e * 2 powr - n > 0" by (auto intro: mult_pos_pos) |
143 from M_space[OF `1/n>0`] |
148 from M_space[OF `1/n>0`] |
144 have "(\<lambda>k. measure M (\<Union>i\<in>{0..k}. cball (x i) (1/real n))) ----> measure M (space M)" |
149 have "(\<lambda>k. measure M (\<Union>i\<in>{0..k}. cball (from_nat_into X i) (1/real n))) ----> measure M (space M)" |
145 unfolding emeasure_eq_measure by simp |
150 unfolding emeasure_eq_measure by simp |
146 from metric_LIMSEQ_D[OF this `0 < e * 2 powr -n`] |
151 from metric_LIMSEQ_D[OF this `0 < e * 2 powr -n`] |
147 obtain k where "dist (measure M (\<Union>i\<in>{0..k}. cball (x i) (1/real n))) (measure M (space M)) < |
152 obtain k where "dist (measure M (\<Union>i\<in>{0..k}. cball (from_nat_into X i) (1/real n))) (measure M (space M)) < |
148 e * 2 powr -n" |
153 e * 2 powr -n" |
149 by auto |
154 by auto |
150 hence "measure M (\<Union>i\<in>{0..k}. cball (x i) (1/real n)) \<ge> |
155 hence "measure M (\<Union>i\<in>{0..k}. cball (from_nat_into X i) (1/real n)) \<ge> |
151 measure M (space M) - e * 2 powr -real n" |
156 measure M (space M) - e * 2 powr -real n" |
152 by (auto simp: dist_real_def) |
157 by (auto simp: dist_real_def) |
153 hence "\<exists>k. measure M (\<Union>i\<in>{0..k}. cball (x i) (1/real n)) \<ge> |
158 hence "\<exists>k. measure M (\<Union>i\<in>{0..k}. cball (from_nat_into X i) (1/real n)) \<ge> |
154 measure M (space M) - e * 2 powr - real n" .. |
159 measure M (space M) - e * 2 powr - real n" .. |
155 } note k=this |
160 } note k=this |
156 hence "\<forall>e\<in>{0<..}. \<forall>(n::nat)\<in>{0<..}. \<exists>k. |
161 hence "\<forall>e\<in>{0<..}. \<forall>(n::nat)\<in>{0<..}. \<exists>k. |
157 measure M (\<Union>i\<in>{0..k}. cball (x i) (1/real n)) \<ge> measure M (space M) - e * 2 powr - real n" |
162 measure M (\<Union>i\<in>{0..k}. cball (from_nat_into X i) (1/real n)) \<ge> measure M (space M) - e * 2 powr - real n" |
158 by blast |
163 by blast |
159 then obtain k where k: "\<forall>e\<in>{0<..}. \<forall>n\<in>{0<..}. measure M (space M) - e * 2 powr - real (n::nat) |
164 then obtain k where k: "\<forall>e\<in>{0<..}. \<forall>n\<in>{0<..}. measure M (space M) - e * 2 powr - real (n::nat) |
160 \<le> measure M (\<Union>i\<in>{0..k e n}. cball (x i) (1 / n))" |
165 \<le> measure M (\<Union>i\<in>{0..k e n}. cball (from_nat_into X i) (1 / n))" |
161 apply atomize_elim unfolding bchoice_iff . |
166 apply atomize_elim unfolding bchoice_iff . |
162 hence k: "\<And>e n. e > 0 \<Longrightarrow> n > 0 \<Longrightarrow> measure M (space M) - e * 2 powr - n |
167 hence k: "\<And>e n. e > 0 \<Longrightarrow> n > 0 \<Longrightarrow> measure M (space M) - e * 2 powr - n |
163 \<le> measure M (\<Union>i\<in>{0..k e n}. cball (x i) (1 / n))" |
168 \<le> measure M (\<Union>i\<in>{0..k e n}. cball (from_nat_into X i) (1 / n))" |
164 unfolding Ball_def by blast |
169 unfolding Ball_def by blast |
165 have approx_space: |
170 have approx_space: |
166 "\<And>e. e > 0 \<Longrightarrow> |
171 "\<And>e. e > 0 \<Longrightarrow> |
167 \<exists>K \<in> {K. K \<subseteq> space M \<and> compact K}. emeasure M (space M) \<le> emeasure M K + ereal e" |
172 \<exists>K \<in> {K. K \<subseteq> space M \<and> compact K}. emeasure M (space M) \<le> emeasure M K + ereal e" |
168 (is "\<And>e. _ \<Longrightarrow> ?thesis e") |
173 (is "\<And>e. _ \<Longrightarrow> ?thesis e") |
169 proof - |
174 proof - |
170 fix e :: real assume "e > 0" |
175 fix e :: real assume "e > 0" |
171 def B \<equiv> "\<lambda>n. \<Union>i\<in>{0..k e (Suc n)}. cball (x i) (1 / Suc n)" |
176 def B \<equiv> "\<lambda>n. \<Union>i\<in>{0..k e (Suc n)}. cball (from_nat_into X i) (1 / Suc n)" |
172 have "\<And>n. closed (B n)" by (auto simp: B_def closed_cball) |
177 have "\<And>n. closed (B n)" by (auto simp: B_def closed_cball) |
173 hence [simp]: "\<And>n. B n \<in> sets M" by (simp add: sb) |
178 hence [simp]: "\<And>n. B n \<in> sets M" by (simp add: sb) |
174 from k[OF `e > 0` zero_less_Suc] |
179 from k[OF `e > 0` zero_less_Suc] |
175 have "\<And>n. measure M (space M) - measure M (B n) \<le> e * 2 powr - real (Suc n)" |
180 have "\<And>n. measure M (space M) - measure M (B n) \<le> e * 2 powr - real (Suc n)" |
176 by (simp add: algebra_simps B_def finite_measure_compl) |
181 by (simp add: algebra_simps B_def finite_measure_compl) |