# HG changeset patch # User hoelzl # Date 1351861239 -3600 # Node ID cfe8ee8a1371e7fa8baca29d3e6e7172794eb391 # Parent dfb63b9b8908128b227ce9f859828a2ee8af42fa infinite product measure is invariant under adding prefixes diff -r dfb63b9b8908 -r cfe8ee8a1371 src/HOL/Probability/Infinite_Product_Measure.thy --- a/src/HOL/Probability/Infinite_Product_Measure.thy Fri Nov 02 14:00:39 2012 +0100 +++ b/src/HOL/Probability/Infinite_Product_Measure.thy Fri Nov 02 14:00:39 2012 +0100 @@ -8,6 +8,9 @@ imports Probability_Measure Caratheodory begin +lemma extensional_UNIV[simp]: "extensional UNIV = UNIV" + by (auto simp: extensional_def) + lemma restrict_extensional_sub[intro]: "A \ B \ restrict f A \ extensional B" unfolding restrict_def extensional_def by auto @@ -386,7 +389,7 @@ proof (rule G.caratheodory_empty_continuous[OF positive_\G additive_\G]) fix A assume "A \ ?G" with generatorE guess J X . note JX = this - interpret JK: finite_product_prob_space M J by default fact+ + interpret JK: finite_product_prob_space M J by default fact+ from JX show "\G A \ \" by simp next fix A assume A: "range A \ ?G" "decseq A" "(\i. A i) = {}" @@ -671,24 +674,140 @@ by (subst emeasure_PiM_emb_not_empty) (auto simp: emeasure_PiM) 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\<^isub>M I M) {x\space (Pi\<^isub>M I M). \i\J. x i \ X i} = (\ i\J. emeasure (M i) (X i))" +proof - + have "{x\space (Pi\<^isub>M I M). \i\J. x i \ X i} = emb I J (Pi\<^isub>E J X)" + unfolding prod_emb_def using assms by (auto simp: space_PiM Pi_iff) + with emeasure_PiM_emb[OF assms] show ?thesis by simp +qed + +lemma (in product_prob_space) emeasure_PiM_Collect_single: + assumes X: "i \ I" "A \ sets (M i)" + shows "emeasure (Pi\<^isub>M I M) {x\space (Pi\<^isub>M I M). x i \ A} = emeasure (M i) A" + using emeasure_PiM_Collect[of "{i}" "\i. A"] assms + by simp + lemma (in product_prob_space) measure_PiM_emb: assumes "J \ I" "finite J" "\i. i \ J \ X i \ sets (M i)" shows "measure (PiM I M) (emb I J (Pi\<^isub>E J X)) = (\ i\J. measure (M i) (X i))" using emeasure_PiM_emb[OF assms] unfolding emeasure_eq_measure M.emeasure_eq_measure by (simp add: setprod_ereal) +lemma sets_Collect_single': + "i \ I \ {x\space (M i). P x} \ sets (M i) \ {x\space (PiM I M). P (x i)} \ sets (PiM I M)" + using sets_Collect_single[of i I "{x\space (M i). P x}" M] + by (simp add: space_PiM Pi_iff cong: conj_cong) + lemma (in finite_product_prob_space) finite_measure_PiM_emb: "(\i. i \ I \ A i \ sets (M i)) \ measure (PiM I M) (Pi\<^isub>E I A) = (\i\I. measure (M i) (A i))" using measure_PiM_emb[of I A] finite_index prod_emb_PiE_same_index[OF sets_into_space, of I A M] by auto +lemma (in product_prob_space) PiM_component: + assumes "i \ I" + shows "distr (PiM I M) (M i) (\\. \ i) = M i" +proof (rule measure_eqI[symmetric]) + fix A assume "A \ sets (M i)" + moreover have "((\\. \ i) -` A \ space (PiM I M)) = {x\space (PiM I M). x i \ A}" + by auto + ultimately show "emeasure (M i) A = emeasure (distr (PiM I M) (M i) (\\. \ i)) A" + by (auto simp: `i\I` emeasure_distr measurable_component_singleton emeasure_PiM_Collect_single) +qed simp + +lemma (in product_prob_space) PiM_eq: + assumes "I \ {}" + assumes "sets M' = sets (PiM I M)" + assumes eq: "\J F. finite J \ J \ I \ (\j. j \ J \ F j \ sets (M j)) \ + emeasure M' (prod_emb I M J (\\<^isub>E j\J. F j)) = (\j\J. emeasure (M j) (F j))" + shows "M' = (PiM I M)" +proof (rule measure_eqI_generator_eq[symmetric, OF Int_stable_prod_algebra prod_algebra_sets_into_space]) + show "sets (PiM I M) = sigma_sets (\\<^isub>E i\I. space (M i)) (prod_algebra I M)" + by (rule sets_PiM) + then show "sets M' = sigma_sets (\\<^isub>E i\I. space (M i)) (prod_algebra I M)" + unfolding `sets M' = sets (PiM I M)` by simp + + def i \ "SOME i. i \ I" + with `I \ {}` have i: "i \ I" + by (auto intro: someI_ex) + + def A \ "\n::nat. prod_emb I M {i} (\\<^isub>E j\{i}. space (M i))" + then show "range A \ prod_algebra I M" + by (auto intro!: prod_algebraI i) + + have A_eq: "\i. A i = space (PiM I M)" + by (auto simp: prod_emb_def space_PiM Pi_iff A_def i) + show "(\i. A i) = (\\<^isub>E i\I. space (M i))" + unfolding A_eq by (auto simp: space_PiM) + show "\i. emeasure (PiM I M) (A i) \ \" + unfolding A_eq P.emeasure_space_1 by simp +next + fix X assume X: "X \ prod_algebra I M" + then obtain J E where X: "X = prod_emb I M J (PIE j:J. E j)" + and J: "finite J" "J \ I" "\j. j \ J \ E j \ sets (M j)" + by (force elim!: prod_algebraE) + from eq[OF J] have "emeasure M' X = (\j\J. emeasure (M j) (E j))" + by (simp add: X) + also have "\ = emeasure (PiM I M) X" + unfolding X using J by (intro emeasure_PiM_emb[symmetric]) auto + finally show "emeasure (PiM I M) X = emeasure M' X" .. +qed + subsection {* Sequence space *} -locale sequence_space = product_prob_space M "UNIV :: nat set" for M +lemma measurable_nat_case: "(\(x, \). nat_case x \) \ measurable (M \\<^isub>M (\\<^isub>M i\UNIV. M)) (\\<^isub>M i\UNIV. M)" +proof (rule measurable_PiM_single) + show "(\(x, \). nat_case x \) \ space (M \\<^isub>M (\\<^isub>M i\UNIV. M)) \ (UNIV \\<^isub>E space M)" + by (auto simp: space_pair_measure space_PiM Pi_iff split: nat.split) + fix i :: nat and A assume A: "A \ sets M" + then have *: "{\ \ space (M \\<^isub>M (\\<^isub>M i\UNIV. M)). prod_case nat_case \ i \ A} = + (case i of 0 \ A \ space (\\<^isub>M i\UNIV. M) | Suc n \ space M \ {\\space (\\<^isub>M i\UNIV. M). \ n \ A})" + by (auto simp: space_PiM space_pair_measure split: nat.split dest: sets_into_space) + show "{\ \ space (M \\<^isub>M (\\<^isub>M i\UNIV. M)). prod_case nat_case \ i \ A} \ sets (M \\<^isub>M (\\<^isub>M i\UNIV. M))" + unfolding * by (auto simp: A split: nat.split intro!: sets_Collect_single) +qed + +lemma measurable_nat_case': + assumes f: "f \ measurable N M" and g: "g \ measurable N (\\<^isub>M i\UNIV. M)" + shows "(\x. nat_case (f x) (g x)) \ measurable N (\\<^isub>M i\UNIV. M)" + using measurable_compose[OF measurable_Pair[OF f g] measurable_nat_case] by simp + +definition comb_seq :: "nat \ (nat \ 'a) \ (nat \ 'a) \ (nat \ 'a)" where + "comb_seq i \ \' j = (if j < i then \ j else \' (j - i))" + +lemma split_comb_seq: "P (comb_seq i \ \' j) \ (j < i \ P (\ j)) \ (\k. j = i + k \ P (\' k))" + by (auto simp: comb_seq_def not_less) + +lemma split_comb_seq_asm: "P (comb_seq i \ \' j) \ \ ((j < i \ \ P (\ j)) \ (\k. j = i + k \ \ P (\' k)))" + by (auto simp: comb_seq_def) -lemma (in sequence_space) infprod_in_sets[intro]: - fixes E :: "nat \ 'a set" assumes E: "\i. E i \ sets (M i)" - shows "Pi UNIV E \ sets (Pi\<^isub>M UNIV M)" +lemma measurable_comb_seq: "(\(\, \'). comb_seq i \ \') \ measurable ((\\<^isub>M i\UNIV. M) \\<^isub>M (\\<^isub>M i\UNIV. M)) (\\<^isub>M i\UNIV. M)" +proof (rule measurable_PiM_single) + show "(\(\, \'). comb_seq i \ \') \ space ((\\<^isub>M i\UNIV. M) \\<^isub>M (\\<^isub>M i\UNIV. M)) \ (UNIV \\<^isub>E space M)" + by (auto simp: space_pair_measure space_PiM Pi_iff split: split_comb_seq) + fix j :: nat and A assume A: "A \ sets M" + then have *: "{\ \ space ((\\<^isub>M i\UNIV. M) \\<^isub>M (\\<^isub>M i\UNIV. M)). prod_case (comb_seq i) \ j \ A} = + (if j < i then {\ \ space (\\<^isub>M i\UNIV. M). \ j \ A} \ space (\\<^isub>M i\UNIV. M) + else space (\\<^isub>M i\UNIV. M) \ {\ \ space (\\<^isub>M i\UNIV. M). \ (j - i) \ A})" + by (auto simp: space_PiM space_pair_measure comb_seq_def dest: sets_into_space) + show "{\ \ space ((\\<^isub>M i\UNIV. M) \\<^isub>M (\\<^isub>M i\UNIV. M)). prod_case (comb_seq i) \ j \ A} \ sets ((\\<^isub>M i\UNIV. M) \\<^isub>M (\\<^isub>M i\UNIV. M))" + unfolding * by (auto simp: A intro!: sets_Collect_single) +qed + +lemma measurable_comb_seq': + assumes f: "f \ measurable N (\\<^isub>M i\UNIV. M)" and g: "g \ measurable N (\\<^isub>M i\UNIV. M)" + shows "(\x. comb_seq i (f x) (g x)) \ measurable N (\\<^isub>M i\UNIV. M)" + using measurable_compose[OF measurable_Pair[OF f g] measurable_comb_seq] by simp + +locale sequence_space = product_prob_space "\i. M" "UNIV :: nat set" for M +begin + +abbreviation "S \ \\<^isub>M i\UNIV::nat set. M" + +lemma infprod_in_sets[intro]: + fixes E :: "nat \ 'a set" assumes E: "\i. E i \ sets M" + shows "Pi UNIV E \ sets S" proof - have "Pi UNIV E = (\i. emb UNIV {..i} (\\<^isub>E j\{..i}. E j))" using E E[THEN sets_into_space] @@ -696,17 +815,17 @@ with E show ?thesis by auto qed -lemma (in sequence_space) measure_PiM_countable: - fixes E :: "nat \ 'a set" assumes E: "\i. E i \ sets (M i)" - shows "(\n. \i\n. measure (M i) (E i)) ----> measure (Pi\<^isub>M UNIV M) (Pi UNIV E)" +lemma measure_PiM_countable: + fixes E :: "nat \ 'a set" assumes E: "\i. E i \ sets M" + shows "(\n. \i\n. measure M (E i)) ----> measure S (Pi UNIV E)" proof - let ?E = "\n. emb UNIV {..n} (Pi\<^isub>E {.. n} E)" - have "\n. (\i\n. measure (M i) (E i)) = measure (Pi\<^isub>M UNIV M) (?E n)" + have "\n. (\i\n. measure M (E i)) = measure S (?E n)" using E by (simp add: measure_PiM_emb) moreover have "Pi UNIV E = (\n. ?E n)" using E E[THEN sets_into_space] by (auto simp: prod_emb_def extensional_def Pi_iff) blast - moreover have "range ?E \ sets (Pi\<^isub>M UNIV M)" + moreover have "range ?E \ sets S" using E by auto moreover have "decseq ?E" by (auto simp: prod_emb_def Pi_iff decseq_def) @@ -714,4 +833,72 @@ by (simp add: finite_Lim_measure_decseq) qed +lemma nat_eq_diff_eq: + fixes a b c :: nat + shows "c \ b \ a = b - c \ a + c = b" + by auto + +lemma PiM_comb_seq: + "distr (S \\<^isub>M S) S (\(\, \'). comb_seq i \ \') = S" (is "?D = _") +proof (rule PiM_eq) + let ?I = "UNIV::nat set" and ?M = "\n. M" + let "distr _ _ ?f" = "?D" + + fix J E assume J: "finite J" "J \ ?I" "\j. j \ J \ E j \ sets M" + let ?X = "prod_emb ?I ?M J (\\<^isub>E j\J. E j)" + have "\j x. j \ J \ x \ E j \ x \ space M" + using J(3)[THEN sets_into_space] by (auto simp: space_PiM Pi_iff subset_eq) + with J have "?f -` ?X \ space (S \\<^isub>M S) = + (prod_emb ?I ?M (J \ {.. {.. + (prod_emb ?I ?M ((op + i) -` J) (PIE j:(op + i) -` J. E (i + j)))" (is "_ = ?E \ ?F") + by (auto simp: space_pair_measure space_PiM prod_emb_def all_conj_distrib Pi_iff + split: split_comb_seq split_comb_seq_asm) + then have "emeasure ?D ?X = emeasure (S \\<^isub>M S) (?E \ ?F)" + by (subst emeasure_distr[OF measurable_comb_seq]) + (auto intro!: sets_PiM_I simp: split_beta' J) + also have "\ = emeasure S ?E * emeasure S ?F" + using J by (intro P.emeasure_pair_measure_Times) (auto intro!: sets_PiM_I finite_vimageI simp: inj_on_def) + also have "emeasure S ?F = (\j\(op + i) -` J. emeasure M (E (i + j)))" + using J by (intro emeasure_PiM_emb) (simp_all add: finite_vimageI inj_on_def) + also have "\ = (\j\J - (J \ {..j\J \ {..j\J \ {..j\J - (J \ {..j\J. emeasure M (E j))" + by (subst mult_commute) (auto simp: J setprod_subset_diff[symmetric]) + finally show "emeasure ?D ?X = (\j\J. emeasure M (E j))" . +qed simp_all + +lemma PiM_iter: + "distr (M \\<^isub>M S) S (\(s, \). nat_case s \) = S" (is "?D = _") +proof (rule PiM_eq) + let ?I = "UNIV::nat set" and ?M = "\n. M" + let "distr _ _ ?f" = "?D" + + fix J E assume J: "finite J" "J \ ?I" "\j. j \ J \ E j \ sets M" + let ?X = "prod_emb ?I ?M J (PIE j:J. E j)" + have "\j x. j \ J \ x \ E j \ x \ space M" + using J(3)[THEN sets_into_space] by (auto simp: space_PiM Pi_iff subset_eq) + with J have "?f -` ?X \ space (M \\<^isub>M S) = (if 0 \ J then E 0 else space M) \ + (prod_emb ?I ?M (Suc -` J) (PIE j:Suc -` J. E (Suc j)))" (is "_ = ?E \ ?F") + by (auto simp: space_pair_measure space_PiM Pi_iff prod_emb_def all_conj_distrib + split: nat.split nat.split_asm) + then have "emeasure ?D ?X = emeasure (M \\<^isub>M S) (?E \ ?F)" + by (subst emeasure_distr[OF measurable_nat_case]) + (auto intro!: sets_PiM_I simp: split_beta' J) + also have "\ = emeasure M ?E * emeasure S ?F" + using J by (intro P.emeasure_pair_measure_Times) (auto intro!: sets_PiM_I finite_vimageI) + also have "emeasure S ?F = (\j\Suc -` J. emeasure M (E (Suc j)))" + using J by (intro emeasure_PiM_emb) (simp_all add: finite_vimageI) + also have "\ = (\j\J - {0}. emeasure M (E j))" + by (rule strong_setprod_reindex_cong[where f="\x. x - 1"]) + (auto simp: image_iff Bex_def not_less nat_eq_diff_eq ac_simps cong: conj_cong intro!: inj_onI) + also have "emeasure M ?E * (\j\J - {0}. emeasure M (E j)) = (\j\J. emeasure M (E j))" + by (auto simp: M.emeasure_space_1 setprod.remove J) + finally show "emeasure ?D ?X = (\j\J. emeasure M (E j))" . +qed simp_all + +end + end \ No newline at end of file