1(* Title: HOL/Probability/Infinite_Product_Measure.thy 2 Author: Johannes H��lzl, TU M��nchen 3*) 4 5section \<open>Infinite Product Measure\<close> 6 7theory Infinite_Product_Measure 8 imports Probability_Measure Projective_Family 9begin 10 11lemma (in product_prob_space) distr_PiM_restrict_finite: 12 assumes "finite J" "J \<subseteq> I" 13 shows "distr (PiM I M) (PiM J M) (\<lambda>x. restrict x J) = PiM J M" 14proof (rule PiM_eqI) 15 fix X assume X: "\<And>i. i \<in> J \<Longrightarrow> X i \<in> sets (M i)" 16 { fix J X assume J: "J \<noteq> {} \<or> I = {}" "finite J" "J \<subseteq> I" and X: "\<And>i. i \<in> J \<Longrightarrow> X i \<in> sets (M i)" 17 have "emeasure (PiM I M) (emb I J (Pi\<^sub>E J X)) = (\<Prod>i\<in>J. M i (X i))" 18 proof (subst emeasure_extend_measure_Pair[OF PiM_def, where \<mu>'=lim], goal_cases) 19 case 1 then show ?case 20 by (simp add: M.emeasure_space_1 emeasure_PiM Pi_iff sets_PiM_I_finite emeasure_lim_emb) 21 next 22 case (2 J X) 23 then have "emb I J (Pi\<^sub>E J X) \<in> sets (PiM I M)" 24 by (intro measurable_prod_emb sets_PiM_I_finite) auto 25 from this[THEN sets.sets_into_space] show ?case 26 by (simp add: space_PiM) 27 qed (insert assms J X, simp_all del: sets_lim 28 add: M.emeasure_space_1 sets_lim[symmetric] emeasure_countably_additive emeasure_positive) } 29 note * = this 30 31 have "emeasure (PiM I M) (emb I J (Pi\<^sub>E J X)) = (\<Prod>i\<in>J. M i (X i))" 32 proof (cases "J \<noteq> {} \<or> I = {}") 33 case False 34 then obtain i where i: "J = {}" "i \<in> I" by auto 35 then have "emb I {} {\<lambda>x. undefined} = emb I {i} (\<Pi>\<^sub>E i\<in>{i}. space (M i))" 36 by (auto simp: space_PiM prod_emb_def) 37 with i show ?thesis 38 by (simp add: * M.emeasure_space_1) 39 next 40 case True 41 then show ?thesis 42 by (simp add: *[OF _ assms X]) 43 qed 44 with assms show "emeasure (distr (Pi\<^sub>M I M) (Pi\<^sub>M J M) (\<lambda>x. restrict x J)) (Pi\<^sub>E J X) = (\<Prod>i\<in>J. emeasure (M i) (X i))" 45 by (subst emeasure_distr_restrict[OF _ refl]) (auto intro!: sets_PiM_I_finite X) 46qed (insert assms, auto) 47 48lemma (in product_prob_space) emeasure_PiM_emb': 49 "J \<subseteq> I \<Longrightarrow> finite J \<Longrightarrow> X \<in> sets (PiM J M) \<Longrightarrow> emeasure (Pi\<^sub>M I M) (emb I J X) = PiM J M X" 50 by (subst distr_PiM_restrict_finite[symmetric, of J]) 51 (auto intro!: emeasure_distr_restrict[symmetric]) 52 53lemma (in product_prob_space) emeasure_PiM_emb: 54 "J \<subseteq> I \<Longrightarrow> finite J \<Longrightarrow> (\<And>i. i \<in> J \<Longrightarrow> X i \<in> sets (M i)) \<Longrightarrow> 55 emeasure (Pi\<^sub>M I M) (emb I J (Pi\<^sub>E J X)) = (\<Prod> i\<in>J. emeasure (M i) (X i))" 56 by (subst emeasure_PiM_emb') (auto intro!: emeasure_PiM) 57 58sublocale product_prob_space \<subseteq> P?: prob_space "Pi\<^sub>M I M" 59proof 60 have *: "emb I {} {\<lambda>x. undefined} = space (PiM I M)" 61 by (auto simp: prod_emb_def space_PiM) 62 show "emeasure (Pi\<^sub>M I M) (space (Pi\<^sub>M I M)) = 1" 63 using emeasure_PiM_emb[of "{}" "\<lambda>_. {}"] by (simp add: *) 64qed 65 66lemma prob_space_PiM: 67 assumes M: "\<And>i. i \<in> I \<Longrightarrow> prob_space (M i)" shows "prob_space (PiM I M)" 68proof - 69 let ?M = "\<lambda>i. if i \<in> I then M i else count_space {undefined}" 70 interpret M': prob_space "?M i" for i 71 using M by (cases "i \<in> I") (auto intro!: prob_spaceI) 72 interpret product_prob_space ?M I 73 by unfold_locales 74 have "prob_space (\<Pi>\<^sub>M i\<in>I. ?M i)" 75 by unfold_locales 76 also have "(\<Pi>\<^sub>M i\<in>I. ?M i) = (\<Pi>\<^sub>M i\<in>I. M i)" 77 by (intro PiM_cong) auto 78 finally show ?thesis . 79qed 80 81lemma (in product_prob_space) emeasure_PiM_Collect: 82 assumes X: "J \<subseteq> I" "finite J" "\<And>i. i \<in> J \<Longrightarrow> X i \<in> sets (M i)" 83 shows "emeasure (Pi\<^sub>M I M) {x\<in>space (Pi\<^sub>M I M). \<forall>i\<in>J. x i \<in> X i} = (\<Prod> i\<in>J. emeasure (M i) (X i))" 84proof - 85 have "{x\<in>space (Pi\<^sub>M I M). \<forall>i\<in>J. x i \<in> X i} = emb I J (Pi\<^sub>E J X)" 86 unfolding prod_emb_def using assms by (auto simp: space_PiM Pi_iff) 87 with emeasure_PiM_emb[OF assms] show ?thesis by simp 88qed 89 90lemma (in product_prob_space) emeasure_PiM_Collect_single: 91 assumes X: "i \<in> I" "A \<in> sets (M i)" 92 shows "emeasure (Pi\<^sub>M I M) {x\<in>space (Pi\<^sub>M I M). x i \<in> A} = emeasure (M i) A" 93 using emeasure_PiM_Collect[of "{i}" "\<lambda>i. A"] assms 94 by simp 95 96lemma (in product_prob_space) measure_PiM_emb: 97 assumes "J \<subseteq> I" "finite J" "\<And>i. i \<in> J \<Longrightarrow> X i \<in> sets (M i)" 98 shows "measure (PiM I M) (emb I J (Pi\<^sub>E J X)) = (\<Prod> i\<in>J. measure (M i) (X i))" 99 using emeasure_PiM_emb[OF assms] 100 unfolding emeasure_eq_measure M.emeasure_eq_measure 101 by (simp add: prod_ennreal measure_nonneg prod_nonneg) 102 103lemma sets_Collect_single': 104 "i \<in> I \<Longrightarrow> {x\<in>space (M i). P x} \<in> sets (M i) \<Longrightarrow> {x\<in>space (PiM I M). P (x i)} \<in> sets (PiM I M)" 105 using sets_Collect_single[of i I "{x\<in>space (M i). P x}" M] 106 by (simp add: space_PiM PiE_iff cong: conj_cong) 107 108lemma (in finite_product_prob_space) finite_measure_PiM_emb: 109 "(\<And>i. i \<in> I \<Longrightarrow> A i \<in> sets (M i)) \<Longrightarrow> measure (PiM I M) (Pi\<^sub>E I A) = (\<Prod>i\<in>I. measure (M i) (A i))" 110 using measure_PiM_emb[of I A] finite_index prod_emb_PiE_same_index[OF sets.sets_into_space, of I A M] 111 by auto 112 113lemma (in product_prob_space) PiM_component: 114 assumes "i \<in> I" 115 shows "distr (PiM I M) (M i) (\<lambda>\<omega>. \<omega> i) = M i" 116proof (rule measure_eqI[symmetric]) 117 fix A assume "A \<in> sets (M i)" 118 moreover have "((\<lambda>\<omega>. \<omega> i) -` A \<inter> space (PiM I M)) = {x\<in>space (PiM I M). x i \<in> A}" 119 by auto 120 ultimately show "emeasure (M i) A = emeasure (distr (PiM I M) (M i) (\<lambda>\<omega>. \<omega> i)) A" 121 by (auto simp: \<open>i\<in>I\<close> emeasure_distr measurable_component_singleton emeasure_PiM_Collect_single) 122qed simp 123 124lemma (in product_prob_space) PiM_eq: 125 assumes M': "sets M' = sets (PiM I M)" 126 assumes eq: "\<And>J F. finite J \<Longrightarrow> J \<subseteq> I \<Longrightarrow> (\<And>j. j \<in> J \<Longrightarrow> F j \<in> sets (M j)) \<Longrightarrow> 127 emeasure M' (prod_emb I M J (\<Pi>\<^sub>E j\<in>J. F j)) = (\<Prod>j\<in>J. emeasure (M j) (F j))" 128 shows "M' = (PiM I M)" 129proof (rule measure_eqI_PiM_infinite[symmetric, OF refl M']) 130 show "finite_measure (Pi\<^sub>M I M)" 131 by standard (simp add: P.emeasure_space_1) 132qed (simp add: eq emeasure_PiM_emb) 133 134lemma (in product_prob_space) AE_component: "i \<in> I \<Longrightarrow> AE x in M i. P x \<Longrightarrow> AE x in PiM I M. P (x i)" 135 apply (rule AE_distrD[of "\<lambda>\<omega>. \<omega> i" "PiM I M" "M i" P]) 136 apply simp 137 apply (subst PiM_component) 138 apply simp_all 139 done 140 141lemma emeasure_PiM_emb: 142 assumes M: "\<And>i. i \<in> I \<Longrightarrow> prob_space (M i)" 143 assumes J: "J \<subseteq> I" "finite J" and A: "\<And>i. i \<in> J \<Longrightarrow> A i \<in> sets (M i)" 144 shows "emeasure (Pi\<^sub>M I M) (prod_emb I M J (Pi\<^sub>E J A)) = (\<Prod>i\<in>J. emeasure (M i) (A i))" 145proof - 146 let ?M = "\<lambda>i. if i \<in> I then M i else count_space {undefined}" 147 interpret M': prob_space "?M i" for i 148 using M by (cases "i \<in> I") (auto intro!: prob_spaceI) 149 interpret P: product_prob_space ?M I 150 by unfold_locales 151 have "emeasure (Pi\<^sub>M I M) (prod_emb I M J (Pi\<^sub>E J A)) = emeasure (Pi\<^sub>M I ?M) (P.emb I J (Pi\<^sub>E J A))" 152 by (auto simp: prod_emb_def PiE_iff intro!: arg_cong2[where f=emeasure] PiM_cong) 153 also have "\<dots> = (\<Prod>i\<in>J. emeasure (M i) (A i))" 154 using J A by (subst P.emeasure_PiM_emb[OF J]) (auto intro!: prod.cong) 155 finally show ?thesis . 156qed 157 158lemma distr_pair_PiM_eq_PiM: 159 fixes i' :: "'i" and I :: "'i set" and M :: "'i \<Rightarrow> 'a measure" 160 assumes M: "\<And>i. i \<in> I \<Longrightarrow> prob_space (M i)" "prob_space (M i')" 161 shows "distr (M i' \<Otimes>\<^sub>M (\<Pi>\<^sub>M i\<in>I. M i)) (\<Pi>\<^sub>M i\<in>insert i' I. M i) (\<lambda>(x, X). X(i' := x)) = 162 (\<Pi>\<^sub>M i\<in>insert i' I. M i)" (is "?L = _") 163proof (rule measure_eqI_PiM_infinite[symmetric, OF refl]) 164 interpret M': prob_space "M i'" by fact 165 interpret I: prob_space "(\<Pi>\<^sub>M i\<in>I. M i)" 166 using M by (intro prob_space_PiM) auto 167 interpret I': prob_space "(\<Pi>\<^sub>M i\<in>insert i' I. M i)" 168 using M by (intro prob_space_PiM) auto 169 show "finite_measure (\<Pi>\<^sub>M i\<in>insert i' I. M i)" 170 by unfold_locales 171 fix J A assume J: "finite J" "J \<subseteq> insert i' I" and A: "\<And>i. i \<in> J \<Longrightarrow> A i \<in> sets (M i)" 172 let ?X = "prod_emb (insert i' I) M J (Pi\<^sub>E J A)" 173 have "Pi\<^sub>M (insert i' I) M ?X = (\<Prod>i\<in>J. M i (A i))" 174 using M J A by (intro emeasure_PiM_emb) auto 175 also have "\<dots> = M i' (if i' \<in> J then (A i') else space (M i')) * (\<Prod>i\<in>J-{i'}. M i (A i))" 176 using prod.insert_remove[of J "\<lambda>i. M i (A i)" i'] J M'.emeasure_space_1 177 by (cases "i' \<in> J") (auto simp: insert_absorb) 178 also have "(\<Prod>i\<in>J-{i'}. M i (A i)) = Pi\<^sub>M I M (prod_emb I M (J - {i'}) (Pi\<^sub>E (J - {i'}) A))" 179 using M J A by (intro emeasure_PiM_emb[symmetric]) auto 180 also have "M i' (if i' \<in> J then (A i') else space (M i')) * \<dots> = 181 (M i' \<Otimes>\<^sub>M Pi\<^sub>M I M) ((if i' \<in> J then (A i') else space (M i')) \<times> prod_emb I M (J - {i'}) (Pi\<^sub>E (J - {i'}) A))" 182 using J A by (intro I.emeasure_pair_measure_Times[symmetric] sets_PiM_I) auto 183 also have "((if i' \<in> J then (A i') else space (M i')) \<times> prod_emb I M (J - {i'}) (Pi\<^sub>E (J - {i'}) A)) = 184 (\<lambda>(x, X). X(i' := x)) -` ?X \<inter> space (M i' \<Otimes>\<^sub>M Pi\<^sub>M I M)" 185 using A[of i', THEN sets.sets_into_space] unfolding set_eq_iff 186 by (simp add: prod_emb_def space_pair_measure space_PiM PiE_fun_upd ac_simps cong: conj_cong) 187 (auto simp add: Pi_iff Ball_def all_conj_distrib) 188 finally show "Pi\<^sub>M (insert i' I) M ?X = ?L ?X" 189 using J A by (simp add: emeasure_distr) 190qed simp 191 192lemma distr_PiM_reindex: 193 assumes M: "\<And>i. i \<in> K \<Longrightarrow> prob_space (M i)" 194 assumes f: "inj_on f I" "f \<in> I \<rightarrow> K" 195 shows "distr (Pi\<^sub>M K M) (\<Pi>\<^sub>M i\<in>I. M (f i)) (\<lambda>\<omega>. \<lambda>n\<in>I. \<omega> (f n)) = (\<Pi>\<^sub>M i\<in>I. M (f i))" 196 (is "distr ?K ?I ?t = ?I") 197proof (rule measure_eqI_PiM_infinite[symmetric, OF refl]) 198 interpret prob_space ?I 199 using f M by (intro prob_space_PiM) auto 200 show "finite_measure ?I" 201 by unfold_locales 202 fix A J assume J: "finite J" "J \<subseteq> I" and A: "\<And>i. i \<in> J \<Longrightarrow> A i \<in> sets (M (f i))" 203 have [simp]: "i \<in> J \<Longrightarrow> the_inv_into I f (f i) = i" for i 204 using J f by (intro the_inv_into_f_f) auto 205 have "?I (prod_emb I (\<lambda>i. M (f i)) J (Pi\<^sub>E J A)) = (\<Prod>j\<in>J. M (f j) (A j))" 206 using f J A by (intro emeasure_PiM_emb M) auto 207 also have "\<dots> = (\<Prod>j\<in>f`J. M j (A (the_inv_into I f j)))" 208 using f J by (subst prod.reindex) (auto intro!: prod.cong intro: inj_on_subset simp: the_inv_into_f_f) 209 also have "\<dots> = ?K (prod_emb K M (f`J) (\<Pi>\<^sub>E j\<in>f`J. A (the_inv_into I f j)))" 210 using f J A by (intro emeasure_PiM_emb[symmetric] M) (auto simp: the_inv_into_f_f) 211 also have "prod_emb K M (f`J) (\<Pi>\<^sub>E j\<in>f`J. A (the_inv_into I f j)) = ?t -` prod_emb I (\<lambda>i. M (f i)) J (Pi\<^sub>E J A) \<inter> space ?K" 212 using f J A by (auto simp: prod_emb_def space_PiM Pi_iff PiE_iff Int_absorb1) 213 also have "?K \<dots> = distr ?K ?I ?t (prod_emb I (\<lambda>i. M (f i)) J (Pi\<^sub>E J A))" 214 using f J A by (intro emeasure_distr[symmetric] sets_PiM_I) (auto simp: Pi_iff) 215 finally show "?I (prod_emb I (\<lambda>i. M (f i)) J (Pi\<^sub>E J A)) = distr ?K ?I ?t (prod_emb I (\<lambda>i. M (f i)) J (Pi\<^sub>E J A))" . 216qed simp 217 218lemma distr_PiM_component: 219 assumes M: "\<And>i. i \<in> I \<Longrightarrow> prob_space (M i)" 220 assumes "i \<in> I" 221 shows "distr (Pi\<^sub>M I M) (M i) (\<lambda>\<omega>. \<omega> i) = M i" 222proof - 223 have *: "(\<lambda>\<omega>. \<omega> i) -` A \<inter> space (Pi\<^sub>M I M) = prod_emb I M {i} (\<Pi>\<^sub>E i'\<in>{i}. A)" for A 224 by (auto simp: prod_emb_def space_PiM) 225 show ?thesis 226 apply (intro measure_eqI) 227 apply (auto simp add: emeasure_distr \<open>i\<in>I\<close> * emeasure_PiM_emb M) 228 apply (subst emeasure_PiM_emb) 229 apply (simp_all add: M \<open>i\<in>I\<close>) 230 done 231qed 232 233lemma AE_PiM_component: 234 "(\<And>i. i \<in> I \<Longrightarrow> prob_space (M i)) \<Longrightarrow> i \<in> I \<Longrightarrow> AE x in M i. P x \<Longrightarrow> AE x in PiM I M. P (x i)" 235 using AE_distrD[of "\<lambda>x. x i" "PiM I M" "M i"] 236 by (subst (asm) distr_PiM_component[of I _ i]) (auto intro: AE_distrD[of "\<lambda>x. x i" _ _ P]) 237 238lemma decseq_emb_PiE: 239 "incseq J \<Longrightarrow> decseq (\<lambda>i. prod_emb I M (J i) (\<Pi>\<^sub>E j\<in>J i. X j))" 240 by (fastforce simp: decseq_def prod_emb_def incseq_def Pi_iff) 241 242subsection \<open>Sequence space\<close> 243 244definition comb_seq :: "nat \<Rightarrow> (nat \<Rightarrow> 'a) \<Rightarrow> (nat \<Rightarrow> 'a) \<Rightarrow> (nat \<Rightarrow> 'a)" where 245 "comb_seq i \<omega> \<omega>' j = (if j < i then \<omega> j else \<omega>' (j - i))" 246 247lemma split_comb_seq: "P (comb_seq i \<omega> \<omega>' j) \<longleftrightarrow> (j < i \<longrightarrow> P (\<omega> j)) \<and> (\<forall>k. j = i + k \<longrightarrow> P (\<omega>' k))" 248 by (auto simp: comb_seq_def not_less) 249 250lemma split_comb_seq_asm: "P (comb_seq i \<omega> \<omega>' j) \<longleftrightarrow> \<not> ((j < i \<and> \<not> P (\<omega> j)) \<or> (\<exists>k. j = i + k \<and> \<not> P (\<omega>' k)))" 251 by (auto simp: comb_seq_def) 252 253lemma measurable_comb_seq: 254 "(\<lambda>(\<omega>, \<omega>'). comb_seq i \<omega> \<omega>') \<in> measurable ((\<Pi>\<^sub>M i\<in>UNIV. M) \<Otimes>\<^sub>M (\<Pi>\<^sub>M i\<in>UNIV. M)) (\<Pi>\<^sub>M i\<in>UNIV. M)" 255proof (rule measurable_PiM_single) 256 show "(\<lambda>(\<omega>, \<omega>'). comb_seq i \<omega> \<omega>') \<in> space ((\<Pi>\<^sub>M i\<in>UNIV. M) \<Otimes>\<^sub>M (\<Pi>\<^sub>M i\<in>UNIV. M)) \<rightarrow> (UNIV \<rightarrow>\<^sub>E space M)" 257 by (auto simp: space_pair_measure space_PiM PiE_iff split: split_comb_seq) 258 fix j :: nat and A assume A: "A \<in> sets M" 259 then have *: "{\<omega> \<in> space ((\<Pi>\<^sub>M i\<in>UNIV. M) \<Otimes>\<^sub>M (\<Pi>\<^sub>M i\<in>UNIV. M)). case_prod (comb_seq i) \<omega> j \<in> A} = 260 (if j < i then {\<omega> \<in> space (\<Pi>\<^sub>M i\<in>UNIV. M). \<omega> j \<in> A} \<times> space (\<Pi>\<^sub>M i\<in>UNIV. M) 261 else space (\<Pi>\<^sub>M i\<in>UNIV. M) \<times> {\<omega> \<in> space (\<Pi>\<^sub>M i\<in>UNIV. M). \<omega> (j - i) \<in> A})" 262 by (auto simp: space_PiM space_pair_measure comb_seq_def dest: sets.sets_into_space) 263 show "{\<omega> \<in> space ((\<Pi>\<^sub>M i\<in>UNIV. M) \<Otimes>\<^sub>M (\<Pi>\<^sub>M i\<in>UNIV. M)). case_prod (comb_seq i) \<omega> j \<in> A} \<in> sets ((\<Pi>\<^sub>M i\<in>UNIV. M) \<Otimes>\<^sub>M (\<Pi>\<^sub>M i\<in>UNIV. M))" 264 unfolding * by (auto simp: A intro!: sets_Collect_single) 265qed 266 267lemma measurable_comb_seq'[measurable (raw)]: 268 assumes f: "f \<in> measurable N (\<Pi>\<^sub>M i\<in>UNIV. M)" and g: "g \<in> measurable N (\<Pi>\<^sub>M i\<in>UNIV. M)" 269 shows "(\<lambda>x. comb_seq i (f x) (g x)) \<in> measurable N (\<Pi>\<^sub>M i\<in>UNIV. M)" 270 using measurable_compose[OF measurable_Pair[OF f g] measurable_comb_seq] by simp 271 272lemma comb_seq_0: "comb_seq 0 \<omega> \<omega>' = \<omega>'" 273 by (auto simp add: comb_seq_def) 274 275lemma comb_seq_Suc: "comb_seq (Suc n) \<omega> \<omega>' = comb_seq n \<omega> (case_nat (\<omega> n) \<omega>')" 276 by (auto simp add: comb_seq_def not_less less_Suc_eq le_imp_diff_is_add intro!: ext split: nat.split) 277 278lemma comb_seq_Suc_0[simp]: "comb_seq (Suc 0) \<omega> = case_nat (\<omega> 0)" 279 by (intro ext) (simp add: comb_seq_Suc comb_seq_0) 280 281lemma comb_seq_less: "i < n \<Longrightarrow> comb_seq n \<omega> \<omega>' i = \<omega> i" 282 by (auto split: split_comb_seq) 283 284lemma comb_seq_add: "comb_seq n \<omega> \<omega>' (i + n) = \<omega>' i" 285 by (auto split: nat.split split_comb_seq) 286 287lemma case_nat_comb_seq: "case_nat s' (comb_seq n \<omega> \<omega>') (i + n) = case_nat (case_nat s' \<omega> n) \<omega>' i" 288 by (auto split: nat.split split_comb_seq) 289 290lemma case_nat_comb_seq': 291 "case_nat s (comb_seq i \<omega> \<omega>') = comb_seq (Suc i) (case_nat s \<omega>) \<omega>'" 292 by (auto split: split_comb_seq nat.split) 293 294locale sequence_space = product_prob_space "\<lambda>i. M" "UNIV :: nat set" for M 295begin 296 297abbreviation "S \<equiv> \<Pi>\<^sub>M i\<in>UNIV::nat set. M" 298 299lemma infprod_in_sets[intro]: 300 fixes E :: "nat \<Rightarrow> 'a set" assumes E: "\<And>i. E i \<in> sets M" 301 shows "Pi UNIV E \<in> sets S" 302proof - 303 have "Pi UNIV E = (\<Inter>i. emb UNIV {..i} (\<Pi>\<^sub>E j\<in>{..i}. E j))" 304 using E E[THEN sets.sets_into_space] 305 by (auto simp: prod_emb_def Pi_iff extensional_def) 306 with E show ?thesis by auto 307qed 308 309lemma measure_PiM_countable: 310 fixes E :: "nat \<Rightarrow> 'a set" assumes E: "\<And>i. E i \<in> sets M" 311 shows "(\<lambda>n. \<Prod>i\<le>n. measure M (E i)) \<longlonglongrightarrow> measure S (Pi UNIV E)" 312proof - 313 let ?E = "\<lambda>n. emb UNIV {..n} (Pi\<^sub>E {.. n} E)" 314 have "\<And>n. (\<Prod>i\<le>n. measure M (E i)) = measure S (?E n)" 315 using E by (simp add: measure_PiM_emb) 316 moreover have "Pi UNIV E = (\<Inter>n. ?E n)" 317 using E E[THEN sets.sets_into_space] 318 by (auto simp: prod_emb_def extensional_def Pi_iff) 319 moreover have "range ?E \<subseteq> sets S" 320 using E by auto 321 moreover have "decseq ?E" 322 by (auto simp: prod_emb_def Pi_iff decseq_def) 323 ultimately show ?thesis 324 by (simp add: finite_Lim_measure_decseq) 325qed 326 327lemma nat_eq_diff_eq: 328 fixes a b c :: nat 329 shows "c \<le> b \<Longrightarrow> a = b - c \<longleftrightarrow> a + c = b" 330 by auto 331 332lemma PiM_comb_seq: 333 "distr (S \<Otimes>\<^sub>M S) S (\<lambda>(\<omega>, \<omega>'). comb_seq i \<omega> \<omega>') = S" (is "?D = _") 334proof (rule PiM_eq) 335 let ?I = "UNIV::nat set" and ?M = "\<lambda>n. M" 336 let "distr _ _ ?f" = "?D" 337 338 fix J E assume J: "finite J" "J \<subseteq> ?I" "\<And>j. j \<in> J \<Longrightarrow> E j \<in> sets M" 339 let ?X = "prod_emb ?I ?M J (\<Pi>\<^sub>E j\<in>J. E j)" 340 have "\<And>j x. j \<in> J \<Longrightarrow> x \<in> E j \<Longrightarrow> x \<in> space M" 341 using J(3)[THEN sets.sets_into_space] by (auto simp: space_PiM Pi_iff subset_eq) 342 with J have "?f -` ?X \<inter> space (S \<Otimes>\<^sub>M S) = 343 (prod_emb ?I ?M (J \<inter> {..<i}) (\<Pi>\<^sub>E j\<in>J \<inter> {..<i}. E j)) \<times> 344 (prod_emb ?I ?M (((+) i) -` J) (\<Pi>\<^sub>E j\<in>((+) i) -` J. E (i + j)))" (is "_ = ?E \<times> ?F") 345 by (auto simp: space_pair_measure space_PiM prod_emb_def all_conj_distrib PiE_iff 346 split: split_comb_seq split_comb_seq_asm) 347 then have "emeasure ?D ?X = emeasure (S \<Otimes>\<^sub>M S) (?E \<times> ?F)" 348 by (subst emeasure_distr[OF measurable_comb_seq]) 349 (auto intro!: sets_PiM_I simp: split_beta' J) 350 also have "\<dots> = emeasure S ?E * emeasure S ?F" 351 using J by (intro P.emeasure_pair_measure_Times) (auto intro!: sets_PiM_I finite_vimageI simp: inj_on_def) 352 also have "emeasure S ?F = (\<Prod>j\<in>((+) i) -` J. emeasure M (E (i + j)))" 353 using J by (intro emeasure_PiM_emb) (simp_all add: finite_vimageI inj_on_def) 354 also have "\<dots> = (\<Prod>j\<in>J - (J \<inter> {..<i}). emeasure M (E j))" 355 by (rule prod.reindex_cong [of "\<lambda>x. x - i"]) 356 (auto simp: image_iff Bex_def not_less nat_eq_diff_eq ac_simps cong: conj_cong intro!: inj_onI) 357 also have "emeasure S ?E = (\<Prod>j\<in>J \<inter> {..<i}. emeasure M (E j))" 358 using J by (intro emeasure_PiM_emb) simp_all 359 also have "(\<Prod>j\<in>J \<inter> {..<i}. emeasure M (E j)) * (\<Prod>j\<in>J - (J \<inter> {..<i}). emeasure M (E j)) = (\<Prod>j\<in>J. emeasure M (E j))" 360 by (subst mult.commute) (auto simp: J prod.subset_diff[symmetric]) 361 finally show "emeasure ?D ?X = (\<Prod>j\<in>J. emeasure M (E j))" . 362qed simp_all 363 364lemma PiM_iter: 365 "distr (M \<Otimes>\<^sub>M S) S (\<lambda>(s, \<omega>). case_nat s \<omega>) = S" (is "?D = _") 366proof (rule PiM_eq) 367 let ?I = "UNIV::nat set" and ?M = "\<lambda>n. M" 368 let "distr _ _ ?f" = "?D" 369 370 fix J E assume J: "finite J" "J \<subseteq> ?I" "\<And>j. j \<in> J \<Longrightarrow> E j \<in> sets M" 371 let ?X = "prod_emb ?I ?M J (\<Pi>\<^sub>E j\<in>J. E j)" 372 have "\<And>j x. j \<in> J \<Longrightarrow> x \<in> E j \<Longrightarrow> x \<in> space M" 373 using J(3)[THEN sets.sets_into_space] by (auto simp: space_PiM Pi_iff subset_eq) 374 with J have "?f -` ?X \<inter> space (M \<Otimes>\<^sub>M S) = (if 0 \<in> J then E 0 else space M) \<times> 375 (prod_emb ?I ?M (Suc -` J) (\<Pi>\<^sub>E j\<in>Suc -` J. E (Suc j)))" (is "_ = ?E \<times> ?F") 376 by (auto simp: space_pair_measure space_PiM PiE_iff prod_emb_def all_conj_distrib 377 split: nat.split nat.split_asm) 378 then have "emeasure ?D ?X = emeasure (M \<Otimes>\<^sub>M S) (?E \<times> ?F)" 379 by (subst emeasure_distr) 380 (auto intro!: sets_PiM_I simp: split_beta' J) 381 also have "\<dots> = emeasure M ?E * emeasure S ?F" 382 using J by (intro P.emeasure_pair_measure_Times) (auto intro!: sets_PiM_I finite_vimageI) 383 also have "emeasure S ?F = (\<Prod>j\<in>Suc -` J. emeasure M (E (Suc j)))" 384 using J by (intro emeasure_PiM_emb) (simp_all add: finite_vimageI) 385 also have "\<dots> = (\<Prod>j\<in>J - {0}. emeasure M (E j))" 386 by (rule prod.reindex_cong [of "\<lambda>x. x - 1"]) 387 (auto simp: image_iff Bex_def not_less nat_eq_diff_eq ac_simps cong: conj_cong intro!: inj_onI) 388 also have "emeasure M ?E * (\<Prod>j\<in>J - {0}. emeasure M (E j)) = (\<Prod>j\<in>J. emeasure M (E j))" 389 by (auto simp: M.emeasure_space_1 prod.remove J) 390 finally show "emeasure ?D ?X = (\<Prod>j\<in>J. emeasure M (E j))" . 391qed simp_all 392 393end 394 395end 396