# HG changeset patch # User hoelzl # Date 1306411926 -7200 # Node ID 73e2d802ea417f6b74786e6dfbd8f9d6a0cbc2a5 # Parent 11fd8c04ea2436d64dd599559fb45b3ce7b31b23 add lemma indep_rv_finite diff -r 11fd8c04ea24 -r 73e2d802ea41 src/HOL/Probability/Independent_Family.thy --- a/src/HOL/Probability/Independent_Family.thy Thu May 26 14:12:03 2011 +0200 +++ b/src/HOL/Probability/Independent_Family.thy Thu May 26 14:12:06 2011 +0200 @@ -41,7 +41,7 @@ (\i\I. random_variable (M' i) (X i)) \ indep_sets (\i. sigma_sets (space M) { X i -` A \ space M | A. A \ sets (M' i)}) I" -lemma (in prob_space) indep_sets_cong: +lemma (in prob_space) indep_sets_cong[cong]: "I = J \ (\i. i \ I \ F i = G i) \ indep_sets F I \ indep_sets G J" by (simp add: indep_sets_def, intro conj_cong all_cong imp_cong ball_cong) blast+ @@ -194,7 +194,7 @@ qed } note indep_sets_insert = this have "dynkin_system \ space = space M, sets = ?D \" - proof (rule dynkin_systemI', simp_all, safe) + proof (rule dynkin_systemI', simp_all cong del: indep_sets_cong, safe) show "indep_sets (G(j := {{}})) K" by (rule indep_sets_insert) auto next @@ -266,7 +266,7 @@ qed (insert sets_into_space, auto) then have mono: "sets (dynkin \space = space M, sets = G j\) \ sets \space = space M, sets = {E \ events. indep_sets (G(j := {E})) K}\" - proof (rule dynkin_system.dynkin_subset, simp_all, safe) + proof (rule dynkin_system.dynkin_subset, simp_all cong del: indep_sets_cong, safe) fix X assume "X \ G j" then show "X \ events" using G `j \ K` by auto from `indep_sets G K` @@ -322,6 +322,17 @@ shows "indep_sets (\i. sigma_sets (space M) (F i)) I" using indep_sets_sigma[OF assms] by (simp add: sets_sigma) +lemma (in prob_space) indep_sets_sigma_sets_iff: + assumes "\i. i \ I \ Int_stable \ space = space M, sets = F i \" + shows "indep_sets (\i. sigma_sets (space M) (F i)) I \ indep_sets F I" +proof + assume "indep_sets F I" then show "indep_sets (\i. sigma_sets (space M) (F i)) I" + by (rule indep_sets_sigma_sets) fact +next + assume "indep_sets (\i. sigma_sets (space M) (F i)) I" then show "indep_sets F I" + by (rule indep_sets_mono_sets) (intro subsetI sigma_sets.Basic) +qed + lemma (in prob_space) indep_sets2_eq: "indep_set A B \ A \ events \ B \ events \ (\a\A. \b\B. prob (a \ b) = prob a * prob b)" unfolding indep_set_def @@ -666,4 +677,104 @@ qed qed +lemma (in prob_space) indep_sets_finite: + assumes I: "I \ {}" "finite I" + and F: "\i. i \ I \ F i \ events" "\i. i \ I \ space M \ F i" + shows "indep_sets F I \ (\A\Pi I F. prob (\j\I. A j) = (\j\I. prob (A j)))" +proof + assume *: "indep_sets F I" + from I show "\A\Pi I F. prob (\j\I. A j) = (\j\I. prob (A j))" + by (intro indep_setsD[OF *] ballI) auto +next + assume indep: "\A\Pi I F. prob (\j\I. A j) = (\j\I. prob (A j))" + show "indep_sets F I" + proof (rule indep_setsI[OF F(1)]) + fix A J assume J: "J \ {}" "J \ I" "finite J" + assume A: "\j\J. A j \ F j" + let "?A j" = "if j \ J then A j else space M" + have "prob (\j\I. ?A j) = prob (\j\J. A j)" + using subset_trans[OF F(1) space_closed] J A + by (auto intro!: arg_cong[where f=prob] split: split_if_asm) blast + also + from A F have "(\j. if j \ J then A j else space M) \ Pi I F" (is "?A \ _") + by (auto split: split_if_asm) + with indep have "prob (\j\I. ?A j) = (\j\I. prob (?A j))" + by auto + also have "\ = (\j\J. prob (A j))" + unfolding if_distrib setprod.If_cases[OF `finite I`] + using prob_space `J \ I` by (simp add: Int_absorb1 setprod_1) + finally show "prob (\j\J. A j) = (\j\J. prob (A j))" .. + qed +qed + +lemma (in prob_space) indep_rv_finite: + fixes I :: "'i set" + assumes I: "I \ {}" "finite I" + and rv: "\i. i \ I \ random_variable (sigma (M' i)) (X i)" + and Int_stable: "\i. i \ I \ Int_stable (M' i)" + and space: "\i. i \ I \ space (M' i) \ sets (M' i)" + shows "indep_rv (\i. sigma (M' i)) X I \ + (\A\(\ i\I. sets (M' i)). prob (\j\I. X j -` A j \ space M) = (\j\I. distribution (X j) (A j)))" +proof - + from rv have X: "\i. i \ I \ X i \ space M \ space (M' i)" + unfolding measurable_def by simp + + { fix i assume "i\I" + have "sigma_sets (space M) {X i -` A \ space M |A. A \ sets (sigma (M' i))} + = sigma_sets (space M) {X i -` A \ space M |A. A \ sets (M' i)}" + unfolding sigma_sets_vimage_commute[OF X, OF `i \ I`] + by (subst sigma_sets_sigma_sets_eq) auto } + note this[simp] + + { fix i assume "i\I" + have "Int_stable \space = space M, sets = {X i -` A \ space M |A. A \ sets (M' i)}\" + proof (rule Int_stableI) + fix a assume "a \ {X i -` A \ space M |A. A \ sets (M' i)}" + then obtain A where "a = X i -` A \ space M" "A \ sets (M' i)" by auto + moreover + fix b assume "b \ {X i -` A \ space M |A. A \ sets (M' i)}" + then obtain B where "b = X i -` B \ space M" "B \ sets (M' i)" by auto + moreover + have "(X i -` A \ space M) \ (X i -` B \ space M) = X i -` (A \ B) \ space M" by auto + moreover note Int_stable[OF `i \ I`] + ultimately + show "a \ b \ {X i -` A \ space M |A. A \ sets (M' i)}" + by (auto simp del: vimage_Int intro!: exI[of _ "A \ B"] dest: Int_stableD) + qed } + note indep_sets_sigma_sets_iff[OF this, simp] + + { fix i assume "i \ I" + { fix A assume "A \ sets (M' i)" + then have "A \ sets (sigma (M' i))" by (auto simp: sets_sigma intro: sigma_sets.Basic) + moreover + from rv[OF `i\I`] have "X i \ measurable M (sigma (M' i))" by auto + ultimately + have "X i -` A \ space M \ sets M" by (auto intro: measurable_sets) } + with X[OF `i\I`] space[OF `i\I`] + have "{X i -` A \ space M |A. A \ sets (M' i)} \ events" + "space M \ {X i -` A \ space M |A. A \ sets (M' i)}" + by (auto intro!: exI[of _ "space (M' i)"]) } + note indep_sets_finite[OF I this, simp] + + have "(\A\\ i\I. {X i -` A \ space M |A. A \ sets (M' i)}. prob (INTER I A) = (\j\I. prob (A j))) = + (\A\\ i\I. sets (M' i). prob ((\j\I. X j -` A j) \ space M) = (\x\I. prob (X x -` A x \ space M)))" + (is "?L = ?R") + proof safe + fix A assume ?L and A: "A \ (\ i\I. sets (M' i))" + from `?L`[THEN bspec, of "\i. X i -` A i \ space M"] A `I \ {}` + show "prob ((\j\I. X j -` A j) \ space M) = (\x\I. prob (X x -` A x \ space M))" + by (auto simp add: Pi_iff) + next + fix A assume ?R and A: "A \ (\ i\I. {X i -` A \ space M |A. A \ sets (M' i)})" + from A have "\i\I. \B. A i = X i -` B \ space M \ B \ sets (M' i)" by auto + from bchoice[OF this] obtain B where B: "\i\I. A i = X i -` B i \ space M" + "B \ (\ i\I. sets (M' i))" by auto + from `?R`[THEN bspec, OF B(2)] B(1) `I \ {}` + show "prob (INTER I A) = (\j\I. prob (A j))" + by simp + qed + then show ?thesis using `I \ {}` + by (simp add: rv distribution_def indep_rv_def) +qed + end diff -r 11fd8c04ea24 -r 73e2d802ea41 src/HOL/Probability/Sigma_Algebra.thy --- a/src/HOL/Probability/Sigma_Algebra.thy Thu May 26 14:12:03 2011 +0200 +++ b/src/HOL/Probability/Sigma_Algebra.thy Thu May 26 14:12:06 2011 +0200 @@ -555,6 +555,16 @@ lemma (in sigma_algebra) sigma_eq[simp]: "sigma M = M" unfolding sigma_def sigma_sets_eq by simp +lemma sigma_sigma_eq: + assumes "sets M \ Pow (space M)" + shows "sigma (sigma M) = sigma M" + using sigma_algebra.sigma_eq[OF sigma_algebra_sigma, OF assms] . + +lemma sigma_sets_sigma_sets_eq: + "M \ Pow S \ sigma_sets S (sigma_sets S M) = sigma_sets S M" + using sigma_sigma_eq[of "\ space = S, sets = M \"] + by (simp add: sigma_def) + lemma sigma_sets_singleton: assumes "X \ S" shows "sigma_sets S { X } = { {}, X, S - X, S }" @@ -587,6 +597,61 @@ by (simp add: sigma_def) qed +lemma sigma_sets_vimage_commute: + assumes X: "X \ space M \ space M'" + shows "{X -` A \ space M |A. A \ sets (sigma M')} + = sigma_sets (space M) {X -` A \ space M |A. A \ sets M'}" (is "?L = ?R") +proof + show "?L \ ?R" + proof clarify + fix A assume "A \ sets (sigma M')" + then have "A \ sigma_sets (space M') (sets M')" by (simp add: sets_sigma) + then show "X -` A \ space M \ ?R" + proof induct + case (Basic B) then show ?case + by (auto intro!: sigma_sets.Basic) + next + case Empty then show ?case + by (auto intro!: sigma_sets.Empty) + next + case (Compl B) + have [simp]: "X -` (space M' - B) \ space M = space M - (X -` B \ space M)" + by (auto simp add: funcset_mem [OF X]) + with Compl show ?case + by (auto intro!: sigma_sets.Compl) + next + case (Union F) + then show ?case + by (auto simp add: vimage_UN UN_extend_simps(4) simp del: UN_simps + intro!: sigma_sets.Union) + qed + qed + show "?R \ ?L" + proof clarify + fix A assume "A \ ?R" + then show "\B. A = X -` B \ space M \ B \ sets (sigma M')" + proof induct + case (Basic B) then show ?case by auto + next + case Empty then show ?case + by (auto simp: sets_sigma intro!: sigma_sets.Empty exI[of _ "{}"]) + next + case (Compl B) + then obtain A where A: "B = X -` A \ space M" "A \ sets (sigma M')" by auto + then have [simp]: "space M - B = X -` (space M' - A) \ space M" + by (auto simp add: funcset_mem [OF X]) + with A(2) show ?case + by (auto simp: sets_sigma intro: sigma_sets.Compl) + next + case (Union F) + then have "\i. \B. F i = X -` B \ space M \ B \ sets (sigma M')" by auto + from choice[OF this] guess A .. note A = this + with A show ?case + by (auto simp: sets_sigma vimage_UN[symmetric] intro: sigma_sets.Union) + qed + qed +qed + section {* Measurable functions *} definition