src/HOL/Probability/Complete_Measure.thy
author hoelzl
Wed Feb 02 12:34:45 2011 +0100 (2011-02-02)
changeset 41689 3e39b0e730d6
parent 41097 a1abfa4e2b44
child 41705 1100512e16d8
permissions -rw-r--r--
the measure valuation is again part of the measure_space type, instead of an explicit parameter to the locale;
changed syntax for simple_function, simple_integral, positive_integral, integral and RN_deriv.
introduced binder variants for simple_integral, positive_integral and integral.
hoelzl@40859
     1
(*  Title:      Complete_Measure.thy
hoelzl@40859
     2
    Author:     Robert Himmelmann, Johannes Hoelzl, TU Muenchen
hoelzl@40859
     3
*)
hoelzl@40859
     4
theory Complete_Measure
hoelzl@40859
     5
imports Product_Measure
hoelzl@40859
     6
begin
hoelzl@40859
     7
hoelzl@40859
     8
locale completeable_measure_space = measure_space
hoelzl@40859
     9
hoelzl@41689
    10
definition (in completeable_measure_space)
hoelzl@41689
    11
  "split_completion A p = (\<exists>N'. A = fst p \<union> snd p \<and> fst p \<inter> snd p = {} \<and>
hoelzl@41689
    12
    fst p \<in> sets M \<and> snd p \<subseteq> N' \<and> N' \<in> null_sets)"
hoelzl@41689
    13
hoelzl@41689
    14
definition (in completeable_measure_space)
hoelzl@41689
    15
  "main_part A = fst (Eps (split_completion A))"
hoelzl@41689
    16
hoelzl@41689
    17
definition (in completeable_measure_space)
hoelzl@41689
    18
  "null_part A = snd (Eps (split_completion A))"
hoelzl@41689
    19
hoelzl@41689
    20
abbreviation (in completeable_measure_space) "\<mu>' A \<equiv> \<mu> (main_part A)"
hoelzl@41689
    21
hoelzl@41689
    22
definition (in completeable_measure_space) completion :: "('a, 'b) measure_space_scheme" where
hoelzl@40859
    23
  "completion = \<lparr> space = space M,
hoelzl@41689
    24
                  sets = { S \<union> N |S N N'. S \<in> sets M \<and> N' \<in> null_sets \<and> N \<subseteq> N' },
hoelzl@41689
    25
                  measure = \<mu>',
hoelzl@41689
    26
                  \<dots> = more M \<rparr>"
hoelzl@41689
    27
hoelzl@40859
    28
hoelzl@40859
    29
lemma (in completeable_measure_space) space_completion[simp]:
hoelzl@40859
    30
  "space completion = space M" unfolding completion_def by simp
hoelzl@40859
    31
hoelzl@40859
    32
lemma (in completeable_measure_space) sets_completionE:
hoelzl@40859
    33
  assumes "A \<in> sets completion"
hoelzl@40859
    34
  obtains S N N' where "A = S \<union> N" "N \<subseteq> N'" "N' \<in> null_sets" "S \<in> sets M"
hoelzl@40859
    35
  using assms unfolding completion_def by auto
hoelzl@40859
    36
hoelzl@40859
    37
lemma (in completeable_measure_space) sets_completionI:
hoelzl@40859
    38
  assumes "A = S \<union> N" "N \<subseteq> N'" "N' \<in> null_sets" "S \<in> sets M"
hoelzl@40859
    39
  shows "A \<in> sets completion"
hoelzl@40859
    40
  using assms unfolding completion_def by auto
hoelzl@40859
    41
hoelzl@40859
    42
lemma (in completeable_measure_space) sets_completionI_sets[intro]:
hoelzl@40859
    43
  "A \<in> sets M \<Longrightarrow> A \<in> sets completion"
hoelzl@40859
    44
  unfolding completion_def by force
hoelzl@40859
    45
hoelzl@40859
    46
lemma (in completeable_measure_space) null_sets_completion:
hoelzl@40859
    47
  assumes "N' \<in> null_sets" "N \<subseteq> N'" shows "N \<in> sets completion"
hoelzl@40859
    48
  apply(rule sets_completionI[of N "{}" N N'])
hoelzl@40859
    49
  using assms by auto
hoelzl@40859
    50
hoelzl@40859
    51
sublocale completeable_measure_space \<subseteq> completion!: sigma_algebra completion
hoelzl@40859
    52
proof (unfold sigma_algebra_iff2, safe)
hoelzl@40859
    53
  fix A x assume "A \<in> sets completion" "x \<in> A"
hoelzl@40859
    54
  with sets_into_space show "x \<in> space completion"
hoelzl@40859
    55
    by (auto elim!: sets_completionE)
hoelzl@40859
    56
next
hoelzl@40859
    57
  fix A assume "A \<in> sets completion"
hoelzl@40859
    58
  from this[THEN sets_completionE] guess S N N' . note A = this
hoelzl@40859
    59
  let ?C = "space completion"
hoelzl@40859
    60
  show "?C - A \<in> sets completion" using A
hoelzl@40859
    61
    by (intro sets_completionI[of _ "(?C - S) \<inter> (?C - N')" "(?C - S) \<inter> N' \<inter> (?C - N)"])
hoelzl@40859
    62
       auto
hoelzl@40859
    63
next
hoelzl@40859
    64
  fix A ::"nat \<Rightarrow> 'a set" assume A: "range A \<subseteq> sets completion"
hoelzl@40859
    65
  then have "\<forall>n. \<exists>S N N'. A n = S \<union> N \<and> S \<in> sets M \<and> N' \<in> null_sets \<and> N \<subseteq> N'"
hoelzl@40859
    66
    unfolding completion_def by (auto simp: image_subset_iff)
hoelzl@40859
    67
  from choice[OF this] guess S ..
hoelzl@40859
    68
  from choice[OF this] guess N ..
hoelzl@40859
    69
  from choice[OF this] guess N' ..
hoelzl@40859
    70
  then show "UNION UNIV A \<in> sets completion"
hoelzl@40859
    71
    using null_sets_UN[of N']
hoelzl@40859
    72
    by (intro sets_completionI[of _ "UNION UNIV S" "UNION UNIV N" "UNION UNIV N'"])
hoelzl@40859
    73
       auto
hoelzl@40859
    74
qed auto
hoelzl@40859
    75
hoelzl@40859
    76
lemma (in completeable_measure_space) split_completion:
hoelzl@40859
    77
  assumes "A \<in> sets completion"
hoelzl@40859
    78
  shows "split_completion A (main_part A, null_part A)"
hoelzl@40859
    79
  unfolding main_part_def null_part_def
hoelzl@40859
    80
proof (rule someI2_ex)
hoelzl@40859
    81
  from assms[THEN sets_completionE] guess S N N' . note A = this
hoelzl@40859
    82
  let ?P = "(S, N - S)"
hoelzl@40859
    83
  show "\<exists>p. split_completion A p"
hoelzl@40859
    84
    unfolding split_completion_def using A
hoelzl@40859
    85
  proof (intro exI conjI)
hoelzl@40859
    86
    show "A = fst ?P \<union> snd ?P" using A by auto
hoelzl@40859
    87
    show "snd ?P \<subseteq> N'" using A by auto
hoelzl@40859
    88
  qed auto
hoelzl@40859
    89
qed auto
hoelzl@40859
    90
hoelzl@40859
    91
lemma (in completeable_measure_space)
hoelzl@40859
    92
  assumes "S \<in> sets completion"
hoelzl@40859
    93
  shows main_part_sets[intro, simp]: "main_part S \<in> sets M"
hoelzl@40859
    94
    and main_part_null_part_Un[simp]: "main_part S \<union> null_part S = S"
hoelzl@40859
    95
    and main_part_null_part_Int[simp]: "main_part S \<inter> null_part S = {}"
hoelzl@40859
    96
  using split_completion[OF assms] by (auto simp: split_completion_def)
hoelzl@40859
    97
hoelzl@40859
    98
lemma (in completeable_measure_space) null_part:
hoelzl@40859
    99
  assumes "S \<in> sets completion" shows "\<exists>N. N\<in>null_sets \<and> null_part S \<subseteq> N"
hoelzl@40859
   100
  using split_completion[OF assms] by (auto simp: split_completion_def)
hoelzl@40859
   101
hoelzl@40859
   102
lemma (in completeable_measure_space) null_part_sets[intro, simp]:
hoelzl@40859
   103
  assumes "S \<in> sets M" shows "null_part S \<in> sets M" "\<mu> (null_part S) = 0"
hoelzl@40859
   104
proof -
hoelzl@40859
   105
  have S: "S \<in> sets completion" using assms by auto
hoelzl@40859
   106
  have "S - main_part S \<in> sets M" using assms by auto
hoelzl@40859
   107
  moreover
hoelzl@40859
   108
  from main_part_null_part_Un[OF S] main_part_null_part_Int[OF S]
hoelzl@40859
   109
  have "S - main_part S = null_part S" by auto
hoelzl@40859
   110
  ultimately show sets: "null_part S \<in> sets M" by auto
hoelzl@40859
   111
  from null_part[OF S] guess N ..
hoelzl@40859
   112
  with measure_eq_0[of N "null_part S"] sets
hoelzl@40859
   113
  show "\<mu> (null_part S) = 0" by auto
hoelzl@40859
   114
qed
hoelzl@40859
   115
hoelzl@40859
   116
lemma (in completeable_measure_space) \<mu>'_set[simp]:
hoelzl@40859
   117
  assumes "S \<in> sets M" shows "\<mu>' S = \<mu> S"
hoelzl@40859
   118
proof -
hoelzl@40859
   119
  have S: "S \<in> sets completion" using assms by auto
hoelzl@40859
   120
  then have "\<mu> S = \<mu> (main_part S \<union> null_part S)" by simp
hoelzl@41689
   121
  also have "\<dots> = \<mu>' S"
hoelzl@40859
   122
    using S assms measure_additive[of "main_part S" "null_part S"]
hoelzl@40859
   123
    by (auto simp: measure_additive)
hoelzl@41689
   124
  finally show ?thesis by simp
hoelzl@40859
   125
qed
hoelzl@40859
   126
hoelzl@40859
   127
lemma (in completeable_measure_space) sets_completionI_sub:
hoelzl@40859
   128
  assumes N: "N' \<in> null_sets" "N \<subseteq> N'"
hoelzl@40859
   129
  shows "N \<in> sets completion"
hoelzl@40859
   130
  using assms by (intro sets_completionI[of _ "{}" N N']) auto
hoelzl@40859
   131
hoelzl@40859
   132
lemma (in completeable_measure_space) \<mu>_main_part_UN:
hoelzl@40859
   133
  fixes S :: "nat \<Rightarrow> 'a set"
hoelzl@40859
   134
  assumes "range S \<subseteq> sets completion"
hoelzl@40859
   135
  shows "\<mu>' (\<Union>i. (S i)) = \<mu> (\<Union>i. main_part (S i))"
hoelzl@40859
   136
proof -
hoelzl@40859
   137
  have S: "\<And>i. S i \<in> sets completion" using assms by auto
hoelzl@40859
   138
  then have UN: "(\<Union>i. S i) \<in> sets completion" by auto
hoelzl@40859
   139
  have "\<forall>i. \<exists>N. N \<in> null_sets \<and> null_part (S i) \<subseteq> N"
hoelzl@40859
   140
    using null_part[OF S] by auto
hoelzl@40859
   141
  from choice[OF this] guess N .. note N = this
hoelzl@40859
   142
  then have UN_N: "(\<Union>i. N i) \<in> null_sets" by (intro null_sets_UN) auto
hoelzl@40859
   143
  have "(\<Union>i. S i) \<in> sets completion" using S by auto
hoelzl@40859
   144
  from null_part[OF this] guess N' .. note N' = this
hoelzl@40859
   145
  let ?N = "(\<Union>i. N i) \<union> N'"
hoelzl@40859
   146
  have null_set: "?N \<in> null_sets" using N' UN_N by (intro null_sets_Un) auto
hoelzl@40859
   147
  have "main_part (\<Union>i. S i) \<union> ?N = (main_part (\<Union>i. S i) \<union> null_part (\<Union>i. S i)) \<union> ?N"
hoelzl@40859
   148
    using N' by auto
hoelzl@40859
   149
  also have "\<dots> = (\<Union>i. main_part (S i) \<union> null_part (S i)) \<union> ?N"
hoelzl@40859
   150
    unfolding main_part_null_part_Un[OF S] main_part_null_part_Un[OF UN] by auto
hoelzl@40859
   151
  also have "\<dots> = (\<Union>i. main_part (S i)) \<union> ?N"
hoelzl@40859
   152
    using N by auto
hoelzl@40859
   153
  finally have *: "main_part (\<Union>i. S i) \<union> ?N = (\<Union>i. main_part (S i)) \<union> ?N" .
hoelzl@40859
   154
  have "\<mu> (main_part (\<Union>i. S i)) = \<mu> (main_part (\<Union>i. S i) \<union> ?N)"
hoelzl@40859
   155
    using null_set UN by (intro measure_Un_null_set[symmetric]) auto
hoelzl@40859
   156
  also have "\<dots> = \<mu> ((\<Union>i. main_part (S i)) \<union> ?N)"
hoelzl@40859
   157
    unfolding * ..
hoelzl@40859
   158
  also have "\<dots> = \<mu> (\<Union>i. main_part (S i))"
hoelzl@40859
   159
    using null_set S by (intro measure_Un_null_set) auto
hoelzl@41689
   160
  finally show ?thesis .
hoelzl@40859
   161
qed
hoelzl@40859
   162
hoelzl@40859
   163
lemma (in completeable_measure_space) \<mu>_main_part_Un:
hoelzl@40859
   164
  assumes S: "S \<in> sets completion" and T: "T \<in> sets completion"
hoelzl@40859
   165
  shows "\<mu>' (S \<union> T) = \<mu> (main_part S \<union> main_part T)"
hoelzl@40859
   166
proof -
hoelzl@40859
   167
  have UN: "(\<Union>i. binary (main_part S) (main_part T) i) = (\<Union>i. main_part (binary S T i))"
hoelzl@40859
   168
    unfolding binary_def by (auto split: split_if_asm)
hoelzl@40859
   169
  show ?thesis
hoelzl@40859
   170
    using \<mu>_main_part_UN[of "binary S T"] assms
hoelzl@40859
   171
    unfolding range_binary_eq Un_range_binary UN by auto
hoelzl@40859
   172
qed
hoelzl@40859
   173
hoelzl@41689
   174
sublocale completeable_measure_space \<subseteq> completion!: measure_space completion
hoelzl@41689
   175
  where "measure completion = \<mu>'"
hoelzl@41689
   176
proof -
hoelzl@41689
   177
  show "measure_space completion"
hoelzl@41689
   178
  proof
hoelzl@41689
   179
    show "measure completion {} = 0" by (auto simp: completion_def)
hoelzl@41689
   180
  next
hoelzl@41689
   181
    show "countably_additive completion (measure completion)"
hoelzl@41689
   182
    proof (intro countably_additiveI)
hoelzl@41689
   183
      fix A :: "nat \<Rightarrow> 'a set" assume A: "range A \<subseteq> sets completion" "disjoint_family A"
hoelzl@41689
   184
      have "disjoint_family (\<lambda>i. main_part (A i))"
hoelzl@41689
   185
      proof (intro disjoint_family_on_bisimulation[OF A(2)])
hoelzl@41689
   186
        fix n m assume "A n \<inter> A m = {}"
hoelzl@41689
   187
        then have "(main_part (A n) \<union> null_part (A n)) \<inter> (main_part (A m) \<union> null_part (A m)) = {}"
hoelzl@41689
   188
          using A by (subst (1 2) main_part_null_part_Un) auto
hoelzl@41689
   189
        then show "main_part (A n) \<inter> main_part (A m) = {}" by auto
hoelzl@41689
   190
      qed
hoelzl@41689
   191
      then have "(\<Sum>\<^isub>\<infinity>n. measure completion (A n)) = \<mu> (\<Union>i. main_part (A i))"
hoelzl@41689
   192
        unfolding completion_def using A by (auto intro!: measure_countably_additive)
hoelzl@41689
   193
      then show "(\<Sum>\<^isub>\<infinity>n. measure completion (A n)) = measure completion (UNION UNIV A)"
hoelzl@41689
   194
        by (simp add: completion_def \<mu>_main_part_UN[OF A(1)])
hoelzl@40859
   195
    qed
hoelzl@40859
   196
  qed
hoelzl@41689
   197
  show "measure completion = \<mu>'" unfolding completion_def by simp
hoelzl@40859
   198
qed
hoelzl@40859
   199
hoelzl@40859
   200
lemma (in completeable_measure_space) completion_ex_simple_function:
hoelzl@41689
   201
  assumes f: "simple_function completion f"
hoelzl@41689
   202
  shows "\<exists>f'. simple_function M f' \<and> (AE x. f x = f' x)"
hoelzl@40859
   203
proof -
hoelzl@40859
   204
  let "?F x" = "f -` {x} \<inter> space M"
hoelzl@40859
   205
  have F: "\<And>x. ?F x \<in> sets completion" and fin: "finite (f`space M)"
hoelzl@40871
   206
    using completion.simple_functionD[OF f]
hoelzl@40859
   207
      completion.simple_functionD[OF f] by simp_all
hoelzl@40859
   208
  have "\<forall>x. \<exists>N. N \<in> null_sets \<and> null_part (?F x) \<subseteq> N"
hoelzl@40859
   209
    using F null_part by auto
hoelzl@40859
   210
  from choice[OF this] obtain N where
hoelzl@40859
   211
    N: "\<And>x. null_part (?F x) \<subseteq> N x" "\<And>x. N x \<in> null_sets" by auto
hoelzl@40859
   212
  let ?N = "\<Union>x\<in>f`space M. N x" let "?f' x" = "if x \<in> ?N then undefined else f x"
hoelzl@40859
   213
  have sets: "?N \<in> null_sets" using N fin by (intro null_sets_finite_UN) auto
hoelzl@40859
   214
  show ?thesis unfolding simple_function_def
hoelzl@40859
   215
  proof (safe intro!: exI[of _ ?f'])
hoelzl@40859
   216
    have "?f' ` space M \<subseteq> f`space M \<union> {undefined}" by auto
hoelzl@40859
   217
    from finite_subset[OF this] completion.simple_functionD(1)[OF f]
hoelzl@40859
   218
    show "finite (?f' ` space M)" by auto
hoelzl@40859
   219
  next
hoelzl@40859
   220
    fix x assume "x \<in> space M"
hoelzl@40859
   221
    have "?f' -` {?f' x} \<inter> space M =
hoelzl@40859
   222
      (if x \<in> ?N then ?F undefined \<union> ?N
hoelzl@40859
   223
       else if f x = undefined then ?F (f x) \<union> ?N
hoelzl@40859
   224
       else ?F (f x) - ?N)"
hoelzl@40859
   225
      using N(2) sets_into_space by (auto split: split_if_asm)
hoelzl@40859
   226
    moreover { fix y have "?F y \<union> ?N \<in> sets M"
hoelzl@40859
   227
      proof cases
hoelzl@40859
   228
        assume y: "y \<in> f`space M"
hoelzl@40859
   229
        have "?F y \<union> ?N = (main_part (?F y) \<union> null_part (?F y)) \<union> ?N"
hoelzl@40859
   230
          using main_part_null_part_Un[OF F] by auto
hoelzl@40859
   231
        also have "\<dots> = main_part (?F y) \<union> ?N"
hoelzl@40859
   232
          using y N by auto
hoelzl@40859
   233
        finally show ?thesis
hoelzl@40859
   234
          using F sets by auto
hoelzl@40859
   235
      next
hoelzl@40859
   236
        assume "y \<notin> f`space M" then have "?F y = {}" by auto
hoelzl@40859
   237
        then show ?thesis using sets by auto
hoelzl@40859
   238
      qed }
hoelzl@40859
   239
    moreover {
hoelzl@40859
   240
      have "?F (f x) - ?N = main_part (?F (f x)) \<union> null_part (?F (f x)) - ?N"
hoelzl@40859
   241
        using main_part_null_part_Un[OF F] by auto
hoelzl@40859
   242
      also have "\<dots> = main_part (?F (f x)) - ?N"
hoelzl@40859
   243
        using N `x \<in> space M` by auto
hoelzl@40859
   244
      finally have "?F (f x) - ?N \<in> sets M"
hoelzl@40859
   245
        using F sets by auto }
hoelzl@40859
   246
    ultimately show "?f' -` {?f' x} \<inter> space M \<in> sets M" by auto
hoelzl@40859
   247
  next
hoelzl@40859
   248
    show "AE x. f x = ?f' x"
hoelzl@40859
   249
      by (rule AE_I', rule sets) auto
hoelzl@40859
   250
  qed
hoelzl@40859
   251
qed
hoelzl@40859
   252
hoelzl@40859
   253
lemma (in completeable_measure_space) completion_ex_borel_measurable:
hoelzl@41023
   254
  fixes g :: "'a \<Rightarrow> pextreal"
hoelzl@40859
   255
  assumes g: "g \<in> borel_measurable completion"
hoelzl@40859
   256
  shows "\<exists>g'\<in>borel_measurable M. (AE x. g x = g' x)"
hoelzl@40859
   257
proof -
hoelzl@40859
   258
  from g[THEN completion.borel_measurable_implies_simple_function_sequence]
hoelzl@41689
   259
  obtain f where "\<And>i. simple_function completion (f i)" "f \<up> g" by auto
hoelzl@41689
   260
  then have "\<forall>i. \<exists>f'. simple_function M f' \<and> (AE x. f i x = f' x)"
hoelzl@40859
   261
    using completion_ex_simple_function by auto
hoelzl@40859
   262
  from this[THEN choice] obtain f' where
hoelzl@41689
   263
    sf: "\<And>i. simple_function M (f' i)" and
hoelzl@40859
   264
    AE: "\<forall>i. AE x. f i x = f' i x" by auto
hoelzl@40859
   265
  show ?thesis
hoelzl@40859
   266
  proof (intro bexI)
hoelzl@40859
   267
    from AE[unfolded all_AE_countable]
hoelzl@41097
   268
    show "AE x. g x = (SUP i. f' i x)" (is "AE x. g x = ?f x")
hoelzl@40859
   269
    proof (rule AE_mp, safe intro!: AE_cong)
hoelzl@40859
   270
      fix x assume eq: "\<forall>i. f i x = f' i x"
hoelzl@41097
   271
      moreover have "g = SUPR UNIV f" using `f \<up> g` unfolding isoton_def by simp
hoelzl@41097
   272
      ultimately show "g x = ?f x" by (simp add: SUPR_apply)
hoelzl@40859
   273
    qed
hoelzl@40859
   274
    show "?f \<in> borel_measurable M"
hoelzl@41097
   275
      using sf by (auto intro: borel_measurable_simple_function)
hoelzl@40859
   276
  qed
hoelzl@40859
   277
qed
hoelzl@40859
   278
hoelzl@40859
   279
end