src/HOL/Probability/Bochner_Integration.thy
changeset 57275 0ddb5b755cdc
parent 57235 b0b9a10e4bf4
child 57418 6ab1c7cb0b8d
equal deleted inserted replaced
57274:0acfdb151e52 57275:0ddb5b755cdc
  1233         using pointwise by auto
  1233         using pointwise by auto
  1234     qed fact
  1234     qed fact
  1235   qed fact
  1235   qed fact
  1236 qed
  1236 qed
  1237 
  1237 
       
  1238 lemma integrableI_bounded_set:
       
  1239   fixes f :: "'a \<Rightarrow> 'b::{banach, second_countable_topology}"
       
  1240   assumes [measurable]: "A \<in> sets M" "f \<in> borel_measurable M"
       
  1241   assumes finite: "emeasure M A < \<infinity>"
       
  1242     and bnd: "AE x in M. x \<in> A \<longrightarrow> norm (f x) \<le> B"
       
  1243     and null: "AE x in M. x \<notin> A \<longrightarrow> f x = 0"
       
  1244   shows "integrable M f"
       
  1245 proof (rule integrableI_bounded)
       
  1246   { fix x :: 'b have "norm x \<le> B \<Longrightarrow> 0 \<le> B"
       
  1247       using norm_ge_zero[of x] by arith }
       
  1248   with bnd null have "(\<integral>\<^sup>+ x. ereal (norm (f x)) \<partial>M) \<le> (\<integral>\<^sup>+ x. ereal (max 0 B) * indicator A x \<partial>M)"
       
  1249     by (intro nn_integral_mono_AE) (auto split: split_indicator split_max)
       
  1250   also have "\<dots> < \<infinity>"
       
  1251     using finite by (subst nn_integral_cmult_indicator) (auto simp: max_def)
       
  1252   finally show "(\<integral>\<^sup>+ x. ereal (norm (f x)) \<partial>M) < \<infinity>" .
       
  1253 qed simp
       
  1254 
       
  1255 lemma integrableI_bounded_set_indicator:
       
  1256   fixes f :: "'a \<Rightarrow> 'b::{banach, second_countable_topology}"
       
  1257   shows "A \<in> sets M \<Longrightarrow> f \<in> borel_measurable M \<Longrightarrow>
       
  1258     emeasure M A < \<infinity> \<Longrightarrow> (AE x in M. x \<in> A \<longrightarrow> norm (f x) \<le> B) \<Longrightarrow>
       
  1259     integrable M (\<lambda>x. indicator A x *\<^sub>R f x)"
       
  1260   by (rule integrableI_bounded_set[where A=A]) auto
       
  1261 
  1238 lemma integrableI_nonneg:
  1262 lemma integrableI_nonneg:
  1239   fixes f :: "'a \<Rightarrow> real"
  1263   fixes f :: "'a \<Rightarrow> real"
  1240   assumes "f \<in> borel_measurable M" "AE x in M. 0 \<le> f x" "(\<integral>\<^sup>+x. f x \<partial>M) < \<infinity>"
  1264   assumes "f \<in> borel_measurable M" "AE x in M. 0 \<le> f x" "(\<integral>\<^sup>+x. f x \<partial>M) < \<infinity>"
  1241   shows "integrable M f"
  1265   shows "integrable M f"
  1242 proof -
  1266 proof -
  1265     by  (intro nn_integral_mono_AE) auto
  1289     by  (intro nn_integral_mono_AE) auto
  1266   also assume "(\<integral>\<^sup>+ x. ereal (norm (f x)) \<partial>M) < \<infinity>"
  1290   also assume "(\<integral>\<^sup>+ x. ereal (norm (f x)) \<partial>M) < \<infinity>"
  1267   finally show "(\<integral>\<^sup>+ x. ereal (norm (g x)) \<partial>M) < \<infinity>" .
  1291   finally show "(\<integral>\<^sup>+ x. ereal (norm (g x)) \<partial>M) < \<infinity>" .
  1268 qed 
  1292 qed 
  1269 
  1293 
       
  1294 lemma integrable_mult_indicator:
       
  1295   fixes f :: "'a \<Rightarrow> 'b::{banach, second_countable_topology}"
       
  1296   shows "A \<in> sets M \<Longrightarrow> integrable M f \<Longrightarrow> integrable M (\<lambda>x. indicator A x *\<^sub>R f x)"
       
  1297   by (rule integrable_bound[of M f]) (auto split: split_indicator)
       
  1298 
  1270 lemma integrable_abs[simp, intro]:
  1299 lemma integrable_abs[simp, intro]:
  1271   fixes f :: "'a \<Rightarrow> real"
  1300   fixes f :: "'a \<Rightarrow> real"
  1272   assumes [measurable]: "integrable M f" shows "integrable M (\<lambda>x. \<bar>f x\<bar>)"
  1301   assumes [measurable]: "integrable M f" shows "integrable M (\<lambda>x. \<bar>f x\<bar>)"
  1273   using assms by (rule integrable_bound) auto
  1302   using assms by (rule integrable_bound) auto
  1274 
  1303 
  1280 lemma integrable_norm_cancel:
  1309 lemma integrable_norm_cancel:
  1281   fixes f :: "'a \<Rightarrow> 'b::{banach, second_countable_topology}"
  1310   fixes f :: "'a \<Rightarrow> 'b::{banach, second_countable_topology}"
  1282   assumes [measurable]: "integrable M (\<lambda>x. norm (f x))" "f \<in> borel_measurable M" shows "integrable M f"
  1311   assumes [measurable]: "integrable M (\<lambda>x. norm (f x))" "f \<in> borel_measurable M" shows "integrable M f"
  1283   using assms by (rule integrable_bound) auto
  1312   using assms by (rule integrable_bound) auto
  1284 
  1313 
       
  1314 lemma integrable_norm_iff:
       
  1315   fixes f :: "'a \<Rightarrow> 'b::{banach, second_countable_topology}"
       
  1316   shows "f \<in> borel_measurable M \<Longrightarrow> integrable M (\<lambda>x. norm (f x)) \<longleftrightarrow> integrable M f"
       
  1317   by (auto intro: integrable_norm_cancel)
       
  1318 
  1285 lemma integrable_abs_cancel:
  1319 lemma integrable_abs_cancel:
  1286   fixes f :: "'a \<Rightarrow> real"
  1320   fixes f :: "'a \<Rightarrow> real"
  1287   assumes [measurable]: "integrable M (\<lambda>x. \<bar>f x\<bar>)" "f \<in> borel_measurable M" shows "integrable M f"
  1321   assumes [measurable]: "integrable M (\<lambda>x. \<bar>f x\<bar>)" "f \<in> borel_measurable M" shows "integrable M f"
  1288   using assms by (rule integrable_bound) auto
  1322   using assms by (rule integrable_bound) auto
       
  1323 
       
  1324 lemma integrable_abs_iff:
       
  1325   fixes f :: "'a \<Rightarrow> real"
       
  1326   shows "f \<in> borel_measurable M \<Longrightarrow> integrable M (\<lambda>x. \<bar>f x\<bar>) \<longleftrightarrow> integrable M f"
       
  1327   by (auto intro: integrable_abs_cancel)
  1289 
  1328 
  1290 lemma integrable_max[simp, intro]:
  1329 lemma integrable_max[simp, intro]:
  1291   fixes f :: "'a \<Rightarrow> real"
  1330   fixes f :: "'a \<Rightarrow> real"
  1292   assumes fg[measurable]: "integrable M f" "integrable M g"
  1331   assumes fg[measurable]: "integrable M f" "integrable M g"
  1293   shows "integrable M (\<lambda>x. max (f x) (g x))"
  1332   shows "integrable M (\<lambda>x. max (f x) (g x))"
  1327     using * by (subst not_integrable_integral_eq) (auto simp: integrable_indicator_iff)
  1366     using * by (subst not_integrable_integral_eq) (auto simp: integrable_indicator_iff)
  1328   also have "\<dots> = measure M (A \<inter> space M)"
  1367   also have "\<dots> = measure M (A \<inter> space M)"
  1329     using * by (auto simp: measure_def emeasure_notin_sets)
  1368     using * by (auto simp: measure_def emeasure_notin_sets)
  1330   finally show ?thesis .
  1369   finally show ?thesis .
  1331 qed
  1370 qed
       
  1371 
       
  1372 lemma integrable_discrete_difference:
       
  1373   fixes f :: "'a \<Rightarrow> 'b::{banach, second_countable_topology}"
       
  1374   assumes X: "countable X"
       
  1375   assumes null: "\<And>x. x \<in> X \<Longrightarrow> emeasure M {x} = 0" 
       
  1376   assumes sets: "\<And>x. x \<in> X \<Longrightarrow> {x} \<in> sets M"
       
  1377   assumes eq: "\<And>x. x \<in> space M \<Longrightarrow> x \<notin> X \<Longrightarrow> f x = g x"
       
  1378   shows "integrable M f \<longleftrightarrow> integrable M g"
       
  1379   unfolding integrable_iff_bounded
       
  1380 proof (rule conj_cong)
       
  1381   { assume "f \<in> borel_measurable M" then have "g \<in> borel_measurable M"
       
  1382       by (rule measurable_discrete_difference[where X=X]) (auto simp: assms) }
       
  1383   moreover
       
  1384   { assume "g \<in> borel_measurable M" then have "f \<in> borel_measurable M"
       
  1385       by (rule measurable_discrete_difference[where X=X]) (auto simp: assms) }
       
  1386   ultimately show "f \<in> borel_measurable M \<longleftrightarrow> g \<in> borel_measurable M" ..
       
  1387 next
       
  1388   have "AE x in M. x \<notin> X"
       
  1389     by (rule AE_discrete_difference) fact+
       
  1390   then have "(\<integral>\<^sup>+ x. norm (f x) \<partial>M) = (\<integral>\<^sup>+ x. norm (g x) \<partial>M)"
       
  1391     by (intro nn_integral_cong_AE) (auto simp: eq)
       
  1392   then show "(\<integral>\<^sup>+ x. norm (f x) \<partial>M) < \<infinity> \<longleftrightarrow> (\<integral>\<^sup>+ x. norm (g x) \<partial>M) < \<infinity>"
       
  1393     by simp
       
  1394 qed
       
  1395 
       
  1396 lemma integral_discrete_difference:
       
  1397   fixes f :: "'a \<Rightarrow> 'b::{banach, second_countable_topology}"
       
  1398   assumes X: "countable X"
       
  1399   assumes null: "\<And>x. x \<in> X \<Longrightarrow> emeasure M {x} = 0" 
       
  1400   assumes sets: "\<And>x. x \<in> X \<Longrightarrow> {x} \<in> sets M"
       
  1401   assumes eq: "\<And>x. x \<in> space M \<Longrightarrow> x \<notin> X \<Longrightarrow> f x = g x"
       
  1402   shows "integral\<^sup>L M f = integral\<^sup>L M g"
       
  1403 proof (rule integral_eq_cases)
       
  1404   show eq: "integrable M f \<longleftrightarrow> integrable M g"
       
  1405     by (rule integrable_discrete_difference[where X=X]) fact+
       
  1406 
       
  1407   assume f: "integrable M f"
       
  1408   show "integral\<^sup>L M f = integral\<^sup>L M g"
       
  1409   proof (rule integral_cong_AE)
       
  1410     show "f \<in> borel_measurable M" "g \<in> borel_measurable M"
       
  1411       using f eq by (auto intro: borel_measurable_integrable)
       
  1412 
       
  1413     have "AE x in M. x \<notin> X"
       
  1414       by (rule AE_discrete_difference) fact+
       
  1415     with AE_space show "AE x in M. f x = g x"
       
  1416       by eventually_elim fact
       
  1417   qed
       
  1418 qed
       
  1419 
       
  1420 lemma has_bochner_integral_discrete_difference:
       
  1421   fixes f :: "'a \<Rightarrow> 'b::{banach, second_countable_topology}"
       
  1422   assumes X: "countable X"
       
  1423   assumes null: "\<And>x. x \<in> X \<Longrightarrow> emeasure M {x} = 0" 
       
  1424   assumes sets: "\<And>x. x \<in> X \<Longrightarrow> {x} \<in> sets M"
       
  1425   assumes eq: "\<And>x. x \<in> space M \<Longrightarrow> x \<notin> X \<Longrightarrow> f x = g x"
       
  1426   shows "has_bochner_integral M f x \<longleftrightarrow> has_bochner_integral M g x"
       
  1427   using integrable_discrete_difference[of X M f g, OF assms]
       
  1428   using integral_discrete_difference[of X M f g, OF assms]
       
  1429   by (metis has_bochner_integral_iff)
  1332 
  1430 
  1333 lemma
  1431 lemma
  1334   fixes f :: "'a \<Rightarrow> 'b::{banach, second_countable_topology}" and w :: "'a \<Rightarrow> real"
  1432   fixes f :: "'a \<Rightarrow> 'b::{banach, second_countable_topology}" and w :: "'a \<Rightarrow> real"
  1335   assumes "f \<in> borel_measurable M" "\<And>i. s i \<in> borel_measurable M" "integrable M w"
  1433   assumes "f \<in> borel_measurable M" "\<And>i. s i \<in> borel_measurable M" "integrable M w"
  1336   assumes lim: "AE x in M. (\<lambda>i. s i x) ----> f x"
  1434   assumes lim: "AE x in M. (\<lambda>i. s i x) ----> f x"
  2186   assumes int: "integrable M X" "integrable M Y"
  2284   assumes int: "integrable M X" "integrable M Y"
  2187   assumes gt: "AE x in M. X x < Y x" "emeasure M (space M) \<noteq> 0"
  2285   assumes gt: "AE x in M. X x < Y x" "emeasure M (space M) \<noteq> 0"
  2188   shows "integral\<^sup>L M X < integral\<^sup>L M Y"
  2286   shows "integral\<^sup>L M X < integral\<^sup>L M Y"
  2189   using gt by (intro integral_less_AE[OF int, where A="space M"]) auto
  2287   using gt by (intro integral_less_AE[OF int, where A="space M"]) auto
  2190 
  2288 
  2191 lemma integrable_mult_indicator:
       
  2192   fixes f :: "'a \<Rightarrow> real"
       
  2193   shows "A \<in> sets M \<Longrightarrow> integrable M f \<Longrightarrow> integrable M (\<lambda>x. f x * indicator A x)"
       
  2194   by (rule integrable_bound[where f="\<lambda>x. \<bar>f x\<bar>"]) (auto split: split_indicator)
       
  2195 
       
  2196 lemma tendsto_integral_at_top:
  2289 lemma tendsto_integral_at_top:
  2197   fixes f :: "real \<Rightarrow> real"
  2290   fixes f :: "real \<Rightarrow> 'a::{banach, second_countable_topology}"
  2198   assumes M: "sets M = sets borel" and f[measurable]: "integrable M f"
  2291   assumes [simp]: "sets M = sets borel" and f[measurable]: "integrable M f"
  2199   shows "((\<lambda>y. \<integral> x. f x * indicator {.. y} x \<partial>M) ---> \<integral> x. f x \<partial>M) at_top"
  2292   shows "((\<lambda>y. \<integral> x. indicator {.. y} x *\<^sub>R f x \<partial>M) ---> \<integral> x. f x \<partial>M) at_top"
  2200 proof -
  2293 proof (rule tendsto_at_topI_sequentially)
  2201   have M_measure[simp]: "borel_measurable M = borel_measurable borel"
  2294   fix X :: "nat \<Rightarrow> real" assume "filterlim X at_top sequentially"
  2202     using M by (simp add: sets_eq_imp_space_eq measurable_def)
  2295   show "(\<lambda>n. \<integral>x. indicator {..X n} x *\<^sub>R f x \<partial>M) ----> integral\<^sup>L M f"
  2203   { fix f :: "real \<Rightarrow> real" assume f: "integrable M f" "\<And>x. 0 \<le> f x"
  2296   proof (rule integral_dominated_convergence)
  2204     then have [measurable]: "f \<in> borel_measurable borel"
  2297     show "integrable M (\<lambda>x. norm (f x))"
  2205       by (simp add: real_integrable_def)
  2298       by (rule integrable_norm) fact
  2206     have "((\<lambda>y. \<integral> x. f x * indicator {.. y} x \<partial>M) ---> \<integral> x. f x \<partial>M) at_top"
  2299     show "AE x in M. (\<lambda>n. indicator {..X n} x *\<^sub>R f x) ----> f x"
  2207     proof (rule tendsto_at_topI_sequentially)
  2300     proof
  2208       have int: "\<And>n. integrable M (\<lambda>x. f x * indicator {.. n} x)"
  2301       fix x
  2209         by (rule integrable_mult_indicator) (auto simp: M f)
  2302       from `filterlim X at_top sequentially` 
  2210       show "(\<lambda>n. \<integral> x. f x * indicator {..real n} x \<partial>M) ----> integral\<^sup>L M f"
  2303       have "eventually (\<lambda>n. x \<le> X n) sequentially"
  2211       proof (rule integral_dominated_convergence)
  2304         unfolding filterlim_at_top_ge[where c=x] by auto
  2212         { fix x have "eventually (\<lambda>n. f x * indicator {..real n} x = f x) sequentially"
  2305       then show "(\<lambda>n. indicator {..X n} x *\<^sub>R f x) ----> f x"
  2213             by (rule eventually_sequentiallyI[of "natceiling x"])
  2306         by (intro Lim_eventually) (auto split: split_indicator elim!: eventually_elim1)
  2214                (auto split: split_indicator simp: natceiling_le_eq) }
  2307     qed
  2215         from filterlim_cong[OF refl refl this]
  2308     fix n show "AE x in M. norm (indicator {..X n} x *\<^sub>R f x) \<le> norm (f x)"
  2216         show "AE x in M. (\<lambda>n. f x * indicator {..real n} x) ----> f x"
  2309       by (auto split: split_indicator)
  2217           by (simp add: tendsto_const)
  2310   qed auto
  2218         show "\<And>j. AE x in M. norm (f x * indicator {.. j} x) \<le> f x"
       
  2219           using f(2) by (intro AE_I2) (auto split: split_indicator)
       
  2220       qed (simp | fact)+
       
  2221       show "mono (\<lambda>y. \<integral> x. f x * indicator {..y} x \<partial>M)"
       
  2222         by (intro monoI integral_mono int) (auto split: split_indicator intro: f)
       
  2223     qed }
       
  2224   note nonneg = this
       
  2225   let ?P = "\<lambda>y. \<integral> x. max 0 (f x) * indicator {..y} x \<partial>M"
       
  2226   let ?N = "\<lambda>y. \<integral> x. max 0 (- f x) * indicator {..y} x \<partial>M"
       
  2227   let ?p = "integral\<^sup>L M (\<lambda>x. max 0 (f x))"
       
  2228   let ?n = "integral\<^sup>L M (\<lambda>x. max 0 (- f x))"
       
  2229   have "(?P ---> ?p) at_top" "(?N ---> ?n) at_top"
       
  2230     by (auto intro!: nonneg f)
       
  2231   note tendsto_diff[OF this]
       
  2232   also have "(\<lambda>y. ?P y - ?N y) = (\<lambda>y. \<integral> x. f x * indicator {..y} x \<partial>M)"
       
  2233     by (subst integral_diff[symmetric])
       
  2234        (auto intro!: integrable_mult_indicator f integral_cong
       
  2235              simp: M split: split_max)
       
  2236   also have "?p - ?n = integral\<^sup>L M f"
       
  2237     by (subst integral_diff[symmetric]) (auto intro!: f integral_cong simp: M split: split_max)
       
  2238   finally show ?thesis .
       
  2239 qed
  2311 qed
  2240 
  2312 
  2241 lemma
  2313 lemma
  2242   fixes f :: "real \<Rightarrow> real"
  2314   fixes f :: "real \<Rightarrow> real"
  2243   assumes M: "sets M = sets borel"
  2315   assumes M: "sets M = sets borel"