# HG changeset patch # User hoelzl # Date 1353073583 -3600 # Node ID a58bb401af80ae0ef2a86ab3be4489ce4c63d1c9 # Parent 98abff4a775b3aafa4c74687df179d9523d133d0 measurability for nat_case and comb_seq diff -r 98abff4a775b -r a58bb401af80 src/HOL/Probability/Finite_Product_Measure.thy --- a/src/HOL/Probability/Finite_Product_Measure.thy Fri Nov 16 14:46:23 2012 +0100 +++ b/src/HOL/Probability/Finite_Product_Measure.thy Fri Nov 16 14:46:23 2012 +0100 @@ -540,6 +540,18 @@ finally show "f -` A \ space N \ sets N" . qed (auto simp: space) +lemma measurable_PiM_single': + assumes f: "\i. i \ I \ f i \ measurable N (M i)" + and "(\\ i. f i \) \ space N \ (\\<^isub>E i\I. space (M i))" + shows "(\\ i. f i \) \ measurable N (Pi\<^isub>M I M)" +proof (rule measurable_PiM_single) + fix A i assume A: "i \ I" "A \ sets (M i)" + then have "{\ \ space N. f i \ \ A} = f i -` A \ space N" + by auto + then show "{\ \ space N. f i \ \ A} \ sets N" + using A f by (auto intro!: measurable_sets) +qed fact + lemma sets_PiM_I_finite[measurable]: assumes "finite I" and sets: "(\i. i \ I \ E i \ sets (M i))" shows "(PIE j:I. E j) \ sets (PIM i:I. M i)" @@ -562,12 +574,22 @@ shows "(\x. (f x) i) \ measurable N (M i)" using measurable_compose[OF f measurable_component_singleton, OF i] . +lemma measurable_PiM_component_rev[measurable (raw)]: + "i \ I \ f \ measurable (M i) N \ (\x. f (x i)) \ measurable (PiM I M) N" + by simp + lemma measurable_nat_case[measurable (raw)]: assumes [measurable (raw)]: "i = 0 \ f \ measurable M N" "\j. i = Suc j \ (\x. g x j) \ measurable M N" shows "(\x. nat_case (f x) (g x) i) \ measurable M N" by (cases i) simp_all +lemma measurable_nat_case'[measurable (raw)]: + assumes fg[measurable]: "f \ measurable N M" "g \ measurable N (\\<^isub>M i\UNIV. M)" + shows "(\x. nat_case (f x) (g x)) \ measurable N (\\<^isub>M i\UNIV. M)" + using fg[THEN measurable_space] + by (auto intro!: measurable_PiM_single' simp add: space_PiM Pi_iff split: nat.split) + lemma measurable_add_dim[measurable]: "(\(f, y). f(i := y)) \ measurable (Pi\<^isub>M I M \\<^isub>M M i) (Pi\<^isub>M (insert i I) M)" (is "?f \ measurable ?P ?I") diff -r 98abff4a775b -r a58bb401af80 src/HOL/Probability/Infinite_Product_Measure.thy --- a/src/HOL/Probability/Infinite_Product_Measure.thy Fri Nov 16 14:46:23 2012 +0100 +++ b/src/HOL/Probability/Infinite_Product_Measure.thy Fri Nov 16 14:46:23 2012 +0100 @@ -449,23 +449,6 @@ subsection {* Sequence space *} -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))" @@ -475,7 +458,8 @@ 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 measurable_comb_seq: "(\(\, \'). comb_seq i \ \') \ measurable ((\\<^isub>M i\UNIV. M) \\<^isub>M (\\<^isub>M i\UNIV. M)) (\\<^isub>M i\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) @@ -488,11 +472,33 @@ unfolding * by (auto simp: A intro!: sets_Collect_single) qed -lemma measurable_comb_seq': +lemma measurable_comb_seq'[measurable (raw)]: 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 +lemma comb_seq_0: "comb_seq 0 \ \' = \'" + by (auto simp add: comb_seq_def) + +lemma comb_seq_Suc: "comb_seq (Suc n) \ \' = comb_seq n \ (nat_case (\ n) \')" + by (auto simp add: comb_seq_def not_less less_Suc_eq le_imp_diff_is_add intro!: ext split: nat.split) + +lemma comb_seq_Suc_0[simp]: "comb_seq (Suc 0) \ = nat_case (\ 0)" + by (intro ext) (simp add: comb_seq_Suc comb_seq_0) + +lemma comb_seq_less: "i < n \ comb_seq n \ \' i = \ i" + by (auto split: split_comb_seq) + +lemma comb_seq_add: "comb_seq n \ \' (i + n) = \' i" + by (auto split: nat.split split_comb_seq) + +lemma nat_case_comb_seq: "nat_case s' (comb_seq n \ \') (i + n) = nat_case (nat_case s' \ n) \' i" + by (auto split: nat.split split_comb_seq) + +lemma nat_case_comb_seq': + "nat_case s (comb_seq i \ \') = comb_seq (Suc i) (nat_case s \) \'" + by (auto split: split_comb_seq nat.split) + locale sequence_space = product_prob_space "\i. M" "UNIV :: nat set" for M begin @@ -578,7 +584,7 @@ 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]) + by (subst emeasure_distr) (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)