diff -r 041cda506fb2 -r 17a20ca86d62 src/HOL/Probability/Infinite_Product_Measure.thy --- a/src/HOL/Probability/Infinite_Product_Measure.thy Mon Oct 03 14:09:26 2016 +0100 +++ b/src/HOL/Probability/Infinite_Product_Measure.thy Fri Sep 30 16:08:38 2016 +0200 @@ -63,6 +63,21 @@ using emeasure_PiM_emb[of "{}" "\_. {}"] by (simp add: *) qed +lemma prob_space_PiM: + assumes M: "\i. i \ I \ prob_space (M i)" shows "prob_space (PiM I M)" +proof - + let ?M = "\i. if i \ I then M i else count_space {undefined}" + interpret M': prob_space "?M i" for i + using M by (cases "i \ I") (auto intro!: prob_spaceI) + interpret product_prob_space ?M I + by unfold_locales + have "prob_space (\\<^sub>M i\I. ?M i)" + by unfold_locales + also have "(\\<^sub>M i\I. ?M i) = (\\<^sub>M i\I. M i)" + by (intro PiM_cong) auto + finally show ?thesis . +qed + lemma (in product_prob_space) emeasure_PiM_Collect: assumes X: "J \ I" "finite J" "\i. i \ J \ X i \ sets (M i)" shows "emeasure (Pi\<^sub>M I M) {x\space (Pi\<^sub>M I M). \i\J. x i \ X i} = (\ i\J. emeasure (M i) (X i))" @@ -123,6 +138,107 @@ apply simp_all done +lemma emeasure_PiM_emb: + assumes M: "\i. i \ I \ prob_space (M i)" + assumes J: "J \ I" "finite J" and A: "\i. i \ J \ A i \ sets (M i)" + shows "emeasure (Pi\<^sub>M I M) (prod_emb I M J (Pi\<^sub>E J A)) = (\i\J. emeasure (M i) (A i))" +proof - + let ?M = "\i. if i \ I then M i else count_space {undefined}" + interpret M': prob_space "?M i" for i + using M by (cases "i \ I") (auto intro!: prob_spaceI) + interpret P: product_prob_space ?M I + by unfold_locales + 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))" + by (auto simp: prod_emb_def PiE_iff intro!: arg_cong2[where f=emeasure] PiM_cong) + also have "\ = (\i\J. emeasure (M i) (A i))" + using J A by (subst P.emeasure_PiM_emb[OF J]) (auto intro!: setprod.cong) + finally show ?thesis . +qed + +lemma distr_pair_PiM_eq_PiM: + fixes i' :: "'i" and I :: "'i set" and M :: "'i \ 'a measure" + assumes M: "\i. i \ I \ prob_space (M i)" "prob_space (M i')" + shows "distr (M i' \\<^sub>M (\\<^sub>M i\I. M i)) (\\<^sub>M i\insert i' I. M i) (\(x, X). X(i' := x)) = + (\\<^sub>M i\insert i' I. M i)" (is "?L = _") +proof (rule measure_eqI_PiM_infinite[symmetric, OF refl]) + interpret M': prob_space "M i'" by fact + interpret I: prob_space "(\\<^sub>M i\I. M i)" + using M by (intro prob_space_PiM) auto + interpret I': prob_space "(\\<^sub>M i\insert i' I. M i)" + using M by (intro prob_space_PiM) auto + show "finite_measure (\\<^sub>M i\insert i' I. M i)" + by unfold_locales + fix J A assume J: "finite J" "J \ insert i' I" and A: "\i. i \ J \ A i \ sets (M i)" + let ?X = "prod_emb (insert i' I) M J (Pi\<^sub>E J A)" + have "Pi\<^sub>M (insert i' I) M ?X = (\i\J. M i (A i))" + using M J A by (intro emeasure_PiM_emb) auto + also have "\ = M i' (if i' \ J then (A i') else space (M i')) * (\i\J-{i'}. M i (A i))" + using setprod.insert_remove[of J "\i. M i (A i)" i'] J M'.emeasure_space_1 + by (cases "i' \ J") (auto simp: insert_absorb) + also have "(\i\J-{i'}. M i (A i)) = Pi\<^sub>M I M (prod_emb I M (J - {i'}) (Pi\<^sub>E (J - {i'}) A))" + using M J A by (intro emeasure_PiM_emb[symmetric]) auto + also have "M i' (if i' \ J then (A i') else space (M i')) * \ = + (M i' \\<^sub>M Pi\<^sub>M I M) ((if i' \ J then (A i') else space (M i')) \ prod_emb I M (J - {i'}) (Pi\<^sub>E (J - {i'}) A))" + using J A by (intro I.emeasure_pair_measure_Times[symmetric] sets_PiM_I) auto + also have "((if i' \ J then (A i') else space (M i')) \ prod_emb I M (J - {i'}) (Pi\<^sub>E (J - {i'}) A)) = + (\(x, X). X(i' := x)) -` ?X \ space (M i' \\<^sub>M Pi\<^sub>M I M)" + using A[of i', THEN sets.sets_into_space] unfolding set_eq_iff + by (simp add: prod_emb_def space_pair_measure space_PiM PiE_fun_upd ac_simps cong: conj_cong) + (auto simp add: Pi_iff Ball_def all_conj_distrib) + finally show "Pi\<^sub>M (insert i' I) M ?X = ?L ?X" + using J A by (simp add: emeasure_distr) +qed simp + +lemma distr_PiM_reindex: + assumes M: "\i. i \ K \ prob_space (M i)" + assumes f: "inj_on f I" "f \ I \ K" + shows "distr (Pi\<^sub>M K M) (\\<^sub>M i\I. M (f i)) (\\. \n\I. \ (f n)) = (\\<^sub>M i\I. M (f i))" + (is "distr ?K ?I ?t = ?I") +proof (rule measure_eqI_PiM_infinite[symmetric, OF refl]) + interpret prob_space ?I + using f M by (intro prob_space_PiM) auto + show "finite_measure ?I" + by unfold_locales + fix A J assume J: "finite J" "J \ I" and A: "\i. i \ J \ A i \ sets (M (f i))" + have [simp]: "i \ J \ the_inv_into I f (f i) = i" for i + using J f by (intro the_inv_into_f_f) auto + have "?I (prod_emb I (\i. M (f i)) J (Pi\<^sub>E J A)) = (\j\J. M (f j) (A j))" + using f J A by (intro emeasure_PiM_emb M) auto + also have "\ = (\j\f`J. M j (A (the_inv_into I f j)))" + using f J by (subst setprod.reindex) (auto intro!: setprod.cong intro: inj_on_subset simp: the_inv_into_f_f) + also have "\ = ?K (prod_emb K M (f`J) (\\<^sub>E j\f`J. A (the_inv_into I f j)))" + using f J A by (intro emeasure_PiM_emb[symmetric] M) (auto simp: the_inv_into_f_f) + also have "prod_emb K M (f`J) (\\<^sub>E j\f`J. A (the_inv_into I f j)) = ?t -` prod_emb I (\i. M (f i)) J (Pi\<^sub>E J A) \ space ?K" + using f J A by (auto simp: prod_emb_def space_PiM Pi_iff PiE_iff Int_absorb1) + also have "?K \ = distr ?K ?I ?t (prod_emb I (\i. M (f i)) J (Pi\<^sub>E J A))" + using f J A by (intro emeasure_distr[symmetric] sets_PiM_I) (auto simp: Pi_iff) + finally show "?I (prod_emb I (\i. M (f i)) J (Pi\<^sub>E J A)) = distr ?K ?I ?t (prod_emb I (\i. M (f i)) J (Pi\<^sub>E J A))" . +qed simp + +lemma distr_PiM_component: + assumes M: "\i. i \ I \ prob_space (M i)" + assumes "i \ I" + shows "distr (Pi\<^sub>M I M) (M i) (\\. \ i) = M i" +proof - + have *: "(\\. \ i) -` A \ space (Pi\<^sub>M I M) = prod_emb I M {i} (\\<^sub>E i'\{i}. A)" for A + by (auto simp: prod_emb_def space_PiM) + show ?thesis + apply (intro measure_eqI) + apply (auto simp add: emeasure_distr \i\I\ * emeasure_PiM_emb M) + apply (subst emeasure_PiM_emb) + apply (simp_all add: M \i\I\) + done +qed + +lemma AE_PiM_component: + "(\i. i \ I \ prob_space (M i)) \ i \ I \ AE x in M i. P x \ AE x in PiM I M. P (x i)" + using AE_distrD[of "\x. x i" "PiM I M" "M i"] + by (subst (asm) distr_PiM_component[of I _ i]) (auto intro: AE_distrD[of "\x. x i" _ _ P]) + +lemma decseq_emb_PiE: + "incseq J \ decseq (\i. prod_emb I M (J i) (\\<^sub>E j\J i. X j))" + by (fastforce simp: decseq_def prod_emb_def incseq_def Pi_iff) + subsection \Sequence space\ definition comb_seq :: "nat \ (nat \ 'a) \ (nat \ 'a) \ (nat \ 'a)" where