src/HOL/Probability/Borel_Space.thy
changeset 50244 de72bbe42190
parent 50104 de19856feb54
child 50245 dea9363887a6
equal deleted inserted replaced
50243:0d97ef1d6de9 50244:de72bbe42190
    51   thus ?thesis by simp
    51   thus ?thesis by simp
    52 qed
    52 qed
    53 
    53 
    54 lemma borel_singleton[measurable]:
    54 lemma borel_singleton[measurable]:
    55   "A \<in> sets borel \<Longrightarrow> insert x A \<in> sets (borel :: 'a::t1_space measure)"
    55   "A \<in> sets borel \<Longrightarrow> insert x A \<in> sets (borel :: 'a::t1_space measure)"
    56   unfolding insert_def by (rule Un) auto
    56   unfolding insert_def by (rule sets.Un) auto
    57 
    57 
    58 lemma borel_comp[measurable]: "A \<in> sets borel \<Longrightarrow> - A \<in> sets borel"
    58 lemma borel_comp[measurable]: "A \<in> sets borel \<Longrightarrow> - A \<in> sets borel"
    59   unfolding Compl_eq_Diff_UNIV by simp
    59   unfolding Compl_eq_Diff_UNIV by simp
    60 
    60 
    61 lemma borel_measurable_vimage:
    61 lemma borel_measurable_vimage:
   178 
   178 
   179 subsection "Borel space equals sigma algebras over intervals"
   179 subsection "Borel space equals sigma algebras over intervals"
   180 
   180 
   181 lemma borel_sigma_sets_subset:
   181 lemma borel_sigma_sets_subset:
   182   "A \<subseteq> sets borel \<Longrightarrow> sigma_sets UNIV A \<subseteq> sets borel"
   182   "A \<subseteq> sets borel \<Longrightarrow> sigma_sets UNIV A \<subseteq> sets borel"
   183   using sigma_sets_subset[of A borel] by simp
   183   using sets.sigma_sets_subset[of A borel] by simp
   184 
   184 
   185 lemma borel_eq_sigmaI1:
   185 lemma borel_eq_sigmaI1:
   186   fixes F :: "'i \<Rightarrow> 'a::topological_space set" and X :: "'a::topological_space set set"
   186   fixes F :: "'i \<Rightarrow> 'a::topological_space set" and X :: "'a::topological_space set set"
   187   assumes borel_eq: "borel = sigma UNIV X"
   187   assumes borel_eq: "borel = sigma UNIV X"
   188   assumes X: "\<And>x. x \<in> X \<Longrightarrow> x \<in> sets (sigma UNIV (range F))"
   188   assumes X: "\<And>x. x \<in> X \<Longrightarrow> x \<in> sets (sigma UNIV (range F))"
   274     unfolding eucl_greaterThan_eq_halfspaces[where 'a='a]
   274     unfolding eucl_greaterThan_eq_halfspaces[where 'a='a]
   275     unfolding eucl_lessThan_eq_halfspaces[where 'a='a]
   275     unfolding eucl_lessThan_eq_halfspaces[where 'a='a]
   276     by blast
   276     by blast
   277   show "S \<in> ?SIGMA"
   277   show "S \<in> ?SIGMA"
   278     unfolding *
   278     unfolding *
   279     by (safe intro!: countable_UN Int countable_INT) (auto intro!: halfspace_gt_in_halfspace)
   279     by (safe intro!: sets.countable_UN sets.Int sets.countable_INT)
       
   280       (auto intro!: halfspace_gt_in_halfspace)
   280 qed auto
   281 qed auto
   281 
   282 
   282 lemma borel_eq_halfspace_le:
   283 lemma borel_eq_halfspace_le:
   283   "borel = sigma UNIV (range (\<lambda> (a, i). {x::'a::ordered_euclidean_space. x $$ i \<le> a}))"
   284   "borel = sigma UNIV (range (\<lambda> (a, i). {x::'a::ordered_euclidean_space. x $$ i \<le> a}))"
   284   (is "_ = ?SIGMA")
   285   (is "_ = ?SIGMA")
   297     assume "x$$i \<le> a - 1 / real (Suc n)"
   298     assume "x$$i \<le> a - 1 / real (Suc n)"
   298     also have "\<dots> < a" by auto
   299     also have "\<dots> < a" by auto
   299     finally show "x$$i < a" .
   300     finally show "x$$i < a" .
   300   qed
   301   qed
   301   show "{x. x$$i < a} \<in> ?SIGMA" unfolding *
   302   show "{x. x$$i < a} \<in> ?SIGMA" unfolding *
   302     by (safe intro!: countable_UN) auto
   303     by (safe intro!: sets.countable_UN) auto
   303 qed auto
   304 qed auto
   304 
   305 
   305 lemma borel_eq_halfspace_ge:
   306 lemma borel_eq_halfspace_ge:
   306   "borel = sigma UNIV (range (\<lambda> (a, i). {x\<Colon>'a\<Colon>ordered_euclidean_space. a \<le> x $$ i}))"
   307   "borel = sigma UNIV (range (\<lambda> (a, i). {x\<Colon>'a\<Colon>ordered_euclidean_space. a \<le> x $$ i}))"
   307   (is "_ = ?SIGMA")
   308   (is "_ = ?SIGMA")
   308 proof (rule borel_eq_sigmaI2[OF borel_eq_halfspace_less])
   309 proof (rule borel_eq_sigmaI2[OF borel_eq_halfspace_less])
   309   fix a i have *: "{x::'a. x$$i < a} = space ?SIGMA - {x::'a. a \<le> x$$i}" by auto
   310   fix a i have *: "{x::'a. x$$i < a} = space ?SIGMA - {x::'a. a \<le> x$$i}" by auto
   310   show "{x. x$$i < a} \<in> ?SIGMA" unfolding *
   311   show "{x. x$$i < a} \<in> ?SIGMA" unfolding *
   311       by (safe intro!: compl_sets) auto
   312       by (safe intro!: sets.compl_sets) auto
   312 qed auto
   313 qed auto
   313 
   314 
   314 lemma borel_eq_halfspace_greater:
   315 lemma borel_eq_halfspace_greater:
   315   "borel = sigma UNIV (range (\<lambda> (a, i). {x\<Colon>'a\<Colon>ordered_euclidean_space. a < x $$ i}))"
   316   "borel = sigma UNIV (range (\<lambda> (a, i). {x\<Colon>'a\<Colon>ordered_euclidean_space. a < x $$ i}))"
   316   (is "_ = ?SIGMA")
   317   (is "_ = ?SIGMA")
   317 proof (rule borel_eq_sigmaI2[OF borel_eq_halfspace_le])
   318 proof (rule borel_eq_sigmaI2[OF borel_eq_halfspace_le])
   318   fix a i have *: "{x::'a. x$$i \<le> a} = space ?SIGMA - {x::'a. a < x$$i}" by auto
   319   fix a i have *: "{x::'a. x$$i \<le> a} = space ?SIGMA - {x::'a. a < x$$i}" by auto
   319   show "{x. x$$i \<le> a} \<in> ?SIGMA" unfolding *
   320   show "{x. x$$i \<le> a} \<in> ?SIGMA" unfolding *
   320     by (safe intro!: compl_sets) auto
   321     by (safe intro!: sets.compl_sets) auto
   321 qed auto
   322 qed auto
   322 
   323 
   323 lemma borel_eq_atMost:
   324 lemma borel_eq_atMost:
   324   "borel = sigma UNIV (range (\<lambda>a. {..a\<Colon>'a\<Colon>ordered_euclidean_space}))"
   325   "borel = sigma UNIV (range (\<lambda>a. {..a\<Colon>'a\<Colon>ordered_euclidean_space}))"
   325   (is "_ = ?SIGMA")
   326   (is "_ = ?SIGMA")
   335         by (subst (asm) Max_le_iff) auto
   336         by (subst (asm) Max_le_iff) auto
   336       then show "\<exists>k::nat. \<forall>ia. ia \<noteq> i \<longrightarrow> ia < DIM('a) \<longrightarrow> x $$ ia \<le> real k"
   337       then show "\<exists>k::nat. \<forall>ia. ia \<noteq> i \<longrightarrow> ia < DIM('a) \<longrightarrow> x $$ ia \<le> real k"
   337         by (auto intro!: exI[of _ k])
   338         by (auto intro!: exI[of _ k])
   338     qed
   339     qed
   339     show "{x. x$$i \<le> a} \<in> ?SIGMA" unfolding *
   340     show "{x. x$$i \<le> a} \<in> ?SIGMA" unfolding *
   340       by (safe intro!: countable_UN) auto
   341       by (safe intro!: sets.countable_UN) auto
   341   qed (auto intro: sigma_sets_top sigma_sets.Empty)
   342   qed (auto intro: sigma_sets_top sigma_sets.Empty)
   342 qed auto
   343 qed auto
   343 
   344 
   344 lemma borel_eq_greaterThan:
   345 lemma borel_eq_greaterThan:
   345   "borel = sigma UNIV (range (\<lambda>a\<Colon>'a\<Colon>ordered_euclidean_space. {a<..}))"
   346   "borel = sigma UNIV (range (\<lambda>a\<Colon>'a\<Colon>ordered_euclidean_space. {a<..}))"
   361       then show "\<exists>k::nat. \<forall>ia. ia \<noteq> i \<longrightarrow> ia < DIM('a) \<longrightarrow> -real k < x $$ ia"
   362       then show "\<exists>k::nat. \<forall>ia. ia \<noteq> i \<longrightarrow> ia < DIM('a) \<longrightarrow> -real k < x $$ ia"
   362         by (auto intro!: exI[of _ k])
   363         by (auto intro!: exI[of _ k])
   363     qed
   364     qed
   364     finally show "{x. x$$i \<le> a} \<in> ?SIGMA"
   365     finally show "{x. x$$i \<le> a} \<in> ?SIGMA"
   365       apply (simp only:)
   366       apply (simp only:)
   366       apply (safe intro!: countable_UN Diff)
   367       apply (safe intro!: sets.countable_UN sets.Diff)
   367       apply (auto intro: sigma_sets_top)
   368       apply (auto intro: sigma_sets_top)
   368       done
   369       done
   369   qed (auto intro: sigma_sets_top sigma_sets.Empty)
   370   qed (auto intro: sigma_sets_top sigma_sets.Empty)
   370 qed auto
   371 qed auto
   371 
   372 
   389       then show "\<exists>k::nat. \<forall>ia. ia \<noteq> i \<longrightarrow> ia < DIM('a) \<longrightarrow> x $$ ia < real k"
   390       then show "\<exists>k::nat. \<forall>ia. ia \<noteq> i \<longrightarrow> ia < DIM('a) \<longrightarrow> x $$ ia < real k"
   390         by (auto intro!: exI[of _ k])
   391         by (auto intro!: exI[of _ k])
   391     qed
   392     qed
   392     finally show "{x. a \<le> x$$i} \<in> ?SIGMA"
   393     finally show "{x. a \<le> x$$i} \<in> ?SIGMA"
   393       apply (simp only:)
   394       apply (simp only:)
   394       apply (safe intro!: countable_UN Diff)
   395       apply (safe intro!: sets.countable_UN sets.Diff)
   395       apply (auto intro: sigma_sets_top)
   396       apply (auto intro: sigma_sets_top)
   396       done
   397       done
   397   qed (auto intro: sigma_sets_top sigma_sets.Empty)
   398   qed (auto intro: sigma_sets_top sigma_sets.Empty)
   398 qed auto
   399 qed auto
   399 
   400 
   413       then have "- real k \<le> x$$i" by simp }
   414       then have "- real k \<le> x$$i" by simp }
   414     then show "\<exists>n::nat. \<forall>i<DIM('a). - real n \<le> x $$ i"
   415     then show "\<exists>n::nat. \<forall>i<DIM('a). - real n \<le> x $$ i"
   415       by (auto intro!: exI[of _ k])
   416       by (auto intro!: exI[of _ k])
   416   qed
   417   qed
   417   show "{..a} \<in> ?SIGMA" unfolding *
   418   show "{..a} \<in> ?SIGMA" unfolding *
   418     by (safe intro!: countable_UN)
   419     by (safe intro!: sets.countable_UN)
   419        (auto intro!: sigma_sets_top)
   420        (auto intro!: sigma_sets_top)
   420 qed auto
   421 qed auto
   421 
   422 
   422 lemma borel_eq_greaterThanLessThan:
   423 lemma borel_eq_greaterThanLessThan:
   423   "borel = sigma UNIV (range (\<lambda> (a, b). {a <..< b} :: 'a \<Colon> ordered_euclidean_space set))"
   424   "borel = sigma UNIV (range (\<lambda> (a, b). {a <..< b} :: 'a \<Colon> ordered_euclidean_space set))"
   425 proof (rule borel_eq_sigmaI1[OF borel_def])
   426 proof (rule borel_eq_sigmaI1[OF borel_def])
   426   fix M :: "'a set" assume "M \<in> {S. open S}"
   427   fix M :: "'a set" assume "M \<in> {S. open S}"
   427   then have "open M" by simp
   428   then have "open M" by simp
   428   show "M \<in> ?SIGMA"
   429   show "M \<in> ?SIGMA"
   429     apply (subst open_UNION[OF `open M`])
   430     apply (subst open_UNION[OF `open M`])
   430     apply (safe intro!: countable_UN)
   431     apply (safe intro!: sets.countable_UN)
   431     apply auto
   432     apply auto
   432     done
   433     done
   433 qed auto
   434 qed auto
   434 
   435 
   435 lemma borel_eq_atLeastLessThan:
   436 lemma borel_eq_atLeastLessThan: