src/HOL/Analysis/Borel_Space.thy
author nipkow
Wed, 10 Jan 2018 15:25:09 +0100
changeset 67399 eab6ce8368fa
parent 67278 c60e3d615b8c
child 67685 bdff8bf0a75b
permissions -rw-r--r--
ran isabelle update_op on all sources
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
63627
6ddb43c6b711 rename HOL-Multivariate_Analysis to HOL-Analysis.
hoelzl
parents: 63626
diff changeset
     1
(*  Title:      HOL/Analysis/Borel_Space.thy
42067
66c8281349ec standardized headers
hoelzl
parents: 41981
diff changeset
     2
    Author:     Johannes Hölzl, TU München
66c8281349ec standardized headers
hoelzl
parents: 41981
diff changeset
     3
    Author:     Armin Heller, TU München
66c8281349ec standardized headers
hoelzl
parents: 41981
diff changeset
     4
*)
38656
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
     5
61808
fc1556774cfe isabelle update_cartouches -c -t;
wenzelm
parents: 61609
diff changeset
     6
section \<open>Borel spaces\<close>
33533
40b44cb20c8c New theory Probability/Borel.thy, and some associated lemmas
paulson
parents:
diff changeset
     7
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents: 39302
diff changeset
     8
theory Borel_Space
50387
3d8863c41fe8 Move the measurability prover to its own file
hoelzl
parents: 50245
diff changeset
     9
imports
63626
44ce6b524ff3 move measure theory from HOL-Probability to HOL-Multivariate_Analysis
hoelzl
parents: 63566
diff changeset
    10
  Measurable Derivative Ordered_Euclidean_Space Extended_Real_Limits
33533
40b44cb20c8c New theory Probability/Borel.thy, and some associated lemmas
paulson
parents:
diff changeset
    11
begin
40b44cb20c8c New theory Probability/Borel.thy, and some associated lemmas
paulson
parents:
diff changeset
    12
62624
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
    13
lemma sets_Collect_eventually_sequentially[measurable]:
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
    14
  "(\<And>i. {x\<in>space M. P x i} \<in> sets M) \<Longrightarrow> {x\<in>space M. eventually (P x) sequentially} \<in> sets M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
    15
  unfolding eventually_sequentially by simp
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
    16
59088
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
    17
lemma topological_basis_trivial: "topological_basis {A. open A}"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
    18
  by (auto simp: topological_basis_def)
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
    19
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
    20
lemma open_prod_generated: "open = generate_topology {A \<times> B | A B. open A \<and> open B}"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
    21
proof -
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
    22
  have "{A \<times> B :: ('a \<times> 'b) set | A B. open A \<and> open B} = ((\<lambda>(a, b). a \<times> b) ` ({A. open A} \<times> {A. open A}))"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
    23
    by auto
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
    24
  then show ?thesis
62372
4fe872ff91bf Borel_Space.borel is now in the type class locale
hoelzl
parents: 62083
diff changeset
    25
    by (auto intro: topological_basis_prod topological_basis_trivial topological_basis_imp_subbasis)
59088
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
    26
qed
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
    27
62083
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    28
definition "mono_on f A \<equiv> \<forall>r s. r \<in> A \<and> s \<in> A \<and> r \<le> s \<longrightarrow> f r \<le> f s"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    29
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    30
lemma mono_onI:
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    31
  "(\<And>r s. r \<in> A \<Longrightarrow> s \<in> A \<Longrightarrow> r \<le> s \<Longrightarrow> f r \<le> f s) \<Longrightarrow> mono_on f A"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    32
  unfolding mono_on_def by simp
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    33
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    34
lemma mono_onD:
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    35
  "\<lbrakk>mono_on f A; r \<in> A; s \<in> A; r \<le> s\<rbrakk> \<Longrightarrow> f r \<le> f s"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    36
  unfolding mono_on_def by simp
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    37
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    38
lemma mono_imp_mono_on: "mono f \<Longrightarrow> mono_on f A"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    39
  unfolding mono_def mono_on_def by auto
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    40
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    41
lemma mono_on_subset: "mono_on f A \<Longrightarrow> B \<subseteq> A \<Longrightarrow> mono_on f B"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    42
  unfolding mono_on_def by auto
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    43
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    44
definition "strict_mono_on f A \<equiv> \<forall>r s. r \<in> A \<and> s \<in> A \<and> r < s \<longrightarrow> f r < f s"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    45
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    46
lemma strict_mono_onI:
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    47
  "(\<And>r s. r \<in> A \<Longrightarrow> s \<in> A \<Longrightarrow> r < s \<Longrightarrow> f r < f s) \<Longrightarrow> strict_mono_on f A"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    48
  unfolding strict_mono_on_def by simp
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    49
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    50
lemma strict_mono_onD:
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    51
  "\<lbrakk>strict_mono_on f A; r \<in> A; s \<in> A; r < s\<rbrakk> \<Longrightarrow> f r < f s"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    52
  unfolding strict_mono_on_def by simp
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    53
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    54
lemma mono_on_greaterD:
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    55
  assumes "mono_on g A" "x \<in> A" "y \<in> A" "g x > (g (y::_::linorder) :: _ :: linorder)"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    56
  shows "x > y"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    57
proof (rule ccontr)
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    58
  assume "\<not>x > y"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    59
  hence "x \<le> y" by (simp add: not_less)
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    60
  from assms(1-3) and this have "g x \<le> g y" by (rule mono_onD)
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    61
  with assms(4) show False by simp
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    62
qed
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    63
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    64
lemma strict_mono_inv:
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    65
  fixes f :: "('a::linorder) \<Rightarrow> ('b::linorder)"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    66
  assumes "strict_mono f" and "surj f" and inv: "\<And>x. g (f x) = x"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    67
  shows "strict_mono g"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    68
proof
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    69
  fix x y :: 'b assume "x < y"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    70
  from \<open>surj f\<close> obtain x' y' where [simp]: "x = f x'" "y = f y'" by blast
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    71
  with \<open>x < y\<close> and \<open>strict_mono f\<close> have "x' < y'" by (simp add: strict_mono_less)
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    72
  with inv show "g x < g y" by simp
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    73
qed
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    74
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    75
lemma strict_mono_on_imp_inj_on:
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    76
  assumes "strict_mono_on (f :: (_ :: linorder) \<Rightarrow> (_ :: preorder)) A"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    77
  shows "inj_on f A"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    78
proof (rule inj_onI)
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    79
  fix x y assume "x \<in> A" "y \<in> A" "f x = f y"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    80
  thus "x = y"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    81
    by (cases x y rule: linorder_cases)
62372
4fe872ff91bf Borel_Space.borel is now in the type class locale
hoelzl
parents: 62083
diff changeset
    82
       (auto dest: strict_mono_onD[OF assms, of x y] strict_mono_onD[OF assms, of y x])
62083
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    83
qed
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    84
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    85
lemma strict_mono_on_leD:
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    86
  assumes "strict_mono_on (f :: (_ :: linorder) \<Rightarrow> _ :: preorder) A" "x \<in> A" "y \<in> A" "x \<le> y"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    87
  shows "f x \<le> f y"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    88
proof (insert le_less_linear[of y x], elim disjE)
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    89
  assume "x < y"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    90
  with assms have "f x < f y" by (rule_tac strict_mono_onD[OF assms(1)]) simp_all
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    91
  thus ?thesis by (rule less_imp_le)
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    92
qed (insert assms, simp)
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    93
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    94
lemma strict_mono_on_eqD:
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    95
  fixes f :: "(_ :: linorder) \<Rightarrow> (_ :: preorder)"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    96
  assumes "strict_mono_on f A" "f x = f y" "x \<in> A" "y \<in> A"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    97
  shows "y = x"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    98
  using assms by (rule_tac linorder_cases[of x y]) (auto dest: strict_mono_onD)
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
    99
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   100
lemma mono_on_imp_deriv_nonneg:
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   101
  assumes mono: "mono_on f A" and deriv: "(f has_real_derivative D) (at x)"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   102
  assumes "x \<in> interior A"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   103
  shows "D \<ge> 0"
63952
354808e9f44b new material connected with HOL Light measure theory, plus more rationalisation
paulson <lp15@cam.ac.uk>
parents: 63627
diff changeset
   104
proof (rule tendsto_lowerbound)
62083
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   105
  let ?A' = "(\<lambda>y. y - x) ` interior A"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   106
  from deriv show "((\<lambda>h. (f (x + h) - f x) / h) \<longlongrightarrow> D) (at 0)"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   107
      by (simp add: field_has_derivative_at has_field_derivative_def)
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   108
  from mono have mono': "mono_on f (interior A)" by (rule mono_on_subset) (rule interior_subset)
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   109
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   110
  show "eventually (\<lambda>h. (f (x + h) - f x) / h \<ge> 0) (at 0)"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   111
  proof (subst eventually_at_topological, intro exI conjI ballI impI)
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   112
    have "open (interior A)" by simp
67399
eab6ce8368fa ran isabelle update_op on all sources
nipkow
parents: 67278
diff changeset
   113
    hence "open ((+) (-x) ` interior A)" by (rule open_translation)
eab6ce8368fa ran isabelle update_op on all sources
nipkow
parents: 67278
diff changeset
   114
    also have "((+) (-x) ` interior A) = ?A'" by auto
62083
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   115
    finally show "open ?A'" .
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   116
  next
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   117
    from \<open>x \<in> interior A\<close> show "0 \<in> ?A'" by auto
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   118
  next
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   119
    fix h assume "h \<in> ?A'"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   120
    hence "x + h \<in> interior A" by auto
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   121
    with mono' and \<open>x \<in> interior A\<close> show "(f (x + h) - f x) / h \<ge> 0"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   122
      by (cases h rule: linorder_cases[of _ 0])
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   123
         (simp_all add: divide_nonpos_neg divide_nonneg_pos mono_onD field_simps)
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   124
  qed
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   125
qed simp
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   126
62372
4fe872ff91bf Borel_Space.borel is now in the type class locale
hoelzl
parents: 62083
diff changeset
   127
lemma strict_mono_on_imp_mono_on:
62083
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   128
  "strict_mono_on (f :: (_ :: linorder) \<Rightarrow> _ :: preorder) A \<Longrightarrow> mono_on f A"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   129
  by (rule mono_onI, rule strict_mono_on_leD)
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   130
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   131
lemma mono_on_ctble_discont:
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   132
  fixes f :: "real \<Rightarrow> real"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   133
  fixes A :: "real set"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   134
  assumes "mono_on f A"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   135
  shows "countable {a\<in>A. \<not> continuous (at a within A) f}"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   136
proof -
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   137
  have mono: "\<And>x y. x \<in> A \<Longrightarrow> y \<in> A \<Longrightarrow> x \<le> y \<Longrightarrow> f x \<le> f y"
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   138
    using \<open>mono_on f A\<close> by (simp add: mono_on_def)
62083
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   139
  have "\<forall>a \<in> {a\<in>A. \<not> continuous (at a within A) f}. \<exists>q :: nat \<times> rat.
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   140
      (fst q = 0 \<and> of_rat (snd q) < f a \<and> (\<forall>x \<in> A. x < a \<longrightarrow> f x < of_rat (snd q))) \<or>
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   141
      (fst q = 1 \<and> of_rat (snd q) > f a \<and> (\<forall>x \<in> A. x > a \<longrightarrow> f x > of_rat (snd q)))"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   142
  proof (clarsimp simp del: One_nat_def)
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   143
    fix a assume "a \<in> A" assume "\<not> continuous (at a within A) f"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   144
    thus "\<exists>q1 q2.
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   145
            q1 = 0 \<and> real_of_rat q2 < f a \<and> (\<forall>x\<in>A. x < a \<longrightarrow> f x < real_of_rat q2) \<or>
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   146
            q1 = 1 \<and> f a < real_of_rat q2 \<and> (\<forall>x\<in>A. a < x \<longrightarrow> real_of_rat q2 < f x)"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   147
    proof (auto simp add: continuous_within order_tendsto_iff eventually_at)
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   148
      fix l assume "l < f a"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   149
      then obtain q2 where q2: "l < of_rat q2" "of_rat q2 < f a"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   150
        using of_rat_dense by blast
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   151
      assume * [rule_format]: "\<forall>d>0. \<exists>x\<in>A. x \<noteq> a \<and> dist x a < d \<and> \<not> l < f x"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   152
      from q2 have "real_of_rat q2 < f a \<and> (\<forall>x\<in>A. x < a \<longrightarrow> f x < real_of_rat q2)"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   153
      proof auto
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   154
        fix x assume "x \<in> A" "x < a"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   155
        with q2 *[of "a - x"] show "f x < real_of_rat q2"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   156
          apply (auto simp add: dist_real_def not_less)
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   157
          apply (subgoal_tac "f x \<le> f xa")
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   158
          by (auto intro: mono)
62372
4fe872ff91bf Borel_Space.borel is now in the type class locale
hoelzl
parents: 62083
diff changeset
   159
      qed
62083
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   160
      thus ?thesis by auto
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   161
    next
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   162
      fix u assume "u > f a"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   163
      then obtain q2 where q2: "f a < of_rat q2" "of_rat q2 < u"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   164
        using of_rat_dense by blast
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   165
      assume *[rule_format]: "\<forall>d>0. \<exists>x\<in>A. x \<noteq> a \<and> dist x a < d \<and> \<not> u > f x"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   166
      from q2 have "real_of_rat q2 > f a \<and> (\<forall>x\<in>A. x > a \<longrightarrow> f x > real_of_rat q2)"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   167
      proof auto
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   168
        fix x assume "x \<in> A" "x > a"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   169
        with q2 *[of "x - a"] show "f x > real_of_rat q2"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   170
          apply (auto simp add: dist_real_def)
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   171
          apply (subgoal_tac "f x \<ge> f xa")
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   172
          by (auto intro: mono)
62372
4fe872ff91bf Borel_Space.borel is now in the type class locale
hoelzl
parents: 62083
diff changeset
   173
      qed
62083
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   174
      thus ?thesis by auto
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   175
    qed
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   176
  qed
62372
4fe872ff91bf Borel_Space.borel is now in the type class locale
hoelzl
parents: 62083
diff changeset
   177
  hence "\<exists>g :: real \<Rightarrow> nat \<times> rat . \<forall>a \<in> {a\<in>A. \<not> continuous (at a within A) f}.
62083
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   178
      (fst (g a) = 0 \<and> of_rat (snd (g a)) < f a \<and> (\<forall>x \<in> A. x < a \<longrightarrow> f x < of_rat (snd (g a)))) |
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   179
      (fst (g a) = 1 \<and> of_rat (snd (g a)) > f a \<and> (\<forall>x \<in> A. x > a \<longrightarrow> f x > of_rat (snd (g a))))"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   180
    by (rule bchoice)
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   181
  then guess g ..
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   182
  hence g: "\<And>a x. a \<in> A \<Longrightarrow> \<not> continuous (at a within A) f \<Longrightarrow> x \<in> A \<Longrightarrow>
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   183
      (fst (g a) = 0 \<and> of_rat (snd (g a)) < f a \<and> (x < a \<longrightarrow> f x < of_rat (snd (g a)))) |
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   184
      (fst (g a) = 1 \<and> of_rat (snd (g a)) > f a \<and> (x > a \<longrightarrow> f x > of_rat (snd (g a))))"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   185
    by auto
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   186
  have "inj_on g {a\<in>A. \<not> continuous (at a within A) f}"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   187
  proof (auto simp add: inj_on_def)
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   188
    fix w z
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   189
    assume 1: "w \<in> A" and 2: "\<not> continuous (at w within A) f" and
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   190
           3: "z \<in> A" and 4: "\<not> continuous (at z within A) f" and
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   191
           5: "g w = g z"
62372
4fe872ff91bf Borel_Space.borel is now in the type class locale
hoelzl
parents: 62083
diff changeset
   192
    from g [OF 1 2 3] g [OF 3 4 1] 5
62083
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   193
    show "w = z" by auto
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   194
  qed
62372
4fe872ff91bf Borel_Space.borel is now in the type class locale
hoelzl
parents: 62083
diff changeset
   195
  thus ?thesis
4fe872ff91bf Borel_Space.borel is now in the type class locale
hoelzl
parents: 62083
diff changeset
   196
    by (rule countableI')
62083
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   197
qed
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   198
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   199
lemma mono_on_ctble_discont_open:
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   200
  fixes f :: "real \<Rightarrow> real"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   201
  fixes A :: "real set"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   202
  assumes "open A" "mono_on f A"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   203
  shows "countable {a\<in>A. \<not>isCont f a}"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   204
proof -
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   205
  have "{a\<in>A. \<not>isCont f a} = {a\<in>A. \<not>(continuous (at a within A) f)}"
63167
0909deb8059b isabelle update_cartouches -c -t;
wenzelm
parents: 63040
diff changeset
   206
    by (auto simp add: continuous_within_open [OF _ \<open>open A\<close>])
62083
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   207
  thus ?thesis
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   208
    apply (elim ssubst)
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   209
    by (rule mono_on_ctble_discont, rule assms)
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   210
qed
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   211
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   212
lemma mono_ctble_discont:
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   213
  fixes f :: "real \<Rightarrow> real"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   214
  assumes "mono f"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   215
  shows "countable {a. \<not> isCont f a}"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   216
using assms mono_on_ctble_discont [of f UNIV] unfolding mono_on_def mono_def by auto
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   217
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   218
lemma has_real_derivative_imp_continuous_on:
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   219
  assumes "\<And>x. x \<in> A \<Longrightarrow> (f has_real_derivative f' x) (at x)"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   220
  shows "continuous_on A f"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   221
  apply (intro differentiable_imp_continuous_on, unfold differentiable_on_def)
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   222
  apply (intro ballI Deriv.differentiableI)
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   223
  apply (rule has_field_derivative_subset[OF assms])
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   224
  apply simp_all
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   225
  done
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   226
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   227
lemma closure_contains_Sup:
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   228
  fixes S :: "real set"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   229
  assumes "S \<noteq> {}" "bdd_above S"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   230
  shows "Sup S \<in> closure S"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   231
proof-
62372
4fe872ff91bf Borel_Space.borel is now in the type class locale
hoelzl
parents: 62083
diff changeset
   232
  have "Inf (uminus ` S) \<in> closure (uminus ` S)"
62083
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   233
      using assms by (intro closure_contains_Inf) auto
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   234
  also have "Inf (uminus ` S) = -Sup S" by (simp add: Inf_real_def)
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   235
  also have "closure (uminus ` S) = uminus ` closure S"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   236
      by (rule sym, intro closure_injective_linear_image) (auto intro: linearI)
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   237
  finally show ?thesis by auto
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   238
qed
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   239
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   240
lemma closed_contains_Sup:
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   241
  fixes S :: "real set"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   242
  shows "S \<noteq> {} \<Longrightarrow> bdd_above S \<Longrightarrow> closed S \<Longrightarrow> Sup S \<in> S"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   243
  by (subst closure_closed[symmetric], assumption, rule closure_contains_Sup)
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   244
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   245
lemma deriv_nonneg_imp_mono:
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   246
  assumes deriv: "\<And>x. x \<in> {a..b} \<Longrightarrow> (g has_real_derivative g' x) (at x)"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   247
  assumes nonneg: "\<And>x. x \<in> {a..b} \<Longrightarrow> g' x \<ge> 0"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   248
  assumes ab: "a \<le> b"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   249
  shows "g a \<le> g b"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   250
proof (cases "a < b")
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   251
  assume "a < b"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   252
  from deriv have "\<forall>x. x \<ge> a \<and> x \<le> b \<longrightarrow> (g has_real_derivative g' x) (at x)" by simp
62372
4fe872ff91bf Borel_Space.borel is now in the type class locale
hoelzl
parents: 62083
diff changeset
   253
  from MVT2[OF \<open>a < b\<close> this] and deriv
62083
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   254
    obtain \<xi> where \<xi>_ab: "\<xi> > a" "\<xi> < b" and g_ab: "g b - g a = (b - a) * g' \<xi>" by blast
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   255
  from \<xi>_ab ab nonneg have "(b - a) * g' \<xi> \<ge> 0" by simp
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   256
  with g_ab show ?thesis by simp
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   257
qed (insert ab, simp)
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   258
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   259
lemma continuous_interval_vimage_Int:
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   260
  assumes "continuous_on {a::real..b} g" and mono: "\<And>x y. a \<le> x \<Longrightarrow> x \<le> y \<Longrightarrow> y \<le> b \<Longrightarrow> g x \<le> g y"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   261
  assumes "a \<le> b" "(c::real) \<le> d" "{c..d} \<subseteq> {g a..g b}"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   262
  obtains c' d' where "{a..b} \<inter> g -` {c..d} = {c'..d'}" "c' \<le> d'" "g c' = c" "g d' = d"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   263
proof-
63040
eb4ddd18d635 eliminated old 'def';
wenzelm
parents: 62975
diff changeset
   264
  let ?A = "{a..b} \<inter> g -` {c..d}"
eb4ddd18d635 eliminated old 'def';
wenzelm
parents: 62975
diff changeset
   265
  from IVT'[of g a c b, OF _ _ \<open>a \<le> b\<close> assms(1)] assms(4,5)
eb4ddd18d635 eliminated old 'def';
wenzelm
parents: 62975
diff changeset
   266
  obtain c'' where c'': "c'' \<in> ?A" "g c'' = c" by auto
eb4ddd18d635 eliminated old 'def';
wenzelm
parents: 62975
diff changeset
   267
  from IVT'[of g a d b, OF _ _ \<open>a \<le> b\<close> assms(1)] assms(4,5)
eb4ddd18d635 eliminated old 'def';
wenzelm
parents: 62975
diff changeset
   268
  obtain d'' where d'': "d'' \<in> ?A" "g d'' = d" by auto
eb4ddd18d635 eliminated old 'def';
wenzelm
parents: 62975
diff changeset
   269
  hence [simp]: "?A \<noteq> {}" by blast
62083
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   270
63040
eb4ddd18d635 eliminated old 'def';
wenzelm
parents: 62975
diff changeset
   271
  define c' where "c' = Inf ?A"
eb4ddd18d635 eliminated old 'def';
wenzelm
parents: 62975
diff changeset
   272
  define d' where "d' = Sup ?A"
eb4ddd18d635 eliminated old 'def';
wenzelm
parents: 62975
diff changeset
   273
  have "?A \<subseteq> {c'..d'}" unfolding c'_def d'_def
eb4ddd18d635 eliminated old 'def';
wenzelm
parents: 62975
diff changeset
   274
    by (intro subsetI) (auto intro: cInf_lower cSup_upper)
eb4ddd18d635 eliminated old 'def';
wenzelm
parents: 62975
diff changeset
   275
  moreover from assms have "closed ?A"
eb4ddd18d635 eliminated old 'def';
wenzelm
parents: 62975
diff changeset
   276
    using continuous_on_closed_vimage[of "{a..b}" g] by (subst Int_commute) simp
eb4ddd18d635 eliminated old 'def';
wenzelm
parents: 62975
diff changeset
   277
  hence c'd'_in_set: "c' \<in> ?A" "d' \<in> ?A" unfolding c'_def d'_def
eb4ddd18d635 eliminated old 'def';
wenzelm
parents: 62975
diff changeset
   278
    by ((intro closed_contains_Inf closed_contains_Sup, simp_all)[])+
eb4ddd18d635 eliminated old 'def';
wenzelm
parents: 62975
diff changeset
   279
  hence "{c'..d'} \<subseteq> ?A" using assms
eb4ddd18d635 eliminated old 'def';
wenzelm
parents: 62975
diff changeset
   280
    by (intro subsetI)
eb4ddd18d635 eliminated old 'def';
wenzelm
parents: 62975
diff changeset
   281
       (auto intro!: order_trans[of c "g c'" "g x" for x] order_trans[of "g x" "g d'" d for x]
eb4ddd18d635 eliminated old 'def';
wenzelm
parents: 62975
diff changeset
   282
             intro!: mono)
eb4ddd18d635 eliminated old 'def';
wenzelm
parents: 62975
diff changeset
   283
  moreover have "c' \<le> d'" using c'd'_in_set(2) unfolding c'_def by (intro cInf_lower) auto
eb4ddd18d635 eliminated old 'def';
wenzelm
parents: 62975
diff changeset
   284
  moreover have "g c' \<le> c" "g d' \<ge> d"
eb4ddd18d635 eliminated old 'def';
wenzelm
parents: 62975
diff changeset
   285
    apply (insert c'' d'' c'd'_in_set)
eb4ddd18d635 eliminated old 'def';
wenzelm
parents: 62975
diff changeset
   286
    apply (subst c''(2)[symmetric])
eb4ddd18d635 eliminated old 'def';
wenzelm
parents: 62975
diff changeset
   287
    apply (auto simp: c'_def intro!: mono cInf_lower c'') []
eb4ddd18d635 eliminated old 'def';
wenzelm
parents: 62975
diff changeset
   288
    apply (subst d''(2)[symmetric])
eb4ddd18d635 eliminated old 'def';
wenzelm
parents: 62975
diff changeset
   289
    apply (auto simp: d'_def intro!: mono cSup_upper d'') []
eb4ddd18d635 eliminated old 'def';
wenzelm
parents: 62975
diff changeset
   290
    done
eb4ddd18d635 eliminated old 'def';
wenzelm
parents: 62975
diff changeset
   291
  with c'd'_in_set have "g c' = c" "g d' = d" by auto
eb4ddd18d635 eliminated old 'def';
wenzelm
parents: 62975
diff changeset
   292
  ultimately show ?thesis using that by blast
62083
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   293
qed
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   294
61808
fc1556774cfe isabelle update_cartouches -c -t;
wenzelm
parents: 61609
diff changeset
   295
subsection \<open>Generic Borel spaces\<close>
33533
40b44cb20c8c New theory Probability/Borel.thy, and some associated lemmas
paulson
parents:
diff changeset
   296
62372
4fe872ff91bf Borel_Space.borel is now in the type class locale
hoelzl
parents: 62083
diff changeset
   297
definition (in topological_space) borel :: "'a measure" where
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46905
diff changeset
   298
  "borel = sigma UNIV {S. open S}"
33533
40b44cb20c8c New theory Probability/Borel.thy, and some associated lemmas
paulson
parents:
diff changeset
   299
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46905
diff changeset
   300
abbreviation "borel_measurable M \<equiv> measurable M borel"
33533
40b44cb20c8c New theory Probability/Borel.thy, and some associated lemmas
paulson
parents:
diff changeset
   301
40b44cb20c8c New theory Probability/Borel.thy, and some associated lemmas
paulson
parents:
diff changeset
   302
lemma in_borel_measurable:
40b44cb20c8c New theory Probability/Borel.thy, and some associated lemmas
paulson
parents:
diff changeset
   303
   "f \<in> borel_measurable M \<longleftrightarrow>
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46905
diff changeset
   304
    (\<forall>S \<in> sigma_sets UNIV {S. open S}. f -` S \<inter> space M \<in> sets M)"
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents: 39302
diff changeset
   305
  by (auto simp add: measurable_def borel_def)
33533
40b44cb20c8c New theory Probability/Borel.thy, and some associated lemmas
paulson
parents:
diff changeset
   306
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents: 39302
diff changeset
   307
lemma in_borel_measurable_borel:
38656
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
   308
   "f \<in> borel_measurable M \<longleftrightarrow>
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents: 39302
diff changeset
   309
    (\<forall>S \<in> sets borel.
38656
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
   310
      f -` S \<inter> space M \<in> sets M)"
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents: 39302
diff changeset
   311
  by (auto simp add: measurable_def borel_def)
33533
40b44cb20c8c New theory Probability/Borel.thy, and some associated lemmas
paulson
parents:
diff changeset
   312
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents: 39302
diff changeset
   313
lemma space_borel[simp]: "space borel = UNIV"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents: 39302
diff changeset
   314
  unfolding borel_def by auto
38656
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
   315
50002
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
   316
lemma space_in_borel[measurable]: "UNIV \<in> sets borel"
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
   317
  unfolding borel_def by auto
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
   318
57235
b0b9a10e4bf4 properties of Erlang and exponentially distributed random variables (by Sudeep Kanav)
hoelzl
parents: 57138
diff changeset
   319
lemma sets_borel: "sets borel = sigma_sets UNIV {S. open S}"
b0b9a10e4bf4 properties of Erlang and exponentially distributed random variables (by Sudeep Kanav)
hoelzl
parents: 57138
diff changeset
   320
  unfolding borel_def by (rule sets_measure_of) simp
b0b9a10e4bf4 properties of Erlang and exponentially distributed random variables (by Sudeep Kanav)
hoelzl
parents: 57138
diff changeset
   321
62083
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   322
lemma measurable_sets_borel:
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   323
    "\<lbrakk>f \<in> measurable borel M; A \<in> sets M\<rbrakk> \<Longrightarrow> f -` A \<in> sets borel"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   324
  by (drule (1) measurable_sets) simp
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
   325
50387
3d8863c41fe8 Move the measurability prover to its own file
hoelzl
parents: 50245
diff changeset
   326
lemma pred_Collect_borel[measurable (raw)]: "Measurable.pred borel P \<Longrightarrow> {x. P x} \<in> sets borel"
50002
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
   327
  unfolding borel_def pred_def by auto
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
   328
50003
8c213922ed49 use measurability prover
hoelzl
parents: 50002
diff changeset
   329
lemma borel_open[measurable (raw generic)]:
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents: 39302
diff changeset
   330
  assumes "open A" shows "A \<in> sets borel"
38656
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
   331
proof -
44537
c10485a6a7af make HOL-Probability respect set/pred distinction
huffman
parents: 44282
diff changeset
   332
  have "A \<in> {S. open S}" unfolding mem_Collect_eq using assms .
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46905
diff changeset
   333
  thus ?thesis unfolding borel_def by auto
33533
40b44cb20c8c New theory Probability/Borel.thy, and some associated lemmas
paulson
parents:
diff changeset
   334
qed
40b44cb20c8c New theory Probability/Borel.thy, and some associated lemmas
paulson
parents:
diff changeset
   335
50003
8c213922ed49 use measurability prover
hoelzl
parents: 50002
diff changeset
   336
lemma borel_closed[measurable (raw generic)]:
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents: 39302
diff changeset
   337
  assumes "closed A" shows "A \<in> sets borel"
33533
40b44cb20c8c New theory Probability/Borel.thy, and some associated lemmas
paulson
parents:
diff changeset
   338
proof -
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents: 39302
diff changeset
   339
  have "space borel - (- A) \<in> sets borel"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents: 39302
diff changeset
   340
    using assms unfolding closed_def by (blast intro: borel_open)
38656
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
   341
  thus ?thesis by simp
33533
40b44cb20c8c New theory Probability/Borel.thy, and some associated lemmas
paulson
parents:
diff changeset
   342
qed
40b44cb20c8c New theory Probability/Borel.thy, and some associated lemmas
paulson
parents:
diff changeset
   343
50003
8c213922ed49 use measurability prover
hoelzl
parents: 50002
diff changeset
   344
lemma borel_singleton[measurable]:
8c213922ed49 use measurability prover
hoelzl
parents: 50002
diff changeset
   345
  "A \<in> sets borel \<Longrightarrow> insert x A \<in> sets (borel :: 'a::t1_space measure)"
50244
de72bbe42190 qualified interpretation of sigma_algebra, to avoid name clashes
immler
parents: 50104
diff changeset
   346
  unfolding insert_def by (rule sets.Un) auto
50002
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
   347
64320
ba194424b895 HOL-Probability: move stopping time from AFP/Markov_Models
hoelzl
parents: 64287
diff changeset
   348
lemma sets_borel_eq_count_space: "sets (borel :: 'a::{countable, t2_space} measure) = count_space UNIV"
ba194424b895 HOL-Probability: move stopping time from AFP/Markov_Models
hoelzl
parents: 64287
diff changeset
   349
proof -
ba194424b895 HOL-Probability: move stopping time from AFP/Markov_Models
hoelzl
parents: 64287
diff changeset
   350
  have "(\<Union>a\<in>A. {a}) \<in> sets borel" for A :: "'a set"
ba194424b895 HOL-Probability: move stopping time from AFP/Markov_Models
hoelzl
parents: 64287
diff changeset
   351
    by (intro sets.countable_UN') auto
ba194424b895 HOL-Probability: move stopping time from AFP/Markov_Models
hoelzl
parents: 64287
diff changeset
   352
  then show ?thesis
ba194424b895 HOL-Probability: move stopping time from AFP/Markov_Models
hoelzl
parents: 64287
diff changeset
   353
    by auto
ba194424b895 HOL-Probability: move stopping time from AFP/Markov_Models
hoelzl
parents: 64287
diff changeset
   354
qed
ba194424b895 HOL-Probability: move stopping time from AFP/Markov_Models
hoelzl
parents: 64287
diff changeset
   355
50003
8c213922ed49 use measurability prover
hoelzl
parents: 50002
diff changeset
   356
lemma borel_comp[measurable]: "A \<in> sets borel \<Longrightarrow> - A \<in> sets borel"
50002
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
   357
  unfolding Compl_eq_Diff_UNIV by simp
41830
719b0a517c33 log is borel measurable
hoelzl
parents: 41545
diff changeset
   358
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46905
diff changeset
   359
lemma borel_measurable_vimage:
38656
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
   360
  fixes f :: "'a \<Rightarrow> 'x::t2_space"
50002
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
   361
  assumes borel[measurable]: "f \<in> borel_measurable M"
38656
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
   362
  shows "f -` {x} \<inter> space M \<in> sets M"
50002
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
   363
  by simp
33533
40b44cb20c8c New theory Probability/Borel.thy, and some associated lemmas
paulson
parents:
diff changeset
   364
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46905
diff changeset
   365
lemma borel_measurableI:
61076
bdc1e2f0a86a eliminated \<Colon>;
wenzelm
parents: 60771
diff changeset
   366
  fixes f :: "'a \<Rightarrow> 'x::topological_space"
38656
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
   367
  assumes "\<And>S. open S \<Longrightarrow> f -` S \<inter> space M \<in> sets M"
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
   368
  shows "f \<in> borel_measurable M"
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents: 39302
diff changeset
   369
  unfolding borel_def
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46905
diff changeset
   370
proof (rule measurable_measure_of, simp_all)
44537
c10485a6a7af make HOL-Probability respect set/pred distinction
huffman
parents: 44282
diff changeset
   371
  fix S :: "'x set" assume "open S" thus "f -` S \<inter> space M \<in> sets M"
c10485a6a7af make HOL-Probability respect set/pred distinction
huffman
parents: 44282
diff changeset
   372
    using assms[of S] by simp
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents: 39302
diff changeset
   373
qed
33533
40b44cb20c8c New theory Probability/Borel.thy, and some associated lemmas
paulson
parents:
diff changeset
   374
50021
d96a3f468203 add support for function application to measurability prover
hoelzl
parents: 50003
diff changeset
   375
lemma borel_measurable_const:
38656
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
   376
  "(\<lambda>x. c) \<in> borel_measurable M"
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46905
diff changeset
   377
  by auto
33533
40b44cb20c8c New theory Probability/Borel.thy, and some associated lemmas
paulson
parents:
diff changeset
   378
50003
8c213922ed49 use measurability prover
hoelzl
parents: 50002
diff changeset
   379
lemma borel_measurable_indicator:
38656
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
   380
  assumes A: "A \<in> sets M"
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
   381
  shows "indicator A \<in> borel_measurable M"
46905
6b1c0a80a57a prefer abs_def over def_raw;
wenzelm
parents: 46884
diff changeset
   382
  unfolding indicator_def [abs_def] using A
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46905
diff changeset
   383
  by (auto intro!: measurable_If_set)
33533
40b44cb20c8c New theory Probability/Borel.thy, and some associated lemmas
paulson
parents:
diff changeset
   384
50096
7c9c5b1b6cd7 more measurability rules
hoelzl
parents: 50094
diff changeset
   385
lemma borel_measurable_count_space[measurable (raw)]:
7c9c5b1b6cd7 more measurability rules
hoelzl
parents: 50094
diff changeset
   386
  "f \<in> borel_measurable (count_space S)"
7c9c5b1b6cd7 more measurability rules
hoelzl
parents: 50094
diff changeset
   387
  unfolding measurable_def by auto
7c9c5b1b6cd7 more measurability rules
hoelzl
parents: 50094
diff changeset
   388
7c9c5b1b6cd7 more measurability rules
hoelzl
parents: 50094
diff changeset
   389
lemma borel_measurable_indicator'[measurable (raw)]:
7c9c5b1b6cd7 more measurability rules
hoelzl
parents: 50094
diff changeset
   390
  assumes [measurable]: "{x\<in>space M. f x \<in> A x} \<in> sets M"
7c9c5b1b6cd7 more measurability rules
hoelzl
parents: 50094
diff changeset
   391
  shows "(\<lambda>x. indicator (A x) (f x)) \<in> borel_measurable M"
50001
382bd3173584 add syntax and a.e.-rules for (conditional) probability on predicates
hoelzl
parents: 49774
diff changeset
   392
  unfolding indicator_def[abs_def]
382bd3173584 add syntax and a.e.-rules for (conditional) probability on predicates
hoelzl
parents: 49774
diff changeset
   393
  by (auto intro!: measurable_If)
382bd3173584 add syntax and a.e.-rules for (conditional) probability on predicates
hoelzl
parents: 49774
diff changeset
   394
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46905
diff changeset
   395
lemma borel_measurable_indicator_iff:
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents: 39302
diff changeset
   396
  "(indicator A :: 'a \<Rightarrow> 'x::{t1_space, zero_neq_one}) \<in> borel_measurable M \<longleftrightarrow> A \<inter> space M \<in> sets M"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents: 39302
diff changeset
   397
    (is "?I \<in> borel_measurable M \<longleftrightarrow> _")
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents: 39302
diff changeset
   398
proof
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents: 39302
diff changeset
   399
  assume "?I \<in> borel_measurable M"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents: 39302
diff changeset
   400
  then have "?I -` {1} \<inter> space M \<in> sets M"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents: 39302
diff changeset
   401
    unfolding measurable_def by auto
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents: 39302
diff changeset
   402
  also have "?I -` {1} \<inter> space M = A \<inter> space M"
46905
6b1c0a80a57a prefer abs_def over def_raw;
wenzelm
parents: 46884
diff changeset
   403
    unfolding indicator_def [abs_def] by auto
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents: 39302
diff changeset
   404
  finally show "A \<inter> space M \<in> sets M" .
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents: 39302
diff changeset
   405
next
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents: 39302
diff changeset
   406
  assume "A \<inter> space M \<in> sets M"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents: 39302
diff changeset
   407
  moreover have "?I \<in> borel_measurable M \<longleftrightarrow>
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents: 39302
diff changeset
   408
    (indicator (A \<inter> space M) :: 'a \<Rightarrow> 'x) \<in> borel_measurable M"
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents: 39302
diff changeset
   409
    by (intro measurable_cong) (auto simp: indicator_def)
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents: 39302
diff changeset
   410
  ultimately show "?I \<in> borel_measurable M" by auto
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents: 39302
diff changeset
   411
qed
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents: 39302
diff changeset
   412
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46905
diff changeset
   413
lemma borel_measurable_subalgebra:
41545
9c869baf1c66 tuned formalization of subalgebra
hoelzl
parents: 41097
diff changeset
   414
  assumes "sets N \<subseteq> sets M" "space N = space M" "f \<in> borel_measurable N"
39092
98de40859858 move lemmas to correct theory files
hoelzl
parents: 39087
diff changeset
   415
  shows "f \<in> borel_measurable M"
98de40859858 move lemmas to correct theory files
hoelzl
parents: 39087
diff changeset
   416
  using assms unfolding measurable_def by auto
98de40859858 move lemmas to correct theory files
hoelzl
parents: 39087
diff changeset
   417
57137
f174712d0a84 better support for restrict_space
hoelzl
parents: 57036
diff changeset
   418
lemma borel_measurable_restrict_space_iff_ereal:
f174712d0a84 better support for restrict_space
hoelzl
parents: 57036
diff changeset
   419
  fixes f :: "'a \<Rightarrow> ereal"
f174712d0a84 better support for restrict_space
hoelzl
parents: 57036
diff changeset
   420
  assumes \<Omega>[measurable, simp]: "\<Omega> \<inter> space M \<in> sets M"
f174712d0a84 better support for restrict_space
hoelzl
parents: 57036
diff changeset
   421
  shows "f \<in> borel_measurable (restrict_space M \<Omega>) \<longleftrightarrow>
f174712d0a84 better support for restrict_space
hoelzl
parents: 57036
diff changeset
   422
    (\<lambda>x. f x * indicator \<Omega> x) \<in> borel_measurable M"
57138
7b3146180291 generalizd measurability on restricted space; rule for integrability on compact sets
hoelzl
parents: 57137
diff changeset
   423
  by (subst measurable_restrict_space_iff)
63566
e5abbdee461a more accurate cong del;
wenzelm
parents: 63389
diff changeset
   424
     (auto simp: indicator_def if_distrib[where f="\<lambda>x. a * x" for a] cong del: if_weak_cong)
57137
f174712d0a84 better support for restrict_space
hoelzl
parents: 57036
diff changeset
   425
62975
1d066f6ab25d Probability: move emeasure and nn_integral from ereal to ennreal
hoelzl
parents: 62625
diff changeset
   426
lemma borel_measurable_restrict_space_iff_ennreal:
1d066f6ab25d Probability: move emeasure and nn_integral from ereal to ennreal
hoelzl
parents: 62625
diff changeset
   427
  fixes f :: "'a \<Rightarrow> ennreal"
1d066f6ab25d Probability: move emeasure and nn_integral from ereal to ennreal
hoelzl
parents: 62625
diff changeset
   428
  assumes \<Omega>[measurable, simp]: "\<Omega> \<inter> space M \<in> sets M"
1d066f6ab25d Probability: move emeasure and nn_integral from ereal to ennreal
hoelzl
parents: 62625
diff changeset
   429
  shows "f \<in> borel_measurable (restrict_space M \<Omega>) \<longleftrightarrow>
1d066f6ab25d Probability: move emeasure and nn_integral from ereal to ennreal
hoelzl
parents: 62625
diff changeset
   430
    (\<lambda>x. f x * indicator \<Omega> x) \<in> borel_measurable M"
1d066f6ab25d Probability: move emeasure and nn_integral from ereal to ennreal
hoelzl
parents: 62625
diff changeset
   431
  by (subst measurable_restrict_space_iff)
63566
e5abbdee461a more accurate cong del;
wenzelm
parents: 63389
diff changeset
   432
     (auto simp: indicator_def if_distrib[where f="\<lambda>x. a * x" for a] cong del: if_weak_cong)
62975
1d066f6ab25d Probability: move emeasure and nn_integral from ereal to ennreal
hoelzl
parents: 62625
diff changeset
   433
57137
f174712d0a84 better support for restrict_space
hoelzl
parents: 57036
diff changeset
   434
lemma borel_measurable_restrict_space_iff:
f174712d0a84 better support for restrict_space
hoelzl
parents: 57036
diff changeset
   435
  fixes f :: "'a \<Rightarrow> 'b::real_normed_vector"
f174712d0a84 better support for restrict_space
hoelzl
parents: 57036
diff changeset
   436
  assumes \<Omega>[measurable, simp]: "\<Omega> \<inter> space M \<in> sets M"
f174712d0a84 better support for restrict_space
hoelzl
parents: 57036
diff changeset
   437
  shows "f \<in> borel_measurable (restrict_space M \<Omega>) \<longleftrightarrow>
f174712d0a84 better support for restrict_space
hoelzl
parents: 57036
diff changeset
   438
    (\<lambda>x. indicator \<Omega> x *\<^sub>R f x) \<in> borel_measurable M"
57138
7b3146180291 generalizd measurability on restricted space; rule for integrability on compact sets
hoelzl
parents: 57137
diff changeset
   439
  by (subst measurable_restrict_space_iff)
63566
e5abbdee461a more accurate cong del;
wenzelm
parents: 63389
diff changeset
   440
     (auto simp: indicator_def if_distrib[where f="\<lambda>x. x *\<^sub>R a" for a] ac_simps
e5abbdee461a more accurate cong del;
wenzelm
parents: 63389
diff changeset
   441
       cong del: if_weak_cong)
57138
7b3146180291 generalizd measurability on restricted space; rule for integrability on compact sets
hoelzl
parents: 57137
diff changeset
   442
7b3146180291 generalizd measurability on restricted space; rule for integrability on compact sets
hoelzl
parents: 57137
diff changeset
   443
lemma cbox_borel[measurable]: "cbox a b \<in> sets borel"
7b3146180291 generalizd measurability on restricted space; rule for integrability on compact sets
hoelzl
parents: 57137
diff changeset
   444
  by (auto intro: borel_closed)
7b3146180291 generalizd measurability on restricted space; rule for integrability on compact sets
hoelzl
parents: 57137
diff changeset
   445
57447
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57275
diff changeset
   446
lemma box_borel[measurable]: "box a b \<in> sets borel"
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57275
diff changeset
   447
  by (auto intro: borel_open)
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57275
diff changeset
   448
57138
7b3146180291 generalizd measurability on restricted space; rule for integrability on compact sets
hoelzl
parents: 57137
diff changeset
   449
lemma borel_compact: "compact (A::'a::t2_space set) \<Longrightarrow> A \<in> sets borel"
7b3146180291 generalizd measurability on restricted space; rule for integrability on compact sets
hoelzl
parents: 57137
diff changeset
   450
  by (auto intro: borel_closed dest!: compact_imp_closed)
57137
f174712d0a84 better support for restrict_space
hoelzl
parents: 57036
diff changeset
   451
62624
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   452
lemma borel_sigma_sets_subset:
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   453
  "A \<subseteq> sets borel \<Longrightarrow> sigma_sets UNIV A \<subseteq> sets borel"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   454
  using sets.sigma_sets_subset[of A borel] by simp
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   455
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   456
lemma borel_eq_sigmaI1:
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   457
  fixes F :: "'i \<Rightarrow> 'a::topological_space set" and X :: "'a::topological_space set set"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   458
  assumes borel_eq: "borel = sigma UNIV X"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   459
  assumes X: "\<And>x. x \<in> X \<Longrightarrow> x \<in> sets (sigma UNIV (F ` A))"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   460
  assumes F: "\<And>i. i \<in> A \<Longrightarrow> F i \<in> sets borel"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   461
  shows "borel = sigma UNIV (F ` A)"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   462
  unfolding borel_def
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   463
proof (intro sigma_eqI antisym)
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   464
  have borel_rev_eq: "sigma_sets UNIV {S::'a set. open S} = sets borel"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   465
    unfolding borel_def by simp
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   466
  also have "\<dots> = sigma_sets UNIV X"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   467
    unfolding borel_eq by simp
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   468
  also have "\<dots> \<subseteq> sigma_sets UNIV (F`A)"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   469
    using X by (intro sigma_algebra.sigma_sets_subset[OF sigma_algebra_sigma_sets]) auto
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   470
  finally show "sigma_sets UNIV {S. open S} \<subseteq> sigma_sets UNIV (F`A)" .
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   471
  show "sigma_sets UNIV (F`A) \<subseteq> sigma_sets UNIV {S. open S}"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   472
    unfolding borel_rev_eq using F by (intro borel_sigma_sets_subset) auto
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   473
qed auto
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   474
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   475
lemma borel_eq_sigmaI2:
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   476
  fixes F :: "'i \<Rightarrow> 'j \<Rightarrow> 'a::topological_space set"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   477
    and G :: "'l \<Rightarrow> 'k \<Rightarrow> 'a::topological_space set"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   478
  assumes borel_eq: "borel = sigma UNIV ((\<lambda>(i, j). G i j)`B)"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   479
  assumes X: "\<And>i j. (i, j) \<in> B \<Longrightarrow> G i j \<in> sets (sigma UNIV ((\<lambda>(i, j). F i j) ` A))"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   480
  assumes F: "\<And>i j. (i, j) \<in> A \<Longrightarrow> F i j \<in> sets borel"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   481
  shows "borel = sigma UNIV ((\<lambda>(i, j). F i j) ` A)"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   482
  using assms
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   483
  by (intro borel_eq_sigmaI1[where X="(\<lambda>(i, j). G i j) ` B" and F="(\<lambda>(i, j). F i j)"]) auto
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   484
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   485
lemma borel_eq_sigmaI3:
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   486
  fixes F :: "'i \<Rightarrow> 'j \<Rightarrow> 'a::topological_space set" and X :: "'a::topological_space set set"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   487
  assumes borel_eq: "borel = sigma UNIV X"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   488
  assumes X: "\<And>x. x \<in> X \<Longrightarrow> x \<in> sets (sigma UNIV ((\<lambda>(i, j). F i j) ` A))"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   489
  assumes F: "\<And>i j. (i, j) \<in> A \<Longrightarrow> F i j \<in> sets borel"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   490
  shows "borel = sigma UNIV ((\<lambda>(i, j). F i j) ` A)"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   491
  using assms by (intro borel_eq_sigmaI1[where X=X and F="(\<lambda>(i, j). F i j)"]) auto
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   492
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   493
lemma borel_eq_sigmaI4:
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   494
  fixes F :: "'i \<Rightarrow> 'a::topological_space set"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   495
    and G :: "'l \<Rightarrow> 'k \<Rightarrow> 'a::topological_space set"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   496
  assumes borel_eq: "borel = sigma UNIV ((\<lambda>(i, j). G i j)`A)"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   497
  assumes X: "\<And>i j. (i, j) \<in> A \<Longrightarrow> G i j \<in> sets (sigma UNIV (range F))"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   498
  assumes F: "\<And>i. F i \<in> sets borel"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   499
  shows "borel = sigma UNIV (range F)"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   500
  using assms by (intro borel_eq_sigmaI1[where X="(\<lambda>(i, j). G i j) ` A" and F=F]) auto
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   501
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   502
lemma borel_eq_sigmaI5:
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   503
  fixes F :: "'i \<Rightarrow> 'j \<Rightarrow> 'a::topological_space set" and G :: "'l \<Rightarrow> 'a::topological_space set"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   504
  assumes borel_eq: "borel = sigma UNIV (range G)"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   505
  assumes X: "\<And>i. G i \<in> sets (sigma UNIV (range (\<lambda>(i, j). F i j)))"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   506
  assumes F: "\<And>i j. F i j \<in> sets borel"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   507
  shows "borel = sigma UNIV (range (\<lambda>(i, j). F i j))"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   508
  using assms by (intro borel_eq_sigmaI1[where X="range G" and F="(\<lambda>(i, j). F i j)"]) auto
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   509
59088
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   510
lemma second_countable_borel_measurable:
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   511
  fixes X :: "'a::second_countable_topology set set"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   512
  assumes eq: "open = generate_topology X"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   513
  shows "borel = sigma UNIV X"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   514
  unfolding borel_def
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   515
proof (intro sigma_eqI sigma_sets_eqI)
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   516
  interpret X: sigma_algebra UNIV "sigma_sets UNIV X"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   517
    by (rule sigma_algebra_sigma_sets) simp
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   518
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   519
  fix S :: "'a set" assume "S \<in> Collect open"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   520
  then have "generate_topology X S"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   521
    by (auto simp: eq)
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   522
  then show "S \<in> sigma_sets UNIV X"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   523
  proof induction
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   524
    case (UN K)
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   525
    then have K: "\<And>k. k \<in> K \<Longrightarrow> open k"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   526
      unfolding eq by auto
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   527
    from ex_countable_basis obtain B :: "'a set set" where
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   528
      B:  "\<And>b. b \<in> B \<Longrightarrow> open b" "\<And>X. open X \<Longrightarrow> \<exists>b\<subseteq>B. (\<Union>b) = X" and "countable B"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   529
      by (auto simp: topological_basis_def)
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   530
    from B(2)[OF K] obtain m where m: "\<And>k. k \<in> K \<Longrightarrow> m k \<subseteq> B" "\<And>k. k \<in> K \<Longrightarrow> (\<Union>m k) = k"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   531
      by metis
63040
eb4ddd18d635 eliminated old 'def';
wenzelm
parents: 62975
diff changeset
   532
    define U where "U = (\<Union>k\<in>K. m k)"
59088
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   533
    with m have "countable U"
61808
fc1556774cfe isabelle update_cartouches -c -t;
wenzelm
parents: 61609
diff changeset
   534
      by (intro countable_subset[OF _ \<open>countable B\<close>]) auto
59088
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   535
    have "\<Union>U = (\<Union>A\<in>U. A)" by simp
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   536
    also have "\<dots> = \<Union>K"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   537
      unfolding U_def UN_simps by (simp add: m)
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   538
    finally have "\<Union>U = \<Union>K" .
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   539
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   540
    have "\<forall>b\<in>U. \<exists>k\<in>K. b \<subseteq> k"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   541
      using m by (auto simp: U_def)
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   542
    then obtain u where u: "\<And>b. b \<in> U \<Longrightarrow> u b \<in> K" and "\<And>b. b \<in> U \<Longrightarrow> b \<subseteq> u b"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   543
      by metis
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   544
    then have "(\<Union>b\<in>U. u b) \<subseteq> \<Union>K" "\<Union>U \<subseteq> (\<Union>b\<in>U. u b)"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   545
      by auto
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   546
    then have "\<Union>K = (\<Union>b\<in>U. u b)"
61808
fc1556774cfe isabelle update_cartouches -c -t;
wenzelm
parents: 61609
diff changeset
   547
      unfolding \<open>\<Union>U = \<Union>K\<close> by auto
59088
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   548
    also have "\<dots> \<in> sigma_sets UNIV X"
61808
fc1556774cfe isabelle update_cartouches -c -t;
wenzelm
parents: 61609
diff changeset
   549
      using u UN by (intro X.countable_UN' \<open>countable U\<close>) auto
59088
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   550
    finally show "\<Union>K \<in> sigma_sets UNIV X" .
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   551
  qed auto
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   552
qed (auto simp: eq intro: generate_topology.Basis)
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   553
62624
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   554
lemma borel_eq_closed: "borel = sigma UNIV (Collect closed)"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   555
  unfolding borel_def
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   556
proof (intro sigma_eqI sigma_sets_eqI, safe)
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   557
  fix x :: "'a set" assume "open x"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   558
  hence "x = UNIV - (UNIV - x)" by auto
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   559
  also have "\<dots> \<in> sigma_sets UNIV (Collect closed)"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   560
    by (force intro: sigma_sets.Compl simp: \<open>open x\<close>)
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   561
  finally show "x \<in> sigma_sets UNIV (Collect closed)" by simp
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   562
next
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   563
  fix x :: "'a set" assume "closed x"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   564
  hence "x = UNIV - (UNIV - x)" by auto
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   565
  also have "\<dots> \<in> sigma_sets UNIV (Collect open)"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   566
    by (force intro: sigma_sets.Compl simp: \<open>closed x\<close>)
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   567
  finally show "x \<in> sigma_sets UNIV (Collect open)" by simp
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   568
qed simp_all
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   569
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   570
lemma borel_eq_countable_basis:
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   571
  fixes B::"'a::topological_space set set"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   572
  assumes "countable B"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   573
  assumes "topological_basis B"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   574
  shows "borel = sigma UNIV B"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   575
  unfolding borel_def
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   576
proof (intro sigma_eqI sigma_sets_eqI, safe)
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   577
  interpret countable_basis using assms by unfold_locales
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   578
  fix X::"'a set" assume "open X"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   579
  from open_countable_basisE[OF this] guess B' . note B' = this
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   580
  then show "X \<in> sigma_sets UNIV B"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   581
    by (blast intro: sigma_sets_UNION \<open>countable B\<close> countable_subset)
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   582
next
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   583
  fix b assume "b \<in> B"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   584
  hence "open b" by (rule topological_basis_open[OF assms(2)])
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   585
  thus "b \<in> sigma_sets UNIV (Collect open)" by auto
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   586
qed simp_all
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   587
59361
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
   588
lemma borel_measurable_continuous_on_restrict:
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
   589
  fixes f :: "'a::topological_space \<Rightarrow> 'b::topological_space"
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
   590
  assumes f: "continuous_on A f"
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
   591
  shows "f \<in> borel_measurable (restrict_space borel A)"
57138
7b3146180291 generalizd measurability on restricted space; rule for integrability on compact sets
hoelzl
parents: 57137
diff changeset
   592
proof (rule borel_measurableI)
7b3146180291 generalizd measurability on restricted space; rule for integrability on compact sets
hoelzl
parents: 57137
diff changeset
   593
  fix S :: "'b set" assume "open S"
59361
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
   594
  with f obtain T where "f -` S \<inter> A = T \<inter> A" "open T"
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
   595
    by (metis continuous_on_open_invariant)
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
   596
  then show "f -` S \<inter> space (restrict_space borel A) \<in> sets (restrict_space borel A)"
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
   597
    by (force simp add: sets_restrict_space space_restrict_space)
57137
f174712d0a84 better support for restrict_space
hoelzl
parents: 57036
diff changeset
   598
qed
f174712d0a84 better support for restrict_space
hoelzl
parents: 57036
diff changeset
   599
59361
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
   600
lemma borel_measurable_continuous_on1: "continuous_on UNIV f \<Longrightarrow> f \<in> borel_measurable borel"
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
   601
  by (drule borel_measurable_continuous_on_restrict) simp
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
   602
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
   603
lemma borel_measurable_continuous_on_if:
59415
854fe701c984 tuned measurability proofs
hoelzl
parents: 59361
diff changeset
   604
  "A \<in> sets borel \<Longrightarrow> continuous_on A f \<Longrightarrow> continuous_on (- A) g \<Longrightarrow>
854fe701c984 tuned measurability proofs
hoelzl
parents: 59361
diff changeset
   605
    (\<lambda>x. if x \<in> A then f x else g x) \<in> borel_measurable borel"
854fe701c984 tuned measurability proofs
hoelzl
parents: 59361
diff changeset
   606
  by (auto simp add: measurable_If_restrict_space_iff Collect_neg_eq
854fe701c984 tuned measurability proofs
hoelzl
parents: 59361
diff changeset
   607
           intro!: borel_measurable_continuous_on_restrict)
59361
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
   608
57275
0ddb5b755cdc moved lemmas from the proof of the Central Limit Theorem by Jeremy Avigad and Luke Serafin
hoelzl
parents: 57259
diff changeset
   609
lemma borel_measurable_continuous_countable_exceptions:
0ddb5b755cdc moved lemmas from the proof of the Central Limit Theorem by Jeremy Avigad and Luke Serafin
hoelzl
parents: 57259
diff changeset
   610
  fixes f :: "'a::t1_space \<Rightarrow> 'b::topological_space"
0ddb5b755cdc moved lemmas from the proof of the Central Limit Theorem by Jeremy Avigad and Luke Serafin
hoelzl
parents: 57259
diff changeset
   611
  assumes X: "countable X"
0ddb5b755cdc moved lemmas from the proof of the Central Limit Theorem by Jeremy Avigad and Luke Serafin
hoelzl
parents: 57259
diff changeset
   612
  assumes "continuous_on (- X) f"
0ddb5b755cdc moved lemmas from the proof of the Central Limit Theorem by Jeremy Avigad and Luke Serafin
hoelzl
parents: 57259
diff changeset
   613
  shows "f \<in> borel_measurable borel"
0ddb5b755cdc moved lemmas from the proof of the Central Limit Theorem by Jeremy Avigad and Luke Serafin
hoelzl
parents: 57259
diff changeset
   614
proof (rule measurable_discrete_difference[OF _ X])
0ddb5b755cdc moved lemmas from the proof of the Central Limit Theorem by Jeremy Avigad and Luke Serafin
hoelzl
parents: 57259
diff changeset
   615
  have "X \<in> sets borel"
0ddb5b755cdc moved lemmas from the proof of the Central Limit Theorem by Jeremy Avigad and Luke Serafin
hoelzl
parents: 57259
diff changeset
   616
    by (rule sets.countable[OF _ X]) auto
0ddb5b755cdc moved lemmas from the proof of the Central Limit Theorem by Jeremy Avigad and Luke Serafin
hoelzl
parents: 57259
diff changeset
   617
  then show "(\<lambda>x. if x \<in> X then undefined else f x) \<in> borel_measurable borel"
0ddb5b755cdc moved lemmas from the proof of the Central Limit Theorem by Jeremy Avigad and Luke Serafin
hoelzl
parents: 57259
diff changeset
   618
    by (intro borel_measurable_continuous_on_if assms continuous_intros)
0ddb5b755cdc moved lemmas from the proof of the Central Limit Theorem by Jeremy Avigad and Luke Serafin
hoelzl
parents: 57259
diff changeset
   619
qed auto
0ddb5b755cdc moved lemmas from the proof of the Central Limit Theorem by Jeremy Avigad and Luke Serafin
hoelzl
parents: 57259
diff changeset
   620
57138
7b3146180291 generalizd measurability on restricted space; rule for integrability on compact sets
hoelzl
parents: 57137
diff changeset
   621
lemma borel_measurable_continuous_on:
7b3146180291 generalizd measurability on restricted space; rule for integrability on compact sets
hoelzl
parents: 57137
diff changeset
   622
  assumes f: "continuous_on UNIV f" and g: "g \<in> borel_measurable M"
7b3146180291 generalizd measurability on restricted space; rule for integrability on compact sets
hoelzl
parents: 57137
diff changeset
   623
  shows "(\<lambda>x. f (g x)) \<in> borel_measurable M"
7b3146180291 generalizd measurability on restricted space; rule for integrability on compact sets
hoelzl
parents: 57137
diff changeset
   624
  using measurable_comp[OF g borel_measurable_continuous_on1[OF f]] by (simp add: comp_def)
7b3146180291 generalizd measurability on restricted space; rule for integrability on compact sets
hoelzl
parents: 57137
diff changeset
   625
7b3146180291 generalizd measurability on restricted space; rule for integrability on compact sets
hoelzl
parents: 57137
diff changeset
   626
lemma borel_measurable_continuous_on_indicator:
7b3146180291 generalizd measurability on restricted space; rule for integrability on compact sets
hoelzl
parents: 57137
diff changeset
   627
  fixes f g :: "'a::topological_space \<Rightarrow> 'b::real_normed_vector"
59415
854fe701c984 tuned measurability proofs
hoelzl
parents: 59361
diff changeset
   628
  shows "A \<in> sets borel \<Longrightarrow> continuous_on A f \<Longrightarrow> (\<lambda>x. indicator A x *\<^sub>R f x) \<in> borel_measurable borel"
854fe701c984 tuned measurability proofs
hoelzl
parents: 59361
diff changeset
   629
  by (subst borel_measurable_restrict_space_iff[symmetric])
854fe701c984 tuned measurability proofs
hoelzl
parents: 59361
diff changeset
   630
     (auto intro: borel_measurable_continuous_on_restrict)
50002
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
   631
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
   632
lemma borel_measurable_Pair[measurable (raw)]:
50881
ae630bab13da renamed countable_basis_space to second_countable_topology
hoelzl
parents: 50526
diff changeset
   633
  fixes f :: "'a \<Rightarrow> 'b::second_countable_topology" and g :: "'a \<Rightarrow> 'c::second_countable_topology"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
   634
  assumes f[measurable]: "f \<in> borel_measurable M"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
   635
  assumes g[measurable]: "g \<in> borel_measurable M"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
   636
  shows "(\<lambda>x. (f x, g x)) \<in> borel_measurable M"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
   637
proof (subst borel_eq_countable_basis)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
   638
  let ?B = "SOME B::'b set set. countable B \<and> topological_basis B"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
   639
  let ?C = "SOME B::'c set set. countable B \<and> topological_basis B"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
   640
  let ?P = "(\<lambda>(b, c). b \<times> c) ` (?B \<times> ?C)"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
   641
  show "countable ?P" "topological_basis ?P"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
   642
    by (auto intro!: countable_basis topological_basis_prod is_basis)
38656
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
   643
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
   644
  show "(\<lambda>x. (f x, g x)) \<in> measurable M (sigma UNIV ?P)"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
   645
  proof (rule measurable_measure_of)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
   646
    fix S assume "S \<in> ?P"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
   647
    then obtain b c where "b \<in> ?B" "c \<in> ?C" and S: "S = b \<times> c" by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
   648
    then have borel: "open b" "open c"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
   649
      by (auto intro: is_basis topological_basis_open)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
   650
    have "(\<lambda>x. (f x, g x)) -` S \<inter> space M = (f -` b \<inter> space M) \<inter> (g -` c \<inter> space M)"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
   651
      unfolding S by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
   652
    also have "\<dots> \<in> sets M"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
   653
      using borel by simp
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
   654
    finally show "(\<lambda>x. (f x, g x)) -` S \<inter> space M \<in> sets M" .
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
   655
  qed auto
39087
96984bf6fa5b Measurable on euclidean space is equiv. to measurable components
hoelzl
parents: 39083
diff changeset
   656
qed
96984bf6fa5b Measurable on euclidean space is equiv. to measurable components
hoelzl
parents: 39083
diff changeset
   657
49774
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
   658
lemma borel_measurable_continuous_Pair:
50881
ae630bab13da renamed countable_basis_space to second_countable_topology
hoelzl
parents: 50526
diff changeset
   659
  fixes f :: "'a \<Rightarrow> 'b::second_countable_topology" and g :: "'a \<Rightarrow> 'c::second_countable_topology"
50003
8c213922ed49 use measurability prover
hoelzl
parents: 50002
diff changeset
   660
  assumes [measurable]: "f \<in> borel_measurable M"
8c213922ed49 use measurability prover
hoelzl
parents: 50002
diff changeset
   661
  assumes [measurable]: "g \<in> borel_measurable M"
49774
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
   662
  assumes H: "continuous_on UNIV (\<lambda>x. H (fst x) (snd x))"
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
   663
  shows "(\<lambda>x. H (f x) (g x)) \<in> borel_measurable M"
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
   664
proof -
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
   665
  have eq: "(\<lambda>x. H (f x) (g x)) = (\<lambda>x. (\<lambda>x. H (fst x) (snd x)) (f x, g x))" by auto
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
   666
  show ?thesis
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
   667
    unfolding eq by (rule borel_measurable_continuous_on[OF H]) auto
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
   668
qed
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
   669
61808
fc1556774cfe isabelle update_cartouches -c -t;
wenzelm
parents: 61609
diff changeset
   670
subsection \<open>Borel spaces on order topologies\<close>
59088
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   671
62624
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   672
lemma [measurable]:
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   673
  fixes a b :: "'a::linorder_topology"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   674
  shows lessThan_borel: "{..< a} \<in> sets borel"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   675
    and greaterThan_borel: "{a <..} \<in> sets borel"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   676
    and greaterThanLessThan_borel: "{a<..<b} \<in> sets borel"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   677
    and atMost_borel: "{..a} \<in> sets borel"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   678
    and atLeast_borel: "{a..} \<in> sets borel"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   679
    and atLeastAtMost_borel: "{a..b} \<in> sets borel"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   680
    and greaterThanAtMost_borel: "{a<..b} \<in> sets borel"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   681
    and atLeastLessThan_borel: "{a..<b} \<in> sets borel"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   682
  unfolding greaterThanAtMost_def atLeastLessThan_def
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   683
  by (blast intro: borel_open borel_closed open_lessThan open_greaterThan open_greaterThanLessThan
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   684
                   closed_atMost closed_atLeast closed_atLeastAtMost)+
59088
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   685
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   686
lemma borel_Iio:
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   687
  "borel = sigma UNIV (range lessThan :: 'a::{linorder_topology, second_countable_topology} set set)"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   688
  unfolding second_countable_borel_measurable[OF open_generated_order]
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   689
proof (intro sigma_eqI sigma_sets_eqI)
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   690
  from countable_dense_setE guess D :: "'a set" . note D = this
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   691
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   692
  interpret L: sigma_algebra UNIV "sigma_sets UNIV (range lessThan)"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   693
    by (rule sigma_algebra_sigma_sets) simp
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   694
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   695
  fix A :: "'a set" assume "A \<in> range lessThan \<union> range greaterThan"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   696
  then obtain y where "A = {y <..} \<or> A = {..< y}"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   697
    by blast
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   698
  then show "A \<in> sigma_sets UNIV (range lessThan)"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   699
  proof
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   700
    assume A: "A = {y <..}"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   701
    show ?thesis
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   702
    proof cases
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   703
      assume "\<forall>x>y. \<exists>d. y < d \<and> d < x"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   704
      with D(2)[of "{y <..< x}" for x] have "\<forall>x>y. \<exists>d\<in>D. y < d \<and> d < x"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   705
        by (auto simp: set_eq_iff)
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   706
      then have "A = UNIV - (\<Inter>d\<in>{d\<in>D. y < d}. {..< d})"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   707
        by (auto simp: A) (metis less_asym)
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   708
      also have "\<dots> \<in> sigma_sets UNIV (range lessThan)"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   709
        using D(1) by (intro L.Diff L.top L.countable_INT'') auto
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   710
      finally show ?thesis .
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   711
    next
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   712
      assume "\<not> (\<forall>x>y. \<exists>d. y < d \<and> d < x)"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   713
      then obtain x where "y < x"  "\<And>d. y < d \<Longrightarrow> \<not> d < x"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   714
        by auto
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   715
      then have "A = UNIV - {..< x}"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   716
        unfolding A by (auto simp: not_less[symmetric])
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   717
      also have "\<dots> \<in> sigma_sets UNIV (range lessThan)"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   718
        by auto
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   719
      finally show ?thesis .
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   720
    qed
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   721
  qed auto
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   722
qed auto
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   723
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   724
lemma borel_Ioi:
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   725
  "borel = sigma UNIV (range greaterThan :: 'a::{linorder_topology, second_countable_topology} set set)"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   726
  unfolding second_countable_borel_measurable[OF open_generated_order]
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   727
proof (intro sigma_eqI sigma_sets_eqI)
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   728
  from countable_dense_setE guess D :: "'a set" . note D = this
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   729
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   730
  interpret L: sigma_algebra UNIV "sigma_sets UNIV (range greaterThan)"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   731
    by (rule sigma_algebra_sigma_sets) simp
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   732
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   733
  fix A :: "'a set" assume "A \<in> range lessThan \<union> range greaterThan"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   734
  then obtain y where "A = {y <..} \<or> A = {..< y}"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   735
    by blast
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   736
  then show "A \<in> sigma_sets UNIV (range greaterThan)"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   737
  proof
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   738
    assume A: "A = {..< y}"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   739
    show ?thesis
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   740
    proof cases
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   741
      assume "\<forall>x<y. \<exists>d. x < d \<and> d < y"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   742
      with D(2)[of "{x <..< y}" for x] have "\<forall>x<y. \<exists>d\<in>D. x < d \<and> d < y"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   743
        by (auto simp: set_eq_iff)
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   744
      then have "A = UNIV - (\<Inter>d\<in>{d\<in>D. d < y}. {d <..})"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   745
        by (auto simp: A) (metis less_asym)
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   746
      also have "\<dots> \<in> sigma_sets UNIV (range greaterThan)"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   747
        using D(1) by (intro L.Diff L.top L.countable_INT'') auto
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   748
      finally show ?thesis .
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   749
    next
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   750
      assume "\<not> (\<forall>x<y. \<exists>d. x < d \<and> d < y)"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   751
      then obtain x where "x < y"  "\<And>d. y > d \<Longrightarrow> x \<ge> d"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   752
        by (auto simp: not_less[symmetric])
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   753
      then have "A = UNIV - {x <..}"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   754
        unfolding A Compl_eq_Diff_UNIV[symmetric] by auto
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   755
      also have "\<dots> \<in> sigma_sets UNIV (range greaterThan)"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   756
        by auto
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   757
      finally show ?thesis .
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   758
    qed
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   759
  qed auto
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   760
qed auto
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   761
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   762
lemma borel_measurableI_less:
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   763
  fixes f :: "'a \<Rightarrow> 'b::{linorder_topology, second_countable_topology}"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   764
  shows "(\<And>y. {x\<in>space M. f x < y} \<in> sets M) \<Longrightarrow> f \<in> borel_measurable M"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   765
  unfolding borel_Iio
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   766
  by (rule measurable_measure_of) (auto simp: Int_def conj_commute)
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   767
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   768
lemma borel_measurableI_greater:
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   769
  fixes f :: "'a \<Rightarrow> 'b::{linorder_topology, second_countable_topology}"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   770
  shows "(\<And>y. {x\<in>space M. y < f x} \<in> sets M) \<Longrightarrow> f \<in> borel_measurable M"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   771
  unfolding borel_Ioi
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   772
  by (rule measurable_measure_of) (auto simp: Int_def conj_commute)
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   773
62624
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   774
lemma borel_measurableI_le:
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   775
  fixes f :: "'a \<Rightarrow> 'b::{linorder_topology, second_countable_topology}"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   776
  shows "(\<And>y. {x\<in>space M. f x \<le> y} \<in> sets M) \<Longrightarrow> f \<in> borel_measurable M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   777
  by (rule borel_measurableI_greater) (auto simp: not_le[symmetric])
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   778
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   779
lemma borel_measurableI_ge:
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   780
  fixes f :: "'a \<Rightarrow> 'b::{linorder_topology, second_countable_topology}"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   781
  shows "(\<And>y. {x\<in>space M. y \<le> f x} \<in> sets M) \<Longrightarrow> f \<in> borel_measurable M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   782
  by (rule borel_measurableI_less) (auto simp: not_le[symmetric])
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   783
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   784
lemma borel_measurable_less[measurable]:
63332
f164526d8727 move open_Collect_eq/less to HOL
hoelzl
parents: 63167
diff changeset
   785
  fixes f :: "'a \<Rightarrow> 'b::{second_countable_topology, linorder_topology}"
62624
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   786
  assumes "f \<in> borel_measurable M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   787
  assumes "g \<in> borel_measurable M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   788
  shows "{w \<in> space M. f w < g w} \<in> sets M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   789
proof -
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   790
  have "{w \<in> space M. f w < g w} = (\<lambda>x. (f x, g x)) -` {x. fst x < snd x} \<inter> space M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   791
    by auto
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   792
  also have "\<dots> \<in> sets M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   793
    by (intro measurable_sets[OF borel_measurable_Pair borel_open, OF assms open_Collect_less]
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   794
              continuous_intros)
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   795
  finally show ?thesis .
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   796
qed
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   797
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   798
lemma
63332
f164526d8727 move open_Collect_eq/less to HOL
hoelzl
parents: 63167
diff changeset
   799
  fixes f :: "'a \<Rightarrow> 'b::{second_countable_topology, linorder_topology}"
62624
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   800
  assumes f[measurable]: "f \<in> borel_measurable M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   801
  assumes g[measurable]: "g \<in> borel_measurable M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   802
  shows borel_measurable_le[measurable]: "{w \<in> space M. f w \<le> g w} \<in> sets M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   803
    and borel_measurable_eq[measurable]: "{w \<in> space M. f w = g w} \<in> sets M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   804
    and borel_measurable_neq: "{w \<in> space M. f w \<noteq> g w} \<in> sets M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   805
  unfolding eq_iff not_less[symmetric]
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   806
  by measurable
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   807
59088
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   808
lemma borel_measurable_SUP[measurable (raw)]:
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   809
  fixes F :: "_ \<Rightarrow> _ \<Rightarrow> _::{complete_linorder, linorder_topology, second_countable_topology}"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   810
  assumes [simp]: "countable I"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   811
  assumes [measurable]: "\<And>i. i \<in> I \<Longrightarrow> F i \<in> borel_measurable M"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   812
  shows "(\<lambda>x. SUP i:I. F i x) \<in> borel_measurable M"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   813
  by (rule borel_measurableI_greater) (simp add: less_SUP_iff)
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   814
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   815
lemma borel_measurable_INF[measurable (raw)]:
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   816
  fixes F :: "_ \<Rightarrow> _ \<Rightarrow> _::{complete_linorder, linorder_topology, second_countable_topology}"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   817
  assumes [simp]: "countable I"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   818
  assumes [measurable]: "\<And>i. i \<in> I \<Longrightarrow> F i \<in> borel_measurable M"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   819
  shows "(\<lambda>x. INF i:I. F i x) \<in> borel_measurable M"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   820
  by (rule borel_measurableI_less) (simp add: INF_less_iff)
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   821
62624
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   822
lemma borel_measurable_cSUP[measurable (raw)]:
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   823
  fixes F :: "_ \<Rightarrow> _ \<Rightarrow> 'a::{conditionally_complete_linorder, linorder_topology, second_countable_topology}"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   824
  assumes [simp]: "countable I"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   825
  assumes [measurable]: "\<And>i. i \<in> I \<Longrightarrow> F i \<in> borel_measurable M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   826
  assumes bdd: "\<And>x. x \<in> space M \<Longrightarrow> bdd_above ((\<lambda>i. F i x) ` I)"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   827
  shows "(\<lambda>x. SUP i:I. F i x) \<in> borel_measurable M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   828
proof cases
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   829
  assume "I = {}" then show ?thesis
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   830
    unfolding \<open>I = {}\<close> image_empty by simp
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   831
next
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   832
  assume "I \<noteq> {}"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   833
  show ?thesis
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   834
  proof (rule borel_measurableI_le)
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   835
    fix y
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   836
    have "{x \<in> space M. \<forall>i\<in>I. F i x \<le> y} \<in> sets M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   837
      by measurable
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   838
    also have "{x \<in> space M. \<forall>i\<in>I. F i x \<le> y} = {x \<in> space M. (SUP i:I. F i x) \<le> y}"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   839
      by (simp add: cSUP_le_iff \<open>I \<noteq> {}\<close> bdd cong: conj_cong)
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   840
    finally show "{x \<in> space M. (SUP i:I. F i x) \<le>  y} \<in> sets M"  .
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   841
  qed
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   842
qed
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   843
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   844
lemma borel_measurable_cINF[measurable (raw)]:
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   845
  fixes F :: "_ \<Rightarrow> _ \<Rightarrow> 'a::{conditionally_complete_linorder, linorder_topology, second_countable_topology}"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   846
  assumes [simp]: "countable I"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   847
  assumes [measurable]: "\<And>i. i \<in> I \<Longrightarrow> F i \<in> borel_measurable M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   848
  assumes bdd: "\<And>x. x \<in> space M \<Longrightarrow> bdd_below ((\<lambda>i. F i x) ` I)"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   849
  shows "(\<lambda>x. INF i:I. F i x) \<in> borel_measurable M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   850
proof cases
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   851
  assume "I = {}" then show ?thesis
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   852
    unfolding \<open>I = {}\<close> image_empty by simp
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   853
next
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   854
  assume "I \<noteq> {}"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   855
  show ?thesis
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   856
  proof (rule borel_measurableI_ge)
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   857
    fix y
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   858
    have "{x \<in> space M. \<forall>i\<in>I. y \<le> F i x} \<in> sets M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   859
      by measurable
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   860
    also have "{x \<in> space M. \<forall>i\<in>I. y \<le> F i x} = {x \<in> space M. y \<le> (INF i:I. F i x)}"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   861
      by (simp add: le_cINF_iff \<open>I \<noteq> {}\<close> bdd cong: conj_cong)
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   862
    finally show "{x \<in> space M. y \<le> (INF i:I. F i x)} \<in> sets M"  .
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   863
  qed
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   864
qed
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   865
59088
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   866
lemma borel_measurable_lfp[consumes 1, case_names continuity step]:
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   867
  fixes F :: "('a \<Rightarrow> 'b) \<Rightarrow> ('a \<Rightarrow> 'b::{complete_linorder, linorder_topology, second_countable_topology})"
60172
423273355b55 rename continuous and down_continuous in Order_Continuity to sup_/inf_continuous; relate them with topological continuity
hoelzl
parents: 60150
diff changeset
   868
  assumes "sup_continuous F"
59088
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   869
  assumes *: "\<And>f. f \<in> borel_measurable M \<Longrightarrow> F f \<in> borel_measurable M"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   870
  shows "lfp F \<in> borel_measurable M"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   871
proof -
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   872
  { fix i have "((F ^^ i) bot) \<in> borel_measurable M"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   873
      by (induct i) (auto intro!: *) }
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   874
  then have "(\<lambda>x. SUP i. (F ^^ i) bot x) \<in> borel_measurable M"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   875
    by measurable
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   876
  also have "(\<lambda>x. SUP i. (F ^^ i) bot x) = (SUP i. (F ^^ i) bot)"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   877
    by auto
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   878
  also have "(SUP i. (F ^^ i) bot) = lfp F"
60172
423273355b55 rename continuous and down_continuous in Order_Continuity to sup_/inf_continuous; relate them with topological continuity
hoelzl
parents: 60150
diff changeset
   879
    by (rule sup_continuous_lfp[symmetric]) fact
59088
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   880
  finally show ?thesis .
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   881
qed
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   882
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   883
lemma borel_measurable_gfp[consumes 1, case_names continuity step]:
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   884
  fixes F :: "('a \<Rightarrow> 'b) \<Rightarrow> ('a \<Rightarrow> 'b::{complete_linorder, linorder_topology, second_countable_topology})"
60172
423273355b55 rename continuous and down_continuous in Order_Continuity to sup_/inf_continuous; relate them with topological continuity
hoelzl
parents: 60150
diff changeset
   885
  assumes "inf_continuous F"
59088
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   886
  assumes *: "\<And>f. f \<in> borel_measurable M \<Longrightarrow> F f \<in> borel_measurable M"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   887
  shows "gfp F \<in> borel_measurable M"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   888
proof -
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   889
  { fix i have "((F ^^ i) top) \<in> borel_measurable M"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   890
      by (induct i) (auto intro!: * simp: bot_fun_def) }
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   891
  then have "(\<lambda>x. INF i. (F ^^ i) top x) \<in> borel_measurable M"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   892
    by measurable
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   893
  also have "(\<lambda>x. INF i. (F ^^ i) top x) = (INF i. (F ^^ i) top)"
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   894
    by auto
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   895
  also have "\<dots> = gfp F"
60172
423273355b55 rename continuous and down_continuous in Order_Continuity to sup_/inf_continuous; relate them with topological continuity
hoelzl
parents: 60150
diff changeset
   896
    by (rule inf_continuous_gfp[symmetric]) fact
59088
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   897
  finally show ?thesis .
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   898
qed
ff2bd4a14ddb generalized (borel_)measurable_SUP/INF/lfp/gfp; tuned proofs for sigma-closure of product spaces
hoelzl
parents: 59000
diff changeset
   899
62624
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   900
lemma borel_measurable_max[measurable (raw)]:
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   901
  "f \<in> borel_measurable M \<Longrightarrow> g \<in> borel_measurable M \<Longrightarrow> (\<lambda>x. max (g x) (f x) :: 'b::{second_countable_topology, linorder_topology}) \<in> borel_measurable M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   902
  by (rule borel_measurableI_less) simp
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   903
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   904
lemma borel_measurable_min[measurable (raw)]:
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   905
  "f \<in> borel_measurable M \<Longrightarrow> g \<in> borel_measurable M \<Longrightarrow> (\<lambda>x. min (g x) (f x) :: 'b::{second_countable_topology, linorder_topology}) \<in> borel_measurable M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   906
  by (rule borel_measurableI_greater) simp
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   907
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   908
lemma borel_measurable_Min[measurable (raw)]:
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   909
  "finite I \<Longrightarrow> (\<And>i. i \<in> I \<Longrightarrow> f i \<in> borel_measurable M) \<Longrightarrow> (\<lambda>x. Min ((\<lambda>i. f i x)`I) :: 'b::{second_countable_topology, linorder_topology}) \<in> borel_measurable M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   910
proof (induct I rule: finite_induct)
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   911
  case (insert i I) then show ?case
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   912
    by (cases "I = {}") auto
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   913
qed auto
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   914
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   915
lemma borel_measurable_Max[measurable (raw)]:
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   916
  "finite I \<Longrightarrow> (\<And>i. i \<in> I \<Longrightarrow> f i \<in> borel_measurable M) \<Longrightarrow> (\<lambda>x. Max ((\<lambda>i. f i x)`I) :: 'b::{second_countable_topology, linorder_topology}) \<in> borel_measurable M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   917
proof (induct I rule: finite_induct)
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   918
  case (insert i I) then show ?case
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   919
    by (cases "I = {}") auto
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   920
qed auto
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   921
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   922
lemma borel_measurable_sup[measurable (raw)]:
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   923
  "f \<in> borel_measurable M \<Longrightarrow> g \<in> borel_measurable M \<Longrightarrow> (\<lambda>x. sup (g x) (f x) :: 'b::{lattice, second_countable_topology, linorder_topology}) \<in> borel_measurable M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   924
  unfolding sup_max by measurable
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   925
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   926
lemma borel_measurable_inf[measurable (raw)]:
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   927
  "f \<in> borel_measurable M \<Longrightarrow> g \<in> borel_measurable M \<Longrightarrow> (\<lambda>x. inf (g x) (f x) :: 'b::{lattice, second_countable_topology, linorder_topology}) \<in> borel_measurable M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   928
  unfolding inf_min by measurable
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   929
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   930
lemma [measurable (raw)]:
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   931
  fixes f :: "nat \<Rightarrow> 'a \<Rightarrow> 'b::{complete_linorder, second_countable_topology, linorder_topology}"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   932
  assumes "\<And>i. f i \<in> borel_measurable M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   933
  shows borel_measurable_liminf: "(\<lambda>x. liminf (\<lambda>i. f i x)) \<in> borel_measurable M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   934
    and borel_measurable_limsup: "(\<lambda>x. limsup (\<lambda>i. f i x)) \<in> borel_measurable M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   935
  unfolding liminf_SUP_INF limsup_INF_SUP using assms by auto
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   936
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   937
lemma measurable_convergent[measurable (raw)]:
63332
f164526d8727 move open_Collect_eq/less to HOL
hoelzl
parents: 63167
diff changeset
   938
  fixes f :: "nat \<Rightarrow> 'a \<Rightarrow> 'b::{complete_linorder, second_countable_topology, linorder_topology}"
62624
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   939
  assumes [measurable]: "\<And>i. f i \<in> borel_measurable M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   940
  shows "Measurable.pred M (\<lambda>x. convergent (\<lambda>i. f i x))"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   941
  unfolding convergent_ereal by measurable
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   942
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   943
lemma sets_Collect_convergent[measurable]:
63332
f164526d8727 move open_Collect_eq/less to HOL
hoelzl
parents: 63167
diff changeset
   944
  fixes f :: "nat \<Rightarrow> 'a \<Rightarrow> 'b::{complete_linorder, second_countable_topology, linorder_topology}"
62624
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   945
  assumes f[measurable]: "\<And>i. f i \<in> borel_measurable M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   946
  shows "{x\<in>space M. convergent (\<lambda>i. f i x)} \<in> sets M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   947
  by measurable
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   948
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   949
lemma borel_measurable_lim[measurable (raw)]:
63332
f164526d8727 move open_Collect_eq/less to HOL
hoelzl
parents: 63167
diff changeset
   950
  fixes f :: "nat \<Rightarrow> 'a \<Rightarrow> 'b::{complete_linorder, second_countable_topology, linorder_topology}"
62624
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   951
  assumes [measurable]: "\<And>i. f i \<in> borel_measurable M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   952
  shows "(\<lambda>x. lim (\<lambda>i. f i x)) \<in> borel_measurable M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   953
proof -
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   954
  have "\<And>x. lim (\<lambda>i. f i x) = (if convergent (\<lambda>i. f i x) then limsup (\<lambda>i. f i x) else (THE i. False))"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   955
    by (simp add: lim_def convergent_def convergent_limsup_cl)
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   956
  then show ?thesis
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   957
    by simp
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   958
qed
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   959
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   960
lemma borel_measurable_LIMSEQ_order:
63332
f164526d8727 move open_Collect_eq/less to HOL
hoelzl
parents: 63167
diff changeset
   961
  fixes u :: "nat \<Rightarrow> 'a \<Rightarrow> 'b::{complete_linorder, second_countable_topology, linorder_topology}"
62624
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   962
  assumes u': "\<And>x. x \<in> space M \<Longrightarrow> (\<lambda>i. u i x) \<longlonglongrightarrow> u' x"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   963
  and u: "\<And>i. u i \<in> borel_measurable M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   964
  shows "u' \<in> borel_measurable M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   965
proof -
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   966
  have "\<And>x. x \<in> space M \<Longrightarrow> u' x = liminf (\<lambda>n. u n x)"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   967
    using u' by (simp add: lim_imp_Liminf[symmetric])
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   968
  with u show ?thesis by (simp cong: measurable_cong)
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   969
qed
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   970
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   971
subsection \<open>Borel spaces on topological monoids\<close>
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   972
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   973
lemma borel_measurable_add[measurable (raw)]:
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   974
  fixes f g :: "'a \<Rightarrow> 'b::{second_countable_topology, topological_monoid_add}"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   975
  assumes f: "f \<in> borel_measurable M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   976
  assumes g: "g \<in> borel_measurable M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   977
  shows "(\<lambda>x. f x + g x) \<in> borel_measurable M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   978
  using f g by (rule borel_measurable_continuous_Pair) (intro continuous_intros)
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   979
64267
b9a1486e79be setsum -> sum
nipkow
parents: 64008
diff changeset
   980
lemma borel_measurable_sum[measurable (raw)]:
62624
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   981
  fixes f :: "'c \<Rightarrow> 'a \<Rightarrow> 'b::{second_countable_topology, topological_comm_monoid_add}"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   982
  assumes "\<And>i. i \<in> S \<Longrightarrow> f i \<in> borel_measurable M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   983
  shows "(\<lambda>x. \<Sum>i\<in>S. f i x) \<in> borel_measurable M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   984
proof cases
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   985
  assume "finite S"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   986
  thus ?thesis using assms by induct auto
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   987
qed simp
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   988
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   989
lemma borel_measurable_suminf_order[measurable (raw)]:
63332
f164526d8727 move open_Collect_eq/less to HOL
hoelzl
parents: 63167
diff changeset
   990
  fixes f :: "nat \<Rightarrow> 'a \<Rightarrow> 'b::{complete_linorder, second_countable_topology, linorder_topology, topological_comm_monoid_add}"
62624
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   991
  assumes f[measurable]: "\<And>i. f i \<in> borel_measurable M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   992
  shows "(\<lambda>x. suminf (\<lambda>i. f i x)) \<in> borel_measurable M"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   993
  unfolding suminf_def sums_def[abs_def] lim_def[symmetric] by simp
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   994
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
   995
subsection \<open>Borel spaces on Euclidean spaces\<close>
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
   996
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
   997
lemma borel_measurable_inner[measurable (raw)]:
50881
ae630bab13da renamed countable_basis_space to second_countable_topology
hoelzl
parents: 50526
diff changeset
   998
  fixes f g :: "'a \<Rightarrow> 'b::{second_countable_topology, real_inner}"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
   999
  assumes "f \<in> borel_measurable M"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1000
  assumes "g \<in> borel_measurable M"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1001
  shows "(\<lambda>x. f x \<bullet> g x) \<in> borel_measurable M"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1002
  using assms
56371
fb9ae0727548 extend continuous_intros; remove continuous_on_intros and isCont_intros
hoelzl
parents: 56212
diff changeset
  1003
  by (rule borel_measurable_continuous_Pair) (intro continuous_intros)
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1004
54775
2d3df8633dad prefer box over greaterThanLessThan on euclidean_space
immler
parents: 54230
diff changeset
  1005
notation
2d3df8633dad prefer box over greaterThanLessThan on euclidean_space
immler
parents: 54230
diff changeset
  1006
  eucl_less (infix "<e" 50)
2d3df8633dad prefer box over greaterThanLessThan on euclidean_space
immler
parents: 54230
diff changeset
  1007
2d3df8633dad prefer box over greaterThanLessThan on euclidean_space
immler
parents: 54230
diff changeset
  1008
lemma box_oc: "{x. a <e x \<and> x \<le> b} = {x. a <e x} \<inter> {..b}"
2d3df8633dad prefer box over greaterThanLessThan on euclidean_space
immler
parents: 54230
diff changeset
  1009
  and box_co: "{x. a \<le> x \<and> x <e b} = {a..} \<inter> {x. x <e b}"
2d3df8633dad prefer box over greaterThanLessThan on euclidean_space
immler
parents: 54230
diff changeset
  1010
  by auto
2d3df8633dad prefer box over greaterThanLessThan on euclidean_space
immler
parents: 54230
diff changeset
  1011
51683
baefa3b461c2 generalize Borel-set properties from real/ereal/ordered_euclidean_spaces to order_topology and real_normed_vector
hoelzl
parents: 51478
diff changeset
  1012
lemma eucl_ivals[measurable]:
61076
bdc1e2f0a86a eliminated \<Colon>;
wenzelm
parents: 60771
diff changeset
  1013
  fixes a b :: "'a::ordered_euclidean_space"
54775
2d3df8633dad prefer box over greaterThanLessThan on euclidean_space
immler
parents: 54230
diff changeset
  1014
  shows "{x. x <e a} \<in> sets borel"
2d3df8633dad prefer box over greaterThanLessThan on euclidean_space
immler
parents: 54230
diff changeset
  1015
    and "{x. a <e x} \<in> sets borel"
51683
baefa3b461c2 generalize Borel-set properties from real/ereal/ordered_euclidean_spaces to order_topology and real_normed_vector
hoelzl
parents: 51478
diff changeset
  1016
    and "{..a} \<in> sets borel"
baefa3b461c2 generalize Borel-set properties from real/ereal/ordered_euclidean_spaces to order_topology and real_normed_vector
hoelzl
parents: 51478
diff changeset
  1017
    and "{a..} \<in> sets borel"
baefa3b461c2 generalize Borel-set properties from real/ereal/ordered_euclidean_spaces to order_topology and real_normed_vector
hoelzl
parents: 51478
diff changeset
  1018
    and "{a..b} \<in> sets borel"
54775
2d3df8633dad prefer box over greaterThanLessThan on euclidean_space
immler
parents: 54230
diff changeset
  1019
    and  "{x. a <e x \<and> x \<le> b} \<in> sets borel"
2d3df8633dad prefer box over greaterThanLessThan on euclidean_space
immler
parents: 54230
diff changeset
  1020
    and "{x. a \<le> x \<and>  x <e b} \<in> sets borel"
2d3df8633dad prefer box over greaterThanLessThan on euclidean_space
immler
parents: 54230
diff changeset
  1021
  unfolding box_oc box_co
2d3df8633dad prefer box over greaterThanLessThan on euclidean_space
immler
parents: 54230
diff changeset
  1022
  by (auto intro: borel_open borel_closed)
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1023
62372
4fe872ff91bf Borel_Space.borel is now in the type class locale
hoelzl
parents: 62083
diff changeset
  1024
lemma
51683
baefa3b461c2 generalize Borel-set properties from real/ereal/ordered_euclidean_spaces to order_topology and real_normed_vector
hoelzl
parents: 51478
diff changeset
  1025
  fixes i :: "'a::{second_countable_topology, real_inner}"
baefa3b461c2 generalize Borel-set properties from real/ereal/ordered_euclidean_spaces to order_topology and real_normed_vector
hoelzl
parents: 51478
diff changeset
  1026
  shows hafspace_less_borel: "{x. a < x \<bullet> i} \<in> sets borel"
baefa3b461c2 generalize Borel-set properties from real/ereal/ordered_euclidean_spaces to order_topology and real_normed_vector
hoelzl
parents: 51478
diff changeset
  1027
    and hafspace_greater_borel: "{x. x \<bullet> i < a} \<in> sets borel"
baefa3b461c2 generalize Borel-set properties from real/ereal/ordered_euclidean_spaces to order_topology and real_normed_vector
hoelzl
parents: 51478
diff changeset
  1028
    and hafspace_less_eq_borel: "{x. a \<le> x \<bullet> i} \<in> sets borel"
baefa3b461c2 generalize Borel-set properties from real/ereal/ordered_euclidean_spaces to order_topology and real_normed_vector
hoelzl
parents: 51478
diff changeset
  1029
    and hafspace_greater_eq_borel: "{x. x \<bullet> i \<le> a} \<in> sets borel"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1030
  by simp_all
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1031
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1032
lemma borel_eq_box:
61076
bdc1e2f0a86a eliminated \<Colon>;
wenzelm
parents: 60771
diff changeset
  1033
  "borel = sigma UNIV (range (\<lambda> (a, b). box a b :: 'a :: euclidean_space set))"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1034
    (is "_ = ?SIGMA")
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1035
proof (rule borel_eq_sigmaI1[OF borel_def])
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1036
  fix M :: "'a set" assume "M \<in> {S. open S}"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1037
  then have "open M" by simp
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1038
  show "M \<in> ?SIGMA"
61808
fc1556774cfe isabelle update_cartouches -c -t;
wenzelm
parents: 61609
diff changeset
  1039
    apply (subst open_UNION_box[OF \<open>open M\<close>])
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1040
    apply (safe intro!: sets.countable_UN' countable_PiE countable_Collect)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1041
    apply (auto intro: countable_rat)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1042
    done
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1043
qed (auto simp: box_def)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1044
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1045
lemma halfspace_gt_in_halfspace:
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1046
  assumes i: "i \<in> A"
62372
4fe872ff91bf Borel_Space.borel is now in the type class locale
hoelzl
parents: 62083
diff changeset
  1047
  shows "{x::'a. a < x \<bullet> i} \<in>
61076
bdc1e2f0a86a eliminated \<Colon>;
wenzelm
parents: 60771
diff changeset
  1048
    sigma_sets UNIV ((\<lambda> (a, i). {x::'a::euclidean_space. x \<bullet> i < a}) ` (UNIV \<times> A))"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1049
  (is "?set \<in> ?SIGMA")
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1050
proof -
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1051
  interpret sigma_algebra UNIV ?SIGMA
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1052
    by (intro sigma_algebra_sigma_sets) simp_all
61076
bdc1e2f0a86a eliminated \<Colon>;
wenzelm
parents: 60771
diff changeset
  1053
  have *: "?set = (\<Union>n. UNIV - {x::'a. x \<bullet> i < a + 1 / real (Suc n)})"
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61424
diff changeset
  1054
  proof (safe, simp_all add: not_less del: of_nat_Suc)
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1055
    fix x :: 'a assume "a < x \<bullet> i"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1056
    with reals_Archimedean[of "x \<bullet> i - a"]
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1057
    obtain n where "a + 1 / real (Suc n) < x \<bullet> i"
59361
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1058
      by (auto simp: field_simps)
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1059
    then show "\<exists>n. a + 1 / real (Suc n) \<le> x \<bullet> i"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1060
      by (blast intro: less_imp_le)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1061
  next
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1062
    fix x n
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1063
    have "a < a + 1 / real (Suc n)" by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1064
    also assume "\<dots> \<le> x"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1065
    finally show "a < x" .
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1066
  qed
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1067
  show "?set \<in> ?SIGMA" unfolding *
61424
c3658c18b7bc prod_case as canonical name for product type eliminator
haftmann
parents: 61284
diff changeset
  1068
    by (auto intro!: Diff sigma_sets_Inter i)
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1069
qed
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1070
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1071
lemma borel_eq_halfspace_less:
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1072
  "borel = sigma UNIV ((\<lambda>(a, i). {x::'a::euclidean_space. x \<bullet> i < a}) ` (UNIV \<times> Basis))"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1073
  (is "_ = ?SIGMA")
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1074
proof (rule borel_eq_sigmaI2[OF borel_eq_box])
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1075
  fix a b :: 'a
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1076
  have "box a b = {x\<in>space ?SIGMA. \<forall>i\<in>Basis. a \<bullet> i < x \<bullet> i \<and> x \<bullet> i < b \<bullet> i}"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1077
    by (auto simp: box_def)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1078
  also have "\<dots> \<in> sets ?SIGMA"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1079
    by (intro sets.sets_Collect_conj sets.sets_Collect_finite_All sets.sets_Collect_const)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1080
       (auto intro!: halfspace_gt_in_halfspace countable_PiE countable_rat)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1081
  finally show "box a b \<in> sets ?SIGMA" .
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1082
qed auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1083
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1084
lemma borel_eq_halfspace_le:
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1085
  "borel = sigma UNIV ((\<lambda> (a, i). {x::'a::euclidean_space. x \<bullet> i \<le> a}) ` (UNIV \<times> Basis))"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1086
  (is "_ = ?SIGMA")
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1087
proof (rule borel_eq_sigmaI2[OF borel_eq_halfspace_less])
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1088
  fix a :: real and i :: 'a assume "(a, i) \<in> UNIV \<times> Basis"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1089
  then have i: "i \<in> Basis" by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1090
  have *: "{x::'a. x\<bullet>i < a} = (\<Union>n. {x. x\<bullet>i \<le> a - 1/real (Suc n)})"
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61424
diff changeset
  1091
  proof (safe, simp_all del: of_nat_Suc)
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1092
    fix x::'a assume *: "x\<bullet>i < a"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1093
    with reals_Archimedean[of "a - x\<bullet>i"]
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1094
    obtain n where "x \<bullet> i < a - 1 / (real (Suc n))"
59361
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1095
      by (auto simp: field_simps)
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1096
    then show "\<exists>n. x \<bullet> i \<le> a - 1 / (real (Suc n))"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1097
      by (blast intro: less_imp_le)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1098
  next
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1099
    fix x::'a and n
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1100
    assume "x\<bullet>i \<le> a - 1 / real (Suc n)"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1101
    also have "\<dots> < a" by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1102
    finally show "x\<bullet>i < a" .
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1103
  qed
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1104
  show "{x. x\<bullet>i < a} \<in> ?SIGMA" unfolding *
59361
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1105
    by (intro sets.countable_UN) (auto intro: i)
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1106
qed auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1107
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1108
lemma borel_eq_halfspace_ge:
61076
bdc1e2f0a86a eliminated \<Colon>;
wenzelm
parents: 60771
diff changeset
  1109
  "borel = sigma UNIV ((\<lambda> (a, i). {x::'a::euclidean_space. a \<le> x \<bullet> i}) ` (UNIV \<times> Basis))"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1110
  (is "_ = ?SIGMA")
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1111
proof (rule borel_eq_sigmaI2[OF borel_eq_halfspace_less])
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1112
  fix a :: real and i :: 'a assume i: "(a, i) \<in> UNIV \<times> Basis"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1113
  have *: "{x::'a. x\<bullet>i < a} = space ?SIGMA - {x::'a. a \<le> x\<bullet>i}" by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1114
  show "{x. x\<bullet>i < a} \<in> ?SIGMA" unfolding *
59361
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1115
    using i by (intro sets.compl_sets) auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1116
qed auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1117
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1118
lemma borel_eq_halfspace_greater:
61076
bdc1e2f0a86a eliminated \<Colon>;
wenzelm
parents: 60771
diff changeset
  1119
  "borel = sigma UNIV ((\<lambda> (a, i). {x::'a::euclidean_space. a < x \<bullet> i}) ` (UNIV \<times> Basis))"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1120
  (is "_ = ?SIGMA")
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1121
proof (rule borel_eq_sigmaI2[OF borel_eq_halfspace_le])
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1122
  fix a :: real and i :: 'a assume "(a, i) \<in> (UNIV \<times> Basis)"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1123
  then have i: "i \<in> Basis" by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1124
  have *: "{x::'a. x\<bullet>i \<le> a} = space ?SIGMA - {x::'a. a < x\<bullet>i}" by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1125
  show "{x. x\<bullet>i \<le> a} \<in> ?SIGMA" unfolding *
59361
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1126
    by (intro sets.compl_sets) (auto intro: i)
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1127
qed auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1128
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1129
lemma borel_eq_atMost:
61076
bdc1e2f0a86a eliminated \<Colon>;
wenzelm
parents: 60771
diff changeset
  1130
  "borel = sigma UNIV (range (\<lambda>a. {..a::'a::ordered_euclidean_space}))"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1131
  (is "_ = ?SIGMA")
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1132
proof (rule borel_eq_sigmaI4[OF borel_eq_halfspace_le])
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1133
  fix a :: real and i :: 'a assume "(a, i) \<in> UNIV \<times> Basis"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1134
  then have "i \<in> Basis" by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1135
  then have *: "{x::'a. x\<bullet>i \<le> a} = (\<Union>k::nat. {.. (\<Sum>n\<in>Basis. (if n = i then a else real k)*\<^sub>R n)})"
62390
842917225d56 more canonical names
nipkow
parents: 62372
diff changeset
  1136
  proof (safe, simp_all add: eucl_le[where 'a='a] split: if_split_asm)
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1137
    fix x :: 'a
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1138
    from real_arch_simple[of "Max ((\<lambda>i. x\<bullet>i)`Basis)"] guess k::nat ..
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1139
    then have "\<And>i. i \<in> Basis \<Longrightarrow> x\<bullet>i \<le> real k"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1140
      by (subst (asm) Max_le_iff) auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1141
    then show "\<exists>k::nat. \<forall>ia\<in>Basis. ia \<noteq> i \<longrightarrow> x \<bullet> ia \<le> real k"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1142
      by (auto intro!: exI[of _ k])
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1143
  qed
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1144
  show "{x. x\<bullet>i \<le> a} \<in> ?SIGMA" unfolding *
59361
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1145
    by (intro sets.countable_UN) auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1146
qed auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1147
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1148
lemma borel_eq_greaterThan:
61076
bdc1e2f0a86a eliminated \<Colon>;
wenzelm
parents: 60771
diff changeset
  1149
  "borel = sigma UNIV (range (\<lambda>a::'a::ordered_euclidean_space. {x. a <e x}))"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1150
  (is "_ = ?SIGMA")
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1151
proof (rule borel_eq_sigmaI4[OF borel_eq_halfspace_le])
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1152
  fix a :: real and i :: 'a assume "(a, i) \<in> UNIV \<times> Basis"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1153
  then have i: "i \<in> Basis" by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1154
  have "{x::'a. x\<bullet>i \<le> a} = UNIV - {x::'a. a < x\<bullet>i}" by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1155
  also have *: "{x::'a. a < x\<bullet>i} =
54775
2d3df8633dad prefer box over greaterThanLessThan on euclidean_space
immler
parents: 54230
diff changeset
  1156
      (\<Union>k::nat. {x. (\<Sum>n\<in>Basis. (if n = i then a else -real k) *\<^sub>R n) <e x})" using i
62390
842917225d56 more canonical names
nipkow
parents: 62372
diff changeset
  1157
  proof (safe, simp_all add: eucl_less_def split: if_split_asm)
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1158
    fix x :: 'a
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1159
    from reals_Archimedean2[of "Max ((\<lambda>i. -x\<bullet>i)`Basis)"]
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1160
    guess k::nat .. note k = this
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1161
    { fix i :: 'a assume "i \<in> Basis"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1162
      then have "-x\<bullet>i < real k"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1163
        using k by (subst (asm) Max_less_iff) auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1164
      then have "- real k < x\<bullet>i" by simp }
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1165
    then show "\<exists>k::nat. \<forall>ia\<in>Basis. ia \<noteq> i \<longrightarrow> -real k < x \<bullet> ia"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1166
      by (auto intro!: exI[of _ k])
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1167
  qed
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1168
  finally show "{x. x\<bullet>i \<le> a} \<in> ?SIGMA"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1169
    apply (simp only:)
59361
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1170
    apply (intro sets.countable_UN sets.Diff)
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1171
    apply (auto intro: sigma_sets_top)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1172
    done
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1173
qed auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1174
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1175
lemma borel_eq_lessThan:
61076
bdc1e2f0a86a eliminated \<Colon>;
wenzelm
parents: 60771
diff changeset
  1176
  "borel = sigma UNIV (range (\<lambda>a::'a::ordered_euclidean_space. {x. x <e a}))"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1177
  (is "_ = ?SIGMA")
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1178
proof (rule borel_eq_sigmaI4[OF borel_eq_halfspace_ge])
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1179
  fix a :: real and i :: 'a assume "(a, i) \<in> UNIV \<times> Basis"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1180
  then have i: "i \<in> Basis" by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1181
  have "{x::'a. a \<le> x\<bullet>i} = UNIV - {x::'a. x\<bullet>i < a}" by auto
61808
fc1556774cfe isabelle update_cartouches -c -t;
wenzelm
parents: 61609
diff changeset
  1182
  also have *: "{x::'a. x\<bullet>i < a} = (\<Union>k::nat. {x. x <e (\<Sum>n\<in>Basis. (if n = i then a else real k) *\<^sub>R n)})" using \<open>i\<in> Basis\<close>
62390
842917225d56 more canonical names
nipkow
parents: 62372
diff changeset
  1183
  proof (safe, simp_all add: eucl_less_def split: if_split_asm)
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1184
    fix x :: 'a
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1185
    from reals_Archimedean2[of "Max ((\<lambda>i. x\<bullet>i)`Basis)"]
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1186
    guess k::nat .. note k = this
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1187
    { fix i :: 'a assume "i \<in> Basis"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1188
      then have "x\<bullet>i < real k"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1189
        using k by (subst (asm) Max_less_iff) auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1190
      then have "x\<bullet>i < real k" by simp }
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1191
    then show "\<exists>k::nat. \<forall>ia\<in>Basis. ia \<noteq> i \<longrightarrow> x \<bullet> ia < real k"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1192
      by (auto intro!: exI[of _ k])
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1193
  qed
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1194
  finally show "{x. a \<le> x\<bullet>i} \<in> ?SIGMA"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1195
    apply (simp only:)
59361
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1196
    apply (intro sets.countable_UN sets.Diff)
54775
2d3df8633dad prefer box over greaterThanLessThan on euclidean_space
immler
parents: 54230
diff changeset
  1197
    apply (auto intro: sigma_sets_top )
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1198
    done
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1199
qed auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1200
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1201
lemma borel_eq_atLeastAtMost:
61076
bdc1e2f0a86a eliminated \<Colon>;
wenzelm
parents: 60771
diff changeset
  1202
  "borel = sigma UNIV (range (\<lambda>(a,b). {a..b} ::'a::ordered_euclidean_space set))"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1203
  (is "_ = ?SIGMA")
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1204
proof (rule borel_eq_sigmaI5[OF borel_eq_atMost])
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1205
  fix a::'a
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1206
  have *: "{..a} = (\<Union>n::nat. {- real n *\<^sub>R One .. a})"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1207
  proof (safe, simp_all add: eucl_le[where 'a='a])
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1208
    fix x :: 'a
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1209
    from real_arch_simple[of "Max ((\<lambda>i. - x\<bullet>i)`Basis)"]
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1210
    guess k::nat .. note k = this
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1211
    { fix i :: 'a assume "i \<in> Basis"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1212
      with k have "- x\<bullet>i \<le> real k"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1213
        by (subst (asm) Max_le_iff) (auto simp: field_simps)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1214
      then have "- real k \<le> x\<bullet>i" by simp }
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1215
    then show "\<exists>n::nat. \<forall>i\<in>Basis. - real n \<le> x \<bullet> i"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1216
      by (auto intro!: exI[of _ k])
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1217
  qed
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1218
  show "{..a} \<in> ?SIGMA" unfolding *
59361
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1219
    by (intro sets.countable_UN)
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1220
       (auto intro!: sigma_sets_top)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1221
qed auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1222
62624
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
  1223
lemma borel_set_induct[consumes 1, case_names empty interval compl union]:
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
  1224
  assumes "A \<in> sets borel"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
  1225
  assumes empty: "P {}" and int: "\<And>a b. a \<le> b \<Longrightarrow> P {a..b}" and compl: "\<And>A. A \<in> sets borel \<Longrightarrow> P A \<Longrightarrow> P (-A)" and
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
  1226
          un: "\<And>f. disjoint_family f \<Longrightarrow> (\<And>i. f i \<in> sets borel) \<Longrightarrow>  (\<And>i. P (f i)) \<Longrightarrow> P (\<Union>i::nat. f i)"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
  1227
  shows "P (A::real set)"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
  1228
proof-
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
  1229
  let ?G = "range (\<lambda>(a,b). {a..b::real})"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
  1230
  have "Int_stable ?G" "?G \<subseteq> Pow UNIV" "A \<in> sigma_sets UNIV ?G"
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
  1231
      using assms(1) by (auto simp add: borel_eq_atLeastAtMost Int_stable_def)
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
  1232
  thus ?thesis
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
  1233
  proof (induction rule: sigma_sets_induct_disjoint)
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
  1234
    case (union f)
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
  1235
      from union.hyps(2) have "\<And>i. f i \<in> sets borel" by (auto simp: borel_eq_atLeastAtMost)
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
  1236
      with union show ?case by (auto intro: un)
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
  1237
  next
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
  1238
    case (basic A)
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
  1239
    then obtain a b where "A = {a .. b}" by auto
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
  1240
    then show ?case
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
  1241
      by (cases "a \<le> b") (auto intro: int empty)
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
  1242
  qed (auto intro: empty compl simp: Compl_eq_Diff_UNIV[symmetric] borel_eq_atLeastAtMost)
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
  1243
qed
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
  1244
57447
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57275
diff changeset
  1245
lemma borel_sigma_sets_Ioc: "borel = sigma UNIV (range (\<lambda>(a, b). {a <.. b::real}))"
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57275
diff changeset
  1246
proof (rule borel_eq_sigmaI5[OF borel_eq_atMost])
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57275
diff changeset
  1247
  fix i :: real
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57275
diff changeset
  1248
  have "{..i} = (\<Union>j::nat. {-j <.. i})"
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57275
diff changeset
  1249
    by (auto simp: minus_less_iff reals_Archimedean2)
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57275
diff changeset
  1250
  also have "\<dots> \<in> sets (sigma UNIV (range (\<lambda>(i, j). {i<..j})))"
62372
4fe872ff91bf Borel_Space.borel is now in the type class locale
hoelzl
parents: 62083
diff changeset
  1251
    by (intro sets.countable_nat_UN) auto
57447
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57275
diff changeset
  1252
  finally show "{..i} \<in> sets (sigma UNIV (range (\<lambda>(i, j). {i<..j})))" .
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57275
diff changeset
  1253
qed simp
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57275
diff changeset
  1254
54775
2d3df8633dad prefer box over greaterThanLessThan on euclidean_space
immler
parents: 54230
diff changeset
  1255
lemma eucl_lessThan: "{x::real. x <e a} = lessThan a"
2d3df8633dad prefer box over greaterThanLessThan on euclidean_space
immler
parents: 54230
diff changeset
  1256
  by (simp add: eucl_less_def lessThan_def)
2d3df8633dad prefer box over greaterThanLessThan on euclidean_space
immler
parents: 54230
diff changeset
  1257
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1258
lemma borel_eq_atLeastLessThan:
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1259
  "borel = sigma UNIV (range (\<lambda>(a, b). {a ..< b :: real}))" (is "_ = ?SIGMA")
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1260
proof (rule borel_eq_sigmaI5[OF borel_eq_lessThan])
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1261
  have move_uminus: "\<And>x y::real. -x \<le> y \<longleftrightarrow> -y \<le> x" by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1262
  fix x :: real
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1263
  have "{..<x} = (\<Union>i::nat. {-real i ..< x})"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1264
    by (auto simp: move_uminus real_arch_simple)
54775
2d3df8633dad prefer box over greaterThanLessThan on euclidean_space
immler
parents: 54230
diff changeset
  1265
  then show "{y. y <e x} \<in> ?SIGMA"
59361
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1266
    by (auto intro: sigma_sets.intros(2-) simp: eucl_lessThan)
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1267
qed auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1268
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1269
lemma borel_measurable_halfspacesI:
61076
bdc1e2f0a86a eliminated \<Colon>;
wenzelm
parents: 60771
diff changeset
  1270
  fixes f :: "'a \<Rightarrow> 'c::euclidean_space"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1271
  assumes F: "borel = sigma UNIV (F ` (UNIV \<times> Basis))"
62372
4fe872ff91bf Borel_Space.borel is now in the type class locale
hoelzl
parents: 62083
diff changeset
  1272
  and S_eq: "\<And>a i. S a i = f -` F (a,i) \<inter> space M"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1273
  shows "f \<in> borel_measurable M = (\<forall>i\<in>Basis. \<forall>a::real. S a i \<in> sets M)"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1274
proof safe
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1275
  fix a :: real and i :: 'b assume i: "i \<in> Basis" and f: "f \<in> borel_measurable M"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1276
  then show "S a i \<in> sets M" unfolding assms
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1277
    by (auto intro!: measurable_sets simp: assms(1))
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1278
next
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1279
  assume a: "\<forall>i\<in>Basis. \<forall>a. S a i \<in> sets M"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1280
  then show "f \<in> borel_measurable M"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1281
    by (auto intro!: measurable_measure_of simp: S_eq F)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1282
qed
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1283
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1284
lemma borel_measurable_iff_halfspace_le:
61076
bdc1e2f0a86a eliminated \<Colon>;
wenzelm
parents: 60771
diff changeset
  1285
  fixes f :: "'a \<Rightarrow> 'c::euclidean_space"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1286
  shows "f \<in> borel_measurable M = (\<forall>i\<in>Basis. \<forall>a. {w \<in> space M. f w \<bullet> i \<le> a} \<in> sets M)"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1287
  by (rule borel_measurable_halfspacesI[OF borel_eq_halfspace_le]) auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1288
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1289
lemma borel_measurable_iff_halfspace_less:
61076
bdc1e2f0a86a eliminated \<Colon>;
wenzelm
parents: 60771
diff changeset
  1290
  fixes f :: "'a \<Rightarrow> 'c::euclidean_space"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1291
  shows "f \<in> borel_measurable M \<longleftrightarrow> (\<forall>i\<in>Basis. \<forall>a. {w \<in> space M. f w \<bullet> i < a} \<in> sets M)"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1292
  by (rule borel_measurable_halfspacesI[OF borel_eq_halfspace_less]) auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1293
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1294
lemma borel_measurable_iff_halfspace_ge:
61076
bdc1e2f0a86a eliminated \<Colon>;
wenzelm
parents: 60771
diff changeset
  1295
  fixes f :: "'a \<Rightarrow> 'c::euclidean_space"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1296
  shows "f \<in> borel_measurable M = (\<forall>i\<in>Basis. \<forall>a. {w \<in> space M. a \<le> f w \<bullet> i} \<in> sets M)"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1297
  by (rule borel_measurable_halfspacesI[OF borel_eq_halfspace_ge]) auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1298
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1299
lemma borel_measurable_iff_halfspace_greater:
61076
bdc1e2f0a86a eliminated \<Colon>;
wenzelm
parents: 60771
diff changeset
  1300
  fixes f :: "'a \<Rightarrow> 'c::euclidean_space"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1301
  shows "f \<in> borel_measurable M \<longleftrightarrow> (\<forall>i\<in>Basis. \<forall>a. {w \<in> space M. a < f w \<bullet> i} \<in> sets M)"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1302
  by (rule borel_measurable_halfspacesI[OF borel_eq_halfspace_greater]) auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1303
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1304
lemma borel_measurable_iff_le:
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1305
  "(f::'a \<Rightarrow> real) \<in> borel_measurable M = (\<forall>a. {w \<in> space M. f w \<le> a} \<in> sets M)"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1306
  using borel_measurable_iff_halfspace_le[where 'c=real] by simp
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1307
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1308
lemma borel_measurable_iff_less:
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1309
  "(f::'a \<Rightarrow> real) \<in> borel_measurable M = (\<forall>a. {w \<in> space M. f w < a} \<in> sets M)"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1310
  using borel_measurable_iff_halfspace_less[where 'c=real] by simp
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1311
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1312
lemma borel_measurable_iff_ge:
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1313
  "(f::'a \<Rightarrow> real) \<in> borel_measurable M = (\<forall>a. {w \<in> space M. a \<le> f w} \<in> sets M)"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1314
  using borel_measurable_iff_halfspace_ge[where 'c=real]
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1315
  by simp
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1316
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1317
lemma borel_measurable_iff_greater:
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1318
  "(f::'a \<Rightarrow> real) \<in> borel_measurable M = (\<forall>a. {w \<in> space M. a < f w} \<in> sets M)"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1319
  using borel_measurable_iff_halfspace_greater[where 'c=real] by simp
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1320
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1321
lemma borel_measurable_euclidean_space:
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1322
  fixes f :: "'a \<Rightarrow> 'c::euclidean_space"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1323
  shows "f \<in> borel_measurable M \<longleftrightarrow> (\<forall>i\<in>Basis. (\<lambda>x. f x \<bullet> i) \<in> borel_measurable M)"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1324
proof safe
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1325
  assume f: "\<forall>i\<in>Basis. (\<lambda>x. f x \<bullet> i) \<in> borel_measurable M"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1326
  then show "f \<in> borel_measurable M"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1327
    by (subst borel_measurable_iff_halfspace_le) auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1328
qed auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1329
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1330
subsection "Borel measurable operators"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1331
56993
e5366291d6aa introduce Bochner integral: generalizes Lebesgue integral from real-valued function to functions on real-normed vector spaces
hoelzl
parents: 56371
diff changeset
  1332
lemma borel_measurable_norm[measurable]: "norm \<in> borel_measurable borel"
e5366291d6aa introduce Bochner integral: generalizes Lebesgue integral from real-valued function to functions on real-normed vector spaces
hoelzl
parents: 56371
diff changeset
  1333
  by (intro borel_measurable_continuous_on1 continuous_intros)
e5366291d6aa introduce Bochner integral: generalizes Lebesgue integral from real-valued function to functions on real-normed vector spaces
hoelzl
parents: 56371
diff changeset
  1334
57275
0ddb5b755cdc moved lemmas from the proof of the Central Limit Theorem by Jeremy Avigad and Luke Serafin
hoelzl
parents: 57259
diff changeset
  1335
lemma borel_measurable_sgn [measurable]: "(sgn::'a::real_normed_vector \<Rightarrow> 'a) \<in> borel_measurable borel"
0ddb5b755cdc moved lemmas from the proof of the Central Limit Theorem by Jeremy Avigad and Luke Serafin
hoelzl
parents: 57259
diff changeset
  1336
  by (rule borel_measurable_continuous_countable_exceptions[where X="{0}"])
0ddb5b755cdc moved lemmas from the proof of the Central Limit Theorem by Jeremy Avigad and Luke Serafin
hoelzl
parents: 57259
diff changeset
  1337
     (auto intro!: continuous_on_sgn continuous_on_id)
0ddb5b755cdc moved lemmas from the proof of the Central Limit Theorem by Jeremy Avigad and Luke Serafin
hoelzl
parents: 57259
diff changeset
  1338
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1339
lemma borel_measurable_uminus[measurable (raw)]:
51683
baefa3b461c2 generalize Borel-set properties from real/ereal/ordered_euclidean_spaces to order_topology and real_normed_vector
hoelzl
parents: 51478
diff changeset
  1340
  fixes g :: "'a \<Rightarrow> 'b::{second_countable_topology, real_normed_vector}"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1341
  assumes g: "g \<in> borel_measurable M"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1342
  shows "(\<lambda>x. - g x) \<in> borel_measurable M"
56371
fb9ae0727548 extend continuous_intros; remove continuous_on_intros and isCont_intros
hoelzl
parents: 56212
diff changeset
  1343
  by (rule borel_measurable_continuous_on[OF _ g]) (intro continuous_intros)
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1344
50003
8c213922ed49 use measurability prover
hoelzl
parents: 50002
diff changeset
  1345
lemma borel_measurable_diff[measurable (raw)]:
51683
baefa3b461c2 generalize Borel-set properties from real/ereal/ordered_euclidean_spaces to order_topology and real_normed_vector
hoelzl
parents: 51478
diff changeset
  1346
  fixes f :: "'a \<Rightarrow> 'b::{second_countable_topology, real_normed_vector}"
49774
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1347
  assumes f: "f \<in> borel_measurable M"
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1348
  assumes g: "g \<in> borel_measurable M"
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1349
  shows "(\<lambda>x. f x - g x) \<in> borel_measurable M"
54230
b1d955791529 more simplification rules on unary and binary minus
haftmann
parents: 53216
diff changeset
  1350
  using borel_measurable_add [of f M "- g"] assms by (simp add: fun_Compl_def)
49774
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1351
50003
8c213922ed49 use measurability prover
hoelzl
parents: 50002
diff changeset
  1352
lemma borel_measurable_times[measurable (raw)]:
51683
baefa3b461c2 generalize Borel-set properties from real/ereal/ordered_euclidean_spaces to order_topology and real_normed_vector
hoelzl
parents: 51478
diff changeset
  1353
  fixes f :: "'a \<Rightarrow> 'b::{second_countable_topology, real_normed_algebra}"
49774
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1354
  assumes f: "f \<in> borel_measurable M"
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1355
  assumes g: "g \<in> borel_measurable M"
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1356
  shows "(\<lambda>x. f x * g x) \<in> borel_measurable M"
56371
fb9ae0727548 extend continuous_intros; remove continuous_on_intros and isCont_intros
hoelzl
parents: 56212
diff changeset
  1357
  using f g by (rule borel_measurable_continuous_Pair) (intro continuous_intros)
51683
baefa3b461c2 generalize Borel-set properties from real/ereal/ordered_euclidean_spaces to order_topology and real_normed_vector
hoelzl
parents: 51478
diff changeset
  1358
64272
f76b6dda2e56 setprod -> prod
nipkow
parents: 64267
diff changeset
  1359
lemma borel_measurable_prod[measurable (raw)]:
51683
baefa3b461c2 generalize Borel-set properties from real/ereal/ordered_euclidean_spaces to order_topology and real_normed_vector
hoelzl
parents: 51478
diff changeset
  1360
  fixes f :: "'c \<Rightarrow> 'a \<Rightarrow> 'b::{second_countable_topology, real_normed_field}"
baefa3b461c2 generalize Borel-set properties from real/ereal/ordered_euclidean_spaces to order_topology and real_normed_vector
hoelzl
parents: 51478
diff changeset
  1361
  assumes "\<And>i. i \<in> S \<Longrightarrow> f i \<in> borel_measurable M"
baefa3b461c2 generalize Borel-set properties from real/ereal/ordered_euclidean_spaces to order_topology and real_normed_vector
hoelzl
parents: 51478
diff changeset
  1362
  shows "(\<lambda>x. \<Prod>i\<in>S. f i x) \<in> borel_measurable M"
baefa3b461c2 generalize Borel-set properties from real/ereal/ordered_euclidean_spaces to order_topology and real_normed_vector
hoelzl
parents: 51478
diff changeset
  1363
proof cases
baefa3b461c2 generalize Borel-set properties from real/ereal/ordered_euclidean_spaces to order_topology and real_normed_vector
hoelzl
parents: 51478
diff changeset
  1364
  assume "finite S"
baefa3b461c2 generalize Borel-set properties from real/ereal/ordered_euclidean_spaces to order_topology and real_normed_vector
hoelzl
parents: 51478
diff changeset
  1365
  thus ?thesis using assms by induct auto
baefa3b461c2 generalize Borel-set properties from real/ereal/ordered_euclidean_spaces to order_topology and real_normed_vector
hoelzl
parents: 51478
diff changeset
  1366
qed simp
49774
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1367
50003
8c213922ed49 use measurability prover
hoelzl
parents: 50002
diff changeset
  1368
lemma borel_measurable_dist[measurable (raw)]:
51683
baefa3b461c2 generalize Borel-set properties from real/ereal/ordered_euclidean_spaces to order_topology and real_normed_vector
hoelzl
parents: 51478
diff changeset
  1369
  fixes g f :: "'a \<Rightarrow> 'b::{second_countable_topology, metric_space}"
49774
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1370
  assumes f: "f \<in> borel_measurable M"
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1371
  assumes g: "g \<in> borel_measurable M"
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1372
  shows "(\<lambda>x. dist (f x) (g x)) \<in> borel_measurable M"
56371
fb9ae0727548 extend continuous_intros; remove continuous_on_intros and isCont_intros
hoelzl
parents: 56212
diff changeset
  1373
  using f g by (rule borel_measurable_continuous_Pair) (intro continuous_intros)
62372
4fe872ff91bf Borel_Space.borel is now in the type class locale
hoelzl
parents: 62083
diff changeset
  1374
50002
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1375
lemma borel_measurable_scaleR[measurable (raw)]:
51683
baefa3b461c2 generalize Borel-set properties from real/ereal/ordered_euclidean_spaces to order_topology and real_normed_vector
hoelzl
parents: 51478
diff changeset
  1376
  fixes g :: "'a \<Rightarrow> 'b::{second_countable_topology, real_normed_vector}"
50002
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1377
  assumes f: "f \<in> borel_measurable M"
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1378
  assumes g: "g \<in> borel_measurable M"
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1379
  shows "(\<lambda>x. f x *\<^sub>R g x) \<in> borel_measurable M"
56371
fb9ae0727548 extend continuous_intros; remove continuous_on_intros and isCont_intros
hoelzl
parents: 56212
diff changeset
  1380
  using f g by (rule borel_measurable_continuous_Pair) (intro continuous_intros)
50002
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1381
66164
2d79288b042c New theorems and much tidying up of the old ones
paulson <lp15@cam.ac.uk>
parents: 64911
diff changeset
  1382
lemma borel_measurable_uminus_eq [simp]:
2d79288b042c New theorems and much tidying up of the old ones
paulson <lp15@cam.ac.uk>
parents: 64911
diff changeset
  1383
  fixes f :: "'a \<Rightarrow> 'b::{second_countable_topology, real_normed_vector}"
2d79288b042c New theorems and much tidying up of the old ones
paulson <lp15@cam.ac.uk>
parents: 64911
diff changeset
  1384
  shows "(\<lambda>x. - f x) \<in> borel_measurable M \<longleftrightarrow> f \<in> borel_measurable M" (is "?l = ?r")
2d79288b042c New theorems and much tidying up of the old ones
paulson <lp15@cam.ac.uk>
parents: 64911
diff changeset
  1385
proof
2d79288b042c New theorems and much tidying up of the old ones
paulson <lp15@cam.ac.uk>
parents: 64911
diff changeset
  1386
  assume ?l from borel_measurable_uminus[OF this] show ?r by simp
2d79288b042c New theorems and much tidying up of the old ones
paulson <lp15@cam.ac.uk>
parents: 64911
diff changeset
  1387
qed auto
2d79288b042c New theorems and much tidying up of the old ones
paulson <lp15@cam.ac.uk>
parents: 64911
diff changeset
  1388
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46905
diff changeset
  1389
lemma affine_borel_measurable_vector:
38656
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
  1390
  fixes f :: "'a \<Rightarrow> 'x::real_normed_vector"
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
  1391
  assumes "f \<in> borel_measurable M"
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
  1392
  shows "(\<lambda>x. a + b *\<^sub>R f x) \<in> borel_measurable M"
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
  1393
proof (rule borel_measurableI)
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
  1394
  fix S :: "'x set" assume "open S"
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
  1395
  show "(\<lambda>x. a + b *\<^sub>R f x) -` S \<inter> space M \<in> sets M"
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
  1396
  proof cases
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
  1397
    assume "b \<noteq> 0"
61808
fc1556774cfe isabelle update_cartouches -c -t;
wenzelm
parents: 61609
diff changeset
  1398
    with \<open>open S\<close> have "open ((\<lambda>x. (- a + x) /\<^sub>R b) ` S)" (is "open ?S")
54230
b1d955791529 more simplification rules on unary and binary minus
haftmann
parents: 53216
diff changeset
  1399
      using open_affinity [of S "inverse b" "- a /\<^sub>R b"]
b1d955791529 more simplification rules on unary and binary minus
haftmann
parents: 53216
diff changeset
  1400
      by (auto simp: algebra_simps)
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46905
diff changeset
  1401
    hence "?S \<in> sets borel" by auto
38656
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
  1402
    moreover
61808
fc1556774cfe isabelle update_cartouches -c -t;
wenzelm
parents: 61609
diff changeset
  1403
    from \<open>b \<noteq> 0\<close> have "(\<lambda>x. a + b *\<^sub>R f x) -` S = f -` ?S"
38656
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
  1404
      apply auto by (rule_tac x="a + b *\<^sub>R f x" in image_eqI, simp_all)
40859
de0b30e6c2d2 Support product spaces on sigma finite measures.
hoelzl
parents: 39302
diff changeset
  1405
    ultimately show ?thesis using assms unfolding in_borel_measurable_borel
38656
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
  1406
      by auto
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
  1407
  qed simp
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
  1408
qed
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
  1409
50002
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1410
lemma borel_measurable_const_scaleR[measurable (raw)]:
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1411
  "f \<in> borel_measurable M \<Longrightarrow> (\<lambda>x. b *\<^sub>R f x ::'a::real_normed_vector) \<in> borel_measurable M"
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1412
  using affine_borel_measurable_vector[of f M 0 b] by simp
38656
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
  1413
50002
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1414
lemma borel_measurable_const_add[measurable (raw)]:
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1415
  "f \<in> borel_measurable M \<Longrightarrow> (\<lambda>x. a + f x ::'a::real_normed_vector) \<in> borel_measurable M"
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1416
  using affine_borel_measurable_vector[of f M a 1] by simp
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1417
50003
8c213922ed49 use measurability prover
hoelzl
parents: 50002
diff changeset
  1418
lemma borel_measurable_inverse[measurable (raw)]:
57275
0ddb5b755cdc moved lemmas from the proof of the Central Limit Theorem by Jeremy Avigad and Luke Serafin
hoelzl
parents: 57259
diff changeset
  1419
  fixes f :: "'a \<Rightarrow> 'b::real_normed_div_algebra"
49774
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1420
  assumes f: "f \<in> borel_measurable M"
35692
f1315bbf1bc9 Moved theorems in Lebesgue to the right places
hoelzl
parents: 35582
diff changeset
  1421
  shows "(\<lambda>x. inverse (f x)) \<in> borel_measurable M"
57275
0ddb5b755cdc moved lemmas from the proof of the Central Limit Theorem by Jeremy Avigad and Luke Serafin
hoelzl
parents: 57259
diff changeset
  1422
  apply (rule measurable_compose[OF f])
0ddb5b755cdc moved lemmas from the proof of the Central Limit Theorem by Jeremy Avigad and Luke Serafin
hoelzl
parents: 57259
diff changeset
  1423
  apply (rule borel_measurable_continuous_countable_exceptions[of "{0}"])
0ddb5b755cdc moved lemmas from the proof of the Central Limit Theorem by Jeremy Avigad and Luke Serafin
hoelzl
parents: 57259
diff changeset
  1424
  apply (auto intro!: continuous_on_inverse continuous_on_id)
0ddb5b755cdc moved lemmas from the proof of the Central Limit Theorem by Jeremy Avigad and Luke Serafin
hoelzl
parents: 57259
diff changeset
  1425
  done
35692
f1315bbf1bc9 Moved theorems in Lebesgue to the right places
hoelzl
parents: 35582
diff changeset
  1426
50003
8c213922ed49 use measurability prover
hoelzl
parents: 50002
diff changeset
  1427
lemma borel_measurable_divide[measurable (raw)]:
51683
baefa3b461c2 generalize Borel-set properties from real/ereal/ordered_euclidean_spaces to order_topology and real_normed_vector
hoelzl
parents: 51478
diff changeset
  1428
  "f \<in> borel_measurable M \<Longrightarrow> g \<in> borel_measurable M \<Longrightarrow>
57275
0ddb5b755cdc moved lemmas from the proof of the Central Limit Theorem by Jeremy Avigad and Luke Serafin
hoelzl
parents: 57259
diff changeset
  1429
    (\<lambda>x. f x / g x::'b::{second_countable_topology, real_normed_div_algebra}) \<in> borel_measurable M"
0ddb5b755cdc moved lemmas from the proof of the Central Limit Theorem by Jeremy Avigad and Luke Serafin
hoelzl
parents: 57259
diff changeset
  1430
  by (simp add: divide_inverse)
38656
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
  1431
50003
8c213922ed49 use measurability prover
hoelzl
parents: 50002
diff changeset
  1432
lemma borel_measurable_abs[measurable (raw)]:
8c213922ed49 use measurability prover
hoelzl
parents: 50002
diff changeset
  1433
  "f \<in> borel_measurable M \<Longrightarrow> (\<lambda>x. \<bar>f x :: real\<bar>) \<in> borel_measurable M"
8c213922ed49 use measurability prover
hoelzl
parents: 50002
diff changeset
  1434
  unfolding abs_real_def by simp
38656
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
  1435
50003
8c213922ed49 use measurability prover
hoelzl
parents: 50002
diff changeset
  1436
lemma borel_measurable_nth[measurable (raw)]:
41026
bea75746dc9d folding on arbitrary Lebesgue integrable functions
hoelzl
parents: 41025
diff changeset
  1437
  "(\<lambda>x::real^'n. x $ i) \<in> borel_measurable borel"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50419
diff changeset
  1438
  by (simp add: cart_eq_inner_axis)
41026
bea75746dc9d folding on arbitrary Lebesgue integrable functions
hoelzl
parents: 41025
diff changeset
  1439
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46905
diff changeset
  1440
lemma convex_measurable:
59415
854fe701c984 tuned measurability proofs
hoelzl
parents: 59361
diff changeset
  1441
  fixes A :: "'a :: euclidean_space set"
62372
4fe872ff91bf Borel_Space.borel is now in the type class locale
hoelzl
parents: 62083
diff changeset
  1442
  shows "X \<in> borel_measurable M \<Longrightarrow> X ` space M \<subseteq> A \<Longrightarrow> open A \<Longrightarrow> convex_on A q \<Longrightarrow>
59415
854fe701c984 tuned measurability proofs
hoelzl
parents: 59361
diff changeset
  1443
    (\<lambda>x. q (X x)) \<in> borel_measurable M"
854fe701c984 tuned measurability proofs
hoelzl
parents: 59361
diff changeset
  1444
  by (rule measurable_compose[where f=X and N="restrict_space borel A"])
854fe701c984 tuned measurability proofs
hoelzl
parents: 59361
diff changeset
  1445
     (auto intro!: borel_measurable_continuous_on_restrict convex_on_continuous measurable_restrict_space2)
41830
719b0a517c33 log is borel measurable
hoelzl
parents: 41545
diff changeset
  1446
50003
8c213922ed49 use measurability prover
hoelzl
parents: 50002
diff changeset
  1447
lemma borel_measurable_ln[measurable (raw)]:
49774
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1448
  assumes f: "f \<in> borel_measurable M"
60017
b785d6d06430 Overloading of ln and powr, but "approximation" no longer works for powr. Code generation also fails due to type ambiguity in scala.
paulson <lp15@cam.ac.uk>
parents: 59658
diff changeset
  1449
  shows "(\<lambda>x. ln (f x :: real)) \<in> borel_measurable M"
57275
0ddb5b755cdc moved lemmas from the proof of the Central Limit Theorem by Jeremy Avigad and Luke Serafin
hoelzl
parents: 57259
diff changeset
  1450
  apply (rule measurable_compose[OF f])
0ddb5b755cdc moved lemmas from the proof of the Central Limit Theorem by Jeremy Avigad and Luke Serafin
hoelzl
parents: 57259
diff changeset
  1451
  apply (rule borel_measurable_continuous_countable_exceptions[of "{0}"])
0ddb5b755cdc moved lemmas from the proof of the Central Limit Theorem by Jeremy Avigad and Luke Serafin
hoelzl
parents: 57259
diff changeset
  1452
  apply (auto intro!: continuous_on_ln continuous_on_id)
0ddb5b755cdc moved lemmas from the proof of the Central Limit Theorem by Jeremy Avigad and Luke Serafin
hoelzl
parents: 57259
diff changeset
  1453
  done
41830
719b0a517c33 log is borel measurable
hoelzl
parents: 41545
diff changeset
  1454
50003
8c213922ed49 use measurability prover
hoelzl
parents: 50002
diff changeset
  1455
lemma borel_measurable_log[measurable (raw)]:
50002
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1456
  "f \<in> borel_measurable M \<Longrightarrow> g \<in> borel_measurable M \<Longrightarrow> (\<lambda>x. log (g x) (f x)) \<in> borel_measurable M"
49774
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1457
  unfolding log_def by auto
41830
719b0a517c33 log is borel measurable
hoelzl
parents: 41545
diff changeset
  1458
58656
7f14d5d9b933 relaxed class constraints for exp
immler
parents: 57514
diff changeset
  1459
lemma borel_measurable_exp[measurable]:
7f14d5d9b933 relaxed class constraints for exp
immler
parents: 57514
diff changeset
  1460
  "(exp::'a::{real_normed_field,banach}\<Rightarrow>'a) \<in> borel_measurable borel"
51478
270b21f3ae0a move continuous and continuous_on to the HOL image; isCont is an abbreviation for continuous (at x) (isCont is now restricted to a T2 space)
hoelzl
parents: 51351
diff changeset
  1461
  by (intro borel_measurable_continuous_on1 continuous_at_imp_continuous_on ballI isCont_exp)
50419
3177d0374701 add exponential and uniform distributions
hoelzl
parents: 50387
diff changeset
  1462
50002
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1463
lemma measurable_real_floor[measurable]:
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1464
  "(floor :: real \<Rightarrow> int) \<in> measurable borel (count_space UNIV)"
47761
dfe747e72fa8 moved lemmas to appropriate places
hoelzl
parents: 47694
diff changeset
  1465
proof -
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61424
diff changeset
  1466
  have "\<And>a x. \<lfloor>x\<rfloor> = a \<longleftrightarrow> (real_of_int a \<le> x \<and> x < real_of_int (a + 1))"
50002
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1467
    by (auto intro: floor_eq2)
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1468
  then show ?thesis
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1469
    by (auto simp: vimage_def measurable_count_space_eq2_countable)
47761
dfe747e72fa8 moved lemmas to appropriate places
hoelzl
parents: 47694
diff changeset
  1470
qed
dfe747e72fa8 moved lemmas to appropriate places
hoelzl
parents: 47694
diff changeset
  1471
50002
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1472
lemma measurable_real_ceiling[measurable]:
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1473
  "(ceiling :: real \<Rightarrow> int) \<in> measurable borel (count_space UNIV)"
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1474
  unfolding ceiling_def[abs_def] by simp
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1475
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61424
diff changeset
  1476
lemma borel_measurable_real_floor: "(\<lambda>x::real. real_of_int \<lfloor>x\<rfloor>) \<in> borel_measurable borel"
50002
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1477
  by simp
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1478
59415
854fe701c984 tuned measurability proofs
hoelzl
parents: 59361
diff changeset
  1479
lemma borel_measurable_root [measurable]: "root n \<in> borel_measurable borel"
57235
b0b9a10e4bf4 properties of Erlang and exponentially distributed random variables (by Sudeep Kanav)
hoelzl
parents: 57138
diff changeset
  1480
  by (intro borel_measurable_continuous_on1 continuous_intros)
b0b9a10e4bf4 properties of Erlang and exponentially distributed random variables (by Sudeep Kanav)
hoelzl
parents: 57138
diff changeset
  1481
b0b9a10e4bf4 properties of Erlang and exponentially distributed random variables (by Sudeep Kanav)
hoelzl
parents: 57138
diff changeset
  1482
lemma borel_measurable_sqrt [measurable]: "sqrt \<in> borel_measurable borel"
b0b9a10e4bf4 properties of Erlang and exponentially distributed random variables (by Sudeep Kanav)
hoelzl
parents: 57138
diff changeset
  1483
  by (intro borel_measurable_continuous_on1 continuous_intros)
b0b9a10e4bf4 properties of Erlang and exponentially distributed random variables (by Sudeep Kanav)
hoelzl
parents: 57138
diff changeset
  1484
b0b9a10e4bf4 properties of Erlang and exponentially distributed random variables (by Sudeep Kanav)
hoelzl
parents: 57138
diff changeset
  1485
lemma borel_measurable_power [measurable (raw)]:
59415
854fe701c984 tuned measurability proofs
hoelzl
parents: 59361
diff changeset
  1486
  fixes f :: "_ \<Rightarrow> 'b::{power,real_normed_algebra}"
854fe701c984 tuned measurability proofs
hoelzl
parents: 59361
diff changeset
  1487
  assumes f: "f \<in> borel_measurable M"
854fe701c984 tuned measurability proofs
hoelzl
parents: 59361
diff changeset
  1488
  shows "(\<lambda>x. (f x) ^ n) \<in> borel_measurable M"
854fe701c984 tuned measurability proofs
hoelzl
parents: 59361
diff changeset
  1489
  by (intro borel_measurable_continuous_on [OF _ f] continuous_intros)
57235
b0b9a10e4bf4 properties of Erlang and exponentially distributed random variables (by Sudeep Kanav)
hoelzl
parents: 57138
diff changeset
  1490
b0b9a10e4bf4 properties of Erlang and exponentially distributed random variables (by Sudeep Kanav)
hoelzl
parents: 57138
diff changeset
  1491
lemma borel_measurable_Re [measurable]: "Re \<in> borel_measurable borel"
b0b9a10e4bf4 properties of Erlang and exponentially distributed random variables (by Sudeep Kanav)
hoelzl
parents: 57138
diff changeset
  1492
  by (intro borel_measurable_continuous_on1 continuous_intros)
b0b9a10e4bf4 properties of Erlang and exponentially distributed random variables (by Sudeep Kanav)
hoelzl
parents: 57138
diff changeset
  1493
b0b9a10e4bf4 properties of Erlang and exponentially distributed random variables (by Sudeep Kanav)
hoelzl
parents: 57138
diff changeset
  1494
lemma borel_measurable_Im [measurable]: "Im \<in> borel_measurable borel"
b0b9a10e4bf4 properties of Erlang and exponentially distributed random variables (by Sudeep Kanav)
hoelzl
parents: 57138
diff changeset
  1495
  by (intro borel_measurable_continuous_on1 continuous_intros)
b0b9a10e4bf4 properties of Erlang and exponentially distributed random variables (by Sudeep Kanav)
hoelzl
parents: 57138
diff changeset
  1496
b0b9a10e4bf4 properties of Erlang and exponentially distributed random variables (by Sudeep Kanav)
hoelzl
parents: 57138
diff changeset
  1497
lemma borel_measurable_of_real [measurable]: "(of_real :: _ \<Rightarrow> (_::real_normed_algebra)) \<in> borel_measurable borel"
b0b9a10e4bf4 properties of Erlang and exponentially distributed random variables (by Sudeep Kanav)
hoelzl
parents: 57138
diff changeset
  1498
  by (intro borel_measurable_continuous_on1 continuous_intros)
b0b9a10e4bf4 properties of Erlang and exponentially distributed random variables (by Sudeep Kanav)
hoelzl
parents: 57138
diff changeset
  1499
59658
0cc388370041 sin, cos generalised from type real to any "'a::{real_normed_field,banach}", including complex
paulson <lp15@cam.ac.uk>
parents: 59587
diff changeset
  1500
lemma borel_measurable_sin [measurable]: "(sin :: _ \<Rightarrow> (_::{real_normed_field,banach})) \<in> borel_measurable borel"
57235
b0b9a10e4bf4 properties of Erlang and exponentially distributed random variables (by Sudeep Kanav)
hoelzl
parents: 57138
diff changeset
  1501
  by (intro borel_measurable_continuous_on1 continuous_intros)
b0b9a10e4bf4 properties of Erlang and exponentially distributed random variables (by Sudeep Kanav)
hoelzl
parents: 57138
diff changeset
  1502
59658
0cc388370041 sin, cos generalised from type real to any "'a::{real_normed_field,banach}", including complex
paulson <lp15@cam.ac.uk>
parents: 59587
diff changeset
  1503
lemma borel_measurable_cos [measurable]: "(cos :: _ \<Rightarrow> (_::{real_normed_field,banach})) \<in> borel_measurable borel"
57235
b0b9a10e4bf4 properties of Erlang and exponentially distributed random variables (by Sudeep Kanav)
hoelzl
parents: 57138
diff changeset
  1504
  by (intro borel_measurable_continuous_on1 continuous_intros)
b0b9a10e4bf4 properties of Erlang and exponentially distributed random variables (by Sudeep Kanav)
hoelzl
parents: 57138
diff changeset
  1505
b0b9a10e4bf4 properties of Erlang and exponentially distributed random variables (by Sudeep Kanav)
hoelzl
parents: 57138
diff changeset
  1506
lemma borel_measurable_arctan [measurable]: "arctan \<in> borel_measurable borel"
b0b9a10e4bf4 properties of Erlang and exponentially distributed random variables (by Sudeep Kanav)
hoelzl
parents: 57138
diff changeset
  1507
  by (intro borel_measurable_continuous_on1 continuous_intros)
b0b9a10e4bf4 properties of Erlang and exponentially distributed random variables (by Sudeep Kanav)
hoelzl
parents: 57138
diff changeset
  1508
57259
3a448982a74a add more derivative and continuity rules for complex-values functions
hoelzl
parents: 57235
diff changeset
  1509
lemma borel_measurable_complex_iff:
3a448982a74a add more derivative and continuity rules for complex-values functions
hoelzl
parents: 57235
diff changeset
  1510
  "f \<in> borel_measurable M \<longleftrightarrow>
3a448982a74a add more derivative and continuity rules for complex-values functions
hoelzl
parents: 57235
diff changeset
  1511
    (\<lambda>x. Re (f x)) \<in> borel_measurable M \<and> (\<lambda>x. Im (f x)) \<in> borel_measurable M"
3a448982a74a add more derivative and continuity rules for complex-values functions
hoelzl
parents: 57235
diff changeset
  1512
  apply auto
3a448982a74a add more derivative and continuity rules for complex-values functions
hoelzl
parents: 57235
diff changeset
  1513
  apply (subst fun_complex_eq)
3a448982a74a add more derivative and continuity rules for complex-values functions
hoelzl
parents: 57235
diff changeset
  1514
  apply (intro borel_measurable_add)
3a448982a74a add more derivative and continuity rules for complex-values functions
hoelzl
parents: 57235
diff changeset
  1515
  apply auto
3a448982a74a add more derivative and continuity rules for complex-values functions
hoelzl
parents: 57235
diff changeset
  1516
  done
3a448982a74a add more derivative and continuity rules for complex-values functions
hoelzl
parents: 57235
diff changeset
  1517
67278
c60e3d615b8c Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents: 66164
diff changeset
  1518
lemma powr_real_measurable [measurable]:
c60e3d615b8c Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents: 66164
diff changeset
  1519
  assumes "f \<in> measurable M borel" "g \<in> measurable M borel"
c60e3d615b8c Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents: 66164
diff changeset
  1520
  shows   "(\<lambda>x. f x powr g x :: real) \<in> measurable M borel"
c60e3d615b8c Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents: 66164
diff changeset
  1521
  using assms by (simp_all add: powr_def)
c60e3d615b8c Removed Analysis/ex/Circle_Area; replaced by more general Analysis/Ball_Volume
eberlm <eberlm@in.tum.de>
parents: 66164
diff changeset
  1522
64008
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1523
lemma measurable_of_bool[measurable]: "of_bool \<in> count_space UNIV \<rightarrow>\<^sub>M borel"
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1524
  by simp
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1525
41981
cdf7693bbe08 reworked Probability theory: measures are not type restricted to positive extended reals
hoelzl
parents: 41969
diff changeset
  1526
subsection "Borel space on the extended reals"
cdf7693bbe08 reworked Probability theory: measures are not type restricted to positive extended reals
hoelzl
parents: 41969
diff changeset
  1527
50003
8c213922ed49 use measurability prover
hoelzl
parents: 50002
diff changeset
  1528
lemma borel_measurable_ereal[measurable (raw)]:
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42990
diff changeset
  1529
  assumes f: "f \<in> borel_measurable M" shows "(\<lambda>x. ereal (f x)) \<in> borel_measurable M"
60771
8558e4a37b48 reorganized Extended_Real
hoelzl
parents: 60172
diff changeset
  1530
  using continuous_on_ereal f by (rule borel_measurable_continuous_on) (rule continuous_on_id)
41981
cdf7693bbe08 reworked Probability theory: measures are not type restricted to positive extended reals
hoelzl
parents: 41969
diff changeset
  1531
50003
8c213922ed49 use measurability prover
hoelzl
parents: 50002
diff changeset
  1532
lemma borel_measurable_real_of_ereal[measurable (raw)]:
62372
4fe872ff91bf Borel_Space.borel is now in the type class locale
hoelzl
parents: 62083
diff changeset
  1533
  fixes f :: "'a \<Rightarrow> ereal"
49774
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1534
  assumes f: "f \<in> borel_measurable M"
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61424
diff changeset
  1535
  shows "(\<lambda>x. real_of_ereal (f x)) \<in> borel_measurable M"
59361
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1536
  apply (rule measurable_compose[OF f])
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1537
  apply (rule borel_measurable_continuous_countable_exceptions[of "{\<infinity>, -\<infinity> }"])
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1538
  apply (auto intro: continuous_on_real simp: Compl_eq_Diff_UNIV)
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1539
  done
49774
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1540
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1541
lemma borel_measurable_ereal_cases:
62372
4fe872ff91bf Borel_Space.borel is now in the type class locale
hoelzl
parents: 62083
diff changeset
  1542
  fixes f :: "'a \<Rightarrow> ereal"
49774
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1543
  assumes f: "f \<in> borel_measurable M"
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61424
diff changeset
  1544
  assumes H: "(\<lambda>x. H (ereal (real_of_ereal (f x)))) \<in> borel_measurable M"
49774
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1545
  shows "(\<lambda>x. H (f x)) \<in> borel_measurable M"
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1546
proof -
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61424
diff changeset
  1547
  let ?F = "\<lambda>x. if f x = \<infinity> then H \<infinity> else if f x = - \<infinity> then H (-\<infinity>) else H (ereal (real_of_ereal (f x)))"
49774
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1548
  { fix x have "H (f x) = ?F x" by (cases "f x") auto }
50002
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1549
  with f H show ?thesis by simp
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46905
diff changeset
  1550
qed
41981
cdf7693bbe08 reworked Probability theory: measures are not type restricted to positive extended reals
hoelzl
parents: 41969
diff changeset
  1551
49774
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1552
lemma
50003
8c213922ed49 use measurability prover
hoelzl
parents: 50002
diff changeset
  1553
  fixes f :: "'a \<Rightarrow> ereal" assumes f[measurable]: "f \<in> borel_measurable M"
8c213922ed49 use measurability prover
hoelzl
parents: 50002
diff changeset
  1554
  shows borel_measurable_ereal_abs[measurable(raw)]: "(\<lambda>x. \<bar>f x\<bar>) \<in> borel_measurable M"
8c213922ed49 use measurability prover
hoelzl
parents: 50002
diff changeset
  1555
    and borel_measurable_ereal_inverse[measurable(raw)]: "(\<lambda>x. inverse (f x) :: ereal) \<in> borel_measurable M"
8c213922ed49 use measurability prover
hoelzl
parents: 50002
diff changeset
  1556
    and borel_measurable_uminus_ereal[measurable(raw)]: "(\<lambda>x. - f x :: ereal) \<in> borel_measurable M"
49774
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1557
  by (auto simp del: abs_real_of_ereal simp: borel_measurable_ereal_cases[OF f] measurable_If)
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1558
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1559
lemma borel_measurable_uminus_eq_ereal[simp]:
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1560
  "(\<lambda>x. - f x :: ereal) \<in> borel_measurable M \<longleftrightarrow> f \<in> borel_measurable M" (is "?l = ?r")
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1561
proof
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1562
  assume ?l from borel_measurable_uminus_ereal[OF this] show ?r by simp
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1563
qed auto
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1564
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1565
lemma set_Collect_ereal2:
62372
4fe872ff91bf Borel_Space.borel is now in the type class locale
hoelzl
parents: 62083
diff changeset
  1566
  fixes f g :: "'a \<Rightarrow> ereal"
49774
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1567
  assumes f: "f \<in> borel_measurable M"
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1568
  assumes g: "g \<in> borel_measurable M"
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61424
diff changeset
  1569
  assumes H: "{x \<in> space M. H (ereal (real_of_ereal (f x))) (ereal (real_of_ereal (g x)))} \<in> sets M"
50002
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1570
    "{x \<in> space borel. H (-\<infinity>) (ereal x)} \<in> sets borel"
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1571
    "{x \<in> space borel. H (\<infinity>) (ereal x)} \<in> sets borel"
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1572
    "{x \<in> space borel. H (ereal x) (-\<infinity>)} \<in> sets borel"
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1573
    "{x \<in> space borel. H (ereal x) (\<infinity>)} \<in> sets borel"
49774
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1574
  shows "{x \<in> space M. H (f x) (g x)} \<in> sets M"
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1575
proof -
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61424
diff changeset
  1576
  let ?G = "\<lambda>y x. if g x = \<infinity> then H y \<infinity> else if g x = -\<infinity> then H y (-\<infinity>) else H y (ereal (real_of_ereal (g x)))"
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61424
diff changeset
  1577
  let ?F = "\<lambda>x. if f x = \<infinity> then ?G \<infinity> x else if f x = -\<infinity> then ?G (-\<infinity>) x else ?G (ereal (real_of_ereal (f x))) x"
49774
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1578
  { fix x have "H (f x) (g x) = ?F x" by (cases "f x" "g x" rule: ereal2_cases) auto }
50002
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1579
  note * = this
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1580
  from assms show ?thesis
62390
842917225d56 more canonical names
nipkow
parents: 62372
diff changeset
  1581
    by (subst *) (simp del: space_borel split del: if_split)
49774
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1582
qed
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1583
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46905
diff changeset
  1584
lemma borel_measurable_ereal_iff:
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42990
diff changeset
  1585
  shows "(\<lambda>x. ereal (f x)) \<in> borel_measurable M \<longleftrightarrow> f \<in> borel_measurable M"
41981
cdf7693bbe08 reworked Probability theory: measures are not type restricted to positive extended reals
hoelzl
parents: 41969
diff changeset
  1586
proof
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42990
diff changeset
  1587
  assume "(\<lambda>x. ereal (f x)) \<in> borel_measurable M"
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42990
diff changeset
  1588
  from borel_measurable_real_of_ereal[OF this]
41981
cdf7693bbe08 reworked Probability theory: measures are not type restricted to positive extended reals
hoelzl
parents: 41969
diff changeset
  1589
  show "f \<in> borel_measurable M" by auto
cdf7693bbe08 reworked Probability theory: measures are not type restricted to positive extended reals
hoelzl
parents: 41969
diff changeset
  1590
qed auto
cdf7693bbe08 reworked Probability theory: measures are not type restricted to positive extended reals
hoelzl
parents: 41969
diff changeset
  1591
59353
f0707dc3d9aa measurability prover: removed app splitting, replaced by more powerful destruction rules
hoelzl
parents: 59088
diff changeset
  1592
lemma borel_measurable_erealD[measurable_dest]:
f0707dc3d9aa measurability prover: removed app splitting, replaced by more powerful destruction rules
hoelzl
parents: 59088
diff changeset
  1593
  "(\<lambda>x. ereal (f x)) \<in> borel_measurable M \<Longrightarrow> g \<in> measurable N M \<Longrightarrow> (\<lambda>x. f (g x)) \<in> borel_measurable N"
f0707dc3d9aa measurability prover: removed app splitting, replaced by more powerful destruction rules
hoelzl
parents: 59088
diff changeset
  1594
  unfolding borel_measurable_ereal_iff by simp
f0707dc3d9aa measurability prover: removed app splitting, replaced by more powerful destruction rules
hoelzl
parents: 59088
diff changeset
  1595
47694
05663f75964c reworked Probability theory
hoelzl
parents: 46905
diff changeset
  1596
lemma borel_measurable_ereal_iff_real:
43923
ab93d0190a5d add ereal to typeclass infinity
hoelzl
parents: 43920
diff changeset
  1597
  fixes f :: "'a \<Rightarrow> ereal"
ab93d0190a5d add ereal to typeclass infinity
hoelzl
parents: 43920
diff changeset
  1598
  shows "f \<in> borel_measurable M \<longleftrightarrow>
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61424
diff changeset
  1599
    ((\<lambda>x. real_of_ereal (f x)) \<in> borel_measurable M \<and> f -` {\<infinity>} \<inter> space M \<in> sets M \<and> f -` {-\<infinity>} \<inter> space M \<in> sets M)"
41981
cdf7693bbe08 reworked Probability theory: measures are not type restricted to positive extended reals
hoelzl
parents: 41969
diff changeset
  1600
proof safe
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61424
diff changeset
  1601
  assume *: "(\<lambda>x. real_of_ereal (f x)) \<in> borel_measurable M" "f -` {\<infinity>} \<inter> space M \<in> sets M" "f -` {-\<infinity>} \<inter> space M \<in> sets M"
41981
cdf7693bbe08 reworked Probability theory: measures are not type restricted to positive extended reals
hoelzl
parents: 41969
diff changeset
  1602
  have "f -` {\<infinity>} \<inter> space M = {x\<in>space M. f x = \<infinity>}" "f -` {-\<infinity>} \<inter> space M = {x\<in>space M. f x = -\<infinity>}" by auto
cdf7693bbe08 reworked Probability theory: measures are not type restricted to positive extended reals
hoelzl
parents: 41969
diff changeset
  1603
  with * have **: "{x\<in>space M. f x = \<infinity>} \<in> sets M" "{x\<in>space M. f x = -\<infinity>} \<in> sets M" by simp_all
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61424
diff changeset
  1604
  let ?f = "\<lambda>x. if f x = \<infinity> then \<infinity> else if f x = -\<infinity> then -\<infinity> else ereal (real_of_ereal (f x))"
41981
cdf7693bbe08 reworked Probability theory: measures are not type restricted to positive extended reals
hoelzl
parents: 41969
diff changeset
  1605
  have "?f \<in> borel_measurable M" using * ** by (intro measurable_If) auto
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42990
diff changeset
  1606
  also have "?f = f" by (auto simp: fun_eq_iff ereal_real)
41981
cdf7693bbe08 reworked Probability theory: measures are not type restricted to positive extended reals
hoelzl
parents: 41969
diff changeset
  1607
  finally show "f \<in> borel_measurable M" .
50002
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1608
qed simp_all
41830
719b0a517c33 log is borel measurable
hoelzl
parents: 41545
diff changeset
  1609
59361
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1610
lemma borel_measurable_ereal_iff_Iio:
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1611
  "(f::'a \<Rightarrow> ereal) \<in> borel_measurable M \<longleftrightarrow> (\<forall>a. f -` {..< a} \<inter> space M \<in> sets M)"
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1612
  by (auto simp: borel_Iio measurable_iff_measure_of)
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1613
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1614
lemma borel_measurable_ereal_iff_Ioi:
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1615
  "(f::'a \<Rightarrow> ereal) \<in> borel_measurable M \<longleftrightarrow> (\<forall>a. f -` {a <..} \<inter> space M \<in> sets M)"
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1616
  by (auto simp: borel_Ioi measurable_iff_measure_of)
35582
b16d99a72dc9 Add Lebesgue integral and probability space.
hoelzl
parents: 35347
diff changeset
  1617
59361
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1618
lemma vimage_sets_compl_iff:
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1619
  "f -` A \<inter> space M \<in> sets M \<longleftrightarrow> f -` (- A) \<inter> space M \<in> sets M"
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1620
proof -
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1621
  { fix A assume "f -` A \<inter> space M \<in> sets M"
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1622
    moreover have "f -` (- A) \<inter> space M = space M - f -` A \<inter> space M" by auto
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1623
    ultimately have "f -` (- A) \<inter> space M \<in> sets M" by auto }
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1624
  from this[of A] this[of "-A"] show ?thesis
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1625
    by (metis double_complement)
49774
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1626
qed
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1627
59361
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1628
lemma borel_measurable_iff_Iic_ereal:
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1629
  "(f::'a\<Rightarrow>ereal) \<in> borel_measurable M \<longleftrightarrow> (\<forall>a. f -` {..a} \<inter> space M \<in> sets M)"
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1630
  unfolding borel_measurable_ereal_iff_Ioi vimage_sets_compl_iff[where A="{a <..}" for a] by simp
38656
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
  1631
59361
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1632
lemma borel_measurable_iff_Ici_ereal:
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1633
  "(f::'a \<Rightarrow> ereal) \<in> borel_measurable M \<longleftrightarrow> (\<forall>a. f -` {a..} \<inter> space M \<in> sets M)"
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1634
  unfolding borel_measurable_ereal_iff_Iio vimage_sets_compl_iff[where A="{..< a}" for a] by simp
38656
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
  1635
49774
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1636
lemma borel_measurable_ereal2:
62372
4fe872ff91bf Borel_Space.borel is now in the type class locale
hoelzl
parents: 62083
diff changeset
  1637
  fixes f g :: "'a \<Rightarrow> ereal"
41981
cdf7693bbe08 reworked Probability theory: measures are not type restricted to positive extended reals
hoelzl
parents: 41969
diff changeset
  1638
  assumes f: "f \<in> borel_measurable M"
cdf7693bbe08 reworked Probability theory: measures are not type restricted to positive extended reals
hoelzl
parents: 41969
diff changeset
  1639
  assumes g: "g \<in> borel_measurable M"
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61424
diff changeset
  1640
  assumes H: "(\<lambda>x. H (ereal (real_of_ereal (f x))) (ereal (real_of_ereal (g x)))) \<in> borel_measurable M"
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61424
diff changeset
  1641
    "(\<lambda>x. H (-\<infinity>) (ereal (real_of_ereal (g x)))) \<in> borel_measurable M"
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61424
diff changeset
  1642
    "(\<lambda>x. H (\<infinity>) (ereal (real_of_ereal (g x)))) \<in> borel_measurable M"
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61424
diff changeset
  1643
    "(\<lambda>x. H (ereal (real_of_ereal (f x))) (-\<infinity>)) \<in> borel_measurable M"
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61424
diff changeset
  1644
    "(\<lambda>x. H (ereal (real_of_ereal (f x))) (\<infinity>)) \<in> borel_measurable M"
49774
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1645
  shows "(\<lambda>x. H (f x) (g x)) \<in> borel_measurable M"
41981
cdf7693bbe08 reworked Probability theory: measures are not type restricted to positive extended reals
hoelzl
parents: 41969
diff changeset
  1646
proof -
61609
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61424
diff changeset
  1647
  let ?G = "\<lambda>y x. if g x = \<infinity> then H y \<infinity> else if g x = - \<infinity> then H y (-\<infinity>) else H y (ereal (real_of_ereal (g x)))"
77b453bd616f Coercion "real" now has type nat => real only and is no longer overloaded. Type class "real_of" is gone. Many duplicate theorems removed.
paulson <lp15@cam.ac.uk>
parents: 61424
diff changeset
  1648
  let ?F = "\<lambda>x. if f x = \<infinity> then ?G \<infinity> x else if f x = - \<infinity> then ?G (-\<infinity>) x else ?G (ereal (real_of_ereal (f x))) x"
49774
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1649
  { fix x have "H (f x) (g x) = ?F x" by (cases "f x" "g x" rule: ereal2_cases) auto }
50002
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1650
  note * = this
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1651
  from assms show ?thesis unfolding * by simp
41981
cdf7693bbe08 reworked Probability theory: measures are not type restricted to positive extended reals
hoelzl
parents: 41969
diff changeset
  1652
qed
cdf7693bbe08 reworked Probability theory: measures are not type restricted to positive extended reals
hoelzl
parents: 41969
diff changeset
  1653
50003
8c213922ed49 use measurability prover
hoelzl
parents: 50002
diff changeset
  1654
lemma [measurable(raw)]:
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42990
diff changeset
  1655
  fixes f :: "'a \<Rightarrow> ereal"
50003
8c213922ed49 use measurability prover
hoelzl
parents: 50002
diff changeset
  1656
  assumes [measurable]: "f \<in> borel_measurable M" "g \<in> borel_measurable M"
50002
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1657
  shows borel_measurable_ereal_add: "(\<lambda>x. f x + g x) \<in> borel_measurable M"
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1658
    and borel_measurable_ereal_times: "(\<lambda>x. f x * g x) \<in> borel_measurable M"
62624
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
  1659
  by (simp_all add: borel_measurable_ereal2)
49774
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1660
50003
8c213922ed49 use measurability prover
hoelzl
parents: 50002
diff changeset
  1661
lemma [measurable(raw)]:
49774
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1662
  fixes f g :: "'a \<Rightarrow> ereal"
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1663
  assumes "f \<in> borel_measurable M"
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1664
  assumes "g \<in> borel_measurable M"
50002
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1665
  shows borel_measurable_ereal_diff: "(\<lambda>x. f x - g x) \<in> borel_measurable M"
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1666
    and borel_measurable_ereal_divide: "(\<lambda>x. f x / g x) \<in> borel_measurable M"
50003
8c213922ed49 use measurability prover
hoelzl
parents: 50002
diff changeset
  1667
  using assms by (simp_all add: minus_ereal_def divide_ereal_def)
38656
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
  1668
64267
b9a1486e79be setsum -> sum
nipkow
parents: 64008
diff changeset
  1669
lemma borel_measurable_ereal_sum[measurable (raw)]:
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42990
diff changeset
  1670
  fixes f :: "'c \<Rightarrow> 'a \<Rightarrow> ereal"
41096
843c40bbc379 integral over setprod
hoelzl
parents: 41083
diff changeset
  1671
  assumes "\<And>i. i \<in> S \<Longrightarrow> f i \<in> borel_measurable M"
843c40bbc379 integral over setprod
hoelzl
parents: 41083
diff changeset
  1672
  shows "(\<lambda>x. \<Sum>i\<in>S. f i x) \<in> borel_measurable M"
59361
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1673
  using assms by (induction S rule: infinite_finite_induct) auto
38656
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
  1674
64272
f76b6dda2e56 setprod -> prod
nipkow
parents: 64267
diff changeset
  1675
lemma borel_measurable_ereal_prod[measurable (raw)]:
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42990
diff changeset
  1676
  fixes f :: "'c \<Rightarrow> 'a \<Rightarrow> ereal"
38656
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
  1677
  assumes "\<And>i. i \<in> S \<Longrightarrow> f i \<in> borel_measurable M"
41096
843c40bbc379 integral over setprod
hoelzl
parents: 41083
diff changeset
  1678
  shows "(\<lambda>x. \<Prod>i\<in>S. f i x) \<in> borel_measurable M"
59361
fd5da2434be4 piecewise measurability using restrict_space; cleanup Borel_Space
hoelzl
parents: 59353
diff changeset
  1679
  using assms by (induction S rule: infinite_finite_induct) auto
38656
d5d342611edb Rewrite the Probability theory.
hoelzl
parents: 37887
diff changeset
  1680
50003
8c213922ed49 use measurability prover
hoelzl
parents: 50002
diff changeset
  1681
lemma borel_measurable_extreal_suminf[measurable (raw)]:
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42990
diff changeset
  1682
  fixes f :: "nat \<Rightarrow> 'a \<Rightarrow> ereal"
50003
8c213922ed49 use measurability prover
hoelzl
parents: 50002
diff changeset
  1683
  assumes [measurable]: "\<And>i. f i \<in> borel_measurable M"
41981
cdf7693bbe08 reworked Probability theory: measures are not type restricted to positive extended reals
hoelzl
parents: 41969
diff changeset
  1684
  shows "(\<lambda>x. (\<Sum>i. f i x)) \<in> borel_measurable M"
50003
8c213922ed49 use measurability prover
hoelzl
parents: 50002
diff changeset
  1685
  unfolding suminf_def sums_def[abs_def] lim_def[symmetric] by simp
39092
98de40859858 move lemmas to correct theory files
hoelzl
parents: 39087
diff changeset
  1686
62625
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1687
subsection "Borel space on the extended non-negative reals"
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1688
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1689
text \<open> @{type ennreal} is a topological monoid, so no rules for plus are required, also all order
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1690
  statements are usually done on type classes. \<close>
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1691
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1692
lemma measurable_enn2ereal[measurable]: "enn2ereal \<in> borel \<rightarrow>\<^sub>M borel"
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1693
  by (intro borel_measurable_continuous_on1 continuous_on_enn2ereal)
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1694
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1695
lemma measurable_e2ennreal[measurable]: "e2ennreal \<in> borel \<rightarrow>\<^sub>M borel"
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1696
  by (intro borel_measurable_continuous_on1 continuous_on_e2ennreal)
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1697
62975
1d066f6ab25d Probability: move emeasure and nn_integral from ereal to ennreal
hoelzl
parents: 62625
diff changeset
  1698
lemma borel_measurable_enn2real[measurable (raw)]:
1d066f6ab25d Probability: move emeasure and nn_integral from ereal to ennreal
hoelzl
parents: 62625
diff changeset
  1699
  "f \<in> M \<rightarrow>\<^sub>M borel \<Longrightarrow> (\<lambda>x. enn2real (f x)) \<in> M \<rightarrow>\<^sub>M borel"
1d066f6ab25d Probability: move emeasure and nn_integral from ereal to ennreal
hoelzl
parents: 62625
diff changeset
  1700
  unfolding enn2real_def[abs_def] by measurable
1d066f6ab25d Probability: move emeasure and nn_integral from ereal to ennreal
hoelzl
parents: 62625
diff changeset
  1701
62625
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1702
definition [simp]: "is_borel f M \<longleftrightarrow> f \<in> borel_measurable M"
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1703
67399
eab6ce8368fa ran isabelle update_op on all sources
nipkow
parents: 67278
diff changeset
  1704
lemma is_borel_transfer[transfer_rule]: "rel_fun (rel_fun (=) pcr_ennreal) (=) is_borel is_borel"
62625
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1705
  unfolding is_borel_def[abs_def]
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1706
proof (safe intro!: rel_funI ext dest!: rel_fun_eq_pcr_ennreal[THEN iffD1])
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1707
  fix f and M :: "'a measure"
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1708
  show "f \<in> borel_measurable M" if f: "enn2ereal \<circ> f \<in> borel_measurable M"
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1709
    using measurable_compose[OF f measurable_e2ennreal] by simp
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1710
qed simp
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1711
62975
1d066f6ab25d Probability: move emeasure and nn_integral from ereal to ennreal
hoelzl
parents: 62625
diff changeset
  1712
context
1d066f6ab25d Probability: move emeasure and nn_integral from ereal to ennreal
hoelzl
parents: 62625
diff changeset
  1713
  includes ennreal.lifting
1d066f6ab25d Probability: move emeasure and nn_integral from ereal to ennreal
hoelzl
parents: 62625
diff changeset
  1714
begin
1d066f6ab25d Probability: move emeasure and nn_integral from ereal to ennreal
hoelzl
parents: 62625
diff changeset
  1715
62625
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1716
lemma measurable_ennreal[measurable]: "ennreal \<in> borel \<rightarrow>\<^sub>M borel"
62975
1d066f6ab25d Probability: move emeasure and nn_integral from ereal to ennreal
hoelzl
parents: 62625
diff changeset
  1717
  unfolding is_borel_def[symmetric]
1d066f6ab25d Probability: move emeasure and nn_integral from ereal to ennreal
hoelzl
parents: 62625
diff changeset
  1718
  by transfer simp
1d066f6ab25d Probability: move emeasure and nn_integral from ereal to ennreal
hoelzl
parents: 62625
diff changeset
  1719
1d066f6ab25d Probability: move emeasure and nn_integral from ereal to ennreal
hoelzl
parents: 62625
diff changeset
  1720
lemma borel_measurable_ennreal_iff[simp]:
1d066f6ab25d Probability: move emeasure and nn_integral from ereal to ennreal
hoelzl
parents: 62625
diff changeset
  1721
  assumes [simp]: "\<And>x. x \<in> space M \<Longrightarrow> 0 \<le> f x"
1d066f6ab25d Probability: move emeasure and nn_integral from ereal to ennreal
hoelzl
parents: 62625
diff changeset
  1722
  shows "(\<lambda>x. ennreal (f x)) \<in> M \<rightarrow>\<^sub>M borel \<longleftrightarrow> f \<in> M \<rightarrow>\<^sub>M borel"
1d066f6ab25d Probability: move emeasure and nn_integral from ereal to ennreal
hoelzl
parents: 62625
diff changeset
  1723
proof safe
1d066f6ab25d Probability: move emeasure and nn_integral from ereal to ennreal
hoelzl
parents: 62625
diff changeset
  1724
  assume "(\<lambda>x. ennreal (f x)) \<in> M \<rightarrow>\<^sub>M borel"
1d066f6ab25d Probability: move emeasure and nn_integral from ereal to ennreal
hoelzl
parents: 62625
diff changeset
  1725
  then have "(\<lambda>x. enn2real (ennreal (f x))) \<in> M \<rightarrow>\<^sub>M borel"
1d066f6ab25d Probability: move emeasure and nn_integral from ereal to ennreal
hoelzl
parents: 62625
diff changeset
  1726
    by measurable
1d066f6ab25d Probability: move emeasure and nn_integral from ereal to ennreal
hoelzl
parents: 62625
diff changeset
  1727
  then show "f \<in> M \<rightarrow>\<^sub>M borel"
1d066f6ab25d Probability: move emeasure and nn_integral from ereal to ennreal
hoelzl
parents: 62625
diff changeset
  1728
    by (rule measurable_cong[THEN iffD1, rotated]) auto
1d066f6ab25d Probability: move emeasure and nn_integral from ereal to ennreal
hoelzl
parents: 62625
diff changeset
  1729
qed measurable
62625
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1730
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1731
lemma borel_measurable_times_ennreal[measurable (raw)]:
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1732
  fixes f g :: "'a \<Rightarrow> ennreal"
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1733
  shows "f \<in> M \<rightarrow>\<^sub>M borel \<Longrightarrow> g \<in> M \<rightarrow>\<^sub>M borel \<Longrightarrow> (\<lambda>x. f x * g x) \<in> M \<rightarrow>\<^sub>M borel"
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1734
  unfolding is_borel_def[symmetric] by transfer simp
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1735
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1736
lemma borel_measurable_inverse_ennreal[measurable (raw)]:
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1737
  fixes f :: "'a \<Rightarrow> ennreal"
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1738
  shows "f \<in> M \<rightarrow>\<^sub>M borel \<Longrightarrow> (\<lambda>x. inverse (f x)) \<in> M \<rightarrow>\<^sub>M borel"
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1739
  unfolding is_borel_def[symmetric] by transfer simp
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1740
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1741
lemma borel_measurable_divide_ennreal[measurable (raw)]:
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1742
  fixes f :: "'a \<Rightarrow> ennreal"
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1743
  shows "f \<in> M \<rightarrow>\<^sub>M borel \<Longrightarrow> g \<in> M \<rightarrow>\<^sub>M borel \<Longrightarrow> (\<lambda>x. f x / g x) \<in> M \<rightarrow>\<^sub>M borel"
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1744
  unfolding divide_ennreal_def by simp
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1745
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1746
lemma borel_measurable_minus_ennreal[measurable (raw)]:
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1747
  fixes f :: "'a \<Rightarrow> ennreal"
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1748
  shows "f \<in> M \<rightarrow>\<^sub>M borel \<Longrightarrow> g \<in> M \<rightarrow>\<^sub>M borel \<Longrightarrow> (\<lambda>x. f x - g x) \<in> M \<rightarrow>\<^sub>M borel"
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1749
  unfolding is_borel_def[symmetric] by transfer simp
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1750
64272
f76b6dda2e56 setprod -> prod
nipkow
parents: 64267
diff changeset
  1751
lemma borel_measurable_prod_ennreal[measurable (raw)]:
62625
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1752
  fixes f :: "'c \<Rightarrow> 'a \<Rightarrow> ennreal"
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1753
  assumes "\<And>i. i \<in> S \<Longrightarrow> f i \<in> borel_measurable M"
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1754
  shows "(\<lambda>x. \<Prod>i\<in>S. f i x) \<in> borel_measurable M"
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1755
  using assms by (induction S rule: infinite_finite_induct) auto
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1756
62975
1d066f6ab25d Probability: move emeasure and nn_integral from ereal to ennreal
hoelzl
parents: 62625
diff changeset
  1757
end
1d066f6ab25d Probability: move emeasure and nn_integral from ereal to ennreal
hoelzl
parents: 62625
diff changeset
  1758
62625
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1759
hide_const (open) is_borel
2d73385aa5f3 add measurability rules for ennreal
hoelzl
parents: 62624
diff changeset
  1760
61808
fc1556774cfe isabelle update_cartouches -c -t;
wenzelm
parents: 61609
diff changeset
  1761
subsection \<open>LIMSEQ is borel measurable\<close>
39092
98de40859858 move lemmas to correct theory files
hoelzl
parents: 39087
diff changeset
  1762
62624
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
  1763
lemma borel_measurable_LIMSEQ_real:
39092
98de40859858 move lemmas to correct theory files
hoelzl
parents: 39087
diff changeset
  1764
  fixes u :: "nat \<Rightarrow> 'a \<Rightarrow> real"
61969
e01015e49041 more symbols;
wenzelm
parents: 61880
diff changeset
  1765
  assumes u': "\<And>x. x \<in> space M \<Longrightarrow> (\<lambda>i. u i x) \<longlonglongrightarrow> u' x"
39092
98de40859858 move lemmas to correct theory files
hoelzl
parents: 39087
diff changeset
  1766
  and u: "\<And>i. u i \<in> borel_measurable M"
98de40859858 move lemmas to correct theory files
hoelzl
parents: 39087
diff changeset
  1767
  shows "u' \<in> borel_measurable M"
98de40859858 move lemmas to correct theory files
hoelzl
parents: 39087
diff changeset
  1768
proof -
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42990
diff changeset
  1769
  have "\<And>x. x \<in> space M \<Longrightarrow> liminf (\<lambda>n. ereal (u n x)) = ereal (u' x)"
46731
5302e932d1e5 avoid undeclared variables in let bindings;
wenzelm
parents: 45288
diff changeset
  1770
    using u' by (simp add: lim_imp_Liminf)
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42990
diff changeset
  1771
  moreover from u have "(\<lambda>x. liminf (\<lambda>n. ereal (u n x))) \<in> borel_measurable M"
39092
98de40859858 move lemmas to correct theory files
hoelzl
parents: 39087
diff changeset
  1772
    by auto
43920
cedb5cb948fd Rename extreal => ereal
hoelzl
parents: 42990
diff changeset
  1773
  ultimately show ?thesis by (simp cong: measurable_cong add: borel_measurable_ereal_iff)
39092
98de40859858 move lemmas to correct theory files
hoelzl
parents: 39087
diff changeset
  1774
qed
98de40859858 move lemmas to correct theory files
hoelzl
parents: 39087
diff changeset
  1775
56993
e5366291d6aa introduce Bochner integral: generalizes Lebesgue integral from real-valued function to functions on real-normed vector spaces
hoelzl
parents: 56371
diff changeset
  1776
lemma borel_measurable_LIMSEQ_metric:
e5366291d6aa introduce Bochner integral: generalizes Lebesgue integral from real-valued function to functions on real-normed vector spaces
hoelzl
parents: 56371
diff changeset
  1777
  fixes f :: "nat \<Rightarrow> 'a \<Rightarrow> 'b :: metric_space"
e5366291d6aa introduce Bochner integral: generalizes Lebesgue integral from real-valued function to functions on real-normed vector spaces
hoelzl
parents: 56371
diff changeset
  1778
  assumes [measurable]: "\<And>i. f i \<in> borel_measurable M"
61969
e01015e49041 more symbols;
wenzelm
parents: 61880
diff changeset
  1779
  assumes lim: "\<And>x. x \<in> space M \<Longrightarrow> (\<lambda>i. f i x) \<longlonglongrightarrow> g x"
56993
e5366291d6aa introduce Bochner integral: generalizes Lebesgue integral from real-valued function to functions on real-normed vector spaces
hoelzl
parents: 56371
diff changeset
  1780
  shows "g \<in> borel_measurable M"
e5366291d6aa introduce Bochner integral: generalizes Lebesgue integral from real-valued function to functions on real-normed vector spaces
hoelzl
parents: 56371
diff changeset
  1781
  unfolding borel_eq_closed
e5366291d6aa introduce Bochner integral: generalizes Lebesgue integral from real-valued function to functions on real-normed vector spaces
hoelzl
parents: 56371
diff changeset
  1782
proof (safe intro!: measurable_measure_of)
62372
4fe872ff91bf Borel_Space.borel is now in the type class locale
hoelzl
parents: 62083
diff changeset
  1783
  fix A :: "'b set" assume "closed A"
56993
e5366291d6aa introduce Bochner integral: generalizes Lebesgue integral from real-valued function to functions on real-normed vector spaces
hoelzl
parents: 56371
diff changeset
  1784
e5366291d6aa introduce Bochner integral: generalizes Lebesgue integral from real-valued function to functions on real-normed vector spaces
hoelzl
parents: 56371
diff changeset
  1785
  have [measurable]: "(\<lambda>x. infdist (g x) A) \<in> borel_measurable M"
62624
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
  1786
  proof (rule borel_measurable_LIMSEQ_real)
61969
e01015e49041 more symbols;
wenzelm
parents: 61880
diff changeset
  1787
    show "\<And>x. x \<in> space M \<Longrightarrow> (\<lambda>i. infdist (f i x) A) \<longlonglongrightarrow> infdist (g x) A"
56993
e5366291d6aa introduce Bochner integral: generalizes Lebesgue integral from real-valued function to functions on real-normed vector spaces
hoelzl
parents: 56371
diff changeset
  1788
      by (intro tendsto_infdist lim)
e5366291d6aa introduce Bochner integral: generalizes Lebesgue integral from real-valued function to functions on real-normed vector spaces
hoelzl
parents: 56371
diff changeset
  1789
    show "\<And>i. (\<lambda>x. infdist (f i x) A) \<in> borel_measurable M"
e5366291d6aa introduce Bochner integral: generalizes Lebesgue integral from real-valued function to functions on real-normed vector spaces
hoelzl
parents: 56371
diff changeset
  1790
      by (intro borel_measurable_continuous_on[where f="\<lambda>x. infdist x A"]
60150
bd773c47ad0b New material about complex transcendental functions (especially Ln, Arg) and polynomials
paulson <lp15@cam.ac.uk>
parents: 60017
diff changeset
  1791
        continuous_at_imp_continuous_on ballI continuous_infdist continuous_ident) auto
56993
e5366291d6aa introduce Bochner integral: generalizes Lebesgue integral from real-valued function to functions on real-normed vector spaces
hoelzl
parents: 56371
diff changeset
  1792
  qed
e5366291d6aa introduce Bochner integral: generalizes Lebesgue integral from real-valued function to functions on real-normed vector spaces
hoelzl
parents: 56371
diff changeset
  1793
e5366291d6aa introduce Bochner integral: generalizes Lebesgue integral from real-valued function to functions on real-normed vector spaces
hoelzl
parents: 56371
diff changeset
  1794
  show "g -` A \<inter> space M \<in> sets M"
e5366291d6aa introduce Bochner integral: generalizes Lebesgue integral from real-valued function to functions on real-normed vector spaces
hoelzl
parents: 56371
diff changeset
  1795
  proof cases
e5366291d6aa introduce Bochner integral: generalizes Lebesgue integral from real-valued function to functions on real-normed vector spaces
hoelzl
parents: 56371
diff changeset
  1796
    assume "A \<noteq> {}"
e5366291d6aa introduce Bochner integral: generalizes Lebesgue integral from real-valued function to functions on real-normed vector spaces
hoelzl
parents: 56371
diff changeset
  1797
    then have "\<And>x. infdist x A = 0 \<longleftrightarrow> x \<in> A"
61808
fc1556774cfe isabelle update_cartouches -c -t;
wenzelm
parents: 61609
diff changeset
  1798
      using \<open>closed A\<close> by (simp add: in_closed_iff_infdist_zero)
56993
e5366291d6aa introduce Bochner integral: generalizes Lebesgue integral from real-valued function to functions on real-normed vector spaces
hoelzl
parents: 56371
diff changeset
  1799
    then have "g -` A \<inter> space M = {x\<in>space M. infdist (g x) A = 0}"
e5366291d6aa introduce Bochner integral: generalizes Lebesgue integral from real-valued function to functions on real-normed vector spaces
hoelzl
parents: 56371
diff changeset
  1800
      by auto
e5366291d6aa introduce Bochner integral: generalizes Lebesgue integral from real-valued function to functions on real-normed vector spaces
hoelzl
parents: 56371
diff changeset
  1801
    also have "\<dots> \<in> sets M"
e5366291d6aa introduce Bochner integral: generalizes Lebesgue integral from real-valued function to functions on real-normed vector spaces
hoelzl
parents: 56371
diff changeset
  1802
      by measurable
e5366291d6aa introduce Bochner integral: generalizes Lebesgue integral from real-valued function to functions on real-normed vector spaces
hoelzl
parents: 56371
diff changeset
  1803
    finally show ?thesis .
e5366291d6aa introduce Bochner integral: generalizes Lebesgue integral from real-valued function to functions on real-normed vector spaces
hoelzl
parents: 56371
diff changeset
  1804
  qed simp
e5366291d6aa introduce Bochner integral: generalizes Lebesgue integral from real-valued function to functions on real-normed vector spaces
hoelzl
parents: 56371
diff changeset
  1805
qed auto
e5366291d6aa introduce Bochner integral: generalizes Lebesgue integral from real-valued function to functions on real-normed vector spaces
hoelzl
parents: 56371
diff changeset
  1806
62372
4fe872ff91bf Borel_Space.borel is now in the type class locale
hoelzl
parents: 62083
diff changeset
  1807
lemma sets_Collect_Cauchy[measurable]:
57036
22568fb89165 generalized Bochner integral over infinite sums
hoelzl
parents: 56994
diff changeset
  1808
  fixes f :: "nat \<Rightarrow> 'a => 'b::{metric_space, second_countable_topology}"
50002
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1809
  assumes f[measurable]: "\<And>i. f i \<in> borel_measurable M"
49774
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1810
  shows "{x\<in>space M. Cauchy (\<lambda>i. f i x)} \<in> sets M"
57036
22568fb89165 generalized Bochner integral over infinite sums
hoelzl
parents: 56994
diff changeset
  1811
  unfolding metric_Cauchy_iff2 using f by auto
49774
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1812
62624
59ceeb6f3079 generalized some Borel measurable statements to support ennreal
hoelzl
parents: 62390
diff changeset
  1813
lemma borel_measurable_lim_metric[measurable (raw)]:
57036
22568fb89165 generalized Bochner integral over infinite sums
hoelzl
parents: 56994
diff changeset
  1814
  fixes f :: "nat \<Rightarrow> 'a \<Rightarrow> 'b::{banach, second_countable_topology}"
50002
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1815
  assumes f[measurable]: "\<And>i. f i \<in> borel_measurable M"
49774
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1816
  shows "(\<lambda>x. lim (\<lambda>i. f i x)) \<in> borel_measurable M"
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1817
proof -
63040
eb4ddd18d635 eliminated old 'def';
wenzelm
parents: 62975
diff changeset
  1818
  define u' where "u' x = lim (\<lambda>i. if Cauchy (\<lambda>i. f i x) then f i x else 0)" for x
50002
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1819
  then have *: "\<And>x. lim (\<lambda>i. f i x) = (if Cauchy (\<lambda>i. f i x) then u' x else (THE x. False))"
64287
d85d88722745 more from moretop.ml
paulson <lp15@cam.ac.uk>
parents: 64284
diff changeset
  1820
    by (auto simp: lim_def convergent_eq_Cauchy[symmetric])
50002
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1821
  have "u' \<in> borel_measurable M"
57036
22568fb89165 generalized Bochner integral over infinite sums
hoelzl
parents: 56994
diff changeset
  1822
  proof (rule borel_measurable_LIMSEQ_metric)
50002
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1823
    fix x
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1824
    have "convergent (\<lambda>i. if Cauchy (\<lambda>i. f i x) then f i x else 0)"
49774
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1825
      by (cases "Cauchy (\<lambda>i. f i x)")
64287
d85d88722745 more from moretop.ml
paulson <lp15@cam.ac.uk>
parents: 64284
diff changeset
  1826
         (auto simp add: convergent_eq_Cauchy[symmetric] convergent_def)
61969
e01015e49041 more symbols;
wenzelm
parents: 61880
diff changeset
  1827
    then show "(\<lambda>i. if Cauchy (\<lambda>i. f i x) then f i x else 0) \<longlonglongrightarrow> u' x"
62372
4fe872ff91bf Borel_Space.borel is now in the type class locale
hoelzl
parents: 62083
diff changeset
  1828
      unfolding u'_def
50002
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1829
      by (rule convergent_LIMSEQ_iff[THEN iffD1])
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1830
  qed measurable
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1831
  then show ?thesis
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1832
    unfolding * by measurable
49774
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1833
qed
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1834
50002
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1835
lemma borel_measurable_suminf[measurable (raw)]:
57036
22568fb89165 generalized Bochner integral over infinite sums
hoelzl
parents: 56994
diff changeset
  1836
  fixes f :: "nat \<Rightarrow> 'a \<Rightarrow> 'b::{banach, second_countable_topology}"
50002
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1837
  assumes f[measurable]: "\<And>i. f i \<in> borel_measurable M"
49774
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1838
  shows "(\<lambda>x. suminf (\<lambda>i. f i x)) \<in> borel_measurable M"
50002
ce0d316b5b44 add measurability prover; add support for Borel sets
hoelzl
parents: 50001
diff changeset
  1839
  unfolding suminf_def sums_def[abs_def] lim_def[symmetric] by simp
49774
dfa8ddb874ce use continuity to show Borel-measurability
hoelzl
parents: 47761
diff changeset
  1840
63389
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1841
lemma Collect_closed_imp_pred_borel: "closed {x. P x} \<Longrightarrow> Measurable.pred borel P"
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1842
  by (simp add: pred_def)
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1843
57447
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57275
diff changeset
  1844
(* Proof by Jeremy Avigad and Luke Serafin *)
63389
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1845
lemma isCont_borel_pred[measurable]:
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1846
  fixes f :: "'b::metric_space \<Rightarrow> 'a::metric_space"
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1847
  shows "Measurable.pred borel (isCont f)"
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1848
proof (subst measurable_cong)
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1849
  let ?I = "\<lambda>j. inverse(real (Suc j))"
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1850
  show "isCont f x = (\<forall>i. \<exists>j. \<forall>y z. dist x y < ?I j \<and> dist x z < ?I j \<longrightarrow> dist (f y) (f z) \<le> ?I i)" for x
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1851
    unfolding continuous_at_eps_delta
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1852
  proof safe
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1853
    fix i assume "\<forall>e>0. \<exists>d>0. \<forall>y. dist y x < d \<longrightarrow> dist (f y) (f x) < e"
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1854
    moreover have "0 < ?I i / 2"
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1855
      by simp
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1856
    ultimately obtain d where d: "0 < d" "\<And>y. dist x y < d \<Longrightarrow> dist (f y) (f x) < ?I i / 2"
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1857
      by (metis dist_commute)
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1858
    then obtain j where j: "?I j < d"
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1859
      by (metis reals_Archimedean)
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1860
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1861
    show "\<exists>j. \<forall>y z. dist x y < ?I j \<and> dist x z < ?I j \<longrightarrow> dist (f y) (f z) \<le> ?I i"
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1862
    proof (safe intro!: exI[where x=j])
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1863
      fix y z assume *: "dist x y < ?I j" "dist x z < ?I j"
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1864
      have "dist (f y) (f z) \<le> dist (f y) (f x) + dist (f z) (f x)"
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1865
        by (rule dist_triangle2)
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1866
      also have "\<dots> < ?I i / 2 + ?I i / 2"
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1867
        by (intro add_strict_mono d less_trans[OF _ j] *)
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1868
      also have "\<dots> \<le> ?I i"
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1869
        by (simp add: field_simps of_nat_Suc)
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1870
      finally show "dist (f y) (f z) \<le> ?I i"
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1871
        by simp
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1872
    qed
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1873
  next
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1874
    fix e::real assume "0 < e"
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1875
    then obtain n where n: "?I n < e"
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1876
      by (metis reals_Archimedean)
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1877
    assume "\<forall>i. \<exists>j. \<forall>y z. dist x y < ?I j \<and> dist x z < ?I j \<longrightarrow> dist (f y) (f z) \<le> ?I i"
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1878
    from this[THEN spec, of "Suc n"]
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1879
    obtain j where j: "\<And>y z. dist x y < ?I j \<Longrightarrow> dist x z < ?I j \<Longrightarrow> dist (f y) (f z) \<le> ?I (Suc n)"
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1880
      by auto
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1881
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1882
    show "\<exists>d>0. \<forall>y. dist y x < d \<longrightarrow> dist (f y) (f x) < e"
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1883
    proof (safe intro!: exI[of _ "?I j"])
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1884
      fix y assume "dist y x < ?I j"
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1885
      then have "dist (f y) (f x) \<le> ?I (Suc n)"
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1886
        by (intro j) (auto simp: dist_commute)
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1887
      also have "?I (Suc n) < ?I n"
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1888
        by simp
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1889
      also note n
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1890
      finally show "dist (f y) (f x) < e" .
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1891
    qed simp
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1892
  qed
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1893
qed (intro pred_intros_countable closed_Collect_all closed_Collect_le open_Collect_less
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1894
           Collect_closed_imp_pred_borel closed_Collect_imp open_Collect_conj continuous_intros)
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1895
57447
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57275
diff changeset
  1896
lemma isCont_borel:
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57275
diff changeset
  1897
  fixes f :: "'b::metric_space \<Rightarrow> 'a::metric_space"
87429bdecad5 import more stuff from the CLT proof; base the lborel measure on interval_measure; remove lebesgue measure
hoelzl
parents: 57275
diff changeset
  1898
  shows "{x. isCont f x} \<in> sets borel"
63389
5d8607370faf simplified proof for measurability of isCont
hoelzl
parents: 63332
diff changeset
  1899
  by simp
62083
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
  1900
61880
ff4d33058566 moved some theorems from the CLT proof; reordered some theorems / notation
hoelzl
parents: 61808
diff changeset
  1901
lemma is_real_interval:
ff4d33058566 moved some theorems from the CLT proof; reordered some theorems / notation
hoelzl
parents: 61808
diff changeset
  1902
  assumes S: "is_interval S"
ff4d33058566 moved some theorems from the CLT proof; reordered some theorems / notation
hoelzl
parents: 61808
diff changeset
  1903
  shows "\<exists>a b::real. S = {} \<or> S = UNIV \<or> S = {..<b} \<or> S = {..b} \<or> S = {a<..} \<or> S = {a..} \<or>
ff4d33058566 moved some theorems from the CLT proof; reordered some theorems / notation
hoelzl
parents: 61808
diff changeset
  1904
    S = {a<..<b} \<or> S = {a<..b} \<or> S = {a..<b} \<or> S = {a..b}"
ff4d33058566 moved some theorems from the CLT proof; reordered some theorems / notation
hoelzl
parents: 61808
diff changeset
  1905
  using S unfolding is_interval_1 by (blast intro: interval_cases)
ff4d33058566 moved some theorems from the CLT proof; reordered some theorems / notation
hoelzl
parents: 61808
diff changeset
  1906
ff4d33058566 moved some theorems from the CLT proof; reordered some theorems / notation
hoelzl
parents: 61808
diff changeset
  1907
lemma real_interval_borel_measurable:
ff4d33058566 moved some theorems from the CLT proof; reordered some theorems / notation
hoelzl
parents: 61808
diff changeset
  1908
  assumes "is_interval (S::real set)"
ff4d33058566 moved some theorems from the CLT proof; reordered some theorems / notation
hoelzl
parents: 61808
diff changeset
  1909
  shows "S \<in> sets borel"
ff4d33058566 moved some theorems from the CLT proof; reordered some theorems / notation
hoelzl
parents: 61808
diff changeset
  1910
proof -
ff4d33058566 moved some theorems from the CLT proof; reordered some theorems / notation
hoelzl
parents: 61808
diff changeset
  1911
  from assms is_real_interval have "\<exists>a b::real. S = {} \<or> S = UNIV \<or> S = {..<b} \<or> S = {..b} \<or>
ff4d33058566 moved some theorems from the CLT proof; reordered some theorems / notation
hoelzl
parents: 61808
diff changeset
  1912
    S = {a<..} \<or> S = {a..} \<or> S = {a<..<b} \<or> S = {a<..b} \<or> S = {a..<b} \<or> S = {a..b}" by auto
ff4d33058566 moved some theorems from the CLT proof; reordered some theorems / notation
hoelzl
parents: 61808
diff changeset
  1913
  then guess a ..
ff4d33058566 moved some theorems from the CLT proof; reordered some theorems / notation
hoelzl
parents: 61808
diff changeset
  1914
  then guess b ..
ff4d33058566 moved some theorems from the CLT proof; reordered some theorems / notation
hoelzl
parents: 61808
diff changeset
  1915
  thus ?thesis
ff4d33058566 moved some theorems from the CLT proof; reordered some theorems / notation
hoelzl
parents: 61808
diff changeset
  1916
    by auto
ff4d33058566 moved some theorems from the CLT proof; reordered some theorems / notation
hoelzl
parents: 61808
diff changeset
  1917
qed
ff4d33058566 moved some theorems from the CLT proof; reordered some theorems / notation
hoelzl
parents: 61808
diff changeset
  1918
64283
979cdfdf7a79 HOL-Probability: move conditional expectation from AFP/Ergodic_Theory
hoelzl
parents: 64272
diff changeset
  1919
text \<open>The next lemmas hold in any second countable linorder (including ennreal or ereal for instance),
979cdfdf7a79 HOL-Probability: move conditional expectation from AFP/Ergodic_Theory
hoelzl
parents: 64272
diff changeset
  1920
but in the current state they are restricted to reals.\<close>
979cdfdf7a79 HOL-Probability: move conditional expectation from AFP/Ergodic_Theory
hoelzl
parents: 64272
diff changeset
  1921
62083
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
  1922
lemma borel_measurable_mono_on_fnc:
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
  1923
  fixes f :: "real \<Rightarrow> real" and A :: "real set"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
  1924
  assumes "mono_on f A"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
  1925
  shows "f \<in> borel_measurable (restrict_space borel A)"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
  1926
  apply (rule measurable_restrict_countable[OF mono_on_ctble_discont[OF assms]])
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
  1927
  apply (auto intro!: image_eqI[where x="{x}" for x] simp: sets_restrict_space)
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
  1928
  apply (auto simp add: sets_restrict_restrict_space continuous_on_eq_continuous_within
62372
4fe872ff91bf Borel_Space.borel is now in the type class locale
hoelzl
parents: 62083
diff changeset
  1929
              cong: measurable_cong_sets
62083
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
  1930
              intro!: borel_measurable_continuous_on_restrict intro: continuous_within_subset)
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
  1931
  done
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
  1932
64283
979cdfdf7a79 HOL-Probability: move conditional expectation from AFP/Ergodic_Theory
hoelzl
parents: 64272
diff changeset
  1933
lemma borel_measurable_piecewise_mono:
979cdfdf7a79 HOL-Probability: move conditional expectation from AFP/Ergodic_Theory
hoelzl
parents: 64272
diff changeset
  1934
  fixes f::"real \<Rightarrow> real" and C::"real set set"
979cdfdf7a79 HOL-Probability: move conditional expectation from AFP/Ergodic_Theory
hoelzl
parents: 64272
diff changeset
  1935
  assumes "countable C" "\<And>c. c \<in> C \<Longrightarrow> c \<in> sets borel" "\<And>c. c \<in> C \<Longrightarrow> mono_on f c" "(\<Union>C) = UNIV"
979cdfdf7a79 HOL-Probability: move conditional expectation from AFP/Ergodic_Theory
hoelzl
parents: 64272
diff changeset
  1936
  shows "f \<in> borel_measurable borel"
979cdfdf7a79 HOL-Probability: move conditional expectation from AFP/Ergodic_Theory
hoelzl
parents: 64272
diff changeset
  1937
by (rule measurable_piecewise_restrict[of C], auto intro: borel_measurable_mono_on_fnc simp: assms)
979cdfdf7a79 HOL-Probability: move conditional expectation from AFP/Ergodic_Theory
hoelzl
parents: 64272
diff changeset
  1938
61880
ff4d33058566 moved some theorems from the CLT proof; reordered some theorems / notation
hoelzl
parents: 61808
diff changeset
  1939
lemma borel_measurable_mono:
ff4d33058566 moved some theorems from the CLT proof; reordered some theorems / notation
hoelzl
parents: 61808
diff changeset
  1940
  fixes f :: "real \<Rightarrow> real"
62083
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
  1941
  shows "mono f \<Longrightarrow> f \<in> borel_measurable borel"
7582b39f51ed add the proof of the central limit theorem
hoelzl
parents: 61969
diff changeset
  1942
  using borel_measurable_mono_on_fnc[of f UNIV] by (simp add: mono_def mono_on_def)
61880
ff4d33058566 moved some theorems from the CLT proof; reordered some theorems / notation
hoelzl
parents: 61808
diff changeset
  1943
64008
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1944
lemma measurable_bdd_below_real[measurable (raw)]:
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1945
  fixes F :: "'a \<Rightarrow> 'i \<Rightarrow> real"
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1946
  assumes [simp]: "countable I" and [measurable]: "\<And>i. i \<in> I \<Longrightarrow> F i \<in> M \<rightarrow>\<^sub>M borel"
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1947
  shows "Measurable.pred M (\<lambda>x. bdd_below ((\<lambda>i. F i x)`I))"
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1948
proof (subst measurable_cong)
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1949
  show "bdd_below ((\<lambda>i. F i x)`I) \<longleftrightarrow> (\<exists>q\<in>\<int>. \<forall>i\<in>I. q \<le> F i x)" for x
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1950
    by (auto simp: bdd_below_def intro!: bexI[of _ "of_int (floor _)"] intro: order_trans of_int_floor_le)
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1951
  show "Measurable.pred M (\<lambda>w. \<exists>q\<in>\<int>. \<forall>i\<in>I. q \<le> F i w)"
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1952
    using countable_int by measurable
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1953
qed
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1954
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1955
lemma borel_measurable_cINF_real[measurable (raw)]:
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1956
  fixes F :: "_ \<Rightarrow> _ \<Rightarrow> real"
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1957
  assumes [simp]: "countable I"
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1958
  assumes F[measurable]: "\<And>i. i \<in> I \<Longrightarrow> F i \<in> borel_measurable M"
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1959
  shows "(\<lambda>x. INF i:I. F i x) \<in> borel_measurable M"
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1960
proof (rule measurable_piecewise_restrict)
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1961
  let ?\<Omega> = "{x\<in>space M. bdd_below ((\<lambda>i. F i x)`I)}"
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1962
  show "countable {?\<Omega>, - ?\<Omega>}" "space M \<subseteq> \<Union>{?\<Omega>, - ?\<Omega>}" "\<And>X. X \<in> {?\<Omega>, - ?\<Omega>} \<Longrightarrow> X \<inter> space M \<in> sets M"
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1963
    by auto
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1964
  fix X assume "X \<in> {?\<Omega>, - ?\<Omega>}" then show "(\<lambda>x. INF i:I. F i x) \<in> borel_measurable (restrict_space M X)"
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1965
  proof safe
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1966
    show "(\<lambda>x. INF i:I. F i x) \<in> borel_measurable (restrict_space M ?\<Omega>)"
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1967
      by (intro borel_measurable_cINF measurable_restrict_space1 F)
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1968
         (auto simp: space_restrict_space)
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1969
    show "(\<lambda>x. INF i:I. F i x) \<in> borel_measurable (restrict_space M (-?\<Omega>))"
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1970
    proof (subst measurable_cong)
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1971
      fix x assume "x \<in> space (restrict_space M (-?\<Omega>))"
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1972
      then have "\<not> (\<forall>i\<in>I. - F i x \<le> y)" for y
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1973
        by (auto simp: space_restrict_space bdd_above_def bdd_above_uminus[symmetric])
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1974
      then show "(INF i:I. F i x) = - (THE x. False)"
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1975
        by (auto simp: space_restrict_space Inf_real_def Sup_real_def Least_def simp del: Set.ball_simps(10))
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1976
    qed simp
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1977
  qed
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1978
qed
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1979
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1980
lemma borel_Ici: "borel = sigma UNIV (range (\<lambda>x::real. {x ..}))"
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1981
proof (safe intro!: borel_eq_sigmaI1[OF borel_Iio])
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1982
  fix x :: real
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1983
  have eq: "{..<x} = space (sigma UNIV (range atLeast)) - {x ..}"
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1984
    by auto
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1985
  show "{..<x} \<in> sets (sigma UNIV (range atLeast))"
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1986
    unfolding eq by (intro sets.compl_sets) auto
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1987
qed auto
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1988
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1989
lemma borel_measurable_pred_less[measurable (raw)]:
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1990
  fixes f :: "'a \<Rightarrow> 'b::{second_countable_topology, linorder_topology}"
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1991
  shows "f \<in> borel_measurable M \<Longrightarrow> g \<in> borel_measurable M \<Longrightarrow> Measurable.pred M (\<lambda>w. f w < g w)"
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1992
  unfolding Measurable.pred_def by (rule borel_measurable_less)
17a20ca86d62 HOL-Probability: more about probability, prepare for Markov processes in the AFP
hoelzl
parents: 63952
diff changeset
  1993
54775
2d3df8633dad prefer box over greaterThanLessThan on euclidean_space
immler
parents: 54230
diff changeset
  1994
no_notation
2d3df8633dad prefer box over greaterThanLessThan on euclidean_space
immler
parents: 54230
diff changeset
  1995
  eucl_less (infix "<e" 50)
2d3df8633dad prefer box over greaterThanLessThan on euclidean_space
immler
parents: 54230
diff changeset
  1996
64284
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  1997
lemma borel_measurable_Max2[measurable (raw)]:
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  1998
  fixes f::"_ \<Rightarrow> _ \<Rightarrow> 'a::{second_countable_topology, dense_linorder, linorder_topology}"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  1999
  assumes "finite I"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2000
    and [measurable]: "\<And>i. f i \<in> borel_measurable M"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2001
  shows "(\<lambda>x. Max{f i x |i. i \<in> I}) \<in> borel_measurable M"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2002
by (simp add: borel_measurable_Max[OF assms(1), where ?f=f and ?M=M] Setcompr_eq_image)
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2003
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2004
lemma measurable_compose_n [measurable (raw)]:
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2005
  assumes "T \<in> measurable M M"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2006
  shows "(T^^n) \<in> measurable M M"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2007
by (induction n, auto simp add: measurable_compose[OF _ assms])
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2008
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2009
lemma measurable_real_imp_nat:
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2010
  fixes f::"'a \<Rightarrow> nat"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2011
  assumes [measurable]: "(\<lambda>x. real(f x)) \<in> borel_measurable M"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2012
  shows "f \<in> measurable M (count_space UNIV)"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2013
proof -
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2014
  let ?g = "(\<lambda>x. real(f x))"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2015
  have "\<And>(n::nat). ?g-`({real n}) \<inter> space M = f-`{n} \<inter> space M" by auto
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2016
  moreover have "\<And>(n::nat). ?g-`({real n}) \<inter> space M \<in> sets M" using assms by measurable
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2017
  ultimately have "\<And>(n::nat). f-`{n} \<inter> space M \<in> sets M" by simp
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2018
  then show ?thesis using measurable_count_space_eq2_countable by blast
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2019
qed
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2020
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2021
lemma measurable_equality_set [measurable]:
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2022
  fixes f g::"_\<Rightarrow> 'a::{second_countable_topology, t2_space}"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2023
  assumes [measurable]: "f \<in> borel_measurable M" "g \<in> borel_measurable M"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2024
  shows "{x \<in> space M. f x = g x} \<in> sets M"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2025
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2026
proof -
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2027
  define A where "A = {x \<in> space M. f x = g x}"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2028
  define B where "B = {y. \<exists>x::'a. y = (x,x)}"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2029
  have "A = (\<lambda>x. (f x, g x))-`B \<inter> space M" unfolding A_def B_def by auto
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2030
  moreover have "(\<lambda>x. (f x, g x)) \<in> borel_measurable M" by simp
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2031
  moreover have "B \<in> sets borel" unfolding B_def by (simp add: closed_diagonal)
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2032
  ultimately have "A \<in> sets M" by simp
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2033
  then show ?thesis unfolding A_def by simp
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2034
qed
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2035
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2036
lemma measurable_inequality_set [measurable]:
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2037
  fixes f g::"_ \<Rightarrow> 'a::{second_countable_topology, linorder_topology}"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2038
  assumes [measurable]: "f \<in> borel_measurable M" "g \<in> borel_measurable M"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2039
  shows "{x \<in> space M. f x \<le> g x} \<in> sets M"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2040
        "{x \<in> space M. f x < g x} \<in> sets M"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2041
        "{x \<in> space M. f x \<ge> g x} \<in> sets M"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2042
        "{x \<in> space M. f x > g x} \<in> sets M"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2043
proof -
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2044
  define F where "F = (\<lambda>x. (f x, g x))"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2045
  have * [measurable]: "F \<in> borel_measurable M" unfolding F_def by simp
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2046
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2047
  have "{x \<in> space M. f x \<le> g x} = F-`{(x, y) | x y. x \<le> y} \<inter> space M" unfolding F_def by auto
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2048
  moreover have "{(x, y) | x y. x \<le> (y::'a)} \<in> sets borel" using closed_subdiagonal borel_closed by blast
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2049
  ultimately show "{x \<in> space M. f x \<le> g x} \<in> sets M" using * by (metis (mono_tags, lifting) measurable_sets)
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2050
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2051
  have "{x \<in> space M. f x < g x} = F-`{(x, y) | x y. x < y} \<inter> space M" unfolding F_def by auto
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2052
  moreover have "{(x, y) | x y. x < (y::'a)} \<in> sets borel" using open_subdiagonal borel_open by blast
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2053
  ultimately show "{x \<in> space M. f x < g x} \<in> sets M" using * by (metis (mono_tags, lifting) measurable_sets)
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2054
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2055
  have "{x \<in> space M. f x \<ge> g x} = F-`{(x, y) | x y. x \<ge> y} \<inter> space M" unfolding F_def by auto
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2056
  moreover have "{(x, y) | x y. x \<ge> (y::'a)} \<in> sets borel" using closed_superdiagonal borel_closed by blast
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2057
  ultimately show "{x \<in> space M. f x \<ge> g x} \<in> sets M" using * by (metis (mono_tags, lifting) measurable_sets)
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2058
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2059
  have "{x \<in> space M. f x > g x} = F-`{(x, y) | x y. x > y} \<inter> space M" unfolding F_def by auto
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2060
  moreover have "{(x, y) | x y. x > (y::'a)} \<in> sets borel" using open_superdiagonal borel_open by blast
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2061
  ultimately show "{x \<in> space M. f x > g x} \<in> sets M" using * by (metis (mono_tags, lifting) measurable_sets)
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2062
qed
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2063
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2064
lemma measurable_limit [measurable]:
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2065
  fixes f::"nat \<Rightarrow> 'a \<Rightarrow> 'b::first_countable_topology"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2066
  assumes [measurable]: "\<And>n::nat. f n \<in> borel_measurable M"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2067
  shows "Measurable.pred M (\<lambda>x. (\<lambda>n. f n x) \<longlonglongrightarrow> c)"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2068
proof -
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2069
  obtain A :: "nat \<Rightarrow> 'b set" where A:
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2070
    "\<And>i. open (A i)"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2071
    "\<And>i. c \<in> A i"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2072
    "\<And>S. open S \<Longrightarrow> c \<in> S \<Longrightarrow> eventually (\<lambda>i. A i \<subseteq> S) sequentially"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2073
  by (rule countable_basis_at_decseq) blast
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2074
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2075
  have [measurable]: "\<And>N i. (f N)-`(A i) \<inter> space M \<in> sets M" using A(1) by auto
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2076
  then have mes: "(\<Inter>i. \<Union>n. \<Inter>N\<in>{n..}. (f N)-`(A i) \<inter> space M) \<in> sets M" by blast
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2077
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2078
  have "(u \<longlonglongrightarrow> c) \<longleftrightarrow> (\<forall>i. eventually (\<lambda>n. u n \<in> A i) sequentially)" for u::"nat \<Rightarrow> 'b"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2079
  proof
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2080
    assume "u \<longlonglongrightarrow> c"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2081
    then have "eventually (\<lambda>n. u n \<in> A i) sequentially" for i using A(1)[of i] A(2)[of i]
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2082
      by (simp add: topological_tendstoD)
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2083
    then show "(\<forall>i. eventually (\<lambda>n. u n \<in> A i) sequentially)" by auto
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2084
  next
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2085
    assume H: "(\<forall>i. eventually (\<lambda>n. u n \<in> A i) sequentially)"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2086
    show "(u \<longlonglongrightarrow> c)"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2087
    proof (rule topological_tendstoI)
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2088
      fix S assume "open S" "c \<in> S"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2089
      with A(3)[OF this] obtain i where "A i \<subseteq> S"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2090
        using eventually_False_sequentially eventually_mono by blast
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2091
      moreover have "eventually (\<lambda>n. u n \<in> A i) sequentially" using H by simp
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2092
      ultimately show "\<forall>\<^sub>F n in sequentially. u n \<in> S"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2093
        by (simp add: eventually_mono subset_eq)
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2094
    qed
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2095
  qed
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2096
  then have "{x. (\<lambda>n. f n x) \<longlonglongrightarrow> c} = (\<Inter>i. \<Union>n. \<Inter>N\<in>{n..}. (f N)-`(A i))"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2097
    by (auto simp add: atLeast_def eventually_at_top_linorder)
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2098
  then have "{x \<in> space M. (\<lambda>n. f n x) \<longlonglongrightarrow> c} = (\<Inter>i. \<Union>n. \<Inter>N\<in>{n..}. (f N)-`(A i) \<inter> space M)"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2099
    by auto
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2100
  then have "{x \<in> space M. (\<lambda>n. f n x) \<longlonglongrightarrow> c} \<in> sets M" using mes by simp
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2101
  then show ?thesis by auto
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2102
qed
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2103
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2104
lemma measurable_limit2 [measurable]:
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2105
  fixes u::"nat \<Rightarrow> 'a \<Rightarrow> real"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2106
  assumes [measurable]: "\<And>n. u n \<in> borel_measurable M" "v \<in> borel_measurable M"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2107
  shows "Measurable.pred M (\<lambda>x. (\<lambda>n. u n x) \<longlonglongrightarrow> v x)"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2108
proof -
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2109
  define w where "w = (\<lambda>n x. u n x - v x)"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2110
  have [measurable]: "w n \<in> borel_measurable M" for n unfolding w_def by auto
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2111
  have "((\<lambda>n. u n x) \<longlonglongrightarrow> v x) \<longleftrightarrow> ((\<lambda>n. w n x) \<longlonglongrightarrow> 0)" for x
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2112
    unfolding w_def using Lim_null by auto
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2113
  then show ?thesis using measurable_limit by auto
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2114
qed
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2115
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2116
lemma measurable_P_restriction [measurable (raw)]:
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2117
  assumes [measurable]: "Measurable.pred M P" "A \<in> sets M"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2118
  shows "{x \<in> A. P x} \<in> sets M"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2119
proof -
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2120
  have "A \<subseteq> space M" using sets.sets_into_space[OF assms(2)].
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2121
  then have "{x \<in> A. P x} = A \<inter> {x \<in> space M. P x}" by blast
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2122
  then show ?thesis by auto
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2123
qed
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2124
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2125
lemma measurable_sum_nat [measurable (raw)]:
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2126
  fixes f :: "'c \<Rightarrow> 'a \<Rightarrow> nat"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2127
  assumes "\<And>i. i \<in> S \<Longrightarrow> f i \<in> measurable M (count_space UNIV)"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2128
  shows "(\<lambda>x. \<Sum>i\<in>S. f i x) \<in> measurable M (count_space UNIV)"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2129
proof cases
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2130
  assume "finite S"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2131
  then show ?thesis using assms by induct auto
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2132
qed simp
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2133
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2134
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2135
lemma measurable_abs_powr [measurable]:
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2136
  fixes p::real
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2137
  assumes [measurable]: "f \<in> borel_measurable M"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2138
  shows "(\<lambda>x. \<bar>f x\<bar> powr p) \<in> borel_measurable M"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2139
unfolding powr_def by auto
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2140
64911
f0e07600de47 isabelle update_cartouches -c -t;
wenzelm
parents: 64320
diff changeset
  2141
text \<open>The next one is a variation around \verb+measurable_restrict_space+.\<close>
64284
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2142
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2143
lemma measurable_restrict_space3:
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2144
  assumes "f \<in> measurable M N" and
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2145
          "f \<in> A \<rightarrow> B"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2146
  shows "f \<in> measurable (restrict_space M A) (restrict_space N B)"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2147
proof -
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2148
  have "f \<in> measurable (restrict_space M A) N" using assms(1) measurable_restrict_space1 by auto
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2149
  then show ?thesis by (metis Int_iff funcsetI funcset_mem
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2150
      measurable_restrict_space2[of f, of "restrict_space M A", of B, of N] assms(2) space_restrict_space)
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2151
qed
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2152
64911
f0e07600de47 isabelle update_cartouches -c -t;
wenzelm
parents: 64320
diff changeset
  2153
text \<open>The next one is a variation around \verb+measurable_piecewise_restrict+.\<close>
64284
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2154
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2155
lemma measurable_piecewise_restrict2:
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2156
  assumes [measurable]: "\<And>n. A n \<in> sets M"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2157
      and "space M = (\<Union>(n::nat). A n)"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2158
          "\<And>n. \<exists>h \<in> measurable M N. (\<forall>x \<in> A n. f x = h x)"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2159
  shows "f \<in> measurable M N"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2160
proof (rule measurableI)
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2161
  fix B assume [measurable]: "B \<in> sets N"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2162
  {
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2163
    fix n::nat
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2164
    obtain h where [measurable]: "h \<in> measurable M N" and "\<forall>x \<in> A n. f x = h x" using assms(3) by blast
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2165
    then have *: "f-`B \<inter> A n = h-`B \<inter> A n" by auto
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2166
    have "h-`B \<inter> A n = h-`B \<inter> space M \<inter> A n" using assms(2) sets.sets_into_space by auto
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2167
    then have "h-`B \<inter> A n \<in> sets M" by simp
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2168
    then have "f-`B \<inter> A n \<in> sets M" using * by simp
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2169
  }
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2170
  then have "(\<Union>n. f-`B \<inter> A n) \<in> sets M" by measurable
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2171
  moreover have "f-`B \<inter> space M = (\<Union>n. f-`B \<inter> A n)" using assms(2) by blast
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2172
  ultimately show "f-`B \<inter> space M \<in> sets M" by simp
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2173
next
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2174
  fix x assume "x \<in> space M"
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2175
  then obtain n where "x \<in> A n" using assms(2) by blast
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2176
  obtain h where [measurable]: "h \<in> measurable M N" and "\<forall>x \<in> A n. f x = h x" using assms(3) by blast
64911
f0e07600de47 isabelle update_cartouches -c -t;
wenzelm
parents: 64320
diff changeset
  2177
  then have "f x = h x" using \<open>x \<in> A n\<close> by blast
f0e07600de47 isabelle update_cartouches -c -t;
wenzelm
parents: 64320
diff changeset
  2178
  moreover have "h x \<in> space N" by (metis measurable_space \<open>x \<in> space M\<close> \<open>h \<in> measurable M N\<close>)
64284
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2179
  ultimately show "f x \<in> space N" by simp
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2180
qed
f3b905b2eee2 HOL-Analysis: more theorems from Sébastien Gouëzel's Ergodic_Theory
hoelzl
parents: 64283
diff changeset
  2181
51683
baefa3b461c2 generalize Borel-set properties from real/ereal/ordered_euclidean_spaces to order_topology and real_normed_vector
hoelzl
parents: 51478
diff changeset
  2182
end