# HG changeset patch # User hellerar # Date 1283434298 -7200 # Node ID 67da17aced5aa3a94c8c09cc0dc1b50ec27c0ba7 # Parent 84af4fdc1a98b90047dedb94b3b07ec5efde2b04 measure unique diff -r 84af4fdc1a98 -r 67da17aced5a src/HOL/Probability/Product_Measure.thy --- a/src/HOL/Probability/Product_Measure.thy Wed Sep 01 17:19:47 2010 +0200 +++ b/src/HOL/Probability/Product_Measure.thy Thu Sep 02 15:31:38 2010 +0200 @@ -5,13 +5,13 @@ definition dynkin where "dynkin M = ((\ A \ sets M. A \ space M) \ - space M \ sets M \ (\ a \ sets M. \ b \ sets M. b - a \ sets M) \ + space M \ sets M \ (\ b \ sets M. \ a \ sets M. a \ b \ b - a \ sets M) \ (\ a. (\ i j :: nat. i \ j \ a i \ a j = {}) \ (\ i :: nat. a i \ sets M) \ UNION UNIV a \ sets M))" lemma dynkinI: assumes "\ A. A \ sets M \ A \ space M" - assumes "space M \ sets M" and "\ a \ sets M. \ b \ sets M. b - a \ sets M" + assumes "space M \ sets M" and "\ b \ sets M. \ a \ sets M. a \ b \ b - a \ sets M" assumes "\ a. (\ i j :: nat. i \ j \ a i \ a j = {}) \ (\ i :: nat. a i \ sets M) \ UNION UNIV a \ sets M" shows "dynkin M" @@ -29,13 +29,18 @@ lemma dynkin_diff: assumes "dynkin M" - shows "\ a b. \ a \ sets M ; b \ sets M \ \ b - a \ sets M" + shows "\ a b. \ a \ sets M ; b \ sets M ; a \ b \ \ b - a \ sets M" using assms unfolding dynkin_def by auto +lemma dynkin_empty: + assumes "dynkin M" + shows "{} \ sets M" +using dynkin_diff[OF assms dynkin_space[OF assms] dynkin_space[OF assms]] by auto + lemma dynkin_UN: assumes "dynkin M" assumes "\ i j :: nat. i \ j \ a i \ a j = {}" - assumes "\ i :: nat. a i \ sets M" + assumes "\ i :: nat. a i \ sets M" shows "UNION UNIV a \ sets M" using assms unfolding dynkin_def by auto @@ -46,7 +51,7 @@ shows "dynkin \ space = A, sets = Pow A \" by (rule dynkinI) auto -lemma +lemma dynkin_lemma: assumes stab: "Int_stable E" and spac: "space E = space D" and subsED: "sets E \ sets D" @@ -61,10 +66,8 @@ hence not_empty: "{sets (d :: 'a algebra) | d. dynkin d \ space d = space E \ sets E \ sets d} \ {}" using exI[of "\ x. space x = space E \ dynkin x \ sets E \ sets x" "\ space = space E, sets = Pow (space E) \", simplified] by auto - - have "sets_\E \ sets D" + have \E_D: "sets_\E \ sets D" unfolding sets_\E_def using assms by auto - have \ynkin: "dynkin \E" proof (rule dynkinI, safe) fix A x assume asm: "A \ sets \E" "x \ A" @@ -91,7 +94,7 @@ unfolding \E_def sets_\E_def using dynkin_space by fastsimp next - fix a b assume "a \ sets \E" "b \ sets \E" + fix a b assume "a \ sets \E" "b \ sets \E" "a \ b" thus "b - a \ sets \E" unfolding \E_def sets_\E_def by (auto intro:dynkin_diff) next @@ -142,21 +145,21 @@ unfolding \E_def by auto qed next - fix a b assume absm: "a \ Dy d" "b \ Dy d" + fix a b assume absm: "a \ Dy d" "b \ Dy d" "a \ b" hence "a \ sets \E" "b \ sets \E" unfolding Dy_def \E_def by auto hence *: "b - a \ sets \E" - using dynkin_diff[OF \ynkin] by auto + using dynkin_diff[OF \ynkin] `a \ b` by auto have "a \ d \ sets \E" "b \ d \ sets \E" using absm unfolding Dy_def \E_def by auto hence "(b \ d) - (a \ d) \ sets \E" - using dynkin_diff[OF \ynkin] by auto + using dynkin_diff[OF \ynkin] `a \ b` by auto hence **: "(b - a) \ d \ sets \E" by (auto simp add:Diff_Int_distrib2) thus "b - a \ Dy d" using * ** unfolding Dy_def \E_def by auto next fix a assume aasm: "\i j :: nat. i \ j \ a i \ a j = {}" "\i. a i \ Dy d" - hence "\ i. a i \ sets \E" + hence "\ i. a i \ sets \E" unfolding Dy_def \E_def by auto from dynkin_UN[OF \ynkin aasm(1) this] have *: "UNION UNIV a \ sets \E" by auto @@ -228,24 +231,170 @@ fix a assume aasm: "a \ sets \E" hence "a \ d \ sets \E" using * dasm unfolding Dy_def \E_def by auto } note \E_stab = this - have "sigma_algebra D" + { fix A :: "nat \ 'a set" assume Asm: "range A \ sets \E" "\A. A \ sets \E \ A \ space \E" + "\a. a \ sets \E \ space \E - a \ sets \E" + "{} \ sets \E" "space \E \ sets \E" + let "?A i" = "A i \ (\ j \ {..< i}. space \E - A j)" + { fix i :: nat + have *: "(\ j \ {..< i}. space \E - A j) \ space \E \ sets \E" + apply (induct i) + using lessThan_Suc Asm \E_stab apply fastsimp + apply (subst lessThan_Suc) + apply (subst INT_insert) + apply (subst Int_assoc) + apply (subst \E_stab) + using lessThan_Suc Asm \E_stab Asm + apply (fastsimp simp add:Int_assoc dynkin_diff[OF \ynkin]) + prefer 2 apply simp + apply (rule dynkin_diff[OF \ynkin, of _ "space \E", OF _ dynkin_space[OF \ynkin]]) + using Asm by auto + have **: "\ i. A i \ space \E" using Asm by auto + have "(\ j \ {..< i}. space \E - A j) \ space \E \ (\ j \ {..< i}. A j) = UNIV \ i = 0" + apply (cases i) + using Asm ** dynkin_subset[OF \ynkin, of "A (i - 1)"] + by auto + hence Aisets: "?A i \ sets \E" + apply (cases i) + using Asm * apply fastsimp + apply (rule \E_stab) + using Asm * ** + by (auto simp add:Int_absorb2) + have "?A i = disjointed A i" unfolding disjointed_def + atLeast0LessThan using Asm by auto + hence "?A i = disjointed A i" "?A i \ sets \E" + using Aisets by auto + } note Ai = this + from dynkin_UN[OF \ynkin _ this(2)] this disjoint_family_disjointed[of A] + have "(\ i. ?A i) \ sets \E" + by (auto simp add:disjoint_family_on_def disjointed_def) + hence "(\ i. A i) \ sets \E" + using Ai(1) UN_disjointed_eq[of A] by auto } note \E_UN = this + { fix a b assume asm: "a \ sets \E" "b \ sets \E" + let ?ab = "\ i. if (i::nat) = 0 then a else if i = 1 then b else {}" + have *: "(\ i. ?ab i) \ sets \E" + apply (rule \E_UN) + using asm \E_UN dynkin_empty[OF \ynkin] + dynkin_subset[OF \ynkin] + dynkin_space[OF \ynkin] + dynkin_diff[OF \ynkin] by auto + have "(\ i. ?ab i) = a \ b" apply auto + apply (case_tac "i = 0") + apply auto + apply (case_tac "i = 1") + by auto + hence "a \ b \ sets \E" using * by auto} note \E_Un = this + have "sigma_algebra \E" apply unfold_locales - using dynkin_subset[OF dyn] - using dynkin_diff[OF dyn, of _ "space D", OF _ dynkin_space[OF dyn]] - using dynkin_diff[OF dyn, of "space D" "space D", OF dynkin_space[OF dyn] dynkin_space[OF dyn]] - using dynkin_space[OF dyn] - proof auto - fix A :: "nat \ 'a set" assume Asm: "range A \ sets D" "\A. A \ sets D \ A \ space D" - "\a. a \ sets D \ space D - a \ sets D" - "{} \ sets D" "space D \ sets D" - let "?A i" = "A i - (\ j \ {..< i}. A j)" - { fix i :: nat assume "i > 0" - have "(\ j \ {..< i}. A j) \ sets \E" - apply (induct i) - apply auto - } - from dynkin_UN + using dynkin_subset[OF \ynkin] + using dynkin_diff[OF \ynkin, of _ "space \E", OF _ dynkin_space[OF \ynkin]] + using dynkin_diff[OF \ynkin, of "space \E" "space \E", OF dynkin_space[OF \ynkin] dynkin_space[OF \ynkin]] + using dynkin_space[OF \ynkin] + using \E_UN \E_Un + by auto + from sigma_algebra.sigma_subset[OF this E_\E] \E_D subsDE spac + show ?thesis by (auto simp add:\E_def sigma_def) +qed + +lemma measure_eq: + assumes fin: "\ (space M) = \ (space M)" "\ (space M) < \" + assumes E: "M = sigma (space E) (sets E)" "Int_stable E" + assumes eq: "\ e. e \ sets E \ \ e = \ e" + assumes ms: "measure_space M \" "measure_space M \" + assumes A: "A \ sets M" + shows "\ A = \ A" +proof - + interpret M: measure_space M \ + using ms by simp + interpret M': measure_space M \ + using ms by simp + + let ?D_sets = "{A. A \ sets M \ \ A = \ A}" + have \: "dynkin \ space = space M , sets = ?D_sets \" + proof (rule dynkinI, safe, simp_all) + fix A x assume "A \ sets M \ \ A = \ A" "x \ A" + thus "x \ space M" using assms M.sets_into_space by auto + next + show "\ (space M) = \ (space M)" + using fin by auto + next + fix a b + assume asm: "a \ sets M \ \ a = \ a" + "b \ sets M \ \ b = \ b" "a \ b" + hence "a \ space M" + using M.sets_into_space by auto + from M.measure_mono[OF this] + have "\ a \ \ (space M)" + using asm by auto + hence afin: "\ a < \" + using fin by auto + have *: "b = b - a \ a" using asm by auto + have **: "(b - a) \ a = {}" using asm by auto + have iv: "\ (b - a) + \ a = \ b" + using M.measure_additive[of "b - a" a] + conjunct1[OF asm(1)] conjunct1[OF asm(2)] * ** + by auto + have v: "\ (b - a) + \ a = \ b" + using M'.measure_additive[of "b - a" a] + conjunct1[OF asm(1)] conjunct1[OF asm(2)] * ** + by auto + from iv v have "\ (b - a) = \ (b - a)" using asm afin + pinfreal_add_cancel_right[of "\ (b - a)" "\ a" "\ (b - a)"] + by auto + thus "b - a \ sets M \ \ (b - a) = \ (b - a)" + using asm by auto + next + fix a assume "\i j :: nat. i \ j \ a i \ a j = {}" + "\i. a i \ sets M \ \ (a i) = \ (a i)" + thus "(\x. a x) \ sets M \ \ (\x. a x) = \ (\x. a x)" + using M.measure_countably_additive + M'.measure_countably_additive + M.countable_UN + apply (auto simp add:disjoint_family_on_def image_def) + apply (subst M.measure_countably_additive[symmetric]) + apply (auto simp add:disjoint_family_on_def) + apply (subst M'.measure_countably_additive[symmetric]) + by (auto simp add:disjoint_family_on_def) qed + have *: "sets E \ ?D_sets" + using eq E sigma_sets.Basic[of _ "sets E"] + by (auto simp add:sigma_def) + have **: "?D_sets \ sets M" by auto + have "M = \ space = space M , sets = ?D_sets \" + unfolding E(1) + apply (rule dynkin_lemma[OF E(2)]) + using eq E space_sigma \ sigma_sets.Basic + by (auto simp add:sigma_def) + from subst[OF this, of "\ M. A \ sets M", OF A] + show ?thesis by auto +qed + +lemma + assumes sfin: "range A \ sets M" "(\i. A i) = space M" "\ i :: nat. \ (A i) < \" + assumes A: "\ i. \ (A i) = \ (A i)" "\ i. A i \ A (Suc i)" + assumes E: "M = sigma (space E) (sets E)" "Int_stable E" + assumes eq: "\ e. e \ sets E \ \ e = \ e" + assumes ms: "measure_space (M :: 'a algebra) \" "measure_space M \" + assumes B: "B \ sets M" + shows "\ B = \ B" +proof - + interpret M: measure_space M \ by (rule ms) + interpret M': measure_space M \ by (rule ms) + have *: "M = \ space = space M, sets = sets M \" by auto + { fix i :: nat + have **: "M\ space := A i, sets := op \ (A i) ` sets M \ = + \ space = A i, sets = op \ (A i) ` sets M \" + by auto + have mu_i: "measure_space \ space = A i, sets = op \ (A i) ` sets M \ \" + using M.restricted_measure_space[of "A i", simplified **] + sfin by auto + have nu_i: "measure_space \ space = A i, sets = op \ (A i) ` sets M \ \" + using M'.restricted_measure_space[of "A i", simplified **] + sfin by auto + let ?M = "\ space = A i, sets = op \ (A i) ` sets M \" + have "\ (A i \ B) = \ (A i \ B)" + apply (rule measure_eq[of \ ?M \ "\ space = space E \ A i, sets = op \ (A i) ` sets E\" "A i \ B", simplified]) + using assms nu_i mu_i + apply (auto simp add:image_def) (* TODO *) qed lemma