# HG changeset patch # User hoelzl # Date 1296825415 -3600 # Node ID a207a858d1f68c44e076a1c6084a85b69011bfe7 # Parent 1100512e16d8485b6b0f7065f7fee3f50aae0c2c prefer p2e before e2p; use measure_unique_Int_stable_vimage; diff -r 1100512e16d8 -r a207a858d1f6 src/HOL/Probability/Lebesgue_Measure.thy --- a/src/HOL/Probability/Lebesgue_Measure.thy Fri Feb 04 14:16:55 2011 +0100 +++ b/src/HOL/Probability/Lebesgue_Measure.thy Fri Feb 04 14:16:55 2011 +0100 @@ -48,6 +48,8 @@ lemma Pi_iff: "f \ Pi I X \ (\i\I. f i \ X i)" unfolding Pi_def by auto +subsection {* Lebesgue measure *} + definition lebesgue :: "'a::ordered_euclidean_space measure_space" where "lebesgue = \ space = UNIV, sets = {A. \n. (indicator A :: 'a \ real) integrable_on cube n}, @@ -498,6 +500,8 @@ then show ?thesis by auto qed auto +subsection {* Lebesgue-Borel measure *} + definition "lborel = lebesgue \ sets := sets borel \" lemma @@ -544,6 +548,8 @@ by auto qed +subsection {* Lebesgue integrable implies Gauge integrable *} + lemma simple_function_has_integral: fixes f::"'a::ordered_euclidean_space \ pextreal" assumes f:"simple_function lebesgue f" @@ -734,13 +740,7 @@ apply(rule borel.borel_measurableI) using continuous_open_preimage[OF assms] unfolding vimage_def by auto -lemma (in measure_space) integral_monotone_convergence_pos': - assumes i: "\i. integrable M (f i)" and mono: "\x. mono (\n. f n x)" - and pos: "\x i. 0 \ f i x" - and lim: "\x. (\i. f i x) ----> u x" - and ilim: "(\i. integral\<^isup>L M (f i)) ----> x" - shows "integrable M u \ integral\<^isup>L M u = x" - using integral_monotone_convergence_pos[OF assms] by auto +subsection {* Equivalence between product spaces and euclidean spaces *} definition e2p :: "'a::ordered_euclidean_space \ (nat \ real)" where "e2p x = (\i\{.. extensional {.. extensional {.. e2p ` A" then guess y unfolding image_iff .. note y=this - show "x \ p2e -` A \ extensional {.. p2e -` A \ extensional {.. e2p ` A" unfolding image_iff apply(rule_tac x="p2e x" in bexI) apply(subst e2p_p2e) by auto -qed - interpretation lborel_product: product_sigma_finite "\x. lborel::real measure_space" by default @@ -843,107 +828,65 @@ then show "p2e -` A \ space ?P \ sets ?P" by auto qed simp -lemma inj_e2p[intro, simp]: "inj e2p" -proof (intro inj_onI conjI allI impI euclidean_eq[where 'a='a, THEN iffD2]) - fix x y ::'a and i assume "e2p x = e2p y" "i < DIM('a)" - then show "x $$ i= y $$ i" - by (auto simp: e2p_def restrict_def fun_eq_iff elim!: allE[where x=i]) -qed - -lemma e2p_Int:"e2p ` A \ e2p ` B = e2p ` (A \ B)" (is "?L = ?R") - by (auto simp: image_Int[THEN sym]) +lemma Int_stable_cuboids: + fixes x::"'a::ordered_euclidean_space" + shows "Int_stable \space = UNIV, sets = range (\(a, b::'a). {a..b})\" + by (auto simp: inter_interval Int_stable_def) -lemma Int_stable_cuboids: fixes x::"'a::ordered_euclidean_space" - shows "Int_stable \space = UNIV, sets = range (\(a, b::'a). e2p ` {a..b})\" - unfolding Int_stable_def algebra.select_convs -proof safe fix a b x y::'a - have *:"e2p ` {a..b} \ e2p ` {x..y} = - (\(a, b). e2p ` {a..b}) (\\ i. max (a $$ i) (x $$ i), \\ i. min (b $$ i) (y $$ i)::'a)" - unfolding e2p_Int inter_interval by auto - show "e2p ` {a..b} \ e2p ` {x..y} \ range (\(a, b). e2p ` {a..b::'a})" unfolding * - apply(rule range_eqI) .. -qed - -lemma Int_stable_cuboids': fixes x::"'a::ordered_euclidean_space" - shows "Int_stable \space = UNIV, sets = range (\(a, b::'a). {a..b})\" - unfolding Int_stable_def algebra.select_convs - apply safe unfolding inter_interval by auto - -lemma lmeasure_measure_eq_borel_prod: +lemma lborel_eq_lborel_space: fixes A :: "('a::ordered_euclidean_space) set" assumes "A \ sets borel" - shows "lebesgue.\ A = lborel_space.\ TYPE('a) (e2p ` A)" (is "_ = ?m A") -proof (rule measure_unique_Int_stable[where X=A and A=cube]) - show "Int_stable \ space = UNIV :: 'a set, sets = range (\(a,b). {a..b}) \" - (is "Int_stable ?E" ) using Int_stable_cuboids' . - have [simp]: "sigma ?E = borel" using borel_eq_atLeastAtMost .. - show "\i. lebesgue.\ (cube i) \ \" unfolding cube_def by auto - show "\X. X \ sets ?E \ lebesgue.\ X = ?m X" - proof- case goal1 then obtain a b where X:"X = {a..b}" by auto - { presume *:"X \ {} \ ?case" - show ?case apply(cases,rule *,assumption) by auto } - def XX \ "\i. {a $$ i .. b $$ i}" assume "X \ {}" note X' = this[unfolded X interval_ne_empty] - have *:"Pi\<^isub>E {.. Pi\<^isub>E {.. e2p ` X" unfolding image_iff apply(rule_tac x="\\ i. x i" in bexI) - unfolding Pi_def extensional_def e2p_def restrict_def X mem_interval XX_def by rule auto - next fix x assume "x \ e2p ` X" then guess y unfolding image_iff .. note y = this - show "x \ Pi\<^isub>E {.. X = (\xi (XX i))" apply(rule setprod_cong2) - unfolding XX_def lmeasure_atLeastAtMost apply(subst content_real) using X' by auto - also have "... = ?m X" unfolding *[THEN sym] - apply(rule lborel_space.measure_times[symmetric]) unfolding XX_def by auto - finally show ?case . - qed + shows "lborel.\ A = lborel_space.\ TYPE('a) (p2e -` A \ (space (lborel_space.P TYPE('a))))" + (is "_ = measure ?P (?T A)") +proof (rule measure_unique_Int_stable_vimage) + show "measure_space ?P" by default + show "measure_space lborel" by default + + let ?E = "\ space = UNIV :: 'a set, sets = range (\(a,b). {a..b}) \" + show "Int_stable ?E" using Int_stable_cuboids . + show "range cube \ sets ?E" unfolding cube_def_raw by auto + { fix x have "\n. x \ cube n" using mem_big_cube[of x] by fastsimp } + then show "cube \ space ?E" by (intro isotoneI cube_subset_Suc) auto + { fix i show "lborel.\ (cube i) \ \" unfolding cube_def by auto } + show "A \ sets (sigma ?E)" "sets (sigma ?E) = sets lborel" "space ?E = space lborel" + using assms by (simp_all add: borel_eq_atLeastAtMost) - show "range cube \ sets \space = UNIV, sets = range (\(a, b). {a..b})\" - unfolding cube_def_raw by auto - have "\x. \xa. x \ cube xa" apply(rule_tac x=x in mem_big_cube) by fastsimp - thus "cube \ space \space = UNIV, sets = range (\(a, b). {a..b})\" - apply-apply(rule isotoneI) apply(rule cube_subset_Suc) by auto - show "A \ sets (sigma ?E)" using assms by simp - have "measure_space lborel" by default - then show "measure_space \ space = space ?E, sets = sets (sigma ?E), measure = measure lebesgue\" - unfolding lebesgue_def lborel_def by simp - let ?M = "\ space = space ?E, sets = sets (sigma ?E), measure = ?m \" - show "measure_space ?M" - proof (rule lborel_space.measure_space_vimage) - show "sigma_algebra ?M" by (rule lborel.sigma_algebra_cong) auto - show "p2e \ measurable (\\<^isub>M i\{.. sets ?M" - show "measure ?M A = lborel_space.\ TYPE('a) (p2e -` A \ space (\\<^isub>M i\{.. measurable ?P (lborel :: 'a measure_space)" + using measurable_p2e unfolding measurable_def by simp + { fix X assume "X \ sets ?E" + then obtain a b where X[simp]: "X = {a .. b}" by auto + have *: "?T X = (\\<^isub>E i\{.. {a $$ x .. b $$ x})" + by (auto simp: content_closed_interval eucl_le[where 'a='a] + intro!: Real_setprod ) + also have "\ = measure ?P (?T X)" + unfolding * by (subst lborel_space.measure_times) auto + finally show ?thesis . + qed simp } +qed -lemma range_e2p:"range (e2p::'a::ordered_euclidean_space \ _) = extensional {.. sets borel" + shows "lebesgue.\ A = lborel_space.\ TYPE('a) (p2e -` A \ (space (lborel_space.P TYPE('a))))" + using lborel_eq_lborel_space[OF A] by simp lemma borel_fubini_positiv_integral: fixes f :: "'a::ordered_euclidean_space \ pextreal" assumes f: "f \ borel_measurable borel" shows "integral\<^isup>P lborel f = \\<^isup>+x. f (p2e x) \(lborel_space.P TYPE('a))" -proof (rule lborel.positive_integral_vimage[symmetric, of _ "e2p :: 'a \ _" "(\x. f (p2e x))", unfolded p2e_e2p]) - show "(e2p :: 'a \ _) \ measurable borel (lborel_space.P TYPE('a))" by (rule measurable_e2p) - show "sigma_algebra (lborel_space.P TYPE('a))" by default - from measurable_comp[OF measurable_p2e f] - show "(\x. f (p2e x)) \ borel_measurable (lborel_space.P TYPE('a))" by (simp add: comp_def) - let "?L A" = "lebesgue.\ ((e2p::'a \ (nat \ real)) -` A \ UNIV)" - fix A :: "(nat \ real) set" assume "A \ sets (lborel_space.P TYPE('a))" - then have A: "(e2p::'a \ (nat \ real)) -` A \ space borel \ sets borel" - by (rule measurable_sets[OF measurable_e2p]) - have [simp]: "A \ extensional {.. sets (lborel_space.P TYPE('a))`[THEN lborel_space.sets_into_space] by auto - show "lborel_space.\ TYPE('a) A = ?L A" - using lmeasure_measure_eq_borel_prod[OF A] by (simp add: range_e2p) -qed +proof (rule lborel_space.positive_integral_vimage[OF _ _ _ lborel_eq_lborel_space]) + show "sigma_algebra lborel" by default + show "p2e \ measurable (lborel_space.P TYPE('a)) (lborel :: 'a measure_space)" + "f \ borel_measurable lborel" + using measurable_p2e f by (simp_all add: measurable_def) +qed simp lemma borel_fubini_integrable: fixes f :: "'a::ordered_euclidean_space \ real" @@ -967,19 +910,13 @@ then have "f \ borel_measurable borel" by (simp cong: measurable_cong) ultimately show "integrable lborel f" - by (simp add: comp_def borel_fubini_positiv_integral integrable_def) + by (simp add: borel_fubini_positiv_integral integrable_def) qed lemma borel_fubini: fixes f :: "'a::ordered_euclidean_space \ real" assumes f: "f \ borel_measurable borel" shows "integral\<^isup>L lborel f = \x. f (p2e x) \(lborel_space.P TYPE('a))" -proof - - have 1:"(\x. Real (f x)) \ borel_measurable borel" using f by auto - have 2:"(\x. Real (- f x)) \ borel_measurable borel" using f by auto - show ?thesis unfolding lebesgue_integral_def - unfolding borel_fubini_positiv_integral[OF 1] borel_fubini_positiv_integral[OF 2] - unfolding o_def .. -qed + using f by (simp add: borel_fubini_positiv_integral lebesgue_integral_def) end diff -r 1100512e16d8 -r a207a858d1f6 src/HOL/Probability/Measure.thy --- a/src/HOL/Probability/Measure.thy Fri Feb 04 14:16:55 2011 +0100 +++ b/src/HOL/Probability/Measure.thy Fri Feb 04 14:16:55 2011 +0100 @@ -624,6 +624,59 @@ ultimately show ?thesis by (simp add: isoton_def) qed +lemma (in measure_space) measure_space_vimage: + fixes M' :: "('c, 'd) measure_space_scheme" + assumes T: "sigma_algebra M'" "T \ measurable M M'" + and \: "\A. A \ sets M' \ measure M' A = \ (T -` A \ space M)" + shows "measure_space M'" +proof - + interpret M': sigma_algebra M' by fact + show ?thesis + proof + show "measure M' {} = 0" using \[of "{}"] by simp + + show "countably_additive M' (measure M')" + proof (intro countably_additiveI) + fix A :: "nat \ 'c set" assume "range A \ sets M'" "disjoint_family A" + then have A: "\i. A i \ sets M'" "(\i. A i) \ sets M'" by auto + then have *: "range (\i. T -` (A i) \ space M) \ sets M" + using `T \ measurable M M'` by (auto simp: measurable_def) + moreover have "(\i. T -` A i \ space M) \ sets M" + using * by blast + moreover have **: "disjoint_family (\i. T -` A i \ space M)" + using `disjoint_family A` by (auto simp: disjoint_family_on_def) + ultimately show "(\\<^isub>\ i. measure M' (A i)) = measure M' (\i. A i)" + using measure_countably_additive[OF _ **] A + by (auto simp: comp_def vimage_UN \) + qed + qed +qed + +lemma measure_unique_Int_stable_vimage: + fixes A :: "nat \ 'a set" + assumes E: "Int_stable E" + and A: "range A \ sets E" "A \ space E" "\i. measure M (A i) \ \" + and N: "measure_space N" "T \ measurable N M" + and M: "measure_space M" "sets (sigma E) = sets M" "space E = space M" + and eq: "\X. X \ sets E \ measure M X = measure N (T -` X \ space N)" + assumes X: "X \ sets (sigma E)" + shows "measure M X = measure N (T -` X \ space N)" +proof (rule measure_unique_Int_stable[OF E A(1,2) _ _ eq _ X]) + interpret M: measure_space M by fact + interpret N: measure_space N by fact + let "?T X" = "T -` X \ space N" + show "measure_space \space = space E, sets = sets (sigma E), measure = measure M\" + by (rule M.measure_space_cong) (auto simp: M) + show "measure_space \space = space E, sets = sets (sigma E), measure = \X. measure N (?T X)\" (is "measure_space ?E") + proof (rule N.measure_space_vimage) + show "sigma_algebra ?E" + by (rule M.sigma_algebra_cong) (auto simp: M) + show "T \ measurable N ?E" + using `T \ measurable N M` by (auto simp: M measurable_def) + qed simp + show "\i. M.\ (A i) \ \" by fact +qed + section "@{text \}-null sets" abbreviation (in measure_space) "null_sets \ {N\sets M. \ N = 0}" @@ -836,34 +889,6 @@ qed qed -lemma (in measure_space) measure_space_vimage: - fixes M' :: "('c, 'd) measure_space_scheme" - assumes T: "sigma_algebra M'" "T \ measurable M M'" - and \: "\A. A \ sets M' \ measure M' A = \ (T -` A \ space M)" - shows "measure_space M'" -proof - - interpret M': sigma_algebra M' by fact - show ?thesis - proof - show "measure M' {} = 0" using \[of "{}"] by simp - - show "countably_additive M' (measure M')" - proof (intro countably_additiveI) - fix A :: "nat \ 'c set" assume "range A \ sets M'" "disjoint_family A" - then have A: "\i. A i \ sets M'" "(\i. A i) \ sets M'" by auto - then have *: "range (\i. T -` (A i) \ space M) \ sets M" - using `T \ measurable M M'` by (auto simp: measurable_def) - moreover have "(\i. T -` A i \ space M) \ sets M" - using * by blast - moreover have **: "disjoint_family (\i. T -` A i \ space M)" - using `disjoint_family A` by (auto simp: disjoint_family_on_def) - ultimately show "(\\<^isub>\ i. measure M' (A i)) = measure M' (\i. A i)" - using measure_countably_additive[OF _ **] A - by (auto simp: comp_def vimage_UN \) - qed - qed -qed - lemma (in measure_space) measure_space_subalgebra: assumes "sigma_algebra N" and [simp]: "sets N \ sets M" "space N = space M" and measure[simp]: "\X. X \ sets N \ measure N X = measure M X" diff -r 1100512e16d8 -r a207a858d1f6 src/HOL/Probability/Product_Measure.thy --- a/src/HOL/Probability/Product_Measure.thy Fri Feb 04 14:16:55 2011 +0100 +++ b/src/HOL/Probability/Product_Measure.thy Fri Feb 04 14:16:55 2011 +0100 @@ -734,48 +734,37 @@ qed lemma (in pair_sigma_finite) pair_measure_alt2: - assumes "A \ sets P" + assumes A: "A \ sets P" shows "\ A = (\\<^isup>+y. M1.\ ((\x. (x, y)) -` A) \M2)" (is "_ = ?\ A") proof - + interpret Q: pair_sigma_finite M2 M1 by default from sigma_finite_up_in_pair_measure_generator guess F :: "nat \ ('a \ 'b) set" .. note F = this have [simp]: "\m. \ space = space E, sets = sets (sigma E), measure = m \ = P\ measure := m \" unfolding pair_measure_def by simp - show ?thesis - proof (rule measure_unique_Int_stable[where \="?\", OF Int_stable_pair_measure_generator], simp_all) - show "range F \ sets E" "F \ space E" "\i. \ (F i) \ \" "A \ sets (sigma E)" + + have "\ A = Q.\ ((\(y, x). (x, y)) -` A \ space Q.P)" + proof (rule measure_unique_Int_stable_vimage[OF Int_stable_pair_measure_generator]) + show "measure_space P" "measure_space Q.P" by default + show "(\(y, x). (x, y)) \ measurable Q.P P" by (rule Q.pair_sigma_algebra_swap_measurable) + show "sets (sigma E) = sets P" "space E = space P" "A \ sets (sigma E)" + using assms unfolding pair_measure_def by auto + show "range F \ sets E" "F \ space E" "\i. \ (F i) \ \" using F `A \ sets P` by (auto simp: pair_measure_def) - show "measure_space P" by default - interpret Q: pair_sigma_finite M2 M1 by default - have P: "sigma_algebra (P\ measure := ?\\)" - by (intro sigma_algebra_cong) auto - show "measure_space (P\ measure := ?\\)" - apply (rule Q.measure_space_vimage[OF P]) - apply (simp_all) - apply (rule Q.pair_sigma_algebra_swap_measurable) - proof - - fix A assume "A \ sets P" - from sets_swap[OF this] - show "(\\<^isup>+ y. M1.\ ((\x. (x, y)) -` A) \M2) = Q.\ ((\(x, y). (y, x)) -` A \ space (M2 \\<^isub>M M1))" - using sets_into_space[OF `A \ sets P`] - by (auto simp add: Q.pair_measure_alt space_pair_measure - intro!: M2.positive_integral_cong arg_cong[where f="M1.\"]) - qed fix X assume "X \ sets E" - then obtain A B where X: "X = A \ B" and AB: "A \ sets M1" "B \ sets M2" + then obtain A B where X[simp]: "X = A \ B" and AB: "A \ sets M1" "B \ sets M2" unfolding pair_measure_def pair_measure_generator_def by auto - show "\ X = ?\ X" - proof - - from AB have "?\ (A \ B) = (\\<^isup>+y. M1.\ A * indicator B y \M2)" - by (auto intro!: M2.positive_integral_cong) - with AB show ?thesis - unfolding pair_measure_times[OF AB] X - by (simp add: M2.positive_integral_cmult_indicator ac_simps) - qed + then have "(\(y, x). (x, y)) -` X \ space Q.P = B \ A" + using M1.sets_into_space M2.sets_into_space by (auto simp: space_pair_measure) + then show "\ X = Q.\ ((\(y, x). (x, y)) -` X \ space Q.P)" + using AB by (simp add: pair_measure_times Q.pair_measure_times ac_simps) qed + then show ?thesis + using sets_into_space[OF A] Q.pair_measure_alt[OF sets_swap[OF A]] + by (auto simp add: Q.pair_measure_alt space_pair_measure + intro!: M2.positive_integral_cong arg_cong[where f="M1.\"]) qed - lemma pair_sigma_algebra_sigma: assumes 1: "S1 \ (space E1)" "range S1 \ sets E1" and E1: "sets E1 \ Pow (space E1)" assumes 2: "S2 \ (space E2)" "range S2 \ sets E2" and E2: "sets E2 \ Pow (space E2)" @@ -1559,8 +1548,8 @@ lemma (in product_sigma_finite) measure_fold: assumes IJ[simp]: "I \ J = {}" and fin: "finite I" "finite J" assumes A: "A \ sets (Pi\<^isub>M (I \ J) M)" - shows "measure (Pi\<^isub>M I M \\<^isub>M Pi\<^isub>M J M) ((\(x,y). merge I x J y) -` A \ space (Pi\<^isub>M I M \\<^isub>M Pi\<^isub>M J M)) = - measure (Pi\<^isub>M (I \ J) M) A" + shows "measure (Pi\<^isub>M (I \ J) M) A = + measure (Pi\<^isub>M I M \\<^isub>M Pi\<^isub>M J M) ((\(x,y). merge I x J y) -` A \ space (Pi\<^isub>M I M \\<^isub>M Pi\<^isub>M J M))" proof - interpret I: finite_product_sigma_finite M I by default fact interpret J: finite_product_sigma_finite M J by default fact @@ -1575,10 +1564,12 @@ "\k. \i\I\J. \ i (F i k) \ \" by auto let ?F = "\k. \\<^isub>E i\I \ J. F i k" - show "P.\ (?X A) = IJ.\ A" - proof (rule measure_unique_Int_stable[where X=A]) - show "A \ sets (sigma IJ.G)" + show "IJ.\ A = P.\ (?X A)" + proof (rule measure_unique_Int_stable_vimage) + show "measure_space IJ.P" "measure_space P.P" by default + show "sets (sigma IJ.G) = sets IJ.P" "space IJ.G = space IJ.P" "A \ sets (sigma IJ.G)" using A unfolding product_algebra_def by auto + next show "Int_stable IJ.G" by (simp add: PiE_Int Int_stable_def product_algebra_def product_algebra_generator_def) @@ -1587,25 +1578,17 @@ by (simp add: image_subset_iff product_algebra_def product_algebra_generator_def) show "?F \ space IJ.G " using F(2) by simp - have "measure_space IJ.P" by fact - also have "IJ.P = \ space = space IJ.G, sets = sets (sigma IJ.G), measure = IJ.\ \" - by (simp add: product_algebra_def) - finally show "measure_space \" . - let ?P = "\ space = space IJ.G, sets = sets (sigma IJ.G), - measure = \A. P.\ (?X A)\" - have *: "?P = (sigma IJ.G \ measure := \A. P.\ (?X A) \)" - by auto - have "sigma_algebra (sigma IJ.G \ measure := \A. P.\ (?X A) \)" - by (rule IJ.sigma_algebra_cong) (auto simp: product_algebra_def) - then show "measure_space ?P" unfolding * - using measurable_merge[OF `I \ J = {}`] - by (auto intro!: P.measure_space_vimage simp add: product_algebra_def) + show "\k. IJ.\ (?F k) \ \" + using `finite I` F + by (subst IJ.measure_times) (auto simp add: setprod_\) + show "?g \ measurable P.P IJ.P" + using IJ by (rule measurable_merge) next fix A assume "A \ sets IJ.G" - then obtain F where A[simp]: "A = Pi\<^isub>E (I \ J) F" + then obtain F where A: "A = Pi\<^isub>E (I \ J) F" and F: "\i. i \ I \ J \ F i \ sets (M i)" by (auto simp: product_algebra_generator_def) - then have "?X A = (Pi\<^isub>E I F \ Pi\<^isub>E J F)" + then have X: "?X A = (Pi\<^isub>E I F \ Pi\<^isub>E J F)" using sets_into_space by (auto simp: space_pair_measure) blast+ then have "P.\ (?X A) = (\i\I. \ i (F i)) * (\i\J. \ i (F i))" using `finite J` `finite I` F @@ -1615,16 +1598,7 @@ also have "\ = IJ.\ A" using `finite J` `finite I` F unfolding A by (intro IJ.measure_times[symmetric]) auto - finally show "P.\ (?X A) = IJ.\ A" . - next - fix k - have k: "\i. i \ I \ J \ F i k \ sets (M i)" using F by auto - then have "?X (?F k) = (\\<^isub>E i\I. F i k) \ (\\<^isub>E i\J. F i k)" - using sets_into_space by (auto simp: space_pair_measure) blast+ - with k have "P.\ (?X (?F k)) = (\i\I. \ i (F i k)) * (\i\J. \ i (F i k))" - by (simp add: P.pair_measure_times I.measure_times J.measure_times) - then show "P.\ (?X (?F k)) \ \" - using `finite I` F by (simp add: setprod_\) + finally show "IJ.\ A = P.\ (?X A)" by (rule sym) qed qed @@ -1751,7 +1725,7 @@ have 1: "sigma_algebra IJ.P" by default have 2: "?M \ measurable P.P IJ.P" using measurable_merge[OF IJ] . have 3: "\A. A \ sets IJ.P \ IJ.\ A = P.\ (?M -` A \ space P.P)" - by (rule measure_fold[OF IJ fin, symmetric]) + by (rule measure_fold[OF IJ fin]) have 4: "integrable (Pi\<^isub>M (I \ J) M) f" by fact show "integrable P.P ?f" by (rule P.integral_vimage[where f=f, OF 1 2 3 4])