src/HOL/Probability/Regularity.thy
changeset 50245 dea9363887a6
parent 50244 de72bbe42190
child 50530 6266e44b3396
equal deleted inserted replaced
50244:de72bbe42190 50245:dea9363887a6
   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 
   106 lemma
   106 lemma
   107   fixes M::"'a::{enumerable_basis, complete_space} measure"
   107   fixes M::"'a::{countable_basis_space, complete_space} measure"
   108   assumes sb: "sets M = sets borel"
   108   assumes sb: "sets M = sets borel"
   109   assumes "emeasure M (space M) \<noteq> \<infinity>"
   109   assumes "emeasure M (space M) \<noteq> \<infinity>"
   110   assumes "B \<in> sets borel"
   110   assumes "B \<in> sets borel"
   111   shows inner_regular: "emeasure M B =
   111   shows inner_regular: "emeasure M B =
   112     (SUP K : {K. K \<subseteq> B \<and> compact K}. emeasure M K)" (is "?inner B")
   112     (SUP K : {K. K \<subseteq> B \<and> compact K}. emeasure M K)" (is "?inner B")
   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)
   200       unfolding compact_eq_totally_bounded
   205       unfolding compact_eq_totally_bounded
   201     proof safe
   206     proof safe
   202       show "complete K" using `closed K` by (simp add: complete_eq_closed)
   207       show "complete K" using `closed K` by (simp add: complete_eq_closed)
   203       fix e'::real assume "0 < e'"
   208       fix e'::real assume "0 < e'"
   204       from nat_approx_posE[OF this] guess n . note n = this
   209       from nat_approx_posE[OF this] guess n . note n = this
   205       let ?k = "x ` {0..k e (Suc n)}"
   210       let ?k = "from_nat_into X ` {0..k e (Suc n)}"
   206       have "finite ?k" by simp
   211       have "finite ?k" by simp
   207       moreover have "K \<subseteq> \<Union>(\<lambda>x. ball x e') ` ?k" unfolding K_def B_def using n by force
   212       moreover have "K \<subseteq> \<Union>(\<lambda>x. ball x e') ` ?k" unfolding K_def B_def using n by force
   208       ultimately show "\<exists>k. finite k \<and> K \<subseteq> \<Union>(\<lambda>x. ball x e') ` k" by blast
   213       ultimately show "\<exists>k. finite k \<and> K \<subseteq> \<Union>(\<lambda>x. ball x e') ` k" by blast
   209     qed
   214     qed
   210     ultimately
   215     ultimately