# HG changeset patch # User hoelzl # Date 1291296898 -3600 # Node ID 7c556a9240deef738e272b3e6e4ef1f963349a35 # Parent 688f6ff859e181f330a26d7c75bcb9efc38ae0d8 Move SUP_commute, SUP_less_iff to HOL image; Cleanup generic complete_lattice lemmas in Positive_Infinite_Real; Cleanup lemma positive_integral_alt; diff -r 688f6ff859e1 -r 7c556a9240de src/HOL/Complete_Lattice.thy --- a/src/HOL/Complete_Lattice.thy Wed Dec 01 21:03:02 2010 +0100 +++ b/src/HOL/Complete_Lattice.thy Thu Dec 02 14:34:58 2010 +0100 @@ -172,6 +172,18 @@ "(\m. m \ B \ \n\A. f n \ g m) \ (INF n:A. f n) \ (INF n:B. g n)" by (force intro!: Inf_mono simp: INFI_def) +lemma SUP_subset: "A \ B \ SUPR A f \ SUPR B f" + by (intro SUP_mono) auto + +lemma INF_subset: "A \ B \ INFI B f \ INFI A f" + by (intro INF_mono) auto + +lemma SUP_commute: "(SUP i:A. SUP j:B. f i j) = (SUP j:B. SUP i:A. f i j)" + by (iprover intro: SUP_leI le_SUPI order_trans antisym) + +lemma INF_commute: "(INF i:A. INF j:B. f i j) = (INF j:B. INF i:A. f i j)" + by (iprover intro: INF_leI le_INFI order_trans antisym) + end lemma less_Sup_iff: @@ -184,6 +196,16 @@ shows "Inf S < a \ (\x\S. x < a)" unfolding not_le[symmetric] le_Inf_iff by auto +lemma less_SUP_iff: + fixes a :: "'a::{complete_lattice,linorder}" + shows "a < (SUP i:A. f i) \ (\x\A. a < f x)" + unfolding SUPR_def less_Sup_iff by auto + +lemma INF_less_iff: + fixes a :: "'a::{complete_lattice,linorder}" + shows "(INF i:A. f i) < a \ (\x\A. f x < a)" + unfolding INFI_def Inf_less_iff by auto + subsection {* @{typ bool} and @{typ "_ \ _"} as complete lattice *} instantiation bool :: complete_lattice diff -r 688f6ff859e1 -r 7c556a9240de src/HOL/Probability/Lebesgue_Integration.thy --- a/src/HOL/Probability/Lebesgue_Integration.thy Wed Dec 01 21:03:02 2010 +0100 +++ b/src/HOL/Probability/Lebesgue_Integration.thy Thu Dec 02 14:34:58 2010 +0100 @@ -849,7 +849,7 @@ definition (in measure_space) "positive_integral f = - (SUP g : {g. simple_function g \ g \ f \ \ \ g`space M}. simple_integral g)" + SUPR {g. simple_function g \ g \ f \ \ \ g`space M} simple_integral" lemma (in measure_space) positive_integral_cong_measure: assumes "\A. A \ sets M \ \ A = \ A" @@ -883,74 +883,71 @@ by auto qed +lemma image_set_cong: + assumes A: "\x. x \ A \ \y\B. f x = g y" + assumes B: "\y. y \ B \ \x\A. g y = f x" + shows "f ` A = g ` B" + using assms by blast + lemma (in measure_space) positive_integral_alt: "positive_integral f = - (SUP g : {g. simple_function g \ g \ f}. simple_integral g)" - apply(rule order_class.antisym) unfolding positive_integral_def - apply(rule SUPR_subset) apply blast apply(rule SUPR_mono_lim) -proof safe fix u assume u:"simple_function u" and uf:"u \ f" - let ?u = "\n x. if u x = \ then Real (real (n::nat)) else u x" - have su:"\n. simple_function (?u n)" using simple_function_compose1[OF u] . - show "\b. \n. b n \ {g. simple_function g \ g \ f \ \ \ g ` space M} \ - (\n. simple_integral (b n)) ----> simple_integral u" - apply(rule_tac x="?u" in exI, safe) apply(rule su) - proof- fix n::nat have "?u n \ u" unfolding le_fun_def by auto - also note uf finally show "?u n \ f" . - let ?s = "{x \ space M. u x = \}" - show "(\n. simple_integral (?u n)) ----> simple_integral u" - proof(cases "\ ?s = 0") - case True have *:"\n. {x\space M. ?u n x \ u x} = {x\space M. u x = \}" by auto - have *:"\n. simple_integral (?u n) = simple_integral u" - apply(rule simple_integral_cong'[OF su u]) unfolding * True .. - show ?thesis unfolding * by auto - next case False note m0=this - have s:"{x \ space M. u x = \} \ sets M" using u by (auto simp: borel_measurable_simple_function) - have "\ = simple_integral (\x. \ * indicator {x\space M. u x = \} x)" - apply(subst simple_integral_mult) using s - unfolding simple_integral_indicator_only[OF s] using False by auto - also have "... \ simple_integral u" - apply (rule simple_integral_mono) - apply (rule simple_function_mult) - apply (rule simple_function_const) - apply(rule ) prefer 3 apply(subst indicator_def) - using s u by auto - finally have *:"simple_integral u = \" by auto - show ?thesis unfolding * Lim_omega_pos - proof safe case goal1 - from real_arch_simple[of "B / real (\ ?s)"] guess N0 .. note N=this - def N \ "Suc N0" have N:"real N \ B / real (\ ?s)" "N > 0" - unfolding N_def using N by auto - show ?case apply-apply(rule_tac x=N in exI,safe) - proof- case goal1 - have "Real B \ Real (real N) * \ ?s" - proof(cases "\ ?s = \") - case True thus ?thesis using `B>0` N by auto - next case False - have *:"B \ real N * real (\ ?s)" - using N(1) apply-apply(subst (asm) pos_divide_le_eq) - apply rule using m0 False by auto - show ?thesis apply(subst Real_real'[THEN sym,OF False]) - apply(subst pinfreal_times,subst if_P) defer - apply(subst pinfreal_less_eq,subst if_P) defer - using * N `B>0` by(auto intro: mult_nonneg_nonneg) - qed - also have "... \ Real (real n) * \ ?s" - apply(rule mult_right_mono) using goal1 by auto - also have "... = simple_integral (\x. Real (real n) * indicator ?s x)" - apply(subst simple_integral_mult) apply(rule simple_function_indicator[OF s]) - unfolding simple_integral_indicator_only[OF s] .. - also have "... \ simple_integral (\x. if u x = \ then Real (real n) else u x)" - apply(rule simple_integral_mono) apply(rule simple_function_mult) - apply(rule simple_function_const) - apply(rule simple_function_indicator) apply(rule s su)+ by auto - finally show ?case . - qed qed qed - fix x assume x:"\ = (if u x = \ then Real (real n) else u x)" "x \ space M" - hence "u x = \" apply-apply(rule ccontr) by auto - hence "\ = Real (real n)" using x by auto - thus False by auto + (SUP g : {g. simple_function g \ g \ f}. simple_integral g)" (is "_ = ?alt") +proof (rule antisym SUP_leI) + show "?alt \ positive_integral f" unfolding positive_integral_def + proof (safe intro!: SUP_leI) + fix g assume g: "simple_function g" "g \ f" + let ?G = "g -` {\} \ space M" + show "simple_integral g \ + SUPR {g. simple_function g \ g \ f \ \ \ g ` space M} simple_integral" + (is "simple_integral g \ SUPR ?A simple_integral") + proof cases + let ?g = "\x. indicator (space M - ?G) x * g x" + have g': "simple_function ?g" + using g by (auto intro: simple_functionD) + moreover + assume "\ ?G = 0" + then have "AE x. g x = ?g x" using g + by (intro AE_I[where N="?G"]) + (auto intro: simple_functionD simp: indicator_def) + with g(1) g' have "simple_integral g = simple_integral ?g" + by (rule simple_integral_cong_AE) + moreover have "?g \ g" by (auto simp: le_fun_def indicator_def) + from this `g \ f` have "?g \ f" by (rule order_trans) + moreover have "\ \ ?g ` space M" + by (auto simp: indicator_def split: split_if_asm) + ultimately show ?thesis by (auto intro!: le_SUPI) + next + assume "\ ?G \ 0" + then have "?G \ {}" by auto + then have "\ \ g`space M" by force + then have "space M \ {}" by auto + have "SUPR ?A simple_integral = \" + proof (intro SUP_\[THEN iffD2] allI impI) + fix x assume "x < \" + then guess n unfolding less_\_Ex_of_nat .. note n = this + then have "0 < n" by (intro neq0_conv[THEN iffD1] notI) simp + let ?g = "\x. (of_nat n / (if \ ?G = \ then 1 else \ ?G)) * indicator ?G x" + show "\i\?A. x < simple_integral i" + proof (intro bexI impI CollectI conjI) + show "simple_function ?g" using g + by (auto intro!: simple_functionD simple_function_add) + have "?g \ g" by (auto simp: le_fun_def indicator_def) + from this g(2) show "?g \ f" by (rule order_trans) + show "\ \ ?g ` space M" + using `\ ?G \ 0` by (auto simp: indicator_def split: split_if_asm) + have "x < (of_nat n / (if \ ?G = \ then 1 else \ ?G)) * \ ?G" + using n `\ ?G \ 0` `0 < n` + by (auto simp: pinfreal_noteq_omega_Ex field_simps) + also have "\ = simple_integral ?g" using g `space M \ {}` + by (subst simple_integral_indicator) + (auto simp: image_constant ac_simps dest: simple_functionD) + finally show "x < simple_integral ?g" . + qed + qed + then show ?thesis by simp + qed qed -qed +qed (auto intro!: SUP_subset simp: positive_integral_def) lemma (in measure_space) positive_integral_cong: assumes "\x. x \ space M \ f x = g x" @@ -1025,12 +1022,6 @@ shows "positive_integral u \ positive_integral v" using mono by (auto intro!: AE_cong positive_integral_mono_AE) -lemma image_set_cong: - assumes A: "\x. x \ A \ \y\B. f x = g y" - assumes B: "\y. y \ B \ \x\A. g y = f x" - shows "f ` A = g ` B" - using assms by blast - lemma (in measure_space) positive_integral_vimage: fixes g :: "'a \ pinfreal" and f :: "'d \ 'a" assumes f: "bij_betw f S (space M)" @@ -1229,6 +1220,7 @@ using assms by (simp cong: measurable_cong) moreover have iso: "rf \ ru" using assms unfolding rf_def ru_def unfolding isoton_def SUPR_fun_expand le_fun_def fun_eq_iff + using SUP_const[OF UNIV_not_empty] by (auto simp: restrict_def le_fun_def SUPR_fun_expand fun_eq_iff) ultimately have "positive_integral ru \ (SUP i. positive_integral (rf i))" unfolding positive_integral_def[of ru] diff -r 688f6ff859e1 -r 7c556a9240de src/HOL/Probability/Positive_Infinite_Real.thy --- a/src/HOL/Probability/Positive_Infinite_Real.thy Wed Dec 01 21:03:02 2010 +0100 +++ b/src/HOL/Probability/Positive_Infinite_Real.thy Thu Dec 02 14:34:58 2010 +0100 @@ -6,57 +6,6 @@ imports Complex_Main Nat_Bijection Multivariate_Analysis begin -lemma (in complete_lattice) SUPR_upper: - "x \ A \ f x \ SUPR A f" - unfolding SUPR_def apply(rule Sup_upper) by auto - -lemma (in complete_lattice) SUPR_subset: - assumes "A \ B" shows "SUPR A f \ SUPR B f" - apply(rule SUP_leI) apply(rule SUPR_upper) using assms by auto - -lemma (in complete_lattice) SUPR_mono: - assumes "\a\A. \b\B. f b \ f a" - shows "SUPR A f \ SUPR B f" - unfolding SUPR_def apply(rule Sup_mono) - using assms by auto - -lemma (in complete_lattice) SUP_pair: - "(SUP i:A. SUP j:B. f i j) = (SUP p:A\B. (\ (i, j). f i j) p)" (is "?l = ?r") -proof (intro antisym SUP_leI) - fix i j assume "i \ A" "j \ B" - then have "(case (i,j) of (i,j) \ f i j) \ ?r" - by (intro SUPR_upper) auto - then show "f i j \ ?r" by auto -next - fix p assume "p \ A \ B" - then obtain i j where "p = (i,j)" "i \ A" "j \ B" by auto - have "f i j \ (SUP j:B. f i j)" using `j \ B` by (intro SUPR_upper) - also have "(SUP j:B. f i j) \ ?l" using `i \ A` by (intro SUPR_upper) - finally show "(case p of (i, j) \ f i j) \ ?l" using `p = (i,j)` by simp -qed - -lemma (in complete_lattice) SUP_surj_compose: - assumes *: "f`A = B" shows "SUPR A (g \ f) = SUPR B g" - unfolding SUPR_def unfolding *[symmetric] - by (simp add: image_compose) - -lemma (in complete_lattice) SUP_swap: - "(SUP i:A. SUP j:B. f i j) = (SUP j:B. SUP i:A. f i j)" -proof - - have *: "(\(i,j). (j,i)) ` (B \ A) = A \ B" by auto - show ?thesis - unfolding SUP_pair SUP_surj_compose[symmetric, OF *] - by (auto intro!: arg_cong[where f=Sup] image_eqI simp: comp_def SUPR_def) -qed - -lemma range_const[simp]: "range (\x. c) = {c}" by auto - -lemma (in complete_lattice) SUPR_const[simp]: "(SUP i. c) = c" - unfolding SUPR_def by simp - -lemma (in complete_lattice) INFI_const[simp]: "(INF i. c) = c" - unfolding INFI_def by simp - lemma (in complete_lattice) Sup_start: assumes *: "\x. f x \ f 0" shows "(SUP n. f n) = f 0" @@ -137,6 +86,26 @@ ultimately show ?thesis by simp qed +lemma (in complete_lattice) lim_INF_le_lim_SUP: + fixes f :: "nat \ 'a" + shows "(SUP n. INF m. f (n + m)) \ (INF n. SUP m. f (n + m))" +proof (rule SUP_leI, rule le_INFI) + fix i j show "(INF m. f (i + m)) \ (SUP m. f (j + m))" + proof (cases rule: le_cases) + assume "i \ j" + have "(INF m. f (i + m)) \ f (i + (j - i))" by (rule INF_leI) simp + also have "\ = f (j + 0)" using `i \ j` by auto + also have "\ \ (SUP m. f (j + m))" by (rule le_SUPI) simp + finally show ?thesis . + next + assume "j \ i" + have "(INF m. f (i + m)) \ f (i + 0)" by (rule INF_leI) simp + also have "\ = f (j + (i - j))" using `j \ i` by auto + also have "\ \ (SUP m. f (j + m))" by (rule le_SUPI) simp + finally show ?thesis . + qed +qed + text {* We introduce the the positive real numbers as needed for measure theory. @@ -882,11 +851,6 @@ qed simp qed simp -lemma less_SUP_iff: - fixes a :: "'a::{complete_lattice,linorder}" - shows "(a < (SUP i:A. f i)) \ (\x\A. a < f x)" - unfolding SUPR_def less_Sup_iff by auto - lemma SUP_\: "(SUP i:A. f i) = \ \ (\x<\. \i\A. x < f i)" proof assume *: "(SUP i:A. f i) = \" @@ -1320,7 +1284,6 @@ have [intro, simp]: "\A. inj_on f A" using `bij f` unfolding bij_def by (auto intro: subset_inj_on) have f[intro, simp]: "\x. f (inv f x) = x" using `bij f` unfolding bij_def by (auto intro: surj_f_inv_f) - show ?thesis proof (rule psuminf_equality) fix n @@ -1345,49 +1308,6 @@ qed qed -lemma psuminf_2dimen: - fixes f:: "nat * nat \ pinfreal" - assumes fsums: "\m. g m = (\\<^isub>\ n. f (m,n))" - shows "psuminf (f \ prod_decode) = psuminf g" -proof (rule psuminf_equality) - fix n :: nat - let ?P = "prod_decode ` {.. prod_decode) {.. \ setsum f ({..Max (fst ` ?P)} \ {..Max (snd ` ?P)})" - proof (safe intro!: setsum_mono3 Max_ge image_eqI) - fix a b x assume "(a, b) = prod_decode x" - from this[symmetric] show "a = fst (prod_decode x)" "b = snd (prod_decode x)" - by simp_all - qed simp_all - also have "\ = (\m\Max (fst ` ?P). (\n\Max (snd ` ?P). f (m,n)))" - unfolding setsum_cartesian_product by simp - also have "\ \ (\m\Max (fst ` ?P). g m)" - by (auto intro!: setsum_mono psuminf_upper simp del: setsum_lessThan_Suc - simp: fsums lessThan_Suc_atMost[symmetric]) - also have "\ \ psuminf g" - by (auto intro!: psuminf_upper simp del: setsum_lessThan_Suc - simp: lessThan_Suc_atMost[symmetric]) - finally show "setsum (f \ prod_decode) {.. psuminf g" . -next - fix y assume *: "\n. setsum (f \ prod_decode) {.. y" - have g: "g = (\m. \\<^isub>\ n. f (m,n))" unfolding fsums[symmetric] .. - show "psuminf g \ y" unfolding g - proof (rule psuminf_bound, unfold setsum_pinfsum[symmetric], safe intro!: psuminf_bound) - fix N M :: nat - let ?P = "{.. {..nm (\(m, n)\?P. f (m, n))" - unfolding setsum_commute[of _ _ "{.. \ (\(m,n)\(prod_decode ` {..?M}). f (m, n))" - by (auto intro!: setsum_mono3 image_eqI[where f=prod_decode, OF prod_encode_inverse[symmetric]]) - also have "\ \ y" using *[of "Suc ?M"] - by (simp add: lessThan_Suc_atMost[symmetric] setsum_reindex - inj_prod_decode del: setsum_lessThan_Suc) - finally show "(\nm y" . - qed -qed - lemma pinfreal_mult_less_right: assumes "b * a < c * a" "0 < a" "a < \" shows "b < c" @@ -1474,7 +1394,7 @@ show ?thesis unfolding psuminf_def unfolding * - apply (subst SUP_swap) .. + apply (subst SUP_commute) .. qed lemma psuminf_commute: @@ -1484,7 +1404,7 @@ apply (subst SUPR_pinfreal_setsum) by auto also have "\ = (SUP m n. \ j < m. \ i < n. f i j)" - apply (subst SUP_swap) + apply (subst SUP_commute) apply (subst setsum_commute) by auto also have "\ = (SUP m. \ j < m. SUP n. \ i < n. f i j)" @@ -1494,6 +1414,49 @@ unfolding psuminf_def by auto qed +lemma psuminf_2dimen: + fixes f:: "nat * nat \ pinfreal" + assumes fsums: "\m. g m = (\\<^isub>\ n. f (m,n))" + shows "psuminf (f \ prod_decode) = psuminf g" +proof (rule psuminf_equality) + fix n :: nat + let ?P = "prod_decode ` {.. prod_decode) {.. \ setsum f ({..Max (fst ` ?P)} \ {..Max (snd ` ?P)})" + proof (safe intro!: setsum_mono3 Max_ge image_eqI) + fix a b x assume "(a, b) = prod_decode x" + from this[symmetric] show "a = fst (prod_decode x)" "b = snd (prod_decode x)" + by simp_all + qed simp_all + also have "\ = (\m\Max (fst ` ?P). (\n\Max (snd ` ?P). f (m,n)))" + unfolding setsum_cartesian_product by simp + also have "\ \ (\m\Max (fst ` ?P). g m)" + by (auto intro!: setsum_mono psuminf_upper simp del: setsum_lessThan_Suc + simp: fsums lessThan_Suc_atMost[symmetric]) + also have "\ \ psuminf g" + by (auto intro!: psuminf_upper simp del: setsum_lessThan_Suc + simp: lessThan_Suc_atMost[symmetric]) + finally show "setsum (f \ prod_decode) {.. psuminf g" . +next + fix y assume *: "\n. setsum (f \ prod_decode) {.. y" + have g: "g = (\m. \\<^isub>\ n. f (m,n))" unfolding fsums[symmetric] .. + show "psuminf g \ y" unfolding g + proof (rule psuminf_bound, unfold setsum_pinfsum[symmetric], safe intro!: psuminf_bound) + fix N M :: nat + let ?P = "{.. {..nm (\(m, n)\?P. f (m, n))" + unfolding setsum_commute[of _ _ "{.. \ (\(m,n)\(prod_decode ` {..?M}). f (m, n))" + by (auto intro!: setsum_mono3 image_eqI[where f=prod_decode, OF prod_encode_inverse[symmetric]]) + also have "\ \ y" using *[of "Suc ?M"] + by (simp add: lessThan_Suc_atMost[symmetric] setsum_reindex + inj_prod_decode del: setsum_lessThan_Suc) + finally show "(\nm y" . + qed +qed + lemma Real_max: assumes "x \ 0" "y \ 0" shows "Real (max x y) = max (Real x) (Real y)" @@ -2462,26 +2425,6 @@ shows "a \ a - b \ a \ 0 \ a \ \ \ b = 0" by (cases a, cases b, auto split: split_if_asm) -lemma lim_INF_le_lim_SUP: - fixes f :: "nat \ pinfreal" - shows "(SUP n. INF m. f (n + m)) \ (INF n. SUP m. f (n + m))" -proof (rule complete_lattice_class.SUP_leI, rule complete_lattice_class.le_INFI) - fix i j show "(INF m. f (i + m)) \ (SUP m. f (j + m))" - proof (cases rule: le_cases) - assume "i \ j" - have "(INF m. f (i + m)) \ f (i + (j - i))" by (rule INF_leI) simp - also have "\ = f (j + 0)" using `i \ j` by auto - also have "\ \ (SUP m. f (j + m))" by (rule le_SUPI) simp - finally show ?thesis . - next - assume "j \ i" - have "(INF m. f (i + m)) \ f (i + 0)" by (rule INF_leI) simp - also have "\ = f (j + (i - j))" using `j \ i` by auto - also have "\ \ (SUP m. f (j + m))" by (rule le_SUPI) simp - finally show ?thesis . - qed -qed - lemma lim_INF_eq_lim_SUP: fixes X :: "nat \ real" assumes "\i. 0 \ X i" and "0 \ x" diff -r 688f6ff859e1 -r 7c556a9240de src/HOL/Probability/Product_Measure.thy --- a/src/HOL/Probability/Product_Measure.thy Wed Dec 01 21:03:02 2010 +0100 +++ b/src/HOL/Probability/Product_Measure.thy Thu Dec 02 14:34:58 2010 +0100 @@ -865,7 +865,7 @@ lemma (in finite_product_sigma_algebra) P_empty: "I = {} \ P = \ space = {\k. undefined}, sets = { {}, {\k. undefined} }\" - unfolding product_algebra_def by (simp add: sigma_def) + unfolding product_algebra_def by (simp add: sigma_def image_constant) lemma (in finite_product_sigma_algebra) in_P[simp, intro]: "\ \i. i \ I \ A i \ sets (M i) \ \ Pi\<^isub>E I A \ sets P" @@ -1258,7 +1258,7 @@ by (auto intro!: exI[of _ "\A. if A = {} then 0 else 1"] sigma_algebra_sigma sigma_algebra.finite_additivity_sufficient simp add: positive_def additive_def sets_sigma sigma_finite_measure_def - sigma_finite_measure_axioms_def) + sigma_finite_measure_axioms_def image_constant) next case (insert i I) interpret finite_product_sigma_finite M \ I by default fact diff -r 688f6ff859e1 -r 7c556a9240de src/HOL/Set.thy --- a/src/HOL/Set.thy Wed Dec 01 21:03:02 2010 +0100 +++ b/src/HOL/Set.thy Thu Dec 02 14:34:58 2010 +0100 @@ -882,7 +882,6 @@ lemma rangeE [elim?]: "b \ range (\x. f x) ==> (!!x. b = f x ==> P) ==> P" by blast - subsubsection {* Some rules with @{text "if"} *} text{* Elimination of @{text"{x. \ & x=t & \}"}. *}