lebesgueScript.sml
1(* ------------------------------------------------------------------------- *)
2(* Lebesgue Integrals defined on the extended real numbers [2] *)
3(* Authors: Tarek Mhamdi, Osman Hasan, Sofiene Tahar *)
4(* HVG Group, Concordia University, Montreal *)
5(* ------------------------------------------------------------------------- *)
6(* Based on the work of Aaron Coble [7] (2010), Cambridge University *)
7(* ------------------------------------------------------------------------- *)
8(* Updated by Chun Tian (2019 - 2025) using some materials from: *)
9(* *)
10(* Lebesgue Measure Theory (lebesgue_measure_hvgScript.sml) *)
11(* *)
12(* (c) Copyright 2015, *)
13(* Muhammad Qasim, *)
14(* Osman Hasan, *)
15(* Hardware Verification Group, *)
16(* Concordia University *)
17(* *)
18(* Contact: <m_qasi@ece.concordia.ca> *)
19(* *)
20(* Note: The original work was inspired by Isabelle/HOL *)
21(* ------------------------------------------------------------------------- *)
22
23Theory lebesgue
24Ancestors
25 arithmetic prim_rec option pair combin pred_set res_quan list
26 real seq transc real_sigma cardinal iterate extreal_base
27 extreal sigma_algebra measure borel real_topology
28Libs
29 pred_setLib numLib res_quanTools realLib RealArith jrhUtils
30 hurdUtils
31
32val ASM_ARITH_TAC = rpt (POP_ASSUM MP_TAC) >> ARITH_TAC; (* numLib *)
33val DISC_RW_KILL = DISCH_TAC >> ONCE_ASM_REWRITE_TAC [] >> POP_ASSUM K_TAC;
34fun METIS ths tm = prove (tm, METIS_TAC ths);
35
36val _ = intLib.deprecate_int ();
37val _ = ratLib.deprecate_rat ();
38
39(* ************************************************************************* *)
40(* Basic Definitions *)
41(* ************************************************************************* *)
42
43(* This defines a simple function ‘f’ in measurable space m by (s,a,x):
44
45 s is a (finite) set of indices,
46 a_i (each i IN s) are mutually disjoint measurable sets in m,
47 x_i are (normal) reals indicating the "height" of each a(i).
48
49 Then `f(t) = SIGMA (\i. Normal (x i) * indicator_fn (a i) t) s` is a simple function.
50
51 BIGUNION and DISJOINT indicate that this is a standard representation.
52
53 NOTE: changed from `!t. 0 <= f t` to `!t. t IN m_space m ==> 0 <= f t`
54 *)
55Definition pos_simple_fn_def :
56 pos_simple_fn m f (s :num set) (a :num -> 'a set) (x :num -> real) =
57 ((!t. t IN m_space m ==> 0 <= f t) /\ (* was: !t. 0 <= f t *)
58 (!t. t IN m_space m ==>
59 (f t = SIGMA (\i. Normal (x i) * indicator_fn (a i) t) s)) /\
60 (!i. i IN s ==> a i IN measurable_sets m) /\
61 FINITE s /\ (!i. i IN s ==> 0 <= x i) /\
62 (!i j. i IN s /\ j IN s /\ (i <> j) ==> DISJOINT (a i) (a j)) /\
63 (BIGUNION (IMAGE a s) = m_space m))
64End
65
66(* The integral of a positive simple function: s is a set of indices,
67 a(n) is a sequence of disjoint sets, x(n) is a sequence of reals.
68
69 old definition: Normal (SIGMA (\i:num. (x i) * (measure m (a i))) s)
70 *)
71Definition pos_simple_fn_integral_def :
72 pos_simple_fn_integral (m :'a m_space)
73 (s :num set) (a :num -> 'a set) (x :num -> real) =
74 SIGMA (\i:num. Normal (x i) * (measure m (a i))) s
75End
76
77(* ‘psfs m f’ is the set of all positive simple functions equivalent to f *)
78Definition psfs_def :
79 psfs m f = {(s,a,x) | pos_simple_fn m f s a x}
80End
81
82(* `psfis m f ` is the set of integrals of positive simple functions equivalent to f *)
83Definition psfis_def:
84 psfis m f = IMAGE (\(s,a,x). pos_simple_fn_integral m s a x) (psfs m f)
85End
86
87(* the integral of arbitrary positive function is the sup of integrals of all
88 positive simple functions smaller than f,
89
90 cf. "nnfis_def" in (old) real_lebesgueScript.sml
91
92 changed from `!x. g x <= fx` to `!x. x IN m_space m ==> g x <= f x`
93 *)
94Definition pos_fn_integral_def:
95 pos_fn_integral m f =
96 sup {r | ?g. r IN psfis m g /\ !x. x IN m_space m ==> g x <= f x}
97End
98
99(* INTEGRAL^+ *)
100val _ = Unicode.unicode_version {u = UTF8.chr 0x222B ^ Unicode.UChar.sup_plus,
101 tmnm = "pos_fn_integral"};
102
103val _ = TeX_notation {hol = UTF8.chr 0x222B ^ Unicode.UChar.sup_plus,
104 TeX = ("\\HOLTokenIntegralPlus{}", 1)};
105
106val _ = hide "integral"; (* possibly integrationTheory.integral_def *)
107Definition integral_def :
108 integral m f = pos_fn_integral m (fn_plus f) - pos_fn_integral m (fn_minus f)
109End
110
111(* INTEGRAL *)
112val _ = Unicode.unicode_version {u = UTF8.chr 0x222B, tmnm = "integral"};
113val _ = TeX_notation {hol = UTF8.chr 0x222B, TeX = ("\\HOLTokenIntegral{}", 1)};
114
115(* Lebesgue integrable = the integral is specified (ie. no `PosInf - PosInf`) *)
116val _ = hide "integrable";
117
118(* NOTE: all integrable functions form the set ‘L1_space m’, i.e. set of integrable
119 measurable functions from arbitrary measure space ‘m’ to Borel measurable
120 space generated by extended reals. (cf. martingaleTheory.lp_space_def)
121 *)
122Definition integrable_def :
123 integrable m f =
124 (f IN measurable (m_space m,measurable_sets m) Borel /\
125 pos_fn_integral m (fn_plus f) <> PosInf /\
126 pos_fn_integral m (fn_minus f) <> PosInf)
127End
128
129Definition finite_space_integral_def :
130 finite_space_integral m f =
131 SIGMA (\r. r * measure m (PREIMAGE f {r} INTER m_space m)) (IMAGE f (m_space m))
132End
133
134(* The measure with density (function) f with respect to m, see [1, p.86-87]
135 from HVG's lebesgue_measureScript.sml, simplified.
136
137 The use of `density`, e.g. in RN_deriv_def, should guarantee that:
138
139 1) the involved function `f` is (AE) non-negative in measure space `m`.
140 2) the resulting `f * m` is only called on `s IN measurable_sets m`.
141 *)
142Definition density_measure_def: (* or `f * m` *)
143 density_measure m f = \s. pos_fn_integral m (\x. f x * indicator_fn s x)
144End
145
146Definition density_def: (* was: density *)
147 density m f = (m_space m, measurable_sets m, density_measure m f)
148End
149
150(* |- !m f.
151 density m f =
152 (m_space m,measurable_sets m,
153 (\s. pos_fn_integral m (\x. f x * indicator_fn s x)))
154 *)
155Theorem density = REWRITE_RULE [density_measure_def] density_def
156
157(* `v = density m f` is denoted by `v = f * m` (cf. "RN_deriv_def" below)
158
159 The idea is to syntactically have (`*` is not commutative here):
160
161 `(f * m = v) <=> (f = v / m)` or `v / m * m = v`
162 *)
163Overload "*" = ``\f m. density_measure m f``
164
165(* |- !m f s. (f * m) s = pos_fn_integral m (\x. f x * indicator_fn s x) *)
166Theorem density_measure = SIMP_RULE std_ss [FUN_EQ_THM] density_measure_def
167
168(* Theorem 7.6 [1, p.55]: let M, N be measurable spaces and f : M -> N be an
169 M/N-measurable map. For every `u` on `(m_space M,measurable_sets M)`,
170
171 u' = \A. u (PREIMAGE f A INTER m_space M) (A IN measurable_sets N)
172
173 defines a measure on (m_space N,measurable_sets N).
174
175 Definition 7.7 [1, p.55]: The measure u' of Theorem 7.6 is called the
176 "image measure" or "push forward" of `u` under f.
177
178 cf. density_def, probabilityTheory.distribution_def (an application)
179 *)
180Definition distr_def:
181 distr m f = \s. measure m (PREIMAGE f s INTER m_space m)
182End
183
184(* unused for now:
185val diff_measure_space_def = Define
186 `diff_measure_space m v =
187 (m_space m, measurable_sets m, (\s. measure m s - v s))`;
188
189val _ = overload_on ("-", ``diff_measure_space``);
190 *)
191
192(*****************************************************************************)
193
194Theorem IN_MEASURABLE_BOREL_POS_SIMPLE_FN :
195 !m f. measure_space m /\ (?s a x. pos_simple_fn m f s a x) ==>
196 f IN measurable (m_space m,measurable_sets m) Borel
197Proof
198 RW_TAC std_ss [pos_simple_fn_def]
199 >> `!i. i IN s ==> indicator_fn (a i) IN measurable (m_space m,measurable_sets m) Borel`
200 by METIS_TAC [IN_MEASURABLE_BOREL_INDICATOR, measurable_sets_def, subsets_def,
201 m_space_def, measure_space_def]
202 >> `!i x. i IN s ==> (\t. Normal (x i) * indicator_fn (a i) t) IN
203 measurable (m_space m, measurable_sets m) Borel`
204 by (qx_genl_tac [`i`, `y`] >> DISCH_TAC \\
205 MATCH_MP_TAC IN_MEASURABLE_BOREL_CMUL \\
206 qexistsl_tac [`indicator_fn (a i)`, `y i`] \\
207 RW_TAC std_ss [] \\
208 FULL_SIMP_TAC std_ss [measure_space_def])
209 >> MATCH_MP_TAC (INST_TYPE [beta |-> ``:num``] IN_MEASURABLE_BOREL_SUM)
210 >> qexistsl_tac [`(\i. (\t. Normal (x i) * indicator_fn (a i) t))`, `s`]
211 >> RW_TAC std_ss [space_def]
212 >- FULL_SIMP_TAC std_ss [measure_space_def]
213 >> RW_TAC real_ss [indicator_fn_def, mul_rzero, mul_rone]
214 >> RW_TAC std_ss [extreal_of_num_def]
215QED
216
217(* z/z' c is the standard representation of f/g *)
218Theorem pos_simple_fn_integral_present :
219 !m f (s :num->bool) a x
220 g (s':num->bool) b y.
221 measure_space m /\ pos_simple_fn m f s a x /\ pos_simple_fn m g s' b y ==>
222 ?z z' c (k:num->bool).
223 (!t. t IN m_space m ==>
224 f t = SIGMA (\i. Normal (z i) * indicator_fn (c i) t) k) /\
225 (!t. t IN m_space m ==>
226 g t = SIGMA (\i. Normal (z' i) * indicator_fn (c i) t) k) /\
227 (pos_simple_fn_integral m s a x = pos_simple_fn_integral m k c z) /\
228 (pos_simple_fn_integral m s' b y = pos_simple_fn_integral m k c z') /\
229 FINITE k /\ (!i. i IN k ==> 0 <= z i) /\ (!i. i IN k ==> 0 <= z' i) /\
230 (!i j. i IN k /\ j IN k /\ i <> j ==> DISJOINT (c i) (c j)) /\
231 (!i. i IN k ==> c i IN measurable_sets m) /\
232 (BIGUNION (IMAGE c k) = m_space m)
233Proof
234 rpt STRIP_TAC
235 >> `?p n. BIJ p (count n) (s CROSS s')`
236 by FULL_SIMP_TAC std_ss [GSYM FINITE_BIJ_COUNT, pos_simple_fn_def,
237 FINITE_CROSS]
238 >> `?p'. BIJ p' (s CROSS s') (count n) /\
239 (!x. x IN (count n) ==> ((p' o p) x = x)) /\
240 (!x. x IN (s CROSS s') ==> ((p o p') x = x))`
241 by (MATCH_MP_TAC BIJ_INV >> RW_TAC std_ss [])
242 >> qexistsl_tac [`x o FST o p`, `y o SND o p`,
243 `(\(i,j). a i INTER b j) o p`, `IMAGE p' (s CROSS s')`]
244 >> Q.ABBREV_TAC `G = IMAGE (\i j. p' (i,j)) s'`
245 >> Q.ABBREV_TAC `H = IMAGE (\j i. p' (i,j)) s`
246 >> CONJ_TAC
247 >- (RW_TAC std_ss [FUN_EQ_THM] \\
248 FULL_SIMP_TAC std_ss [pos_simple_fn_def] \\
249 `!i. i IN s ==> (\i. Normal (x i) * indicator_fn (a i) t) i <> NegInf`
250 by METIS_TAC [indicator_fn_def, mul_rzero, mul_rone, extreal_not_infty,
251 extreal_of_num_def] \\
252 FULL_SIMP_TAC std_ss [(Once o UNDISCH o Q.ISPEC `(s :num -> bool)`)
253 EXTREAL_SUM_IMAGE_IN_IF] \\
254 `(\x'. (if x' IN s then (\i. Normal (x i) * indicator_fn (a i) t) x' else 0)) =
255 (\x'. (if x' IN s then (\i. Normal (x i) *
256 SIGMA (\j. indicator_fn (a i INTER b j) t) s') x' else 0))`
257 by (RW_TAC std_ss [FUN_EQ_THM] \\
258 RW_TAC std_ss [] \\
259 FULL_SIMP_TAC std_ss [GSYM AND_IMP_INTRO] \\
260 (MP_TAC o Q.ISPEC `(a :num -> 'a set) (x' :num)` o
261 UNDISCH_ALL o REWRITE_RULE [GSYM AND_IMP_INTRO] o
262 Q.ISPECL [`(s' :num -> bool)`, `m_space (m: 'a m_space)`,
263 `(b :num -> 'a set)`]) indicator_fn_split \\
264 Q.PAT_X_ASSUM `!i. i IN s ==> (a :num -> 'a set) i IN measurable_sets m`
265 (ASSUME_TAC o UNDISCH o Q.SPEC `x'`) \\
266 `!a m. measure_space m /\ a IN measurable_sets m ==> a SUBSET m_space m`
267 by RW_TAC std_ss [measure_space_def, sigma_algebra_def, algebra_def,
268 subset_class_def, subsets_def, space_def] \\
269 POP_ASSUM (ASSUME_TAC o UNDISCH_ALL o REWRITE_RULE [GSYM AND_IMP_INTRO] o
270 Q.ISPECL [`(a :num -> 'a set) (x' :num)`, `(m :'a m_space)`]) \\
271 ASM_SIMP_TAC std_ss []) \\
272 FULL_SIMP_TAC std_ss [] \\
273 `!i j. j IN s' ==> (\j. indicator_fn (a i INTER b j) t) j <> NegInf`
274 by METIS_TAC [extreal_of_num_def, extreal_not_infty, indicator_fn_def] \\
275 `!(x':num) (i:num). Normal (x i) * SIGMA (\j. indicator_fn (a i INTER b j) t) s' =
276 SIGMA (\j. Normal (x i) * indicator_fn (a i INTER b j) t) s'`
277 by (RW_TAC std_ss [] \\
278 (MP_TAC o UNDISCH o Q.SPEC `s'` o GSYM o INST_TYPE [alpha |-> ``:num``])
279 EXTREAL_SUM_IMAGE_CMUL \\
280 FULL_SIMP_TAC std_ss []) >> POP_ORW \\
281 `FINITE (s CROSS s')` by RW_TAC std_ss [FINITE_CROSS] \\
282 `INJ p' (s CROSS s') (IMAGE p' (s CROSS s'))`
283 by METIS_TAC [INJ_IMAGE_BIJ, BIJ_DEF] \\
284 (MP_TAC o Q.SPEC `\i:num. Normal (x (FST (p i))) *
285 indicator_fn ((\(i:num,j:num). a i INTER b j) (p i)) t`
286 o UNDISCH o Q.SPEC `p'` o UNDISCH o Q.SPEC `s CROSS s'`
287 o INST_TYPE [alpha |-> ``:num#num``, beta |-> ``:num``])
288 EXTREAL_SUM_IMAGE_IMAGE \\
289 `!x'. Normal (x (FST (p x'))) *
290 indicator_fn ((\(i,j). a i INTER b j) (p x')) t <> NegInf`
291 by METIS_TAC [indicator_fn_def, mul_rzero, mul_rone, extreal_not_infty,
292 extreal_of_num_def] \\
293 RW_TAC std_ss [] \\
294 `!x'. ((\i. Normal (x (FST (p i))) *
295 indicator_fn ((\(i,j). a i INTER b j) (p i)) t) o p') x' <> NegInf`
296 by (RW_TAC std_ss [indicator_fn_def, mul_rzero, mul_rone] \\
297 METIS_TAC [extreal_not_infty, extreal_of_num_def]) \\
298 (MP_TAC o Q.SPEC `((\i. Normal (x (FST ((p :num -> num # num) i))) *
299 indicator_fn ((\(i,j). a i INTER b j) (p i)) t) o p')`
300 o UNDISCH o Q.ISPEC `(s :num set) CROSS (s' :num set)`)
301 EXTREAL_SUM_IMAGE_IN_IF \\
302 RW_TAC std_ss [] \\
303 `(\x'. if x' IN s CROSS s' then
304 Normal (x (FST x')) * indicator_fn ((\(i,j). a i INTER b j) x') t
305 else 0) =
306 (\x'. if x' IN s CROSS s' then
307 (\x'. Normal (x (FST x')) *
308 indicator_fn ((\(i,j). a i INTER b j) x') t) x'
309 else 0)` by METIS_TAC [] >> POP_ORW \\
310 `!x'. (\x'. Normal (x (FST x')) *
311 indicator_fn ((\(i,j). a i INTER b j) x') t) x' <> NegInf`
312 by (RW_TAC std_ss [indicator_fn_def, mul_rzero, mul_rone] \\
313 METIS_TAC [extreal_not_infty, extreal_of_num_def]) \\
314 (MP_TAC o Q.SPEC `(\x'. Normal (x (FST x')) *
315 indicator_fn ((\(i,j). a i INTER b j) x') t)`
316 o UNDISCH o Q.ISPEC `(s :num set) CROSS (s' :num set)`)
317 (GSYM EXTREAL_SUM_IMAGE_IN_IF) \\
318 RW_TAC std_ss [] \\
319 `!x'. NegInf <> (\i:num. SIGMA (\j:num. Normal (x i) *
320 indicator_fn (a i INTER b j) t) s') x'`
321 by (RW_TAC std_ss [] \\
322 `!j. (\j. Normal (x x') * indicator_fn (a x' INTER b j) t) j <> NegInf`
323 by (RW_TAC std_ss [indicator_fn_def, mul_rzero, mul_rone] \\
324 METIS_TAC [extreal_of_num_def, extreal_not_infty]) \\
325 FULL_SIMP_TAC std_ss [EXTREAL_SUM_IMAGE_NOT_INFTY]) \\
326 (MP_TAC o Q.SPEC `(\i:num. SIGMA (\j:num. Normal (x i) *
327 indicator_fn (a i INTER b j) t) s')`
328 o UNDISCH o Q.ISPEC `(s :num -> bool)`) (GSYM EXTREAL_SUM_IMAGE_IN_IF) \\
329 RW_TAC std_ss [] \\
330 (MP_TAC o Q.ISPECL [`s:num->bool`,`s':num->bool`]) EXTREAL_SUM_IMAGE_SUM_IMAGE \\
331 RW_TAC std_ss [] \\
332 POP_ASSUM (MP_TAC o
333 Q.SPEC `(\i j. Normal (x i) * indicator_fn (a i INTER b j) t)`) \\
334 `!x'. Normal (x (FST x')) * indicator_fn (a (FST x') INTER b (SND x')) t <> NegInf`
335 by (RW_TAC std_ss [indicator_fn_def, mul_rzero, mul_rone] \\
336 METIS_TAC [extreal_of_num_def, extreal_not_infty]) \\
337 RW_TAC std_ss [] \\
338 Suff `(\i. Normal (x (FST i)) * indicator_fn (a (FST i) INTER b (SND i)) t) =
339 (\x'. Normal (x (FST x')) * indicator_fn ((\(i,j). a i INTER b j) x') t)`
340 >- RW_TAC std_ss [] \\
341 RW_TAC std_ss [FUN_EQ_THM] \\
342 Cases_on `x'` >> RW_TAC std_ss [FST, SND])
343 >> CONJ_TAC
344 >- (RW_TAC std_ss [FUN_EQ_THM] \\
345 FULL_SIMP_TAC std_ss [pos_simple_fn_def] \\
346 (MP_TAC o Q.SPEC `(\i. Normal (y i) * indicator_fn (b i) t)`
347 o UNDISCH o Q.ISPEC `s':num->bool`) EXTREAL_SUM_IMAGE_IN_IF \\
348 `!x. x IN s' ==> (\i. Normal (y i) * indicator_fn (b i) t) x <> NegInf`
349 by (RW_TAC std_ss [indicator_fn_def, mul_rzero, mul_rone] \\
350 METIS_TAC [extreal_of_num_def, extreal_not_infty]) \\
351 RW_TAC std_ss [] \\
352 `(\x. if x IN s' then Normal (y x) * indicator_fn (b x) t else 0) =
353 (\x. (if x IN s' then (\i. Normal (y i) * indicator_fn (b i) t) x else 0))`
354 by RW_TAC std_ss [] >> POP_ORW \\
355 `(\x. (if x IN s' then (\i. Normal (y i) * indicator_fn (b i) t) x else 0)) =
356 (\x. (if x IN s' then (\i. Normal (y i) *
357 SIGMA (\j. indicator_fn (a j INTER b i) t) s) x else 0))`
358 by (RW_TAC std_ss [FUN_EQ_THM] \\
359 RW_TAC std_ss [] \\
360 FULL_SIMP_TAC std_ss [GSYM AND_IMP_INTRO] \\
361 (MP_TAC o REWRITE_RULE [Once INTER_COMM] o
362 Q.ISPEC `(b :num -> 'a set) (x' :num)` o
363 UNDISCH_ALL o REWRITE_RULE [GSYM AND_IMP_INTRO] o
364 Q.ISPECL [`(s :num -> bool)`, `m_space (m :'a m_space)`,
365 `(a :num -> 'a set)`]) indicator_fn_split \\
366 Q.PAT_X_ASSUM `!i. i IN s' ==> (b :num -> 'a set) i IN measurable_sets m`
367 (ASSUME_TAC o UNDISCH o Q.SPEC `x'`) \\
368 RW_TAC std_ss [MEASURE_SPACE_SUBSET_MSPACE]) >> POP_ORW \\
369 `!(x:num) (i:num). Normal (y i) * SIGMA (\j. indicator_fn (a j INTER b i) t) s =
370 SIGMA (\j. Normal (y i) * indicator_fn (a j INTER b i) t) s`
371 by (RW_TAC std_ss [] \\
372 `!j. (\j. indicator_fn (a j INTER b i) t) j <> NegInf`
373 by RW_TAC std_ss [indicator_fn_def, extreal_of_num_def,
374 extreal_not_infty] \\
375 FULL_SIMP_TAC std_ss [GSYM EXTREAL_SUM_IMAGE_CMUL]) >> POP_ORW \\
376 `FINITE (s CROSS s')` by RW_TAC std_ss [FINITE_CROSS] \\
377 `INJ p' (s CROSS s') (IMAGE p' (s CROSS s'))`
378 by METIS_TAC [INJ_IMAGE_BIJ, BIJ_DEF] \\
379 (MP_TAC o Q.SPEC `(\i:num. Normal (y (SND (p i))) *
380 indicator_fn ((\(i:num,j:num). a i INTER b j) (p i)) t)`
381 o UNDISCH o Q.SPEC `p'` o UNDISCH o Q.SPEC `s CROSS s'`
382 o INST_TYPE [alpha |-> ``:num#num``, beta |-> ``:num``])
383 EXTREAL_SUM_IMAGE_IMAGE \\
384 `!x. (\i. Normal (y (SND (p i))) *
385 indicator_fn ((\(i,j). a i INTER b j) (p i)) t) x <> NegInf`
386 by METIS_TAC [indicator_fn_def, mul_rzero, mul_rone, extreal_not_infty,
387 extreal_of_num_def] \\
388 RW_TAC std_ss [] \\
389 `!x'. ((\i. Normal (y (SND (p i))) *
390 indicator_fn ((\(i,j). a i INTER b j) (p i)) t) o p') x' <> NegInf`
391 by (RW_TAC std_ss [indicator_fn_def, mul_rzero, mul_rone] \\
392 METIS_TAC [extreal_not_infty, extreal_of_num_def]) \\
393 (MP_TAC o Q.SPEC `(\i. Normal (y (SND ((p :num -> num # num) i))) *
394 indicator_fn ((\(i,j). a i INTER b j) (p i)) t) o p'`
395 o UNDISCH o Q.ISPEC `(s :num set) CROSS (s' :num set)`)
396 EXTREAL_SUM_IMAGE_IN_IF \\
397 RW_TAC std_ss [] \\
398 `(\x'. if x' IN s CROSS s' then
399 Normal (y (SND x')) * indicator_fn ((\(i,j). a i INTER b j) x') t
400 else 0) =
401 (\x'. if x' IN s CROSS s' then
402 (\x'. Normal (y (SND x')) *
403 indicator_fn ((\(i,j). a i INTER b j) x') t) x'
404 else 0)` by METIS_TAC [] >> POP_ORW \\
405 `!x'. (\x'. Normal (y (SND x')) *
406 indicator_fn ((\(i,j). a i INTER b j) x') t) x' <> NegInf`
407 by (RW_TAC std_ss [indicator_fn_def, mul_rzero, mul_rone] \\
408 METIS_TAC [extreal_not_infty, extreal_of_num_def]) \\
409 (MP_TAC o Q.SPEC `(\x'. Normal (y (SND x')) *
410 indicator_fn ((\(i,j). a i INTER b j) x') t)`
411 o UNDISCH o Q.ISPEC `(s :num set) CROSS (s' :num set)`)
412 (GSYM EXTREAL_SUM_IMAGE_IN_IF) \\
413 RW_TAC std_ss [] \\
414 `!x'. NegInf <> (\x:num. SIGMA (\j:num. Normal (y x) *
415 indicator_fn (a j INTER b x) t) s) x'`
416 by (RW_TAC std_ss [] \\
417 `!j. (\j. Normal (y x') * indicator_fn (a j INTER b x') t) j <> NegInf`
418 by (RW_TAC std_ss [indicator_fn_def, mul_rzero, mul_rone] \\
419 METIS_TAC [extreal_of_num_def, extreal_not_infty]) \\
420 FULL_SIMP_TAC std_ss [EXTREAL_SUM_IMAGE_NOT_INFTY]) \\
421 (MP_TAC o Q.SPEC `(\x:num. SIGMA (\j:num. Normal (y x) *
422 indicator_fn (a j INTER b x) t) s)`
423 o UNDISCH o Q.ISPEC `(s' :num -> bool)`) (GSYM EXTREAL_SUM_IMAGE_IN_IF) \\
424 RW_TAC std_ss [] \\
425 (MP_TAC o Q.ISPECL [`s':num->bool`,`s:num->bool`]) EXTREAL_SUM_IMAGE_SUM_IMAGE \\
426 RW_TAC std_ss [] \\
427 POP_ASSUM (MP_TAC o Q.SPEC `(\x j. Normal (y x) *
428 indicator_fn (a j INTER b x) t)`) \\
429 `!x. Normal (y x) * indicator_fn (a j INTER b x) t <> NegInf`
430 by (RW_TAC std_ss [indicator_fn_def, mul_rzero, mul_rone] \\
431 METIS_TAC [extreal_of_num_def, extreal_not_infty]) \\
432 `!x. Normal (y (FST x)) * indicator_fn (a (SND x) INTER b (FST x)) t <> NegInf`
433 by (RW_TAC std_ss [indicator_fn_def, mul_rzero, mul_rone] \\
434 METIS_TAC [extreal_of_num_def, extreal_not_infty]) \\
435 RW_TAC std_ss [] \\
436 `(s' CROSS s) = IMAGE (\x. (SND x, FST x)) (s CROSS s')`
437 by (RW_TAC std_ss [Once EXTENSION, IN_CROSS, IN_IMAGE] \\
438 (MP_TAC o Q.ISPEC `x':num#num`) pair_CASES \\
439 RW_TAC std_ss [] >> RW_TAC std_ss [FST,SND] \\
440 EQ_TAC
441 >- (STRIP_TAC >> Q.EXISTS_TAC `(r,q)` >> RW_TAC std_ss [FST, SND]) \\
442 RW_TAC std_ss [] >> RW_TAC std_ss []) >> POP_ORW \\
443 `INJ (\x. (SND x,FST x)) (s CROSS s')
444 (IMAGE (\x. (SND x,FST x)) (s CROSS s'))`
445 by (RW_TAC std_ss [INJ_DEF, IN_CROSS, IN_IMAGE] >- METIS_TAC [] \\
446 (MP_TAC o Q.ISPEC `x':num#num`) pair_CASES \\
447 (MP_TAC o Q.ISPEC `x'':num#num`) pair_CASES \\
448 RW_TAC std_ss [] \\
449 FULL_SIMP_TAC std_ss [FST,SND]) \\
450 (MP_TAC o Q.SPEC `(\x. Normal (y (FST x)) *
451 indicator_fn (a (SND x) INTER b (FST x)) t)`
452 o UNDISCH o Q.SPEC `(\x. (SND x, FST x))` o UNDISCH
453 o Q.ISPEC `((s:num->bool) CROSS (s':num->bool))`
454 o INST_TYPE [``:'b``|->``:num#num``]) EXTREAL_SUM_IMAGE_IMAGE \\
455 `!x. (\x. Normal (y (FST x)) *
456 indicator_fn (a (SND x) INTER b (FST x)) t) x <> NegInf`
457 by (RW_TAC std_ss [indicator_fn_def, mul_rzero, mul_rone] \\
458 METIS_TAC [extreal_of_num_def, extreal_not_infty]) \\
459 RW_TAC std_ss [o_DEF] \\
460 Suff `(\x. Normal (y (SND x)) * indicator_fn (a (FST x) INTER b (SND x)) t) =
461 (\x. Normal (y (SND x)) * indicator_fn ((\(i,j). a i INTER b j) x) t)`
462 >- RW_TAC std_ss [] \\
463 RW_TAC std_ss [FUN_EQ_THM] \\
464 Cases_on `x'` >> RW_TAC std_ss [FST, SND])
465 >> CONJ_TAC
466 >- (RW_TAC std_ss [pos_simple_fn_integral_def] \\
467 FULL_SIMP_TAC std_ss [pos_simple_fn_def] \\
468 (MP_TAC o Q.ISPEC `(\i:num. Normal (x i) * measure m (a i))`
469 o UNDISCH o Q.ISPEC `(s :num -> bool)`) EXTREAL_SUM_IMAGE_IN_IF \\
470 `!x'. x' IN s ==> (\i. Normal (x i) * measure m (a i)) x' <> NegInf`
471 by (RW_TAC std_ss [] \\
472 METIS_TAC [positive_not_infty, mul_not_infty, measure_space_def]) \\
473 RW_TAC std_ss [] \\
474 `(\x'. if x' IN s then Normal (x x') * measure m (a x') else 0) =
475 (\x'. (if x' IN s then (\i. Normal (x i) * measure m (a i)) x' else 0))`
476 by METIS_TAC [] >> POP_ORW \\
477 `(\x'. (if x' IN s then (\i. Normal (x i) * measure m (a i)) x' else 0)) =
478 (\x'. (if x' IN s then (\i. Normal (x i) *
479 SIGMA (\j. measure m (a i INTER b j)) s') x' else 0))`
480 by (RW_TAC std_ss [FUN_EQ_THM] \\
481 RW_TAC std_ss [] \\
482 FULL_SIMP_TAC std_ss [GSYM AND_IMP_INTRO] \\
483 (MP_TAC o Q.SPEC `a (x' :num)` o
484 UNDISCH_ALL o REWRITE_RULE [GSYM AND_IMP_INTRO] o
485 Q.SPECL [`s'`, `b`, `m`]) measure_split \\
486 RW_TAC std_ss []) >> POP_ORW \\
487 `!i. i IN s ==> (Normal (x i) * SIGMA (\j. measure m (a i INTER b j)) s' =
488 SIGMA (\j. Normal (x i) * measure m (a i INTER b j)) s')`
489 by (RW_TAC std_ss [] \\
490 `!j. j IN s' ==> (\j. measure m (a i INTER b j)) j <> NegInf`
491 by METIS_TAC [positive_not_infty, measure_space_def,
492 MEASURE_SPACE_INTER] \\
493 FULL_SIMP_TAC std_ss [GSYM EXTREAL_SUM_IMAGE_CMUL]) \\
494 FULL_SIMP_TAC std_ss [] \\
495 `FINITE (s CROSS s')` by RW_TAC std_ss [FINITE_CROSS] \\
496 `INJ p' (s CROSS s') (IMAGE p' (s CROSS s'))`
497 by METIS_TAC [INJ_IMAGE_BIJ, BIJ_DEF] \\
498 (MP_TAC o Q.SPEC `(\i:num. Normal (x (FST (p i))) *
499 measure m ((\(i:num, j:num). a i INTER b j) (p i)))`
500 o UNDISCH o Q.SPEC `p'` o UNDISCH o Q.SPEC `s CROSS s'`
501 o INST_TYPE [alpha |-> ``:num#num``, beta |-> ``:num``])
502 EXTREAL_SUM_IMAGE_IMAGE \\
503 `!x'. x' IN IMAGE p' (s CROSS s') ==>
504 Normal (x (FST (p x'))) * measure m ((\(i,j). a i INTER b j) (p x')) <> NegInf`
505 by (RW_TAC std_ss [] \\
506 Cases_on `p x'` \\
507 RW_TAC std_ss [] \\
508 FULL_SIMP_TAC std_ss [IN_IMAGE, IN_CROSS] \\
509 `q IN s` by METIS_TAC [BIJ_DEF, FST, SND] \\
510 `r IN s'` by METIS_TAC [BIJ_DEF, FST, SND] \\
511 METIS_TAC [positive_not_infty, measure_space_def, mul_not_infty,
512 MEASURE_SPACE_INTER]) >> RW_TAC std_ss [] \\
513 (MP_TAC o Q.SPEC `((\i. Normal (x (FST ((p :num -> num # num) i))) *
514 measure m ((\(i,j). a i INTER b j) (p i))) o p')`
515 o UNDISCH o Q.ISPEC `(s :num set) CROSS (s' :num set)`) EXTREAL_SUM_IMAGE_IN_IF \\
516 `!x'. x' IN s CROSS s' ==>
517 ((\i. Normal (x (FST (p i))) *
518 measure m ((\(i,j). a i INTER b j) (p i))) o p') x' <> NegInf`
519 by (RW_TAC std_ss [] \\
520 Cases_on `x'` \\
521 FULL_SIMP_TAC std_ss [IN_CROSS] \\
522 METIS_TAC [positive_not_infty, measure_space_def, mul_not_infty,
523 MEASURE_SPACE_INTER]) >> RW_TAC std_ss [] \\
524 `(\x'. if x' IN s CROSS s' then
525 Normal (x (FST x')) * measure m ((\(i,j). a i INTER b j) x') else 0) =
526 (\x'. (if x' IN s CROSS s' then
527 (\x'. Normal (x (FST x')) * measure m ((\(i,j). a i INTER b j) x')) x' else 0))`
528 by METIS_TAC [] >> POP_ORW \\
529 (MP_TAC o Q.SPEC `(\x'. Normal (x (FST x')) * measure m ((\(i,j). a i INTER b j) x'))`
530 o UNDISCH o Q.ISPEC `(s :num set) CROSS (s' :num set)`)
531 (GSYM EXTREAL_SUM_IMAGE_IN_IF) \\
532 `!x'. x' IN s CROSS s' ==>
533 NegInf <> (\x'. Normal (x (FST x')) * measure m ((\(i,j). a i INTER b j) x')) x'`
534 by (RW_TAC std_ss [] \\
535 Cases_on `x'` \\
536 FULL_SIMP_TAC std_ss [IN_CROSS] \\
537 METIS_TAC [positive_not_infty, measure_space_def, mul_not_infty,
538 MEASURE_SPACE_INTER]) >> RW_TAC std_ss [] \\
539 `!x'. x' IN s ==>
540 NegInf <> (\i:num. SIGMA (\j:num. Normal (x i) * measure m (a i INTER b j)) s') x'`
541 by (RW_TAC std_ss [] \\
542 `!j. j IN s' ==> (\j. Normal (x x') * measure m (a x' INTER b j)) j <> NegInf`
543 by (RW_TAC std_ss [] \\
544 METIS_TAC [positive_not_infty, measure_space_def, mul_not_infty,
545 MEASURE_SPACE_INTER]) \\
546 FULL_SIMP_TAC std_ss [EXTREAL_SUM_IMAGE_NOT_INFTY]) \\
547 (MP_TAC o Q.SPEC `(\i:num. SIGMA (\j:num. Normal (x i) * measure m (a i INTER b j)) s')`
548 o UNDISCH o Q.ISPEC `(s :num -> bool)`) (GSYM EXTREAL_SUM_IMAGE_IN_IF) \\
549 RW_TAC std_ss [] \\
550 (MP_TAC o Q.ISPECL [`s:num->bool`,`s':num->bool`]) EXTREAL_SUM_IMAGE_SUM_IMAGE \\
551 RW_TAC std_ss [] \\
552 POP_ASSUM (MP_TAC o Q.SPEC `(\i j. Normal (x i) * measure m (a i INTER b j))`) \\
553 `!x'. x' IN s CROSS s' ==>
554 Normal (x (FST x')) * measure m (a (FST x') INTER b (SND x')) <> NegInf`
555 by (RW_TAC std_ss [] \\
556 Cases_on `x'` \\
557 FULL_SIMP_TAC std_ss [IN_CROSS] \\
558 METIS_TAC [positive_not_infty, measure_space_def, mul_not_infty,
559 MEASURE_SPACE_INTER]) \\
560 RW_TAC std_ss [] \\
561 Suff `(\i. Normal (x (FST i)) * measure m (a (FST i) INTER b (SND i))) =
562 (\x'. Normal (x (FST x')) * measure m ((\(i,j). a i INTER b j) x'))`
563 >- RW_TAC std_ss [] \\
564 RW_TAC std_ss [FUN_EQ_THM] \\
565 Cases_on `x'` >> RW_TAC std_ss [FST, SND])
566 >> CONJ_TAC
567 >- (RW_TAC std_ss [pos_simple_fn_integral_def] \\
568 FULL_SIMP_TAC std_ss [pos_simple_fn_def] \\
569 (MP_TAC o Q.ISPEC `(\i:num. Normal (y i) * measure m (b i))`
570 o UNDISCH o Q.ISPEC `(s' :num -> bool)`) EXTREAL_SUM_IMAGE_IN_IF \\
571 `!x. x IN s' ==> (\i. Normal (y i) * measure m (b i)) x <> NegInf`
572 by (RW_TAC std_ss [] \\
573 METIS_TAC [positive_not_infty, mul_not_infty, measure_space_def]) \\
574 RW_TAC std_ss [] \\
575 `(\x'. if x' IN s' then Normal (y x') * measure m (b x') else 0) =
576 (\x'. (if x' IN s' then (\i. Normal (y i) * measure m (b i)) x' else 0))`
577 by METIS_TAC [] >> POP_ORW \\
578 `(\x'. (if x' IN s' then (\i. Normal (y i) * measure m (b i)) x' else 0)) =
579 (\x'. (if x' IN s' then (\i. Normal (y i) *
580 SIGMA (\j. measure m (b i INTER a j)) s) x' else 0))`
581 by (RW_TAC std_ss [FUN_EQ_THM] \\
582 RW_TAC std_ss [] \\
583 FULL_SIMP_TAC std_ss [GSYM AND_IMP_INTRO] \\
584 (MP_TAC o Q.SPEC `b (x' :num)` o
585 UNDISCH_ALL o REWRITE_RULE [GSYM AND_IMP_INTRO] o
586 Q.SPECL [`s`, `a`, `m`]) measure_split \\
587 RW_TAC std_ss []) >> POP_ORW \\
588 `!i. i IN s' ==> (Normal (y i) * SIGMA (\j. measure m (b i INTER a j)) s =
589 SIGMA (\j. Normal (y i) * measure m (b i INTER a j)) s)`
590 by (RW_TAC std_ss [] \\
591 `!j. j IN s ==> (\j. measure m (b i INTER a j)) j <> NegInf`
592 by METIS_TAC [positive_not_infty, measure_space_def, MEASURE_SPACE_INTER] \\
593 FULL_SIMP_TAC std_ss [GSYM EXTREAL_SUM_IMAGE_CMUL]) \\
594 FULL_SIMP_TAC std_ss [] \\
595 `FINITE (s CROSS s')` by RW_TAC std_ss [FINITE_CROSS] \\
596 `INJ p' (s CROSS s') (IMAGE p' (s CROSS s'))` by METIS_TAC [INJ_IMAGE_BIJ, BIJ_DEF] \\
597 (MP_TAC o Q.SPEC `(\i:num. Normal (y (SND (p i))) *
598 measure m ((\(i:num,j:num). a i INTER b j) (p i)))`
599 o UNDISCH o Q.SPEC `p'` o UNDISCH o Q.SPEC `s CROSS s'`
600 o INST_TYPE [alpha |-> ``:num#num``, beta |-> ``:num``])
601 EXTREAL_SUM_IMAGE_IMAGE \\
602 `!x'. x' IN IMAGE p' (s CROSS s') ==>
603 Normal (y (SND (p x'))) * measure m ((\(i,j). a i INTER b j) (p x')) <> NegInf`
604 by (RW_TAC std_ss [] \\
605 Cases_on `p x'` \\
606 RW_TAC std_ss [] \\
607 FULL_SIMP_TAC std_ss [IN_IMAGE,IN_CROSS] \\
608 `q IN s` by METIS_TAC [BIJ_DEF, FST, SND] \\
609 `r IN s'` by METIS_TAC [BIJ_DEF, FST, SND] \\
610 METIS_TAC [positive_not_infty, measure_space_def, mul_not_infty,
611 MEASURE_SPACE_INTER]) >> RW_TAC std_ss [] \\
612 (MP_TAC o Q.SPEC `((\i. Normal (y (SND ((p :num -> num # num) i))) *
613 measure m ((\(i,j). a i INTER b j) (p i))) o p')`
614 o UNDISCH o Q.ISPEC `(s :num set) CROSS (s' :num set)`)
615 EXTREAL_SUM_IMAGE_IN_IF \\
616 `!x'. x' IN s CROSS s' ==>
617 ((\i. Normal (y (SND (p i))) *
618 measure m ((\(i,j). a i INTER b j) (p i))) o p') x' <> NegInf`
619 by (RW_TAC std_ss [] \\
620 Cases_on `x'` \\
621 FULL_SIMP_TAC std_ss [IN_CROSS] \\
622 METIS_TAC [positive_not_infty, measure_space_def, mul_not_infty,
623 MEASURE_SPACE_INTER]) >> RW_TAC std_ss [] \\
624 `(\x'. if x' IN s CROSS s' then
625 Normal (y (SND x')) * measure m ((\(i,j). a i INTER b j) x') else 0) =
626 (\x'. (if x' IN s CROSS s' then
627 (\x'. Normal (y (SND x')) * measure m ((\(i,j). a i INTER b j) x')) x' else 0))`
628 by METIS_TAC [] >> POP_ORW \\
629 (MP_TAC o Q.SPEC `(\x'. Normal (y (SND x')) * measure m ((\(i,j). a i INTER b j) x'))`
630 o UNDISCH o Q.ISPEC `(s :num set) CROSS (s' :num set)`)
631 (GSYM EXTREAL_SUM_IMAGE_IN_IF) \\
632 `!x'. x' IN s CROSS s' ==>
633 NegInf <> (\x'. Normal (y (SND x')) * measure m ((\(i,j). a i INTER b j) x')) x'`
634 by (RW_TAC std_ss [] \\
635 Cases_on `x'` \\
636 FULL_SIMP_TAC std_ss [IN_CROSS] \\
637 METIS_TAC [positive_not_infty, measure_space_def, mul_not_infty,
638 MEASURE_SPACE_INTER]) >> RW_TAC std_ss [] \\
639 `!x'. x' IN s' ==>
640 NegInf <> (\i:num. SIGMA (\j:num. Normal (y i) * measure m (b i INTER a j)) s) x'`
641 by (RW_TAC std_ss [] \\
642 `!j. j IN s ==> (\j. Normal (y x') * measure m (b x' INTER a j)) j <> NegInf`
643 by (RW_TAC std_ss [] \\
644 METIS_TAC [positive_not_infty, measure_space_def, mul_not_infty,
645 MEASURE_SPACE_INTER]) \\
646 FULL_SIMP_TAC std_ss [EXTREAL_SUM_IMAGE_NOT_INFTY]) \\
647 (MP_TAC o Q.SPEC `(\i:num. SIGMA (\j:num. Normal (y i) * measure m (b i INTER a j)) s)`
648 o UNDISCH o Q.ISPEC `(s' :num -> bool)`) (GSYM EXTREAL_SUM_IMAGE_IN_IF) \\
649 RW_TAC std_ss [] \\
650 (MP_TAC o Q.ISPECL [`s':num->bool`,`s:num->bool`]) EXTREAL_SUM_IMAGE_SUM_IMAGE \\
651 RW_TAC std_ss [] \\
652 POP_ASSUM (MP_TAC o Q.SPEC `(\i j. Normal (y i) * measure m (b i INTER a j))`) \\
653 `!x'. x' IN s' CROSS s ==>
654 Normal (y (FST x')) * measure m (b (FST x') INTER a (SND x')) <> NegInf`
655 by (RW_TAC std_ss [] \\
656 Cases_on `x'` \\
657 FULL_SIMP_TAC std_ss [IN_CROSS] \\
658 METIS_TAC [positive_not_infty, measure_space_def, mul_not_infty,
659 MEASURE_SPACE_INTER]) \\
660 RW_TAC std_ss [o_DEF] \\
661 `(s' CROSS s) = IMAGE (\x. (SND x, FST x)) (s CROSS s')`
662 by (RW_TAC std_ss [Once EXTENSION, IN_CROSS, IN_IMAGE] \\
663 (MP_TAC o Q.ISPEC `x':num#num`) pair_CASES \\
664 RW_TAC std_ss [] >> RW_TAC std_ss [FST,SND] \\
665 EQ_TAC >- (STRIP_TAC >> Q.EXISTS_TAC `(r,q)` >> RW_TAC std_ss [FST,SND]) \\
666 RW_TAC std_ss [] >> RW_TAC std_ss []) >> POP_ORW \\
667 `INJ (\x. (SND x,FST x)) (s CROSS s') (IMAGE (\x. (SND x,FST x)) (s CROSS s'))`
668 by (RW_TAC std_ss [INJ_DEF, IN_CROSS, IN_IMAGE]
669 >- METIS_TAC [] \\
670 (MP_TAC o Q.ISPEC `x':num#num`) pair_CASES \\
671 (MP_TAC o Q.ISPEC `x'':num#num`) pair_CASES \\
672 RW_TAC std_ss [] \\
673 FULL_SIMP_TAC std_ss [FST,SND]) \\
674 (MP_TAC o Q.SPEC `(\x. Normal (y (FST x)) * measure m (a (SND x) INTER b (FST x)))`
675 o UNDISCH o Q.SPEC `(\x. (SND x, FST x))` o UNDISCH
676 o Q.ISPEC `((s:num->bool) CROSS (s':num->bool))`
677 o INST_TYPE [``:'b``|->``:num#num``]) EXTREAL_SUM_IMAGE_IMAGE \\
678 `!x. x IN IMAGE (\x. (SND x,FST x)) (s CROSS s') ==>
679 (\x. Normal (y (FST x)) * measure m (a (SND x) INTER b (FST x))) x <> NegInf`
680 by (RW_TAC std_ss [] \\
681 Cases_on `x'` \\
682 FULL_SIMP_TAC std_ss [IN_CROSS,IN_IMAGE] \\
683 METIS_TAC [positive_not_infty, measure_space_def, mul_not_infty,
684 MEASURE_SPACE_INTER]) \\
685 RW_TAC std_ss [o_DEF, INTER_COMM] \\
686 Suff `(\x. Normal (y (SND x)) * measure m (a (FST x) INTER b (SND x))) =
687 (\x. Normal (y (SND x)) * measure m ((\(i,j). a i INTER b j) x))`
688 >- RW_TAC std_ss [] \\
689 RW_TAC std_ss [FUN_EQ_THM] \\
690 Cases_on `x'` >> RW_TAC std_ss [FST, SND])
691 >> CONJ_TAC
692 >- FULL_SIMP_TAC std_ss [IMAGE_FINITE, FINITE_CROSS, pos_simple_fn_def]
693 >> CONJ_TAC
694 >- (RW_TAC std_ss [IN_IMAGE] \\
695 FULL_SIMP_TAC std_ss [o_DEF] \\
696 (MP_TAC o Q.ISPEC `x':num#num`) pair_CASES \\
697 (MP_TAC o Q.ISPEC `x'':num#num`) pair_CASES \\
698 RW_TAC std_ss [] \\
699 RW_TAC std_ss [] \\
700 METIS_TAC [IN_CROSS, pos_simple_fn_def, FST])
701 >> CONJ_TAC
702 >- (RW_TAC std_ss [IN_IMAGE] \\
703 FULL_SIMP_TAC std_ss [o_DEF] \\
704 (MP_TAC o Q.ISPEC `x':num#num`) pair_CASES \\
705 (MP_TAC o Q.ISPEC `x'':num#num`) pair_CASES \\
706 RW_TAC std_ss [] \\
707 RW_TAC std_ss [] \\
708 METIS_TAC [IN_CROSS, pos_simple_fn_def, SND])
709 >> CONJ_TAC
710 >- (RW_TAC std_ss [IN_DISJOINT, IN_IMAGE, EXTENSION, NOT_IN_EMPTY, IN_INTER] \\
711 FULL_SIMP_TAC std_ss [o_DEF] \\
712 (MP_TAC o Q.ISPEC `x':num#num`) pair_CASES \\
713 (MP_TAC o Q.ISPEC `x'':num#num`) pair_CASES \\
714 RW_TAC std_ss [] \\
715 RW_TAC std_ss [] \\
716 SPOSE_NOT_THEN STRIP_ASSUME_TAC \\
717 FULL_SIMP_TAC std_ss [IN_INTER, IN_CROSS, FST, SND, pos_simple_fn_def,
718 DISJOINT_DEF] \\
719 METIS_TAC [EXTENSION, NOT_IN_EMPTY, IN_INTER])
720 >> CONJ_TAC
721 >- (RW_TAC std_ss [IN_IMAGE] \\
722 FULL_SIMP_TAC std_ss [o_DEF] \\
723 (MP_TAC o Q.ISPEC `x':num#num`) pair_CASES \\
724 RW_TAC std_ss [] \\
725 FULL_SIMP_TAC std_ss [IN_CROSS, FST, SND, pos_simple_fn_def] \\
726 METIS_TAC [ALGEBRA_INTER, subsets_def, space_def,
727 sigma_algebra_def, measure_space_def])
728 >> RW_TAC std_ss [Once EXTENSION, IN_BIGUNION, IN_IMAGE, IN_CROSS]
729 >> `!s'' x. (?x'. ((x = p' x') /\ FST x' IN s /\ SND x' IN s')) =
730 (?x1 x2. ((x = p' (x1,x2)) /\ x1 IN s /\ x2 IN s'))`
731 by METIS_TAC [PAIR, FST, SND]
732 >> POP_ORW
733 >> `!s''. (?x. (s'' = (\(i,j). a i INTER b j) (p x)) /\
734 ?x1 x2. (x = p' (x1,x2)) /\ x1 IN s /\ x2 IN s') <=>
735 (?x1 x2. (s'' = (\(i,j). a i INTER b j) (p (p' (x1,x2)))) /\
736 x1 IN s /\ x2 IN s')`
737 by METIS_TAC []
738 >> POP_ORW
739 >> FULL_SIMP_TAC std_ss [o_DEF, IN_CROSS]
740 >> `!s''. (?x1 x2. (s'' = (\(i,j). a i INTER b j) (p (p' (x1,x2)))) /\
741 x1 IN s /\ x2 IN s') <=>
742 (?x1 x2. (s'' = (\(i,j). a i INTER b j) (x1,x2)) /\
743 x1 IN s /\ x2 IN s')`
744 by METIS_TAC [FST,SND]
745 >> POP_ORW
746 >> RW_TAC std_ss []
747 >> Suff `(?x1 x2. x' IN a x1 INTER b x2 /\ x1 IN s /\ x2 IN s') <=>
748 x' IN m_space m` >- METIS_TAC []
749 >> RW_TAC std_ss [IN_INTER]
750 >> FULL_SIMP_TAC std_ss [pos_simple_fn_def]
751 >> `m_space m = (BIGUNION (IMAGE a s)) INTER (BIGUNION (IMAGE b s'))`
752 by METIS_TAC [INTER_IDEMPOT]
753 >> POP_ORW
754 >> Q.PAT_X_ASSUM `BIGUNION (IMAGE b s') = m_space m` (K ALL_TAC)
755 >> Q.PAT_X_ASSUM `BIGUNION (IMAGE a s) = m_space m` (K ALL_TAC)
756 >> RW_TAC std_ss [IN_INTER, IN_BIGUNION, IN_IMAGE]
757 >> METIS_TAC []
758QED
759
760(* z/z' c is the standard representation of f/g *)
761Theorem psfis_present :
762 !m f g a b.
763 measure_space m /\
764 a IN psfis m f /\ b IN psfis m g ==>
765 ?z z' c (k:num->bool).
766 (!t. t IN m_space m ==> (f t = SIGMA (\i. Normal (z i) * (indicator_fn (c i) t)) k)) /\
767 (!t. t IN m_space m ==> (g t = SIGMA (\i. Normal (z' i) * (indicator_fn (c i) t)) k)) /\
768 (a = pos_simple_fn_integral m k c z) /\
769 (b = pos_simple_fn_integral m k c z') /\
770 FINITE k /\ (!i. i IN k ==> 0 <= z i) /\ (!i. i IN k ==> 0 <= z' i) /\
771 (!i j. i IN k /\ j IN k /\ i <> j ==> DISJOINT (c i) (c j)) /\
772 (!i. i IN k ==> c i IN measurable_sets m) /\
773 (BIGUNION (IMAGE c k) = m_space m)
774Proof
775 RW_TAC std_ss [psfis_def, IN_IMAGE, psfs_def, GSPECIFICATION]
776 >> Cases_on `x'` >> Cases_on `x` >> Cases_on `x''` >> Cases_on `x'''`
777 >> Cases_on `r'` >> Cases_on `r` >> Cases_on `r''` >> Cases_on `r'''`
778 >> RW_TAC std_ss []
779 >> FULL_SIMP_TAC std_ss [PAIR_EQ]
780 >> MATCH_MP_TAC pos_simple_fn_integral_present >> art []
781QED
782
783(* ------------------------------------------------------ *)
784(* Properties of POSTIVE SIMPLE FUNCTIONS *)
785(* ------------------------------------------------------ *)
786
787Theorem pos_simple_fn_thm1:
788 !m f s a x i y. measure_space m /\ pos_simple_fn m f s a x /\
789 i IN s /\ y IN a i ==> (f y = Normal (x i))
790Proof
791 RW_TAC std_ss [pos_simple_fn_def]
792 >> `y IN m_space m` by METIS_TAC [MEASURE_SPACE_SUBSET_MSPACE,SUBSET_DEF]
793 >> `FINITE (s DELETE i)` by RW_TAC std_ss [FINITE_DELETE]
794 >> (MP_TAC o Q.SPEC `i` o UNDISCH o
795 Q.SPECL [`(\i. Normal (x i) * indicator_fn (a i) y)`,`s DELETE i`])
796 (INST_TYPE [alpha |-> ``:num``] EXTREAL_SUM_IMAGE_PROPERTY)
797 >> `!x'. (\i. Normal (x i) * indicator_fn (a i) y) x' <> NegInf`
798 by (RW_TAC std_ss [indicator_fn_def,mul_rone,mul_rzero] \\
799 RW_TAC std_ss [extreal_of_num_def,extreal_not_infty])
800 >> RW_TAC std_ss [INSERT_DELETE,DELETE_DELETE]
801 >> `!j. j IN (s DELETE i) ==> ~(y IN a j)`
802 by (RW_TAC std_ss [IN_DELETE]
803 >> `DISJOINT (a i) (a j)` by METIS_TAC []
804 >> FULL_SIMP_TAC std_ss [DISJOINT_DEF,INTER_DEF,EXTENSION,GSPECIFICATION,NOT_IN_EMPTY]
805 >> METIS_TAC [])
806 >> (MP_TAC o Q.ISPEC `(\i:num. Normal (x i) * indicator_fn (a i) y)`
807 o UNDISCH o Q.SPEC `s DELETE i`) EXTREAL_SUM_IMAGE_IN_IF
808 >> `!x'. (\i. Normal (x i) * indicator_fn (a i) y) x' <> NegInf`
809 by (RW_TAC std_ss [indicator_fn_def,mul_rone,mul_rzero] \\
810 RW_TAC std_ss [extreal_of_num_def,extreal_not_infty])
811 >> RW_TAC std_ss []
812 >> `!j. j IN s DELETE i ==> (indicator_fn (a j) y = 0)`
813 by RW_TAC std_ss [indicator_fn_def,mul_rone,mul_rzero]
814 >> RW_TAC std_ss [mul_rzero,EXTREAL_SUM_IMAGE_ZERO,add_rzero,indicator_fn_def,mul_rone]
815QED
816
817Theorem pos_simple_fn_le :
818 !m f g s a x x' i. measure_space m /\
819 pos_simple_fn m f s a x /\ pos_simple_fn m g s a x' /\
820 (!x. x IN m_space m ==> g x <= f x) /\
821 i IN s /\ ~(a i = {}) ==> (Normal (x' i) <= Normal (x i))
822Proof
823 RW_TAC std_ss []
824 >> `!t. t IN a i ==> (f t = Normal (x i))` by METIS_TAC [pos_simple_fn_thm1]
825 >> `!t. t IN a i ==> (g t = Normal (x' i))` by METIS_TAC [pos_simple_fn_thm1]
826 >> METIS_TAC [CHOICE_DEF, pos_simple_fn_def, MEASURE_SPACE_SUBSET_MSPACE, SUBSET_DEF]
827QED
828
829(* added some missing quantifiers *)
830Theorem pos_simple_fn_cmul :
831 !m f z s a x. measure_space m /\ pos_simple_fn m f s a x /\ 0 <= z ==>
832 ?s' a' x'. pos_simple_fn m (\t. Normal z * f t) s' a' x'
833Proof
834 RW_TAC std_ss [pos_simple_fn_def]
835 >> Q.EXISTS_TAC `s` >> Q.EXISTS_TAC `a` >> Q.EXISTS_TAC `(\i. z * (x i))`
836 >> RW_TAC std_ss [REAL_LE_MUL, GSYM extreal_mul_def]
837 >- METIS_TAC [extreal_le_def, extreal_of_num_def, le_mul]
838 >> (MP_TAC o Q.SPECL [`(\i. Normal (x i) * indicator_fn (a i) t)`,`z`] o
839 UNDISCH o Q.ISPEC `s:num->bool`) EXTREAL_SUM_IMAGE_CMUL
840 >> `!x'. (\i. Normal (x i) * indicator_fn (a i) t) x' <> NegInf`
841 by (RW_TAC std_ss [indicator_fn_def,mul_rone,mul_rzero] \\
842 RW_TAC std_ss [extreal_of_num_def,extreal_not_infty])
843 >> FULL_SIMP_TAC std_ss [mul_assoc]
844QED
845
846Theorem pos_simple_fn_cmul_alt:
847 !m f s a x z. measure_space m /\ 0 <= z /\ pos_simple_fn m f s a x ==>
848 pos_simple_fn m (\t. Normal z * f t) s a (\i. z * x i)
849Proof
850 RW_TAC std_ss [pos_simple_fn_def, REAL_LE_MUL, GSYM extreal_mul_def]
851 >- METIS_TAC [extreal_le_def, extreal_of_num_def, le_mul]
852 >> (MP_TAC o Q.SPECL [`(\i. Normal (x i) * indicator_fn (a i) t)`,`z`] o
853 UNDISCH o Q.ISPEC `s:num->bool`) EXTREAL_SUM_IMAGE_CMUL
854 >> `!x'. (\i. Normal (x i) * indicator_fn (a i) t) x' <> NegInf`
855 by (RW_TAC std_ss [indicator_fn_def, mul_rone, mul_rzero]
856 >> RW_TAC std_ss [extreal_of_num_def, extreal_not_infty])
857 >> FULL_SIMP_TAC std_ss [mul_assoc]
858QED
859
860(* added some missing quantifiers *)
861Theorem pos_simple_fn_add :
862 !m f g s a x s' a' x'.
863 measure_space m /\ pos_simple_fn m f s a x /\ pos_simple_fn m g s' a' x' ==>
864 ?s'' a'' x''. pos_simple_fn m (\t. f t + g t) s'' a'' x''
865Proof
866 rpt STRIP_TAC
867 >> (MP_TAC o Q.SPECL [`m`,`f`,`s`,`a`,`x`,`g`,`s'`,`a'`,`x'`]) pos_simple_fn_integral_present
868 >> RW_TAC std_ss []
869 >> Q.EXISTS_TAC `k`
870 >> Q.EXISTS_TAC `c` >> Q.EXISTS_TAC `(\i. z i + z' i)`
871 >> RW_TAC std_ss [pos_simple_fn_def, REAL_LE_ADD, GSYM extreal_add_def]
872 >- METIS_TAC [le_add, pos_simple_fn_def]
873 >> `!i. i IN k ==> Normal (z i) <> NegInf /\ Normal (z' i) <> NegInf /\
874 0 <= Normal (z i) /\ 0 <= Normal (z' i)`
875 by METIS_TAC [extreal_not_infty,extreal_of_num_def,extreal_le_def]
876 >> `!i. i IN k ==> (\i. (Normal (z i) + Normal (z' i)) * indicator_fn (c i) t) i <> NegInf`
877 by METIS_TAC [extreal_add_def, indicator_fn_def, mul_rzero, mul_rone, extreal_of_num_def,
878 extreal_not_infty]
879 >> (MP_TAC o Q.SPEC `(\i:num. (Normal (z i) + Normal (z' i)) * indicator_fn (c i) t)`
880 o UNDISCH o Q.ISPEC `k:num->bool`) EXTREAL_SUM_IMAGE_IN_IF
881 >> RW_TAC std_ss [add_rdistrib]
882 >> (MP_TAC o Q.SPEC `(\x. Normal (z x) * indicator_fn (c x) t + Normal (z' x) * indicator_fn (c x) t)`
883 o UNDISCH o Q.ISPEC `k:num->bool` o GSYM) EXTREAL_SUM_IMAGE_IN_IF
884 >> `!x. x IN k ==> NegInf <>
885 (\x. Normal (z x) * indicator_fn (c x) t + Normal (z' x) * indicator_fn (c x) t) x`
886 by (RW_TAC std_ss [extreal_add_def,indicator_fn_def,mul_rzero,mul_rone,add_rzero]
887 >> METIS_TAC [extreal_of_num_def,extreal_not_infty])
888 >> RW_TAC std_ss []
889 >> `(\x. Normal (z x) * indicator_fn (c x) t + Normal (z' x) * indicator_fn (c x) t) =
890 (\x. (\x. Normal (z x) * indicator_fn (c x) t) x + (\x. Normal (z' x) * indicator_fn (c x) t) x)`
891 by METIS_TAC []
892 >> POP_ORW
893 >> (MP_TAC o Q.SPECL [`(\x:num. Normal (z x) * indicator_fn (c x) t)`,
894 `(\x:num. Normal (z' x) * indicator_fn (c x) t)`]
895 o UNDISCH o Q.ISPEC `k:num->bool` o GSYM) EXTREAL_SUM_IMAGE_ADD
896 >> `!x:num. x IN k ==> NegInf <> (\x:num. Normal (z x) * indicator_fn (c x) t) x /\
897 NegInf <> (\x:num. Normal (z' x) * indicator_fn (c x) t) x`
898 by (RW_TAC std_ss [indicator_fn_def, mul_rone, mul_rzero, add_rzero] \\
899 METIS_TAC [extreal_of_num_def, extreal_not_infty])
900 >> METIS_TAC []
901QED
902
903Theorem pos_simple_fn_add_alt:
904 !m f g s a x y. measure_space m /\
905 pos_simple_fn m f s a x /\ pos_simple_fn m g s a y
906 ==> pos_simple_fn m (\t. f t + g t) s a (\i. x i + y i)
907Proof
908 RW_TAC std_ss [pos_simple_fn_def,REAL_LE_ADD,GSYM extreal_add_def,le_add]
909 >> `!i. i IN s ==> Normal (x i) <> NegInf /\ Normal (y i) <> NegInf /\ 0 <= Normal (x i) /\ 0 <= Normal (y i)`
910 by METIS_TAC [extreal_not_infty,extreal_of_num_def,extreal_le_def]
911 >> `!i. i IN s ==> (\i. (Normal (x i) + Normal (y i)) * indicator_fn (a i) t) i <> NegInf`
912 by METIS_TAC [extreal_add_def,indicator_fn_def,mul_rzero,mul_rone,extreal_of_num_def,extreal_not_infty]
913 >> (MP_TAC o Q.SPEC `(\i:num. (Normal (x i) + Normal (y i)) * indicator_fn (a i) t)`
914 o UNDISCH o Q.ISPEC `s:num->bool`) EXTREAL_SUM_IMAGE_IN_IF
915 >> RW_TAC std_ss [add_rdistrib]
916 >> (MP_TAC o Q.SPEC `(\i. Normal (x i) * indicator_fn (a i) t + Normal (y i) * indicator_fn (a i) t)`
917 o UNDISCH o Q.ISPEC `s:num->bool` o GSYM) EXTREAL_SUM_IMAGE_IN_IF
918 >> `!i. i IN s ==> NegInf <>
919 (\i. Normal (x i) * indicator_fn (a i) t + Normal (y i) * indicator_fn (a i) t) i`
920 by (RW_TAC std_ss [extreal_add_def,indicator_fn_def,mul_rzero,mul_rone,add_rzero]
921 >> METIS_TAC [extreal_of_num_def,extreal_not_infty])
922 >> RW_TAC std_ss []
923 >> `(\i. Normal (x i) * indicator_fn (a i) t + Normal (y i) * indicator_fn (a i) t) =
924 (\i. (\i. Normal (x i) * indicator_fn (a i) t) i + (\i. Normal (y i) * indicator_fn (a i) t) i)`
925 by METIS_TAC []
926 >> POP_ORW
927 >> (MP_TAC o Q.SPECL [`(\i:num. Normal (x i) * indicator_fn (a i) t)`,
928 `(\i:num. Normal (y i) * indicator_fn (a i) t)`]
929 o UNDISCH o Q.ISPEC `s:num->bool` o GSYM) EXTREAL_SUM_IMAGE_ADD
930 >> `!i:num. i IN s ==> NegInf <> (\i:num. Normal (x i) * indicator_fn (a i) t) i /\
931 NegInf <> (\i:num. Normal (y i) * indicator_fn (a i) t) i`
932 by (RW_TAC std_ss [indicator_fn_def,mul_rone,mul_rzero,add_rzero]
933 >> METIS_TAC [extreal_of_num_def,extreal_not_infty])
934 >> METIS_TAC []
935QED
936
937Theorem pos_simple_fn_indicator:
938 !m A. measure_space m /\ A IN measurable_sets m ==>
939 ?s a x. pos_simple_fn m (indicator_fn A) s a x
940Proof
941 RW_TAC std_ss []
942 >> `FINITE {0:num; 1:num}` by METIS_TAC [FINITE_INSERT, FINITE_SING]
943 >> Q.EXISTS_TAC `{0:num; 1:num}`
944 >> Q.EXISTS_TAC `(\i. if i = 0 then (m_space m DIFF A) else A)`
945 >> Q.EXISTS_TAC `(\i. if i = 0 then 0 else 1)`
946 >> RW_TAC std_ss [pos_simple_fn_def, indicator_fn_def, FINITE_SING, IN_SING,
947 MEASURE_SPACE_MSPACE_MEASURABLE]
948 >| [ (* goal 1 (of 6) *)
949 METIS_TAC [le_01, le_refl],
950 (* goal 2 (of 6) *)
951 `FINITE {1:num}` by METIS_TAC [FINITE_SING] \\
952 Know `{1:num} DELETE 0 = {1}`
953 >- (RW_TAC std_ss [DELETE_DEF, DIFF_DEF, IN_SING] \\
954 RW_TAC std_ss [EXTENSION, IN_SING] \\
955 RW_TAC std_ss [GSPECIFICATION] \\
956 EQ_TAC >- RW_TAC arith_ss [] \\
957 RW_TAC arith_ss []) >> DISCH_TAC \\
958 (MP_TAC o Q.SPEC `0` o UNDISCH o
959 Q.ISPECL [`(\i:num. Normal (if i = 0 then 0 else 1) *
960 if t IN if i = 0 then m_space m DIFF A else A then 1 else 0)`, `{1:num}`])
961 EXTREAL_SUM_IMAGE_PROPERTY \\
962 `!x. (\i:num. Normal (if i = 0 then 0 else 1) *
963 if t IN if i = 0 then m_space m DIFF A else A then 1 else 0) x <> NegInf`
964 by (RW_TAC std_ss [mul_rone,mul_rzero] \\
965 RW_TAC std_ss [extreal_of_num_def,extreal_not_infty]) \\
966 RW_TAC real_ss [EXTREAL_SUM_IMAGE_SING, extreal_of_num_def, extreal_mul_def, extreal_add_def],
967 (* goal 3 (of 6) *)
968 METIS_TAC [MEASURE_SPACE_DIFF, MEASURE_SPACE_MSPACE_MEASURABLE],
969 (* goal 4 (of 6) *)
970 RW_TAC real_ss [],
971 (* goal 5 (of 6) *)
972 FULL_SIMP_TAC std_ss [DISJOINT_DEF, EXTENSION, GSPECIFICATION, IN_INTER, IN_DIFF,
973 NOT_IN_EMPTY, IN_INSERT, IN_SING] \\
974 METIS_TAC [],
975 (* goal 6 (of 6) *)
976 RW_TAC std_ss [IMAGE_DEF] \\
977 `{if i:num = 0 then m_space m DIFF A else A | i IN {0; 1}} = {m_space m DIFF A; A}`
978 by (RW_TAC std_ss [EXTENSION, GSPECIFICATION, IN_INSERT, IN_SING] \\
979 EQ_TAC >- METIS_TAC [] \\
980 RW_TAC std_ss [] >- METIS_TAC [] \\
981 Q.EXISTS_TAC `1:num` \\
982 RW_TAC real_ss []) \\
983 RW_TAC std_ss [BIGUNION_INSERT, BIGUNION_SING] \\
984 METIS_TAC [UNION_DIFF, MEASURE_SPACE_SUBSET_MSPACE] ]
985QED
986
987Theorem pos_simple_fn_indicator_alt:
988 !m s. measure_space m /\ s IN measurable_sets m ==>
989 pos_simple_fn m (indicator_fn s) {0:num;1:num}
990 (\i:num. if i = 0 then (m_space m DIFF s) else s)
991 (\i. if i = 0 then 0 else 1)
992Proof
993 RW_TAC std_ss []
994 >> `FINITE {0:num;1:num}` by METIS_TAC [FINITE_INSERT, FINITE_SING]
995 >> RW_TAC real_ss [pos_simple_fn_def, indicator_fn_def, FINITE_SING, IN_SING,
996 MEASURE_SPACE_MSPACE_MEASURABLE]
997 >| [ (* goal 1 (of 6) *)
998 METIS_TAC [le_01, le_refl],
999 (* goal 2 (of 6) *)
1000 `FINITE {1:num}` by METIS_TAC [FINITE_SING] \\
1001 Know `{1:num} DELETE 0 = {1}`
1002 >- (RW_TAC std_ss [DELETE_DEF, DIFF_DEF, IN_SING] \\
1003 RW_TAC std_ss [EXTENSION, IN_SING] \\
1004 RW_TAC std_ss [GSPECIFICATION] \\
1005 EQ_TAC >- RW_TAC arith_ss [] \\
1006 RW_TAC arith_ss []) >> DISCH_TAC \\
1007 (MP_TAC o Q.SPEC `0` o UNDISCH o
1008 Q.ISPECL [`(\i:num. Normal (if i = 0 then 0 else 1) *
1009 if t IN if i = 0 then m_space m DIFF s else s then 1 else 0)`, `{1:num}`])
1010 EXTREAL_SUM_IMAGE_PROPERTY \\
1011 `!x. (\i:num. Normal (if i = 0 then 0 else 1) *
1012 if t IN if i = 0 then m_space m DIFF s else s then 1 else 0) x <> NegInf`
1013 by (RW_TAC std_ss [mul_rone,mul_rzero] \\
1014 RW_TAC std_ss [extreal_of_num_def, extreal_not_infty]) \\
1015 RW_TAC real_ss [EXTREAL_SUM_IMAGE_SING, extreal_of_num_def, extreal_mul_def,
1016 extreal_add_def],
1017 (* goal 3 (of 6) *)
1018 METIS_TAC [MEASURE_SPACE_DIFF, MEASURE_SPACE_MSPACE_MEASURABLE],
1019 (* goal 4 (of 6) *)
1020 RW_TAC real_ss [],
1021 (* goal 5 (of 6) *)
1022 FULL_SIMP_TAC std_ss [DISJOINT_DEF, EXTENSION, GSPECIFICATION, IN_INTER, IN_DIFF,
1023 NOT_IN_EMPTY, IN_INSERT, IN_SING] \\
1024 METIS_TAC [],
1025 (* goal 6 (of 6) *)
1026 RW_TAC std_ss [IMAGE_DEF] \\
1027 `{if i:num = 0 then m_space m DIFF s else s | i IN {0; 1}} = {m_space m DIFF s; s}`
1028 by (RW_TAC std_ss [EXTENSION, GSPECIFICATION, IN_INSERT, IN_SING]
1029 >> EQ_TAC >- METIS_TAC []
1030 >> RW_TAC std_ss [] >- METIS_TAC []
1031 >> Q.EXISTS_TAC `1:num`
1032 >> RW_TAC real_ss []) \\
1033 RW_TAC std_ss [BIGUNION_INSERT, BIGUNION_SING] \\
1034 METIS_TAC [UNION_DIFF, MEASURE_SPACE_SUBSET_MSPACE] ]
1035QED
1036
1037Theorem pos_simple_fn_max:
1038 !m f (s:num->bool) a x g (s':num->bool) b y.
1039 measure_space m /\ pos_simple_fn m f s a x /\ pos_simple_fn m g s' b y ==>
1040 ?s'' a'' x''. pos_simple_fn m (\x. max (f x) (g x)) s'' a'' x''
1041Proof
1042 RW_TAC std_ss []
1043 >> `?p n. BIJ p (count n) (s CROSS s')`
1044 by FULL_SIMP_TAC std_ss [GSYM FINITE_BIJ_COUNT, pos_simple_fn_def, FINITE_CROSS]
1045 >> `?p'. BIJ p' (s CROSS s') (count n) /\ (!x. x IN (count n) ==> ((p' o p) x = x))
1046 /\ (!x. x IN (s CROSS s') ==> ((p o p') x = x))`
1047 by (MATCH_MP_TAC BIJ_INV >> RW_TAC std_ss [])
1048 >> Q.EXISTS_TAC `IMAGE p' (s CROSS s')`
1049 >> Q.EXISTS_TAC `(\(i,j). a i INTER b j) o p`
1050 >> Q.EXISTS_TAC `(\n. max ((x o FST o p) n) ((y o SND o p)n))`
1051 >> RW_TAC std_ss [FUN_EQ_THM]
1052 >> FULL_SIMP_TAC std_ss [pos_simple_fn_def,extreal_max_def]
1053 >> `!i j. i IN IMAGE p' (s CROSS s') /\ j IN IMAGE p' (s CROSS s') /\ i <> j ==>
1054 DISJOINT (((\(i,j). a i INTER b j) o p) i) (((\(i,j). a i INTER b j) o p) j)`
1055 by (RW_TAC std_ss [DISJOINT_DEF, IN_IMAGE]
1056 >> RW_TAC std_ss [Once EXTENSION, NOT_IN_EMPTY, IN_INTER]
1057 >> FULL_SIMP_TAC std_ss [o_DEF]
1058 >> (MP_TAC o Q.ISPEC `x':num#num`) pair_CASES
1059 >> (MP_TAC o Q.ISPEC `x'':num#num`) pair_CASES
1060 >> RW_TAC std_ss []
1061 >> RW_TAC std_ss []
1062 >> SPOSE_NOT_THEN STRIP_ASSUME_TAC
1063 >> FULL_SIMP_TAC std_ss [IN_INTER, IN_CROSS, FST, SND, pos_simple_fn_def,DISJOINT_DEF]
1064 >> METIS_TAC [EXTENSION, NOT_IN_EMPTY, IN_INTER])
1065 >> `!i. i IN IMAGE p' (s CROSS s') ==> ((\(i,j). a i INTER b j) o p) i IN measurable_sets m`
1066 by (RW_TAC std_ss [IN_IMAGE]
1067 >> FULL_SIMP_TAC std_ss [o_DEF]
1068 >> (MP_TAC o Q.ISPEC `x':num#num`) pair_CASES
1069 >> RW_TAC std_ss []
1070 >> FULL_SIMP_TAC std_ss [IN_CROSS, FST, SND, pos_simple_fn_def]
1071 >> METIS_TAC [ALGEBRA_INTER, subsets_def, space_def,sigma_algebra_def, measure_space_def])
1072 >> `BIGUNION (IMAGE ((\(i,j). a i INTER b j) o p) (IMAGE p' (s CROSS s'))) = m_space m`
1073 by (RW_TAC std_ss [Once EXTENSION, IN_BIGUNION, IN_IMAGE, IN_CROSS]
1074 >> `!s'' x. (?x'. ((x = p' x') /\ FST x' IN s /\ SND x' IN s')) <=>
1075 (?x1 x2. ((x = p' (x1,x2)) /\ x1 IN s /\ x2 IN s'))`
1076 by METIS_TAC [PAIR, FST, SND]
1077 >> POP_ORW
1078 >> `!s''. (?x. (s'' = (\(i,j). a i INTER b j) (p x)) /\
1079 ?x1 x2. (x = p' (x1,x2)) /\ x1 IN s /\ x2 IN s') <=>
1080 (?x1 x2. (s'' = (\(i,j). a i INTER b j) (p (p' (x1,x2)))) /\ x1 IN s /\ x2 IN s')`
1081 by METIS_TAC []
1082 >> POP_ORW
1083 >> FULL_SIMP_TAC std_ss [o_DEF, IN_CROSS]
1084 >> `!s''. (?x1 x2. (s'' = (\(i,j). a i INTER b j) (p (p' (x1,x2)))) /\ x1 IN s /\ x2 IN s') <=>
1085 (?x1 x2. (s'' = (\(i,j). a i INTER b j) (x1,x2)) /\ x1 IN s /\ x2 IN s')`
1086 by METIS_TAC [FST,SND]
1087 >> POP_ORW
1088 >> RW_TAC std_ss []
1089 >> Suff `(?x1 x2. x' IN a x1 INTER b x2 /\ x1 IN s /\ x2 IN s') <=> x' IN m_space m`
1090 >- METIS_TAC []
1091 >> RW_TAC std_ss [IN_INTER]
1092 >> FULL_SIMP_TAC std_ss [pos_simple_fn_def]
1093 >> `m_space m = (BIGUNION (IMAGE a s)) INTER (BIGUNION (IMAGE b s'))`
1094 by METIS_TAC [INTER_IDEMPOT]
1095 >> POP_ORW
1096 >> Q.PAT_X_ASSUM `BIGUNION (IMAGE b s') = m_space m` (K ALL_TAC)
1097 >> Q.PAT_X_ASSUM `BIGUNION (IMAGE a s) = m_space m` (K ALL_TAC)
1098 >> RW_TAC std_ss [IN_INTER, IN_BIGUNION, IN_IMAGE]
1099 >> METIS_TAC [])
1100 >> `FINITE (s CROSS s')` by RW_TAC std_ss [FINITE_CROSS]
1101 >> `INJ p' (s CROSS s')(IMAGE p' (s CROSS s'))` by METIS_TAC [INJ_IMAGE_BIJ, BIJ_DEF]
1102 >> `FINITE (IMAGE p' (s CROSS s'))` by RW_TAC std_ss [IMAGE_FINITE]
1103 >> FULL_SIMP_TAC std_ss []
1104 >> CONJ_TAC >- METIS_TAC []
1105 >> reverse CONJ_TAC
1106 >- (RW_TAC std_ss [max_def] >> FULL_SIMP_TAC std_ss [IN_IMAGE,IN_CROSS])
1107 >> RW_TAC std_ss []
1108 >- ((MP_TAC o Q.SPEC `(\i. Normal (y i) * indicator_fn (b i) x')` o UNDISCH o
1109 Q.ISPEC `(s' :num -> bool)`) EXTREAL_SUM_IMAGE_IN_IF
1110 >> `!x. (\i. Normal (y i) * indicator_fn (b i) x') x <> NegInf`
1111 by (RW_TAC std_ss [indicator_fn_def,mul_rone,mul_rzero]
1112 >> RW_TAC std_ss [extreal_of_num_def,extreal_not_infty])
1113 >> RW_TAC std_ss []
1114 >> POP_ASSUM (K ALL_TAC)
1115 >> `(\x. (if x IN s' then (\i. Normal (y i) * indicator_fn (b i) x') x else 0)) =
1116 (\x. (if x IN s' then (\i. Normal (y i) *
1117 SIGMA (\j. indicator_fn (a j INTER b i) x') s) x else 0))`
1118 by (RW_TAC std_ss [FUN_EQ_THM]
1119 >> RW_TAC std_ss []
1120 >> FULL_SIMP_TAC std_ss [GSYM AND_IMP_INTRO]
1121 >> (MP_TAC o REWRITE_RULE [Once INTER_COMM] o Q.ISPEC `(b :num -> 'a set) (x'' :num)`
1122 o UNDISCH_ALL o REWRITE_RULE [GSYM AND_IMP_INTRO]
1123 o Q.ISPECL [`(s :num -> bool)`, `m_space (m: 'a m_space)`,
1124 `(a :num -> 'a set)`]) indicator_fn_split
1125 >> Q.PAT_X_ASSUM `!i. i IN s' ==> (b:num->'a->bool) i IN measurable_sets m`
1126 (ASSUME_TAC o UNDISCH o Q.SPEC `x''`)
1127 >> `!a m. measure_space m /\ a IN measurable_sets m ==> a SUBSET m_space m`
1128 by RW_TAC std_ss [measure_space_def, sigma_algebra_def, algebra_def,
1129 subset_class_def, subsets_def, space_def]
1130 >> POP_ASSUM (ASSUME_TAC o UNDISCH_ALL o REWRITE_RULE [GSYM AND_IMP_INTRO] o
1131 Q.ISPECL [`(b :num -> 'a set) (x'' :num)`,
1132 `(m :'a m_space)`])
1133 >> ASM_SIMP_TAC std_ss [])
1134 >> `(\x. if x IN s' then Normal (y x) * indicator_fn (b x) x' else 0) =
1135 (\x. if x IN s' then (\i. Normal (y i) * indicator_fn (b i) x') x else 0)`
1136 by METIS_TAC []
1137 >> POP_ORW
1138 >> POP_ORW
1139 >> `!(x:num) (i:num). Normal (y i) * SIGMA (\j. indicator_fn (a j INTER b i) x') s =
1140 SIGMA (\j. Normal (y i) * indicator_fn (a j INTER b i) x') s`
1141 by (RW_TAC std_ss []
1142 >> (MP_TAC o Q.SPECL [`(\j. indicator_fn (a j INTER (b:num->'a->bool) i) x')`,`y (i:num)`]
1143 o UNDISCH o Q.ISPEC `s:num->bool` o GSYM
1144 o INST_TYPE [alpha |-> ``:num``, beta |-> ``:num``]) EXTREAL_SUM_IMAGE_CMUL
1145 >> `!x. NegInf <> (\j. indicator_fn (a j INTER b i) x') x`
1146 by RW_TAC std_ss [indicator_fn_def,extreal_of_num_def,extreal_not_infty]
1147 >> RW_TAC std_ss [])
1148 >> POP_ORW
1149 >> (MP_TAC o Q.ISPEC `(\n':num. Normal (max (x (FST (p n'))) (y (SND (p n')))) *
1150 indicator_fn ((\(i:num,j:num). a i INTER b j) (p n')) x')`
1151 o UNDISCH o Q.SPEC `p'` o UNDISCH
1152 o (Q.ISPEC `((s:num->bool) CROSS (s':num->bool))`)
1153 o (INST_TYPE [``:'b``|->``:num``])) EXTREAL_SUM_IMAGE_IMAGE
1154 >> `!x''. (\n'. Normal (max (x (FST (p n'))) (y (SND (p n')))) *
1155 indicator_fn ((\(i,j). a i INTER b j) (p n')) x') x'' <> NegInf`
1156 by (RW_TAC std_ss [indicator_fn_def,mul_rone,mul_rzero]
1157 >> RW_TAC std_ss [extreal_of_num_def,extreal_not_infty])
1158 >> RW_TAC std_ss [o_DEF]
1159 >> POP_ASSUM (K ALL_TAC)
1160 >> (MP_TAC o Q.SPEC `(\x''. Normal (max (x (FST ((p :num -> num # num) (p' x''))))
1161 (y (SND (p (p' x''))))) *
1162 indicator_fn ((\(i:num,j:num). a i INTER b j) (p (p' x''))) x')`
1163 o UNDISCH o Q.ISPEC `(s :num set) CROSS (s' :num set)`) EXTREAL_SUM_IMAGE_IN_IF
1164 >> `!x''. (\x''. Normal (max (x (FST (p (p' x'')))) (y (SND (p (p' x''))))) *
1165 indicator_fn ((\(i,j). a i INTER b j) (p (p' x''))) x') x'' <> NegInf`
1166 by (RW_TAC std_ss [indicator_fn_def,mul_rone,mul_rzero]
1167 >> RW_TAC std_ss [extreal_of_num_def,extreal_not_infty])
1168 >> RW_TAC std_ss []
1169 >> NTAC 4 (POP_ASSUM (K ALL_TAC))
1170 >> `!x. (\j. Normal (y x) * indicator_fn (a j INTER b x) x') =
1171 (\x j. Normal (y x) * indicator_fn (a j INTER b x) x') x` by METIS_TAC []
1172 >> POP_ORW
1173 >> `!x. SIGMA ((\x j. Normal (y x) * indicator_fn (a j INTER b x) x') x) s <> NegInf`
1174 by (RW_TAC std_ss []
1175 >> `!j. Normal (y x'') * indicator_fn (a j INTER b x'') x' <> NegInf`
1176 by (RW_TAC std_ss [indicator_fn_def,mul_rone,mul_rzero]
1177 >> RW_TAC std_ss [extreal_of_num_def,extreal_not_infty])
1178 >> FULL_SIMP_TAC std_ss [EXTREAL_SUM_IMAGE_NOT_INFTY])
1179 >> RW_TAC std_ss [EXTREAL_SUM_IMAGE_IF_ELIM]
1180 >> (MP_TAC o Q.SPEC `(\x j. Normal (y x) * indicator_fn (a j INTER b x) x')`
1181 o Q.ISPECL [`s':num->bool`,`s:num->bool`]) EXTREAL_SUM_IMAGE_SUM_IMAGE
1182 >> `!x. NegInf <> (\x j. Normal (y x) * indicator_fn (a j INTER b x) x') (FST x) (SND x)`
1183 by (RW_TAC std_ss [indicator_fn_def,mul_rone,mul_rzero]
1184 >> RW_TAC std_ss [extreal_of_num_def,extreal_not_infty])
1185 >> RW_TAC std_ss []
1186 >> `(s' CROSS s) = IMAGE (\x. (SND x, FST x)) (s CROSS s')`
1187 by (RW_TAC std_ss [Once EXTENSION, IN_CROSS, IN_IMAGE]
1188 >> (MP_TAC o Q.ISPEC `x'':num#num`) pair_CASES
1189 >> RW_TAC std_ss [] >> RW_TAC std_ss [FST,SND]
1190 >> EQ_TAC
1191 >- (STRIP_TAC >> Q.EXISTS_TAC `(r,q)` >> RW_TAC std_ss [FST,SND])
1192 >> RW_TAC std_ss [] >> RW_TAC std_ss [])
1193 >> POP_ORW
1194 >> `INJ (\x. (SND x,FST x)) (s CROSS s') (IMAGE (\x. (SND x,FST x)) (s CROSS s'))`
1195 by (RW_TAC std_ss [INJ_DEF, IN_CROSS, IN_IMAGE]
1196 >- METIS_TAC []
1197 >> (MP_TAC o Q.ISPEC `x'':num#num`) pair_CASES
1198 >> (MP_TAC o Q.ISPEC `x''':num#num`) pair_CASES
1199 >> RW_TAC std_ss []
1200 >> FULL_SIMP_TAC std_ss [FST,SND])
1201 >> (MP_TAC o Q.SPEC `(\x. Normal (y (FST x)) * indicator_fn (a (SND x) INTER b (FST x)) x')`
1202 o UNDISCH o Q.SPEC `(\x. (SND x, FST x))` o UNDISCH
1203 o Q.ISPEC `((s:num->bool) CROSS (s':num->bool))`
1204 o INST_TYPE [``:'b``|->``:num#num``]) EXTREAL_SUM_IMAGE_IMAGE
1205 >> `!x. (\x. Normal (y (FST x)) * indicator_fn (a (SND x) INTER b (FST x)) x') x <> NegInf`
1206 by (RW_TAC std_ss [indicator_fn_def,mul_rone,mul_rzero]
1207 >> RW_TAC std_ss [extreal_of_num_def,extreal_not_infty])
1208 >> RW_TAC std_ss [o_DEF]
1209 >> Suff `!x'''. x''' IN (s CROSS s') ==>
1210 ((\x. Normal (y (SND x)) * indicator_fn (a (FST x) INTER b (SND x)) x') x''' =
1211 (\x''. if x'' IN s CROSS s' then
1212 Normal (max (x (FST x'')) (y (SND x''))) *
1213 indicator_fn ((\ (i,j). a i INTER b j) x'') x'
1214 else 0) x''')`
1215 >- (RW_TAC std_ss []
1216 >> (MATCH_MP_TAC o UNDISCH o Q.ISPEC `(s:num->bool) CROSS (s':num->bool)`)
1217 EXTREAL_SUM_IMAGE_EQ
1218 >> RW_TAC std_ss []
1219 >> DISJ1_TAC
1220 >> RW_TAC std_ss [indicator_fn_def,mul_rone,mul_rzero]
1221 >> RW_TAC std_ss [extreal_of_num_def,extreal_not_infty])
1222 >> RW_TAC std_ss [FUN_EQ_THM]
1223 >> Cases_on `x'''`
1224 >> RW_TAC real_ss [indicator_fn_def,mul_rone,mul_rzero]
1225 >> `q IN s` by METIS_TAC [IN_CROSS,FST,SND]
1226 >> `x' IN (a q)` by METIS_TAC [IN_INTER]
1227 >> `SIGMA (\i. Normal (x i) * indicator_fn (a i) x') s = Normal (x q)`
1228 by (`pos_simple_fn m f s a x` by FULL_SIMP_TAC std_ss [pos_simple_fn_def]
1229 >> METIS_TAC [pos_simple_fn_thm1])
1230 >> `r IN s'` by METIS_TAC [IN_CROSS,FST,SND]
1231 >> `x' IN (b r)` by METIS_TAC [IN_INTER]
1232 >> `SIGMA (\i. Normal (y i) * indicator_fn (b i) x') s' = Normal (y r)`
1233 by (`pos_simple_fn m g s' b y` by FULL_SIMP_TAC std_ss [pos_simple_fn_def]
1234 >> METIS_TAC [pos_simple_fn_thm1])
1235 >> FULL_SIMP_TAC std_ss [extreal_le_def,max_def])
1236 >> (MP_TAC o Q.SPEC `(\i. Normal (x i) * indicator_fn (a i) x')`
1237 o UNDISCH o Q.ISPEC `(s :num -> bool)`) EXTREAL_SUM_IMAGE_IN_IF
1238 >> `!x''. (\i. Normal (x i) * indicator_fn (a i) x') x'' <> NegInf`
1239 by (RW_TAC std_ss [indicator_fn_def,mul_rone,mul_rzero]
1240 >> RW_TAC std_ss [extreal_of_num_def,extreal_not_infty])
1241 >> RW_TAC std_ss []
1242 >> POP_ASSUM (K ALL_TAC)
1243 >> `(\x''. if x'' IN s then Normal (x x'') * indicator_fn (a x'') x' else 0) =
1244 (\x''. if x'' IN s then (\i. Normal (x i) * indicator_fn (a i) x') x'' else 0)`
1245 by METIS_TAC []
1246 >> POP_ORW
1247 >> `(\x''. (if x'' IN s then (\i. Normal (x i) * indicator_fn (a i) x') x'' else 0)) =
1248 (\x''. (if x'' IN s then (\i. Normal (x i) *
1249 SIGMA (\j. indicator_fn (a i INTER b j) x') s') x''
1250 else 0))`
1251 by (RW_TAC std_ss [FUN_EQ_THM]
1252 >> RW_TAC std_ss []
1253 >> FULL_SIMP_TAC std_ss [GSYM AND_IMP_INTRO]
1254 >> (MP_TAC o Q.ISPEC `(a :num -> 'a set) (x'' :num)` o UNDISCH_ALL
1255 o REWRITE_RULE [GSYM AND_IMP_INTRO]
1256 o Q.ISPECL [`(s':num -> bool)`, `m_space (m :'a m_space)`,
1257 `(b :num -> 'a set)`]) indicator_fn_split
1258 >> `a x'' SUBSET m_space m` by METIS_TAC [MEASURE_SPACE_SUBSET_MSPACE]
1259 >> RW_TAC std_ss [])
1260 >> POP_ORW
1261 >> `!(i:num). Normal (x i) * SIGMA (\j. indicator_fn (a i INTER b j) x') s' =
1262 SIGMA (\j. Normal (x i) * indicator_fn (a i INTER b j) x') s'`
1263 by (RW_TAC std_ss []
1264 >> (MP_TAC o
1265 Q.SPECL [`(\j. indicator_fn ((a :num -> 'a set) i INTER b j) x')`, `x (i:num)`] o
1266 UNDISCH o Q.ISPEC `s':num->bool` o GSYM o
1267 INST_TYPE [alpha |-> ``:num``, beta |-> ``:num``]) EXTREAL_SUM_IMAGE_CMUL
1268 >> `!x. NegInf <> (\j. indicator_fn (a i INTER b j) x') x`
1269 by RW_TAC std_ss [indicator_fn_def,extreal_of_num_def,extreal_not_infty]
1270 >> RW_TAC std_ss [])
1271 >> POP_ORW
1272 >> (MP_TAC o Q.ISPEC `(\n':num. Normal (max (x (FST (p n'))) (y (SND (p n')))) *
1273 indicator_fn ((\(i:num,j:num). a i INTER b j) (p n')) x')` o
1274 UNDISCH o Q.SPEC `p'` o UNDISCH o
1275 Q.ISPEC `((s:num->bool) CROSS (s':num->bool))` o
1276 INST_TYPE [``:'b``|->``:num``]) EXTREAL_SUM_IMAGE_IMAGE
1277 >> `!x''. (\n'. Normal (max (x (FST (p n'))) (y (SND (p n')))) *
1278 indicator_fn ((\(i,j). a i INTER b j) (p n')) x') x'' <> NegInf`
1279 by (RW_TAC std_ss [indicator_fn_def,mul_rone,mul_rzero]
1280 >> RW_TAC std_ss [extreal_of_num_def,extreal_not_infty])
1281 >> RW_TAC std_ss [o_DEF]
1282 >> POP_ASSUM (K ALL_TAC)
1283 >> (MP_TAC o Q.SPEC `(\x''. Normal (max (x (FST ((p :num -> num # num) (p' x''))))
1284 (y (SND (p (p' x''))))) *
1285 indicator_fn ((\(i:num,j:num). a i INTER b j) (p (p' x''))) x')`
1286 o UNDISCH o Q.ISPEC `(s :num set) CROSS (s' :num set)`) EXTREAL_SUM_IMAGE_IN_IF
1287 >> `!x''. (\x''. Normal (max (x (FST (p (p' x'')))) (y (SND (p (p' x''))))) *
1288 indicator_fn ((\(i,j). a i INTER b j) (p (p' x''))) x') x'' <> NegInf`
1289 by (RW_TAC std_ss [indicator_fn_def, mul_rone, mul_rzero] \\
1290 RW_TAC std_ss [extreal_of_num_def, extreal_not_infty])
1291 >> RW_TAC std_ss []
1292 >> NTAC 4 (POP_ASSUM (K ALL_TAC))
1293 >> `!x''. (\j. Normal (x x'') * indicator_fn (a x'' INTER b j) x') =
1294 (\x'' j. Normal (x x'') * indicator_fn (a x'' INTER b j) x') x''` by METIS_TAC []
1295 >> POP_ORW
1296 >> `!x''. SIGMA ((\x'' j. Normal (x x'') * indicator_fn (a x'' INTER b j) x') x'') s' <> NegInf`
1297 by (RW_TAC std_ss []
1298 >> `!j. Normal (x x'') * indicator_fn (a x'' INTER b j) x' <> NegInf`
1299 by (RW_TAC std_ss [indicator_fn_def,mul_rone,mul_rzero]
1300 >> RW_TAC std_ss [extreal_of_num_def,extreal_not_infty])
1301 >> FULL_SIMP_TAC std_ss [EXTREAL_SUM_IMAGE_NOT_INFTY])
1302 >> RW_TAC std_ss [EXTREAL_SUM_IMAGE_IF_ELIM]
1303 >> (MP_TAC o Q.SPEC `(\x'' j. Normal (x x'') * indicator_fn (a x'' INTER b j) x')`
1304 o Q.ISPECL [`s:num->bool`,`s':num->bool`]) EXTREAL_SUM_IMAGE_SUM_IMAGE
1305 >> `!x''. NegInf <> (\x'' j. Normal (x x'') * indicator_fn (a x'' INTER b j) x') (FST x'') (SND x'')`
1306 by (RW_TAC std_ss [indicator_fn_def,mul_rone,mul_rzero]
1307 >> RW_TAC std_ss [extreal_of_num_def,extreal_not_infty])
1308 >> RW_TAC std_ss []
1309 >> Suff `!x'''. x''' IN (s CROSS s') ==>
1310 ((\x''. Normal (x (FST x'')) * indicator_fn (a (FST x'') INTER b (SND x'')) x') x''' =
1311 (\x''. if x'' IN s CROSS s' then Normal (max (x (FST x'')) (y (SND x''))) *
1312 indicator_fn ((\(i,j). a i INTER b j) x'') x'
1313 else 0) x''')`
1314 >- (RW_TAC std_ss []
1315 >> (MATCH_MP_TAC o UNDISCH o Q.ISPEC `(s:num->bool) CROSS (s':num->bool)`) EXTREAL_SUM_IMAGE_EQ
1316 >> RW_TAC std_ss []
1317 >> DISJ1_TAC
1318 >> RW_TAC std_ss [indicator_fn_def,mul_rone,mul_rzero]
1319 >> RW_TAC std_ss [extreal_of_num_def,extreal_not_infty])
1320 >> RW_TAC std_ss [FUN_EQ_THM]
1321 >> Cases_on `x'''`
1322 >> RW_TAC real_ss [indicator_fn_def,mul_rone,mul_rzero]
1323 >> `q IN s` by METIS_TAC [IN_CROSS,FST,SND]
1324 >> `x' IN (a q)` by METIS_TAC [IN_INTER]
1325 >> `SIGMA (\i. Normal (x i) * indicator_fn (a i) x') s = Normal (x q)`
1326 by (`pos_simple_fn m f s a x` by FULL_SIMP_TAC std_ss [pos_simple_fn_def]
1327 >> METIS_TAC [pos_simple_fn_thm1])
1328 >> `r IN s'` by METIS_TAC [IN_CROSS,FST,SND]
1329 >> `x' IN (b r)` by METIS_TAC [IN_INTER]
1330 >> `SIGMA (\i. Normal (y i) * indicator_fn (b i) x') s' = Normal (y r)`
1331 by (`pos_simple_fn m g s' b y` by FULL_SIMP_TAC std_ss [pos_simple_fn_def]
1332 >> METIS_TAC [pos_simple_fn_thm1])
1333 >> FULL_SIMP_TAC std_ss [extreal_le_def,max_def]
1334QED
1335
1336Theorem pos_simple_fn_not_infty:
1337 !m f s a x. pos_simple_fn m f s a x ==>
1338 !x. x IN m_space m ==> f x <> NegInf /\ f x <> PosInf
1339Proof
1340 RW_TAC std_ss [pos_simple_fn_def]
1341 >> `(!i. i IN s ==> (\i. Normal (x i) * indicator_fn (a i) x') i <> NegInf)`
1342 by (RW_TAC std_ss [indicator_fn_def, mul_rzero, mul_rone] \\
1343 RW_TAC std_ss [extreal_of_num_def, extreal_not_infty])
1344 >> `(!i. i IN s ==> (\i. Normal (x i) * indicator_fn (a i) x') i <> PosInf)`
1345 by (RW_TAC std_ss [indicator_fn_def, mul_rzero, mul_rone] \\
1346 RW_TAC std_ss [extreal_of_num_def, extreal_not_infty])
1347 >> FULL_SIMP_TAC std_ss [EXTREAL_SUM_IMAGE_NOT_INFTY]
1348QED
1349
1350(* ************************************************************************* *)
1351(* Properties of Integrals of Positive Simple Functions *)
1352(* ************************************************************************* *)
1353
1354Theorem pos_simple_fn_integral_add :
1355 !m f (s :num -> bool) a x
1356 g (s':num -> bool) b y. measure_space m /\
1357 pos_simple_fn m f s a x /\
1358 pos_simple_fn m g s' b y ==>
1359 ?s'' c z. pos_simple_fn m (\x. f x + g x) s'' c z /\
1360 (pos_simple_fn_integral m s a x +
1361 pos_simple_fn_integral m s' b y =
1362 pos_simple_fn_integral m s'' c z)
1363Proof
1364 rpt STRIP_TAC
1365 >> (MP_TAC o Q.SPECL [`m`,`f`,`s`,`a`,`x`,`g`,`s'`,`b`,`y`]) pos_simple_fn_integral_present
1366 >> RW_TAC std_ss [] >> ASM_SIMP_TAC std_ss []
1367 >> qexistsl_tac [`k`, `c`, `\i. z i + z' i`]
1368 >> FULL_SIMP_TAC std_ss [pos_simple_fn_def, pos_simple_fn_integral_def]
1369 >> reverse CONJ_TAC
1370 >- (RW_TAC std_ss [GSYM extreal_add_def] \\
1371 `!i. i IN k ==> Normal (z i) <> NegInf /\ Normal (z' i) <> NegInf /\
1372 0 <= Normal (z i) /\ 0 <= Normal (z' i)`
1373 by METIS_TAC [extreal_not_infty, extreal_of_num_def, extreal_le_def] \\
1374 `!i. i IN k ==> (\i. (Normal (z i) + Normal (z' i)) * measure m (c i)) i <> NegInf`
1375 by METIS_TAC [extreal_add_def, mul_not_infty, positive_not_infty, measure_space_def,
1376 REAL_LE_ADD] \\
1377 (MP_TAC o Q.SPEC `\i:num. (Normal (z i) + Normal (z' i)) * measure m (c i)`
1378 o UNDISCH o Q.ISPEC `k:num->bool`) EXTREAL_SUM_IMAGE_IN_IF \\
1379 RW_TAC std_ss [add_rdistrib] \\
1380 (MP_TAC o Q.SPEC `\x. Normal (z x) * measure m (c x) + Normal (z' x) * measure m (c x)`
1381 o UNDISCH o Q.ISPEC `k:num->bool` o GSYM) EXTREAL_SUM_IMAGE_IN_IF \\
1382 `!x. x IN k ==> NegInf <>
1383 (\x. Normal (z x) * measure m (c x) + Normal (z' x) * measure m (c x)) x`
1384 by METIS_TAC [extreal_add_def, mul_not_infty, positive_not_infty, measure_space_def,
1385 REAL_LE_ADD, add_not_infty] \\
1386 RW_TAC std_ss [] \\
1387 `(\x. Normal (z x) * measure m (c x) + Normal (z' x) * measure m (c x)) =
1388 (\x. (\x. Normal (z x) * measure m (c x)) x + (\x. Normal (z' x) * measure m (c x)) x)`
1389 by METIS_TAC [] >> POP_ORW \\
1390 (MATCH_MP_TAC o UNDISCH o Q.ISPEC `k:num->bool` o GSYM) EXTREAL_SUM_IMAGE_ADD \\
1391 DISJ1_TAC \\
1392 METIS_TAC [mul_not_infty, positive_not_infty, measure_space_def, extreal_not_infty])
1393 (* applying le_add *)
1394 >> CONJ_TAC >- (Q.X_GEN_TAC `t` >> STRIP_TAC \\
1395 MATCH_MP_TAC le_add >> METIS_TAC [])
1396 (* applying REAL_LE_ADD *)
1397 >> reverse CONJ_TAC
1398 >- (rpt STRIP_TAC >> MATCH_MP_TAC REAL_LE_ADD >> PROVE_TAC [])
1399 >> RW_TAC std_ss [GSYM extreal_add_def]
1400 >> `!i. i IN k ==> Normal (z i) <> NegInf /\ Normal (z' i) <> NegInf /\
1401 0 <= Normal (z i) /\ 0 <= Normal (z' i)`
1402 by METIS_TAC [extreal_not_infty, extreal_of_num_def, extreal_le_def]
1403 >> `!i. i IN k ==> (\i. (Normal (z i) + Normal (z' i)) * indicator_fn (c i) x') i <> NegInf`
1404 by METIS_TAC [extreal_add_def, indicator_fn_def, mul_rzero, mul_rone, extreal_of_num_def,
1405 extreal_not_infty]
1406 >> (MP_TAC o Q.SPEC `(\i:num. (Normal (z i) + Normal (z' i)) * indicator_fn (c i) x')`
1407 o UNDISCH o Q.ISPEC `k:num->bool`) EXTREAL_SUM_IMAGE_IN_IF
1408 >> RW_TAC std_ss [add_rdistrib]
1409 >> (MP_TAC o Q.SPEC `(\x. Normal (z x) * indicator_fn (c x) x' + Normal (z' x) * indicator_fn (c x) x')`
1410 o UNDISCH o Q.ISPEC `k:num->bool` o GSYM) EXTREAL_SUM_IMAGE_IN_IF
1411 >> `!x. x IN k ==> NegInf <>
1412 (\x. Normal (z x) * indicator_fn (c x) x' + Normal (z' x) * indicator_fn (c x) x') x`
1413 by (RW_TAC std_ss [extreal_add_def, indicator_fn_def, mul_rzero, mul_rone, add_rzero] \\
1414 METIS_TAC [extreal_of_num_def, extreal_not_infty])
1415 >> RW_TAC std_ss []
1416 >> `(\x. Normal (z x) * indicator_fn (c x) x' + Normal (z' x) * indicator_fn (c x) x') =
1417 (\x. (\x. Normal (z x) * indicator_fn (c x) x') x + (\x. Normal (z' x) * indicator_fn (c x) x') x)`
1418 by METIS_TAC [] >> POP_ORW
1419 >> (MP_TAC o Q.SPECL [`\x:num. Normal (z x) * indicator_fn (c x) x'`,
1420 `\x:num. Normal (z' x) * indicator_fn (c x) x'`]
1421 o UNDISCH o Q.ISPEC `k:num->bool` o GSYM) EXTREAL_SUM_IMAGE_ADD
1422 >> `!x:num. x IN k ==> NegInf <> (\x:num. Normal (z x) * indicator_fn (c x) x') x /\
1423 NegInf <> (\x:num. Normal (z' x) * indicator_fn (c x) x') x`
1424 by (RW_TAC std_ss [indicator_fn_def, mul_rone, mul_rzero, add_rzero] \\
1425 METIS_TAC [extreal_of_num_def, extreal_not_infty])
1426 >> METIS_TAC []
1427QED
1428
1429Theorem pos_simple_fn_integral_add_alt :
1430 !m f s a x g y. measure_space m /\
1431 pos_simple_fn m f s a x /\ pos_simple_fn m g s a y ==>
1432 (pos_simple_fn_integral m s a x +
1433 pos_simple_fn_integral m s a y =
1434 pos_simple_fn_integral m s a (\i. x i + y i))
1435Proof
1436 RW_TAC std_ss [pos_simple_fn_def, pos_simple_fn_integral_def, GSYM extreal_add_def]
1437 >> `!i. i IN s ==> Normal (x i) <> NegInf /\ Normal (y i) <> NegInf /\
1438 0 <= Normal (x i) /\ 0 <= Normal (y i)`
1439 by METIS_TAC [extreal_not_infty,extreal_of_num_def,extreal_le_def]
1440 >> `!i. i IN s ==> (\i. (Normal (x i) + Normal (y i)) * measure m (a i)) i <> NegInf`
1441 by METIS_TAC [extreal_add_def,mul_not_infty,positive_not_infty,measure_space_def,REAL_LE_ADD]
1442 >> (MP_TAC o Q.SPEC `(\i:num. (Normal (x i) + Normal (y i)) * measure m (a i))`
1443 o UNDISCH o Q.ISPEC `s:num->bool`) EXTREAL_SUM_IMAGE_IN_IF
1444 >> RW_TAC std_ss [add_rdistrib]
1445 >> (MP_TAC o Q.SPEC `(\i. Normal (x i) * measure m (a i) + Normal (y i) * measure m (a i))`
1446 o UNDISCH o Q.ISPEC `s:num->bool` o GSYM) EXTREAL_SUM_IMAGE_IN_IF
1447 >> `!i. i IN s ==> NegInf <> (\i. Normal (x i) * measure m (a i) + Normal (y i) * measure m (a i)) i`
1448 by METIS_TAC [extreal_add_def, mul_not_infty, positive_not_infty, measure_space_def,
1449 REAL_LE_ADD, add_not_infty]
1450 >> RW_TAC std_ss []
1451 >> `(\i. Normal (x i) * measure m (a i) + Normal (y i) * measure m (a i)) =
1452 (\i. (\i. Normal (x i) * measure m (a i)) i + (\i. Normal (y i) * measure m (a i)) i)`
1453 by METIS_TAC []
1454 >> POP_ORW
1455 >> (MATCH_MP_TAC o UNDISCH o Q.ISPEC `s:num->bool` o GSYM) EXTREAL_SUM_IMAGE_ADD
1456 >> DISJ1_TAC
1457 >> METIS_TAC [mul_not_infty, positive_not_infty, measure_space_def, extreal_not_infty]
1458QED
1459
1460Theorem psfis_add :
1461 !m f g a b. measure_space m /\ a IN psfis m f /\ b IN psfis m g ==>
1462 (a + b) IN psfis m (\x. f x + g x)
1463Proof
1464 RW_TAC std_ss [psfis_def, IN_IMAGE, psfs_def, GSPECIFICATION]
1465 >> rename1 `(x,T) = (\(s,a,x). ((s,a,x),pos_simple_fn m f s a x)) f1`
1466 >> rename1 `(y,T) = (\(s,a,x). ((s,a,x),pos_simple_fn m g s a x)) f2`
1467 >> Cases_on `f1` >> Cases_on `r`
1468 >> rename1 `(x,T) = (\(s,a,x). ((s,a,x),pos_simple_fn m f s a x)) (s0,a0,x0)`
1469 >> Cases_on `f2` >> Cases_on `r`
1470 >> rename1 `(y,T) = (\(s,a,x). ((s,a,x),pos_simple_fn m g s a x)) (s1,a1,x1)`
1471 >> fs []
1472 >> Suff `?s a x. (pos_simple_fn_integral m s0 a0 x0 +
1473 pos_simple_fn_integral m s1 a1 x1 =
1474 pos_simple_fn_integral m s a x) /\ pos_simple_fn m (\x. f x + g x) s a x`
1475 >- (RW_TAC std_ss [] >> Q.EXISTS_TAC `(s,a,x)` \\
1476 RW_TAC std_ss [] >> Q.EXISTS_TAC `(s,a,x)` \\
1477 RW_TAC std_ss [PAIR_EQ])
1478 >> ONCE_REWRITE_TAC [CONJ_COMM]
1479 >> MATCH_MP_TAC pos_simple_fn_integral_add
1480 >> RW_TAC std_ss []
1481QED
1482
1483Theorem pos_simple_fn_integral_mono :
1484 !m f (s :num->bool) a x
1485 g (s':num->bool) b y.
1486 measure_space m /\ pos_simple_fn m f s a x /\ pos_simple_fn m g s' b y /\
1487 (!x. x IN m_space m ==> f x <= g x) ==>
1488 pos_simple_fn_integral m s a x <= pos_simple_fn_integral m s' b y
1489Proof
1490 rpt STRIP_TAC
1491 >> (MP_TAC o Q.SPECL [`m`,`f`,`s`,`a`,`x`,`g`,`s'`,`b`,`y`]) pos_simple_fn_integral_present
1492 >> RW_TAC std_ss [] >> ASM_SIMP_TAC std_ss []
1493 >> RW_TAC std_ss [pos_simple_fn_integral_def]
1494 >> (MATCH_MP_TAC o UNDISCH o Q.ISPEC `k:num->bool`) EXTREAL_SUM_IMAGE_MONO
1495 >> RW_TAC std_ss []
1496 >- (DISJ1_TAC \\
1497 RW_TAC std_ss [] \\
1498 `measure m (c x') <> NegInf` by METIS_TAC [measure_space_def, positive_not_infty] \\
1499 Cases_on `measure m (c x')` >> RW_TAC std_ss [extreal_mul_def, extreal_not_infty] \\
1500 METIS_TAC [real_lte, REAL_LE_ANTISYM])
1501 >> Cases_on `c x' = {}`
1502 >- RW_TAC real_ss [MEASURE_EMPTY, mul_rzero, le_refl]
1503 >> `pos_simple_fn m f k c z`
1504 by (FULL_SIMP_TAC std_ss [pos_simple_fn_def] >> METIS_TAC [])
1505 >> `pos_simple_fn m g k c z'`
1506 by (FULL_SIMP_TAC std_ss [pos_simple_fn_def] >> METIS_TAC [])
1507 >> `?t. t IN c x'` by METIS_TAC [CHOICE_DEF]
1508 >> `f t = Normal (z x')` by METIS_TAC [pos_simple_fn_thm1]
1509 >> `g t = Normal (z' x')` by METIS_TAC [pos_simple_fn_thm1]
1510 >> `Normal (z x') <= Normal (z' x')` by METIS_TAC [MEASURE_SPACE_SUBSET_MSPACE, SUBSET_DEF]
1511 >> Cases_on `measure m (c x') = 0` >- RW_TAC std_ss [mul_rzero,le_refl]
1512 >> MATCH_MP_TAC le_rmul_imp
1513 >> RW_TAC std_ss []
1514 >> METIS_TAC [MEASURE_SPACE_POSITIVE, positive_def, lt_le]
1515QED
1516
1517Theorem psfis_mono:
1518 !m f g a b. measure_space m /\ a IN psfis m f /\ b IN psfis m g /\
1519 (!x. x IN m_space m ==> f x <= g x) ==> a <= b
1520Proof
1521 RW_TAC std_ss [psfis_def, IN_IMAGE, psfs_def, GSPECIFICATION]
1522 >> Cases_on `x'` >> Cases_on `x` >> Cases_on `x''` >> Cases_on `x'''`
1523 >> Cases_on `r'` >> Cases_on `r` >> Cases_on `r''` >> Cases_on `r'''`
1524 >> RW_TAC std_ss []
1525 >> FULL_SIMP_TAC std_ss [PAIR_EQ]
1526 >> MATCH_MP_TAC pos_simple_fn_integral_mono
1527 >> METIS_TAC []
1528QED
1529
1530Theorem pos_simple_fn_integral_unique:
1531 !m f (s:num->bool) a x (s':num->bool) b y.
1532 measure_space m /\ pos_simple_fn m f s a x /\ pos_simple_fn m f s' b y ==>
1533 (pos_simple_fn_integral m s a x = pos_simple_fn_integral m s' b y)
1534Proof
1535 METIS_TAC [le_antisym, le_refl, pos_simple_fn_integral_mono]
1536QED
1537
1538Theorem psfis_unique:
1539 !m f a b. measure_space m /\ a IN psfis m f /\ b IN psfis m f ==> (a = b)
1540Proof
1541 METIS_TAC [le_antisym, le_refl, psfis_mono]
1542QED
1543
1544Theorem pos_simple_fn_integral_indicator:
1545 !m A. measure_space m /\ A IN measurable_sets m ==>
1546 ?s a x. pos_simple_fn m (indicator_fn A) s a x /\
1547 (pos_simple_fn_integral m s a x = measure m A)
1548Proof
1549 RW_TAC std_ss []
1550 >> Q.EXISTS_TAC `{0;1}`
1551 >> Q.EXISTS_TAC `\i. if i = 0 then m_space m DIFF A else A`
1552 >> Q.EXISTS_TAC `\i. if i = 0 then 0 else 1`
1553 >> RW_TAC std_ss [pos_simple_fn_indicator_alt, pos_simple_fn_integral_def]
1554 >> (MP_TAC o Q.SPEC `0:num` o REWRITE_RULE [FINITE_SING]
1555 o Q.ISPECL [`(\i:num. Normal (if i = 0 then 0 else 1) *
1556 measure m (if i = 0 then m_space m DIFF A else A))`,`{1:num}`])
1557 EXTREAL_SUM_IMAGE_PROPERTY
1558 >> `!x:num. x IN {0; 1} ==> (\i. Normal (if i = 0 then 0 else 1) *
1559 measure m (if i = 0 then m_space m DIFF A else A)) x <> NegInf`
1560 by (RW_TAC std_ss [GSYM extreal_of_num_def, mul_lzero, mul_lone] \\
1561 METIS_TAC [extreal_of_num_def, extreal_not_infty, positive_not_infty,
1562 MEASURE_SPACE_POSITIVE])
1563 >> RW_TAC std_ss [GSYM extreal_of_num_def,mul_lzero,add_lzero]
1564 >> `{1:num} DELETE 0 = {1}`
1565 by RW_TAC real_ss [Once EXTENSION, IN_SING, IN_DELETE]
1566 >> RW_TAC std_ss [EXTREAL_SUM_IMAGE_SING, GSYM extreal_of_num_def, mul_lone]
1567QED
1568
1569Theorem psfis_indicator:
1570 !m A. measure_space m /\ A IN measurable_sets m ==>
1571 measure m A IN psfis m (indicator_fn A)
1572Proof
1573 RW_TAC std_ss [psfis_def, IN_IMAGE, psfs_def, GSPECIFICATION]
1574 >> Suff `?s a x. pos_simple_fn m (indicator_fn A) s a x /\
1575 (pos_simple_fn_integral m s a x = measure m A)`
1576 >- (RW_TAC std_ss [] >> Q.EXISTS_TAC `(s,a,x)` \\
1577 RW_TAC std_ss [] >> Q.EXISTS_TAC `(s,a,x)` \\
1578 RW_TAC std_ss [PAIR_EQ])
1579 >> MATCH_MP_TAC pos_simple_fn_integral_indicator
1580 >> ASM_REWRITE_TAC []
1581QED
1582
1583Theorem pos_simple_fn_integral_cmul:
1584 !m f s a x z.
1585 measure_space m /\ pos_simple_fn m f s a x /\ 0 <= z ==>
1586 (pos_simple_fn m (\x. Normal z * f x) s a (\i. z * x i) /\
1587 (pos_simple_fn_integral m s a (\i. z * x i) =
1588 Normal z * pos_simple_fn_integral m s a x))
1589Proof
1590 RW_TAC std_ss [pos_simple_fn_integral_def, pos_simple_fn_def, REAL_LE_MUL,
1591 GSYM extreal_mul_def]
1592 >| [ (* goal 1 *)
1593 METIS_TAC [le_mul, extreal_le_def, extreal_of_num_def],
1594 (* goal 2 *)
1595 `(\i. Normal z * Normal (x i) * indicator_fn (a i) x') =
1596 (\i. Normal z * (\i. Normal (x i) * indicator_fn (a i) x') i)`
1597 by METIS_TAC [mul_assoc] >> POP_ORW \\
1598 (MATCH_MP_TAC o UNDISCH o Q.ISPEC `s:num->bool` o GSYM) EXTREAL_SUM_IMAGE_CMUL \\
1599 DISJ1_TAC \\
1600 RW_TAC std_ss [indicator_fn_def, mul_rone, mul_rzero] \\
1601 RW_TAC std_ss [extreal_of_num_def, extreal_not_infty],
1602 (* goal 3 *)
1603 `(\i. Normal z * Normal (x i) * measure m (a i)) =
1604 (\i. Normal z * (\i. Normal (x i) * measure m (a i)) i)` by METIS_TAC [mul_assoc] \\
1605 POP_ORW \\
1606 (MATCH_MP_TAC o UNDISCH o Q.ISPEC `s:num->bool`) EXTREAL_SUM_IMAGE_CMUL \\
1607 DISJ1_TAC \\
1608 RW_TAC std_ss [] \\
1609 METIS_TAC [mul_not_infty, positive_not_infty, MEASURE_SPACE_POSITIVE] ]
1610QED
1611
1612Theorem psfis_cmul:
1613 !m f a z. measure_space m /\ a IN psfis m f /\ 0 <= z ==>
1614 Normal z * a IN psfis m (\x. Normal z * f x)
1615Proof
1616 RW_TAC std_ss [psfis_def, IN_IMAGE, psfs_def, GSPECIFICATION]
1617 >> Cases_on `x'`
1618 >> Cases_on `r`
1619 >> FULL_SIMP_TAC std_ss [PAIR_EQ]
1620 >> Q.EXISTS_TAC `(q,q',(\i. z * r' i))`
1621 >> RW_TAC std_ss []
1622 >- METIS_TAC [pos_simple_fn_integral_cmul]
1623 >> Q.EXISTS_TAC `(q,q',(\i. z * r' i))`
1624 >> RW_TAC std_ss []
1625 >> METIS_TAC [pos_simple_fn_integral_cmul]
1626QED
1627
1628Theorem pos_simple_fn_integral_cmul_alt:
1629 !m f s a x z. measure_space m /\ 0 <= z /\ pos_simple_fn m f s a x ==>
1630 ?s' a' x'. (pos_simple_fn m (\t. Normal z * f t) s' a' x') /\
1631 (pos_simple_fn_integral m s' a' x' = Normal z * pos_simple_fn_integral m s a x)
1632Proof
1633 RW_TAC real_ss []
1634 >> Q.EXISTS_TAC `s`
1635 >> Q.EXISTS_TAC `a`
1636 >> Q.EXISTS_TAC `(\i. z * x i)`
1637 >> RW_TAC std_ss [pos_simple_fn_cmul_alt]
1638 >> FULL_SIMP_TAC real_ss [pos_simple_fn_integral_def, pos_simple_fn_def, mul_assoc,
1639 GSYM extreal_mul_def]
1640 >> `(\i. Normal z * Normal (x i) * measure m (a i)) =
1641 (\j. Normal z * (\i. Normal (x i) * measure m (a i)) j)`
1642 by RW_TAC std_ss [FUN_EQ_THM,mul_assoc]
1643 >> POP_ORW
1644 >> (MATCH_MP_TAC o UNDISCH o Q.ISPEC `s:num->bool`) EXTREAL_SUM_IMAGE_CMUL
1645 >> DISJ1_TAC
1646 >> METIS_TAC [mul_not_infty, extreal_not_infty, positive_not_infty, MEASURE_SPACE_POSITIVE]
1647QED
1648
1649Theorem IN_psfis:
1650 !m r f. r IN psfis m f ==>
1651 ?s a x. pos_simple_fn m f s a x /\ (r = pos_simple_fn_integral m s a x)
1652Proof
1653 RW_TAC std_ss [psfis_def, IN_IMAGE, psfs_def, GSPECIFICATION]
1654 >> Cases_on `x'`>> Cases_on `x` >> Cases_on `r` >> Cases_on `r'`
1655 >> RW_TAC std_ss []
1656 >> FULL_SIMP_TAC std_ss [PAIR_EQ]
1657 >> METIS_TAC []
1658QED
1659
1660Theorem IN_psfis_eq:
1661 !m r f. r IN psfis m f <=>
1662 ?s a x. pos_simple_fn m f s a x /\ (r = pos_simple_fn_integral m s a x)
1663Proof
1664 RW_TAC std_ss []
1665 >> EQ_TAC >- RW_TAC std_ss [IN_psfis]
1666 >> RW_TAC std_ss [psfis_def,psfs_def,IN_IMAGE,GSPECIFICATION]
1667 >> Q.EXISTS_TAC `(s,a,x)`
1668 >> RW_TAC std_ss []
1669 >> Q.EXISTS_TAC `(s,a,x)`
1670 >> RW_TAC std_ss []
1671QED
1672
1673Theorem psfis_pos:
1674 !m f a. measure_space m /\ a IN psfis m f ==> (!x. x IN m_space m ==> 0 <= f x)
1675Proof
1676 RW_TAC std_ss [psfis_def, IN_IMAGE, psfs_def, GSPECIFICATION]
1677 >> Cases_on `x'`
1678 >> Cases_on `r`
1679 >> FULL_SIMP_TAC std_ss [PAIR_EQ, pos_simple_fn_def]
1680 >> MATCH_MP_TAC EXTREAL_SUM_IMAGE_POS
1681 >> RW_TAC std_ss [indicator_fn_def, mul_rzero, mul_rone, le_refl]
1682 >> RW_TAC std_ss [extreal_of_num_def, extreal_le_def]
1683QED
1684
1685Theorem pos_simple_fn_integral_zero:
1686 !m s a x. measure_space m /\ pos_simple_fn m (\t. 0) s a x ==>
1687 (pos_simple_fn_integral m s a x = 0)
1688Proof
1689 RW_TAC std_ss []
1690 >> `pos_simple_fn m (\t. 0) {1:num} (\i:num. if i=1 then (m_space m) else {}) (\i:num. 0) /\
1691 (pos_simple_fn_integral m {1:num} (\i:num. if i=1 then (m_space m) else {}) (\i:num. 0) = 0)`
1692 by RW_TAC real_ss [pos_simple_fn_integral_def, pos_simple_fn_def,
1693 FINITE_SING, EXTREAL_SUM_IMAGE_SING, EXTREAL_SUM_IMAGE_SING,
1694 IMAGE_SING, BIGUNION_SING, IN_SING, MEASURE_SPACE_MSPACE_MEASURABLE,
1695 GSYM extreal_of_num_def, mul_lzero, le_refl]
1696 >> METIS_TAC [pos_simple_fn_integral_unique]
1697QED
1698
1699(* added missing quantifier (g) *)
1700Theorem pos_simple_fn_integral_zero_alt:
1701 !m g s a x. measure_space m /\ pos_simple_fn m g s a x /\ (!x. x IN m_space m ==> (g x = 0))
1702 ==> (pos_simple_fn_integral m s a x = 0)
1703Proof
1704 RW_TAC std_ss [pos_simple_fn_integral_def]
1705 >> MATCH_MP_TAC EXTREAL_SUM_IMAGE_0
1706 >> CONJ_TAC >- FULL_SIMP_TAC std_ss [pos_simple_fn_def]
1707 >> RW_TAC std_ss []
1708 >> Cases_on `a x' = {}` >- FULL_SIMP_TAC std_ss [MEASURE_EMPTY,mul_rzero]
1709 >> Suff `Normal (x x') = 0` >- FULL_SIMP_TAC std_ss [mul_lzero]
1710 >> `?y. y IN a x'` by METIS_TAC [CHOICE_DEF]
1711 >> METIS_TAC [pos_simple_fn_thm1, MEASURE_SPACE_SUBSET_MSPACE, pos_simple_fn_def, SUBSET_DEF]
1712QED
1713
1714Theorem psfis_zero: !m a. measure_space m ==> ((a IN psfis m (\x. 0)) <=> (a = 0))
1715Proof
1716 RW_TAC std_ss []
1717 >> EQ_TAC >- METIS_TAC [IN_psfis_eq, pos_simple_fn_integral_zero]
1718 >> RW_TAC std_ss [IN_psfis_eq]
1719 >> Q.EXISTS_TAC `{1}`
1720 >> Q.EXISTS_TAC `(\i. m_space m)`
1721 >> Q.EXISTS_TAC `(\i. 0)`
1722 >> RW_TAC real_ss [pos_simple_fn_integral_def, pos_simple_fn_def, FINITE_SING,
1723 EXTREAL_SUM_IMAGE_SING, REAL_SUM_IMAGE_SING, IMAGE_SING, BIGUNION_SING,
1724 IN_SING, MEASURE_SPACE_MSPACE_MEASURABLE, mul_lzero,
1725 GSYM extreal_of_num_def, le_refl]
1726QED
1727
1728Theorem pos_simple_fn_integral_not_infty:
1729 !m f s a x. measure_space m /\ pos_simple_fn m f s a x
1730 ==> pos_simple_fn_integral m s a x <> NegInf
1731Proof
1732 RW_TAC std_ss [pos_simple_fn_integral_def,pos_simple_fn_def]
1733 >> Suff `!i. i IN s ==> (\i. Normal (x i) * measure m (a i)) i <> NegInf`
1734 >- FULL_SIMP_TAC std_ss [EXTREAL_SUM_IMAGE_NOT_INFTY]
1735 >> METIS_TAC [mul_not_infty, extreal_le_def, extreal_of_num_def, positive_not_infty,
1736 MEASURE_SPACE_POSITIVE]
1737QED
1738
1739Theorem psfis_not_infty: !m f a. measure_space m /\ a IN psfis m f ==> a <> NegInf
1740Proof
1741 METIS_TAC [IN_psfis_eq, pos_simple_fn_integral_not_infty]
1742QED
1743
1744Theorem pos_simple_fn_integral_sum:
1745 !m f s a x P. measure_space m /\
1746 (!i. i IN P ==> pos_simple_fn m (f i) s a (x i)) /\
1747 (!i t. i IN P ==> f i t <> NegInf) /\ FINITE P /\ P <> {} ==>
1748 (pos_simple_fn m (\t. SIGMA (\i. f i t) P) s a (\i. SIGMA (\j. x j i) P) /\
1749 (pos_simple_fn_integral m s a (\j. SIGMA (\i. x i j) P) =
1750 SIGMA (\i. pos_simple_fn_integral m s a (x i)) P))
1751Proof
1752 Suff `!P:'b->bool. FINITE P ==>
1753 (\P:'b->bool. !m f s a x. measure_space m /\
1754 (!i. i IN P ==> pos_simple_fn m (f i) s a (x i)) /\
1755 (!i t. i IN P ==> f i t <> NegInf) /\ P <> {} ==>
1756 (pos_simple_fn m (\t. SIGMA (\i. f i t) P) s a (\i. SIGMA (\j. x j i) P) /\
1757 (pos_simple_fn_integral m s a (\j. SIGMA (\i. x i j) P) =
1758 SIGMA (\i. pos_simple_fn_integral m s a (x i)) P))) P`
1759 >- METIS_TAC []
1760 >> MATCH_MP_TAC FINITE_INDUCT
1761 >> CONJ_TAC
1762 >- RW_TAC std_ss [NOT_IN_EMPTY,EXTREAL_SUM_IMAGE_EMPTY,REAL_SUM_IMAGE_THM]
1763 >> RW_TAC std_ss [REAL_SUM_IMAGE_THM,DELETE_NON_ELEMENT]
1764 >- (`(\t. SIGMA (\i. f i t) (e INSERT s)) = (\t. f e t + (\t. SIGMA (\i. f i t) s) t)`
1765 by (RW_TAC std_ss [FUN_EQ_THM]
1766 >> (MP_TAC o UNDISCH o Q.SPECL [`(\i. f i t)`,`s`] o INST_TYPE [alpha |-> beta])
1767 EXTREAL_SUM_IMAGE_PROPERTY
1768 >> FULL_SIMP_TAC std_ss [DELETE_NON_ELEMENT]) >> POP_ORW \\
1769 `(\i. x e i + SIGMA (\j. x j i) s) = (\i. x e i + (\i. SIGMA (\j. x j i) s) i)`
1770 by METIS_TAC [] >> POP_ORW \\
1771 MATCH_MP_TAC pos_simple_fn_add_alt \\
1772 RW_TAC std_ss [] >- METIS_TAC [IN_INSERT] \\
1773 Q.PAT_X_ASSUM `!m f s' a x. Q` (MP_TAC o Q.SPECL [`m`,`f`,`s'`,`a`,`x`]) \\
1774 RW_TAC std_ss [] \\
1775 Cases_on `s <> {}` >- METIS_TAC [IN_INSERT] \\
1776 FULL_SIMP_TAC real_ss [EXTREAL_SUM_IMAGE_EMPTY, REAL_SUM_IMAGE_THM, pos_simple_fn_def,
1777 IN_SING, le_refl, GSYM extreal_of_num_def, mul_lzero,
1778 EXTREAL_SUM_IMAGE_0])
1779 >> (MP_TAC o Q.SPEC `e` o UNDISCH o Q.SPEC `s`
1780 o Q.SPEC `(\i. pos_simple_fn_integral m s' a (x i))`
1781 o INST_TYPE [alpha |-> beta]) EXTREAL_SUM_IMAGE_PROPERTY
1782 >> `!x'. x' IN e INSERT s ==> (\i. pos_simple_fn_integral m s' a (x i)) x' <> NegInf`
1783 by (RW_TAC std_ss [] \\
1784 METIS_TAC [IN_INSERT, pos_simple_fn_integral_not_infty])
1785 >> RW_TAC std_ss []
1786 >> Q.PAT_X_ASSUM `!n f s a z. Q` (MP_TAC o Q.SPECL [`m`,`f`,`s'`,`a`,`x`])
1787 >> FULL_SIMP_TAC std_ss [IN_INSERT]
1788 >> RW_TAC std_ss []
1789 >> Cases_on `s = {}`
1790 >- (RW_TAC real_ss [EXTREAL_SUM_IMAGE_EMPTY, REAL_SUM_IMAGE_THM, add_rzero] \\
1791 METIS_TAC [])
1792 >> FULL_SIMP_TAC std_ss []
1793 >> `SIGMA (\i. pos_simple_fn_integral m s' a (x i)) s =
1794 pos_simple_fn_integral m s' a (\j. SIGMA (\i. x i j) s)`
1795 by METIS_TAC [] >> POP_ORW
1796 >> `(\j. x e j + SIGMA (\i. x i j) s) =
1797 (\j. x e j + (\j. SIGMA (\i. x i j) s) j)` by METIS_TAC [] >> POP_ORW
1798 >> (MATCH_MP_TAC o GSYM) pos_simple_fn_integral_add_alt
1799 >> METIS_TAC []
1800QED
1801
1802Theorem pos_simple_fn_integral_sum_alt:
1803 !m f s a x P. measure_space m /\
1804 (!i. i IN P ==> pos_simple_fn m (f i) (s i) (a i) (x i)) /\
1805 (!i t. i IN P ==> f i t <> NegInf) /\ FINITE P /\ P <> {} ==>
1806 ?c k z. (pos_simple_fn m (\t. SIGMA (\i. f i t) P) k c z /\
1807 (pos_simple_fn_integral m k c z =
1808 SIGMA (\i. pos_simple_fn_integral m (s i) (a i) (x i)) P))
1809Proof
1810 Suff `!P:'b->bool. FINITE P ==>
1811 (\P:'b->bool. !m f s a x. measure_space m /\
1812 (!i. i IN P ==> pos_simple_fn m (f i) (s i) (a i) (x i)) /\
1813 (!i t. i IN P ==> f i t <> NegInf) /\ P <> {} ==>
1814 ?c k z. (pos_simple_fn m (\t. SIGMA (\i. f i t) P) k c z /\
1815 (pos_simple_fn_integral m k c z =
1816 SIGMA (\i. pos_simple_fn_integral m (s i) (a i) (x i)) P))) P`
1817 >- METIS_TAC []
1818 >> MATCH_MP_TAC FINITE_INDUCT
1819 >> RW_TAC std_ss []
1820 >> Cases_on `s = {}` >- (RW_TAC std_ss [EXTREAL_SUM_IMAGE_SING] >> METIS_TAC [IN_SING])
1821 >> `?c k z. pos_simple_fn m (\t. SIGMA (\i. f i t) s) k c z /\
1822 (pos_simple_fn_integral m k c z =
1823 SIGMA (\i. pos_simple_fn_integral m (s' i) (a i) (x i)) s)`
1824 by METIS_TAC [IN_INSERT]
1825 >> `!i. i IN e INSERT s ==> (\i. pos_simple_fn_integral m (s' i) (a i) (x i)) i <> NegInf`
1826 by METIS_TAC [pos_simple_fn_integral_not_infty, IN_INSERT]
1827 >> FULL_SIMP_TAC std_ss [EXTREAL_SUM_IMAGE_PROPERTY]
1828 >> (MP_TAC o Q.SPECL [`m`,`f (e:'b)`,`s' (e:'b)`,`a (e:'b)`,`x (e:'b)`,
1829 `(\t. SIGMA (\i:'b. f i t) s)`,`k`,`c`,`z`]) pos_simple_fn_integral_present
1830 >> FULL_SIMP_TAC std_ss [IN_INSERT, DELETE_NON_ELEMENT]
1831 >> RW_TAC std_ss []
1832 >> METIS_TAC [pos_simple_fn_integral_add]
1833QED
1834
1835Theorem psfis_sum:
1836 !m f a P. measure_space m /\ (!i. i IN P ==> a i IN psfis m (f i)) /\
1837 (!i t. i IN P ==> f i t <> NegInf) /\ FINITE P ==>
1838 (SIGMA a P) IN psfis m (\t. SIGMA (\i. f i t) P)
1839Proof
1840 Suff `!P:'b->bool. FINITE P ==>
1841 (\P:'b->bool. !m f a. measure_space m /\ (!i. i IN P ==> a i IN psfis m (f i)) /\
1842 (!i t. i IN P ==> f i t <> NegInf) ==>
1843 (SIGMA a P) IN psfis m (\t. SIGMA (\i. f i t) P)) P`
1844 >- METIS_TAC []
1845 >> MATCH_MP_TAC FINITE_INDUCT
1846 >> RW_TAC std_ss [EXTREAL_SUM_IMAGE_EMPTY, psfis_zero, DELETE_NON_ELEMENT, IN_INSERT]
1847 >> `!x. x IN e INSERT s ==> a x <> NegInf` by METIS_TAC [IN_INSERT, psfis_not_infty]
1848 >> `!x t. x IN e INSERT s ==> (\x. f x t) x <> NegInf` by METIS_TAC [IN_INSERT]
1849 >> `!t. (\i. f i t) = (\i. (\i. f i t) i)` by METIS_TAC [] >> POP_ORW
1850 >> RW_TAC std_ss [EXTREAL_SUM_IMAGE_PROPERTY]
1851 >> `(\t. f e t + SIGMA (\i. f i t) s) = (\t. f e t + (\t. SIGMA (\i. f i t) s) t)`
1852 by METIS_TAC [] >> POP_ORW
1853 >> MATCH_MP_TAC psfis_add
1854 >> RW_TAC std_ss []
1855QED
1856
1857Theorem psfis_intro:
1858 !m a x P. measure_space m /\ (!i. i IN P ==> a i IN measurable_sets m) /\
1859 (!i. i IN P ==> 0 <= x i) /\ FINITE P ==>
1860 (SIGMA (\i. Normal (x i) * measure m (a i)) P) IN
1861 psfis m (\t. SIGMA (\i. Normal (x i) * indicator_fn (a i) t) P)
1862Proof
1863 RW_TAC std_ss []
1864 >> `!t. (\i. Normal (x i) * indicator_fn (a i) t) =
1865 (\i. (\i t. Normal (x i) * indicator_fn (a i) t) i t)` by METIS_TAC [] >> POP_ORW
1866 >> MATCH_MP_TAC psfis_sum
1867 >> RW_TAC std_ss [] >- METIS_TAC [psfis_cmul, psfis_indicator]
1868 >> RW_TAC std_ss [indicator_fn_def, mul_rone, mul_rzero]
1869 >> METIS_TAC [extreal_of_num_def, extreal_not_infty]
1870QED
1871
1872(* added `x IN m_space m` *)
1873Theorem pos_simple_fn_integral_sub :
1874 !m f s a x g s' b y.
1875 measure_space m /\ (measure m (m_space m) <> PosInf) /\
1876 (!x. x IN m_space m ==> g x <= f x) /\
1877 (!x. x IN m_space m ==> g x <> PosInf) /\
1878 pos_simple_fn m f s a x /\
1879 pos_simple_fn m g s' b y ==>
1880 ?s'' c z. pos_simple_fn m (\x. f x - g x) s'' c z /\
1881 (pos_simple_fn_integral m s a x -
1882 pos_simple_fn_integral m s' b y =
1883 pos_simple_fn_integral m s'' c z)
1884Proof
1885 rpt STRIP_TAC
1886 >> (MP_TAC o Q.SPECL [`m`,`f`,`s`,`a`,`x`,`g`,`s'`,`b`,`y`]) pos_simple_fn_integral_present
1887 >> RW_TAC std_ss []
1888 >> ASM_SIMP_TAC std_ss []
1889 >> qexistsl_tac [`k`,`c`,`(\i. if (i IN k /\ ~(c i = {})) then (z i - z' i) else 0)`]
1890 >> REV_FULL_SIMP_TAC std_ss [pos_simple_fn_integral_def]
1891 (* expand `pos_simple_fn` without touching the goal *)
1892 >> Q.PAT_X_ASSUM `pos_simple_fn m f s a x`
1893 (STRIP_ASSUME_TAC o (REWRITE_RULE [pos_simple_fn_def]))
1894 >> Q.PAT_X_ASSUM `pos_simple_fn m g s' b y`
1895 (STRIP_ASSUME_TAC o (REWRITE_RULE [pos_simple_fn_def]))
1896 >> `pos_simple_fn m f k c z`
1897 by (FULL_SIMP_TAC std_ss [pos_simple_fn_def] >> METIS_TAC [])
1898 >> `pos_simple_fn m g k c z'`
1899 by (FULL_SIMP_TAC std_ss [pos_simple_fn_def] >> METIS_TAC [])
1900 >> `!x. k x <=> x IN k` by METIS_TAC [SPECIFICATION]
1901 >> Know `!x. x IN k ==> Normal (z x - z' x) * measure m (c x) <> NegInf`
1902 >- (RW_TAC std_ss [] \\
1903 Cases_on `c x' = {}`
1904 >- METIS_TAC [MEASURE_EMPTY, mul_rzero, extreal_of_num_def, extreal_not_infty] \\
1905 `?y. y IN c x'` by METIS_TAC [CHOICE_DEF] \\
1906 `f y' = Normal (z x')` by METIS_TAC [pos_simple_fn_def, pos_simple_fn_thm1] \\
1907 `g y' = Normal (z' x')` by METIS_TAC [pos_simple_fn_def, pos_simple_fn_thm1] \\
1908 Suff `y' IN m_space m`
1909 >- (DISCH_TAC \\
1910 `0 <= z x' - z' x'` by METIS_TAC [extreal_le_eq, REAL_SUB_LE, extreal_of_num_def] \\
1911 METIS_TAC [mul_not_infty, positive_not_infty, MEASURE_SPACE_POSITIVE]) \\
1912 `c x' IN measurable_sets m` by PROVE_TAC [] \\
1913 Suff `c x' SUBSET m_space m` >- METIS_TAC [SUBSET_DEF] \\
1914 fs [measure_space_def, sigma_algebra_def, algebra_def] \\
1915 METIS_TAC [subset_class_def])
1916 >> DISCH_TAC
1917 >> reverse CONJ_TAC
1918 >- (`!i. (Normal (if (i IN k /\ ~(c i = {})) then z i - z' i else 0) * measure m (c i)) =
1919 (Normal (if i IN k then z i - z' i else 0) * measure m (c i))`
1920 by (RW_TAC std_ss [] >> FULL_SIMP_TAC real_ss [MEASURE_EMPTY, mul_rzero]) \\
1921 POP_ORW \\
1922 `SIGMA (\i. Normal (if i IN k then z i - z' i else 0) * measure m (c i)) k =
1923 SIGMA (\i. Normal (z i - z' i) * measure m (c i)) k`
1924 by ((MP_TAC o REWRITE_RULE [SPECIFICATION]
1925 o Q.SPECL [`k`,`k`,`(\i. Normal (z i - z' i) * measure m (c i))`]
1926 o INST_TYPE [alpha |-> ``:num``]) EXTREAL_SUM_IMAGE_IF_ELIM \\
1927 RW_TAC real_ss [] \\
1928 `(\x. if x IN k then Normal (z x - z' x) * measure m (c x) else 0) =
1929 (\i. Normal (if i IN k then z i - z' i else 0) * measure m (c i))`
1930 by (RW_TAC real_ss [FUN_EQ_THM] \\
1931 Cases_on `i IN k` >- METIS_TAC [] \\
1932 RW_TAC real_ss [mul_lzero, GSYM extreal_of_num_def]) \\
1933 FULL_SIMP_TAC real_ss []) >> POP_ORW \\
1934 RW_TAC std_ss [GSYM extreal_sub_def] \\
1935 `!i. i IN k ==> measure m (c i) <= measure m (m_space m)`
1936 by METIS_TAC [INCREASING, MEASURE_SPACE_INCREASING, MEASURE_SPACE_MSPACE_MEASURABLE,
1937 MEASURE_SPACE_SUBSET_MSPACE] \\
1938 `!i. i IN k ==> measure m (c i) <> PosInf` by METIS_TAC [le_infty] \\
1939 (MP_TAC o Q.SPEC `(\i. (Normal (z i) - Normal (z' i)) * measure m (c i))` o UNDISCH
1940 o Q.ISPEC `k:num->bool`) EXTREAL_SUM_IMAGE_IN_IF \\
1941 `!x. x IN k ==> (\i. (Normal (z i) - Normal (z' i)) * measure m (c i)) x <> NegInf`
1942 by RW_TAC std_ss [extreal_sub_def] \\
1943 RW_TAC std_ss [] \\
1944 `!x. x IN k ==> ((Normal (z x) - Normal (z' x)) * measure m (c x) =
1945 Normal (z x) * measure m (c x) - Normal (z' x) * measure m (c x))`
1946 by (RW_TAC std_ss [] \\
1947 `measure m (c x') <> NegInf` by METIS_TAC [positive_not_infty, MEASURE_SPACE_POSITIVE] \\
1948 `?r. measure m (c x') = Normal r` by METIS_TAC [extreal_cases] \\
1949 RW_TAC std_ss [extreal_sub_def, extreal_mul_def, REAL_SUB_RDISTRIB]) \\
1950 (MP_TAC o Q.SPECL [`k:num->bool`,`k`,
1951 `(\x:num. Normal (z x) * measure m (c x) - Normal (z' x) * measure m (c x))`]
1952 o INST_TYPE [alpha |-> ``:num``]) EXTREAL_SUM_IMAGE_IF_ELIM \\
1953 RW_TAC std_ss [] \\
1954 FULL_SIMP_TAC std_ss [] \\
1955 `(\x. Normal (z x) * measure m (c x) - Normal (z' x) * measure m (c x)) =
1956 (\x. (\x. Normal (z x) * measure m (c x)) x - (\x. Normal (z' x) * measure m (c x)) x)`
1957 by METIS_TAC [] >> POP_ORW \\
1958 (MATCH_MP_TAC o UNDISCH o Q.SPEC `k` o GSYM o INST_TYPE [alpha |-> ``:num``])
1959 EXTREAL_SUM_IMAGE_SUB \\
1960 DISJ1_TAC >> RW_TAC std_ss []
1961 >- METIS_TAC [mul_not_infty, positive_not_infty, MEASURE_SPACE_POSITIVE] \\
1962 METIS_TAC [mul_not_infty])
1963 >> `!x. x IN m_space m ==> g x <> NegInf`
1964 by METIS_TAC [lt_infty, lte_trans, extreal_not_infty, extreal_of_num_def]
1965 >> SIMP_TAC std_ss [pos_simple_fn_def]
1966 >> CONJ_TAC
1967 >- METIS_TAC [le_sub_imp, add_lzero]
1968 >> reverse (RW_TAC real_ss [])
1969 >- (REWRITE_TAC [REAL_SUB_LE] \\
1970 `?q. q IN c i` by METIS_TAC [CHOICE_DEF] \\
1971 Suff `q IN m_space m`
1972 >- (METIS_TAC [pos_simple_fn_thm1, REAL_SUB_LE, extreal_le_def]) \\
1973 `c i IN measurable_sets m` by PROVE_TAC [] \\
1974 Suff `c i SUBSET m_space m` >- METIS_TAC [SUBSET_DEF] \\
1975 fs [measure_space_def, sigma_algebra_def, algebra_def] \\
1976 METIS_TAC [subset_class_def])
1977 >> `!i. (Normal (if (i IN k /\ ~(c i = {})) then z i - z' i else 0) * indicator_fn (c i) x') =
1978 (Normal (if i IN k then z i - z' i else 0) * indicator_fn (c i) x')`
1979 by (RW_TAC std_ss [] \\
1980 FULL_SIMP_TAC real_ss [indicator_fn_def, mul_rzero, mul_rone, NOT_IN_EMPTY])
1981 >> POP_ORW
1982 >> `SIGMA (\i. Normal (if i IN k then z i - z' i else 0) * indicator_fn (c i) x') k =
1983 SIGMA (\i. Normal (z i - z' i) * indicator_fn (c i) x') k`
1984 by ((MP_TAC o REWRITE_RULE [SPECIFICATION] o
1985 (Q.SPECL [`k`,`k`,`(\i. Normal (z i - z' i) * indicator_fn (c i) x')`]) o
1986 (INST_TYPE [alpha |-> ``:num``])) EXTREAL_SUM_IMAGE_IF_ELIM \\
1987 RW_TAC real_ss [] \\
1988 `!x. (\i. Normal (z i - z' i) * indicator_fn (c i) x') x <> NegInf`
1989 by (RW_TAC std_ss [indicator_fn_def, mul_rzero, mul_rone] \\
1990 RW_TAC std_ss [extreal_of_num_def, extreal_not_infty]) \\
1991 RW_TAC std_ss [] \\
1992 `(\x. if x IN k then Normal (z x - z' x) * indicator_fn (c x) x' else 0) =
1993 (\i. Normal (if i IN k then z i - z' i else 0) * indicator_fn (c i) x')`
1994 by (RW_TAC real_ss [FUN_EQ_THM, indicator_fn_def, mul_rzero, mul_rone] \\
1995 Cases_on `i IN k` >- METIS_TAC [] \\
1996 RW_TAC real_ss [mul_lzero, GSYM extreal_of_num_def]) \\
1997 FULL_SIMP_TAC real_ss []) >> POP_ORW
1998 >> RW_TAC std_ss [GSYM extreal_sub_def]
1999 >> (MP_TAC o Q.SPEC `(\i. (Normal (z i) - Normal (z' i)) * indicator_fn (c i) x')`
2000 o UNDISCH o Q.ISPEC `k:num->bool`) EXTREAL_SUM_IMAGE_IN_IF
2001 >> `!x. x IN k ==> (\i. (Normal (z i) - Normal (z' i)) * indicator_fn (c i) x') x <> NegInf`
2002 by (RW_TAC std_ss [extreal_sub_def, indicator_fn_def, mul_rzero, mul_rone] \\
2003 RW_TAC std_ss [extreal_of_num_def, extreal_not_infty])
2004 >> RW_TAC std_ss []
2005 >> `!x. x IN k ==> ((Normal (z x) - Normal (z' x)) * indicator_fn (c x) x' =
2006 Normal (z x) * indicator_fn (c x) x' - Normal (z' x) * indicator_fn (c x) x')`
2007 by (RW_TAC std_ss [indicator_fn_def, mul_rone, mul_rzero, sub_rzero])
2008 >> RW_TAC std_ss []
2009 >> NTAC 3 (POP_ASSUM (K ALL_TAC))
2010 >> (MP_TAC o
2011 (Q.SPEC `(\x:num. Normal (z x) * indicator_fn (c x) x' - Normal (z' x) * indicator_fn (c x) x')`) o
2012 UNDISCH o (Q.SPEC `k`) o GSYM o (INST_TYPE [alpha |-> ``:num``])) EXTREAL_SUM_IMAGE_IN_IF
2013 >> `!x. NegInf <> (\x. Normal (z x) * indicator_fn (c x) x' - Normal (z' x) * indicator_fn (c x) x') x`
2014 by (RW_TAC std_ss [indicator_fn_def, mul_rone, mul_rzero, sub_rzero, extreal_sub_def] \\
2015 RW_TAC std_ss [extreal_of_num_def, extreal_not_infty])
2016 >> RW_TAC std_ss []
2017 >> FULL_SIMP_TAC std_ss []
2018 >> `SIGMA (\i. Normal (x i) * indicator_fn (a i) x') s =
2019 SIGMA (\i. Normal (z i) * indicator_fn (c i) x') k` by METIS_TAC [] >> POP_ORW
2020 >> `SIGMA (\i. Normal (y i) * indicator_fn (b i) x') s' =
2021 SIGMA (\i. Normal (z' i) * indicator_fn (c i) x') k` by METIS_TAC [] >> POP_ORW
2022 >> `(\x. Normal (z x) * indicator_fn (c x) x' - Normal (z' x) * indicator_fn (c x) x') =
2023 (\x. (\x. Normal (z x) * indicator_fn (c x) x') x - (\x. Normal (z' x) * indicator_fn (c x) x') x)`
2024 by METIS_TAC [] >> POP_ORW
2025 >> (MATCH_MP_TAC o UNDISCH o Q.SPEC `k` o GSYM o INST_TYPE [alpha |-> ``:num``])
2026 EXTREAL_SUM_IMAGE_SUB
2027 >> DISJ1_TAC
2028 >> RW_TAC std_ss [indicator_fn_def, mul_rzero, mul_rone]
2029 >> RW_TAC std_ss [extreal_of_num_def, extreal_not_infty]
2030QED
2031
2032Theorem psfis_sub :
2033 !m f g a b. measure_space m /\ measure m (m_space m) <> PosInf /\
2034 (!x. x IN m_space m ==> g x <= f x) /\
2035 (!x. x IN m_space m ==> g x <> PosInf) /\
2036 a IN psfis m f /\ b IN psfis m g ==> (a - b) IN psfis m (\x. f x - g x)
2037Proof
2038 RW_TAC std_ss [psfis_def, IN_IMAGE, psfs_def, GSPECIFICATION]
2039 >> Cases_on `x'` >> Cases_on `x` >> Cases_on `x''` >> Cases_on `x'''`
2040 >> RW_TAC std_ss []
2041 >> Cases_on `r'` >> Cases_on `r` >> Cases_on `r''` >> Cases_on `r'''`
2042 >> RW_TAC std_ss []
2043 >> FULL_SIMP_TAC std_ss [PAIR_EQ]
2044 >> Suff `?s a x. (pos_simple_fn_integral m q q''''' r' -
2045 pos_simple_fn_integral m q''' q''''''' r'' =
2046 pos_simple_fn_integral m s a x) /\
2047 pos_simple_fn m (\x. f x - g x) s a x`
2048 >- (RW_TAC std_ss [] >> Q.EXISTS_TAC `(s,a,x)` \\
2049 RW_TAC std_ss [] >> Q.EXISTS_TAC `(s,a,x)` >> RW_TAC std_ss [PAIR_EQ])
2050 >> ONCE_REWRITE_TAC [CONJ_COMM]
2051 >> MATCH_MP_TAC pos_simple_fn_integral_sub >> RW_TAC std_ss []
2052QED
2053
2054(* ---------------------------------------------------- *)
2055(* Properties of Integrals of Positive Functions *)
2056(* ---------------------------------------------------- *)
2057
2058Theorem pos_fn_integral_pos_simple_fn :
2059 !m f s a x. measure_space m /\ pos_simple_fn m f s a x ==>
2060 (pos_fn_integral m f = pos_simple_fn_integral m s a x)
2061Proof
2062 RW_TAC std_ss [pos_fn_integral_def, sup_eq', IN_psfis_eq,
2063 GSPECIFICATION]
2064 >- METIS_TAC [pos_simple_fn_integral_mono]
2065 >> POP_ASSUM MATCH_MP_TAC
2066 >> METIS_TAC [le_refl]
2067QED
2068
2069Theorem pos_fn_integral_mspace :
2070 !m f. measure_space m /\ (!x. x IN m_space m ==> 0 <= f x) ==>
2071 (pos_fn_integral m f = pos_fn_integral m (\x. f x * indicator_fn (m_space m) x))
2072Proof
2073 RW_TAC std_ss [pos_fn_integral_def,sup_eq]
2074 >- (RW_TAC real_ss [le_sup] \\
2075 POP_ASSUM MATCH_MP_TAC \\
2076 ONCE_REWRITE_TAC [GSYM SPECIFICATION] \\
2077 POP_ASSUM (MP_TAC o REWRITE_RULE [Once (GSYM SPECIFICATION)]) \\
2078 RW_TAC real_ss [GSPECIFICATION, indicator_fn_def] \\
2079 Q.EXISTS_TAC `(\x. g x * indicator_fn (m_space m) x)` \\
2080 reverse (RW_TAC real_ss [indicator_fn_def, IN_psfis_eq, mul_rone, mul_rzero, le_refl]) \\
2081 FULL_SIMP_TAC std_ss [IN_psfis_eq, pos_simple_fn_def] \\
2082 qexistsl_tac [`s`, `a`, `x`] \\
2083 RW_TAC real_ss [mul_rzero, le_refl, mul_rone] \\
2084 MATCH_MP_TAC EXTREAL_SUM_IMAGE_POS \\
2085 RW_TAC std_ss [mul_rzero,le_refl, mul_rone, indicator_fn_def] \\
2086 METIS_TAC [extreal_of_num_def, extreal_le_def])
2087 >> RW_TAC real_ss [sup_le]
2088 >> POP_ASSUM (MP_TAC o REWRITE_RULE [Once (GSYM SPECIFICATION)])
2089 >> RW_TAC real_ss [GSPECIFICATION]
2090 >> Q.PAT_X_ASSUM `!z. Q z ==> z <= y` MATCH_MP_TAC
2091 >> RW_TAC std_ss [Once (GSYM SPECIFICATION),GSPECIFICATION]
2092 >> Q.EXISTS_TAC `(\x. g x * indicator_fn (m_space m) x)`
2093 >> RW_TAC std_ss [IN_psfis_eq]
2094 >- (FULL_SIMP_TAC real_ss [IN_psfis_eq, pos_simple_fn_def, indicator_fn_def] \\
2095 qexistsl_tac [`s`, `a`, `x`] \\
2096 RW_TAC real_ss [le_refl, mul_rzero, mul_rone] \\
2097 MATCH_MP_TAC EXTREAL_SUM_IMAGE_POS \\
2098 RW_TAC std_ss [mul_rzero, le_refl, mul_rone, indicator_fn_def] \\
2099 METIS_TAC [extreal_of_num_def, extreal_le_def])
2100 >> FULL_SIMP_TAC std_ss [indicator_fn_def, le_refl, mul_rzero, mul_rone]
2101 >> METIS_TAC [mul_rone, mul_rzero]
2102QED
2103
2104Theorem pos_fn_integral_zero :
2105 !m. measure_space m ==> (pos_fn_integral m (\x. 0) = 0)
2106Proof
2107 RW_TAC std_ss [pos_fn_integral_def, sup_eq']
2108 >- (fs [GSPECIFICATION] \\
2109 MATCH_MP_TAC psfis_mono \\
2110 qexistsl_tac [`m`, `g`, `(\x. 0)`] \\
2111 RW_TAC std_ss [psfis_zero])
2112 >> POP_ASSUM MATCH_MP_TAC
2113 >> RW_TAC std_ss [GSPECIFICATION]
2114 >> Q.EXISTS_TAC `(\x. 0)`
2115 >> RW_TAC std_ss [le_refl, psfis_zero]
2116QED
2117
2118Theorem pos_fn_integral_mono :
2119 !m f g. (!x. x IN m_space m ==> 0 <= f x) /\
2120 (!x. x IN m_space m ==> f x <= g x) ==>
2121 pos_fn_integral m f <= pos_fn_integral m g
2122Proof
2123 RW_TAC std_ss [pos_fn_integral_def]
2124 >> MATCH_MP_TAC sup_le_sup_imp
2125 >> RW_TAC std_ss []
2126 >> Q.EXISTS_TAC `x`
2127 >> RW_TAC std_ss [le_refl]
2128 >> `x IN {r | ?g. r IN psfis m g /\ !x. x IN m_space m ==> g x <= f x}`
2129 by METIS_TAC [IN_DEF]
2130 >> ONCE_REWRITE_TAC [GSYM SPECIFICATION]
2131 >> `?g. x IN psfis m g /\ !x. x IN m_space m ==> g x <= f x`
2132 by (FULL_SIMP_TAC std_ss [GSPECIFICATION] >> METIS_TAC [])
2133 >> FULL_SIMP_TAC std_ss [GSPECIFICATION]
2134 >> METIS_TAC [le_trans]
2135QED
2136
2137val pos_fn_integral_mono_mspace = pos_fn_integral_mono;
2138
2139(* added `x IN m_space m` *)
2140Theorem pos_fn_integral_pos :
2141 !m f. measure_space m /\ (!x. x IN m_space m ==> 0 <= f x) ==>
2142 0 <= pos_fn_integral m f
2143Proof
2144 RW_TAC std_ss []
2145 >> `0 = pos_fn_integral m (\x. 0)` by METIS_TAC [pos_fn_integral_zero]
2146 >> POP_ORW
2147 >> MATCH_MP_TAC pos_fn_integral_mono
2148 >> RW_TAC std_ss [le_refl]
2149QED
2150
2151Theorem pos_fn_integral_cmul :
2152 !m f c. measure_space m /\ (!x. x IN m_space m ==> 0 <= f x) /\ 0 <= c ==>
2153 (pos_fn_integral m (\x. Normal c * f x) = Normal c * pos_fn_integral m f)
2154Proof
2155 RW_TAC std_ss []
2156 >> Cases_on `c = 0`
2157 >- RW_TAC std_ss [GSYM extreal_of_num_def,mul_lzero,pos_fn_integral_zero]
2158 >> `0 < c` by FULL_SIMP_TAC std_ss [REAL_LT_LE]
2159 >> RW_TAC std_ss [pos_fn_integral_def, sup_eq']
2160 >- (Suff `y / (Normal c) <= sup {r | ?g. r IN psfis m g /\ !x. x IN m_space m ==> g x <= f x}`
2161 >- METIS_TAC [le_ldiv, mul_comm] \\
2162 RW_TAC std_ss [le_sup'] \\
2163 POP_ASSUM MATCH_MP_TAC \\
2164 fs [GSPECIFICATION] \\
2165 Q.EXISTS_TAC `(\x. g x / (Normal c))` \\
2166 reverse (RW_TAC std_ss [])
2167 >- METIS_TAC [mul_comm, le_ldiv] \\
2168 RW_TAC std_ss [extreal_div_def] \\
2169 `inv (Normal c) * y IN psfis m (\x. inv (Normal c) * g x)`
2170 by METIS_TAC [psfis_cmul, extreal_inv_def, REAL_LE_INV] \\
2171 `(\x. g x * inv (Normal c)) = (\x. inv (Normal c) * g x)`
2172 by RW_TAC std_ss [FUN_EQ_THM, mul_comm] \\
2173 RW_TAC std_ss [Once mul_comm])
2174 >> Suff `sup {r | ?g. r IN psfis m g /\ !x. x IN m_space m ==> g x <= f x} <= y / Normal c`
2175 >- METIS_TAC [le_rdiv, extreal_not_infty, mul_comm]
2176 >> RW_TAC std_ss [sup_le']
2177 >> fs [GSPECIFICATION]
2178 >> Suff `y' * Normal c <= y` >- METIS_TAC [le_rdiv, extreal_not_infty]
2179 >> FIRST_X_ASSUM MATCH_MP_TAC
2180 >> Q.EXISTS_TAC `(\x. Normal c * g x)`
2181 >> RW_TAC std_ss []
2182 >- METIS_TAC [psfis_cmul, mul_comm, extreal_not_infty]
2183 >> METIS_TAC [le_lmul_imp, extreal_of_num_def, extreal_lt_eq, lt_le]
2184QED
2185
2186Theorem pos_fn_integral_indicator :
2187 !m s. measure_space m /\ s IN measurable_sets m ==>
2188 (pos_fn_integral m (indicator_fn s) = measure m s)
2189Proof
2190 METIS_TAC [pos_fn_integral_pos_simple_fn, pos_simple_fn_integral_indicator]
2191QED
2192
2193Theorem pos_fn_integral_cmul_indicator :
2194 !m s c. measure_space m /\ s IN measurable_sets m /\ 0 <= c ==>
2195 (pos_fn_integral m (\x. Normal c * indicator_fn s x) = Normal c * measure m s)
2196Proof
2197 RW_TAC std_ss []
2198 >> `!x. 0 <= indicator_fn s x`
2199 by RW_TAC std_ss [indicator_fn_def, le_refl, le_01]
2200 >> RW_TAC std_ss [pos_fn_integral_cmul]
2201 >> METIS_TAC [pos_fn_integral_pos_simple_fn, pos_simple_fn_integral_indicator]
2202QED
2203
2204(* NOTE: removed “measure m (m_space m) < PosInf” *)
2205Theorem pos_fn_integral_const :
2206 !m c. measure_space m /\ 0 <= c ==>
2207 (pos_fn_integral m (\x. Normal c) = Normal c * measure m (m_space m))
2208Proof
2209 rpt STRIP_TAC
2210 >> Know ‘pos_fn_integral m (\x. Normal c) =
2211 pos_fn_integral m (\x. (\x. Normal c) x * indicator_fn (m_space m) x)’
2212 >- (MATCH_MP_TAC pos_fn_integral_mspace \\
2213 rw [extreal_of_num_def, extreal_le_eq])
2214 >> BETA_TAC >> Rewr'
2215 >> MATCH_MP_TAC pos_fn_integral_cmul_indicator
2216 >> simp [MEASURE_SPACE_MSPACE_MEASURABLE]
2217QED
2218
2219Theorem pos_fn_integral_sum_cmul_indicator :
2220 !m s a x. measure_space m /\ FINITE s /\ (!i:num. i IN s ==> 0 <= x i) /\
2221 (!i:num. i IN s ==> a i IN measurable_sets m) ==>
2222 (pos_fn_integral m (\t. SIGMA (\i:num. Normal (x i) * indicator_fn (a i) t) s) =
2223 SIGMA (\i. Normal (x i) * measure m (a i)) s)
2224Proof
2225 RW_TAC std_ss []
2226 >> Cases_on `s = {}`
2227 >- RW_TAC std_ss [EXTREAL_SUM_IMAGE_EMPTY, pos_fn_integral_zero]
2228 >> `!i. i IN s ==> pos_simple_fn m (indicator_fn (a i)) {0:num; 1}
2229 (\n. if n = 0 then m_space m DIFF (a i) else (a i))
2230 (\n:num. if n = 0 then 0 else 1)`
2231 by METIS_TAC [pos_simple_fn_indicator_alt]
2232 >> `!i. i IN s ==> pos_simple_fn m (\t. Normal (x i) * indicator_fn (a i) t) {0:num; 1}
2233 (\n:num. if n = 0 then m_space m DIFF (a i) else (a i))
2234 (\n:num. (x i) * (if n = 0 then 0 else 1))`
2235 by METIS_TAC [pos_simple_fn_cmul_alt]
2236 >> (MP_TAC o Q.SPECL [`m`,`(\i. (\t. Normal (x i) * indicator_fn (a i) t))`,
2237 `(\i. {0; 1})`,
2238 `(\i. (\n. if n = 0 then m_space m DIFF a i else a i))`,
2239 `(\i. (\n. x i * if n = 0 then 0 else 1))`,`s`] o
2240 INST_TYPE [beta |-> ``:num``]) pos_simple_fn_integral_sum_alt
2241 >> `!i t. i IN s ==> Normal (x i) * indicator_fn (a i) t <> NegInf`
2242 by RW_TAC std_ss [indicator_fn_def, mul_rzero, mul_rone, num_not_infty]
2243 >> RW_TAC std_ss []
2244 >> `{1:num} DELETE 0 = {1}`
2245 by METIS_TAC [DELETE_NON_ELEMENT, EVAL ``0=1:num``, EXTENSION, IN_DELETE,
2246 IN_SING, NOT_IN_EMPTY]
2247 >> `FINITE {1:num}` by RW_TAC std_ss [FINITE_SING]
2248 >> `!i:num. i IN s ==>
2249 (pos_simple_fn_integral m {0:num; 1}
2250 (\n:num. if n = 0 then m_space m DIFF a i else a i)
2251 (\n:num. x i * if n = 0 then 0 else 1) =
2252 Normal (x i) * measure m (a i))`
2253 by (RW_TAC real_ss [pos_simple_fn_integral_def] \\
2254 `!n:num. n IN {0;1} ==>
2255 (\n. Normal (x i * if n = 0 then 0 else 1) *
2256 measure m (if n = 0 then m_space m DIFF a i else a i)) n <> NegInf`
2257 by (RW_TAC real_ss [GSYM extreal_of_num_def, num_not_infty, mul_lzero] \\
2258 METIS_TAC [mul_not_infty, positive_not_infty,
2259 MEASURE_SPACE_POSITIVE, IN_INSERT]) \\
2260 (MP_TAC o Q.SPEC `0` o UNDISCH o
2261 Q.SPECL [`(\n. Normal (x (i:num) * if n = 0 then 0 else 1) *
2262 measure m (if n = 0 then m_space m DIFF a i else a i))`,`{1}`] o
2263 INST_TYPE [alpha |-> ``:num``]) EXTREAL_SUM_IMAGE_PROPERTY \\
2264 RW_TAC real_ss [mul_lzero, add_lzero, EXTREAL_SUM_IMAGE_SING, GSYM extreal_of_num_def])
2265 >> (MP_TAC o Q.SPEC `(\i:num. pos_simple_fn_integral m {0:num; 1}
2266 (\n:num. if n = 0 then m_space m DIFF a i else a i)
2267 (\n:num. x i * if n = 0 then 0 else 1:real))` o
2268 UNDISCH o Q.SPEC `s` o INST_TYPE [alpha |-> ``:num``]) EXTREAL_SUM_IMAGE_IN_IF
2269 >> `!x'. x' IN s ==> (\i. pos_simple_fn_integral m {0; 1}
2270 (\n. if n = 0 then m_space m DIFF a i else a i)
2271 (\n. x i * if n = 0 then 0 else 1)) x' <> NegInf`
2272 by (RW_TAC std_ss [] \\
2273 METIS_TAC [mul_not_infty, positive_not_infty, MEASURE_SPACE_POSITIVE, IN_INSERT])
2274 >> RW_TAC std_ss []
2275 >> FULL_SIMP_TAC std_ss []
2276 >> (MP_TAC o Q.SPECL [`s:num->bool`,`s`,`(\i:num. Normal (x i) * measure m (a i))`] o
2277 INST_TYPE [alpha |-> ``:num``]) EXTREAL_SUM_IMAGE_IF_ELIM
2278 >> `!x'. x' IN s ==> Normal (x x') * measure m (a x') <> NegInf`
2279 by METIS_TAC [mul_not_infty, positive_not_infty, MEASURE_SPACE_POSITIVE, IN_INSERT]
2280 >> RW_TAC std_ss []
2281 >> FULL_SIMP_TAC std_ss [SPECIFICATION]
2282 >> NTAC 7 (POP_ASSUM (K ALL_TAC))
2283 >> POP_ASSUM (MP_TAC o GSYM)
2284 >> RW_TAC std_ss []
2285 >> RW_TAC std_ss [pos_fn_integral_def, sup_eq]
2286 >- (POP_ASSUM (MP_TAC o ONCE_REWRITE_RULE [GSYM SPECIFICATION]) \\
2287 RW_TAC std_ss [GSPECIFICATION, IN_psfis_eq] \\
2288 MATCH_MP_TAC pos_simple_fn_integral_mono \\
2289 Q.EXISTS_TAC `g` \\
2290 Q.EXISTS_TAC `(\t. SIGMA (\i. Normal (x i) * indicator_fn (a i) t) s)` \\
2291 RW_TAC std_ss [])
2292 >> POP_ASSUM MATCH_MP_TAC
2293 >> ONCE_REWRITE_TAC [GSYM SPECIFICATION]
2294 >> RW_TAC std_ss [GSPECIFICATION,IN_psfis_eq]
2295 >> Q.EXISTS_TAC `(\t. SIGMA (\i. Normal (x i) * indicator_fn (a i) t) s)`
2296 >> RW_TAC real_ss []
2297 >> METIS_TAC [le_refl]
2298QED
2299
2300(***************************************************************************)
2301(* Sequences - Convergence *)
2302(***************************************************************************)
2303
2304(* added `x IN m_space m` at various places *)
2305Theorem lebesgue_monotone_convergence_lemma[local] :
2306 !m f fi g r'.
2307 measure_space m /\
2308 (!i. fi i IN measurable (m_space m, measurable_sets m) Borel) /\
2309 (!x. x IN m_space m ==> mono_increasing (\i. fi i x)) /\
2310 (!x. x IN m_space m ==> (sup (IMAGE (\i. fi i x) UNIV) = f x)) /\
2311 (r' IN psfis m g) /\ (!x. x IN m_space m ==> g x <= f x) /\
2312 (!i x. x IN m_space m ==> 0 <= fi i x) ==>
2313 r' <= sup (IMAGE (\i. pos_fn_integral m (fi i)) UNIV)
2314Proof
2315 rpt STRIP_TAC
2316 >> Q.ABBREV_TAC `r = sup (IMAGE (\i. pos_fn_integral m (fi i)) UNIV)`
2317 >> Q.ABBREV_TAC `ri = (\i. pos_fn_integral m (fi i))`
2318 >> MATCH_MP_TAC le_mul_epsilon
2319 >> RW_TAC std_ss []
2320 >> (Cases_on `z` \\
2321 FULL_SIMP_TAC std_ss [le_infty, lt_infty, extreal_not_infty, extreal_of_num_def])
2322 >> FULL_SIMP_TAC std_ss [extreal_le_def, extreal_lt_eq]
2323 (* stage work *)
2324 >> Q.ABBREV_TAC `b = \n. {t | Normal r'' * g t <= (fi n) t}`
2325 >> `?s a x. pos_simple_fn m g s a x` by METIS_TAC [IN_psfis]
2326 >> `!i j. i <= j ==> ri i <= ri j`
2327 by (Q.UNABBREV_TAC `ri`
2328 >> RW_TAC std_ss []
2329 >> MATCH_MP_TAC pos_fn_integral_mono
2330 >> FULL_SIMP_TAC std_ss [ext_mono_increasing_def, GSYM extreal_of_num_def])
2331 >> `f IN measurable (m_space m, measurable_sets m) Borel`
2332 by (MATCH_MP_TAC IN_MEASURABLE_BOREL_MONO_SUP
2333 >> Q.EXISTS_TAC `fi`
2334 >> RW_TAC std_ss [space_def]
2335 >- FULL_SIMP_TAC std_ss [measure_space_def]
2336 >> FULL_SIMP_TAC std_ss [ext_mono_increasing_def,ext_mono_increasing_suc])
2337 >> `g IN measurable (m_space m, measurable_sets m) Borel`
2338 by METIS_TAC [IN_psfis_eq, IN_MEASURABLE_BOREL_POS_SIMPLE_FN]
2339 >> `(\t. Normal r'' * g t) IN measurable (m_space m, measurable_sets m) Borel`
2340 by (MATCH_MP_TAC IN_MEASURABLE_BOREL_CMUL \\
2341 qexistsl_tac [`g`, `r''`] \\
2342 RW_TAC real_ss [extreal_not_infty] \\
2343 METIS_TAC [measure_space_def])
2344 >> `!n:num. {t | Normal r'' * g t <= fi n t} INTER m_space m =
2345 {t | 0 <= (fi n t) - Normal r'' * (g t)} INTER m_space m`
2346 by (RW_TAC real_ss [EXTENSION, GSPECIFICATION, IN_INTER] \\
2347 METIS_TAC [pos_simple_fn_not_infty, mul_not_infty, add_lzero,
2348 le_sub_eq, num_not_infty])
2349 >> `!n. (\t. fi n t - Normal r'' * g t) IN measurable (m_space m, measurable_sets m) Borel`
2350 by (RW_TAC std_ss [] \\
2351 MATCH_MP_TAC IN_MEASURABLE_BOREL_SUB \\
2352 Q.EXISTS_TAC `fi n` \\
2353 Q.EXISTS_TAC `(\t. Normal r'' * g t)` \\
2354 RW_TAC std_ss [space_def] >| (* 2 subgoals *)
2355 [ FULL_SIMP_TAC std_ss [measure_space_def],
2356 DISJ1_TAC \\
2357 CONJ_TAC >- (METIS_TAC [pos_not_neginf, GSYM extreal_of_num_def]) \\
2358 METIS_TAC [pos_simple_fn_not_infty, mul_not_infty] ])
2359 >> `!n. {t | Normal r'' * g t <= fi n t} INTER m_space m IN measurable_sets m`
2360 by METIS_TAC [IN_MEASURABLE_BOREL_ALL, m_space_def, space_def, subsets_def,
2361 measurable_sets_def, measure_space_def, extreal_of_num_def]
2362 >> `!n. b n INTER m_space m IN measurable_sets m` by (Q.UNABBREV_TAC `b` >> METIS_TAC [])
2363 (* stage work *)
2364 >> Suff `r' = sup (IMAGE (\n. pos_fn_integral m
2365 (\x. g x * indicator_fn (b n INTER m_space m) x)) UNIV)`
2366 >- (Q.UNABBREV_TAC `r` \\
2367 RW_TAC std_ss [le_sup'] \\
2368 Cases_on `r'' = 0`
2369 >- (RW_TAC std_ss [mul_lzero, GSYM extreal_of_num_def] \\
2370 MATCH_MP_TAC le_trans >> Q.EXISTS_TAC `ri (1:num)` \\
2371 reverse CONJ_TAC
2372 >- (POP_ASSUM MATCH_MP_TAC \\
2373 RW_TAC std_ss [IN_IMAGE, IN_UNIV] >> METIS_TAC []) \\
2374 Q.UNABBREV_TAC `ri` \\
2375 RW_TAC std_ss [] \\
2376 METIS_TAC [pos_fn_integral_pos, extreal_of_num_def]) \\
2377 `0 < r''` by METIS_TAC [REAL_LT_LE] \\
2378 `0 < Normal r''` by METIS_TAC [extreal_lt_eq, extreal_of_num_def, REAL_LE_REFL] \\
2379 ONCE_REWRITE_TAC [mul_comm] \\
2380 RW_TAC std_ss [le_rdiv] \\
2381 RW_TAC std_ss [sup_le'] \\
2382 POP_ASSUM MP_TAC >> RW_TAC std_ss [IN_IMAGE, IN_UNIV] \\
2383 RW_TAC std_ss [GSYM le_rdiv] \\
2384 ONCE_REWRITE_TAC [mul_comm] \\
2385 `!x. x IN m_space m ==> 0 <= (\x. g x * indicator_fn (b n INTER m_space m) x) x`
2386 by (RW_TAC std_ss [indicator_fn_def, mul_rone, mul_rzero, le_refl] \\
2387 FULL_SIMP_TAC std_ss [pos_simple_fn_def]) \\
2388 FULL_SIMP_TAC std_ss [GSYM pos_fn_integral_cmul] \\
2389 `!x. x IN m_space m ==> (\x. Normal r'' * (g x * indicator_fn (b n INTER m_space m) x)) x <= fi n x`
2390 by (Q.UNABBREV_TAC `b` \\
2391 RW_TAC real_ss [indicator_fn_def, GSPECIFICATION, IN_INTER, mul_rzero, mul_rone] \\
2392 METIS_TAC [extreal_of_num_def]) \\
2393 MATCH_MP_TAC le_trans \\
2394 Q.EXISTS_TAC `pos_fn_integral m (fi n)` \\
2395 CONJ_TAC >- (MATCH_MP_TAC pos_fn_integral_mono >> METIS_TAC [le_mul, lt_le]) \\
2396 RW_TAC std_ss [] \\
2397 FIRST_X_ASSUM MATCH_MP_TAC \\
2398 RW_TAC std_ss [IN_IMAGE, IN_UNIV] \\
2399 Q.EXISTS_TAC `n` >> REWRITE_TAC [])
2400 >> `!n:num. (\x. g x * indicator_fn (b n INTER m_space m) x) =
2401 (\t. SIGMA (\i. Normal (x i) * indicator_fn (a i INTER (b n INTER m_space m)) t) s)`
2402 by (RW_TAC std_ss [] >> FUN_EQ_TAC \\
2403 RW_TAC std_ss [] \\
2404 Cases_on `~(x' IN m_space m)`
2405 >- (RW_TAC real_ss [indicator_fn_def, IN_INTER, mul_rone, mul_rzero] \\
2406 METIS_TAC [pos_simple_fn_def,EXTREAL_SUM_IMAGE_ZERO]) \\
2407 RW_TAC real_ss [indicator_fn_def, IN_INTER, mul_rone, mul_rzero]
2408 >- FULL_SIMP_TAC real_ss [pos_simple_fn_def, indicator_fn_def] \\
2409 FULL_SIMP_TAC std_ss [pos_simple_fn_def, EXTREAL_SUM_IMAGE_ZERO])
2410 >> RW_TAC std_ss []
2411 >> `!n:num i. i IN s ==> (a i INTER (b n INTER m_space m)) IN measurable_sets m`
2412 by METIS_TAC [MEASURE_SPACE_INTER,pos_simple_fn_def]
2413 >> `FINITE s` by FULL_SIMP_TAC std_ss [pos_simple_fn_def]
2414 >> `!n :num.
2415 (pos_fn_integral m (\t. SIGMA (\i. Normal (x i) *
2416 indicator_fn ((\i. a i INTER (b n INTER m_space m)) i) t) s) =
2417 SIGMA (\i. Normal (x i) * measure m ((\i. a i INTER (b n INTER m_space m)) i)) s)`
2418 by (RW_TAC std_ss [] \\
2419 (MP_TAC o Q.SPECL [`m`, `s:num->bool`,
2420 `(\i:num. a i INTER (b (n:num) INTER m_space m))`,
2421 `(x:num->real)`]) pos_fn_integral_sum_cmul_indicator \\
2422 FULL_SIMP_TAC std_ss [pos_simple_fn_def])
2423 >> FULL_SIMP_TAC std_ss []
2424 >> Know `!i. i IN s ==> !n.
2425 (\i n. Normal (x i) * measure m (a i INTER (b n INTER m_space m))) i n <=
2426 (\i n. Normal (x i) * measure m (a i INTER (b n INTER m_space m))) i (SUC n)`
2427 >- (RW_TAC std_ss [] \\
2428 MATCH_MP_TAC le_lmul_imp \\
2429 RW_TAC std_ss []
2430 >- METIS_TAC [pos_simple_fn_def, extreal_le_def, extreal_of_num_def] \\
2431 MATCH_MP_TAC INCREASING \\
2432 RW_TAC std_ss [MEASURE_SPACE_INCREASING] \\
2433 RW_TAC std_ss [SUBSET_DEF,IN_INTER] \\
2434 Q.UNABBREV_TAC `b` \\
2435 FULL_SIMP_TAC std_ss [GSPECIFICATION] \\
2436 MATCH_MP_TAC le_trans >> Q.EXISTS_TAC `fi n x'` \\
2437 RW_TAC real_ss [] \\
2438 FULL_SIMP_TAC real_ss [ext_mono_increasing_suc])
2439 >> `!i. i IN s ==> !n. 0 <= (\i n. Normal (x i) * measure m (a i INTER (b n INTER m_space m))) i n`
2440 by (RW_TAC std_ss [] \\
2441 METIS_TAC [le_mul, extreal_le_def, extreal_of_num_def, MEASURE_SPACE_POSITIVE,
2442 positive_def, MEASURE_SPACE_INTER, pos_simple_fn_def])
2443 >> FULL_SIMP_TAC std_ss [sup_sum_mono]
2444 >> RW_TAC std_ss []
2445 >> `!i. i IN s ==>
2446 (sup (IMAGE (\n. Normal (x i) * measure m (a i INTER (b n INTER m_space m))) UNIV) =
2447 Normal (x i) * sup (IMAGE (\n. measure m (a i INTER (b n INTER m_space m))) UNIV))`
2448 by METIS_TAC [sup_cmul, pos_simple_fn_def]
2449 >> (MP_TAC o Q.SPEC `(\i. sup (IMAGE (\n. Normal (x i) *
2450 measure m (a i INTER (b (n:num) INTER m_space m)))
2451 UNIV))` o
2452 UNDISCH o Q.SPEC `s` o INST_TYPE [alpha |-> ``:num``]) EXTREAL_SUM_IMAGE_IN_IF
2453 >> `!x':num. x' IN s ==>
2454 (\i:num. sup (IMAGE (\n. Normal (x i) *
2455 measure m (a i INTER (b (n:num) INTER m_space m))) UNIV)) x'
2456 <> NegInf`
2457 by (RW_TAC std_ss [lt_infty] \\
2458 MATCH_MP_TAC lte_trans >> Q.EXISTS_TAC `0` \\
2459 RW_TAC std_ss [] >- METIS_TAC [lt_infty, num_not_infty] \\
2460 RW_TAC std_ss [le_sup] \\
2461 MATCH_MP_TAC le_trans \\
2462 Q.EXISTS_TAC `Normal (x x') * measure m ((a x') INTER ((b 1) INTER m_space m))` \\
2463 RW_TAC std_ss [] \\
2464 MATCH_MP_TAC le_lmul_imp \\
2465 CONJ_TAC >- METIS_TAC [extreal_le_def, extreal_of_num_def, pos_simple_fn_def] \\
2466 RW_TAC std_ss [le_sup] \\
2467 POP_ASSUM MATCH_MP_TAC \\
2468 ONCE_REWRITE_TAC [GSYM SPECIFICATION] \\
2469 RW_TAC std_ss [IN_IMAGE, IN_UNIV] \\
2470 METIS_TAC [])
2471 >> RW_TAC std_ss []
2472 >> `!i. BIGUNION (IMAGE (\n. a i INTER (b n INTER m_space m)) UNIV) = a i INTER m_space m`
2473 by (RW_TAC std_ss [EXTENSION, IN_BIGUNION_IMAGE, IN_INTER, IN_UNIV] \\
2474 EQ_TAC >- METIS_TAC [] \\
2475 RW_TAC std_ss [] \\
2476 Q.UNABBREV_TAC `b` \\
2477 RW_TAC real_ss [GSPECIFICATION] \\
2478 `f x' = sup (IMAGE (\i. fi i x') UNIV)` by FULL_SIMP_TAC std_ss [] \\
2479 Cases_on `g x' = 0` >- METIS_TAC [mul_rzero,extreal_of_num_def] \\
2480 `Normal r'' * g x' < f x'`
2481 by (Cases_on `g x' = f x'`
2482 >- (`0 < f x'` by METIS_TAC [le_lt, pos_simple_fn_def] \\
2483 METIS_TAC [lt_rmul, mul_lone, IN_psfis_eq, pos_simple_fn_not_infty,
2484 extreal_lt_eq, extreal_of_num_def]) \\
2485 `g x' < f x'` by METIS_TAC [le_lt] \\
2486 METIS_TAC [lt_mul2, mul_lone, extreal_not_infty, pos_simple_fn_not_infty,
2487 extreal_lt_eq, extreal_of_num_def, extreal_le_def, psfis_pos]) \\
2488 Suff `?n. Normal r'' * g x' <= (\n. fi n x') n` >- RW_TAC std_ss [] \\
2489 MATCH_MP_TAC sup_le_mono \\
2490 CONJ_TAC >- FULL_SIMP_TAC std_ss [ext_mono_increasing_def,
2491 ext_mono_increasing_suc] \\
2492 METIS_TAC [])
2493 >> `!i. i IN s==> (a i INTER m_space m = a i)`
2494 by METIS_TAC [pos_simple_fn_def,SUBSET_INTER1,MEASURE_SPACE_SUBSET_MSPACE]
2495 >> `!i. i IN s ==> (sup (IMAGE (measure m o (\n. a i INTER (b n INTER m_space m))) UNIV) =
2496 measure m (a i))`
2497 by (RW_TAC std_ss [] \\
2498 MATCH_MP_TAC MONOTONE_CONVERGENCE \\
2499 RW_TAC std_ss [IN_FUNSET, IN_UNIV] \\
2500 RW_TAC std_ss [SUBSET_DEF, IN_INTER] \\
2501 Q.UNABBREV_TAC `b` \\
2502 FULL_SIMP_TAC std_ss [GSPECIFICATION] \\
2503 MATCH_MP_TAC le_trans >> Q.EXISTS_TAC `fi n x'` \\
2504 RW_TAC real_ss [] \\
2505 FULL_SIMP_TAC real_ss [ext_mono_increasing_suc])
2506 >> FULL_SIMP_TAC std_ss [o_DEF]
2507 >> `r' = SIGMA (\i. Normal (x i) * measure m (a i)) s`
2508 by METIS_TAC [IN_psfis_eq, psfis_unique, pos_simple_fn_integral_def,
2509 pos_simple_fn_integral_unique]
2510 >> POP_ORW
2511 >> `!i. i IN s ==> (\i. Normal (x i) * measure m (a i)) i <> NegInf`
2512 by METIS_TAC []
2513 >> (MP_TAC o Q.SPEC `(\i. Normal (x i) * measure m (a i))` o
2514 UNDISCH o Q.ISPEC `s:num->bool`) EXTREAL_SUM_IMAGE_IN_IF
2515 >> RW_TAC std_ss []
2516QED
2517
2518(************************************************************)
2519(* LEBESGUE MONOTONE CONVERGENCE (Beppo Levi) *)
2520(************************************************************)
2521
2522(* NOTE: this is actually Theorem 9.6 (Beppo Levi) [1, p.75] for positive functions,
2523 the full version of "Monotone convergence" theroem for arbitrary integrable
2524 functions (Theorem 12.1 [1, p.96]) is not formalized yet.
2525
2526 This theorem is also named after Beppo Levi, an Italian mathematician [4].
2527
2528 Removed unnecessary ‘!x. x IN m_space m ==> 0 <= f x’ (Chun Tian)
2529 *)
2530Theorem lebesgue_monotone_convergence :
2531 !m f fi. measure_space m /\
2532 (!i. fi i IN measurable (m_space m, measurable_sets m) Borel) /\
2533 (!i x. x IN m_space m ==> 0 <= fi i x) /\
2534 (!x. x IN m_space m ==> mono_increasing (\i. fi i x)) /\
2535 (!x. x IN m_space m ==> (sup (IMAGE (\i. fi i x) UNIV) = f x)) ==>
2536 (pos_fn_integral m f = sup (IMAGE (\i. pos_fn_integral m (fi i)) UNIV))
2537Proof
2538 rpt STRIP_TAC
2539 >> Know ‘!x. x IN m_space m ==> 0 <= f x’
2540 >- (rpt STRIP_TAC \\
2541 Q.PAT_X_ASSUM ‘!x. x IN m_space m ==> _ = f x’ (MP_TAC o (Q.SPEC ‘x’)) \\
2542 RW_TAC std_ss [] \\
2543 POP_ASSUM (ONCE_REWRITE_TAC o wrap o SYM) \\
2544 rw [le_sup'] \\
2545 MATCH_MP_TAC le_trans >> Q.EXISTS_TAC ‘fi 0 x’ \\
2546 CONJ_TAC >- (FIRST_X_ASSUM MATCH_MP_TAC >> art []) \\
2547 POP_ASSUM MATCH_MP_TAC >> Q.EXISTS_TAC ‘0’ >> REWRITE_TAC [])
2548 >> POP_ASSUM MP_TAC
2549 >> reverse (RW_TAC std_ss [GSYM le_antisym])
2550 >- (RW_TAC std_ss [sup_le'] \\
2551 POP_ASSUM MP_TAC >> RW_TAC std_ss [IN_IMAGE, IN_UNIV] \\
2552 MATCH_MP_TAC pos_fn_integral_mono \\
2553 RW_TAC std_ss [] \\
2554 Q.PAT_X_ASSUM `!x. x IN m_space m ==> sup (IMAGE _ UNIV) <= f x /\ _`
2555 (MP_TAC o GSYM o UNDISCH o Q.SPEC `x`) \\
2556 RW_TAC std_ss [] \\
2557 FULL_SIMP_TAC std_ss [sup_le'] \\
2558 FIRST_X_ASSUM MATCH_MP_TAC \\
2559 RW_TAC std_ss [IN_IMAGE, IN_UNIV] \\
2560 Q.EXISTS_TAC `i` >> REWRITE_TAC [])
2561 >> Q.ABBREV_TAC `r = sup (IMAGE (\i. pos_fn_integral m (fi i)) UNIV)`
2562 >> RW_TAC std_ss [pos_fn_integral_def, sup_le]
2563 >> POP_ASSUM (MP_TAC o ONCE_REWRITE_RULE [GSYM SPECIFICATION])
2564 >> RW_TAC std_ss [GSPECIFICATION]
2565 >> METIS_TAC [lebesgue_monotone_convergence_lemma, le_antisym]
2566QED
2567
2568(* removed unnecessary ‘!x. x IN m_space m ==> 0 <= f x’ (Chun Tian) *)
2569Theorem lebesgue_monotone_convergence_subset :
2570 !m f fi A. measure_space m /\
2571 (!i. fi i IN measurable (m_space m, measurable_sets m) Borel) /\
2572 (!i x. x IN m_space m ==> 0 <= fi i x) /\
2573 (!x. x IN m_space m ==> (sup (IMAGE (\i. fi i x) UNIV) = f x)) /\
2574 (!x. x IN m_space m ==> mono_increasing (\i. fi i x)) /\
2575 A IN measurable_sets m ==>
2576 (pos_fn_integral m (\x. f x * indicator_fn A x) =
2577 sup (IMAGE (\i. pos_fn_integral m (\x. fi i x * indicator_fn A x)) UNIV))
2578Proof
2579 RW_TAC std_ss []
2580 >> (MP_TAC o Q.SPECL [`m`, `(\x. f x * indicator_fn A x)`,
2581 `(\i. (\x. fi i x * indicator_fn A x))`])
2582 lebesgue_monotone_convergence
2583 >> RW_TAC std_ss []
2584 >> POP_ASSUM MATCH_MP_TAC
2585 >> CONJ_TAC
2586 >- METIS_TAC [IN_MEASURABLE_BOREL_MUL_INDICATOR, measure_space_def, subsets_def,
2587 measurable_sets_def]
2588 >> CONJ_TAC >- RW_TAC std_ss [indicator_fn_def,mul_rone,mul_rzero,le_refl]
2589 >> CONJ_TAC
2590 >- (RW_TAC std_ss [indicator_fn_def, mul_rone, mul_rzero, le_refl, ext_mono_increasing_def] \\
2591 FULL_SIMP_TAC std_ss [ext_mono_increasing_def])
2592 >> RW_TAC std_ss [indicator_fn_def,mul_rone,mul_rzero]
2593 >> Suff `IMAGE (\i:num. 0:extreal) UNIV = (\y. y = 0)` >- RW_TAC std_ss [sup_const]
2594 >> RW_TAC std_ss [EXTENSION, IN_ABS, IN_IMAGE, IN_UNIV]
2595QED
2596
2597(**********************************************************)
2598(* Integration of convergent sequence (fn_seq_integral) *)
2599(**********************************************************)
2600
2601(* NOTE: Given the following (s,a,x) for a sequence of positive simple function:
2602
2603 s = `count (4 ** n + 1)`
2604 a = `(\k. if k IN count (4 ** n) then
2605 {x | x IN m_space m /\ &k / 2 pow n <= f x /\ f x < (&k + 1) / 2 pow n}
2606 else
2607 {x | x IN m_space m /\ 2 pow n <= f x})`
2608 x = `(\k. if k IN count (4 ** n) then &k / 2 pow n else 2 pow n)`
2609
2610 We have (as part of lemma_fn_seq_in_psfis):
2611 |- fn_seq m f = \n t. SIGMA (\i. Normal (x i) * indicator_fn (a i) t) s)
2612 |- fn_seq_integral m f n = pos_simple_fn_integral m s a x
2613 *)
2614Definition fn_seq_integral_def :
2615 fn_seq_integral m f =
2616 (\n. SIGMA
2617 (\k. &k / 2 pow n *
2618 measure m
2619 {x | x IN m_space m /\ &k / 2 pow n <= f x /\
2620 f x < (&k + 1) / 2 pow n}) (count (4 ** n)) +
2621 2 pow n * measure m {x | x IN m_space m /\ 2 pow n <= f x})
2622End
2623
2624(* SEQ Positive Simple Functions and Define Integral *)
2625Theorem lemma_fn_seq_measurable:
2626 !m f n. measure_space m /\ f IN Borel_measurable (measurable_space m) /\
2627 (!x. x IN m_space m ==> 0 <= f x) ==>
2628 fn_seq m f n IN measurable (m_space m,measurable_sets m) Borel
2629Proof
2630 RW_TAC std_ss [fn_seq_def]
2631 >> MATCH_MP_TAC IN_MEASURABLE_BOREL_ADD >> simp []
2632 >> qexistsl_tac [‘\x. SIGMA
2633 (\k. &k / 2 pow n *
2634 indicator_fn
2635 {x | x IN m_space m /\ &k / 2 pow n <= f x /\
2636 f x < (&k + 1) / 2 pow n} x) (count (4 ** n))’,
2637 ‘\x. 2 pow n *
2638 indicator_fn {x | x IN m_space m /\ 2 pow n <= f x} x’]
2639 >> ‘sigma_algebra (m_space m,measurable_sets m)’
2640 by FULL_SIMP_TAC std_ss [measure_space_def]
2641 >> ASM_SIMP_TAC std_ss []
2642 >> CONJ_TAC
2643 >- (MATCH_MP_TAC (INST_TYPE [“:'b” |-> “:num”] IN_MEASURABLE_BOREL_SUM) \\
2644 ASM_SIMP_TAC std_ss [space_def] \\
2645 qexistsl_tac [‘\k x. &k / 2 pow n *
2646 indicator_fn {x | x IN m_space m /\ &k / 2 pow n <= f x /\
2647 f x < (&k + 1) / 2 pow n} x’,
2648 ‘count (4 ** n)’] \\
2649 SIMP_TAC std_ss [FINITE_COUNT] \\
2650 reverse CONJ_TAC
2651 >- (rpt GEN_TAC >> STRIP_TAC \\
2652 rename1 ‘&i / 2 pow n * indicator_fn s x’ \\
2653 ‘?r. indicator_fn s x = Normal r’
2654 by METIS_TAC [indicator_fn_normal] >> POP_ORW \\
2655 ‘!n. 0:real < 2 pow n’ by RW_TAC real_ss [REAL_POW_LT] \\
2656 ‘!n. 0:real <> 2 pow n’ by RW_TAC real_ss [REAL_LT_IMP_NE] \\
2657 ‘!n k. &k / 2 pow n = Normal (&k / 2 pow n)’
2658 by METIS_TAC [extreal_of_num_def, extreal_pow_def, extreal_div_eq] \\
2659 rw [extreal_mul_def, extreal_not_infty]) \\
2660 rpt STRIP_TAC \\
2661 HO_MATCH_MP_TAC IN_MEASURABLE_BOREL_MUL_INDICATOR >> rw []
2662 >- (MATCH_MP_TAC IN_MEASURABLE_BOREL_CONST >> rw [] \\
2663 Q.EXISTS_TAC ‘&i / 2 pow n’ >> rw []) \\
2664 ‘{x | x IN m_space m /\ &i / 2 pow n <= f x /\ f x < (&i + 1) / 2 pow n} =
2665 {x | &i / 2 pow n <= f x /\ f x < (&i + 1) / 2 pow n} INTER m_space m’
2666 by SET_TAC [] >> POP_ORW \\
2667 METIS_TAC [IN_MEASURABLE_BOREL_ALL_MEASURE])
2668 >> CONJ_TAC
2669 >- (HO_MATCH_MP_TAC IN_MEASURABLE_BOREL_MUL_INDICATOR >> rw []
2670 >- (MATCH_MP_TAC IN_MEASURABLE_BOREL_CONST >> rw [] \\
2671 Q.EXISTS_TAC ‘2 pow n’ >> rw []) \\
2672 ‘{x | x IN m_space m /\ 2 pow n <= f x} =
2673 {x | 2 pow n <= f x} INTER m_space m’ by SET_TAC [] >> POP_ORW \\
2674 METIS_TAC [IN_MEASURABLE_BOREL_ALL_MEASURE])
2675 >> NTAC 2 STRIP_TAC >> DISJ1_TAC (* easier *)
2676 >> CONJ_TAC >> MATCH_MP_TAC pos_not_neginf
2677 >| [ (* goal 1 (of 2) *)
2678 MATCH_MP_TAC EXTREAL_SUM_IMAGE_POS >> SIMP_TAC std_ss [FINITE_COUNT] \\
2679 Q.X_GEN_TAC ‘i’ >> STRIP_TAC \\
2680 MATCH_MP_TAC le_mul >> rw [INDICATOR_FN_POS] \\
2681 ‘2 pow n = Normal (2 pow n)’
2682 by METIS_TAC [extreal_pow_def, extreal_of_num_def] >> POP_ORW \\
2683 MATCH_MP_TAC le_div \\
2684 reverse CONJ_TAC >- RW_TAC real_ss [REAL_POW_LT] \\
2685 rw [extreal_of_num_def, extreal_le_eq],
2686 (* goal 2 (of 2) *)
2687 MATCH_MP_TAC le_mul >> rw [INDICATOR_FN_POS] \\
2688 MATCH_MP_TAC pow_pos_le >> REWRITE_TAC [le_02] ]
2689QED
2690
2691Theorem lemma_fn_seq_in_psfis[local] :
2692 !m f n. measure_space m /\ f IN Borel_measurable (measurable_space m) /\
2693 (!x. x IN m_space m ==> 0 <= f x) ==>
2694 fn_seq_integral m f n IN psfis m (fn_seq m f n)
2695Proof
2696 RW_TAC std_ss [IN_psfis_eq, pos_simple_fn_def]
2697 >> qexistsl_tac [`count (4 ** n + 1)`,
2698 `(\k. if k IN count (4 ** n) then
2699 {x | x IN m_space m /\ &k / 2 pow n <= f x /\
2700 f x < (&k + 1) / 2 pow n}
2701 else {x | x IN m_space m /\ 2 pow n <= f x})`,
2702 `(\k. if k IN count (4 ** n) then &k / 2 pow n else 2 pow n)`]
2703 >> `FINITE (count (4 ** n)) /\
2704 FINITE (count (4 ** n + 1))` by RW_TAC std_ss [FINITE_COUNT]
2705 >> `!n. 0:real < 2 pow n` by RW_TAC real_ss [REAL_POW_LT]
2706 >> `!n. 0:real <> 2 pow n` by RW_TAC real_ss [REAL_LT_IMP_NE]
2707 >> `!n k. &k / 2 pow n = Normal (&k / 2 pow n)`
2708 by METIS_TAC [extreal_of_num_def,extreal_pow_def,extreal_div_eq]
2709 >> `!n z. Normal z / 2 pow n = Normal (z / 2 pow n)`
2710 by METIS_TAC [extreal_pow_def,extreal_div_eq,extreal_of_num_def]
2711 >> ‘sigma_algebra (measurable_space m)’
2712 by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA]
2713 (* flatten all CONJ *)
2714 >> ASM_SIMP_TAC std_ss [GSYM CONJ_ASSOC]
2715 >> CONJ_TAC >- RW_TAC std_ss [lemma_fn_seq_positive]
2716 >> CONJ_TAC
2717 >- (RW_TAC real_ss [fn_seq_def, IN_COUNT, GSYM ADD1, COUNT_SUC] \\
2718 `(\i. Normal (if i < 4 ** n then &i / 2 pow n else 2 pow n) *
2719 indicator_fn
2720 (if i < 4 ** n then
2721 {x | x IN m_space m /\ Normal (&i / 2 pow n) <= f x /\
2722 f x < (&i + 1) / 2 pow n}
2723 else {x | x IN m_space m /\ 2 pow n <= f x}) t) =
2724 (\i. if i < 4 ** n then &i / 2 pow n *
2725 indicator_fn {x | x IN m_space m /\ &i / 2 pow n <= f x /\
2726 f x < (&i + 1) / 2 pow n} t
2727 else 2 pow n * indicator_fn {x | x IN m_space m /\ 2 pow n <= f x} t)`
2728 by (RW_TAC std_ss [FUN_EQ_THM] \\
2729 Cases_on `i < 4 ** n` >- RW_TAC std_ss [] \\
2730 RW_TAC std_ss [extreal_of_num_def, extreal_pow_def]) >> POP_ORW \\
2731 (MP_TAC o Q.SPEC `4 ** n` o UNDISCH o
2732 Q.SPECL [`(\i. if i < 4 ** n then
2733 &i / 2 pow n *
2734 indicator_fn
2735 {x | x IN m_space m /\
2736 &i / 2 pow n <= f x /\ f x < (&i + 1) / 2 pow n} t
2737 else 2 pow n *
2738 indicator_fn {x | x IN m_space m /\ 2 pow n <= f x} t)`,
2739 `count (4 ** n)`] o
2740 INST_TYPE [alpha |-> ``:num``]) EXTREAL_SUM_IMAGE_PROPERTY \\
2741 `!x. (\i. if i < 4 ** n then
2742 &i / 2 pow n * indicator_fn
2743 {x | x IN m_space m /\ &i / 2 pow n <= f x /\ f x < (&i + 1) / 2 pow n} t
2744 else 2 pow n * indicator_fn {x | x IN m_space m /\ 2 pow n <= f x} t) x <> NegInf`
2745 by (RW_TAC std_ss [indicator_fn_def,mul_rone,mul_rzero,num_not_infty] \\
2746 METIS_TAC [extreal_of_num_def,extreal_pow_def,extreal_not_infty]) \\
2747 RW_TAC std_ss [] \\
2748 `count (4 ** n) DELETE 4 ** n = count (4 ** n)`
2749 by METIS_TAC [DELETE_NON_ELEMENT,IN_COUNT,LESS_EQ_REFL,NOT_LESS] \\
2750 RW_TAC std_ss [] \\
2751 Q.PAT_X_ASSUM `SIGMA _ _ = _` (K ALL_TAC) \\
2752 FULL_SIMP_TAC std_ss [GSYM IN_COUNT] \\
2753 `!i. Normal (&i / 2 pow n) = &i / 2 pow n` by METIS_TAC [] >> POP_ORW \\
2754 Q.PAT_X_ASSUM `!n k. &k / 2 pow n = Normal (&k / 2 pow n)` (K ALL_TAC) \\
2755 `!i. (\i. &i / 2 pow n * indicator_fn
2756 {x | x IN m_space m /\ &i / 2 pow n <= f x /\ f x < (&i + 1) / 2 pow n} t) i <> NegInf`
2757 by (RW_TAC std_ss [indicator_fn_def,mul_rone,mul_rzero,num_not_infty] \\
2758 METIS_TAC [extreal_of_num_def,extreal_pow_def,extreal_not_infty]) \\
2759 (MP_TAC o
2760 Q.SPECL [`count (4 ** n)`,
2761 `(\k. &k / 2 pow n * indicator_fn
2762 {x | x IN m_space m /\ &k / 2 pow n <= f x /\ f x < (&k + 1) / 2 pow n} t)`,
2763 `2 pow n * indicator_fn {x | x IN m_space m /\ 2 pow n <= f x} t`] o
2764 INST_TYPE [alpha |-> ``:num``] o GSYM) EXTREAL_SUM_IMAGE_IN_IF_ALT \\
2765 RW_TAC std_ss [] \\
2766 MATCH_MP_TAC add_comm >> DISJ1_TAC \\
2767 reverse CONJ_TAC
2768 >- (RW_TAC std_ss [indicator_fn_def,mul_rone,mul_rzero,num_not_infty] \\
2769 METIS_TAC [extreal_of_num_def,extreal_pow_def,extreal_not_infty]) \\
2770 FULL_SIMP_TAC std_ss [EXTREAL_SUM_IMAGE_NOT_INFTY])
2771 >> CONJ_TAC
2772 >- (RW_TAC real_ss [] >| (* 2 subgoals *)
2773 [ (* goal 1 (of 2) *)
2774 `{x | x IN m_space m /\ Normal (&i / 2 pow n) <= f x /\
2775 f x < (&i + 1) / 2 pow n} =
2776 {x | Normal (&i / 2 pow n) <= f x /\ f x < Normal (&(i + 1) / 2 pow n)}
2777 INTER m_space m`
2778 by (RW_TAC std_ss [EXTENSION,GSPECIFICATION,IN_INTER,CONJ_COMM] \\
2779 `(&i + 1:extreal) = &(i + 1)`
2780 by RW_TAC std_ss [extreal_add_def,extreal_of_num_def,REAL_ADD] \\
2781 METIS_TAC []) >> POP_ORW \\
2782 METIS_TAC [IN_MEASURABLE_BOREL_ALL, m_space_def, measurable_sets_def,
2783 space_def, subsets_def],
2784 (* goal 2 (of 2) *)
2785 `{x | x IN m_space m /\ 2 pow n <= f x} =
2786 {x | Normal (2 pow n) <= f x} INTER m_space m`
2787 by RW_TAC std_ss [EXTENSION, GSPECIFICATION, IN_INTER, CONJ_COMM,
2788 extreal_of_num_def, extreal_pow_def] >> POP_ORW \\
2789 METIS_TAC [IN_MEASURABLE_BOREL_ALL, m_space_def, measurable_sets_def,
2790 space_def, subsets_def] ])
2791 >> CONJ_TAC
2792 >- RW_TAC real_ss [extreal_of_num_def,extreal_pow_def,extreal_le_def,
2793 REAL_LT_IMP_LE,POW_POS,REAL_LE_DIV]
2794 >> CONJ_TAC
2795 >- (RW_TAC real_ss [DISJOINT_DEF, IN_COUNT, IN_INTER, EXTENSION,
2796 GSPECIFICATION] >| (* 3 subgoals *)
2797 [ (* goal 1 (of 3) *)
2798 reverse EQ_TAC >- RW_TAC std_ss [NOT_IN_EMPTY] \\
2799 RW_TAC real_ss [] \\
2800 RW_TAC std_ss [NOT_IN_EMPTY] \\
2801 Cases_on `i < j`
2802 >- (`i + 1 <= j` by RW_TAC real_ss [] \\
2803 `&(i + 1) / 2:real pow n <= &j / 2 pow n`
2804 by RW_TAC real_ss [REAL_LE_RDIV_EQ,REAL_POW_LT,REAL_DIV_RMUL,REAL_POS_NZ] \\
2805 `&(i + 1) / 2 pow n <= &j / 2 pow n`
2806 by RW_TAC std_ss [extreal_of_num_def, extreal_add_def, extreal_pow_def,
2807 extreal_div_eq, extreal_lt_eq, extreal_le_def] \\
2808 `&j / 2 pow n <= f x` by METIS_TAC [] \\
2809 `(&i + 1) = &(i + 1)`
2810 by METIS_TAC [extreal_of_num_def,extreal_add_def,REAL_ADD] \\
2811 METIS_TAC [lte_trans,extreal_lt_def]) \\
2812 `j < i` by RW_TAC real_ss [LESS_OR_EQ] \\
2813 `j + 1 <= i` by RW_TAC real_ss [] \\
2814 `&(j + 1) / 2 pow n <= &i / 2:real pow n`
2815 by RW_TAC real_ss [REAL_LE_RDIV_EQ,REAL_POW_LT,REAL_DIV_RMUL,REAL_POS_NZ] \\
2816 `&(j + 1) / 2 pow n <= &i / 2 pow n`
2817 by RW_TAC std_ss [extreal_of_num_def, extreal_add_def, extreal_pow_def,
2818 extreal_div_eq, extreal_lt_eq, extreal_le_def] \\
2819 `(&j + 1) = &(j + 1)`
2820 by METIS_TAC [extreal_of_num_def, extreal_add_def, REAL_ADD] \\
2821 METIS_TAC [lte_trans, extreal_lt_def],
2822 (* goal 2 (of 3) *)
2823 reverse EQ_TAC >- RW_TAC std_ss [NOT_IN_EMPTY] \\
2824 RW_TAC std_ss [] \\
2825 RW_TAC real_ss [NOT_IN_EMPTY] \\
2826 `&(i + 1) <= &(4 ** n):real` by RW_TAC real_ss [] \\
2827 FULL_SIMP_TAC std_ss [GSYM REAL_OF_NUM_POW] \\
2828 `&(i + 1) / 2 pow n <= 4 pow n / 2:real pow n`
2829 by RW_TAC real_ss [REAL_LE_RDIV_EQ,REAL_POW_LT,REAL_DIV_RMUL,REAL_POS_NZ] \\
2830 `&(i + 1) / 2 pow n <= 2:real pow n`
2831 by METIS_TAC [REAL_POW_DIV,EVAL ``4/2:real``] \\
2832 `&(i + 1) / 2 pow n <= 2 pow n`
2833 by RW_TAC std_ss [extreal_of_num_def, extreal_add_def, extreal_pow_def,
2834 extreal_div_eq, extreal_lt_eq, extreal_le_def] \\
2835 `(&i + 1) = &(i + 1)`
2836 by METIS_TAC [extreal_of_num_def, extreal_add_def, REAL_ADD] \\
2837 METIS_TAC [le_trans, extreal_lt_def],
2838 (* goal 3 (of 3) *)
2839 reverse EQ_TAC >- RW_TAC std_ss [NOT_IN_EMPTY] \\
2840 RW_TAC real_ss [] \\
2841 RW_TAC std_ss [NOT_IN_EMPTY] \\
2842 `&(j + 1) <= &(4 ** n):real` by RW_TAC real_ss [] \\
2843 FULL_SIMP_TAC std_ss [GSYM REAL_OF_NUM_POW] \\
2844 `&(j + 1) / 2 pow n <= 4:real pow n / 2 pow n`
2845 by RW_TAC real_ss [REAL_LE_RDIV_EQ,REAL_POW_LT,REAL_DIV_RMUL,REAL_POS_NZ] \\
2846 `&(j + 1) / 2 pow n <= 2:real pow n`
2847 by METIS_TAC [REAL_POW_DIV,EVAL ``4/2:real``] \\
2848 `&(j + 1) / 2 pow n <= 2 pow n`
2849 by RW_TAC std_ss [extreal_of_num_def, extreal_add_def, extreal_pow_def,
2850 extreal_div_eq, extreal_lt_eq, extreal_le_def] \\
2851 `(&j + 1) = &(j + 1)`
2852 by METIS_TAC [extreal_of_num_def, extreal_add_def, REAL_ADD] \\
2853 METIS_TAC [lte_trans,extreal_lt_def] ])
2854 (* BIGUNION (IMAGE ... = m_space m *)
2855 >> CONJ_TAC
2856 >- (RW_TAC std_ss [EXTENSION,IN_BIGUNION_IMAGE,GSPECIFICATION] \\
2857 EQ_TAC
2858 >- (RW_TAC std_ss []
2859 >> Cases_on `k IN count (4 ** n)`
2860 >- FULL_SIMP_TAC std_ss [GSPECIFICATION,lemma_fn_3]
2861 >> FULL_SIMP_TAC std_ss [GSPECIFICATION,lemma_fn_3])
2862 >> RW_TAC real_ss [IN_COUNT]
2863 >> `2 pow n <= f x \/
2864 ?k. k IN count (4 ** n) /\ &k / 2 pow n <= f x /\ f x < (&k + 1) / 2 pow n`
2865 by METIS_TAC [lemma_fn_3]
2866 >- (Q.EXISTS_TAC `4 ** n`
2867 >> RW_TAC real_ss [GSPECIFICATION])
2868 >> Q.EXISTS_TAC `k`
2869 >> FULL_SIMP_TAC real_ss [IN_COUNT,GSPECIFICATION]
2870 >> METIS_TAC [])
2871 (* fn_seq_integral m f n = pos_simple_fn_integral m (count (4 ** n + 1)) _ _ *)
2872 >> RW_TAC real_ss [pos_simple_fn_integral_def,fn_seq_integral_def]
2873 >> `4 ** n + 1 = SUC (4 ** n)` by RW_TAC real_ss []
2874 >> ASM_SIMP_TAC std_ss []
2875 >> RW_TAC std_ss [COUNT_SUC,IN_COUNT]
2876 >> `(\i. Normal (if i < 4 ** n then &i / 2 pow n else 2 pow n) *
2877 measure m (if i < 4 ** n then
2878 {x | x IN m_space m /\ Normal (&i / 2 pow n) <= f x /\ f x < (&i + 1) / 2 pow n}
2879 else {x | x IN m_space m /\ 2 pow n <= f x})) =
2880 (\i. if i < 4 ** n then
2881 &i / 2 pow n *
2882 measure m {x | x IN m_space m /\ &i / 2 pow n <= f x /\ f x < (&i + 1) / 2 pow n}
2883 else 2 pow n * measure m {x | x IN m_space m /\ 2 pow n <= f x})`
2884 by (RW_TAC std_ss [FUN_EQ_THM] \\
2885 Cases_on `i < 4 ** n` >- RW_TAC std_ss [] \\
2886 RW_TAC std_ss [extreal_of_num_def,extreal_pow_def])
2887 >> POP_ORW
2888 >> (MP_TAC o Q.SPEC `4 ** n` o UNDISCH o Q.SPECL
2889 [`(\i. if i < 4 ** n then
2890 &i / 2 pow n *
2891 measure m {x | x IN m_space m /\ &i / 2 pow n <= f x /\ f x < (&i + 1) / 2 pow n}
2892 else
2893 2 pow n * measure m {x | x IN m_space m /\ 2 pow n <= f x})`,
2894 `count (4 ** n)`]
2895 o INST_TYPE [alpha |-> ``:num``]) EXTREAL_SUM_IMAGE_PROPERTY
2896 >> `!x. (\i. if i < 4 ** n then &i / 2 pow n * measure m {x | x IN m_space m /\ &i / 2 pow n <= f x /\ f x < (&i + 1) / 2 pow n}
2897 else 2 pow n * measure m {x | x IN m_space m /\ 2 pow n <= f x}) x <> NegInf`
2898 by (RW_TAC std_ss []
2899 >- (`0 <= &x / 2:real pow n` by RW_TAC real_ss [REAL_LE_DIV,REAL_LT_IMP_LE]
2900 >> Suff `measure m {x' | x' IN m_space m /\ Normal (&x / 2 pow n) <= f x' /\ f x' < (&x + 1) / 2 pow n} <> NegInf`
2901 >- METIS_TAC [mul_not_infty]
2902 >> Suff `{x' | x' IN m_space m /\ Normal (&x / 2 pow n) <= f x' /\ f x' < (&x + 1) / 2 pow n} IN measurable_sets m`
2903 >- METIS_TAC [positive_not_infty,MEASURE_SPACE_POSITIVE]
2904 >> `{x' | x' IN m_space m /\ Normal (&x / 2 pow n) <= f x' /\ f x' < (&x + 1) / 2 pow n} =
2905 {x' | Normal (&x / 2 pow n) <= f x' /\ f x' < (&x + 1) / 2 pow n} INTER m_space m`
2906 by (RW_TAC std_ss [EXTENSION,GSPECIFICATION,IN_INTER] >> METIS_TAC [])
2907 >> `!x. &x + 1 = &(x + 1)` by METIS_TAC [extreal_of_num_def,extreal_add_def,REAL_ADD]
2908 >> METIS_TAC [IN_MEASURABLE_BOREL_ALL, measurable_sets_def,subsets_def,space_def,m_space_def])
2909 >> RW_TAC std_ss [extreal_of_num_def,extreal_pow_def]
2910 >> `0:real <= 2 pow n` by FULL_SIMP_TAC std_ss [REAL_LT_IMP_LE]
2911 >> Suff `{x | x IN m_space m /\ Normal (2 pow n) <= f x} IN measurable_sets m`
2912 >- METIS_TAC [mul_not_infty,positive_not_infty,MEASURE_SPACE_POSITIVE]
2913 >> `{x | x IN m_space m /\ Normal (2 pow n) <= f x} = {x | Normal (2 pow n) <= f x} INTER m_space m`
2914 by (RW_TAC std_ss [EXTENSION,GSPECIFICATION,IN_INTER] >> METIS_TAC [])
2915 >> METIS_TAC [IN_MEASURABLE_BOREL_ALL, measurable_sets_def,subsets_def,space_def,m_space_def])
2916 >> RW_TAC std_ss []
2917 >> `count (4 ** n) DELETE 4 ** n = count (4 ** n)`
2918 by METIS_TAC [DELETE_NON_ELEMENT,IN_COUNT,LESS_EQ_REFL,NOT_LESS]
2919 >> RW_TAC std_ss []
2920 >> Q.PAT_X_ASSUM `SIGMA _ _ = _` (K ALL_TAC)
2921 >> FULL_SIMP_TAC std_ss [GSYM IN_COUNT]
2922 >> `!i. (\i. Normal (&i / 2 pow n) * measure m {x | x IN m_space m /\ Normal (&i / 2 pow n) <= f x /\ f x < (&i + 1) / 2 pow n}) i <> NegInf`
2923 by (RW_TAC std_ss []
2924 >> `0 <= &i / 2:real pow n` by RW_TAC real_ss [REAL_LE_DIV,REAL_LT_IMP_LE]
2925 >> Suff `{x | x IN m_space m /\ Normal (&i / 2 pow n) <= f x /\ f x < (&i + 1) / 2 pow n} IN measurable_sets m`
2926 >- METIS_TAC [mul_not_infty,positive_not_infty,MEASURE_SPACE_POSITIVE]
2927 >> `{x | x IN m_space m /\ Normal (&i / 2 pow n) <= f x /\ f x < (&i + 1) / 2 pow n} =
2928 {x | Normal (&i / 2 pow n) <= f x /\ f x < (&i + 1) / 2 pow n} INTER m_space m`
2929 by (RW_TAC std_ss [EXTENSION,GSPECIFICATION,IN_INTER] >> METIS_TAC [])
2930 >> `!x. &x + 1 = &(x + 1)` by METIS_TAC [extreal_of_num_def,extreal_add_def,REAL_ADD]
2931 >> METIS_TAC [IN_MEASURABLE_BOREL_ALL, measurable_sets_def,subsets_def,space_def,m_space_def])
2932 >> (MP_TAC o
2933 Q.SPECL [`count (4 ** n)`,
2934 `(\k. &k / 2 pow n * measure m {x | x IN m_space m /\ &k / 2 pow n <= f x /\ f x < (&k + 1) / 2 pow n})`,
2935 ` 2 pow n * measure m {x | x IN m_space m /\ 2 pow n <= f x}`] o
2936 INST_TYPE [alpha |-> ``:num``] o GSYM) EXTREAL_SUM_IMAGE_IN_IF_ALT
2937 >> RW_TAC std_ss []
2938 >> FULL_SIMP_TAC std_ss []
2939 >> MATCH_MP_TAC add_comm
2940 >> DISJ1_TAC
2941 >> reverse CONJ_TAC
2942 >- (RW_TAC std_ss [extreal_of_num_def,extreal_pow_def]
2943 >> `0:real <= 2 pow n` by FULL_SIMP_TAC std_ss [REAL_LT_IMP_LE]
2944 >> Suff `{x | x IN m_space m /\ Normal (2 pow n) <= f x} IN measurable_sets m`
2945 >- METIS_TAC [mul_not_infty,positive_not_infty,MEASURE_SPACE_POSITIVE]
2946 >> `{x | x IN m_space m /\ Normal (2 pow n) <= f x} =
2947 {x | Normal (2 pow n) <= f x} INTER m_space m`
2948 by (RW_TAC std_ss [EXTENSION,GSPECIFICATION,IN_INTER] >> METIS_TAC [])
2949 >> METIS_TAC [IN_MEASURABLE_BOREL_ALL, measurable_sets_def, subsets_def,
2950 space_def, m_space_def])
2951 >> FULL_SIMP_TAC std_ss [EXTREAL_SUM_IMAGE_NOT_INFTY]
2952QED
2953
2954(* This huge theorem (from HVG Concordia) cannot be put into borelTheory as it
2955 depends on several lemmas here.
2956 *)
2957Theorem BOREL_INDUCT : (* was: Induct_on_Borel_functions *)
2958 !f m P.
2959 measure_space m /\
2960 f IN measurable (m_space m, measurable_sets m) Borel /\ (!x. 0 <= f x) /\
2961 (!f g. f IN measurable (m_space m, measurable_sets m) Borel /\
2962 g IN measurable (m_space m, measurable_sets m) Borel /\
2963 (!x. x IN m_space m ==> (f x = g x)) /\ P f ==> P g) /\
2964 (!A. A IN measurable_sets m ==> P (indicator_fn A)) /\
2965 (!f c. f IN measurable (m_space m, measurable_sets m) Borel /\
2966 0 <= c /\ (!x. 0 <= f x) /\ P f ==> P (\x. c * f x)) /\
2967 (!f g. f IN measurable (m_space m, measurable_sets m) Borel /\
2968 g IN measurable (m_space m, measurable_sets m) Borel /\
2969 (!x. 0 <= f x) /\ P f /\ (!x. 0 <= g x) /\ P g ==>
2970 P (\x. f x + g x)) /\
2971 (!u. (!i:num. (u i) IN measurable (m_space m, measurable_sets m) Borel) /\
2972 (!i x. 0 <= u i x) /\ (!x. mono_increasing (\i. u i x)) /\
2973 (!i. P (u i)) ==> P (\x. sup (IMAGE (\i. u i x) UNIV))) ==> P f
2974Proof
2975 RW_TAC std_ss []
2976 >> ‘sigma_algebra (measurable_space m)’ by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA]
2977 >> FIRST_ASSUM MATCH_MP_TAC
2978 >> Q.EXISTS_TAC `(\x. sup (IMAGE (\i. fn_seq m f i x) univ(:num)))`
2979 >> ASM_SIMP_TAC std_ss [lemma_fn_seq_sup]
2980 THEN
2981 Know `!i. (\x. SIGMA
2982 (\k. &k / 2 pow i *
2983 indicator_fn {x |
2984 x IN m_space m /\ &k / 2 pow i <= f x /\
2985 f x < (&k + 1) / 2 pow i} x) (count (4 ** i)))
2986 IN measurable (m_space m, measurable_sets m) Borel` THEN1
2987 (Q.X_GEN_TAC `i` THEN
2988 Q.ABBREV_TAC `s = count (4 ** i)` THEN
2989 Q.ABBREV_TAC `g = (\k x. &k / 2 pow i *
2990 indicator_fn
2991 {x |
2992 x IN m_space m /\ &k / 2 pow i <= f x /\
2993 f x < (&k + 1) / 2 pow i} x)` THEN
2994
2995 Suff `FINITE s /\ sigma_algebra (m_space m, measurable_sets m) /\
2996 (!i. i IN s ==> g i IN measurable (m_space m, measurable_sets m) Borel) /\
2997 (!i x. i IN s /\ x IN space (m_space m, measurable_sets m) ==> g i x <> NegInf) /\
2998 (!x. x IN space (m_space m, measurable_sets m) ==>
2999 ((\x. SIGMA
3000 (\k. &k / 2 pow i *
3001 indicator_fn {x |
3002 x IN m_space m /\ &k / 2 pow i <= f x /\
3003 f x < (&k + 1) / 2 pow i} x) s) x = SIGMA (\i. g i x) s))` THEN1
3004 (DISCH_THEN (MP_TAC o MATCH_MP IN_MEASURABLE_BOREL_SUM) THEN
3005 SIMP_TAC std_ss []) THEN
3006
3007 Q.UNABBREV_TAC `s` THEN Q.UNABBREV_TAC `g` THEN
3008 FULL_SIMP_TAC std_ss [measure_space_def, FINITE_COUNT] THEN
3009 SIMP_TAC std_ss [space_def, IN_UNIV] THEN
3010
3011 `2 pow i <> NegInf /\ 2 pow i <> PosInf`
3012 by METIS_TAC [pow_not_infty, num_not_infty] THEN
3013 Know `real (2 pow i) <> 0`
3014 >- (ASM_SIMP_TAC std_ss [GSYM extreal_11, normal_real,
3015 GSYM extreal_of_num_def] THEN
3016 Suff `(0 :extreal) < 2 pow i` >- METIS_TAC [lt_imp_ne] THEN
3017 METIS_TAC [lt_02, pow_pos_lt]) >> DISCH_TAC THEN
3018
3019 reverse CONJ_TAC THEN1
3020 (Q.X_GEN_TAC `n` THEN
3021 RW_TAC std_ss [lt_infty] THEN MATCH_MP_TAC lte_trans THEN
3022 Q.EXISTS_TAC `0` THEN SIMP_TAC std_ss [GSYM lt_infty, num_not_infty] THEN
3023 MATCH_MP_TAC le_mul THEN REWRITE_TAC [INDICATOR_FN_POS] THEN
3024 `2 pow i = Normal (real (2 pow i))` by METIS_TAC [normal_real] THEN
3025 POP_ASSUM (fn th => ONCE_REWRITE_TAC [th]) THEN
3026 ASM_SIMP_TAC std_ss [extreal_div_def] THEN
3027 MATCH_MP_TAC le_mul THEN SIMP_TAC std_ss [le_num] THEN
3028 ASM_SIMP_TAC real_ss [extreal_inv_def] THEN
3029 SIMP_TAC std_ss [extreal_of_num_def, extreal_le_def] THEN
3030 SIMP_TAC std_ss [REAL_LE_INV_EQ] THEN SIMP_TAC std_ss [GSYM extreal_le_def] THEN
3031 ASM_SIMP_TAC std_ss [normal_real, GSYM extreal_of_num_def] THEN
3032 METIS_TAC [le_02, pow_pos_le]) THEN
3033
3034 Q.X_GEN_TAC `n` THEN
3035 RW_TAC std_ss [] THEN MATCH_MP_TAC IN_MEASURABLE_BOREL_CMUL THEN
3036 qexistsl_tac
3037 [`(\x. indicator_fn
3038 {x | x IN m_space m /\ &n / 2 pow i <= f x /\ f x < (&n + 1) / 2 pow i} x)`,
3039 `real (&n / 2 pow i)`] THEN
3040
3041 Know `&n / 2 pow i <> NegInf /\ &n / 2 pow i <> PosInf` THEN1
3042 (`2 pow i = Normal (real (2 pow i))` by METIS_TAC [normal_real] THEN
3043 POP_ASSUM (fn th => ONCE_REWRITE_TAC [th]) THEN
3044 `&n = Normal (&n)` by PROVE_TAC [extreal_of_num_def] >> POP_ORW \\
3045 ASM_SIMP_TAC std_ss [extreal_div_eq, extreal_not_infty]) >> STRIP_TAC THEN
3046
3047 ASM_SIMP_TAC std_ss [normal_real] THEN
3048 MATCH_MP_TAC IN_MEASURABLE_BOREL_INDICATOR THEN
3049 Q.EXISTS_TAC `{x | x IN m_space m /\ &n / 2 pow i <= f x /\ f x < (&n + 1) / 2 pow i}` THEN
3050 ASM_SIMP_TAC std_ss [] THEN
3051 Q_TAC SUFF_TAC
3052 `{x | x IN m_space m /\ &n / 2 pow i <= f x /\ f x < (&n + 1) / 2 pow i} =
3053 PREIMAGE f {x | &n / 2 pow i <= x /\ x < (&n + 1) / 2 pow i} INTER
3054 space (m_space m, measurable_sets m)` THENL
3055 [DISC_RW_KILL,
3056 SIMP_TAC std_ss [PREIMAGE_def, space_def, INTER_UNIV] THEN
3057 SET_TAC []] THEN
3058 FULL_SIMP_TAC std_ss [IN_MEASURABLE] THEN
3059 FIRST_X_ASSUM MATCH_MP_TAC THEN
3060
3061 Suff `(&n + 1) / 2 pow i <> NegInf /\ (&n + 1) / 2 pow i <> PosInf`
3062 >- (STRIP_TAC THEN METIS_TAC [BOREL_MEASURABLE_SETS_CO, normal_real]) THEN
3063
3064 `2 pow i = Normal (real (2 pow i))` by METIS_TAC [normal_real] THEN
3065 POP_ASSUM (fn th => ONCE_REWRITE_TAC [th]) THEN
3066 Know `&n + 1 = Normal (&n + 1)`
3067 >- (REWRITE_TAC [extreal_of_num_def, extreal_add_def]) >> Rewr' THEN
3068 ASM_SIMP_TAC std_ss [extreal_div_eq, extreal_not_infty]
3069 ) THEN DISCH_TAC THEN
3070
3071 Know `!i. (\x. 2 pow i * indicator_fn {x | x IN m_space m /\ 2 pow i <= f x} x)
3072 IN measurable (m_space m, measurable_sets m) Borel` THEN1
3073 (GEN_TAC THEN MATCH_MP_TAC IN_MEASURABLE_BOREL_CMUL THEN
3074 `2 pow i <> NegInf /\ 2 pow i <> PosInf` by
3075 METIS_TAC [pow_not_infty, num_not_infty] THEN
3076 Q.EXISTS_TAC `(\x. indicator_fn {x | x IN m_space m /\ 2 pow i <= f x} x)` THEN
3077 Q.EXISTS_TAC `real (2 pow i)` THEN ASM_SIMP_TAC std_ss [normal_real] THEN
3078 FULL_SIMP_TAC std_ss [measure_space_def] THEN
3079 MATCH_MP_TAC IN_MEASURABLE_BOREL_INDICATOR THEN
3080 Q.EXISTS_TAC `{x | x IN m_space m /\ 2 pow i <= f x}` THEN
3081 ASM_SIMP_TAC std_ss [space_def, IN_UNIV] THEN
3082 Q_TAC SUFF_TAC `{x | x IN m_space m /\ 2 pow i <= f x} =
3083 PREIMAGE f {x | 2 pow i <= x} INTER space (m_space m,measurable_sets m)` THENL
3084 [DISC_RW_KILL,
3085 SIMP_TAC std_ss [PREIMAGE_def, space_def, INTER_UNIV] THEN
3086 SET_TAC []] THEN
3087 FULL_SIMP_TAC std_ss [IN_MEASURABLE] THEN
3088 FIRST_X_ASSUM MATCH_MP_TAC THEN METIS_TAC [BOREL_MEASURABLE_SETS_CR, normal_real]
3089 ) THEN DISCH_TAC THEN
3090
3091 Know `!i. fn_seq m f i IN measurable (m_space m,measurable_sets m) Borel` THEN1
3092 (SIMP_TAC std_ss [fn_seq_def] THEN GEN_TAC THEN
3093 MATCH_MP_TAC IN_MEASURABLE_BOREL_ADD THEN
3094 qexistsl_tac
3095 [`(\x. SIGMA
3096 (\k. &k / 2 pow i *
3097 indicator_fn {x |
3098 x IN m_space m /\ &k / 2 pow i <= f x /\
3099 f x < (&k + 1) / 2 pow i} x) (count (4 ** i)))`,
3100 `(\x. 2 pow i * indicator_fn {x | x IN m_space m /\ 2 pow i <= f x} x)`] THEN
3101 POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN FULL_SIMP_TAC std_ss [measure_space_def] THEN
3102
3103 `2 pow i <> NegInf /\ 2 pow i <> PosInf`
3104 by METIS_TAC [pow_not_infty, num_not_infty] THEN
3105 Know `real (2 pow i) <> 0`
3106 >- (ASM_SIMP_TAC std_ss [GSYM extreal_11, normal_real,
3107 GSYM extreal_of_num_def] THEN
3108 Suff `(0 :extreal) < 2 pow i` >- METIS_TAC [lt_imp_ne] THEN
3109 METIS_TAC [lt_02, pow_pos_lt]) >> DISCH_TAC THEN
3110
3111 RW_TAC std_ss [] \\
3112 DISJ1_TAC \\
3113 reverse CONJ_TAC
3114 >- (MATCH_MP_TAC pos_not_neginf \\
3115 MATCH_MP_TAC le_mul >> rw [pow_pos_le, INDICATOR_FN_POS]) \\
3116 SIMP_TAC std_ss [lt_infty] THEN MATCH_MP_TAC lte_trans THEN
3117 Q.EXISTS_TAC `0` THEN SIMP_TAC std_ss [GSYM lt_infty, num_not_infty] THEN
3118 MATCH_MP_TAC EXTREAL_SUM_IMAGE_POS THEN REWRITE_TAC [FINITE_COUNT] THEN
3119 Q.X_GEN_TAC `n` THEN RW_TAC std_ss [IN_UNIV] THEN
3120 MATCH_MP_TAC le_mul THEN REWRITE_TAC [INDICATOR_FN_POS] THEN
3121 `2 pow i = Normal (real (2 pow i))` by METIS_TAC [normal_real] THEN
3122 POP_ASSUM (fn th => ONCE_REWRITE_TAC [th]) THEN
3123 ASM_SIMP_TAC std_ss [extreal_div_def] THEN
3124 MATCH_MP_TAC le_mul THEN SIMP_TAC std_ss [le_num] THEN
3125 ASM_SIMP_TAC real_ss [extreal_inv_def] THEN
3126 SIMP_TAC std_ss [extreal_of_num_def, extreal_le_def] THEN
3127 SIMP_TAC std_ss [REAL_LE_INV_EQ] THEN SIMP_TAC std_ss [GSYM extreal_le_def] THEN
3128 ASM_SIMP_TAC std_ss [normal_real, GSYM extreal_of_num_def] THEN
3129 METIS_TAC [le_02, pow_pos_le]) THEN DISCH_TAC THEN
3130
3131 CONJ_TAC THENL
3132 [MATCH_MP_TAC IN_MEASURABLE_BOREL_MONO_SUP THEN
3133 Q.EXISTS_TAC `fn_seq m f` THEN SIMP_TAC std_ss [] THEN
3134 CONJ_TAC THENL
3135 [METIS_TAC [measure_space_def], ALL_TAC] THEN
3136 CONJ_TAC THENL
3137 [ALL_TAC,
3138 GEN_TAC THEN GEN_TAC THEN
3139 `mono_increasing (\n. fn_seq m f n x)` by METIS_TAC [lemma_fn_seq_mono_increasing] THEN
3140 FULL_SIMP_TAC std_ss [ext_mono_increasing_def] THEN
3141 FIRST_X_ASSUM MATCH_MP_TAC] THEN ASM_SIMP_TAC std_ss [],
3142 ALL_TAC] THEN
3143
3144 FIRST_X_ASSUM MATCH_MP_TAC THEN
3145 ASM_SIMP_TAC std_ss [lemma_fn_seq_mono_increasing, lemma_fn_seq_positive] THEN
3146
3147 GEN_TAC THEN SIMP_TAC std_ss [fn_seq_def] THEN
3148 Suff `P (\x.
3149 (\x. SIGMA
3150 (\k. &k / 2 pow i *
3151 indicator_fn {x |
3152 x IN m_space m /\ &k / 2 pow i <= f x /\
3153 f x < (&k + 1) / 2 pow i} x) (count (4 ** i))) x +
3154 (\x. 2 pow i * indicator_fn {x | x IN m_space m /\ 2 pow i <= f x} x) x)`
3155 >- (SIMP_TAC std_ss []) THEN
3156 FIRST_ASSUM MATCH_MP_TAC THEN ASM_SIMP_TAC std_ss [IN_UNIV] THEN
3157 CONJ_TAC >-
3158 (GEN_TAC THEN
3159 MATCH_MP_TAC EXTREAL_SUM_IMAGE_POS THEN REWRITE_TAC [FINITE_COUNT] THEN
3160 Q.X_GEN_TAC `n` THEN RW_TAC std_ss [IN_COUNT] THEN
3161 MATCH_MP_TAC le_mul THEN REWRITE_TAC [INDICATOR_FN_POS] THEN
3162
3163 `2 pow i <> NegInf /\ 2 pow i <> PosInf`
3164 by METIS_TAC [pow_not_infty, num_not_infty] THEN
3165 Know `real (2 pow i) <> 0`
3166 >- (ASM_SIMP_TAC std_ss [GSYM extreal_11, normal_real,
3167 GSYM extreal_of_num_def] THEN
3168 Suff `(0 :extreal) < 2 pow i` >- METIS_TAC [lt_imp_ne] THEN
3169 METIS_TAC [lt_02, pow_pos_lt]) >> DISCH_TAC THEN
3170
3171 `2 pow i = Normal (real (2 pow i))` by METIS_TAC [normal_real] THEN
3172 POP_ASSUM (fn th => ONCE_REWRITE_TAC [th]) THEN
3173 ASM_SIMP_TAC std_ss [extreal_div_def] THEN
3174 MATCH_MP_TAC le_mul THEN SIMP_TAC std_ss [le_num] THEN
3175 ASM_SIMP_TAC real_ss [extreal_inv_def] THEN
3176 SIMP_TAC std_ss [extreal_of_num_def, extreal_le_def] THEN
3177 SIMP_TAC std_ss [REAL_LE_INV_EQ] THEN SIMP_TAC std_ss [GSYM extreal_le_def] THEN
3178 ASM_SIMP_TAC std_ss [normal_real, GSYM extreal_of_num_def] THEN
3179 METIS_TAC [le_02, pow_pos_le]) THEN
3180
3181 CONJ_TAC THEN1
3182 (`FINITE (count (4 ** i))` by SIMP_TAC std_ss [FINITE_COUNT] THEN
3183 Suff `(\s. P
3184 (\x. SIGMA
3185 (\k. &k / 2 pow i *
3186 indicator_fn {x | x IN m_space m /\ &k / 2 pow i <= f x /\ f x < (&k + 1) / 2 pow i} x) (s)))
3187 (count (4 ** i))`
3188 >- (SIMP_TAC std_ss []) THEN
3189 POP_ASSUM MP_TAC THEN
3190 Q.ABBREV_TAC `s = count (4 ** i)` THEN Q.SPEC_TAC (`s`,`s`) THEN
3191 MATCH_MP_TAC FINITE_INDUCT THEN
3192 Q.UNABBREV_TAC `s` THEN SIMP_TAC std_ss [FINITE_COUNT] THEN
3193 SIMP_TAC std_ss [EXTREAL_SUM_IMAGE_EMPTY] THEN
3194 CONJ_TAC THEN1
3195 (FIRST_ASSUM MATCH_MP_TAC THEN Q.EXISTS_TAC `indicator_fn {}` THEN
3196 RW_TAC std_ss [] THENL
3197 [MATCH_MP_TAC IN_MEASURABLE_BOREL_INDICATOR THEN Q.EXISTS_TAC `{}` THEN
3198 FULL_SIMP_TAC std_ss [measure_space_def] THEN METIS_TAC [SIGMA_ALGEBRA],
3199 MATCH_MP_TAC IN_MEASURABLE_BOREL_CONST THEN Q.EXISTS_TAC `0` THEN
3200 FULL_SIMP_TAC std_ss [measure_space_def],
3201 SIMP_TAC std_ss [indicator_fn_def, NOT_IN_EMPTY],
3202 ALL_TAC] THEN
3203 FIRST_ASSUM MATCH_MP_TAC THEN
3204 FULL_SIMP_TAC std_ss [measure_space_def, SIGMA_ALGEBRA, subsets_def]) THEN
3205 RW_TAC std_ss [] THEN
3206 Know `!x.
3207 SIGMA
3208 (\k.
3209 &k / 2 pow i *
3210 indicator_fn
3211 {x | x IN m_space m /\ &k / 2 pow i <= f x /\ f x < (&k + 1) / 2 pow i} x)
3212 (e INSERT s) =
3213 (\k. &k / 2 pow i *
3214 indicator_fn {x | x IN m_space m /\ &k / 2 pow i <= f x /\ f x < (&k + 1) / 2 pow i} x) e +
3215 SIGMA
3216 (\k.
3217 &k / 2 pow i *
3218 indicator_fn
3219 {x | x IN m_space m /\ &k / 2 pow i <= f x /\ f x < (&k + 1) / 2 pow i} x)
3220 (s DELETE e)` THEN1
3221 (GEN_TAC THEN FIRST_ASSUM (MP_TAC o MATCH_MP EXTREAL_SUM_IMAGE_PROPERTY) THEN
3222 DISCH_THEN MATCH_MP_TAC THEN DISJ1_TAC THEN
3223 Q.X_GEN_TAC `n` THEN DISCH_TAC THEN
3224 SIMP_TAC std_ss [lt_infty] THEN MATCH_MP_TAC lte_trans THEN
3225 Q.EXISTS_TAC `0` THEN SIMP_TAC std_ss [GSYM lt_infty, num_not_infty] THEN
3226 MATCH_MP_TAC le_mul THEN REWRITE_TAC [INDICATOR_FN_POS] THEN
3227
3228 `2 pow i <> NegInf /\ 2 pow i <> PosInf`
3229 by METIS_TAC [pow_not_infty, num_not_infty] THEN
3230 Know `real (2 pow i) <> 0`
3231 >- (ASM_SIMP_TAC std_ss [GSYM extreal_11, normal_real,
3232 GSYM extreal_of_num_def] THEN
3233 Suff `(0 :extreal) < 2 pow i` >- METIS_TAC [lt_imp_ne] THEN
3234 METIS_TAC [lt_02, pow_pos_lt]) >> DISCH_TAC THEN
3235
3236 `2 pow i = Normal (real (2 pow i))` by METIS_TAC [normal_real] THEN
3237 POP_ASSUM (fn th => ONCE_REWRITE_TAC [th]) THEN
3238 ASM_SIMP_TAC std_ss [extreal_div_def] THEN
3239 MATCH_MP_TAC le_mul THEN SIMP_TAC std_ss [le_num] THEN
3240 ASM_SIMP_TAC real_ss [extreal_inv_def] THEN
3241 SIMP_TAC std_ss [extreal_of_num_def, extreal_le_def] THEN
3242 SIMP_TAC std_ss [REAL_LE_INV_EQ] THEN SIMP_TAC std_ss [GSYM extreal_le_def] THEN
3243 ASM_SIMP_TAC std_ss [normal_real, GSYM extreal_of_num_def] THEN
3244 METIS_TAC [le_02, pow_pos_le]) THEN DISC_RW_KILL THEN
3245 ASM_SIMP_TAC std_ss [SET_RULE ``e NOTIN s ==> (s DELETE e = s)``] THEN
3246 Suff `P (\x.
3247 (\x. &e / 2 pow i *
3248 indicator_fn {x | x IN m_space m /\ &e / 2 pow i <= f x /\ f x < (&e + 1) / 2 pow i}
3249 x) x +
3250 (\x. SIGMA
3251 (\k. &k / 2 pow i *
3252 indicator_fn {x | x IN m_space m /\ &k / 2 pow i <= f x /\ f x < (&k + 1) / 2 pow i} x) s) x)`
3253 >- (SIMP_TAC std_ss []) THEN
3254 FIRST_ASSUM MATCH_MP_TAC THEN ASM_SIMP_TAC std_ss [] THEN
3255
3256 CONJ_TAC THEN1
3257 (MATCH_MP_TAC IN_MEASURABLE_BOREL_CMUL THEN
3258 Know `&e / 2 pow i <> NegInf /\ &e / 2 pow i <> PosInf` THEN1
3259 (`2 pow i <> NegInf /\ 2 pow i <> PosInf` by
3260 METIS_TAC [pow_not_infty, num_not_infty] THEN
3261 `2 pow i = Normal (real (2 pow i))` by METIS_TAC [normal_real] THEN
3262 POP_ASSUM (fn th => ONCE_REWRITE_TAC [th]) THEN
3263 Know `real (2 pow i) <> 0`
3264 >- (ASM_SIMP_TAC std_ss [GSYM extreal_11, normal_real,
3265 GSYM extreal_of_num_def] THEN
3266 Suff `(0 :extreal) < 2 pow i` >- METIS_TAC [lt_imp_ne] THEN
3267 METIS_TAC [lt_02, pow_pos_lt]) >> DISCH_TAC THEN
3268 `&e = Normal (&e)` by PROVE_TAC [extreal_of_num_def] >> POP_ORW \\
3269 ASM_SIMP_TAC std_ss [extreal_div_eq, extreal_not_infty]) THEN STRIP_TAC THEN
3270
3271 qexistsl_tac
3272 [`(\x. indicator_fn
3273 {x | x IN m_space m /\ &e / 2 pow i <= f x /\ f x < (&e + 1) / 2 pow i} x)`,
3274 `real (&e / 2 pow i)`] THEN ASM_SIMP_TAC std_ss [normal_real] THEN
3275 FULL_SIMP_TAC std_ss [measure_space_def] THEN
3276 MATCH_MP_TAC IN_MEASURABLE_BOREL_INDICATOR THEN
3277 Q.EXISTS_TAC `{x | x IN m_space m /\ &e / 2 pow i <= f x /\ f x < (&e + 1) / 2 pow i}` THEN
3278 ASM_SIMP_TAC std_ss [space_def, IN_UNIV] THEN
3279 Q_TAC SUFF_TAC `{x | x IN m_space m /\ &e / 2 pow i <= f x /\ f x < (&e + 1) / 2 pow i} =
3280 PREIMAGE f {x | &e / 2 pow i <= x /\ x < (&e + 1) / 2 pow i} INTER
3281 space (m_space m, measurable_sets m)` THENL
3282 [DISC_RW_KILL,
3283 SIMP_TAC std_ss [PREIMAGE_def, space_def, INTER_UNIV] THEN
3284 SET_TAC []] THEN
3285 FULL_SIMP_TAC std_ss [IN_MEASURABLE] THEN
3286 FIRST_X_ASSUM MATCH_MP_TAC THEN
3287 REWRITE_TAC [BOREL_MEASURABLE_SETS_CO]) THEN
3288
3289 CONJ_TAC THEN1
3290 (Q.ABBREV_TAC `g = (\k x.
3291 &k / 2 pow i *
3292 indicator_fn
3293 {x | x IN m_space m /\ &k / 2 pow i <= f x /\ f x < (&k + 1) / 2 pow i} x)` THEN
3294
3295 Suff `FINITE s /\ sigma_algebra (m_space m, measurable_sets m) /\
3296 (!i. i IN s ==> g i IN measurable (m_space m, measurable_sets m) Borel) /\
3297 (!i x. i IN s /\ x IN space (m_space m, measurable_sets m) ==> g i x <> NegInf) /\
3298 (!x. x IN space (m_space m, measurable_sets m) ==>
3299 ((\x. SIGMA
3300 (\k.
3301 &k / 2 pow i *
3302 indicator_fn
3303 {x | x IN m_space m /\ &k / 2 pow i <= f x /\ f x < (&k + 1) / 2 pow i} x) s) x =
3304 SIGMA (\i. g i x) s))`
3305 >- (DISCH_THEN (MP_TAC o MATCH_MP IN_MEASURABLE_BOREL_SUM) THEN
3306 ASM_SIMP_TAC std_ss []) THEN
3307 Q.UNABBREV_TAC `g` THEN
3308 FULL_SIMP_TAC std_ss [measure_space_def, FINITE_COUNT] THEN
3309 SIMP_TAC std_ss [space_def, IN_UNIV] THEN
3310 reverse CONJ_TAC THEN1
3311 (Q.X_GEN_TAC `n` THEN
3312 RW_TAC std_ss [lt_infty] THEN MATCH_MP_TAC lte_trans THEN
3313 Q.EXISTS_TAC `0` THEN SIMP_TAC std_ss [GSYM lt_infty, num_not_infty] THEN
3314 MATCH_MP_TAC le_mul THEN REWRITE_TAC [INDICATOR_FN_POS] THEN
3315
3316 `2 pow i <> NegInf /\ 2 pow i <> PosInf`
3317 by METIS_TAC [pow_not_infty, num_not_infty] THEN
3318 Know `real (2 pow i) <> 0`
3319 >- (ASM_SIMP_TAC std_ss [GSYM extreal_11, normal_real,
3320 GSYM extreal_of_num_def] THEN
3321 Suff `(0 :extreal) < 2 pow i` >- METIS_TAC [lt_imp_ne] THEN
3322 METIS_TAC [lt_02, pow_pos_lt]) >> DISCH_TAC THEN
3323
3324 `2 pow i = Normal (real (2 pow i))` by METIS_TAC [normal_real] THEN
3325 POP_ASSUM (fn th => ONCE_REWRITE_TAC [th]) THEN
3326 ASM_SIMP_TAC std_ss [extreal_div_def] THEN
3327 MATCH_MP_TAC le_mul THEN SIMP_TAC std_ss [le_num] THEN
3328 ASM_SIMP_TAC real_ss [extreal_inv_def] THEN
3329 SIMP_TAC std_ss [extreal_of_num_def, extreal_le_def] THEN
3330 SIMP_TAC std_ss [REAL_LE_INV_EQ] THEN SIMP_TAC std_ss [GSYM extreal_le_def] THEN
3331 ASM_SIMP_TAC std_ss [normal_real, GSYM extreal_of_num_def] THEN
3332 METIS_TAC [le_02, pow_pos_le]) THEN
3333 Q.X_GEN_TAC `n` THEN
3334 RW_TAC std_ss [] THEN MATCH_MP_TAC IN_MEASURABLE_BOREL_CMUL THEN
3335 qexistsl_tac
3336 [`(\x. indicator_fn
3337 {x | x IN m_space m /\ &n / 2 pow i <= f x /\ f x < (&n + 1) / 2 pow i} x)`,
3338 `real (&n / 2 pow i)`] THEN
3339
3340 Know `&n / 2 pow i <> NegInf /\ &n / 2 pow i <> PosInf` THEN1
3341 ( `2 pow i <> NegInf /\ 2 pow i <> PosInf` by
3342 METIS_TAC [pow_not_infty, num_not_infty] THEN
3343 `2 pow i = Normal (real (2 pow i))` by METIS_TAC [normal_real] THEN
3344 POP_ASSUM (fn th => ONCE_REWRITE_TAC [th]) THEN
3345 Know `real (2 pow i) <> 0`
3346 >- (ASM_SIMP_TAC std_ss [GSYM extreal_11, normal_real,
3347 GSYM extreal_of_num_def] THEN
3348 Suff `(0 :extreal) < 2 pow i` >- METIS_TAC [lt_imp_ne] THEN
3349 METIS_TAC [lt_02, pow_pos_lt]) >> DISCH_TAC THEN
3350 `&n = Normal (&n)` by PROVE_TAC [extreal_of_num_def] >> POP_ORW \\
3351 ASM_SIMP_TAC std_ss [extreal_div_eq, extreal_not_infty] ) THEN STRIP_TAC THEN
3352
3353 ASM_SIMP_TAC std_ss [normal_real] THEN
3354 MATCH_MP_TAC IN_MEASURABLE_BOREL_INDICATOR THEN
3355 Q.EXISTS_TAC `{x | x IN m_space m /\ &n / 2 pow i <= f x /\ f x < (&n + 1) / 2 pow i}` THEN
3356 ASM_SIMP_TAC std_ss [] THEN
3357 Know
3358 `{x | x IN m_space m /\ &n / 2 pow i <= f x /\ f x < (&n + 1) / 2 pow i} =
3359 PREIMAGE f {x | &n / 2 pow i <= x /\ x < (&n + 1) / 2 pow i} INTER
3360 space (m_space m,measurable_sets m)`
3361 >- (SIMP_TAC std_ss [PREIMAGE_def, space_def, INTER_UNIV] THEN
3362 SET_TAC []) THEN DISC_RW_KILL THEN
3363
3364 FULL_SIMP_TAC std_ss [IN_MEASURABLE] THEN
3365 FIRST_X_ASSUM MATCH_MP_TAC THEN
3366 REWRITE_TAC [BOREL_MEASURABLE_SETS_CO] ) THEN
3367
3368 CONJ_TAC THEN1
3369 (Q.X_GEN_TAC `x` THEN
3370 MATCH_MP_TAC le_mul THEN REWRITE_TAC [INDICATOR_FN_POS] THEN
3371
3372 `2 pow i <> NegInf /\ 2 pow i <> PosInf`
3373 by METIS_TAC [pow_not_infty, num_not_infty] THEN
3374 Know `real (2 pow i) <> 0`
3375 >- (ASM_SIMP_TAC std_ss [GSYM extreal_11, normal_real,
3376 GSYM extreal_of_num_def] THEN
3377 Suff `(0 :extreal) < 2 pow i` >- METIS_TAC [lt_imp_ne] THEN
3378 METIS_TAC [lt_02, pow_pos_lt]) >> DISCH_TAC THEN
3379
3380 `2 pow i = Normal (real (2 pow i))` by METIS_TAC [normal_real] THEN
3381 POP_ASSUM (fn th => ONCE_REWRITE_TAC [th]) THEN
3382 ASM_SIMP_TAC std_ss [extreal_div_def] THEN
3383 MATCH_MP_TAC le_mul THEN SIMP_TAC std_ss [le_num] THEN
3384 ASM_SIMP_TAC real_ss [extreal_inv_def] THEN
3385 SIMP_TAC std_ss [extreal_of_num_def, extreal_le_def] THEN
3386 SIMP_TAC std_ss [REAL_LE_INV_EQ] THEN SIMP_TAC std_ss [GSYM extreal_le_def] THEN
3387 ASM_SIMP_TAC std_ss [normal_real, GSYM extreal_of_num_def] THEN
3388 METIS_TAC [le_02, pow_pos_le] ) THEN
3389
3390 reverse CONJ_TAC THEN1
3391 (Q.X_GEN_TAC `x` THEN
3392 MATCH_MP_TAC EXTREAL_SUM_IMAGE_POS THEN ASM_REWRITE_TAC [] THEN
3393 Q.X_GEN_TAC `n` >> RW_TAC std_ss [FINITE_COUNT, IN_UNIV] THEN
3394 MATCH_MP_TAC le_mul THEN REWRITE_TAC [INDICATOR_FN_POS] THEN
3395
3396 `2 pow i <> NegInf /\ 2 pow i <> PosInf`
3397 by METIS_TAC [pow_not_infty, num_not_infty] THEN
3398 Know `real (2 pow i) <> 0`
3399 >- (ASM_SIMP_TAC std_ss [GSYM extreal_11, normal_real,
3400 GSYM extreal_of_num_def] THEN
3401 Suff `(0 :extreal) < 2 pow i` >- METIS_TAC [lt_imp_ne] THEN
3402 METIS_TAC [lt_02, pow_pos_lt]) >> DISCH_TAC THEN
3403
3404 `2 pow i = Normal (real (2 pow i))` by METIS_TAC [normal_real] THEN
3405 POP_ASSUM (fn th => ONCE_REWRITE_TAC [th]) THEN
3406 ASM_SIMP_TAC std_ss [extreal_div_def] THEN
3407 MATCH_MP_TAC le_mul THEN SIMP_TAC std_ss [le_num] THEN
3408 ASM_SIMP_TAC real_ss [extreal_inv_def] THEN
3409 SIMP_TAC std_ss [extreal_of_num_def, extreal_le_def] THEN
3410 SIMP_TAC std_ss [REAL_LE_INV_EQ] THEN SIMP_TAC std_ss [GSYM extreal_le_def] THEN
3411 ASM_SIMP_TAC std_ss [normal_real, GSYM extreal_of_num_def] THEN
3412 METIS_TAC [le_02, pow_pos_le] ) THEN
3413
3414 Suff `P (\x. &e / 2 pow i *
3415 (\x. indicator_fn {x | x IN m_space m /\ &e / 2 pow i <= f x /\ f x < (&e + 1) / 2 pow i}
3416 x) x)`
3417 >- (SIMP_TAC std_ss []) THEN
3418 FIRST_ASSUM MATCH_MP_TAC THEN ASM_SIMP_TAC std_ss [] THEN
3419
3420 CONJ_TAC THEN1
3421 (MATCH_MP_TAC IN_MEASURABLE_BOREL_INDICATOR THEN
3422 Q.EXISTS_TAC `{x | x IN m_space m /\ &e / 2 pow i <= f x /\ f x < (&e + 1) / 2 pow i}` THEN
3423 ASM_SIMP_TAC std_ss [space_def, IN_UNIV] THEN
3424 Know `{x | x IN m_space m /\ &e / 2 pow i <= f x /\ f x < (&e + 1) / 2 pow i} =
3425 PREIMAGE f {x | &e / 2 pow i <= x /\ x < (&e + 1) / 2 pow i} INTER
3426 space (m_space m,measurable_sets m)`
3427 >- (SIMP_TAC std_ss [PREIMAGE_def, space_def, INTER_UNIV] THEN
3428 SET_TAC []) THEN DISC_RW_KILL THEN
3429
3430 FULL_SIMP_TAC std_ss [IN_MEASURABLE] THEN
3431 FIRST_X_ASSUM MATCH_MP_TAC THEN
3432 REWRITE_TAC [BOREL_MEASURABLE_SETS_CO] ) THEN
3433
3434 CONJ_TAC THEN1
3435 (`2 pow i <> NegInf /\ 2 pow i <> PosInf`
3436 by METIS_TAC [pow_not_infty, num_not_infty] THEN
3437 Know `real (2 pow i) <> 0`
3438 >- (ASM_SIMP_TAC std_ss [GSYM extreal_11, normal_real,
3439 GSYM extreal_of_num_def] THEN
3440 Suff `(0 :extreal) < 2 pow i` >- METIS_TAC [lt_imp_ne] THEN
3441 METIS_TAC [lt_02, pow_pos_lt]) >> DISCH_TAC THEN
3442
3443 `2 pow i = Normal (real (2 pow i))` by METIS_TAC [normal_real] THEN
3444 POP_ASSUM (fn th => ONCE_REWRITE_TAC [th]) THEN
3445 ASM_SIMP_TAC std_ss [extreal_div_def] THEN
3446 MATCH_MP_TAC le_mul THEN SIMP_TAC std_ss [le_num] THEN
3447 ASM_SIMP_TAC real_ss [extreal_inv_def] THEN
3448 SIMP_TAC std_ss [extreal_of_num_def, extreal_le_def] THEN
3449 SIMP_TAC std_ss [REAL_LE_INV_EQ] THEN SIMP_TAC std_ss [GSYM extreal_le_def] THEN
3450 ASM_SIMP_TAC std_ss [normal_real, GSYM extreal_of_num_def] THEN
3451 METIS_TAC [le_02, pow_pos_le] ) THEN
3452
3453 CONJ_TAC THENL
3454 [GEN_TAC THEN SIMP_TAC std_ss [indicator_fn_def] THEN COND_CASES_TAC THEN
3455 SIMP_TAC real_ss [le_refl, extreal_le_def, extreal_of_num_def],
3456 ALL_TAC] THEN
3457 Q_TAC SUFF_TAC `P
3458 (indicator_fn {x | x IN m_space m /\ &e / 2 pow i <= f x /\ f x < (&e + 1) / 2 pow i})` THENL
3459 [METIS_TAC [ETA_AX], ALL_TAC] THEN
3460 FIRST_ASSUM MATCH_MP_TAC THEN
3461
3462 ONCE_REWRITE_TAC [METIS [subsets_def]
3463 ``measurable_sets m = subsets (m_space m, measurable_sets m)``] THEN
3464 Know `{x | x IN m_space m /\ &e / 2 pow i <= f x /\ f x < (&e + 1) / 2 pow i} =
3465 PREIMAGE f {x | &e / 2 pow i <= x /\ x < (&e + 1) / 2 pow i} INTER
3466 space (m_space m,measurable_sets m)`
3467 >- (SIMP_TAC std_ss [PREIMAGE_def, space_def, INTER_UNIV] THEN
3468 SET_TAC []) THEN DISC_RW_KILL THEN
3469 FULL_SIMP_TAC std_ss [IN_MEASURABLE] THEN
3470 FIRST_X_ASSUM MATCH_MP_TAC THEN
3471 REWRITE_TAC [BOREL_MEASURABLE_SETS_CO] ) THEN
3472
3473 CONJ_TAC THEN1
3474 (GEN_TAC THEN MATCH_MP_TAC le_mul THEN SIMP_TAC std_ss [indicator_fn_def] THEN
3475 CONJ_TAC THENL
3476 [ALL_TAC, COND_CASES_TAC THEN
3477 SIMP_TAC real_ss [le_refl, extreal_of_num_def, extreal_le_def]] THEN
3478 SIMP_TAC std_ss [extreal_of_num_def, extreal_pow_def, extreal_le_def] THEN
3479 MATCH_MP_TAC POW_POS THEN SIMP_TAC real_ss [] ) THEN
3480
3481 Suff `P (\x. 2 pow i *
3482 (\x. indicator_fn {x | x IN m_space m /\ 2 pow i <= f x} x) x)`
3483 >- (SIMP_TAC std_ss []) THEN
3484 FIRST_ASSUM MATCH_MP_TAC THEN ASM_SIMP_TAC std_ss [] THEN
3485
3486 CONJ_TAC THENL
3487 [MATCH_MP_TAC IN_MEASURABLE_BOREL_INDICATOR THEN
3488 Q.EXISTS_TAC `{x | x IN m_space m /\ 2 pow i <= f x}` THEN
3489 ASM_SIMP_TAC std_ss [space_def, IN_UNIV] THEN
3490 Q_TAC SUFF_TAC `{x | x IN m_space m /\ 2 pow i <= f x} =
3491 PREIMAGE f {x | 2 pow i <= x} INTER
3492 space (m_space m,measurable_sets m)` THENL
3493 [DISC_RW_KILL,
3494 SIMP_TAC std_ss [PREIMAGE_def, space_def, INTER_UNIV] THEN
3495 SET_TAC []] THEN
3496 FULL_SIMP_TAC std_ss [IN_MEASURABLE] THEN
3497 FIRST_X_ASSUM MATCH_MP_TAC THEN
3498 `2 pow i <> NegInf /\ 2 pow i <> PosInf` by
3499 METIS_TAC [pow_not_infty, num_not_infty] THEN
3500 METIS_TAC [BOREL_MEASURABLE_SETS_CR, normal_real], ALL_TAC] THEN
3501 CONJ_TAC THENL
3502 [SIMP_TAC std_ss [extreal_of_num_def, extreal_pow_def, extreal_le_def] THEN
3503 MATCH_MP_TAC POW_POS THEN SIMP_TAC real_ss [], ALL_TAC] THEN
3504 CONJ_TAC THENL
3505 [GEN_TAC THEN SIMP_TAC std_ss [indicator_fn_def] THEN COND_CASES_TAC THEN
3506 SIMP_TAC real_ss [le_refl, extreal_of_num_def, extreal_le_def], ALL_TAC] THEN
3507 Q_TAC SUFF_TAC `P (indicator_fn {x | x IN m_space m /\ 2 pow i <= f x})` THENL
3508 [METIS_TAC [ETA_AX], ALL_TAC] THEN
3509 FIRST_ASSUM MATCH_MP_TAC THEN
3510 ONCE_REWRITE_TAC [METIS [subsets_def]
3511 ``measurable_sets m = subsets (m_space m, measurable_sets m)``] THEN
3512 Q_TAC SUFF_TAC `{x | x IN m_space m /\ 2 pow i <= f x} = PREIMAGE f {x | 2 pow i <= x} INTER
3513 space (m_space m,measurable_sets m)` THENL
3514 [DISC_RW_KILL,
3515 SIMP_TAC std_ss [PREIMAGE_def, space_def, INTER_UNIV] THEN
3516 SET_TAC []] THEN
3517 FULL_SIMP_TAC std_ss [IN_MEASURABLE] THEN
3518 FIRST_X_ASSUM MATCH_MP_TAC THEN
3519 `2 pow i <> NegInf /\ 2 pow i <> PosInf` by
3520 METIS_TAC [pow_not_infty, num_not_infty] THEN
3521 METIS_TAC [BOREL_MEASURABLE_SETS_CR, normal_real]
3522QED
3523
3524Theorem integral_sequence :
3525 !m f. measure_space m /\ f IN measurable (m_space m,measurable_sets m) Borel /\
3526 (!x. x IN m_space m ==> 0 <= f x) ==>
3527 pos_fn_integral m f =
3528 sup (IMAGE (\i. pos_fn_integral m (fn_seq m f i)) UNIV)
3529Proof
3530 RW_TAC std_ss []
3531 >> MATCH_MP_TAC lebesgue_monotone_convergence
3532 >> RW_TAC std_ss [lemma_fn_seq_sup, lemma_fn_seq_mono_increasing,
3533 lemma_fn_seq_upper_bounded, lemma_fn_seq_positive]
3534 >> METIS_TAC [lemma_fn_seq_in_psfis, IN_MEASURABLE_BOREL_POS_SIMPLE_FN, IN_psfis_eq]
3535QED
3536
3537Theorem measurable_sequence :
3538 !m f. measure_space m /\ f IN measurable (m_space m,measurable_sets m) Borel ==>
3539 (?fi ri. (!x. mono_increasing (\i. fi i x)) /\
3540 (!x. x IN m_space m ==>
3541 sup (IMAGE (\i. fi i x) UNIV) = fn_plus f x) /\
3542 (!i. ri i IN psfis m (fi i)) /\
3543 (!i x. fi i x <= fn_plus f x) /\
3544 (!i x. 0 <= fi i x) /\
3545 (pos_fn_integral m (fn_plus f) =
3546 sup (IMAGE (\i. pos_fn_integral m (fi i)) UNIV))) /\
3547 (?gi vi. (!x. mono_increasing (\i. gi i x)) /\
3548 (!x. x IN m_space m ==>
3549 sup (IMAGE (\i. gi i x) UNIV) = fn_minus f x) /\
3550 (!i. vi i IN psfis m (gi i)) /\
3551 (!i x. (gi i) x <= fn_minus f x) /\
3552 (!i x. 0 <= gi i x) /\
3553 (pos_fn_integral m (fn_minus f) =
3554 sup (IMAGE (\i. pos_fn_integral m (gi i)) UNIV)))
3555Proof
3556 rpt GEN_TAC >> STRIP_TAC
3557 >> ‘sigma_algebra (measurable_space m)’
3558 by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA]
3559 >> CONJ_TAC
3560 >- (Q.EXISTS_TAC `(\n. fn_seq m (fn_plus f) n)` \\
3561 Q.EXISTS_TAC `(\n. fn_seq_integral m (fn_plus f) n)` \\
3562 CONJ_TAC >- RW_TAC std_ss [FN_PLUS_POS, lemma_fn_seq_mono_increasing] \\
3563 CONJ_TAC >- RW_TAC std_ss [FN_PLUS_POS, lemma_fn_seq_sup] \\
3564 CONJ_TAC
3565 >- FULL_SIMP_TAC std_ss [FN_PLUS_POS, lemma_fn_seq_in_psfis,
3566 IN_MEASURABLE_BOREL_FN_PLUS] \\
3567 CONJ_TAC >- METIS_TAC [FN_PLUS_POS, lemma_fn_seq_upper_bounded] \\
3568 CONJ_TAC >- METIS_TAC [FN_PLUS_POS, lemma_fn_seq_positive] \\
3569 METIS_TAC [FN_PLUS_POS, integral_sequence, IN_MEASURABLE_BOREL_FN_PLUS])
3570 >> Q.EXISTS_TAC `(\n. fn_seq m (fn_minus f) n)`
3571 >> Q.EXISTS_TAC `(\n. fn_seq_integral m (fn_minus f) n)`
3572 >> CONJ_TAC
3573 >- RW_TAC std_ss [FN_MINUS_POS, lemma_fn_seq_mono_increasing]
3574 >> CONJ_TAC
3575 >- RW_TAC std_ss [FN_MINUS_POS, lemma_fn_seq_sup]
3576 >> CONJ_TAC
3577 >- FULL_SIMP_TAC std_ss [FN_MINUS_POS, lemma_fn_seq_in_psfis,
3578 IN_MEASURABLE_BOREL_FN_MINUS]
3579 >> CONJ_TAC
3580 >- METIS_TAC [FN_MINUS_POS, lemma_fn_seq_upper_bounded]
3581 >> CONJ_TAC
3582 >- METIS_TAC [FN_MINUS_POS, lemma_fn_seq_positive]
3583 >> METIS_TAC [FN_MINUS_POS, integral_sequence, IN_MEASURABLE_BOREL_FN_MINUS]
3584QED
3585
3586(* deep result. added `x IN m_space m` *)
3587Theorem pos_fn_integral_mono_AE : (* was: positive_integral_mono_AE *)
3588 !m u v. measure_space m /\
3589 (!x. x IN m_space m ==> 0 <= u x) /\
3590 (!x. x IN m_space m ==> 0 <= v x) /\
3591 (AE x::m. u x <= v x) ==>
3592 pos_fn_integral m u <= pos_fn_integral m v
3593Proof
3594 Q.X_GEN_TAC ‘M’
3595 >> RW_TAC std_ss [pos_fn_integral_def]
3596 >> MATCH_MP_TAC sup_le_sup_imp'
3597 >> RW_TAC std_ss [GSPECIFICATION]
3598 >> FULL_SIMP_TAC std_ss [GSPECIFICATION, IN_psfis_eq]
3599 >> FULL_SIMP_TAC std_ss [AE_ALT, GSPECIFICATION]
3600 >> `AE x::M. x NOTIN N`
3601 by (MATCH_MP_TAC AE_NOT_IN THEN ASM_SIMP_TAC std_ss [])
3602 >> Q.ABBREV_TAC `nn = (\x. g x * indicator_fn (m_space M DIFF N) x)`
3603 >> Know `AE x::M. g x <= nn x`
3604 >- (FULL_SIMP_TAC std_ss [AE_ALT, GSPECIFICATION] THEN Q.EXISTS_TAC `N'` THEN
3605 FULL_SIMP_TAC std_ss [SUBSET_DEF, GSPECIFICATION] THEN RW_TAC std_ss [] THEN
3606 FIRST_ASSUM MATCH_MP_TAC THEN ASM_REWRITE_TAC [] THEN POP_ASSUM MP_TAC THEN
3607 Q.UNABBREV_TAC `nn` THEN ONCE_REWRITE_TAC [MONO_NOT_EQ] THEN
3608 RW_TAC std_ss [indicator_fn_def, mul_rzero, mul_rone, le_refl] THEN
3609 ASM_SET_TAC []) >> DISCH_TAC
3610 >> Know `!x. x IN m_space M ==> nn x <= v x`
3611 >- (Q.X_GEN_TAC ‘y’ >> DISCH_TAC >> Q.UNABBREV_TAC `nn` \\
3612 ASM_SIMP_TAC std_ss [indicator_fn_def] \\
3613 COND_CASES_TAC >> ASM_SIMP_TAC std_ss [mul_rone, mul_rzero] \\
3614 FULL_SIMP_TAC std_ss [SUBSET_DEF, GSPECIFICATION, IN_DIFF] \\
3615 POP_ASSUM MP_TAC >> ONCE_REWRITE_TAC [MONO_NOT_EQ] \\
3616 RW_TAC std_ss [] >> FIRST_ASSUM MATCH_MP_TAC \\
3617 FULL_SIMP_TAC std_ss [GSYM extreal_lt_def] >> METIS_TAC [lte_trans])
3618 >> DISCH_TAC
3619 >> FULL_SIMP_TAC std_ss [GSYM IN_NULL_SET, null_sets, GSPECIFICATION]
3620 >> `?e. e NOTIN s` by METIS_TAC [num_FINITE_AVOID, pos_simple_fn_def]
3621 >> Know `pos_simple_fn M nn (e INSERT s)
3622 (\i. if i = e then N else a i DIFF N)
3623 (\i. if i = e then 0 else x' i)`
3624 >- (FULL_SIMP_TAC std_ss [pos_simple_fn_def] \\
3625 Q.UNABBREV_TAC `nn` >> RW_TAC real_ss [] >> TRY (ASM_SET_TAC []) >|
3626 [ (* goal 1 (of 5) *)
3627 Q.PAT_X_ASSUM ‘!t. t IN m_space M ==> g t = _’
3628 (fn th => (ONCE_REWRITE_TAC [SYM (MATCH_MP th (ASSUME “t IN m_space M”))])) \\
3629 MATCH_MP_TAC le_mul >> ASM_SIMP_TAC std_ss [INDICATOR_FN_POS],
3630 (* goal 2 (of 5) *)
3631 ALL_TAC,
3632 (* goal 3 (of 5) *)
3633 ONCE_REWRITE_TAC [METIS [subsets_def]
3634 ``measurable_sets M = subsets (m_space M, measurable_sets M)``] \\
3635 MATCH_MP_TAC SIGMA_ALGEBRA_DIFF \\
3636 `i IN s` by ASM_SET_TAC [] \\
3637 fs [measure_space_def],
3638 (* goal 4 (of 5) *)
3639 METIS_TAC [FINITE_INSERT],
3640 (* goal 5 (of 5) *)
3641 SIMP_TAC std_ss [EXTENSION, IN_BIGUNION, IN_IMAGE, GSPECIFICATION, IN_DIFF] \\
3642 GEN_TAC >> EQ_TAC
3643 >- (RW_TAC std_ss [] THEN UNDISCH_TAC ``x IN s'`` THEN ASM_REWRITE_TAC [] THEN
3644 `N SUBSET m_space M`
3645 by (MATCH_MP_TAC MEASURABLE_SETS_SUBSET_SPACE THEN ASM_SIMP_TAC std_ss []) \\
3646 `!i. i IN s ==> a i SUBSET m_space M` by (RW_TAC std_ss [] THEN
3647 MATCH_MP_TAC MEASURABLE_SETS_SUBSET_SPACE THEN ASM_SIMP_TAC std_ss []) THEN
3648 ASM_SET_TAC []) \\
3649 DISCH_TAC >> `?i. x IN a i /\ i IN s` by ASM_SET_TAC [] \\
3650 ASM_CASES_TAC ``x IN N``
3651 >- (Q.EXISTS_TAC `N` THEN ASM_SIMP_TAC std_ss [] \\
3652 Q.EXISTS_TAC `e` THEN ASM_SET_TAC []) \\
3653 Q.EXISTS_TAC `a i DIFF N` \\
3654 CONJ_TAC >- ASM_SET_TAC [] \\
3655 Q.EXISTS_TAC `i` >> ASM_SET_TAC [] ] \\ (* end of 5 goals *)
3656 (* continue goal 2 (of 5) *)
3657 ASM_CASES_TAC ``t IN N`` >> ASM_SIMP_TAC std_ss [indicator_fn_def, IN_DIFF]
3658 >- (SIMP_TAC std_ss [mul_rzero] >> ONCE_REWRITE_TAC [EQ_SYM_EQ] \\
3659 MATCH_MP_TAC EXTREAL_SUM_IMAGE_0 >> ASM_SIMP_TAC std_ss [FINITE_INSERT] \\
3660 RW_TAC std_ss [IN_INSERT, GSYM extreal_of_num_def, mul_rzero, mul_lzero, mul_rone] \\
3661 ASM_SET_TAC []) \\
3662 ASM_SIMP_TAC std_ss [mul_rone] \\
3663 Q.ABBREV_TAC `f = (\i. Normal (if i = e then 0 else x' i) *
3664 if t IN if i = e then N else a i DIFF N then 1 else 0)` \\
3665 ONCE_REWRITE_TAC [SET_RULE ``e INSERT s = {e} UNION s``] \\
3666 Know `(!x. x IN {e} UNION s ==> f x <> NegInf) \/
3667 (!x. x IN {e} UNION s ==> f x <> PosInf) ==>
3668 (SIGMA f ({e} UNION s) = SIGMA f {e} + SIGMA f s)`
3669 >- (MATCH_MP_TAC EXTREAL_SUM_IMAGE_DISJOINT_UNION \\
3670 ASM_SIMP_TAC std_ss [FINITE_SING] >> ASM_SET_TAC []) >> DISCH_TAC \\
3671 Know `(SIGMA f ({e} UNION s) = SIGMA f {e} + SIGMA f s)`
3672 >- (POP_ASSUM MATCH_MP_TAC THEN DISJ1_TAC THEN Q.UNABBREV_TAC `f` \\
3673 RW_TAC std_ss [IN_UNION] THENL
3674 [SIMP_TAC std_ss [GSYM extreal_of_num_def, mul_lzero, num_not_infty],
3675 SIMP_TAC std_ss [GSYM extreal_of_num_def, mul_lzero, num_not_infty],
3676 SIMP_TAC std_ss [mul_rone, extreal_not_infty],
3677 SIMP_TAC std_ss [mul_rone, extreal_not_infty],
3678 SIMP_TAC std_ss [mul_rzero, num_not_infty],
3679 SIMP_TAC std_ss [mul_rzero, num_not_infty]]) \\
3680 DISC_RW_KILL >> Q.UNABBREV_TAC `f` >> RW_TAC std_ss [EXTREAL_SUM_IMAGE_SING] \\
3681 SIMP_TAC std_ss [mul_rzero, add_lzero] \\
3682 FIRST_ASSUM (MATCH_MP_TAC o MATCH_MP EXTREAL_SUM_IMAGE_EQ) THEN RW_TAC std_ss [] >|
3683 [ALL_TAC, ASM_SET_TAC [], ASM_SET_TAC []] \\
3684 DISJ1_TAC >> RW_TAC std_ss [] >> `x <> e` by ASM_SET_TAC [] >|
3685 [SIMP_TAC std_ss [mul_rone, extreal_not_infty],
3686 SIMP_TAC std_ss [mul_rone, extreal_not_infty],
3687 SIMP_TAC std_ss [mul_rzero, num_not_infty],
3688 SIMP_TAC std_ss [mul_rzero, num_not_infty],
3689 SIMP_TAC std_ss [mul_rone, extreal_not_infty],
3690 ALL_TAC] \\
3691 SIMP_TAC std_ss [mul_rzero, num_not_infty]) >> DISCH_TAC
3692 (* stage work *)
3693 >> Q.EXISTS_TAC `pos_simple_fn_integral M (e INSERT s)
3694 (\i. if i = e then N else a i DIFF N) (\i. if i = e then 0 else x' i)` THEN
3695 CONJ_TAC THENL [METIS_TAC [], ALL_TAC] THEN
3696 SIMP_TAC std_ss [pos_simple_fn_integral_def] THEN
3697 Q.ABBREV_TAC `f = (\i. Normal (if i = e then 0 else x' i) *
3698 measure M (if i = e then N else a i DIFF N))` THEN
3699 ONCE_REWRITE_TAC [SET_RULE ``e INSERT s = {e} UNION s``] THEN
3700 Q_TAC SUFF_TAC `(!x. x IN {e} UNION s ==> f x <> NegInf) \/
3701 (!x. x IN {e} UNION s ==> f x <> PosInf) ==>
3702 (SIGMA f ({e} UNION s) = SIGMA f {e} + SIGMA f s)` THENL
3703 [ALL_TAC,
3704 MATCH_MP_TAC EXTREAL_SUM_IMAGE_DISJOINT_UNION THEN
3705 ASM_SIMP_TAC std_ss [FINITE_SING] THEN ASM_SET_TAC [pos_simple_fn_def]] THEN
3706 DISCH_TAC THEN Q_TAC SUFF_TAC `(SIGMA f ({e} UNION s) = SIGMA f {e} + SIGMA f s)` THENL
3707 [ALL_TAC,
3708 POP_ASSUM MATCH_MP_TAC THEN DISJ1_TAC THEN Q.UNABBREV_TAC `f` THEN
3709 RW_TAC std_ss [IN_UNION] THENL
3710 [SIMP_TAC std_ss [mul_rzero, num_not_infty], ASM_SET_TAC [],
3711 ALL_TAC] THEN
3712 SIMP_TAC std_ss [lt_infty] THEN MATCH_MP_TAC lte_trans THEN
3713 Q.EXISTS_TAC `0` THEN SIMP_TAC std_ss [GSYM lt_infty, num_not_infty] THEN
3714 MATCH_MP_TAC le_mul THEN SIMP_TAC std_ss [extreal_of_num_def, extreal_le_def] THEN
3715 FULL_SIMP_TAC std_ss [pos_simple_fn_def, measure_space_def, positive_def] THEN
3716 SIMP_TAC std_ss [GSYM extreal_of_num_def] THEN FIRST_ASSUM MATCH_MP_TAC THEN
3717 ONCE_REWRITE_TAC [METIS [subsets_def]
3718 ``measurable_sets M = subsets (m_space M, measurable_sets M)``] THEN
3719 MATCH_MP_TAC ALGEBRA_DIFF THEN
3720 FULL_SIMP_TAC std_ss [subsets_def, measure_space_def, sigma_algebra_def]] THEN
3721 DISC_RW_KILL THEN Q.UNABBREV_TAC `f` THEN RW_TAC std_ss [EXTREAL_SUM_IMAGE_SING] THEN
3722 SIMP_TAC std_ss [mul_rzero, add_lzero] THEN `FINITE s` by METIS_TAC [pos_simple_fn_def] THEN
3723 FIRST_ASSUM (MATCH_MP_TAC o MATCH_MP EXTREAL_SUM_IMAGE_MONO) THEN RW_TAC std_ss [] THENL
3724 [DISJ1_TAC THEN RW_TAC std_ss [] THENL
3725 [SIMP_TAC std_ss [lt_infty] THEN MATCH_MP_TAC lte_trans THEN
3726 Q.EXISTS_TAC `0` THEN SIMP_TAC std_ss [GSYM lt_infty, num_not_infty] THEN
3727 MATCH_MP_TAC le_mul THEN SIMP_TAC std_ss [extreal_of_num_def, extreal_le_def] THEN
3728 FULL_SIMP_TAC std_ss [pos_simple_fn_def, measure_space_def, positive_def] THEN
3729 SIMP_TAC std_ss [GSYM extreal_of_num_def] THEN FIRST_ASSUM MATCH_MP_TAC THEN
3730 ASM_SIMP_TAC std_ss [], ALL_TAC] THEN
3731 SIMP_TAC std_ss [lt_infty] THEN MATCH_MP_TAC lte_trans THEN
3732 Q.EXISTS_TAC `0` THEN SIMP_TAC std_ss [GSYM lt_infty, num_not_infty] THEN
3733 MATCH_MP_TAC le_mul THEN SIMP_TAC std_ss [extreal_of_num_def, extreal_le_def] THEN
3734 FULL_SIMP_TAC std_ss [pos_simple_fn_def, measure_space_def, positive_def] THEN
3735 SIMP_TAC std_ss [GSYM extreal_of_num_def] THEN FIRST_ASSUM MATCH_MP_TAC THEN
3736 ONCE_REWRITE_TAC [METIS [subsets_def]
3737 ``measurable_sets M = subsets (m_space M, measurable_sets M)``] THEN
3738 MATCH_MP_TAC ALGEBRA_DIFF THEN
3739 FULL_SIMP_TAC std_ss [subsets_def, measure_space_def, sigma_algebra_def],
3740 ALL_TAC] THEN
3741 ONCE_REWRITE_TAC [SET_RULE ``a DIFF b = a DIFF (a INTER b)``] THEN
3742 Q_TAC SUFF_TAC `measure M (a x DIFF a x INTER N) = measure M (a x) - measure M (a x INTER N)` THENL
3743 [ALL_TAC,
3744 MATCH_MP_TAC MEASURE_DIFF_SUBSET THEN FULL_SIMP_TAC std_ss [pos_simple_fn_def] THEN
3745 CONJ_TAC THENL
3746 [ONCE_REWRITE_TAC [METIS [subsets_def]
3747 ``measurable_sets M = subsets (m_space M, measurable_sets M)``] THEN
3748 MATCH_MP_TAC ALGEBRA_INTER THEN
3749 FULL_SIMP_TAC std_ss [subsets_def, measure_space_def, sigma_algebra_def],
3750 ALL_TAC] THEN
3751 CONJ_TAC THENL [ASM_SET_TAC [], ALL_TAC] THEN
3752 SIMP_TAC std_ss [lt_infty] THEN MATCH_MP_TAC let_trans THEN
3753 Q.EXISTS_TAC `measure M N` THEN CONJ_TAC THENL
3754 [ALL_TAC, METIS_TAC [lt_infty, num_not_infty]] THEN
3755 MATCH_MP_TAC INCREASING THEN ASM_SIMP_TAC std_ss [MEASURE_SPACE_INCREASING] THEN
3756 CONJ_TAC THENL [SET_TAC [], ALL_TAC] THEN
3757 ONCE_REWRITE_TAC [METIS [subsets_def]
3758 ``measurable_sets M = subsets (m_space M, measurable_sets M)``] THEN
3759 MATCH_MP_TAC ALGEBRA_INTER THEN
3760 FULL_SIMP_TAC std_ss [subsets_def, measure_space_def, sigma_algebra_def]] THEN
3761 DISC_RW_KILL THEN Q_TAC SUFF_TAC `measure M (a x INTER N) = 0` THENL
3762 [SIMP_TAC std_ss [le_refl, sub_rzero], ALL_TAC] THEN
3763 SIMP_TAC std_ss [GSYM le_antisym] THEN CONJ_TAC THENL
3764 [ALL_TAC,
3765 FULL_SIMP_TAC std_ss [measure_space_def, positive_def] THEN
3766 FIRST_ASSUM MATCH_MP_TAC THEN FULL_SIMP_TAC std_ss [pos_simple_fn_def] THEN
3767 ONCE_REWRITE_TAC [METIS [subsets_def]
3768 ``measurable_sets M = subsets (m_space M, measurable_sets M)``] THEN
3769 MATCH_MP_TAC ALGEBRA_INTER THEN
3770 FULL_SIMP_TAC std_ss [subsets_def, measure_space_def, sigma_algebra_def]] THEN
3771 `0 = measure M N` by METIS_TAC [] THEN FIRST_X_ASSUM (fn th => ONCE_REWRITE_TAC [th]) THEN
3772 MATCH_MP_TAC INCREASING THEN ASM_SIMP_TAC std_ss [MEASURE_SPACE_INCREASING] THEN
3773 CONJ_TAC THENL [SET_TAC [], ALL_TAC] THEN FULL_SIMP_TAC std_ss [pos_simple_fn_def] THEN
3774 ONCE_REWRITE_TAC [METIS [subsets_def]
3775 ``measurable_sets M = subsets (m_space M, measurable_sets M)``] THEN
3776 MATCH_MP_TAC ALGEBRA_INTER THEN
3777 FULL_SIMP_TAC std_ss [subsets_def, measure_space_def, sigma_algebra_def]
3778QED
3779
3780(* key result. added ‘x IN m_space m’ *)
3781Theorem pos_fn_integral_cong_AE : (* was: positive_integral_cong_AE *)
3782 !m u v. measure_space m /\
3783 (!x. x IN m_space m ==> 0 <= u x) /\
3784 (!x. x IN m_space m ==> 0 <= v x) /\
3785 (AE x::m. u x = v x) ==>
3786 (pos_fn_integral m u = pos_fn_integral m v)
3787Proof
3788 RW_TAC std_ss [GSYM le_antisym] (* 2 subgoals, same tactics *)
3789 >> MATCH_MP_TAC pos_fn_integral_mono_AE
3790 >> FULL_SIMP_TAC std_ss [AE_ALT, SUBSET_DEF, GSPECIFICATION]
3791 >> METIS_TAC []
3792QED
3793
3794(* common result. added ‘x IN m_space m’ *)
3795Theorem pos_fn_integral_cong : (* was: positive_integral_cong *)
3796 !m u v. measure_space m /\
3797 (!x. x IN m_space m ==> 0 <= u x) /\
3798 (!x. x IN m_space m ==> 0 <= v x) /\
3799 (!x. x IN m_space m ==> (u x = v x)) ==>
3800 (pos_fn_integral m u = pos_fn_integral m v)
3801Proof
3802 RW_TAC std_ss []
3803 >> MATCH_MP_TAC pos_fn_integral_cong_AE
3804 >> FULL_SIMP_TAC std_ss [AE_ALT, GSPECIFICATION]
3805 >> `{x | x IN m_space m /\ u x <> v x} = {}` by ASM_SET_TAC []
3806 >> Q.EXISTS_TAC `{}`
3807 >> ASM_SIMP_TAC std_ss [SUBSET_REFL, GSYM IN_NULL_SET, null_sets,
3808 GSPECIFICATION]
3809 >> METIS_TAC [measure_space_def, positive_def, sigma_algebra_alt_pow]
3810QED
3811
3812Theorem pos_fn_integral_add :
3813 !m f g. measure_space m /\
3814 (!x. x IN m_space m ==> 0 <= f x) /\
3815 (!x. x IN m_space m ==> 0 <= g x) /\
3816 f IN measurable (m_space m,measurable_sets m) Borel /\
3817 g IN measurable (m_space m,measurable_sets m) Borel ==>
3818 (pos_fn_integral m (\x. f x + g x) = pos_fn_integral m f + pos_fn_integral m g)
3819Proof
3820 rpt STRIP_TAC
3821 >> `?fi ui.
3822 (!x. mono_increasing (\i. fi i x)) /\
3823 (!x. x IN m_space m ==> (sup (IMAGE (\i. fi i x) UNIV) = (fn_plus f) x)) /\
3824 (!i. ui i IN psfis m (fi i)) /\
3825 (!i x. fi i x <= (fn_plus f) x) /\
3826 (!i x. 0 <= fi i x) /\
3827 (pos_fn_integral m (fn_plus f) = sup (IMAGE (\i. pos_fn_integral m (fi i)) UNIV))`
3828 by METIS_TAC [measurable_sequence]
3829 >> `?gi vi.
3830 (!x. mono_increasing (\i. gi i x)) /\
3831 (!x. x IN m_space m ==> (sup (IMAGE (\i. gi i x) UNIV) = (fn_plus g) x)) /\
3832 (!i. vi i IN psfis m (gi i)) /\
3833 (!i x. gi i x <= (fn_plus g) x) /\
3834 (!i x. 0 <= gi i x) /\
3835 (pos_fn_integral m (fn_plus g) = sup (IMAGE (\i. pos_fn_integral m (gi i)) UNIV))`
3836 by METIS_TAC [measurable_sequence]
3837 >> Know ‘pos_fn_integral m f = pos_fn_integral m (fn_plus f)’
3838 >- (MATCH_MP_TAC pos_fn_integral_cong >> simp [FN_PLUS_POS] \\
3839 rpt STRIP_TAC >> rw []) >> Rewr'
3840 >> Know ‘pos_fn_integral m g = pos_fn_integral m (fn_plus g)’
3841 >- (MATCH_MP_TAC pos_fn_integral_cong >> simp [FN_PLUS_POS] \\
3842 rpt STRIP_TAC >> rw []) >> Rewr'
3843 >> `sup (IMAGE (\i. pos_fn_integral m (fi i)) UNIV) +
3844 sup (IMAGE (\i. pos_fn_integral m (gi i)) UNIV) =
3845 sup (IMAGE (\i. (\n. pos_fn_integral m (fi n)) i + (\n. pos_fn_integral m (gi n)) i) UNIV)`
3846 by (MATCH_MP_TAC (GSYM sup_add_mono) \\
3847 FULL_SIMP_TAC std_ss [pos_fn_integral_pos, ext_mono_increasing_suc, pos_fn_integral_mono])
3848 >> FULL_SIMP_TAC std_ss []
3849 >> `!i. (\x. fi i x + gi i x) IN measurable (m_space m,measurable_sets m) Borel`
3850 by METIS_TAC [IN_MEASURABLE_BOREL_POS_SIMPLE_FN, IN_psfis_eq, psfis_add]
3851 >> `!x. mono_increasing (\i. (\i x. fi i x + gi i x) i x)`
3852 by FULL_SIMP_TAC std_ss [ext_mono_increasing_def, le_add2]
3853 >> Know `!x. x IN m_space m ==> (sup (IMAGE (\i. fi i x + gi i x) UNIV) = f x + g x)`
3854 >- (rpt STRIP_TAC \\
3855 `f x = sup (IMAGE (\i. fi i x) UNIV)` by METIS_TAC [FN_PLUS_REDUCE] >> POP_ORW \\
3856 `g x = sup (IMAGE (\i. gi i x) UNIV)` by METIS_TAC [FN_PLUS_REDUCE] >> POP_ORW \\
3857 FULL_SIMP_TAC std_ss [pos_fn_integral_pos, sup_add_mono,
3858 ext_mono_increasing_suc, pos_fn_integral_mono])
3859 >> DISCH_TAC
3860 >> (MP_TAC o Q.SPECL [`m`, `\x. f x + g x`, `\i. (\x. fi i x + gi i x)`])
3861 lebesgue_monotone_convergence
3862 >> RW_TAC std_ss []
3863 >> Suff `(\i. pos_fn_integral m (fi i) + pos_fn_integral m (gi i)) =
3864 (\i. pos_fn_integral m (\x. fi i x + gi i x))`
3865 >- RW_TAC std_ss [le_add]
3866 >> RW_TAC std_ss [FUN_EQ_THM]
3867 >> METIS_TAC [IN_psfis_eq, psfis_add, pos_fn_integral_pos_simple_fn]
3868QED
3869
3870(* added ‘x IN m_space m’. used by martingaleTheory.EXISTENCE_OF_PROD_MEASURE *)
3871Theorem pos_fn_integral_sub :
3872 !m f g. measure_space m /\
3873 f IN measurable (m_space m,measurable_sets m) Borel /\
3874 g IN measurable (m_space m,measurable_sets m) Borel /\
3875 (!x. x IN m_space m ==> 0 <= g x) /\
3876 (!x. x IN m_space m ==> g x <= f x) /\
3877 (!x. x IN m_space m ==> g x <> PosInf) /\
3878 pos_fn_integral m g <> PosInf ==>
3879 (pos_fn_integral m (\x. f x - g x) = pos_fn_integral m f - pos_fn_integral m g)
3880Proof
3881 rpt STRIP_TAC
3882 >> Know `pos_fn_integral m g <> NegInf /\ pos_fn_integral m g <> PosInf`
3883 >- (art [] >> MATCH_MP_TAC pos_not_neginf \\
3884 MATCH_MP_TAC pos_fn_integral_pos >> art [])
3885 >> DISCH_THEN (ONCE_REWRITE_TAC o wrap o (MATCH_MP eq_sub_ladd))
3886 >> Know `pos_fn_integral m (\x. f x - g x) + pos_fn_integral m g =
3887 pos_fn_integral m (\x. (\x. f x - g x) x + g x)`
3888 >- (MATCH_MP_TAC EQ_SYM \\
3889 MATCH_MP_TAC pos_fn_integral_add >> simp [] \\
3890 CONJ_TAC >- (rpt STRIP_TAC >> MATCH_MP_TAC le_sub_imp >> simp [add_lzero] \\
3891 MATCH_MP_TAC pos_not_neginf \\
3892 FIRST_X_ASSUM MATCH_MP_TAC >> art []) \\
3893 MATCH_MP_TAC IN_MEASURABLE_BOREL_SUB \\
3894 qexistsl_tac [`f`, `g`] >> fs [measure_space_def] \\
3895 GEN_TAC >> DISCH_TAC \\
3896 Suff ‘f x <> NegInf’ >- PROVE_TAC [] \\
3897 MATCH_MP_TAC pos_not_neginf >> simp [] \\
3898 MATCH_MP_TAC le_trans >> Q.EXISTS_TAC ‘g x’ \\
3899 CONJ_TAC >- (FIRST_X_ASSUM MATCH_MP_TAC >> art []) \\
3900 FIRST_X_ASSUM MATCH_MP_TAC >> art []) >> Rewr'
3901 >> BETA_TAC
3902 >> Suff `!x. x IN m_space m ==> f x - g x + g x = f x`
3903 >- (DISCH_TAC >> MATCH_MP_TAC pos_fn_integral_cong >> simp [] \\
3904 rpt STRIP_TAC \\
3905 MATCH_MP_TAC le_trans >> Q.EXISTS_TAC ‘g x’ \\
3906 CONJ_TAC >- (FIRST_X_ASSUM MATCH_MP_TAC >> art []) \\
3907 FIRST_X_ASSUM MATCH_MP_TAC >> art [])
3908 >> rpt STRIP_TAC
3909 >> MATCH_MP_TAC sub_add >> art []
3910 >> CONJ_TAC
3911 >- (MATCH_MP_TAC pos_not_neginf \\
3912 FIRST_X_ASSUM MATCH_MP_TAC >> art [])
3913 >> FIRST_X_ASSUM MATCH_MP_TAC >> art []
3914QED
3915
3916(* lebesgue_monotone_convergence for decreasing function sequences
3917
3918 The case for mono-decreasing functions can be derived as an easy corollary,
3919 because ‘\i x. f 0 x - f i x’ is mono-increasing, while assuming additionally
3920
3921 1. !i x. x IN m_space m ==> fi i x < PosInf
3922 2. !i. pos_fn_integral m (fi i) <> PosInf
3923 *)
3924Theorem lebesgue_monotone_convergence_decreasing :
3925 !m f fi. measure_space m /\
3926 (!i. fi i IN measurable (m_space m, measurable_sets m) Borel) /\
3927 (!i x. x IN m_space m ==> 0 <= fi i x /\ fi i x < PosInf) /\
3928 (!i. pos_fn_integral m (fi i) <> PosInf) /\
3929 (!x. x IN m_space m ==> mono_decreasing (\i. fi i x)) /\
3930 (!x. x IN m_space m ==> (inf (IMAGE (\i. fi i x) UNIV) = f x)) ==>
3931 (pos_fn_integral m f = inf (IMAGE (\i. pos_fn_integral m (fi i)) UNIV))
3932Proof
3933 rpt STRIP_TAC
3934 >> Know ‘!x. x IN m_space m ==> 0 <= f x’
3935 >- (rpt STRIP_TAC \\
3936 Q.PAT_X_ASSUM ‘!x. x IN m_space m ==> _ = f x’ (MP_TAC o (Q.SPEC ‘x’)) \\
3937 RW_TAC std_ss [] \\
3938 POP_ASSUM (ONCE_REWRITE_TAC o wrap o SYM) \\
3939 rw [le_inf'] >> PROVE_TAC []) >> DISCH_TAC
3940 >> Q.ABBREV_TAC ‘gi = \i x. fi 0 x - fi i x’
3941 >> Know ‘!i x. x IN m_space m ==> 0 <= gi i x’
3942 >- (rw [Abbr ‘gi’] \\
3943 Know ‘0 <= fi 0 x - fi i x <=> fi i x <= fi 0 x’
3944 >- (MATCH_MP_TAC EQ_SYM \\
3945 MATCH_MP_TAC sub_zero_le \\
3946 CONJ_TAC >- (MATCH_MP_TAC pos_not_neginf >> PROVE_TAC []) \\
3947 PROVE_TAC [lt_infty]) >> Rewr' \\
3948 fs [ext_mono_decreasing_def]) >> DISCH_TAC
3949 >> Know ‘!i x. x IN m_space m ==> gi i x <> PosInf’
3950 >- (rw [Abbr ‘gi’] \\
3951 ‘fi 0 x <> PosInf /\ fi i x <> PosInf’ by METIS_TAC [lt_infty] \\
3952 ‘fi 0 x <> NegInf /\ fi i x <> NegInf’ by METIS_TAC [pos_not_neginf] \\
3953 ‘?a. fi 0 x = Normal a’ by METIS_TAC [extreal_cases] \\
3954 ‘?b. fi i x = Normal b’ by METIS_TAC [extreal_cases] \\
3955 rw [extreal_sub_def, extreal_not_infty]) >> DISCH_TAC
3956 >> Know ‘!x. x IN m_space m ==> mono_increasing (\i. gi i x)’
3957 >- (rw [Abbr ‘gi’, ext_mono_increasing_def] \\
3958 MATCH_MP_TAC le_lsub_imp \\
3959 fs [ext_mono_decreasing_def]) >> DISCH_TAC
3960 >> Q.ABBREV_TAC ‘g = \x. sup (IMAGE (\i. gi i x) UNIV)’
3961 >> Know ‘!x. x IN m_space m ==> 0 <= g x’
3962 >- (rw [Abbr ‘g’, le_sup'] \\
3963 MATCH_MP_TAC le_trans >> Q.EXISTS_TAC ‘gi 0 x’ \\
3964 ASM_SIMP_TAC std_ss [] \\
3965 POP_ASSUM MATCH_MP_TAC >> Q.EXISTS_TAC ‘0’ >> REWRITE_TAC []) >> DISCH_TAC
3966 >> Know ‘!i. gi i IN Borel_measurable (m_space m,measurable_sets m)’
3967 >- (rw [Abbr ‘gi’] \\
3968 MATCH_MP_TAC IN_MEASURABLE_BOREL_SUB \\
3969 qexistsl_tac [‘fi 0’, ‘fi i’] >> fs [measure_space_def] \\
3970 rpt STRIP_TAC >> DISJ1_TAC \\
3971 reverse CONJ_TAC >- rw [lt_infty] \\
3972 MATCH_MP_TAC pos_not_neginf >> PROVE_TAC []) >> DISCH_TAC
3973 >> Know ‘!i x. x IN m_space m ==> (fi i x = fi 0 x - gi i x)’
3974 >- (rpt STRIP_TAC \\
3975 Know ‘fi i x = fi 0 x - gi i x <=> fi i x + gi i x = fi 0 x’
3976 >- (MATCH_MP_TAC eq_sub_ladd >> rw [] \\
3977 MATCH_MP_TAC pos_not_neginf >> rw []) >> Rewr' \\
3978 Know ‘fi i x + gi i x = gi i x + fi i x’
3979 >- (MATCH_MP_TAC add_comm >> DISJ2_TAC >> rw [] \\
3980 rw [lt_infty]) >> Rewr' \\
3981 rw [Abbr ‘gi’] >> MATCH_MP_TAC sub_add \\
3982 CONJ_TAC >- (MATCH_MP_TAC pos_not_neginf >> PROVE_TAC []) \\
3983 rw [lt_infty]) >> DISCH_TAC
3984 >> Know ‘!i. pos_fn_integral m (gi i) =
3985 pos_fn_integral m (fi 0) - pos_fn_integral m (fi i)’
3986 >- (GEN_TAC \\
3987 Know ‘pos_fn_integral m (gi i) = pos_fn_integral m (\x. fi 0 x - fi i x)’
3988 >- (MATCH_MP_TAC pos_fn_integral_cong >> rw []) >> Rewr' \\
3989 MATCH_MP_TAC pos_fn_integral_sub >> art [] \\
3990 CONJ_TAC >- METIS_TAC [] \\
3991 reverse CONJ_TAC >- METIS_TAC [lt_infty] \\
3992 rpt STRIP_TAC >> rfs [ext_mono_decreasing_def]) >> DISCH_TAC
3993 >> Know ‘!i. pos_fn_integral m (fi i) <> NegInf’
3994 >- (GEN_TAC \\
3995 MATCH_MP_TAC pos_not_neginf \\
3996 MATCH_MP_TAC pos_fn_integral_pos >> rw []) >> DISCH_TAC
3997 >> Know ‘!i. pos_fn_integral m (gi i) <> PosInf’
3998 >- (GEN_TAC \\
3999 Q.PAT_X_ASSUM ‘!i. pos_fn_integral m (gi i) = _’ (ONCE_REWRITE_TAC o wrap) \\
4000 ‘?a. pos_fn_integral m (fi 0) = Normal a’ by METIS_TAC [extreal_cases] \\
4001 ‘?b. pos_fn_integral m (fi i) = Normal b’ by METIS_TAC [extreal_cases] \\
4002 rw [extreal_sub_def, extreal_not_infty]) >> DISCH_TAC
4003 >> Know ‘!i. pos_fn_integral m (gi i) <> NegInf’
4004 >- (GEN_TAC \\
4005 MATCH_MP_TAC pos_not_neginf \\
4006 MATCH_MP_TAC pos_fn_integral_pos >> rw []) >> DISCH_TAC
4007 >> Know ‘!i. pos_fn_integral m (fi i) =
4008 pos_fn_integral m (fi 0) - pos_fn_integral m (gi i)’
4009 >- (GEN_TAC \\
4010 Know ‘pos_fn_integral m (fi i) =
4011 pos_fn_integral m (fi 0) - pos_fn_integral m (gi i) <=>
4012 pos_fn_integral m (fi i) + pos_fn_integral m (gi i) = pos_fn_integral m (fi 0)’
4013 >- (MATCH_MP_TAC eq_sub_ladd >> art []) >> Rewr' \\
4014 Know ‘pos_fn_integral m (fi i) + pos_fn_integral m (gi i) =
4015 pos_fn_integral m (gi i) + pos_fn_integral m (fi i)’
4016 >- (MATCH_MP_TAC add_comm >> DISJ2_TAC \\
4017 POP_ASSUM (REWRITE_TAC o wrap) >> art []) >> Rewr' >> art [] \\
4018 MATCH_MP_TAC sub_add >> art []) >> Rewr'
4019 (* stage work *)
4020 >> REWRITE_TAC [extreal_inf_def]
4021 >> Know ‘IMAGE numeric_negate
4022 (IMAGE (\i. pos_fn_integral m (fi 0) - pos_fn_integral m (gi i)) UNIV) =
4023 IMAGE (\i. pos_fn_integral m (gi i) - pos_fn_integral m (fi 0)) UNIV’
4024 >- (rw [Once EXTENSION, IN_IMAGE, IN_UNIV] \\
4025 EQ_TAC >> rpt STRIP_TAC >| (* 2 subgoals *)
4026 [ (* goal 1 (of 2) *)
4027 Q.EXISTS_TAC ‘i’ >> rename1 ‘x = -y’ \\
4028 Q.PAT_X_ASSUM ‘x = -y’ (ONCE_REWRITE_TAC o wrap) >> POP_ORW \\
4029 ‘?a. pos_fn_integral m (fi 0) = Normal a’ by METIS_TAC [extreal_cases] >> POP_ORW \\
4030 ‘?b. pos_fn_integral m (fi i) = Normal b’ by METIS_TAC [extreal_cases] >> POP_ORW \\
4031 rw [extreal_sub_def, extreal_ainv_def, extreal_11] \\
4032 REAL_ARITH_TAC,
4033 (* goal 2 (of 2) *)
4034 Q.EXISTS_TAC ‘pos_fn_integral m (fi 0) -
4035 (pos_fn_integral m (fi 0) - pos_fn_integral m (fi i))’ \\
4036 reverse CONJ_TAC >- (Q.EXISTS_TAC ‘i’ >> REWRITE_TAC []) \\
4037 POP_ORW \\
4038 ‘?a. pos_fn_integral m (fi 0) = Normal a’ by METIS_TAC [extreal_cases] >> POP_ORW \\
4039 ‘?b. pos_fn_integral m (fi i) = Normal b’ by METIS_TAC [extreal_cases] >> POP_ORW \\
4040 rw [extreal_sub_def, extreal_ainv_def, extreal_11] \\
4041 REAL_ARITH_TAC ]) >> Rewr'
4042 >> Know ‘sup (IMAGE (\i. pos_fn_integral m (gi i) - pos_fn_integral m (fi 0)) UNIV) =
4043 sup (IMAGE (\i. pos_fn_integral m (gi i)) UNIV) - pos_fn_integral m (fi 0)’
4044 >- (RW_TAC std_ss [sup_eq', IN_IMAGE, IN_UNIV] >| (* 2 subgoals *)
4045 [ (* goal 1 (of 2) *)
4046 MATCH_MP_TAC le_rsub_imp \\
4047 RW_TAC std_ss [le_sup', IN_IMAGE, IN_UNIV] \\
4048 POP_ASSUM MATCH_MP_TAC >> Q.EXISTS_TAC ‘i’ >> REWRITE_TAC [],
4049 (* goal 2 (of 2) *)
4050 MATCH_MP_TAC sub_le_imp >> art [] \\
4051 RW_TAC std_ss [sup_le', IN_IMAGE, IN_UNIV] \\
4052 Know ‘pos_fn_integral m (fi 0) - pos_fn_integral m (fi i) <= y + pos_fn_integral m (fi 0) <=>
4053 pos_fn_integral m (fi 0) - pos_fn_integral m (fi i) - pos_fn_integral m (fi 0) <= y’
4054 >- (MATCH_MP_TAC EQ_SYM \\
4055 MATCH_MP_TAC sub_le_eq >> art []) >> Rewr' \\
4056 POP_ASSUM MATCH_MP_TAC >> Q.EXISTS_TAC ‘i’ >> REWRITE_TAC [] ]) >> Rewr'
4057 >> Know ‘-(sup (IMAGE (\i. pos_fn_integral m (gi i)) UNIV) - pos_fn_integral m (fi 0)) =
4058 pos_fn_integral m (fi 0) - sup (IMAGE (\i. pos_fn_integral m (gi i)) UNIV)’
4059 >- (MATCH_MP_TAC neg_sub >> DISJ2_TAC >> art []) >> Rewr'
4060 (* applying lebesgue_monotone_convergence *)
4061 >> Know ‘sup (IMAGE (\i. pos_fn_integral m (gi i)) UNIV) = pos_fn_integral m g’
4062 >- (MATCH_MP_TAC EQ_SYM \\
4063 MATCH_MP_TAC lebesgue_monotone_convergence >> art [] \\
4064 rpt STRIP_TAC >> METIS_TAC []) >> Rewr'
4065 >> Know ‘pos_fn_integral m f =
4066 pos_fn_integral m (\x. inf (IMAGE (\i. fi i x) UNIV))’
4067 >- (MATCH_MP_TAC pos_fn_integral_cong >> rw []) >> Rewr'
4068 >> REWRITE_TAC [extreal_inf_def]
4069 >> Know ‘pos_fn_integral m
4070 (\x. -sup (IMAGE numeric_negate (IMAGE (\i. fi i x) UNIV))) =
4071 pos_fn_integral m (\x. -sup (IMAGE (\i. gi i x - fi 0 x) UNIV))’
4072 >- (MATCH_MP_TAC pos_fn_integral_cong >> BETA_TAC >> art [] \\
4073 CONJ_TAC >- (rpt STRIP_TAC \\
4074 ‘0 = --0’ by PROVE_TAC [neg_neg] >> POP_ORW \\
4075 REWRITE_TAC [le_neg, neg_0] \\
4076 SIMP_TAC std_ss [sup_le', IN_IMAGE, IN_UNIV] \\
4077 rpt STRIP_TAC >> rename1 ‘y = -z’ \\
4078 Q.PAT_X_ASSUM ‘y = -z’ (ONCE_REWRITE_TAC o wrap) \\
4079 ‘0 = --0’ by PROVE_TAC [neg_neg] >> POP_ORW \\
4080 REWRITE_TAC [le_neg, neg_0] \\
4081 POP_ORW >> PROVE_TAC []) \\
4082 CONJ_TAC >- (rpt STRIP_TAC \\
4083 ‘0 = --0’ by PROVE_TAC [neg_neg] >> POP_ORW \\
4084 REWRITE_TAC [le_neg, neg_0] \\
4085 SIMP_TAC std_ss [sup_le', IN_IMAGE, IN_UNIV] \\
4086 rpt STRIP_TAC >> POP_ORW \\
4087 Know ‘gi i x - fi 0 x = -(fi 0 x - gi i x)’
4088 >- (MATCH_MP_TAC EQ_SYM \\
4089 MATCH_MP_TAC neg_sub >> DISJ1_TAC \\
4090 reverse CONJ_TAC >- rw [lt_infty] \\
4091 MATCH_MP_TAC pos_not_neginf >> PROVE_TAC []) >> Rewr' \\
4092 ‘0 = --0’ by PROVE_TAC [neg_neg] >> POP_ORW \\
4093 REWRITE_TAC [le_neg, neg_0] \\
4094 METIS_TAC []) \\
4095 rpt STRIP_TAC \\
4096 REWRITE_TAC [eq_neg] \\
4097 Suff ‘IMAGE numeric_negate (IMAGE (\i. fi i x) UNIV) =
4098 IMAGE (\i. gi i x - fi 0 x) UNIV’ >- Rewr \\
4099 SIMP_TAC std_ss [Once EXTENSION, IN_IMAGE, IN_UNIV] \\
4100 GEN_TAC >> EQ_TAC >> rpt STRIP_TAC >| (* 2 subgoals *)
4101 [ (* goal 1 (of 2) *)
4102 rename1 ‘y = -z’ >> Q.EXISTS_TAC ‘i’ \\
4103 Q.PAT_X_ASSUM ‘y = -z’ (ONCE_REWRITE_TAC o wrap) >> POP_ORW \\
4104 Know ‘gi i x - fi 0 x = -(fi 0 x - gi i x)’
4105 >- (MATCH_MP_TAC EQ_SYM \\
4106 MATCH_MP_TAC neg_sub >> DISJ1_TAC \\
4107 reverse CONJ_TAC >- rw [lt_infty] \\
4108 MATCH_MP_TAC pos_not_neginf >> PROVE_TAC []) >> Rewr' \\
4109 REWRITE_TAC [eq_neg] \\
4110 FIRST_X_ASSUM MATCH_MP_TAC >> art [],
4111 (* goal 2 (of 2) *)
4112 rename1 ‘y = gi i x - fi 0 x’ \\
4113 Q.EXISTS_TAC ‘fi 0 x - gi i x’ >> POP_ORW \\
4114 CONJ_TAC >- (MATCH_MP_TAC EQ_SYM \\
4115 MATCH_MP_TAC neg_sub >> DISJ1_TAC \\
4116 reverse CONJ_TAC >- rw [lt_infty] \\
4117 MATCH_MP_TAC pos_not_neginf >> PROVE_TAC []) \\
4118 Q.EXISTS_TAC ‘i’ >> METIS_TAC [] ]) >> Rewr'
4119 >> Know ‘pos_fn_integral m (\x. -sup (IMAGE (\i. gi i x - fi 0 x) UNIV)) =
4120 pos_fn_integral m (\x. -(sup (IMAGE (\i. gi i x) UNIV) - fi 0 x))’
4121 >- (MATCH_MP_TAC pos_fn_integral_cong >> BETA_TAC >> art [] \\
4122 CONJ_TAC >- (rpt STRIP_TAC \\
4123 ‘0 = --0’ by PROVE_TAC [neg_neg] >> POP_ORW \\
4124 REWRITE_TAC [le_neg, neg_0] \\
4125 SIMP_TAC std_ss [sup_le', IN_IMAGE, IN_UNIV] \\
4126 rpt STRIP_TAC >> POP_ORW \\
4127 Know ‘gi i x - fi 0 x = -(fi 0 x - gi i x)’
4128 >- (MATCH_MP_TAC EQ_SYM \\
4129 MATCH_MP_TAC neg_sub >> DISJ1_TAC \\
4130 reverse CONJ_TAC >- rw [lt_infty] \\
4131 MATCH_MP_TAC pos_not_neginf >> PROVE_TAC []) >> Rewr' \\
4132 ‘0 = --0’ by PROVE_TAC [neg_neg] >> POP_ORW \\
4133 REWRITE_TAC [le_neg, neg_0] \\
4134 METIS_TAC []) \\
4135 CONJ_TAC >- (rpt STRIP_TAC \\
4136 ‘0 = --0’ by PROVE_TAC [neg_neg] >> POP_ORW \\
4137 REWRITE_TAC [le_neg, neg_0] \\
4138 Know ‘sup (IMAGE (\i. gi i x) UNIV) - fi 0 x <= 0 <=>
4139 sup (IMAGE (\i. gi i x) UNIV) <= fi 0 x’
4140 >- (MATCH_MP_TAC EQ_SYM \\
4141 MATCH_MP_TAC sub_le_zero \\
4142 reverse CONJ_TAC >- rw [lt_infty] \\
4143 MATCH_MP_TAC pos_not_neginf >> PROVE_TAC []) >> Rewr' \\
4144 SIMP_TAC std_ss [sup_le', IN_IMAGE, IN_UNIV] \\
4145 rpt STRIP_TAC >> POP_ORW \\
4146 Q.UNABBREV_TAC ‘gi’ >> BETA_TAC \\
4147 MATCH_MP_TAC sub_le_imp \\
4148 CONJ_TAC >- (MATCH_MP_TAC pos_not_neginf >> PROVE_TAC []) \\
4149 CONJ_TAC >- rw [lt_infty] \\
4150 MATCH_MP_TAC le_addr_imp >> PROVE_TAC []) \\
4151 rpt STRIP_TAC \\
4152 REWRITE_TAC [eq_neg] \\
4153 SIMP_TAC std_ss [sup_eq', IN_IMAGE, IN_UNIV] \\
4154 rpt STRIP_TAC >- (POP_ORW >> MATCH_MP_TAC le_rsub_imp \\
4155 SIMP_TAC std_ss [le_sup', IN_IMAGE, IN_UNIV] \\
4156 rpt STRIP_TAC >> POP_ASSUM MATCH_MP_TAC \\
4157 Q.EXISTS_TAC ‘i’ >> REWRITE_TAC []) \\
4158 MATCH_MP_TAC sub_le_imp \\
4159 CONJ_TAC >- (MATCH_MP_TAC pos_not_neginf >> PROVE_TAC []) \\
4160 CONJ_TAC >- rw [lt_infty] \\
4161 SIMP_TAC std_ss [sup_le', IN_IMAGE, IN_UNIV] \\
4162 rpt STRIP_TAC >> rename1 ‘z = gi i x’ \\
4163 Know ‘z <= y + fi 0 x <=> z - fi 0 x <= y’
4164 >- (MATCH_MP_TAC EQ_SYM \\
4165 MATCH_MP_TAC sub_le_eq \\
4166 CONJ_TAC >- (MATCH_MP_TAC pos_not_neginf >> PROVE_TAC []) \\
4167 rw [lt_infty]) >> Rewr' \\
4168 POP_ORW >> FIRST_X_ASSUM MATCH_MP_TAC \\
4169 Q.EXISTS_TAC ‘i’ >> REWRITE_TAC []) >> Rewr'
4170 >> Know ‘pos_fn_integral m (\x. -(sup (IMAGE (\i. gi i x) univ(:num)) - fi 0 x)) =
4171 pos_fn_integral m (\x. fi 0 x - sup (IMAGE (\i. gi i x) UNIV))’
4172 >- (MATCH_MP_TAC pos_fn_integral_cong >> BETA_TAC >> art [] \\
4173 CONJ_TAC >- (rpt STRIP_TAC \\
4174 ‘0 = --0’ by PROVE_TAC [neg_neg] >> POP_ORW \\
4175 REWRITE_TAC [le_neg, neg_0] \\
4176 Know ‘sup (IMAGE (\i. gi i x) UNIV) - fi 0 x <= 0 <=>
4177 sup (IMAGE (\i. gi i x) UNIV) <= fi 0 x’
4178 >- (MATCH_MP_TAC EQ_SYM \\
4179 MATCH_MP_TAC sub_le_zero \\
4180 reverse CONJ_TAC >- rw [lt_infty] \\
4181 MATCH_MP_TAC pos_not_neginf >> PROVE_TAC []) >> Rewr' \\
4182 SIMP_TAC std_ss [sup_le', IN_IMAGE, IN_UNIV] \\
4183 rpt STRIP_TAC >> POP_ORW \\
4184 Q.UNABBREV_TAC ‘gi’ >> BETA_TAC \\
4185 MATCH_MP_TAC sub_le_imp \\
4186 CONJ_TAC >- (MATCH_MP_TAC pos_not_neginf >> PROVE_TAC []) \\
4187 CONJ_TAC >- rw [lt_infty] \\
4188 MATCH_MP_TAC le_addr_imp >> PROVE_TAC []) \\
4189 CONJ_TAC >- (rpt STRIP_TAC \\
4190 MATCH_MP_TAC le_sub_imp2 >> REWRITE_TAC [add_lzero] \\
4191 CONJ_TAC >- (MATCH_MP_TAC pos_not_neginf >> PROVE_TAC []) \\
4192 CONJ_TAC >- rw [lt_infty] \\
4193 SIMP_TAC std_ss [sup_le', IN_IMAGE, IN_UNIV] \\
4194 rpt STRIP_TAC >> POP_ORW \\
4195 Q.UNABBREV_TAC ‘gi’ >> BETA_TAC \\
4196 MATCH_MP_TAC sub_le_imp \\
4197 CONJ_TAC >- (MATCH_MP_TAC pos_not_neginf >> PROVE_TAC []) \\
4198 CONJ_TAC >- rw [lt_infty] \\
4199 MATCH_MP_TAC le_addr_imp >> PROVE_TAC []) \\
4200 rpt STRIP_TAC \\
4201 MATCH_MP_TAC neg_sub >> DISJ2_TAC \\
4202 CONJ_TAC >- (MATCH_MP_TAC pos_not_neginf >> PROVE_TAC []) \\
4203 rw [lt_infty]) >> Rewr'
4204 (* final stage, applying pos_fn_integral_sub *)
4205 >> ‘!x. sup (IMAGE (\i. gi i x) UNIV) = g x’ by METIS_TAC [] >> POP_ORW
4206 >> MATCH_MP_TAC pos_fn_integral_sub >> art []
4207 >> CONJ_TAC (* g IN Borel_measurable (m_space m,measurable_sets m) *)
4208 >- (MATCH_MP_TAC IN_MEASURABLE_BOREL_MONO_SUP \\
4209 Q.EXISTS_TAC ‘gi’ >> rfs [measure_space_def, ext_mono_increasing_def])
4210 >> STRONG_CONJ_TAC (* !x. x IN m_space m ==> g x <= fi 0 x *)
4211 >- (Q.UNABBREV_TAC ‘g’ >> BETA_TAC \\
4212 rpt STRIP_TAC \\
4213 SIMP_TAC std_ss [sup_le', IN_IMAGE, IN_UNIV] \\
4214 rpt STRIP_TAC >> POP_ORW \\
4215 Q.UNABBREV_TAC ‘gi’ >> BETA_TAC \\
4216 MATCH_MP_TAC sub_le_imp \\
4217 CONJ_TAC >- (MATCH_MP_TAC pos_not_neginf >> PROVE_TAC []) \\
4218 CONJ_TAC >- rw [lt_infty] \\
4219 MATCH_MP_TAC le_addr_imp >> PROVE_TAC []) >> DISCH_TAC
4220 >> CONJ_TAC (* !x. x IN m_space m ==> g x <> PosInf *)
4221 >- (GEN_TAC >> DISCH_TAC >> REWRITE_TAC [lt_infty] \\
4222 MATCH_MP_TAC let_trans >> Q.EXISTS_TAC ‘fi 0 x’ \\
4223 CONJ_TAC >- (FIRST_X_ASSUM MATCH_MP_TAC >> art []) \\
4224 PROVE_TAC [])
4225 >> REWRITE_TAC [lt_infty]
4226 >> MATCH_MP_TAC let_trans
4227 >> Q.EXISTS_TAC ‘pos_fn_integral m (fi 0)’
4228 >> reverse CONJ_TAC >- rw [GSYM lt_infty]
4229 >> MATCH_MP_TAC pos_fn_integral_mono >> art []
4230QED
4231
4232Theorem lebesgue_monotone_convergence_decreasing' :
4233 !m f fi A. measure_space m /\
4234 (!i. fi i IN measurable (m_space m, measurable_sets m) Borel) /\
4235 (!i x. x IN m_space m ==> 0 <= fi i x /\ fi i x < PosInf) /\
4236 (!i. pos_fn_integral m (fi i) <> PosInf) /\
4237 (!x. x IN m_space m ==> mono_decreasing (\i. fi i x)) /\
4238 (!x. x IN m_space m ==> inf (IMAGE (\i. fi i x) UNIV) = f x) /\
4239 A IN measurable_sets m ==>
4240 (pos_fn_integral m (\x. f x * indicator_fn A x) =
4241 inf (IMAGE (\i. pos_fn_integral m (\x. fi i x * indicator_fn A x)) UNIV))
4242Proof
4243 RW_TAC std_ss []
4244 >> (MP_TAC o Q.SPECL [`m`, `(\x. f x * indicator_fn A x)`,
4245 `(\i. (\x. fi i x * indicator_fn A x))`])
4246 lebesgue_monotone_convergence_decreasing
4247 >> RW_TAC std_ss []
4248 >> POP_ASSUM MATCH_MP_TAC
4249 >> CONJ_TAC
4250 >- METIS_TAC [IN_MEASURABLE_BOREL_MUL_INDICATOR, measure_space_def, subsets_def,
4251 measurable_sets_def]
4252 >> CONJ_TAC
4253 >- (RW_TAC std_ss [GSYM lt_infty] >| (* 2 subgoals *)
4254 [ (* goal 1 (of 2) *)
4255 MATCH_MP_TAC le_mul >> rw [INDICATOR_FN_POS],
4256 (* goal 2 (of 2) *)
4257 STRIP_ASSUME_TAC (Q.SPECL [‘A’, ‘x’] indicator_fn_normal) \\
4258 ‘fi i x <> PosInf’ by METIS_TAC [lt_infty] \\
4259 ‘fi i x <> NegInf’ by METIS_TAC [pos_not_neginf] \\
4260 ‘?z. fi i x = Normal z’ by METIS_TAC [extreal_cases] \\
4261 rw [extreal_mul_eq] ])
4262 >> CONJ_TAC
4263 >- (rw [lt_infty] >> MATCH_MP_TAC let_trans \\
4264 Q.EXISTS_TAC ‘pos_fn_integral m (fi i)’ \\
4265 reverse CONJ_TAC >- rw [GSYM lt_infty] \\
4266 MATCH_MP_TAC pos_fn_integral_mono >> rw [] >| (* 2 subgoals *)
4267 [ (* goal 1 (of 2) *)
4268 MATCH_MP_TAC le_mul >> rw [INDICATOR_FN_POS],
4269 (* goal 1 (of 2) *)
4270 GEN_REWRITE_TAC (RAND_CONV o ONCE_DEPTH_CONV) empty_rewrites [GSYM mul_rone] \\
4271 MATCH_MP_TAC le_lmul_imp >> rw [INDICATOR_FN_LE_1] ])
4272 >> CONJ_TAC
4273 >- (RW_TAC std_ss [indicator_fn_def, mul_rone, mul_rzero, le_refl, ext_mono_decreasing_def] \\
4274 FULL_SIMP_TAC std_ss [ext_mono_decreasing_def])
4275 >> RW_TAC std_ss [indicator_fn_def, mul_rone, mul_rzero]
4276 >> Suff `IMAGE (\i:num. 0:extreal) UNIV = (\y. y = 0)` >- RW_TAC std_ss [inf_const]
4277 >> RW_TAC std_ss [EXTENSION, IN_ABS, IN_IMAGE, IN_UNIV]
4278QED
4279
4280Theorem pos_fn_integral_sum :
4281 !m f s. FINITE s /\ measure_space m /\
4282 (!i. i IN s ==> !x. x IN m_space m ==> 0 <= f i x) /\
4283 (!i. i IN s ==> f i IN measurable (m_space m,measurable_sets m) Borel) ==>
4284 (pos_fn_integral m (\x. SIGMA (\i. (f i) x) s) =
4285 SIGMA (\i. pos_fn_integral m (f i)) s)
4286Proof
4287 Suff `!s:'b->bool.
4288 FINITE s ==>
4289 (\s:'b->bool. !m f. measure_space m /\
4290 (!i. i IN s ==> !x. x IN m_space m ==> 0 <= f i x) /\
4291 (!i. i IN s ==> f i IN measurable (m_space m,measurable_sets m) Borel)
4292 ==> (pos_fn_integral m (\x. SIGMA (\i. (f i) x) s) =
4293 SIGMA (\i. pos_fn_integral m (f i)) s)) s`
4294 >- METIS_TAC []
4295 >> MATCH_MP_TAC FINITE_INDUCT
4296 >> RW_TAC std_ss [EXTREAL_SUM_IMAGE_EMPTY, pos_fn_integral_zero]
4297 >> `!x. x IN m_space m ==> SIGMA (\i. f i x) (e INSERT s) = f e x + SIGMA (\i. f i x) s`
4298 by (RW_TAC std_ss [] \\
4299 (MP_TAC o Q.SPEC `e` o UNDISCH o Q.SPECL [`(\i. f i x)`,`s`] o
4300 INST_TYPE [alpha |-> beta]) EXTREAL_SUM_IMAGE_PROPERTY \\
4301 `!i. i IN e INSERT s ==> (\i. f i x) i <> NegInf`
4302 by (RW_TAC std_ss [] \\
4303 METIS_TAC [lt_infty, extreal_of_num_def, extreal_not_infty, lte_trans]) \\
4304 FULL_SIMP_TAC std_ss [DELETE_NON_ELEMENT])
4305 >> Know ‘pos_fn_integral m (\x. SIGMA (\i. f i x) (e INSERT s)) =
4306 pos_fn_integral m (\x. f e x + SIGMA (\i. f i x) s)’
4307 >- (MATCH_MP_TAC pos_fn_integral_cong >> simp [] \\
4308 rpt STRIP_TAC \\
4309 MATCH_MP_TAC le_add >> simp [] \\
4310 MATCH_MP_TAC EXTREAL_SUM_IMAGE_POS >> simp []) >> Rewr'
4311 >> `!i. i IN e INSERT s ==> (\i. pos_fn_integral m (f i)) i <> NegInf`
4312 by (RW_TAC std_ss [] \\
4313 METIS_TAC [lt_infty, extreal_of_num_def, extreal_not_infty, lte_trans,
4314 pos_fn_integral_pos])
4315 >> (MP_TAC o Q.SPEC `e` o UNDISCH o Q.SPECL [`(\i. pos_fn_integral m (f i))`,`s`] o
4316 INST_TYPE [alpha |-> beta]) EXTREAL_SUM_IMAGE_PROPERTY
4317 >> RW_TAC std_ss []
4318 >> `SIGMA (\i. pos_fn_integral m (f i)) s = pos_fn_integral m (\x. SIGMA (\i. f i x) s)`
4319 by METIS_TAC [IN_INSERT]
4320 >> FULL_SIMP_TAC std_ss [DELETE_NON_ELEMENT]
4321 >> `(\x. f e x + SIGMA (\i. f i x) s) = (\x. f e x + (\x. SIGMA (\i. f i x) s) x)` by METIS_TAC []
4322 >> POP_ORW
4323 >> MATCH_MP_TAC pos_fn_integral_add
4324 >> FULL_SIMP_TAC std_ss [IN_INSERT]
4325 >> RW_TAC std_ss []
4326 >- FULL_SIMP_TAC std_ss [EXTREAL_SUM_IMAGE_POS]
4327 >> MATCH_MP_TAC IN_MEASURABLE_BOREL_SUM
4328 >> qexistsl_tac [`f`, `s`]
4329 >> METIS_TAC [measure_space_def, measurable_sets_def, subsets_def, m_space_def, space_def,
4330 extreal_of_num_def, extreal_not_infty, lt_infty, lte_trans]
4331QED
4332
4333Theorem pos_fn_integral_disjoint_sets :
4334 !m f s t. measure_space m /\
4335 DISJOINT s t /\ s IN measurable_sets m /\ t IN measurable_sets m /\
4336 f IN measurable (m_space m,measurable_sets m) Borel /\
4337 (!x. x IN m_space m ==> 0 <= f x) ==>
4338 (pos_fn_integral m (\x. f x * indicator_fn (s UNION t) x) =
4339 pos_fn_integral m (\x. f x * indicator_fn s x) +
4340 pos_fn_integral m (\x. f x * indicator_fn t x))
4341Proof
4342 RW_TAC std_ss []
4343 >> `(\x. f x * indicator_fn (s UNION t) x) =
4344 (\x. (\x. f x * indicator_fn s x) x + (\x. f x * indicator_fn t x) x)`
4345 by (RW_TAC std_ss [FUN_EQ_THM, indicator_fn_def, IN_DISJOINT, IN_UNION,
4346 mul_rone, mul_rzero] \\
4347 Cases_on `x IN s`
4348 >- (RW_TAC std_ss [mul_rone, mul_rzero, add_rzero] \\
4349 METIS_TAC [EXTENSION, IN_DISJOINT]) \\
4350 RW_TAC std_ss [mul_rone, mul_rzero, add_lzero])
4351 >> POP_ORW
4352 >> `!s. s IN measurable_sets m ==>
4353 (\x. f x * indicator_fn s x) IN measurable (m_space m,measurable_sets m) Borel`
4354 by METIS_TAC [IN_MEASURABLE_BOREL_MUL_INDICATOR, measure_space_def,
4355 subsets_def, space_def]
4356 >> MATCH_MP_TAC pos_fn_integral_add
4357 >> FULL_SIMP_TAC std_ss [indicator_fn_def, mul_rone, mul_rzero]
4358 >> RW_TAC std_ss [le_refl, mul_rzero, mul_rone]
4359QED
4360
4361Theorem pos_fn_integral_disjoint_sets_sum :
4362 !m f s a. FINITE s /\ measure_space m /\
4363 (!i. i IN s ==> a i IN measurable_sets m) /\
4364 (!x. x IN m_space m ==> 0 <= f x) /\
4365 (!i j. i IN s /\ j IN s /\ i <> j ==> DISJOINT (a i) (a j)) /\
4366 f IN measurable (m_space m,measurable_sets m) Borel ==>
4367 (pos_fn_integral m (\x. f x * indicator_fn (BIGUNION (IMAGE a s)) x) =
4368 SIGMA (\i. pos_fn_integral m (\x. f x * indicator_fn (a i) x)) s)
4369Proof
4370 Suff ‘!s. FINITE (s :'b set) ==>
4371 (\s. !m f a. measure_space m /\
4372 (!i. i IN s ==> a i IN measurable_sets m) /\
4373 (!x. x IN m_space m ==> 0 <= f x) /\
4374 (!i j. i IN s /\ j IN s /\ i <> j ==> DISJOINT (a i) (a j)) /\
4375 f IN measurable (m_space m,measurable_sets m) Borel ==>
4376 pos_fn_integral m (\x. f x * indicator_fn (BIGUNION (IMAGE a s)) x) =
4377 SIGMA (\i. pos_fn_integral m (\x. f x * indicator_fn (a i) x)) s) s’
4378 >- RW_TAC std_ss []
4379 >> MATCH_MP_TAC FINITE_INDUCT
4380 >> RW_TAC std_ss [EXTREAL_SUM_IMAGE_EMPTY, IMAGE_EMPTY, BIGUNION_EMPTY,
4381 FINITE_INSERT, DELETE_NON_ELEMENT, IN_INSERT, BIGUNION_INSERT,
4382 IMAGE_INSERT]
4383 >- RW_TAC std_ss [indicator_fn_def, mul_rzero, mul_rone, NOT_IN_EMPTY,
4384 pos_fn_integral_zero]
4385 >> MP_TAC (Q.SPECL [‘\i. pos_fn_integral m (\x. f x * indicator_fn (a i) x)’, ‘s’]
4386 (INST_TYPE [alpha |-> beta] EXTREAL_SUM_IMAGE_PROPERTY))
4387 >> simp []
4388 >> DISCH_THEN (MP_TAC o Q.SPEC ‘e’)
4389 >> Know ‘!i. pos_fn_integral m (\x. f x * indicator_fn (a i) x) <> NegInf’
4390 >- (Q.X_GEN_TAC ‘i’ \\
4391 MATCH_MP_TAC pos_not_neginf \\
4392 MATCH_MP_TAC pos_fn_integral_pos >> rw [le_mul, INDICATOR_FN_POS])
4393 >> RW_TAC std_ss []
4394 >> `e NOTIN s` by METIS_TAC [DELETE_NON_ELEMENT]
4395 >> `DISJOINT (a e) (BIGUNION (IMAGE a s))`
4396 by (RW_TAC std_ss [DISJOINT_BIGUNION, IN_IMAGE] >> METIS_TAC [])
4397 >> `(IMAGE a s) SUBSET measurable_sets m`
4398 by (RW_TAC std_ss [SUBSET_DEF, IMAGE_DEF, GSPECIFICATION] \\
4399 METIS_TAC [])
4400 >> `countable (IMAGE a s)` by METIS_TAC [image_countable, finite_countable]
4401 >> `BIGUNION (IMAGE a s) IN measurable_sets m`
4402 by METIS_TAC [sigma_algebra_def, measure_space_def, subsets_def,
4403 measurable_sets_def]
4404 >> METIS_TAC [pos_fn_integral_disjoint_sets]
4405QED
4406
4407Theorem pos_fn_integral_split :
4408 !m f s. measure_space m /\ s IN measurable_sets m /\
4409 (!x. x IN m_space m ==> 0 <= f x) /\
4410 f IN measurable (m_space m,measurable_sets m) Borel ==>
4411 (pos_fn_integral m f = pos_fn_integral m (\x. f x * indicator_fn s x) +
4412 pos_fn_integral m (\x. f x * indicator_fn (m_space m DIFF s) x))
4413Proof
4414 RW_TAC std_ss []
4415 >> (MP_TAC o Q.SPECL [`m`,`f`,`s`,`m_space m DIFF s`]) pos_fn_integral_disjoint_sets
4416 >> RW_TAC std_ss [DISJOINT_DIFF, MEASURE_SPACE_DIFF, MEASURE_SPACE_MSPACE_MEASURABLE]
4417 >> `s UNION (m_space m DIFF s) = m_space m`
4418 by METIS_TAC [UNION_DIFF, MEASURE_SPACE_SUBSET_MSPACE]
4419 >> METIS_TAC [pos_fn_integral_mspace]
4420QED
4421
4422Theorem pos_fn_integral_cmul_infty :
4423 !m s. measure_space m /\ s IN measurable_sets m ==>
4424 pos_fn_integral m (\x. PosInf * indicator_fn s x) = PosInf * measure m s
4425Proof
4426 RW_TAC std_ss []
4427 >> Q.ABBREV_TAC `fi = (\i:num x. &i)`
4428 >> Q.ABBREV_TAC `f = (\x. PosInf)`
4429 >> `!x. x IN m_space m ==> (sup (IMAGE (\i. fi i x) UNIV) = f x)`
4430 by (RW_TAC std_ss [Abbr ‘fi’, Abbr ‘f’] \\
4431 Suff `IMAGE (\i. &i) univ(:num) = (\x. ?n. x = &n)`
4432 >- RW_TAC std_ss [sup_num] \\
4433 RW_TAC std_ss [EXTENSION, IN_IMAGE, IN_ABS, IN_UNIV])
4434 >> `!x. x IN m_space m ==> mono_increasing (\i. fi i x)`
4435 by (RW_TAC std_ss [ext_mono_increasing_def] \\
4436 RW_TAC real_ss [Abbr ‘fi’, extreal_of_num_def, extreal_le_def])
4437 >> `!i x. x IN m_space m ==> 0 <= fi i x`
4438 by RW_TAC real_ss [Abbr ‘fi’, extreal_of_num_def,extreal_le_def]
4439 >> `!x. x IN m_space m ==> 0 <= f x` by METIS_TAC [le_infty]
4440 >> `!i. fi i IN measurable (m_space m, measurable_sets m) Borel`
4441 by (RW_TAC std_ss [] \\
4442 MATCH_MP_TAC IN_MEASURABLE_BOREL_CONST \\
4443 METIS_TAC [measure_space_def])
4444 >> (MP_TAC o Q.SPECL [`m`,`f`,`fi`,`s`]) lebesgue_monotone_convergence_subset
4445 >> RW_TAC std_ss [Abbr ‘f’, Abbr ‘fi’]
4446 >> FULL_SIMP_TAC real_ss []
4447 >> RW_TAC real_ss [extreal_of_num_def, pos_fn_integral_cmul_indicator]
4448 >> RW_TAC std_ss [Once mul_comm]
4449 >> `0 <= measure m s` by METIS_TAC [MEASURE_SPACE_POSITIVE, positive_def]
4450 (* sup (IMAGE (\i. measure m s * Normal (&i)) UNIV (:num)) = PosInf * measure m s *)
4451 >> Know `!n. 0 <= Normal (&n)`
4452 >- (GEN_TAC >> `0 = Normal (&0)` by REWRITE_TAC [extreal_of_num_def] >> POP_ORW \\
4453 REWRITE_TAC [extreal_le_def] >> RW_TAC real_ss [])
4454 >> DISCH_TAC
4455 >> RW_TAC std_ss [sup_cmult]
4456 >> Suff `sup (IMAGE (\i. Normal (&i)) UNIV) = PosInf`
4457 >- METIS_TAC [mul_comm]
4458 >> Suff `IMAGE (\i:num. Normal (&i)) UNIV = (\x. ?n. x = &n)`
4459 >- RW_TAC std_ss [sup_num]
4460 >> RW_TAC std_ss [EXTENSION,IN_IMAGE,IN_ABS,IN_UNIV]
4461 >> METIS_TAC [extreal_of_num_def]
4462QED
4463
4464(* Corollary 9.9 of [1, p.77] *)
4465Theorem pos_fn_integral_suminf :
4466 !m f. measure_space m /\
4467 (!i x. x IN m_space m ==> 0 <= f i x) /\
4468 (!i. f i IN measurable (m_space m,measurable_sets m) Borel) ==>
4469 (pos_fn_integral m (\x. suminf (\i. f i x)) =
4470 suminf (\i. pos_fn_integral m (f i)))
4471Proof
4472 rpt STRIP_TAC
4473 >> Know `!n. 0 <= (\i. pos_fn_integral m (f i)) n`
4474 >- (RW_TAC std_ss [] \\
4475 MATCH_MP_TAC pos_fn_integral_pos >> art [])
4476 >> DISCH_THEN (MP_TAC o (MATCH_MP ext_suminf_def)) >> Rewr'
4477 >> Know `!x. x IN m_space m ==>
4478 suminf (\i. f i x) =
4479 sup (IMAGE (\n. SIGMA (\i. f i x) (count n)) UNIV)`
4480 >- (rpt STRIP_TAC >> MATCH_MP_TAC ext_suminf_def \\
4481 RW_TAC std_ss []) >> DISCH_TAC
4482 >> Know ‘pos_fn_integral m (\x. suminf (\i. f i x)) =
4483 pos_fn_integral m (\x. sup (IMAGE (\n. SIGMA (\i. f i x) (count n)) UNIV))’
4484 >- (MATCH_MP_TAC pos_fn_integral_cong >> simp [] \\
4485 rpt STRIP_TAC >> RW_TAC std_ss [le_sup', IN_IMAGE, IN_UNIV] \\
4486 POP_ASSUM MATCH_MP_TAC \\
4487 Q.EXISTS_TAC ‘0’ >> rw [EXTREAL_SUM_IMAGE_EMPTY]) >> Rewr'
4488 >> Know `!n. SIGMA (\i. pos_fn_integral m (f i)) (count n) =
4489 pos_fn_integral m (\x. SIGMA (\i. f i x) (count n))`
4490 >- (GEN_TAC >> MATCH_MP_TAC EQ_SYM \\
4491 MATCH_MP_TAC pos_fn_integral_sum >> rw [FINITE_COUNT]) >> Rewr'
4492 >> `(\n. pos_fn_integral m (\x. SIGMA (\i. f i x) (count n))) =
4493 (\n. pos_fn_integral m ((\n. (\x. SIGMA (\i. f i x) (count n))) n))`
4494 by METIS_TAC [] >> POP_ORW
4495 >> MATCH_MP_TAC lebesgue_monotone_convergence >> simp []
4496 >> CONJ_TAC
4497 >- (GEN_TAC \\
4498 MATCH_MP_TAC (INST_TYPE [beta |-> ``:num``] IN_MEASURABLE_BOREL_SUM) \\
4499 qexistsl_tac [`f`, `count i`] >> rw [FINITE_COUNT] \\
4500 METIS_TAC [lt_infty, lte_trans, num_not_infty])
4501 >> CONJ_TAC >- RW_TAC std_ss [FINITE_COUNT, EXTREAL_SUM_IMAGE_POS]
4502 >> RW_TAC std_ss [ext_mono_increasing_def]
4503 >> MATCH_MP_TAC EXTREAL_SUM_IMAGE_MONO_SET
4504 >> RW_TAC std_ss [FINITE_COUNT, SUBSET_DEF, IN_COUNT]
4505 >> DECIDE_TAC
4506QED
4507
4508(* added ‘x IN m_space m’, changed quantifiers' order *)
4509Theorem pos_fn_integral_null_set : (* was: positive_integral_null_set *)
4510 !m f N. measure_space m /\
4511 (!x. x IN m_space m ==> 0 <= f x) /\ N IN null_set m ==>
4512 (pos_fn_integral m (\x. f x * indicator_fn N x) = 0)
4513Proof
4514 RW_TAC std_ss [null_sets, GSPECIFICATION]
4515 >> Suff `pos_fn_integral m (\x. f x * indicator_fn N x) =
4516 pos_fn_integral m (\x. 0)`
4517 >- METIS_TAC [pos_fn_integral_zero]
4518 >> `!x. x IN m_space m ==> 0 <= f x * indicator_fn N x`
4519 by (rpt STRIP_TAC \\
4520 MATCH_MP_TAC le_mul >> ASM_SIMP_TAC std_ss [INDICATOR_FN_POS])
4521 >> SIMP_TAC std_ss [GSYM le_antisym]
4522 >> CONJ_TAC
4523 >- (MATCH_MP_TAC pos_fn_integral_mono_AE \\
4524 ASM_SIMP_TAC std_ss [le_refl] \\
4525 SIMP_TAC std_ss [AE_ALT, GSPECIFICATION] \\
4526 Q.EXISTS_TAC `N` \\
4527 ASM_SIMP_TAC std_ss [GSYM IN_NULL_SET, null_sets, GSPECIFICATION, SUBSET_DEF] \\
4528 GEN_TAC >> STRIP_TAC >> POP_ASSUM MP_TAC \\
4529 ONCE_REWRITE_TAC [MONO_NOT_EQ] >> SIMP_TAC std_ss [indicator_fn_def] \\
4530 SIMP_TAC std_ss [mul_rzero, le_refl])
4531 >> MATCH_MP_TAC pos_fn_integral_mono
4532 >> ASM_SIMP_TAC std_ss [le_refl]
4533QED
4534
4535(* key result *)
4536Theorem lebesgue_monotone_convergence_AE :
4537 !m f fi. measure_space m /\
4538 (!i. fi i IN measurable (m_space m,measurable_sets m) Borel) /\
4539 (AE x::m. !i. fi i x <= fi (SUC i) x /\ 0 <= fi i x) /\
4540 (!x. x IN m_space m ==> (sup (IMAGE (\i. fi i x) univ(:num)) = f x)) ==>
4541 (pos_fn_integral m (fn_plus f) =
4542 sup (IMAGE (\i. pos_fn_integral m (fn_plus (fi i))) univ(:num)))
4543Proof
4544 RW_TAC std_ss [FN_PLUS_ALT']
4545 >> ‘sigma_algebra (measurable_space m)’
4546 by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA]
4547 >> FULL_SIMP_TAC std_ss [AE_ALT, GSPECIFICATION]
4548 >> Q.ABBREV_TAC `ff = (\i x. if x IN m_space m DIFF N then fi i x else 0)`
4549 >> Know `AE x::m. !i. ff i x = fi i x`
4550 >- (MATCH_MP_TAC
4551 (SIMP_RULE std_ss [AND_IMP_INTRO]
4552 (Q.SPECL [`N`, `m`, `\x. !i. ff i x = fi i x`] AE_I)) \\
4553 Q.UNABBREV_TAC `ff` \\
4554 ASM_SIMP_TAC std_ss [SUBSET_DEF, GSPECIFICATION, IN_DIFF] \\
4555 GEN_TAC THEN REWRITE_TAC [GSYM AND_IMP_INTRO] >> DISCH_TAC \\
4556 ASM_REWRITE_TAC [] >> ASM_CASES_TAC ``x NOTIN N`` >> METIS_TAC [])
4557 >> DISCH_TAC
4558 >> Know `pos_fn_integral m (\x. max 0 (f x)) =
4559 pos_fn_integral m (\x. max 0 (sup (IMAGE (\i. ff i x) univ(:num))))`
4560 >- (MATCH_MP_TAC pos_fn_integral_cong_AE >> ASM_SIMP_TAC std_ss [le_max1] \\
4561 FULL_SIMP_TAC std_ss [GSPECIFICATION, AE_ALT] \\
4562 Q.EXISTS_TAC `N'` >> Q.UNABBREV_TAC `ff` \\
4563 FULL_SIMP_TAC std_ss [SUBSET_DEF, GSPECIFICATION] \\
4564 RW_TAC std_ss [] >> FIRST_X_ASSUM MATCH_MP_TAC \\
4565 ASM_SIMP_TAC std_ss [] >> POP_ASSUM MP_TAC \\
4566 ONCE_REWRITE_TAC [MONO_NOT_EQ] >> RW_TAC std_ss [])
4567 >> DISC_RW_KILL
4568 >> Know `pos_fn_integral m (\x. max 0 (sup (IMAGE (\i. ff i x) univ(:num)))) =
4569 sup (IMAGE (\i. pos_fn_integral m ((\i x. max 0 (ff i x)) i)) univ(:num))`
4570 >- (MATCH_MP_TAC lebesgue_monotone_convergence \\
4571 ASM_SIMP_TAC std_ss [le_max1] \\
4572 `(\x. 0) IN measurable (m_space m,measurable_sets m) Borel`
4573 by (MATCH_MP_TAC IN_MEASURABLE_BOREL_CONST \\
4574 METIS_TAC [measure_space_def]) \\
4575 CONJ_TAC
4576 >- (GEN_TAC \\
4577 ONCE_REWRITE_TAC [METIS []
4578 ``!x. (\x. max 0 (ff i x)) = (\x. max ((\x. 0) x) ((\x. ff i x) x))``] \\
4579 MATCH_MP_TAC IN_MEASURABLE_BOREL_MAX >> Q.UNABBREV_TAC `ff` \\
4580 FULL_SIMP_TAC std_ss [measure_space_def] \\
4581 KNOW_TAC ``Borel = (m_space (space Borel, subsets Borel, (\x. 0)),
4582 measurable_sets (space Borel, subsets Borel, (\x. 0)))`` >|
4583 [SIMP_TAC std_ss [m_space_def, measurable_sets_def, SPACE],
4584 DISC_RW_KILL] \\
4585 Suff `(\x. if x IN m_space m DIFF N then fi i x else 0) =
4586 (\x. if (\x. x IN m_space m DIFF N) x then (\x. fi i x) x else (\x. 0) x)` >|
4587 [DISC_RW_KILL, SIMP_TAC std_ss []] \\
4588 MATCH_MP_TAC MEASURABLE_IF \\
4589 ASM_SIMP_TAC std_ss [m_space_def, measurable_sets_def, SPACE, measure_space_def] \\
4590 CONJ_TAC >|
4591 [ ONCE_REWRITE_TAC [METIS [ETA_AX] ``(\x. fi i x) = fi i``] \\
4592 ASM_SIMP_TAC std_ss [], ALL_TAC ] \\
4593 ONCE_REWRITE_TAC [METIS [subsets_def]
4594 ``measurable_sets m = subsets (m_space m, measurable_sets m)``] \\
4595 `{x | x IN m_space m /\ x IN m_space m DIFF N} = m_space m DIFF N` by SET_TAC [] \\
4596 POP_ASSUM (fn th => REWRITE_TAC [th, SIGMA_ALGEBRA_BOREL]) \\
4597 MATCH_MP_TAC SIGMA_ALGEBRA_DIFF \\
4598 FULL_SIMP_TAC std_ss [subsets_def, GSYM IN_NULL_SET, null_sets, GSPECIFICATION] \\
4599 METIS_TAC [MEASURE_SPACE_MSPACE_MEASURABLE, measure_space_def]) \\
4600 CONJ_TAC
4601 >- (rpt STRIP_TAC \\
4602 Q.UNABBREV_TAC `ff` >> SIMP_TAC std_ss [ext_mono_increasing_def] \\
4603 RW_TAC std_ss [] >> MATCH_MP_TAC max_le2_imp >> SIMP_TAC std_ss [le_refl] \\
4604 POP_ASSUM MP_TAC \\
4605 UNDISCH_TAC ``{x | x IN m_space m /\
4606 ?i. ~(fi i x <= fi (SUC i) x) \/ ~(0 <= fi i x)} SUBSET N`` \\
4607 FULL_SIMP_TAC std_ss [SUBSET_DEF, GSPECIFICATION, IN_DIFF] \\
4608 DISCH_THEN (MP_TAC o Q.SPEC `x`) >> FULL_SIMP_TAC std_ss [] \\
4609 DISCH_TAC >> Induct_on `i'` >> ASM_SIMP_TAC std_ss [le_refl] \\
4610 ASM_CASES_TAC ``i = SUC i'`` >> ASM_SIMP_TAC std_ss [le_refl] \\
4611 DISCH_TAC >> MATCH_MP_TAC le_trans >> Q.EXISTS_TAC `fi i' x` \\
4612 ASM_SIMP_TAC std_ss [] >> FIRST_X_ASSUM MATCH_MP_TAC \\
4613 ASM_SIMP_TAC arith_ss []) \\
4614 rpt STRIP_TAC \\
4615 Suff `!i:num. 0 <= ff i x` >|
4616 [ (* goal 1 (of 2) *)
4617 RW_TAC std_ss [extreal_max_def] THEN
4618 UNDISCH_TAC ``~(0 <= sup (IMAGE (\i. ff i x) univ(:num)))`` THEN
4619 ONCE_REWRITE_TAC [MONO_NOT_EQ] THEN RW_TAC std_ss [] THEN
4620 ASM_CASES_TAC ``!i:num. ff i x = 0`` THENL
4621 [ASM_SIMP_TAC std_ss [IMAGE_DEF, IN_UNIV] THEN
4622 ONCE_REWRITE_TAC [SET_RULE ``{0 | i | T} = {0}``] THEN
4623 SIMP_TAC std_ss [sup_sing, le_refl],
4624 ALL_TAC] THEN
4625 SIMP_TAC std_ss [le_lt] THEN DISJ1_TAC THEN
4626 SIMP_TAC std_ss [GSYM sup_lt] THEN FULL_SIMP_TAC std_ss [] THEN
4627 Q.EXISTS_TAC `ff i x` THEN CONJ_TAC THENL [ALL_TAC, METIS_TAC [le_lt]] THEN
4628 ONCE_REWRITE_TAC [GSYM SPECIFICATION] THEN SET_TAC [],
4629 (* goal 2 (of 2) *)
4630 Q.UNABBREV_TAC `ff` THEN SIMP_TAC std_ss [] ] \\
4631
4632 GEN_TAC >> ASM_CASES_TAC ``x IN m_space m DIFF N`` \\
4633 ASM_SIMP_TAC std_ss [le_refl] \\
4634 UNDISCH_TAC ``{x | x IN m_space m /\
4635 ?i. ~(fi i x <= fi (SUC i) x) \/ ~(0 <= fi i x)} SUBSET N`` \\
4636 ONCE_REWRITE_TAC [MONO_NOT_EQ] >> RW_TAC std_ss [SUBSET_DEF, GSPECIFICATION] \\
4637 METIS_TAC [IN_DIFF])
4638 >> DISC_RW_KILL
4639 >> AP_TERM_TAC >> AP_THM_TAC >> AP_TERM_TAC >> ABS_TAC
4640 >> SIMP_TAC std_ss []
4641 >> MATCH_MP_TAC pos_fn_integral_cong_AE
4642 >> FULL_SIMP_TAC std_ss [le_max1, AE_ALT, GSPECIFICATION]
4643 >> Q.EXISTS_TAC `N'` >> FULL_SIMP_TAC std_ss [SUBSET_DEF, GSPECIFICATION]
4644 >> RW_TAC std_ss [] >> FIRST_X_ASSUM MATCH_MP_TAC
4645 >> METIS_TAC []
4646QED
4647
4648(* ------------------------------------------------------------------------- *)
4649(* Integral for arbitrary functions *)
4650(* ------------------------------------------------------------------------- *)
4651
4652Theorem integral_pos_fn :
4653 !m f. measure_space m /\ (!x. x IN m_space m ==> 0 <= f x) ==>
4654 (integral m f = pos_fn_integral m f)
4655Proof
4656 RW_TAC std_ss [integral_def]
4657 >> Know ‘pos_fn_integral m (fn_minus f) = pos_fn_integral m (\x. 0)’
4658 >- (MATCH_MP_TAC pos_fn_integral_cong >> simp [FN_MINUS_POS] \\
4659 RW_TAC std_ss [fn_minus_def, GSYM le_antisym, le_refl] >|
4660 [ Suff ‘0 <= f x’ >- METIS_TAC [le_neg, neg_0] \\
4661 FIRST_X_ASSUM MATCH_MP_TAC >> art [],
4662 Suff ‘f x <= 0’ >- METIS_TAC [le_neg, neg_0] \\
4663 MATCH_MP_TAC lt_imp_le >> art [] ]) >> Rewr'
4664 >> simp [pos_fn_integral_zero, sub_rzero]
4665 >> MATCH_MP_TAC pos_fn_integral_cong >> simp []
4666QED
4667
4668Theorem integral_pos :
4669 !m f. measure_space m /\ (!x. x IN m_space m ==> 0 <= f x) ==> 0 <= integral m f
4670Proof
4671 rpt STRIP_TAC
4672 >> Know `integral m f = pos_fn_integral m f`
4673 >- (MATCH_MP_TAC integral_pos_fn >> art []) >> Rewr'
4674 >> MATCH_MP_TAC pos_fn_integral_pos >> art []
4675QED
4676
4677Theorem integral_neg :
4678 !m f. measure_space m /\ (!x. x IN m_space m ==> f x <= 0) ==> integral m f <= 0
4679Proof
4680 rw [integral_def]
4681 >> Know ‘pos_fn_integral m (fn_plus f) = pos_fn_integral m (\x. 0)’
4682 >- (MATCH_MP_TAC pos_fn_integral_cong \\
4683 rw [FN_PLUS_POS] \\
4684 MATCH_MP_TAC FN_PLUS_REDUCE' \\
4685 FIRST_X_ASSUM MATCH_MP_TAC >> art [])
4686 >> Rewr'
4687 >> rw [pos_fn_integral_zero]
4688 >> REWRITE_TAC [Once (GSYM le_neg), neg_0, neg_neg]
4689 >> MATCH_MP_TAC pos_fn_integral_pos >> rw [FN_MINUS_POS]
4690QED
4691
4692Theorem integral_abs_pos_fn :
4693 !m f. measure_space m ==> (integral m (abs o f) = pos_fn_integral m (abs o f))
4694Proof
4695 rpt STRIP_TAC
4696 >> MP_TAC (Q.SPECL [`m`, `abs o f`] integral_pos_fn)
4697 >> RW_TAC std_ss [o_DEF, abs_pos]
4698QED
4699
4700Theorem integral_split :
4701 !m f s. measure_space m /\ s IN measurable_sets m /\
4702 (!x. x IN m_space m ==> 0 <= f x) /\
4703 f IN measurable (m_space m,measurable_sets m) Borel ==>
4704 (integral m f = integral m (\x. f x * indicator_fn s x) +
4705 integral m (\x. f x * indicator_fn (m_space m DIFF s) x))
4706Proof
4707 rpt STRIP_TAC
4708 >> Know `!s x. x IN m_space m ==> 0 <= (\x. f x * indicator_fn s x) x`
4709 >- (RW_TAC std_ss [] \\
4710 MATCH_MP_TAC le_mul >> art [INDICATOR_FN_POS] \\
4711 FIRST_X_ASSUM MATCH_MP_TAC >> art []) >> DISCH_TAC
4712 >> ASM_SIMP_TAC std_ss [integral_pos_fn]
4713 >> Know `integral m (\x. f x * indicator_fn s x) =
4714 pos_fn_integral m (\x. f x * indicator_fn s x)`
4715 >- (MATCH_MP_TAC integral_pos_fn >> art []) >> Rewr'
4716 >> Know `integral m (\x. f x * indicator_fn (m_space m DIFF s) x) =
4717 pos_fn_integral m (\x. f x * indicator_fn (m_space m DIFF s) x)`
4718 >- (MATCH_MP_TAC integral_pos_fn >> art []) >> Rewr'
4719 >> MATCH_MP_TAC pos_fn_integral_split >> art []
4720QED
4721
4722(* removed ‘!x. x IN m_space m ==> 0 <= f x’, added ‘integrable m f’ *)
4723Theorem integral_split' :
4724 !m f s. measure_space m /\ integrable m f /\ s IN measurable_sets m ==>
4725 (integral m f = integral m (\x. f x * indicator_fn s x) +
4726 integral m (\x. f x * indicator_fn (m_space m DIFF s) x))
4727Proof
4728 RW_TAC std_ss [integrable_def, integral_def,
4729 fn_plus_mul_indicator, fn_minus_mul_indicator]
4730 >> ‘sigma_algebra (measurable_space m)’
4731 by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA]
4732 >> Know ‘pos_fn_integral m (fn_plus f) =
4733 pos_fn_integral m (\x. fn_plus f x * indicator_fn s x) +
4734 pos_fn_integral m (\x. fn_plus f x * indicator_fn (m_space m DIFF s) x)’
4735 >- (MATCH_MP_TAC pos_fn_integral_split >> rw [FN_PLUS_POS] \\
4736 MATCH_MP_TAC IN_MEASURABLE_BOREL_FN_PLUS >> art []) >> Rewr'
4737 >> Know ‘pos_fn_integral m (fn_minus f) =
4738 pos_fn_integral m (\x. fn_minus f x * indicator_fn s x) +
4739 pos_fn_integral m (\x. fn_minus f x * indicator_fn (m_space m DIFF s) x)’
4740 >- (MATCH_MP_TAC pos_fn_integral_split >> rw [FN_MINUS_POS] \\
4741 MATCH_MP_TAC IN_MEASURABLE_BOREL_FN_MINUS >> art []) >> Rewr'
4742 >> Q.ABBREV_TAC ‘A = pos_fn_integral m (\x. fn_plus f x * indicator_fn s x)’
4743 >> Q.ABBREV_TAC ‘B = pos_fn_integral m (\x. fn_minus f x * indicator_fn s x)’
4744 >> Q.ABBREV_TAC ‘C = pos_fn_integral m (\x. fn_plus f x * indicator_fn (m_space m DIFF s) x)’
4745 >> Q.ABBREV_TAC ‘D = pos_fn_integral m (\x. fn_minus f x * indicator_fn (m_space m DIFF s) x)’
4746 >> Know ‘A <> PosInf /\ C <> PosInf’
4747 >- (fs [Abbr ‘A’, Abbr ‘C’, lt_infty] \\
4748 CONJ_TAC \\
4749 ( MATCH_MP_TAC let_trans >> Q.EXISTS_TAC ‘pos_fn_integral m (fn_plus f)’ >> art [] \\
4750 MATCH_MP_TAC pos_fn_integral_mono \\
4751 rw [] >- (MATCH_MP_TAC le_mul >> rw [FN_PLUS_POS, INDICATOR_FN_POS]) \\
4752 ‘fn_plus f x = fn_plus f x * 1’ by PROVE_TAC [mul_rone] \\
4753 POP_ASSUM ((GEN_REWRITE_TAC (RAND_CONV o ONCE_DEPTH_CONV) empty_rewrites) o wrap) \\
4754 MATCH_MP_TAC le_lmul_imp >> rw [FN_PLUS_POS, INDICATOR_FN_LE_1] )) >> STRIP_TAC
4755 >> Know ‘B <> PosInf /\ D <> PosInf’
4756 >- (fs [Abbr ‘B’, Abbr ‘D’, lt_infty] \\
4757 CONJ_TAC \\
4758 ( MATCH_MP_TAC let_trans >> Q.EXISTS_TAC ‘pos_fn_integral m (fn_minus f)’ >> art [] \\
4759 MATCH_MP_TAC pos_fn_integral_mono \\
4760 rw [] >- (MATCH_MP_TAC le_mul >> rw [FN_MINUS_POS, INDICATOR_FN_POS]) \\
4761 ‘fn_minus f x = fn_minus f x * 1’ by PROVE_TAC [mul_rone] \\
4762 POP_ASSUM ((GEN_REWRITE_TAC (RAND_CONV o ONCE_DEPTH_CONV) empty_rewrites) o wrap) \\
4763 MATCH_MP_TAC le_lmul_imp >> rw [FN_MINUS_POS, INDICATOR_FN_LE_1] )) >> STRIP_TAC
4764 >> Know ‘A <> NegInf’
4765 >- (MATCH_MP_TAC pos_not_neginf >> Q.UNABBREV_TAC ‘A’ \\
4766 MATCH_MP_TAC pos_fn_integral_pos >> rw [] \\
4767 MATCH_MP_TAC le_mul >> rw [FN_PLUS_POS, INDICATOR_FN_POS]) >> DISCH_TAC
4768 >> Know ‘C <> NegInf’
4769 >- (MATCH_MP_TAC pos_not_neginf >> Q.UNABBREV_TAC ‘C’ \\
4770 MATCH_MP_TAC pos_fn_integral_pos >> rw [] \\
4771 MATCH_MP_TAC le_mul >> rw [FN_PLUS_POS, INDICATOR_FN_POS]) >> DISCH_TAC
4772 >> Know ‘B <> NegInf’
4773 >- (MATCH_MP_TAC pos_not_neginf >> Q.UNABBREV_TAC ‘B’ \\
4774 MATCH_MP_TAC pos_fn_integral_pos >> rw [] \\
4775 MATCH_MP_TAC le_mul >> rw [FN_MINUS_POS, INDICATOR_FN_POS]) >> DISCH_TAC
4776 >> Know ‘D <> NegInf’
4777 >- (MATCH_MP_TAC pos_not_neginf >> Q.UNABBREV_TAC ‘D’ \\
4778 MATCH_MP_TAC pos_fn_integral_pos >> rw [] \\
4779 MATCH_MP_TAC le_mul >> rw [FN_MINUS_POS, INDICATOR_FN_POS]) >> DISCH_TAC
4780 >> ‘?a. A = Normal a’ by METIS_TAC [extreal_cases] >> POP_ORW
4781 >> ‘?b. B = Normal b’ by METIS_TAC [extreal_cases] >> POP_ORW
4782 >> ‘?c. C = Normal c’ by METIS_TAC [extreal_cases] >> POP_ORW
4783 >> ‘?d. D = Normal d’ by METIS_TAC [extreal_cases] >> POP_ORW
4784 >> REWRITE_TAC [extreal_add_def, extreal_sub_def, extreal_11]
4785 >> REAL_ARITH_TAC
4786QED
4787
4788(* ------------------------------------------------------------------------- *)
4789(* Properties of integrable functions *)
4790(* ------------------------------------------------------------------------- *)
4791
4792Theorem integrable_eq :
4793 !m f g. measure_space m /\ integrable m f /\
4794 (!x. x IN m_space m ==> (f x = g x)) ==> integrable m g
4795Proof
4796 RW_TAC std_ss [integrable_def, IN_MEASURABLE, space_def, subsets_def, IN_FUNSET]
4797 >| [ (* goal 1 (of 4) *)
4798 PROVE_TAC [],
4799 (* goal 2 (of 4) *)
4800 Know `PREIMAGE g s INTER m_space m = PREIMAGE f s INTER m_space m`
4801 >- (RW_TAC std_ss [EXTENSION, IN_INTER, IN_PREIMAGE] \\
4802 EQ_TAC >> RW_TAC std_ss [] \\
4803 PROVE_TAC []) >> Rewr \\
4804 FIRST_X_ASSUM MATCH_MP_TAC >> art [],
4805 (* goal 3 (of 4) *)
4806 Know `pos_fn_integral m (fn_plus g) =
4807 pos_fn_integral m (\x. (fn_plus g) x * indicator_fn (m_space m) x)`
4808 >- (MATCH_MP_TAC pos_fn_integral_mspace >> art [] \\
4809 REWRITE_TAC [FN_PLUS_POS]) >> Rewr \\
4810 Know `(\x. fn_plus g x * indicator_fn (m_space m) x) =
4811 (\x. fn_plus f x * indicator_fn (m_space m) x)`
4812 >- (FUN_EQ_TAC >> GEN_TAC >> BETA_TAC \\
4813 Cases_on `x IN m_space m`
4814 >- (ASM_SIMP_TAC std_ss [indicator_fn_def, mul_rone] \\
4815 SIMP_TAC std_ss [fn_plus_def] >> METIS_TAC []) \\
4816 ASM_SIMP_TAC std_ss [indicator_fn_def, mul_rzero]) >> Rewr \\
4817 Know `pos_fn_integral m (\x. fn_plus f x * indicator_fn (m_space m) x) =
4818 pos_fn_integral m (fn_plus f)`
4819 >- (MATCH_MP_TAC EQ_SYM \\
4820 MATCH_MP_TAC pos_fn_integral_mspace >> art [] \\
4821 REWRITE_TAC [FN_PLUS_POS]) >> Rewr \\
4822 ASM_REWRITE_TAC [],
4823 (* goal 4 (of 4) *)
4824 Know `pos_fn_integral m (fn_minus g) =
4825 pos_fn_integral m (\x. (fn_minus g) x * indicator_fn (m_space m) x)`
4826 >- (MATCH_MP_TAC pos_fn_integral_mspace >> art [] \\
4827 REWRITE_TAC [FN_MINUS_POS]) >> Rewr \\
4828 Know `(\x. fn_minus g x * indicator_fn (m_space m) x) =
4829 (\x. fn_minus f x * indicator_fn (m_space m) x)`
4830 >- (FUN_EQ_TAC >> GEN_TAC >> BETA_TAC \\
4831 Cases_on `x IN m_space m`
4832 >- (ASM_SIMP_TAC std_ss [indicator_fn_def, mul_rone] \\
4833 SIMP_TAC std_ss [fn_minus_def] >> METIS_TAC []) \\
4834 ASM_SIMP_TAC std_ss [indicator_fn_def, mul_rzero]) >> Rewr \\
4835 Know `pos_fn_integral m (\x. fn_minus f x * indicator_fn (m_space m) x) =
4836 pos_fn_integral m (fn_minus f)`
4837 >- (MATCH_MP_TAC EQ_SYM \\
4838 MATCH_MP_TAC pos_fn_integral_mspace >> art [] \\
4839 REWRITE_TAC [FN_MINUS_POS]) >> Rewr \\
4840 ASM_REWRITE_TAC [] ]
4841QED
4842
4843Theorem integrable_cong :
4844 !m f g. measure_space m /\ (!x. x IN m_space m ==> (f x = g x)) ==>
4845 (integrable m f <=> integrable m g)
4846Proof
4847 rpt STRIP_TAC
4848 >> EQ_TAC >> STRIP_TAC
4849 >| [ (* goal 1 (of 2) *)
4850 MATCH_MP_TAC integrable_eq >> Q.EXISTS_TAC ‘f’ >> art [],
4851 (* goal 2 (of 2) *)
4852 MATCH_MP_TAC integrable_eq >> Q.EXISTS_TAC ‘g’ >> rw [] ]
4853QED
4854
4855Theorem integrable_pos :
4856 !m f. measure_space m /\ (!x. x IN m_space m ==> 0 <= f x) ==>
4857 (integrable m f <=> f IN measurable (m_space m,measurable_sets m) Borel /\
4858 pos_fn_integral m f <> PosInf)
4859Proof
4860 RW_TAC std_ss [integrable_def, GSYM fn_plus_def, GSYM fn_minus_def,
4861 pos_fn_integral_zero, num_not_infty]
4862 >> Know ‘pos_fn_integral m (fn_plus f) = pos_fn_integral m f’
4863 >- (MATCH_MP_TAC pos_fn_integral_cong >> simp [FN_PLUS_POS] \\
4864 rpt STRIP_TAC >> rw []) >> Rewr'
4865 >> Know ‘pos_fn_integral m (fn_minus f) = pos_fn_integral m (\x. 0)’
4866 >- (MATCH_MP_TAC pos_fn_integral_cong >> simp [FN_MINUS_POS] \\
4867 rpt STRIP_TAC >> rw []) >> Rewr'
4868 >> rw [pos_fn_integral_zero]
4869QED
4870
4871Theorem integrable_infty:
4872 !m f s. measure_space m /\ integrable m f /\ s IN measurable_sets m /\
4873 (!x. x IN s ==> f x = PosInf) ==> measure m s = 0
4874Proof
4875 RW_TAC std_ss [integrable_def]
4876 >> ‘sigma_algebra (measurable_space m)’
4877 by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA]
4878 >> (MP_TAC o Q.SPECL [`m`,`fn_plus f`,`s`]) pos_fn_integral_split
4879 >> RW_TAC std_ss [IN_MEASURABLE_BOREL_FN_PLUS, DISJOINT_DIFF, FN_PLUS_POS]
4880 >> `(\x. fn_plus f x * indicator_fn s x) = (\x. PosInf * indicator_fn s x)`
4881 by (RW_TAC std_ss [FUN_EQ_THM, indicator_fn_def, fn_plus_def, mul_rzero,
4882 mul_rone] \\
4883 METIS_TAC [lt_infty, extreal_mul_def, mul_rone, mul_rzero])
4884 >> `pos_fn_integral m (\x. PosInf * indicator_fn s x) = PosInf * (measure m s)`
4885 by METIS_TAC [pos_fn_integral_cmul_infty]
4886 >> FULL_SIMP_TAC std_ss []
4887 >> `0 <= pos_fn_integral m (\x. fn_plus f x * indicator_fn (m_space m DIFF s) x)`
4888 by (MATCH_MP_TAC pos_fn_integral_pos \\
4889 RW_TAC std_ss [fn_plus_def, indicator_fn_def, mul_rzero, mul_rone,
4890 lt_imp_le, le_refl])
4891 >> SPOSE_NOT_THEN ASSUME_TAC
4892 >> `0 < measure m s` by METIS_TAC [positive_def, MEASURE_SPACE_POSITIVE, lt_le]
4893 >> `pos_fn_integral m (\x. fn_plus f x * indicator_fn (m_space m DIFF s) x)
4894 <> NegInf`
4895 by METIS_TAC [lt_infty, lte_trans, num_not_infty]
4896 >> FULL_SIMP_TAC std_ss [mul_lposinf, lt_imp_ne, add_infty]
4897QED
4898
4899(* Dual version of the above theorem *)
4900Theorem integrable_infty' :
4901 !m f s. measure_space m /\ integrable m f /\ s IN measurable_sets m /\
4902 (!x. x IN s ==> f x = NegInf) ==> measure m s = 0
4903Proof
4904 RW_TAC std_ss [integrable_def]
4905 >> ‘sigma_algebra (measurable_space m)’
4906 by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA]
4907 >> (MP_TAC o Q.SPECL [`m`,`fn_minus f`,`s`]) pos_fn_integral_split
4908 >> RW_TAC std_ss [IN_MEASURABLE_BOREL_FN_MINUS, DISJOINT_DIFF, FN_MINUS_POS]
4909 >> Know ‘(\x. fn_minus f x * indicator_fn s x) =
4910 (\x. PosInf * indicator_fn s x)’
4911 >- (rw [FUN_EQ_THM, indicator_fn_def, fn_minus_def, mul_rzero, mul_rone] \\
4912 Cases_on ‘x IN s’ >> simp [extreal_ainv_def])
4913 >> DISCH_TAC
4914 >> `pos_fn_integral m (\x. PosInf * indicator_fn s x) = PosInf * measure m s`
4915 by METIS_TAC [pos_fn_integral_cmul_infty]
4916 >> FULL_SIMP_TAC std_ss []
4917 >> Know ‘0 <= pos_fn_integral m
4918 (\x. fn_minus f x * indicator_fn (m_space m DIFF s) x)’
4919 >- (MATCH_MP_TAC pos_fn_integral_pos >> rw [] \\
4920 MATCH_MP_TAC le_mul >> simp [FN_MINUS_POS, INDICATOR_FN_POS])
4921 >> DISCH_TAC
4922 >> SPOSE_NOT_THEN ASSUME_TAC
4923 >> `0 < measure m s` by METIS_TAC [positive_def, MEASURE_SPACE_POSITIVE, lt_le]
4924 >> `pos_fn_integral m (\x. fn_minus f x * indicator_fn (m_space m DIFF s) x)
4925 <> NegInf`
4926 by METIS_TAC [lt_infty, lte_trans, num_not_infty]
4927 >> FULL_SIMP_TAC std_ss [mul_lposinf, lt_imp_ne, add_infty]
4928QED
4929
4930Theorem integrable_infty_null :
4931 !m f. measure_space m /\ integrable m f ==>
4932 null_set m {x | x IN m_space m /\ f x = PosInf}
4933Proof
4934 RW_TAC std_ss []
4935 >> Q.ABBREV_TAC `s = {x | x IN m_space m /\ f x = PosInf}`
4936 >> Suff `s IN measurable_sets m`
4937 >- (RW_TAC std_ss [null_set_def]
4938 >> MATCH_MP_TAC integrable_infty
4939 >> Q.EXISTS_TAC `f`
4940 >> RW_TAC std_ss []
4941 >> Q.UNABBREV_TAC `s`
4942 >> FULL_SIMP_TAC std_ss [GSPECIFICATION])
4943 >> `f IN measurable (m_space m, measurable_sets m) Borel`
4944 by FULL_SIMP_TAC std_ss [integrable_def]
4945 >> MP_TAC (Q.SPECL [`f`,`(m_space m, measurable_sets m)`] IN_MEASURABLE_BOREL_ALT8)
4946 >> rw [MEASURE_SPACE_SIGMA_ALGEBRA]
4947 >> POP_ASSUM (MP_TAC o (Q.SPEC `PosInf`))
4948 >> Suff `s = {x | f x = PosInf} INTER m_space m`
4949 >- METIS_TAC []
4950 >> Q.UNABBREV_TAC `s`
4951 >> RW_TAC std_ss [EXTENSION,IN_INTER,GSPECIFICATION]
4952 >> METIS_TAC []
4953QED
4954
4955(* Dual version of the above theorem *)
4956Theorem integrable_infty_null' :
4957 !m f. measure_space m /\ integrable m f ==>
4958 null_set m {x | x IN m_space m /\ f x = NegInf}
4959Proof
4960 RW_TAC std_ss []
4961 >> Q.ABBREV_TAC `s = {x | x IN m_space m /\ f x = NegInf}`
4962 >> Suff `s IN measurable_sets m`
4963 >- (RW_TAC std_ss [null_set_def] \\
4964 MATCH_MP_TAC integrable_infty' \\
4965 Q.EXISTS_TAC `f` >> RW_TAC std_ss [] \\
4966 Q.UNABBREV_TAC `s` \\
4967 FULL_SIMP_TAC std_ss [GSPECIFICATION])
4968 >> `f IN measurable (m_space m, measurable_sets m) Borel`
4969 by FULL_SIMP_TAC std_ss [integrable_def]
4970 >> MP_TAC (Q.SPECL [`f`,`(m_space m, measurable_sets m)`] IN_MEASURABLE_BOREL_ALT8)
4971 >> rw [MEASURE_SPACE_SIGMA_ALGEBRA]
4972 >> POP_ASSUM (MP_TAC o (Q.SPEC `NegInf`))
4973 >> Suff `s = {x | f x = NegInf} INTER m_space m` >- METIS_TAC []
4974 >> Q.UNABBREV_TAC `s`
4975 >> RW_TAC std_ss [EXTENSION, IN_INTER, GSPECIFICATION]
4976 >> METIS_TAC []
4977QED
4978
4979Theorem pos_fn_integral_infty_null :
4980 !m f. measure_space m /\ (!x. x IN m_space m ==> 0 <= f x) /\
4981 f IN measurable (m_space m,measurable_sets m) Borel /\
4982 pos_fn_integral m f <> PosInf ==>
4983 null_set m {x | x IN m_space m /\ (f x = PosInf)}
4984Proof
4985 rpt STRIP_TAC
4986 >> MATCH_MP_TAC integrable_infty_null
4987 >> simp [integrable_def]
4988 >> CONJ_TAC
4989 >- (Suff ‘pos_fn_integral m (fn_plus f) = pos_fn_integral m f’ >- rw [] \\
4990 MATCH_MP_TAC pos_fn_integral_cong >> rw [])
4991 >> Suff ‘pos_fn_integral m (fn_minus f) = pos_fn_integral m (\x. 0)’
4992 >- rw [pos_fn_integral_zero]
4993 >> MATCH_MP_TAC pos_fn_integral_cong >> rw []
4994QED
4995
4996(* The need of complete measure space comes from IN_MEASURABLE_BOREL_AE_EQ
4997
4998 NOTE: In general (unless the measure space is complete), a function g may not
4999 be integrable, when it is almost everywhere equal to an integrable function f.
5000 *)
5001Theorem integrable_eq_AE :
5002 !m f g. complete_measure_space m /\
5003 integrable m f /\ (AE x::m. f x = g x) ==> integrable m g
5004Proof
5005 rw [integrable_def]
5006 >| [ (* goal 1 (of 3) *)
5007 MATCH_MP_TAC IN_MEASURABLE_BOREL_AE_EQ \\
5008 Q.EXISTS_TAC ‘f’ >> art [],
5009 (* goal 2 (of 3) *)
5010 Suff ‘pos_fn_integral m (fn_plus f) = pos_fn_integral m (fn_plus g)’
5011 >- (DISCH_THEN (fs o wrap)) \\
5012 MATCH_MP_TAC pos_fn_integral_cong_AE \\
5013 fs [complete_measure_space_def, FN_PLUS_POS] \\
5014 fs [AE_DEF] \\
5015 Q.EXISTS_TAC ‘N’ >> rw [] \\
5016 ‘f x = g x’ by PROVE_TAC [] \\
5017 RW_TAC std_ss [fn_plus_def],
5018 (* goal 3 (of 3) *)
5019 Suff ‘pos_fn_integral m (fn_minus f) = pos_fn_integral m (fn_minus g)’
5020 >- (DISCH_THEN (fs o wrap)) \\
5021 MATCH_MP_TAC pos_fn_integral_cong_AE \\
5022 fs [complete_measure_space_def, FN_MINUS_POS] \\
5023 fs [AE_DEF] \\
5024 Q.EXISTS_TAC ‘N’ >> rw [] \\
5025 ‘f x = g x’ by PROVE_TAC [] \\
5026 RW_TAC std_ss [fn_minus_def] ]
5027QED
5028
5029(* Corollary 11.6 [1, p.91] *)
5030Theorem integrable_AE_normal:
5031 !m f. measure_space m /\ integrable m f ==> AE x::m. f x < PosInf
5032Proof
5033 RW_TAC std_ss [AE_ALT]
5034 >> Q.EXISTS_TAC `{x | x IN m_space m /\ (f x = PosInf)}`
5035 >> CONJ_TAC >- (MATCH_MP_TAC integrable_infty_null >> art [])
5036 >> REWRITE_TAC [GSYM lt_infty, SUBSET_REFL]
5037QED
5038
5039(* Full version of the above theorem *)
5040Theorem integrable_AE_normal_full :
5041 !m f. measure_space m /\ integrable m f ==>
5042 AE x::m. f x <> PosInf /\ f x <> NegInf
5043Proof
5044 RW_TAC std_ss [AE_ALT]
5045 >> Q.EXISTS_TAC ‘{x | x IN m_space m /\ f x = PosInf} UNION
5046 {x | x IN m_space m /\ f x = NegInf}’
5047 >> reverse CONJ_TAC >- rw [SUBSET_DEF]
5048 >> MATCH_MP_TAC NULL_SET_UNION' >> art []
5049 >> CONJ_TAC
5050 >| [ MATCH_MP_TAC integrable_infty_null >> art [],
5051 MATCH_MP_TAC integrable_infty_null' >> art [] ]
5052QED
5053
5054Theorem integrable_normal_integral:
5055 !m f. measure_space m /\ integrable m f ==> ?r. (integral m f = Normal r)
5056Proof
5057 RW_TAC std_ss [integrable_def, integral_def]
5058 >> `0 <= pos_fn_integral m (fn_plus f)`
5059 by PROVE_TAC [pos_fn_integral_pos, FN_PLUS_POS]
5060 >> `0 <= pos_fn_integral m (fn_minus f)`
5061 by PROVE_TAC [pos_fn_integral_pos, FN_MINUS_POS]
5062 >> Q.ABBREV_TAC `a = pos_fn_integral m (fn_plus f)`
5063 >> Q.ABBREV_TAC `b = pos_fn_integral m (fn_minus f)`
5064 >> `a <> NegInf /\ b <> NegInf` by PROVE_TAC [pos_not_neginf]
5065 >> Know `a - b <> PosInf /\ a - b <> NegInf`
5066 >- (Cases_on `a` >> Cases_on `b` >> fs [extreal_sub_def])
5067 >> STRIP_TAC
5068 >> METIS_TAC [extreal_cases]
5069QED
5070
5071(* Updated with ‘!x. x IN m_space m ==> (abs (g x) <= f x)’ *)
5072Theorem integrable_bounded :
5073 !m f g. measure_space m /\ integrable m f /\
5074 g IN measurable (m_space m,measurable_sets m) Borel /\
5075 (!x. x IN m_space m ==> (abs (g x) <= f x))
5076 ==> integrable m g
5077Proof
5078 RW_TAC std_ss [integrable_def, abs_bounds, GSYM fn_plus_def, GSYM fn_minus_def]
5079 >- (`!x. x IN m_space m ==> fn_plus g x <= fn_plus f x`
5080 by (RW_TAC real_ss [fn_plus_def, lt_imp_le, le_refl] \\
5081 METIS_TAC [extreal_lt_def, lte_trans]) \\
5082 METIS_TAC [pos_fn_integral_mono, FN_PLUS_POS, lt_infty, let_trans])
5083 >> `!x. x IN m_space m ==> fn_minus g x <= fn_plus f x`
5084 by (RW_TAC real_ss [fn_minus_def, fn_plus_def, lt_imp_le, le_refl] \\
5085 METIS_TAC [let_trans, lt_neg, le_neg, neg_neg, neg_0])
5086 >> METIS_TAC [pos_fn_integral_mono, FN_PLUS_POS, FN_MINUS_POS, lt_infty, let_trans]
5087QED
5088
5089Theorem integrable_fn_plus :
5090 !m f. measure_space m /\ integrable m f ==> integrable m (fn_plus f)
5091Proof
5092 rpt STRIP_TAC >> POP_ASSUM MP_TAC
5093 >> ‘sigma_algebra (measurable_space m)’
5094 by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA]
5095 >> RW_TAC std_ss [integrable_def, GSYM fn_plus_def, FN_PLUS_POS, FN_PLUS_POS_ID,
5096 IN_MEASURABLE_BOREL_FN_PLUS, GSYM fn_minus_def, FN_MINUS_POS_ZERO,
5097 pos_fn_integral_zero, num_not_infty]
5098QED
5099
5100Theorem integrable_fn_minus :
5101 !m f. measure_space m /\ integrable m f ==> integrable m (fn_minus f)
5102Proof
5103 rpt STRIP_TAC >> POP_ASSUM MP_TAC
5104 >> ‘sigma_algebra (measurable_space m)’
5105 by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA]
5106 >> RW_TAC std_ss [integrable_def, GSYM fn_minus_def, FN_MINUS_POS, FN_PLUS_POS_ID,
5107 IN_MEASURABLE_BOREL_FN_MINUS, GSYM fn_plus_def, FN_MINUS_POS_ZERO,
5108 pos_fn_integral_zero, num_not_infty]
5109QED
5110
5111(* added `measure m (m_space m) < PosInf` into antecedents, otherwise not true *)
5112Theorem integrable_const:
5113 !m c. measure_space m /\ measure m (m_space m) < PosInf ==> integrable m (\x. Normal c)
5114Proof
5115 RW_TAC std_ss []
5116 >> `(\x. Normal c) IN measurable (m_space m,measurable_sets m) Borel`
5117 by (MATCH_MP_TAC IN_MEASURABLE_BOREL_CONST >> METIS_TAC [measure_space_def])
5118 >> RW_TAC real_ss [integrable_def, lt_antisym, pos_fn_integral_zero, fn_plus_def,
5119 fn_minus_def, num_not_infty, extreal_ainv_def]
5120 >| [ (* goal 1 (of 4) *)
5121 METIS_TAC [lt_antisym],
5122 (* goal 2 (of 4) *)
5123 METIS_TAC [lt_antisym],
5124 (* goal 3 (of 4) *)
5125 (MP_TAC o Q.SPECL [`m`,`\x. Normal c`]) pos_fn_integral_mspace \\
5126 RW_TAC std_ss [lt_imp_le] \\
5127 `0 <= c` by METIS_TAC [REAL_LT_IMP_LE, extreal_of_num_def, extreal_lt_eq] \\
5128 Know `pos_fn_integral m (\x. Normal c * indicator_fn (m_space m) x) =
5129 Normal c * measure m (m_space m)`
5130 >- (MATCH_MP_TAC pos_fn_integral_cmul_indicator \\
5131 METIS_TAC [MEASURE_SPACE_MSPACE_MEASURABLE]) >> Rewr' \\
5132 (* Normal c * measure m (m_space m) <> PosInf *)
5133 PROVE_TAC [mul_not_infty, lt_infty],
5134 (* goal 4 (of 4), similar with previous goal *)
5135 (MP_TAC o Q.SPECL [`m`,`\x. Normal (-c)`]) pos_fn_integral_mspace \\
5136 `0 < Normal (-c)` by METIS_TAC [lt_neg,neg_0, extreal_ainv_def] \\
5137 RW_TAC std_ss [lt_imp_le] \\
5138 `0 <= -c` by METIS_TAC [REAL_LT_IMP_LE, extreal_of_num_def, extreal_lt_eq] \\
5139 Know `pos_fn_integral m (\x. Normal (-c) * indicator_fn (m_space m) x) =
5140 Normal (-c) * measure m (m_space m)`
5141 >- (MATCH_MP_TAC pos_fn_integral_cmul_indicator \\
5142 METIS_TAC [MEASURE_SPACE_MSPACE_MEASURABLE]) >> Rewr' \\
5143 (* Normal (-c) * measure m (m_space m) <> PosInf *)
5144 PROVE_TAC [mul_not_infty, lt_infty] ]
5145QED
5146
5147Theorem integrable_zero: !m c. measure_space m ==> integrable m (\x. 0)
5148Proof
5149 RW_TAC std_ss []
5150 >> `(\x. 0) IN measurable (m_space m,measurable_sets m) Borel`
5151 by (MATCH_MP_TAC IN_MEASURABLE_BOREL_CONST \\
5152 METIS_TAC [measure_space_def])
5153 >> RW_TAC real_ss [integrable_def, fn_plus_def, fn_minus_def, lt_refl, neg_0,
5154 pos_fn_integral_zero, num_not_infty]
5155QED
5156
5157(* Theorem 10.3 (i) <-> (ii) [1, p.84] *)
5158Theorem integrable_plus_minus :
5159 !m f. measure_space m ==>
5160 (integrable m f <=> f IN measurable (m_space m, measurable_sets m) Borel /\
5161 integrable m (fn_plus f) /\ integrable m (fn_minus f))
5162Proof
5163 rpt STRIP_TAC
5164 >> ‘sigma_algebra (measurable_space m)’
5165 by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA]
5166 >> RW_TAC std_ss [integrable_def, GSYM fn_plus_def, GSYM fn_minus_def]
5167 >> `fn_plus (fn_minus f) = fn_minus f` by METIS_TAC [FN_MINUS_POS, FN_PLUS_POS_ID]
5168 >> `fn_minus (fn_minus f) = (\x. 0)` by METIS_TAC [FN_MINUS_POS, FN_MINUS_POS_ZERO]
5169 >> `fn_plus (fn_plus f) = fn_plus f` by METIS_TAC [FN_PLUS_POS, FN_PLUS_POS_ID]
5170 >> `fn_minus (fn_plus f) = (\x. 0)` by METIS_TAC [FN_PLUS_POS, FN_MINUS_POS_ZERO]
5171 >> `(\x. fn_minus f x) = fn_minus f` by METIS_TAC []
5172 >> `(\x. fn_plus f x) = fn_plus f` by METIS_TAC []
5173 >> EQ_TAC
5174 >> RW_TAC std_ss [IN_MEASURABLE_BOREL_FN_PLUS, IN_MEASURABLE_BOREL_FN_MINUS,
5175 pos_fn_integral_zero, num_not_infty]
5176QED
5177
5178Theorem integrable_add_pos :
5179 !m f g. measure_space m /\ integrable m f /\ integrable m g /\
5180 (!x. x IN m_space m ==> 0 <= f x) /\
5181 (!x. x IN m_space m ==> 0 <= g x) ==> integrable m (\x. f x + g x)
5182Proof
5183 rpt STRIP_TAC
5184 >> ‘sigma_algebra (measurable_space m)’
5185 by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA]
5186 >> RW_TAC std_ss []
5187 >> `!x. x IN m_space m ==> 0 <= (\x. f x + g x) x` by RW_TAC real_ss [le_add]
5188 >> `f IN measurable (m_space m,measurable_sets m) Borel` by METIS_TAC [integrable_def]
5189 >> `g IN measurable (m_space m,measurable_sets m) Borel` by METIS_TAC [integrable_def]
5190 >> Know `(\x. f x + g x) IN measurable (m_space m,measurable_sets m) Borel`
5191 >- (MATCH_MP_TAC IN_MEASURABLE_BOREL_ADD \\
5192 qexistsl_tac [`f`, `g`] >> fs [measure_space_def] \\
5193 GEN_TAC >> DISCH_TAC >> DISJ1_TAC \\
5194 CONJ_TAC >> (MATCH_MP_TAC pos_not_neginf >> simp []))
5195 >> DISCH_TAC
5196 >> Suff `pos_fn_integral m (\x. f x + g x) <> PosInf`
5197 >- FULL_SIMP_TAC std_ss [integrable_pos]
5198 >> RW_TAC std_ss [pos_fn_integral_add]
5199 >> METIS_TAC [lt_add2, integrable_pos, lt_infty]
5200QED
5201
5202(* alternative definition of ‘integrable m (abs o f)’ w/o fn_plus, fn_minus *)
5203Theorem integrable_abs_alt :
5204 !m f. measure_space m /\ f IN Borel_measurable (measurable_space m) ==>
5205 (integrable m (abs o f) <=> pos_fn_integral m (abs o f) <> PosInf)
5206Proof
5207 rw [integrable_def, fn_plus_abs, fn_minus_abs, pos_fn_integral_zero]
5208 >> EQ_TAC >> rw []
5209 >> MATCH_MP_TAC IN_MEASURABLE_BOREL_ABS'
5210 >> rw [SIGMA_ALGEBRA_BOREL]
5211QED
5212
5213(* Theorem 10.3 (i) => (iii) [1, p.84], cf. integrable_from_abs *)
5214Theorem integrable_abs :
5215 !m f. measure_space m /\ integrable m f ==> integrable m (abs o f)
5216Proof
5217 RW_TAC std_ss [FN_ABS']
5218 >> MATCH_MP_TAC integrable_add_pos
5219 >> ASM_REWRITE_TAC [FN_PLUS_POS, FN_MINUS_POS]
5220 >> CONJ_TAC >- (MATCH_MP_TAC integrable_fn_plus >> art [])
5221 >> MATCH_MP_TAC integrable_fn_minus >> art []
5222QED
5223
5224(* Theorem 10.3 (ii) => (iii) [1, p.84] *)
5225Theorem integrable_abs_bound_exists :
5226 !m u. measure_space m /\ integrable m (abs o u) ==>
5227 ?w. integrable m w /\ (!x. x IN m_space m ==> 0 <= w x) /\
5228 !x. x IN m_space m ==> abs (u x) <= w x
5229Proof
5230 rpt STRIP_TAC
5231 >> Q.EXISTS_TAC `abs o u`
5232 >> RW_TAC std_ss [o_DEF, le_refl, abs_pos]
5233QED
5234
5235(* Theorem 10.3 (i) => (iv) [1, p.84] *)
5236Theorem integrable_bound_exists :
5237 !m u. measure_space m /\ integrable m u ==>
5238 ?w. integrable m w /\ (!x. x IN m_space m ==> 0 <= w x) /\
5239 !x. x IN m_space m ==> abs (u x) <= w x
5240Proof
5241 rpt STRIP_TAC
5242 >> MATCH_MP_TAC integrable_abs_bound_exists >> art []
5243 >> MATCH_MP_TAC integrable_abs >> art []
5244QED
5245
5246(* Theorem 10.3 (iv) => (i) [1, p.84] *)
5247Theorem integrable_from_bound_exists :
5248 !m u. measure_space m /\
5249 u IN measurable (m_space m,measurable_sets m) Borel /\
5250 (?w. integrable m w /\
5251 (!x. x IN m_space m ==> 0 <= w x) /\
5252 (!x. x IN m_space m ==> abs (u x) <= w x)) ==> integrable m u
5253Proof
5254 RW_TAC std_ss [integrable_def, lt_infty] (* 2 subgoals *)
5255 >| [ (* goal 1 (of 2) *)
5256 MATCH_MP_TAC let_trans \\
5257 Q.EXISTS_TAC `pos_fn_integral m w` \\
5258 Suff ‘pos_fn_integral m w = pos_fn_integral m (fn_plus w)’
5259 >- (Rewr' >> art [] \\
5260 MATCH_MP_TAC pos_fn_integral_mono >> rw [FN_PLUS_POS] \\
5261 MATCH_MP_TAC le_trans \\
5262 Q.EXISTS_TAC `abs (u x)` >> simp [] \\
5263 REWRITE_TAC [FN_PLUS_LE_ABS]) \\
5264 MATCH_MP_TAC pos_fn_integral_cong >> rw [],
5265 (* goal 2 (of 2) *)
5266 MATCH_MP_TAC let_trans \\
5267 Q.EXISTS_TAC `pos_fn_integral m w` \\
5268 Suff ‘pos_fn_integral m w = pos_fn_integral m (fn_plus w)’
5269 >- (Rewr' >> art [] \\
5270 MATCH_MP_TAC pos_fn_integral_mono >> rw [FN_MINUS_POS] \\
5271 MATCH_MP_TAC le_trans \\
5272 Q.EXISTS_TAC `abs (u x)` >> simp [] \\
5273 REWRITE_TAC [FN_MINUS_LE_ABS]) \\
5274 MATCH_MP_TAC pos_fn_integral_cong >> rw [] ]
5275QED
5276
5277(* Theorem 10.3 (iii) => (i) [1, p.84] *)
5278Theorem integrable_from_abs :
5279 !m u. measure_space m /\ u IN measurable (m_space m,measurable_sets m) Borel /\
5280 integrable m (abs o u) ==> integrable m u
5281Proof
5282 RW_TAC std_ss []
5283 >> MATCH_MP_TAC integrable_from_bound_exists >> art []
5284 >> MATCH_MP_TAC integrable_abs_bound_exists >> art []
5285QED
5286
5287Theorem integrable_abs_eq :
5288 !m f. measure_space m /\ f IN Borel_measurable (measurable_space m) ==>
5289 (integrable m (abs o f) <=> integrable m f)
5290Proof
5291 PROVE_TAC [integrable_abs, integrable_from_abs]
5292QED
5293
5294Theorem integral_abs_imp_integrable :
5295 !m f. measure_space m /\ f IN measurable (m_space m,measurable_sets m) Borel /\
5296 (integral m (abs o f) = 0) ==> integrable m f
5297Proof
5298 rpt STRIP_TAC
5299 >> MATCH_MP_TAC integrable_from_abs >> art []
5300 >> `sigma_algebra (m_space m,measurable_sets m)` by METIS_TAC [measure_space_def]
5301 >> `abs o f IN measurable (m_space m,measurable_sets m) Borel`
5302 by METIS_TAC [IN_MEASURABLE_BOREL_ABS']
5303 >> Q.ABBREV_TAC `g = abs o f`
5304 >> Know `nonneg g`
5305 >- (Q.UNABBREV_TAC `g` >> RW_TAC std_ss [nonneg_def, abs_pos]) >> DISCH_TAC
5306 >> RW_TAC std_ss [integrable_def]
5307 >| [ (* goal 1 (of 2) *)
5308 Know `integral m g = pos_fn_integral m g`
5309 >- (MATCH_MP_TAC integral_pos_fn >> fs [nonneg_def]) \\
5310 DISCH_THEN ((FULL_SIMP_TAC bool_ss) o wrap) \\
5311 Know `fn_plus g = g`
5312 >- (MATCH_MP_TAC nonneg_fn_plus >> art []) \\
5313 RW_TAC std_ss [extreal_of_num_def, extreal_not_infty],
5314 (* goal 2 (of 2) *)
5315 Know `fn_minus g = (\x. 0)`
5316 >- (MATCH_MP_TAC nonneg_fn_minus >> art []) >> Rewr' \\
5317 ASM_SIMP_TAC std_ss [pos_fn_integral_zero] \\
5318 RW_TAC std_ss [extreal_of_num_def, extreal_not_infty] ]
5319QED
5320
5321Theorem integrable_add_lemma:
5322 !m f g. measure_space m /\ integrable m f /\ integrable m g
5323 ==> (integrable m (\x. fn_plus f x + fn_plus g x) /\
5324 integrable m (\x. fn_minus f x + fn_minus g x))
5325Proof
5326 RW_TAC std_ss []
5327 >> METIS_TAC [integrable_add_pos, integrable_plus_minus, FN_PLUS_POS, FN_MINUS_POS]
5328QED
5329
5330Theorem integrable_add :
5331 !m f g. measure_space m /\ integrable m f /\ integrable m g /\
5332 (!x. x IN m_space m ==> (f x <> NegInf /\ g x <> NegInf) \/
5333 (f x <> PosInf /\ g x <> PosInf))
5334 ==> integrable m (\x. f x + g x)
5335Proof
5336 RW_TAC std_ss []
5337 >> ‘sigma_algebra (measurable_space m)’
5338 by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA]
5339 >> Know `(\x. f x + g x) IN measurable (m_space m, measurable_sets m) Borel`
5340 >- (MATCH_MP_TAC IN_MEASURABLE_BOREL_ADD \\
5341 qexistsl_tac [`f`, `g`] >> simp [] \\
5342 METIS_TAC [measure_space_def, integrable_def])
5343 >> DISCH_TAC
5344 >> RW_TAC std_ss [Once integrable_plus_minus]
5345 >- (MATCH_MP_TAC integrable_bounded \\
5346 Q.EXISTS_TAC `(\x. fn_plus f x + fn_plus g x)` \\
5347 RW_TAC std_ss [IN_MEASURABLE_BOREL_FN_PLUS, integrable_add_lemma] \\
5348 METIS_TAC [abs_refl, FN_PLUS_POS, FN_PLUS_ADD_LE])
5349 >> MATCH_MP_TAC integrable_bounded
5350 >> Q.EXISTS_TAC `(\x. fn_minus f x + fn_minus g x)`
5351 >> RW_TAC std_ss [IN_MEASURABLE_BOREL_FN_MINUS, integrable_add_lemma]
5352 >> `abs (fn_minus (\x. f x + g x) x) = fn_minus (\x. f x + g x) x`
5353 by METIS_TAC [abs_refl, FN_MINUS_POS] >> POP_ORW
5354 >> MATCH_MP_TAC FN_MINUS_ADD_LE
5355 >> METIS_TAC []
5356QED
5357
5358Theorem integrable_cmul :
5359 !m f c. measure_space m /\ integrable m f ==> integrable m (\x. Normal c * f x)
5360Proof
5361 rpt STRIP_TAC
5362 >> ‘sigma_algebra (measurable_space m)’
5363 by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA]
5364 >> Cases_on `c = 0`
5365 >- RW_TAC std_ss [integrable_zero, mul_lzero, GSYM extreal_of_num_def]
5366 >> `(\x. Normal c * f x) IN measurable (m_space m,measurable_sets m) Borel`
5367 by (MATCH_MP_TAC IN_MEASURABLE_BOREL_CMUL
5368 >> METIS_TAC [measure_space_def,integrable_def])
5369 >> RW_TAC std_ss [integrable_def, GSYM fn_plus_def, GSYM fn_minus_def]
5370 >- (Cases_on `0 <= c`
5371 >- (`fn_plus (\x. Normal c * f x) = (\x. Normal c * fn_plus f x)`
5372 by METIS_TAC [FN_PLUS_CMUL] \\
5373 POP_ORW \\
5374 FULL_SIMP_TAC std_ss [pos_fn_integral_cmul, integrable_def, FN_PLUS_POS,
5375 GSYM fn_plus_def] \\
5376 METIS_TAC [mul_not_infty]) \\
5377 `c < 0` by METIS_TAC [real_lt] \\
5378 `fn_plus (\x. Normal c * f x) = (\x. -Normal c * fn_minus f x)`
5379 by METIS_TAC [FN_PLUS_CMUL, REAL_LT_IMP_LE] \\
5380 POP_ORW \\
5381 RW_TAC std_ss [extreal_ainv_def] \\
5382 `0 <= -c` by METIS_TAC [REAL_LT_NEG, REAL_NEG_0, REAL_LT_IMP_LE] \\
5383 FULL_SIMP_TAC std_ss [pos_fn_integral_cmul, integrable_def, FN_MINUS_POS,
5384 GSYM fn_minus_def] \\
5385 METIS_TAC [mul_not_infty])
5386 >> Cases_on `0 <= c`
5387 >- (`fn_minus (\x. Normal c * f x) = (\x. Normal c * fn_minus f x)`
5388 by METIS_TAC [FN_MINUS_CMUL] \\
5389 POP_ORW \\
5390 FULL_SIMP_TAC std_ss [pos_fn_integral_cmul, integrable_def, FN_MINUS_POS,
5391 GSYM fn_minus_def] \\
5392 METIS_TAC [mul_not_infty])
5393 >> `c < 0` by METIS_TAC [real_lt]
5394 >> `fn_minus (\x. Normal c * f x) = (\x. -Normal c * fn_plus f x)`
5395 by METIS_TAC [FN_MINUS_CMUL, REAL_LT_IMP_LE]
5396 >> POP_ORW
5397 >> RW_TAC std_ss [extreal_ainv_def]
5398 >> `0 <= -c` by METIS_TAC [REAL_LT_IMP_LE, REAL_LE_NEG, REAL_NEG_0]
5399 >> RW_TAC std_ss [pos_fn_integral_cmul, FN_PLUS_POS]
5400 >> METIS_TAC [mul_not_infty, integrable_def]
5401QED
5402
5403Theorem integrable_cdiv :
5404 !m f c. measure_space m /\ integrable m f /\ c <> 0 ==>
5405 integrable m (\x. f x / Normal c)
5406Proof
5407 rw [extreal_div_def, extreal_inv_def, Once mul_comm]
5408 >> MATCH_MP_TAC integrable_cmul >> art []
5409QED
5410
5411Theorem integrable_ainv :
5412 !m f. measure_space m /\ integrable m f ==> integrable m (\x. -f x)
5413Proof
5414 rpt STRIP_TAC
5415 >> REWRITE_TAC [Once neg_minus1, extreal_of_num_def, extreal_ainv_def]
5416 >> MATCH_MP_TAC integrable_cmul >> art []
5417QED
5418
5419Theorem integrable_sub :
5420 !m f g. measure_space m /\ integrable m f /\ integrable m g /\
5421 (!x. x IN m_space m ==> f x <> NegInf /\ g x <> PosInf)
5422 ==> integrable m (\x. f x - g x)
5423Proof
5424 rw [extreal_sub]
5425 >> ‘integrable m (\x. -g x)’ by METIS_TAC [integrable_ainv]
5426 >> HO_MATCH_MP_TAC integrable_add >> rw []
5427 >> Cases_on ‘g x’ >> METIS_TAC [extreal_ainv_def, extreal_distinct]
5428QED
5429
5430Theorem integrable_indicator:
5431 !m s. measure_space m /\ s IN measurable_sets m /\ measure m s < PosInf ==>
5432 integrable m (indicator_fn s)
5433Proof
5434 RW_TAC std_ss []
5435 >> `!x. 0 <= indicator_fn s x` by PROVE_TAC [INDICATOR_FN_POS]
5436 >> RW_TAC std_ss [integrable_pos, pos_fn_integral_indicator, lt_infty]
5437 >> MATCH_MP_TAC IN_MEASURABLE_BOREL_INDICATOR
5438 >> METIS_TAC [measure_space_def, subsets_def, space_def]
5439QED
5440
5441Theorem integrable_indicator_pow:
5442 !m s n. measure_space m /\ s IN measurable_sets m /\ measure m s < PosInf /\
5443 0 < n ==> integrable m (\x. (indicator_fn s x) pow n)
5444Proof
5445 rpt STRIP_TAC
5446 >> MATCH_MP_TAC integrable_eq
5447 >> Q.EXISTS_TAC `indicator_fn s`
5448 >> RW_TAC std_ss [integrable_indicator, indicator_fn_def, one_pow, zero_pow]
5449QED
5450
5451Theorem integrable_mul_indicator :
5452 !m s f. measure_space m /\ s IN measurable_sets m /\
5453 integrable m f ==> integrable m (\x. f x * indicator_fn s x)
5454Proof
5455 rpt STRIP_TAC
5456 >> MATCH_MP_TAC integrable_bounded
5457 >> Q.EXISTS_TAC `abs o f`
5458 >> ASM_SIMP_TAC std_ss [o_DEF]
5459 >> CONJ_TAC >- (MATCH_MP_TAC (REWRITE_RULE [o_DEF] integrable_abs) >> art [])
5460 >> reverse CONJ_TAC
5461 >- (RW_TAC std_ss [] \\
5462 Cases_on `x IN s` >- ASM_SIMP_TAC std_ss [indicator_fn_def, mul_rone, le_refl] \\
5463 ASM_SIMP_TAC std_ss [indicator_fn_def, mul_rzero, abs_0, abs_pos])
5464 >> MATCH_MP_TAC IN_MEASURABLE_BOREL_MUL_INDICATOR
5465 >> fs [measure_space_def, integrable_def]
5466QED
5467
5468(* IMPORTANT: all posinf-valued points (which forms a null set) in an integrable
5469 function can be safely removed without changing its overall integral.
5470 *)
5471Theorem integrable_not_infty_lemma[local] :
5472 !m f. measure_space m /\ integrable m f /\
5473 (!x. x IN m_space m ==> 0 <= f x) ==>
5474 ?g. integrable m g /\
5475 (!x. x IN m_space m ==> 0 <= g x) /\
5476 (!x. x IN m_space m ==> g x <> PosInf) /\
5477 (integral m f = integral m g)
5478Proof
5479 RW_TAC std_ss [integral_pos_fn, integrable_def]
5480 >> ‘sigma_algebra (measurable_space m)’ by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA]
5481 >> Q.ABBREV_TAC `g = (\x. if f x = PosInf then 0 else f x)`
5482 >> Q.EXISTS_TAC `g`
5483 >> `!x. x IN m_space m ==> 0 <= g x` by METIS_TAC [le_refl]
5484 >> `!x. x IN m_space m ==> g x <= f x` by METIS_TAC [le_refl,le_infty]
5485 >> `!x. x IN m_space m ==> g x <> PosInf` by METIS_TAC [num_not_infty]
5486 >> Know `g IN measurable (m_space m,measurable_sets m) Borel`
5487 >- (rw [IN_MEASURABLE_BOREL, space_def, subsets_def, IN_FUNSET, IN_UNIV] \\
5488 Cases_on `Normal c <= 0`
5489 >- (`{x | g x < Normal c} INTER m_space m = {}`
5490 by (rw [Once EXTENSION, GSPECIFICATION, NOT_IN_EMPTY] \\
5491 METIS_TAC [le_trans, extreal_lt_def]) \\
5492 METIS_TAC [MEASURE_SPACE_EMPTY_MEASURABLE]) \\
5493 `{x | g x < Normal c} = {x | f x < Normal c} UNION {x | f x = PosInf}`
5494 by (RW_TAC std_ss [EXTENSION, GSPECIFICATION, IN_UNION]
5495 >> Q.UNABBREV_TAC `g`
5496 >> RW_TAC std_ss []
5497 >> METIS_TAC [extreal_lt_def]) \\
5498 RW_TAC std_ss [Once INTER_COMM, UNION_OVER_INTER] \\
5499 MATCH_MP_TAC MEASURE_SPACE_UNION \\
5500 RW_TAC std_ss [] \\ (* 2 subgoals *)
5501 METIS_TAC [(REWRITE_RULE [space_def, subsets_def] o
5502 Q.SPECL [`f`,`(m_space m, measurable_sets m)`])
5503 IN_MEASURABLE_BOREL_ALL, integrable_def, INTER_COMM])
5504 >> DISCH_TAC
5505 >> CONJ_TAC
5506 >- (RW_TAC std_ss []
5507 >- (FULL_SIMP_TAC std_ss [lt_infty] \\
5508 MATCH_MP_TAC let_trans \\
5509 Q.EXISTS_TAC ‘pos_fn_integral m (fn_plus f)’ >> art [] \\
5510 MATCH_MP_TAC pos_fn_integral_mono >> rw [FN_PLUS_POS]) \\
5511 Know ‘pos_fn_integral m (fn_minus g) = pos_fn_integral m (\x. 0)’
5512 >- (MATCH_MP_TAC pos_fn_integral_cong >> rw [FN_MINUS_POS]) >> Rewr' \\
5513 RW_TAC std_ss [pos_fn_integral_zero, num_not_infty])
5514 >> RW_TAC std_ss []
5515 >> Q.ABBREV_TAC `h = (\x. f x - g x)`
5516 >> Know `!x. x IN m_space m ==> f x <> NegInf`
5517 >- (GEN_TAC >> DISCH_TAC >> MATCH_MP_TAC pos_not_neginf \\
5518 FIRST_X_ASSUM MATCH_MP_TAC >> art []) >> DISCH_TAC
5519 >> Know `h IN measurable (m_space m,measurable_sets m) Borel`
5520 >- (MATCH_MP_TAC IN_MEASURABLE_BOREL_SUB \\
5521 qexistsl_tac [‘f’, ‘g’] >> fs [measure_space_def]) >> DISCH_TAC
5522 >> `!x. x IN m_space m ==> 0 <= h x`
5523 by METIS_TAC [extreal_sub_def,le_infty,le_refl,extreal_of_num_def,sub_refl]
5524 >> Know `pos_fn_integral m f = pos_fn_integral m (\x. g x + h x)`
5525 >- (MATCH_MP_TAC pos_fn_integral_cong >> simp [] \\
5526 CONJ_TAC >- (rpt STRIP_TAC >> MATCH_MP_TAC le_add >> PROVE_TAC []) \\
5527 rw [Abbr ‘h’] \\
5528 Know ‘g x + (f x - g x) = f x - g x + g x’
5529 >- (MATCH_MP_TAC add_comm >> DISJ1_TAC \\
5530 CONJ_TAC >- (MATCH_MP_TAC pos_not_neginf >> simp []) \\
5531 MATCH_MP_TAC pos_not_neginf >> fs []) >> Rewr' \\
5532 MATCH_MP_TAC EQ_SYM \\
5533 MATCH_MP_TAC sub_add \\
5534 CONJ_TAC >- (MATCH_MP_TAC pos_not_neginf >> simp []) \\
5535 FIRST_X_ASSUM MATCH_MP_TAC >> art []) >> Rewr'
5536 >> (MP_TAC o Q.SPECL [`m`,`g`,`h`]) pos_fn_integral_add
5537 >> RW_TAC std_ss []
5538 >> Suff `pos_fn_integral m h = 0`
5539 >- RW_TAC std_ss [add_rzero, integral_pos_fn]
5540 >> POP_ASSUM K_TAC
5541 >> `integrable m f`
5542 by RW_TAC std_ss [integrable_def, GSYM fn_plus_def, GSYM fn_minus_def]
5543 >> `null_set m {x | x IN m_space m /\ (f x = PosInf)}`
5544 by METIS_TAC [integrable_infty_null]
5545 >> MP_TAC (Q.SPECL [`m`,`h`,`{x | x IN m_space m /\ (f x = PosInf)}`]
5546 pos_fn_integral_split)
5547 >> FULL_SIMP_TAC std_ss [null_set_def]
5548 >> RW_TAC std_ss []
5549 >> `(\x. h x * indicator_fn {x | x IN m_space m /\ (f x = PosInf)} x) =
5550 (\x. PosInf * indicator_fn {x | x IN m_space m /\ (f x = PosInf)} x)`
5551 by (rw [FUN_EQ_THM, indicator_fn_def, Abbr ‘h’] \\
5552 RW_TAC std_ss [mul_rzero, mul_rone] \\
5553 METIS_TAC [extreal_sub_def,extreal_cases])
5554 >> RW_TAC std_ss [pos_fn_integral_cmul_infty, mul_rzero, add_lzero]
5555 >> `(\x. h x * indicator_fn (m_space m DIFF {x | x IN m_space m /\ (f x = PosInf)}) x) =
5556 (\x. 0)`
5557 by (rw [FUN_EQ_THM, indicator_fn_def, Abbr ‘h’] \\
5558 RW_TAC std_ss [mul_rzero, mul_rone] \\
5559 METIS_TAC [sub_refl])
5560 >> rw [pos_fn_integral_zero, GSYM extreal_of_num_def]
5561QED
5562
5563(* moved here as integrable_not_infty' needs it *)
5564Theorem integral_mspace:
5565 !m f. measure_space m ==>
5566 (integral m f = integral m (\x. f x * indicator_fn (m_space m) x))
5567Proof
5568 RW_TAC std_ss [integral_def]
5569 >> `(fn_plus (\x. f x * indicator_fn (m_space m) x)) =
5570 (\x. fn_plus f x * indicator_fn (m_space m) x)`
5571 by (RW_TAC std_ss [indicator_fn_def, fn_plus_def, FUN_EQ_THM] \\
5572 METIS_TAC [mul_rone, mul_lone, mul_rzero, mul_lzero])
5573 >> `fn_minus (\x. f x * indicator_fn (m_space m) x) =
5574 (\x. fn_minus f x * indicator_fn (m_space m) x)`
5575 by (RW_TAC std_ss [indicator_fn_def, fn_minus_def, FUN_EQ_THM] \\
5576 METIS_TAC [neg_0, neg_eq0, mul_rone, mul_lone, mul_rzero, mul_lzero])
5577 >> RW_TAC std_ss []
5578 >> METIS_TAC [pos_fn_integral_mspace, FN_PLUS_POS, FN_MINUS_POS]
5579QED
5580
5581Theorem integral_cong : (* was: integral_eq *)
5582 !m f g. measure_space m /\ (!x. x IN m_space m ==> (f x = g x)) ==>
5583 (integral m f = integral m g)
5584Proof
5585 rpt STRIP_TAC
5586 >> `(integral m f = integral m (\x. f x * indicator_fn (m_space m) x)) /\
5587 (integral m g = integral m (\x. g x * indicator_fn (m_space m) x))`
5588 by METIS_TAC [integral_mspace] >> art []
5589 >> Suff `(\x. f x * indicator_fn (m_space m) x) = (\x. g x * indicator_fn (m_space m) x)`
5590 >- RW_TAC std_ss []
5591 >> FUN_EQ_TAC >> RW_TAC std_ss [indicator_fn_def, GSPECIFICATION, mul_rzero]
5592QED
5593
5594Theorem integral_cong_AE :
5595 !m f g. measure_space m /\ (AE x::m. f x = g x) ==> (integral m f = integral m g)
5596Proof
5597 rw [AE_DEF, integral_def]
5598 >> Suff ‘(pos_fn_integral m (fn_plus f) = pos_fn_integral m (fn_plus g)) /\
5599 (pos_fn_integral m (fn_minus f) = pos_fn_integral m (fn_minus g))’
5600 >- Rewr
5601 >> CONJ_TAC
5602 >| [ (* goal 1 (of 2) *)
5603 MATCH_MP_TAC pos_fn_integral_cong_AE \\
5604 rw [FN_PLUS_POS, AE_DEF] \\
5605 Q.EXISTS_TAC ‘N’ >> rw [FN_PLUS_ALT],
5606 (* goal 2 (of 2) *)
5607 MATCH_MP_TAC pos_fn_integral_cong_AE \\
5608 rw [FN_MINUS_POS, AE_DEF] \\
5609 Q.EXISTS_TAC ‘N’ >> rw [FN_MINUS_ALT] ]
5610QED
5611
5612(* furthermore, ‘x IN m_space m’ can be removed from ‘g’ *)
5613Theorem integrable_not_infty :
5614 !m f. measure_space m /\ integrable m f /\
5615 (!x. x IN m_space m ==> 0 <= f x) ==>
5616 ?g. integrable m g /\ (!x. 0 <= g x) /\ (!x. g x <> PosInf) /\
5617 (integral m f = integral m g)
5618Proof
5619 rpt STRIP_TAC
5620 >> MP_TAC (Q.SPECL [‘m’, ‘f’] integrable_not_infty_lemma)
5621 >> RW_TAC std_ss []
5622 >> Q.EXISTS_TAC ‘\x. if x IN m_space m then g x else 0’
5623 >> CONJ_TAC
5624 >- (MATCH_MP_TAC integrable_eq >> Q.EXISTS_TAC ‘g’ >> simp [])
5625 >> rw []
5626 >> MATCH_MP_TAC integral_cong >> rw []
5627QED
5628
5629Theorem integrable_not_infty_alt :
5630 !m f. measure_space m /\ integrable m f /\
5631 (!x. x IN m_space m ==> 0 <= f x) ==>
5632 integrable m (\x. if f x = PosInf then 0 else f x) /\
5633 (integral m f = integral m (\x. if f x = PosInf then 0 else f x))
5634Proof
5635 rpt GEN_TAC >> STRIP_TAC
5636 >> ‘sigma_algebra (measurable_space m)’
5637 by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA]
5638 >> Q.ABBREV_TAC `g = (\x. if f x = PosInf then 0 else f x)`
5639 >> `!x. x IN m_space m ==> 0 <= g x` by METIS_TAC [le_refl]
5640 >> `!x. x IN m_space m ==> g x <= f x` by METIS_TAC [le_refl, le_infty]
5641 >> `!x. x IN m_space m ==> g x <> PosInf` by METIS_TAC [num_not_infty]
5642 >> `!x. x IN m_space m ==> g x <> NegInf` by METIS_TAC [lt_infty, lte_trans, num_not_infty]
5643 >> `!x. x IN m_space m ==> f x <> NegInf` by METIS_TAC [lt_infty, lte_trans, num_not_infty]
5644 >> Know `g IN measurable (m_space m,measurable_sets m) Borel`
5645 >- (RW_TAC std_ss [IN_MEASURABLE_BOREL, space_def, subsets_def, IN_FUNSET, IN_UNIV] \\
5646 Cases_on `Normal c <= 0`
5647 >- (`{x | g x < Normal c} INTER m_space m = {}`
5648 by (RW_TAC std_ss [EXTENSION, GSPECIFICATION, NOT_IN_EMPTY, IN_INTER] \\
5649 METIS_TAC [le_trans, extreal_lt_def]) >> POP_ORW \\
5650 METIS_TAC [MEASURE_SPACE_EMPTY_MEASURABLE]) \\
5651 `{x | g x < Normal c} = {x | f x < Normal c} UNION {x | f x = PosInf}`
5652 by (RW_TAC std_ss [EXTENSION, GSPECIFICATION, IN_UNION] \\
5653 Q.UNABBREV_TAC `g` >> RW_TAC std_ss [] \\
5654 METIS_TAC [extreal_lt_def]) \\
5655 RW_TAC std_ss [Once INTER_COMM, UNION_OVER_INTER] \\
5656 MATCH_MP_TAC MEASURE_SPACE_UNION \\
5657 RW_TAC std_ss [] \\
5658 METIS_TAC [(REWRITE_RULE [space_def, subsets_def] o
5659 Q.SPECL [`f`,`(m_space m, measurable_sets m)`])
5660 IN_MEASURABLE_BOREL_ALL, integrable_def, INTER_COMM])
5661 >> DISCH_TAC
5662 >> Know `integrable m g`
5663 >- (RW_TAC std_ss [integrable_def, GSYM fn_plus_def, GSYM fn_minus_def]
5664 >- (fs [lt_infty, integrable_def, GSYM fn_plus_def] \\
5665 MATCH_MP_TAC let_trans \\
5666 Q.EXISTS_TAC ‘pos_fn_integral m (fn_plus f)’ >> art [] \\
5667 MATCH_MP_TAC pos_fn_integral_mono >> rw [FN_PLUS_POS]) \\
5668 Know ‘pos_fn_integral m (fn_minus g) = pos_fn_integral m (\x. 0)’
5669 >- (MATCH_MP_TAC pos_fn_integral_cong >> simp [FN_MINUS_POS]) >> Rewr' \\
5670 RW_TAC std_ss [pos_fn_integral_zero, num_not_infty])
5671 >> RW_TAC std_ss []
5672 >> Q.ABBREV_TAC `h = (\x. f x - g x)`
5673 >> Know `h IN measurable (m_space m,measurable_sets m) Borel`
5674 >- (MATCH_MP_TAC IN_MEASURABLE_BOREL_SUB \\
5675 qexistsl_tac [‘f’, ‘g’] >> fs [measure_space_def, integrable_def])
5676 >> RW_TAC std_ss [integral_pos_fn]
5677 >> `!x. x IN m_space m ==> 0 <= h x`
5678 by METIS_TAC [extreal_sub_def,le_infty,le_refl,extreal_of_num_def,sub_refl]
5679 >> Know `pos_fn_integral m f = pos_fn_integral m (\x. g x + h x)`
5680 >- (MATCH_MP_TAC pos_fn_integral_cong >> simp [] \\
5681 CONJ_TAC >- (rpt STRIP_TAC >> MATCH_MP_TAC le_add >> PROVE_TAC []) \\
5682 rw [Abbr ‘h’] \\
5683 Know ‘g x + (f x - g x) = f x - g x + g x’
5684 >- (MATCH_MP_TAC add_comm >> DISJ1_TAC \\
5685 CONJ_TAC >- (MATCH_MP_TAC pos_not_neginf >> simp []) \\
5686 MATCH_MP_TAC pos_not_neginf >> fs []) >> Rewr' \\
5687 MATCH_MP_TAC EQ_SYM \\
5688 MATCH_MP_TAC sub_add \\
5689 CONJ_TAC >- (MATCH_MP_TAC pos_not_neginf >> simp []) \\
5690 FIRST_X_ASSUM MATCH_MP_TAC >> art []) >> Rewr'
5691 >> (MP_TAC o Q.SPECL [`m`,`g`,`h`]) pos_fn_integral_add
5692 >> RW_TAC std_ss []
5693 >> Suff `pos_fn_integral m h = 0`
5694 >- RW_TAC std_ss [add_rzero]
5695 >> Q.ABBREV_TAC `f = (\x. g x + h x)`
5696 >> `integrable m f` by RW_TAC std_ss [integrable_def, GSYM fn_plus_def, GSYM fn_minus_def]
5697 >> `null_set m {x | x IN m_space m /\ (f x = PosInf)}` by METIS_TAC [integrable_infty_null]
5698 >> (MP_TAC o Q.SPECL [`m`,`h`,`{x | x IN m_space m /\ (f x = PosInf)}`]) pos_fn_integral_split
5699 >> FULL_SIMP_TAC std_ss [null_set_def]
5700 >> RW_TAC std_ss []
5701 >> `(\x. h x * indicator_fn {x | x IN m_space m /\ (f x = PosInf)} x) =
5702 (\x. PosInf * indicator_fn {x | x IN m_space m /\ (f x = PosInf)} x)`
5703 by (RW_TAC std_ss [FUN_EQ_THM, indicator_fn_def, mul_rzero, mul_rone, GSPECIFICATION]
5704 >> Q.UNABBREV_TAC `h`
5705 >> RW_TAC std_ss [mul_rzero, mul_rone]
5706 >> METIS_TAC [extreal_sub_def, extreal_cases])
5707 >> RW_TAC std_ss [pos_fn_integral_cmul_infty, mul_rzero, add_lzero]
5708 >> `(\x. h x * indicator_fn (m_space m DIFF {x | x IN m_space m /\ (f x = PosInf)}) x) =
5709 (\x. 0)`
5710 by (RW_TAC std_ss [FUN_EQ_THM,indicator_fn_def, mul_rzero, mul_rone, GSPECIFICATION,
5711 IN_DIFF]
5712 >> Q.UNABBREV_TAC `h`
5713 >> RW_TAC std_ss [mul_rzero, mul_rone]
5714 >> METIS_TAC [sub_refl])
5715 >> RW_TAC std_ss [pos_fn_integral_zero, GSYM extreal_of_num_def, mul_rzero, add_rzero]
5716QED
5717
5718Theorem integrable_not_infty_alt2 :
5719 !m f. measure_space m /\ integrable m f /\
5720 (!x. x IN m_space m ==> 0 <= f x) ==>
5721 integrable m (\x. if f x = PosInf then 0 else f x) /\
5722 (pos_fn_integral m f = pos_fn_integral m (\x. if f x = PosInf then 0 else f x))
5723Proof
5724 RW_TAC std_ss []
5725 >- RW_TAC std_ss [integrable_not_infty_alt]
5726 >> `!x. x IN m_space m ==>
5727 0 <= (\x. if f x = PosInf then 0 else f x) x` by METIS_TAC [le_refl]
5728 >> FULL_SIMP_TAC std_ss [GSYM integral_pos_fn]
5729 >> METIS_TAC [integrable_not_infty_alt]
5730QED
5731
5732Theorem integrable_not_infty_alt3 :
5733 !m f. measure_space m /\ integrable m f ==>
5734 integrable m (\x. if ((f x = NegInf) \/ (f x = PosInf)) then 0 else f x) /\
5735 (integral m f =
5736 integral m (\x. if ((f x = NegInf) \/ (f x = PosInf)) then 0 else f x))
5737Proof
5738 NTAC 3 STRIP_TAC
5739 >> `fn_plus (\x. if (f x = NegInf) \/ (f x = PosInf) then 0 else f x) =
5740 (\x. if fn_plus f x = PosInf then 0 else fn_plus f x)`
5741 by (RW_TAC std_ss [fn_plus_def,FUN_EQ_THM]
5742 >> Cases_on `f x` >> METIS_TAC [lt_infty])
5743 >> `fn_minus (\x. if (f x = NegInf) \/ (f x = PosInf) then 0 else f x) =
5744 (\x. if fn_minus f x = PosInf then 0 else fn_minus f x)`
5745 by (RW_TAC std_ss [fn_minus_def,FUN_EQ_THM]
5746 >> Cases_on `f x`
5747 >> METIS_TAC [lt_infty, lt_refl, extreal_ainv_def, extreal_not_infty])
5748 >> `integrable m (fn_plus f)` by RW_TAC std_ss [integrable_fn_plus]
5749 >> `integrable m (fn_minus f)` by RW_TAC std_ss [integrable_fn_minus]
5750 >> `integrable m (\x. if fn_plus f x = PosInf then 0 else fn_plus f x)`
5751 by METIS_TAC [integrable_not_infty_alt2, FN_PLUS_POS, FN_MINUS_POS, integrable_pos]
5752 >> `integrable m (\x. if fn_minus f x = PosInf then 0 else fn_minus f x)`
5753 by METIS_TAC [integrable_not_infty_alt2, FN_PLUS_POS, FN_MINUS_POS, integrable_pos]
5754 >> reverse (RW_TAC std_ss [integral_def, integrable_def, GSYM fn_plus_def, GSYM fn_minus_def])
5755 >| [ (* goal 1 (of 4) *)
5756 METIS_TAC [integrable_not_infty_alt2, FN_PLUS_POS, FN_MINUS_POS],
5757 (* goal 2 (of 4) *)
5758 METIS_TAC [integrable_not_infty_alt2, FN_PLUS_POS, FN_MINUS_POS, integrable_pos],
5759 (* goal 3 (of 4) *)
5760 METIS_TAC [integrable_not_infty_alt2, FN_PLUS_POS, FN_MINUS_POS, integrable_pos],
5761 (* goal 4 (of 4) *)
5762 `(\x. if (f x = NegInf) \/ (f x = PosInf) then 0 else f x) =
5763 (\x. (\x. if fn_plus f x = PosInf then 0 else fn_plus f x) x -
5764 (\x. if fn_minus f x = PosInf then 0 else fn_minus f x) x)`
5765 by (RW_TAC std_ss [FUN_EQ_THM,fn_plus_def,fn_minus_def]
5766 >> Cases_on `f x`
5767 >> RW_TAC std_ss [lt_infty, extreal_sub_def, extreal_ainv_def, extreal_not_infty,
5768 num_not_infty, sub_rzero]
5769 >> METIS_TAC [lt_infty, extreal_not_infty, num_not_infty, extreal_ainv_def,
5770 lt_antisym, sub_lzero, neg_neg, extreal_lt_def, le_antisym]) \\
5771 POP_ORW \\
5772 MATCH_MP_TAC IN_MEASURABLE_BOREL_SUB \\
5773 Q.EXISTS_TAC `(\x. if fn_plus f x = PosInf then 0 else fn_plus f x)` \\
5774 Q.EXISTS_TAC `(\x. if fn_minus f x = PosInf then 0 else fn_minus f x)` \\
5775 FULL_SIMP_TAC std_ss [integrable_def, measure_space_def, space_def] \\
5776 (* additional steps added by Chun Tian *)
5777 GEN_TAC >> DISCH_TAC >> DISJ1_TAC \\
5778 CONJ_TAC >- (Cases_on `fn_plus f x = PosInf`
5779 >- METIS_TAC [extreal_cases, extreal_of_num_def, extreal_not_infty] \\
5780 ASM_SIMP_TAC std_ss [] \\
5781 METIS_TAC [FN_PLUS_POS, pos_not_neginf]) \\
5782 Cases_on `fn_minus f x = PosInf`
5783 >- METIS_TAC [extreal_cases, extreal_of_num_def, extreal_not_infty] \\
5784 ASM_SIMP_TAC std_ss [] ]
5785QED
5786
5787(* ------------------------------------------------------------------------- *)
5788(* Properties of Integral *)
5789(* ------------------------------------------------------------------------- *)
5790
5791Theorem integral_indicator:
5792 !m s. measure_space m /\ s IN measurable_sets m ==>
5793 (integral m (indicator_fn s) = measure m s)
5794Proof
5795 RW_TAC std_ss []
5796 >> `!x. 0 <= indicator_fn s x`
5797 by RW_TAC std_ss [indicator_fn_def, mul_rone, mul_rzero, le_refl, le_01]
5798 >> METIS_TAC [pos_fn_integral_indicator, integral_pos_fn]
5799QED
5800
5801Theorem integral_add_lemma :
5802 !m f f1 f2.
5803 measure_space m /\ integrable m f /\
5804 integrable m f1 /\ integrable m f2 /\
5805 (!x. x IN m_space m ==> (f x = f1 x - f2 x)) /\
5806 (!x. x IN m_space m ==> 0 <= f1 x) /\
5807 (!x. x IN m_space m ==> 0 <= f2 x) /\
5808 (!x. x IN m_space m ==> f1 x <> PosInf \/ f2 x <> PosInf) ==>
5809 (integral m f = pos_fn_integral m f1 - pos_fn_integral m f2)
5810Proof
5811 rpt STRIP_TAC
5812 >> ‘sigma_algebra (measurable_space m)’
5813 by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA]
5814 >> REWRITE_TAC [integral_def]
5815 >> `!x. x IN m_space m ==> f1 x <> NegInf` by METIS_TAC [pos_not_neginf]
5816 >> `!x. x IN m_space m ==> f2 x <> NegInf` by METIS_TAC [pos_not_neginf]
5817 >> Q.ABBREV_TAC `h1 = (\x. fn_plus f x + f2 x)`
5818 >> Q.ABBREV_TAC `h2 = (\x. fn_minus f x + f1 x)`
5819 >> Know `!x. x IN m_space m ==> (h1 x = h2 x)`
5820 >- (RW_TAC std_ss [Abbr ‘h1’, Abbr ‘h2’] \\
5821 Q.PAT_X_ASSUM ‘!x. x IN m_space m ==> P \/ Q’ (MP_TAC o (Q.SPEC ‘x’)) \\
5822 RW_TAC std_ss [] \\
5823 Cases_on ‘f2 x = PosInf’
5824 >- (‘?r. f1 x = Normal r’ by METIS_TAC [extreal_cases] \\
5825 ‘f x = NegInf’ by METIS_TAC [extreal_sub_def] \\
5826 ‘fn_minus f x = PosInf’ by METIS_TAC [FN_MINUS_ALT, min_infty, extreal_ainv_def] \\
5827 ‘fn_plus f x = 0’ by METIS_TAC [FN_MINUS_INFTY_IMP] \\
5828 rw [extreal_add_def]) \\
5829 ‘f1 x <> NegInf /\ f2 x <> NegInf’ by PROVE_TAC [] \\
5830 SIMP_TAC std_ss [fn_plus_def, fn_minus_def, add_lzero] \\
5831 Cases_on `f1 x` >> Cases_on `f2 x` \\
5832 FULL_SIMP_TAC std_ss [extreal_sub_def, extreal_add_def, extreal_ainv_def,
5833 extreal_11, add_lzero, extreal_of_num_def, GSYM lt_infty,
5834 extreal_lt_eq, extreal_not_infty] \\
5835 Cases_on ‘0 < r - r'’
5836 >- (‘~(r - r' < 0)’ by METIS_TAC [REAL_LT_ANTISYM] \\
5837 fs [extreal_add_def, extreal_sub_def, add_lzero] >> REAL_ARITH_TAC) \\
5838 Cases_on ‘r - r' < 0’
5839 >- (fs [extreal_add_def, extreal_sub_def, add_lzero] >> REAL_ARITH_TAC) \\
5840 fs [extreal_add_def, extreal_11] \\
5841 ‘r - r' = 0’ by METIS_TAC [REAL_LE_ANTISYM, real_lt] >> POP_ASSUM MP_TAC \\
5842 REAL_ARITH_TAC)
5843 >> DISCH_TAC
5844 >> Know `pos_fn_integral m h1 = pos_fn_integral m h2`
5845 >- (MATCH_MP_TAC pos_fn_integral_cong >> simp [] \\
5846 RW_TAC std_ss [Abbr ‘h2’] \\
5847 MATCH_MP_TAC le_add >> rw [FN_MINUS_POS]) >> DISCH_TAC
5848 >> `pos_fn_integral m h1 =
5849 pos_fn_integral m (fn_plus f) + pos_fn_integral m f2`
5850 by (Q.UNABBREV_TAC `h1`
5851 >> MATCH_MP_TAC pos_fn_integral_add
5852 >> FULL_SIMP_TAC std_ss [integrable_def]
5853 >> RW_TAC std_ss [le_refl, lt_le, IN_MEASURABLE_BOREL_FN_PLUS, FN_PLUS_POS])
5854 >> `pos_fn_integral m h2 =
5855 pos_fn_integral m (fn_minus f) + pos_fn_integral m f1`
5856 by (Q.UNABBREV_TAC `h2`
5857 >> MATCH_MP_TAC pos_fn_integral_add
5858 >> METIS_TAC [FN_MINUS_POS, IN_MEASURABLE_BOREL_FN_MINUS, integrable_def])
5859 >> `pos_fn_integral m f2 <> PosInf` by METIS_TAC [integrable_pos]
5860 >> `pos_fn_integral m (fn_minus f) <> PosInf`
5861 by METIS_TAC [integrable_def]
5862 >> `pos_fn_integral m f2 <> NegInf`
5863 by METIS_TAC [pos_fn_integral_pos, lt_infty, lte_trans, num_not_infty]
5864 >> `0 <= pos_fn_integral m (fn_minus f)`
5865 by METIS_TAC [pos_fn_integral_pos, FN_MINUS_POS]
5866 >> `pos_fn_integral m (fn_minus f) <> NegInf`
5867 by METIS_TAC [lt_infty, lte_trans, num_not_infty]
5868 >> METIS_TAC [eq_add_sub_switch]
5869QED
5870
5871(* an improved version without the following antecedents: (used by FUBINI)
5872
5873 !x. x IN m_space m ==> f1 x <> PosInf \/ f2 x <> PosInf
5874 *)
5875Theorem integral_add_lemma' :
5876 !m f f1 f2.
5877 measure_space m /\ integrable m f /\
5878 integrable m f1 /\ integrable m f2 /\
5879 (!x. x IN m_space m ==> (f x = f1 x - f2 x)) /\
5880 (!x. x IN m_space m ==> 0 <= f1 x) /\
5881 (!x. x IN m_space m ==> 0 <= f2 x) ==>
5882 (integral m f = pos_fn_integral m f1 - pos_fn_integral m f2)
5883Proof
5884 rpt STRIP_TAC
5885 >> Q.ABBREV_TAC ‘N1 = {x | x IN m_space m /\ f1 x = PosInf}’
5886 >> Q.ABBREV_TAC ‘N2 = {x | x IN m_space m /\ f2 x = PosInf}’
5887 >> ‘null_set m N1 /\ null_set m N2’ by METIS_TAC [integrable_infty_null]
5888 >> Q.ABBREV_TAC ‘g1 = \x. if f1 x = PosInf then 0 else f1 x’
5889 >> Q.ABBREV_TAC ‘g2 = \x. if f2 x = PosInf then 0 else f2 x’
5890 >> Know ‘integrable m g1 /\ pos_fn_integral m f1 = pos_fn_integral m g1’
5891 >- (Q.UNABBREV_TAC ‘g1’ \\
5892 MATCH_MP_TAC integrable_not_infty_alt2 >> rw [])
5893 >> STRIP_TAC >> POP_ORW
5894 >> Know ‘integrable m g2 /\ pos_fn_integral m f2 = pos_fn_integral m g2’
5895 >- (Q.UNABBREV_TAC ‘g2’ \\
5896 MATCH_MP_TAC integrable_not_infty_alt2 >> rw [])
5897 >> STRIP_TAC >> POP_ORW
5898 (* applying integral_add_lemma *)
5899 >> Q.ABBREV_TAC ‘g = \x. g1 x - g2 x’
5900 >> Know ‘integral m f = integral m g’
5901 >- (MATCH_MP_TAC integral_cong_AE >> art [] \\
5902 rw [AE_DEF] \\
5903 Q.EXISTS_TAC ‘N1 UNION N2’ \\
5904 CONJ_TAC >- METIS_TAC [NULL_SET_UNION, IN_APP] \\
5905 rw [Abbr ‘N1’, Abbr ‘N2’, Abbr ‘g’, Abbr ‘g1’, Abbr ‘g2’])
5906 >> Rewr'
5907 >> MATCH_MP_TAC integral_add_lemma >> simp []
5908 (* easy goals first *)
5909 >> reverse CONJ_TAC
5910 >- (rw [Abbr ‘g1’, Abbr ‘g2’])
5911 (* integrable m g *)
5912 >> Q.UNABBREV_TAC ‘g’
5913 >> MATCH_MP_TAC integrable_sub
5914 >> rw [Abbr ‘g1’, Abbr ‘g2’]
5915 >> MATCH_MP_TAC pos_not_neginf >> simp []
5916QED
5917
5918Theorem integral_add :
5919 !m f g. measure_space m /\ integrable m f /\ integrable m g /\
5920 (!x. x IN m_space m ==> (f x <> NegInf /\ g x <> NegInf) \/
5921 (f x <> PosInf /\ g x <> PosInf)) ==>
5922 (integral m (\x. f x + g x) = integral m f + integral m g)
5923Proof
5924 RW_TAC std_ss []
5925 >> ‘sigma_algebra (measurable_space m)’ by fs [measure_space_def]
5926 >> Know `integral m (\x. f x + g x) =
5927 pos_fn_integral m (\x. fn_plus f x + fn_plus g x) -
5928 pos_fn_integral m (\x. fn_minus f x + fn_minus g x)`
5929 >- (MATCH_MP_TAC integral_add_lemma \\
5930 `!x. 0 <= fn_minus f x + fn_minus g x` by METIS_TAC [FN_MINUS_POS, le_add] \\
5931 `!x. 0 <= fn_plus f x + fn_plus g x` by METIS_TAC [FN_PLUS_POS, le_add] \\
5932 RW_TAC std_ss [FUN_EQ_THM, add_rzero, add_lzero, lt_imp_le, le_refl, le_add,
5933 integrable_add] >| (* 4 subgoals *)
5934 [ (* goal 1 (of 4) *)
5935 MATCH_MP_TAC integrable_add >> rw [integrable_fn_plus] \\
5936 Q.PAT_X_ASSUM ‘!x. x IN m_space m ==> P \/ Q’ (MP_TAC o (Q.SPEC ‘x’)) \\
5937 RW_TAC std_ss [] >| (* 2 subgoals *)
5938 [ (* goal 1.1 (of 2) *)
5939 DISJ1_TAC \\
5940 CONJ_TAC >> (MATCH_MP_TAC pos_not_neginf >> REWRITE_TAC [FN_PLUS_POS]),
5941 (* goal 1.2 (of 2) *)
5942 DISJ1_TAC \\
5943 CONJ_TAC >> (MATCH_MP_TAC pos_not_neginf >> REWRITE_TAC [FN_PLUS_POS]) ],
5944 (* goal 2 (of 4) *)
5945 METIS_TAC [integrable_fn_minus, integrable_add, FN_MINUS_POS, pos_not_neginf],
5946 (* goal 3 (of 4) *)
5947 `f x + g x = fn_plus f x - fn_minus f x + (fn_plus g x - fn_minus g x)`
5948 by PROVE_TAC [FN_DECOMP] >> POP_ORW \\
5949 Q.PAT_X_ASSUM ‘!x. x IN m_space m ==> P \/ Q’ (MP_TAC o (Q.SPEC ‘x’)) \\
5950 RW_TAC std_ss []
5951 >- (Know ‘fn_minus f x <> PosInf /\ fn_minus g x <> PosInf’
5952 >- (rw [fn_minus_def] >> METIS_TAC [neg_neg, extreal_ainv_def]) >> STRIP_TAC \\
5953 ‘fn_plus f x <> NegInf /\ fn_plus g x <> NegInf’
5954 by PROVE_TAC [FN_PLUS_POS, pos_not_neginf] \\
5955 MATCH_MP_TAC add2_sub2 >> art []) \\
5956 Cases_on ‘fn_minus f x = PosInf’
5957 >- (‘fn_plus f x = 0’ by METIS_TAC [FN_MINUS_INFTY_IMP] >> rw [extreal_ainv_def] \\
5958 ‘fn_plus g x <> PosInf’ by PROVE_TAC [FN_PLUS_NOT_INFTY] \\
5959 ‘fn_plus g x <> NegInf’ by METIS_TAC [pos_not_neginf, FN_PLUS_POS] \\
5960 ‘?r. fn_plus g x = Normal r’ by METIS_TAC [extreal_cases] >> POP_ORW \\
5961 Cases_on ‘fn_minus g x = PosInf’ >- (rw [extreal_sub_def, extreal_add_def]) \\
5962 ‘fn_minus g x <> NegInf’ by METIS_TAC [pos_not_neginf, FN_MINUS_POS] \\
5963 ‘?s. fn_minus g x = Normal s’ by METIS_TAC [extreal_cases] >> POP_ORW \\
5964 rw [extreal_sub_def, extreal_add_def]) \\
5965 Cases_on ‘fn_minus g x = PosInf’
5966 >- (‘fn_plus g x = 0’ by METIS_TAC [FN_MINUS_INFTY_IMP] >> rw [extreal_ainv_def] \\
5967 ‘fn_minus g x <> NegInf’ by METIS_TAC [pos_not_neginf, FN_MINUS_POS] \\
5968 ‘fn_minus f x <> NegInf’ by METIS_TAC [pos_not_neginf, FN_MINUS_POS] \\
5969 ‘?r. fn_minus f x = Normal r’ by METIS_TAC [extreal_cases] >> POP_ORW \\
5970 rw [extreal_add_def, extreal_ainv_def] \\
5971 ‘fn_plus f x <> PosInf’ by PROVE_TAC [FN_PLUS_NOT_INFTY] \\
5972 ‘fn_plus f x <> NegInf’ by METIS_TAC [pos_not_neginf, FN_PLUS_POS] \\
5973 ‘?s. fn_plus f x = Normal s’ by METIS_TAC [extreal_cases] >> POP_ORW \\
5974 rw [extreal_add_def, extreal_sub_def]) \\
5975 ‘fn_plus f x <> NegInf /\ fn_plus g x <> NegInf’
5976 by PROVE_TAC [FN_PLUS_POS, pos_not_neginf] \\
5977 MATCH_MP_TAC add2_sub2 >> art [],
5978 (* goal 4 (of 4) *)
5979 Q.PAT_X_ASSUM ‘!x. x IN m_space m ==> P \/ Q’ (MP_TAC o (Q.SPEC ‘x’)) \\
5980 RW_TAC std_ss [] >| (* 2 subgoals *)
5981 [ (* goal 4.1 (of 2) *)
5982 Know `fn_minus f x <> PosInf /\ fn_minus g x <> PosInf`
5983 >- (rw [fn_minus_def] >> METIS_TAC [neg_neg, extreal_ainv_def]) >> STRIP_TAC \\
5984 PROVE_TAC [add_not_infty],
5985 (* goal 4.2 (of 2) *)
5986 Cases_on ‘fn_minus f x = PosInf’
5987 >- (‘fn_plus f x = 0’ by METIS_TAC [FN_MINUS_INFTY_IMP] \\
5988 ‘fn_plus g x <> PosInf’ by METIS_TAC [FN_PLUS_NOT_INFTY] \\
5989 ‘fn_plus g x <> NegInf’ by METIS_TAC [pos_not_neginf, FN_PLUS_POS] \\
5990 ‘?r. fn_plus g x = Normal r’ by METIS_TAC [extreal_cases] \\
5991 fs [add_lzero]) \\
5992 Cases_on ‘fn_minus g x = PosInf’
5993 >- (‘fn_plus g x = 0’ by METIS_TAC [FN_MINUS_INFTY_IMP] \\
5994 ‘fn_plus f x <> PosInf’ by METIS_TAC [FN_PLUS_NOT_INFTY] \\
5995 ‘fn_plus f x <> NegInf’ by METIS_TAC [pos_not_neginf, FN_PLUS_POS] \\
5996 ‘?r. fn_plus f x = Normal r’ by METIS_TAC [extreal_cases] \\
5997 fs [add_rzero]) \\
5998 PROVE_TAC [add_not_infty] ] ])
5999 >> Rewr
6000 >> Know `pos_fn_integral m (\x. fn_plus f x + fn_plus g x) =
6001 pos_fn_integral m (fn_plus f) + pos_fn_integral m (fn_plus g)`
6002 >- (MATCH_MP_TAC pos_fn_integral_add \\
6003 FULL_SIMP_TAC std_ss [integrable_def] \\
6004 rw [FN_PLUS_POS, IN_MEASURABLE_BOREL_FN_PLUS])
6005 >> Rewr'
6006 >> Know `pos_fn_integral m (\x. fn_minus f x + fn_minus g x) =
6007 pos_fn_integral m (fn_minus f) + pos_fn_integral m (fn_minus g)`
6008 >- (MATCH_MP_TAC pos_fn_integral_add \\
6009 FULL_SIMP_TAC std_ss [integrable_def] \\
6010 rw [FN_MINUS_POS, IN_MEASURABLE_BOREL_FN_MINUS])
6011 >> Rewr'
6012 >> RW_TAC std_ss [integral_def]
6013 >> Know `pos_fn_integral m (fn_plus f) <> NegInf`
6014 >- (MATCH_MP_TAC pos_not_neginf \\
6015 MATCH_MP_TAC pos_fn_integral_pos >> art [FN_PLUS_POS]) >> DISCH_TAC
6016 >> Know `pos_fn_integral m (fn_minus f) <> NegInf`
6017 >- (MATCH_MP_TAC pos_not_neginf \\
6018 MATCH_MP_TAC pos_fn_integral_pos >> art [FN_MINUS_POS]) >> DISCH_TAC
6019 >> Know `pos_fn_integral m (fn_plus g) <> NegInf`
6020 >- (MATCH_MP_TAC pos_not_neginf \\
6021 MATCH_MP_TAC pos_fn_integral_pos >> art [FN_PLUS_POS]) >> DISCH_TAC
6022 >> Know `pos_fn_integral m (fn_minus g) <> NegInf`
6023 >- (MATCH_MP_TAC pos_not_neginf \\
6024 MATCH_MP_TAC pos_fn_integral_pos >> art [FN_MINUS_POS]) >> DISCH_TAC
6025 >> FULL_SIMP_TAC std_ss [integrable_def]
6026 >> Q.ABBREV_TAC `a = pos_fn_integral m (fn_plus f)`
6027 >> Q.ABBREV_TAC `b = pos_fn_integral m (fn_minus f)`
6028 >> Q.ABBREV_TAC `c = pos_fn_integral m (fn_plus g)`
6029 >> Q.ABBREV_TAC `d = pos_fn_integral m (fn_minus g)`
6030 >> ONCE_REWRITE_TAC [EQ_SYM_EQ]
6031 >> MATCH_MP_TAC add2_sub2 >> art []
6032QED
6033
6034(* cf. real_lebesgueTheory.integral_times *)
6035Theorem integral_cmul :
6036 !m f c. measure_space m /\ integrable m f ==>
6037 (integral m (\x. Normal c * f x) = Normal c * integral m f)
6038Proof
6039 RW_TAC std_ss [integral_def,GSYM fn_plus_def,GSYM fn_minus_def]
6040 >> `(\x. fn_plus f x) = fn_plus f` by METIS_TAC []
6041 >> `(\x. fn_minus f x) = fn_minus f` by METIS_TAC []
6042 >> Cases_on `0 <= c`
6043 >- (RW_TAC std_ss [FN_PLUS_CMUL, FN_MINUS_CMUL, FN_PLUS_POS, FN_MINUS_POS,
6044 pos_fn_integral_cmul] \\
6045 MATCH_MP_TAC (GSYM sub_ldistrib) \\
6046 FULL_SIMP_TAC std_ss [extreal_not_infty, integrable_def, GSYM fn_plus_def,
6047 GSYM fn_minus_def] \\
6048 METIS_TAC [pos_fn_integral_pos, FN_PLUS_POS, FN_MINUS_POS, lt_infty, lte_trans,
6049 extreal_of_num_def])
6050 >> `c <= 0` by METIS_TAC [REAL_LT_IMP_LE,real_lt]
6051 >> `0 <= -c` by METIS_TAC [REAL_LE_NEG,REAL_NEG_0]
6052 >> RW_TAC std_ss [FN_PLUS_CMUL, FN_MINUS_CMUL, FN_PLUS_POS, FN_MINUS_POS,
6053 pos_fn_integral_cmul, extreal_ainv_def]
6054 >> RW_TAC std_ss [Once (GSYM eq_neg), GSYM mul_lneg, extreal_ainv_def]
6055 >> FULL_SIMP_TAC std_ss [integrable_def, GSYM fn_plus_def, GSYM fn_minus_def]
6056 >> `pos_fn_integral m (fn_plus f) <> NegInf`
6057 by METIS_TAC [pos_fn_integral_pos, FN_PLUS_POS, lt_infty, lte_trans, extreal_of_num_def]
6058 >> `pos_fn_integral m (fn_minus f) <> NegInf`
6059 by METIS_TAC [pos_fn_integral_pos, FN_MINUS_POS, lt_infty, lte_trans, extreal_of_num_def]
6060 >> FULL_SIMP_TAC std_ss [GSYM sub_ldistrib, extreal_not_infty, GSYM mul_rneg]
6061 >> METIS_TAC [neg_sub]
6062QED
6063
6064Theorem integrable_finite_integral :
6065 !m f. measure_space m /\ integrable m f ==>
6066 integral m f <> PosInf /\ integral m f <> NegInf
6067Proof
6068 rpt GEN_TAC
6069 >> SIMP_TAC std_ss [integral_def, integrable_def]
6070 >> STRIP_TAC
6071 >> Know `pos_fn_integral m (fn_plus f) <> NegInf`
6072 >- (MATCH_MP_TAC pos_not_neginf \\
6073 MATCH_MP_TAC pos_fn_integral_pos >> art [FN_PLUS_POS]) >> DISCH_TAC
6074 >> Know `pos_fn_integral m (fn_minus f) <> NegInf`
6075 >- (MATCH_MP_TAC pos_not_neginf \\
6076 MATCH_MP_TAC pos_fn_integral_pos >> art [FN_MINUS_POS]) >> DISCH_TAC
6077 >> `?r1. pos_fn_integral m (fn_plus f) = Normal r1` by PROVE_TAC [extreal_cases]
6078 >> `?r2. pos_fn_integral m (fn_minus f) = Normal r2` by PROVE_TAC [extreal_cases]
6079 >> ASM_REWRITE_TAC [extreal_sub_def, extreal_not_infty]
6080QED
6081
6082Theorem integral_sub :
6083 !m f g. measure_space m /\ integrable m f /\ integrable m g /\
6084 (!x. x IN m_space m ==> (f x <> NegInf /\ g x <> PosInf) \/
6085 (f x <> PosInf /\ g x <> NegInf)) ==>
6086 (integral m (\x. f x - g x) = integral m f - integral m g)
6087Proof
6088 rw [extreal_sub]
6089 >> ‘integrable m (\x. -g x)’ by METIS_TAC [integrable_ainv]
6090 >> Know ‘Normal (-1) * integral m g = integral m (\x. Normal (-1) * g x)’
6091 >- (ONCE_REWRITE_TAC [EQ_SYM_EQ] \\
6092 MATCH_MP_TAC integral_cmul >> art [])
6093 >> rw [GSYM neg_minus1, GSYM extreal_ainv_def, normal_1]
6094 >> HO_MATCH_MP_TAC integral_add >> rw []
6095 >> CCONTR_TAC
6096 >> Cases_on ‘g x’ >> METIS_TAC [extreal_ainv_def, extreal_distinct]
6097QED
6098
6099(* added `measure m s < PosInf` into antecedents, otherwise not true *)
6100Theorem integral_cmul_indicator:
6101 !m s c. measure_space m /\ s IN measurable_sets m /\ measure m s < PosInf ==>
6102 (integral m (\x. Normal c * indicator_fn s x) = Normal c * measure m s)
6103Proof
6104 METIS_TAC [integral_cmul, integral_indicator, integrable_indicator, extreal_mul_def]
6105QED
6106
6107Theorem integral_zero: !m. measure_space m ==> (integral m (\x. 0) = 0)
6108Proof
6109 RW_TAC std_ss [integral_def, lt_refl, pos_fn_integral_zero, sub_lzero, neg_0,
6110 fn_plus_def, fn_minus_def]
6111QED
6112
6113(* NOTE: removed “measure m (m_space m) < PosInf” *)
6114Theorem integral_const :
6115 !m c. measure_space m ==>
6116 integral m (\x. Normal c) = Normal c * measure m (m_space m)
6117Proof
6118 rpt STRIP_TAC
6119 >> ‘c = 0 \/ 0 < c \/ c < 0’ by PROVE_TAC [REAL_LT_TOTAL]
6120 >| [ (* goal 1 (of 3) *)
6121 simp [normal_0, integral_zero],
6122 (* goal 2 (of 3) *)
6123 REWRITE_TAC [integral_def] \\
6124 ‘0 <= c’ by simp [REAL_LT_IMP_LE] \\
6125 Know ‘(\x. Normal c)^+ = \x. Normal c’
6126 >- (PURE_REWRITE_TAC [FUN_EQ_THM] \\
6127 Q.X_GEN_TAC ‘x’ \\
6128 MATCH_MP_TAC FN_PLUS_REDUCE \\
6129 simp [extreal_of_num_def, extreal_le_eq]) >> Rewr' \\
6130 Know ‘(\x. Normal c)^- = \x. 0’
6131 >- (rw [FUN_EQ_THM] \\
6132 MATCH_MP_TAC FN_MINUS_REDUCE \\
6133 simp [extreal_of_num_def, extreal_le_eq]) >> Rewr' \\
6134 simp [pos_fn_integral_const, pos_fn_integral_zero],
6135 (* goal 3 (of 3) *)
6136 REWRITE_TAC [integral_def] \\
6137 ‘c <= 0’ by simp [REAL_LT_IMP_LE] \\
6138 Know ‘(\x. Normal c)^+ = \x. 0’
6139 >- (rw [FUN_EQ_THM] \\
6140 MATCH_MP_TAC FN_PLUS_REDUCE' \\
6141 simp [extreal_of_num_def, extreal_le_eq]) >> Rewr' \\
6142 Know ‘(\x. Normal c)^- = \x. Normal (-c)’
6143 >- (rw [FUN_EQ_THM, GSYM extreal_ainv_def] \\
6144 ‘-Normal c = -((\x. Normal c) x)’ by simp [] >> POP_ORW \\
6145 MATCH_MP_TAC FN_MINUS_REDUCE' \\
6146 simp [extreal_of_num_def, extreal_le_eq]) >> Rewr' \\
6147 simp [pos_fn_integral_const, pos_fn_integral_zero] \\
6148 simp [GSYM extreal_ainv_def, mul_lneg, neg_neg] ]
6149QED
6150
6151Theorem integral_cmul_infty:
6152 !m s. measure_space m /\ s IN measurable_sets m ==>
6153 (integral m (\x. PosInf * indicator_fn s x) = PosInf * (measure m s))
6154Proof
6155 rpt STRIP_TAC
6156 >> Know `integral m (\x. PosInf) = integral m (\x. (\x. PosInf) x * indicator_fn (m_space m) x)`
6157 >- (MATCH_MP_TAC integral_mspace >> art []) >> Rewr'
6158 >> Know `integral m (\x. PosInf * indicator_fn s x) =
6159 pos_fn_integral m (\x. PosInf * indicator_fn s x)`
6160 >- (MATCH_MP_TAC integral_pos_fn >> RW_TAC std_ss [] \\
6161 MATCH_MP_TAC le_mul >> REWRITE_TAC [INDICATOR_FN_POS] \\
6162 REWRITE_TAC [extreal_of_num_def, le_infty]) >> Rewr'
6163 >> MATCH_MP_TAC pos_fn_integral_cmul_infty >> art []
6164QED
6165
6166Theorem integral_cmul_infty' :
6167 !m s. measure_space m /\ s IN measurable_sets m ==>
6168 (integral m (\x. NegInf * indicator_fn s x) = NegInf * (measure m s))
6169Proof
6170 rpt STRIP_TAC
6171 >> Know `integral m (\x. PosInf) = integral m (\x. (\x. PosInf) x * indicator_fn (m_space m) x)`
6172 >- (MATCH_MP_TAC integral_mspace >> art [])
6173 >> Rewr'
6174 >> REWRITE_TAC [integral_def]
6175 >> Know ‘pos_fn_integral m (\x. NegInf * indicator_fn s x)^+ = pos_fn_integral m (\x. 0)’
6176 >- (MATCH_MP_TAC pos_fn_integral_cong \\
6177 rw [FN_PLUS_ALT, le_max] \\
6178 rw [indicator_fn_def])
6179 >> Rewr'
6180 >> Know ‘pos_fn_integral m (\x. NegInf * indicator_fn s x)^- =
6181 pos_fn_integral m (\x. PosInf * indicator_fn s x)’
6182 >- (MATCH_MP_TAC pos_fn_integral_cong \\
6183 rw [fn_minus_def, GSYM mul_lneg, extreal_ainv_def] >| (* 3 subgoals *)
6184 [ (* goal 1 (of 3) *)
6185 MATCH_MP_TAC le_mul >> rw [le_infty, INDICATOR_FN_POS],
6186 (* goal 2 (of 3) *)
6187 MATCH_MP_TAC le_mul >> rw [le_infty, INDICATOR_FN_POS],
6188 (* goal 3 (of 3) *)
6189 fs [extreal_lt_def] \\
6190 STRIP_ASSUME_TAC (Q.SPECL [‘s’, ‘x’] indicator_fn_normal) \\
6191 FULL_SIMP_TAC std_ss [extreal_mul_def, le_infty, extreal_of_num_def, extreal_11] \\
6192 Cases_on ‘r = 0’ >- rw [] \\
6193 ‘0 < r’ by PROVE_TAC [REAL_LE_LT] \\
6194 FULL_SIMP_TAC std_ss [le_infty, extreal_not_infty] ])
6195 >> Rewr'
6196 >> ASM_SIMP_TAC std_ss [pos_fn_integral_zero, sub_lzero]
6197 >> Know ‘pos_fn_integral m (\x. PosInf * indicator_fn s x) = PosInf * measure m s’
6198 >- (MATCH_MP_TAC pos_fn_integral_cmul_infty >> art [])
6199 >> Rewr'
6200 >> rw [GSYM mul_lneg, extreal_ainv_def]
6201QED
6202
6203Theorem integral_posinf:
6204 !m. measure_space m /\ 0 < measure m (m_space m) ==> (integral m (\x. PosInf) = PosInf)
6205Proof
6206 rpt STRIP_TAC
6207 >> Know `integral m (\x. PosInf) =
6208 integral m (\x. (\x. PosInf) x * indicator_fn (m_space m) x)`
6209 >- (MATCH_MP_TAC integral_mspace >> art [])
6210 >> Rewr' >> BETA_TAC
6211 >> Know `integral m (\x. PosInf * indicator_fn (m_space m) x) = PosInf * (measure m (m_space m))`
6212 >- (MATCH_MP_TAC integral_cmul_infty >> art [] \\
6213 MATCH_MP_TAC MEASURE_SPACE_MSPACE_MEASURABLE >> art []) >> Rewr'
6214 >> Cases_on `measure m (m_space m) = PosInf`
6215 >- (POP_ORW >> REWRITE_TAC [extreal_mul_def])
6216 >> METIS_TAC [mul_infty]
6217QED
6218
6219Theorem integral_neginf :
6220 !m. measure_space m /\ 0 < measure m (m_space m) ==> (integral m (\x. NegInf) = NegInf)
6221Proof
6222 rpt STRIP_TAC
6223 >> Know `integral m (\x. NegInf) =
6224 integral m (\x. (\x. NegInf) x * indicator_fn (m_space m) x)`
6225 >- (MATCH_MP_TAC integral_mspace >> art [])
6226 >> Rewr' >> BETA_TAC
6227 >> Know `integral m (\x. NegInf * indicator_fn (m_space m) x) = NegInf * (measure m (m_space m))`
6228 >- (MATCH_MP_TAC integral_cmul_infty' >> art [] \\
6229 MATCH_MP_TAC MEASURE_SPACE_MSPACE_MEASURABLE >> art [])
6230 >> Rewr'
6231 >> Cases_on `measure m (m_space m) = PosInf`
6232 >- (POP_ORW >> REWRITE_TAC [extreal_mul_def])
6233 >> METIS_TAC [mul_infty]
6234QED
6235
6236Theorem integral_indicator_pow_eq:
6237 !m s n. measure_space m /\ s IN measurable_sets m /\ 0 < n ==>
6238 (integral m (\x. (indicator_fn s x) pow n) = integral m (indicator_fn s))
6239Proof
6240 rpt STRIP_TAC
6241 >> MATCH_MP_TAC integral_cong
6242 >> RW_TAC std_ss [indicator_fn_def, one_pow, zero_pow]
6243QED
6244
6245Theorem integral_indicator_pow:
6246 !m s n. measure_space m /\ s IN measurable_sets m /\ 0 < n ==>
6247 (integral m (\x. (indicator_fn s x) pow n) = measure m s)
6248Proof
6249 rpt STRIP_TAC
6250 >> Suff `integral m (\x. (indicator_fn s x) pow n) = integral m (indicator_fn s)`
6251 >- (Rewr' >> MATCH_MP_TAC integral_indicator >> art [])
6252 >> MATCH_MP_TAC integral_indicator_pow_eq >> art []
6253QED
6254
6255(* added `integrable f1 /\ integrable f2` into antecedents *)
6256Theorem integral_mono :
6257 !m f1 f2. measure_space m /\ integrable m f1 /\ integrable m f2 /\
6258 (!x. x IN m_space m ==> f1 x <= f2 x) ==>
6259 integral m f1 <= integral m f2
6260Proof
6261 RW_TAC std_ss []
6262 >> ONCE_REWRITE_TAC [(UNDISCH o Q.SPECL [`m`,`f`]) integral_mspace]
6263 >> RW_TAC std_ss [integral_def]
6264 >> `!x. (fn_plus (\x. f1 x * indicator_fn (m_space m) x)) x <=
6265 (fn_plus (\x. f2 x * indicator_fn (m_space m) x)) x`
6266 by (RW_TAC real_ss [fn_plus_def, lt_imp_le, le_refl, indicator_fn_def, mul_rzero, mul_rone]
6267 >> METIS_TAC [extreal_lt_def, mul_rone, lt_imp_le, le_trans])
6268 >> `!x. (fn_minus (\x. f2 x * indicator_fn (m_space m) x)) x <=
6269 (fn_minus (\x. f1 x * indicator_fn (m_space m) x)) x`
6270 by (RW_TAC real_ss [fn_minus_def, lt_imp_le, le_refl, indicator_fn_def, mul_rzero,
6271 mul_rone, neg_0, neg_eq0, le_neg]
6272 >> METIS_TAC [mul_rone, extreal_lt_def, le_trans, lt_neg, lt_imp_le, neg_0])
6273 >> fs [integrable_def]
6274 (* preparing for applying "extreal_sub_add" *)
6275 >> Know `pos_fn_integral m (fn_plus (\x. f1 x * indicator_fn (m_space m) x)) <> NegInf`
6276 >- (MATCH_MP_TAC pos_not_neginf \\
6277 MATCH_MP_TAC pos_fn_integral_pos >> art [] \\
6278 REWRITE_TAC [FN_PLUS_POS]) >> DISCH_TAC
6279 >> Know `pos_fn_integral m (fn_plus (\x. f2 x * indicator_fn (m_space m) x)) <> NegInf`
6280 >- (MATCH_MP_TAC pos_not_neginf \\
6281 MATCH_MP_TAC pos_fn_integral_pos >> art [] \\
6282 REWRITE_TAC [FN_PLUS_POS]) >> DISCH_TAC
6283 >> Know `pos_fn_integral m (fn_minus (\x. f1 x * indicator_fn (m_space m) x)) <> PosInf`
6284 >- (Suff `pos_fn_integral m (fn_minus (\x. f1 x * indicator_fn (m_space m) x)) =
6285 pos_fn_integral m (fn_minus f1)` >- METIS_TAC [] \\
6286 MATCH_MP_TAC EQ_SYM \\
6287 Suff `fn_minus (\x. f1 x * indicator_fn (m_space m) x) =
6288 (\x. fn_minus f1 x * indicator_fn (m_space m) x)`
6289 >- (Rewr >> MATCH_MP_TAC pos_fn_integral_mspace >> art [FN_MINUS_POS]) \\
6290 ONCE_REWRITE_TAC [mul_comm] \\
6291 MATCH_MP_TAC FN_MINUS_FMUL >> REWRITE_TAC [INDICATOR_FN_POS]) >> DISCH_TAC
6292 >> Know `pos_fn_integral m (fn_minus (\x. f2 x * indicator_fn (m_space m) x)) <> PosInf`
6293 >- (Suff `pos_fn_integral m (fn_minus (\x. f2 x * indicator_fn (m_space m) x)) =
6294 pos_fn_integral m (fn_minus f2)` >- METIS_TAC [] \\
6295 MATCH_MP_TAC EQ_SYM \\
6296 Suff `fn_minus (\x. f2 x * indicator_fn (m_space m) x) =
6297 (\x. fn_minus f2 x * indicator_fn (m_space m) x)`
6298 >- (Rewr >> MATCH_MP_TAC pos_fn_integral_mspace >> art [FN_MINUS_POS]) \\
6299 ONCE_REWRITE_TAC [mul_comm] \\
6300 MATCH_MP_TAC FN_MINUS_FMUL >> REWRITE_TAC [INDICATOR_FN_POS]) >> DISCH_TAC
6301 >> `pos_fn_integral m (fn_plus (\x. f1 x * indicator_fn (m_space m) x)) -
6302 pos_fn_integral m (fn_minus (\x. f1 x * indicator_fn (m_space m) x)) =
6303 pos_fn_integral m (fn_plus (\x. f1 x * indicator_fn (m_space m) x)) +
6304 -pos_fn_integral m (fn_minus (\x. f1 x * indicator_fn (m_space m) x))`
6305 by PROVE_TAC [extreal_sub_add] >> POP_ORW
6306 >> `pos_fn_integral m (fn_plus (\x. f2 x * indicator_fn (m_space m) x)) -
6307 pos_fn_integral m (fn_minus (\x. f2 x * indicator_fn (m_space m) x)) =
6308 pos_fn_integral m (fn_plus (\x. f2 x * indicator_fn (m_space m) x)) +
6309 -pos_fn_integral m (fn_minus (\x. f2 x * indicator_fn (m_space m) x))`
6310 by PROVE_TAC [extreal_sub_add] >> POP_ORW
6311 >> MATCH_MP_TAC le_add2
6312 >> CONJ_TAC
6313 >- (MATCH_MP_TAC pos_fn_integral_mono >> simp [FN_PLUS_POS])
6314 >> REWRITE_TAC [le_neg]
6315 >> MATCH_MP_TAC pos_fn_integral_mono
6316 >> simp [FN_MINUS_POS]
6317QED
6318
6319Theorem integrable_sum :
6320 !m f s. FINITE s /\ measure_space m /\ (!i. i IN s ==> integrable m (f i)) /\
6321 (!i x. i IN s /\ x IN m_space m ==>
6322 f i x <> PosInf /\ f i x <> NegInf) ==>
6323 integrable m (\x. SIGMA (\i. f i x) s)
6324Proof
6325 Suff `!s:'b->bool.
6326 FINITE s ==>
6327 (\s:'b->bool. !m f. measure_space m /\ (!i. i IN s ==> integrable m (f i)) /\
6328 (!x i. i IN s /\ x IN m_space m ==>
6329 f i x <> PosInf /\ f i x <> NegInf)
6330 ==> integrable m (\x. SIGMA (\i. f i x) s)) s`
6331 >- METIS_TAC []
6332 >> MATCH_MP_TAC FINITE_INDUCT
6333 >> RW_TAC std_ss [EXTREAL_SUM_IMAGE_EMPTY, integrable_zero]
6334 >> Know `!x. x IN m_space m ==>
6335 SIGMA (\i. f i x) (e INSERT s) = f e x + (\x. SIGMA (\i. f i x) s) x`
6336 >- (RW_TAC std_ss [] \\
6337 (MP_TAC o Q.SPEC `e` o UNDISCH o Q.SPECL [`(\i. f i x)`,`s`] o
6338 INST_TYPE [alpha |-> beta]) EXTREAL_SUM_IMAGE_PROPERTY \\
6339 `!i x. i IN e INSERT s /\ x IN m_space m ==> (\i. f i x) i <> NegInf`
6340 by RW_TAC std_ss [] \\
6341 FULL_SIMP_TAC std_ss [DELETE_NON_ELEMENT]) >> DISCH_TAC
6342 >> MATCH_MP_TAC integrable_eq
6343 >> Q.EXISTS_TAC ‘\x. f e x + (\x. SIGMA (\i. f i x) s) x’ >> art []
6344 >> reverse CONJ_TAC >- simp []
6345 >> MATCH_MP_TAC integrable_add >> art []
6346 >> CONJ_TAC >- fs [IN_INSERT]
6347 >> CONJ_TAC
6348 >- (FIRST_X_ASSUM MATCH_MP_TAC >> fs [IN_INSERT])
6349 >> RW_TAC std_ss [IN_INSERT]
6350 >> DISJ1_TAC
6351 >> MATCH_MP_TAC EXTREAL_SUM_IMAGE_NOT_NEGINF >> fs [IN_INSERT]
6352QED
6353
6354Theorem integral_sum :
6355 !m f s. FINITE s /\ measure_space m /\ (!i. i IN s ==> integrable m (f i)) /\
6356 (!x i. i IN s /\ x IN m_space m ==>
6357 f i x <> PosInf /\ f i x <> NegInf) ==>
6358 (integral m (\x. SIGMA (\i. (f i) x) s) = SIGMA (\i. integral m (f i)) s)
6359Proof
6360 Suff `!s. FINITE (s :'b set) ==>
6361 (\s. !m f. measure_space m /\ (!i. i IN s ==> integrable m (f i)) /\
6362 (!x i. i IN s /\ x IN m_space m ==>
6363 f i x <> PosInf /\ f i x <> NegInf) ==>
6364 integral m (\x. SIGMA (\i. (f i) x) s) =
6365 SIGMA (\i. integral m (f i)) s) s`
6366 >- METIS_TAC []
6367 >> MATCH_MP_TAC FINITE_INDUCT
6368 >> RW_TAC std_ss [EXTREAL_SUM_IMAGE_EMPTY, integral_zero]
6369 >> Know `!x. x IN m_space m ==>
6370 SIGMA (\i. f i x) (e INSERT s) = f e x + SIGMA (\i. f i x) s`
6371 >- (RW_TAC std_ss [] \\
6372 (MP_TAC o Q.SPEC `e` o UNDISCH o Q.SPECL [`(\i. f i x)`,`s`] o
6373 INST_TYPE [alpha |-> beta]) EXTREAL_SUM_IMAGE_PROPERTY \\
6374 `!i. i IN e INSERT s ==> (\i. f i x) i <> NegInf` by RW_TAC std_ss [] \\
6375 FULL_SIMP_TAC std_ss [DELETE_NON_ELEMENT]) >> DISCH_TAC
6376 >> Know ‘integral m (\x. SIGMA (\i. f i x) (e INSERT s)) =
6377 integral m (\x. f e x + SIGMA (\i. f i x) s)’
6378 >- (MATCH_MP_TAC integral_cong >> simp []) >> Rewr'
6379 >> `integral m (\x. f e x + SIGMA (\i. f i x) s) =
6380 integral m (\x. f e x + (\x. SIGMA (\i. f i x) s) x)` by METIS_TAC [] >> POP_ORW
6381 >> Know `integral m (\x. f e x + (\x. SIGMA (\i. f i x) s) x) =
6382 integral m (f e) + integral m (\x. SIGMA (\i. f i x) s)`
6383 >- (MATCH_MP_TAC integral_add >> fs [IN_INSERT] \\
6384 MATCH_MP_TAC integrable_sum >> METIS_TAC []) >> Rewr'
6385 >> Know `integral m (\x. SIGMA (\i. f i x) s) = SIGMA (\i. integral m (f i)) s`
6386 >- (FIRST_X_ASSUM MATCH_MP_TAC >> fs [IN_INSERT]) >> Rewr'
6387 >> (MP_TAC o Q.SPEC `e` o UNDISCH o Q.SPECL [`(\i. integral m (f i))`,`s`] o
6388 INST_TYPE [alpha |-> beta]) EXTREAL_SUM_IMAGE_PROPERTY
6389 >> Know `!x. x IN e INSERT s ==> (\i. integral m (f i)) x <> NegInf`
6390 >- (RW_TAC std_ss [] >> METIS_TAC [integrable_finite_integral])
6391 >> RW_TAC std_ss []
6392 >> FULL_SIMP_TAC std_ss [DELETE_NON_ELEMENT]
6393QED
6394
6395(* general case: `(m_space m)` can be infinite but `IMAGE f (m_space)` is finite.
6396 e.g. m_space m = univ(:real) but f() only takes values from a finite set.
6397
6398 added `integrable m f` into antecedents, otherwise `integral m f` is not defined;
6399 added `measure m (m_space m) < PosInf` into antecedents
6400 *)
6401Theorem finite_support_integral_reduce :
6402 !m f. measure_space m /\ f IN measurable (m_space m,measurable_sets m) Borel /\
6403 (!x. x IN m_space m ==> f x <> NegInf /\ f x <> PosInf) /\
6404 FINITE (IMAGE f (m_space m)) /\
6405 integrable m f /\ measure m (m_space m) < PosInf ==>
6406 (integral m f = finite_space_integral m f)
6407Proof
6408 rpt STRIP_TAC
6409 >> ‘sigma_algebra (measurable_space m)’ by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA]
6410 >> `?c1 n. BIJ c1 (count n) (IMAGE f (m_space m))`
6411 by RW_TAC std_ss [GSYM FINITE_BIJ_COUNT_EQ]
6412 >> `?c. !i. (i IN count n ==> (c1 i = Normal (c i)))`
6413 by (Q.EXISTS_TAC `\i. @r. c1 i = Normal r`
6414 >> RW_TAC std_ss []
6415 >> SELECT_ELIM_TAC
6416 >> RW_TAC std_ss []
6417 >> FULL_SIMP_TAC std_ss [BIJ_DEF, INJ_DEF, SURJ_DEF, IN_IMAGE]
6418 >> `?t. (c1 i = f t) /\ t IN m_space m` by METIS_TAC []
6419 >> METIS_TAC [extreal_cases])
6420 >> `FINITE (count n)` by RW_TAC std_ss [FINITE_COUNT]
6421 >> `!i j. i <> j /\ (i IN count n) /\ (j IN count n) ==>
6422 DISJOINT (PREIMAGE f {Normal (c i)}) (PREIMAGE f {Normal (c j)})`
6423 by (RW_TAC std_ss [DISJOINT_DEF, EXTENSION, IN_PREIMAGE, IN_INTER, NOT_IN_EMPTY,
6424 IN_SING]
6425 >> FULL_SIMP_TAC std_ss [BIJ_DEF, INJ_DEF, SURJ_DEF, IN_IMAGE]
6426 >> METIS_TAC [])
6427 >> `!i. PREIMAGE f {Normal (c i)} INTER m_space m IN measurable_sets m`
6428 by (RW_TAC std_ss []
6429 >> `PREIMAGE f {Normal (c i)} = {x | f x = Normal (c i)}`
6430 by RW_TAC std_ss [EXTENSION,IN_PREIMAGE,GSPECIFICATION,IN_SING]
6431 >> METIS_TAC [IN_MEASURABLE_BOREL_ALL, integrable_def, space_def, m_space_def,
6432 subsets_def, measurable_sets_def])
6433 >> Know `pos_simple_fn m (fn_plus f)
6434 (count n) (\i. PREIMAGE f {Normal (c i)} INTER m_space m)
6435 (\i. if 0 <= (c i) then c i else 0)`
6436 >- (RW_TAC std_ss [pos_simple_fn_def, FINITE_COUNT, FN_PLUS_POS,
6437 FN_MINUS_POS] >| (* 4 subgoals *)
6438 [ (* goal 1 (of 4) *)
6439 reverse (RW_TAC real_ss [fn_plus_def])
6440 >- (FULL_SIMP_TAC std_ss [extreal_lt_def, indicator_fn_def, IN_INTER]
6441 >> (MP_TAC o Q.SPEC `(\i. Normal (if 0 <= c i then c i else 0) *
6442 if t IN PREIMAGE f {Normal (c i)} then 1 else 0)` o
6443 UNDISCH o Q.ISPEC `count n`) EXTREAL_SUM_IMAGE_IN_IF
6444 >> Know `(!x. x IN count n ==>
6445 (\i. Normal (if 0 <= c i then c i else 0) *
6446 if t IN PREIMAGE f {Normal (c i)} then 1 else 0) x <> NegInf)`
6447 >- (GEN_TAC >> DISCH_TAC >> BETA_TAC \\
6448 MATCH_MP_TAC pos_not_neginf \\
6449 Cases_on `~(0 <= c x)` >- fs [GSYM extreal_of_num_def, mul_lzero, le_refl] \\
6450 fs [] \\
6451 Cases_on `t NOTIN (PREIMAGE f {Normal (c x)})` >- fs [mul_rzero, le_refl] \\
6452 fs [mul_rone] >> fs [extreal_le_eq, extreal_of_num_def])
6453 >> RW_TAC std_ss [] >> POP_ASSUM K_TAC
6454 >> Suff `(\x. if x IN count n then Normal (if 0 <= c x then c x else 0) *
6455 if t IN PREIMAGE f {Normal (c x)} then 1 else 0 else 0) =
6456 (\x. 0)`
6457 >- RW_TAC std_ss [EXTREAL_SUM_IMAGE_ZERO]
6458 >> RW_TAC std_ss [FUN_EQ_THM]
6459 >> Cases_on `~(x IN count n)` >- RW_TAC std_ss []
6460 >> reverse (RW_TAC std_ss [mul_rone, mul_rzero])
6461 >- RW_TAC std_ss [extreal_of_num_def]
6462 >> FULL_SIMP_TAC std_ss [BIJ_DEF, INJ_DEF, SURJ_DEF, IN_COUNT, IN_IMAGE,
6463 IN_PREIMAGE, IN_SING]
6464 >> METIS_TAC [le_antisym, extreal_le_def, extreal_of_num_def])
6465 >> FULL_SIMP_TAC std_ss [BIJ_DEF, INJ_DEF, SURJ_DEF, IN_IMAGE]
6466 >> `?i. i IN count n /\ (f t = Normal (c i))` by METIS_TAC []
6467 >> `count n = i INSERT ((count n) DELETE i)`
6468 by (RW_TAC std_ss [EXTENSION, IN_INSERT, IN_DELETE] >> METIS_TAC [])
6469 >> POP_ORW
6470 >> Know `!x. x IN (i INSERT count n DELETE i) ==>
6471 (\i. Normal (if 0 <= c i then c i else 0) *
6472 indicator_fn (PREIMAGE f {Normal (c i)} INTER m_space m) t) x <> NegInf`
6473 >- (GEN_TAC >> DISCH_TAC >> BETA_TAC \\
6474 MATCH_MP_TAC pos_not_neginf \\
6475 `0 <= indicator_fn (PREIMAGE f {Normal (c x)} INTER m_space m) t`
6476 by PROVE_TAC [INDICATOR_FN_POS] \\
6477 Suff `0 <= Normal (if 0 <= c x then c x else 0)` >- PROVE_TAC [le_mul] \\
6478 Suff `0 <= if 0 <= c x then c x else 0`
6479 >- PROVE_TAC [extreal_of_num_def, extreal_le_eq] \\
6480 Cases_on `0 <= c x` >> RW_TAC real_ss [])
6481 >> reverse (RW_TAC std_ss [EXTREAL_SUM_IMAGE_THM, FINITE_DELETE, GSYM extreal_of_num_def,
6482 mul_lzero, DELETE_DELETE, add_lzero])
6483 >- METIS_TAC [extreal_of_num_def, extreal_lt_eq, lt_antisym, real_lt]
6484 >> RW_TAC std_ss [indicator_fn_def, IN_INTER, DELETE_DELETE, mul_rzero, add_lzero,
6485 IN_PREIMAGE, IN_SING, mul_rone]
6486 >> Suff `SIGMA (\i'. Normal (if 0 <= c i' then c i' else 0) *
6487 if c i = c i' then 1 else 0) (count n DELETE i) = 0`
6488 >- RW_TAC std_ss [add_rzero]
6489 >> MATCH_MP_TAC EXTREAL_SUM_IMAGE_0
6490 >> reverse (RW_TAC std_ss [FINITE_DELETE, mul_rone, mul_rzero])
6491 >- RW_TAC std_ss [extreal_of_num_def]
6492 >> METIS_TAC [IN_DELETE],
6493 (* goal 2 (of 4) *)
6494 RW_TAC real_ss [],
6495 (* goal 3 (of 4) *)
6496 FULL_SIMP_TAC std_ss [DISJOINT_DEF, IN_INTER, NOT_IN_EMPTY, IN_PREIMAGE, EXTENSION, IN_SING]
6497 >> METIS_TAC [],
6498 (* goal 4 (of 4) *)
6499 RW_TAC std_ss [EXTENSION, IN_BIGUNION_IMAGE, IN_PREIMAGE, IN_SING, IN_INTER]
6500 >> FULL_SIMP_TAC std_ss [BIJ_DEF, INJ_DEF, SURJ_DEF]
6501 >> METIS_TAC [IN_IMAGE] ])
6502 >> DISCH_TAC
6503 >> Know `pos_simple_fn m (fn_minus f)
6504 (count n) (\i. PREIMAGE f {Normal (c i)} INTER m_space m)
6505 (\i. if c i <= 0 then ~(c i) else 0)`
6506 >- (RW_TAC std_ss [pos_simple_fn_def, FINITE_COUNT, FN_PLUS_POS, FN_MINUS_POS] >| (* 4 subgoals *)
6507 [ (* goal 1 (of 4) *)
6508 reverse (RW_TAC real_ss [fn_minus_def])
6509 >- (FULL_SIMP_TAC std_ss [extreal_lt_def, indicator_fn_def, IN_INTER]
6510 >> (MP_TAC o Q.SPEC `(\i. Normal (if c i <= 0 then -c i else 0) *
6511 if t IN PREIMAGE f {Normal (c i)} then 1 else 0)` o
6512 UNDISCH o Q.ISPEC `count n`) EXTREAL_SUM_IMAGE_IN_IF
6513 >> Know `(!x. x IN count n ==>
6514 (\i. Normal (if c i <= 0 then (-c i) else 0) *
6515 if t IN PREIMAGE f {Normal (c i)} then 1 else 0) x <> NegInf)`
6516 >- (GEN_TAC >> DISCH_TAC >> BETA_TAC \\
6517 MATCH_MP_TAC pos_not_neginf \\
6518 Cases_on `~(c x <= 0)` >- fs [GSYM extreal_of_num_def, mul_lzero, le_refl] \\
6519 fs [] \\
6520 Cases_on `t NOTIN (PREIMAGE f {Normal (c x)})` >- fs [mul_rzero, le_refl] \\
6521 fs [mul_rone] >> fs [extreal_le_eq, extreal_of_num_def])
6522 >> RW_TAC std_ss [] >> POP_ASSUM K_TAC
6523 >> Suff `(\x. if x IN count n then Normal (if c x <= 0 then -c x else 0) *
6524 if t IN PREIMAGE f {Normal (c x)} then 1 else 0 else 0) = (\x. 0)`
6525 >- RW_TAC std_ss [EXTREAL_SUM_IMAGE_ZERO]
6526 >> RW_TAC std_ss [FUN_EQ_THM]
6527 >> Cases_on `~(x IN count n)`
6528 >- RW_TAC std_ss []
6529 >> reverse (RW_TAC std_ss [mul_rone, mul_rzero])
6530 >- RW_TAC std_ss [extreal_of_num_def]
6531 >> FULL_SIMP_TAC std_ss [BIJ_DEF, INJ_DEF, SURJ_DEF, IN_COUNT, IN_IMAGE,
6532 IN_PREIMAGE, IN_SING]
6533 >> METIS_TAC [REAL_LE_ANTISYM, extreal_of_num_def, REAL_NEG_0,
6534 extreal_le_def, IN_COUNT])
6535 >> FULL_SIMP_TAC std_ss [BIJ_DEF, INJ_DEF, SURJ_DEF, IN_IMAGE]
6536 >> `?i. i IN count n /\ (f t = Normal (c i))` by METIS_TAC []
6537 >> `count n = i INSERT ((count n) DELETE i)`
6538 by (RW_TAC std_ss [EXTENSION, IN_INSERT, IN_DELETE] >> METIS_TAC [])
6539 >> POP_ORW
6540 >> Know `!x. x IN (i INSERT count n DELETE i) ==>
6541 (\i. Normal (if c i <= 0 then (-c i) else 0) *
6542 indicator_fn (PREIMAGE f {Normal (c i)} INTER m_space m) t) x <> NegInf`
6543 >- (GEN_TAC >> DISCH_TAC >> BETA_TAC \\
6544 MATCH_MP_TAC pos_not_neginf \\
6545 `0 <= indicator_fn (PREIMAGE f {Normal (c x)} INTER m_space m) t`
6546 by PROVE_TAC [INDICATOR_FN_POS] \\
6547 Suff `0 <= Normal (if c x <= 0 then (-c x) else 0)` >- PROVE_TAC [le_mul] \\
6548 Suff `0 <= if c x <= 0 then (-c x) else 0`
6549 >- PROVE_TAC [extreal_of_num_def, extreal_le_eq] \\
6550 Cases_on `c x <= 0` >> fs [] >> PROVE_TAC [])
6551 >> reverse (RW_TAC std_ss [EXTREAL_SUM_IMAGE_THM, FINITE_DELETE, GSYM extreal_of_num_def,
6552 mul_lzero, DELETE_DELETE, add_lzero])
6553 >- METIS_TAC [extreal_lt_eq, real_lt, extreal_of_num_def, lt_antisym]
6554 >> RW_TAC std_ss [indicator_fn_def, IN_INTER, DELETE_DELETE, mul_rzero,
6555 add_lzero, IN_PREIMAGE, IN_SING, mul_rone]
6556 >> Suff `SIGMA (\i'. Normal (if c i' <= 0 then -c i' else 0) *
6557 if c i = c i' then 1 else 0) (count n DELETE i) = 0`
6558 >- METIS_TAC [add_rzero, extreal_ainv_def]
6559 >> MATCH_MP_TAC EXTREAL_SUM_IMAGE_0
6560 >> reverse (RW_TAC std_ss [FINITE_DELETE, mul_rone, mul_rzero])
6561 >- RW_TAC std_ss [extreal_of_num_def]
6562 >> METIS_TAC [IN_DELETE],
6563 (* goal 2 (of 4) *)
6564 RW_TAC real_ss [] >> METIS_TAC [REAL_LE_NEG, REAL_NEG_0],
6565 (* goal 3 (of 4) *)
6566 FULL_SIMP_TAC std_ss [DISJOINT_DEF, IN_INTER, NOT_IN_EMPTY, IN_PREIMAGE, EXTENSION, IN_SING]
6567 >> METIS_TAC [],
6568 (* goal 4 (of 4) *)
6569 RW_TAC std_ss [EXTENSION, IN_BIGUNION_IMAGE, IN_PREIMAGE, IN_SING, IN_INTER]
6570 >> FULL_SIMP_TAC std_ss [BIJ_DEF, INJ_DEF, SURJ_DEF]
6571 >> METIS_TAC [IN_IMAGE] ])
6572 >> DISCH_TAC
6573 >> RW_TAC std_ss [finite_space_integral_def]
6574 >> `pos_fn_integral m (fn_plus f) =
6575 pos_simple_fn_integral m (count n) (\i. PREIMAGE f {Normal (c i)} INTER m_space m)
6576 (\i. if 0 <= c i then c i else 0)`
6577 by METIS_TAC [pos_fn_integral_pos_simple_fn]
6578 >> `pos_fn_integral m (fn_minus f) =
6579 pos_simple_fn_integral m (count n) (\i. PREIMAGE f {Normal (c i)} INTER m_space m)
6580 (\i. if c i <= 0 then -c i else 0)`
6581 by METIS_TAC [pos_fn_integral_pos_simple_fn]
6582 >> FULL_SIMP_TAC std_ss [integral_def, pos_simple_fn_integral_def]
6583 >> Know `!x. (PREIMAGE f {x}) INTER (m_space m) IN (measurable_sets m)`
6584 >- (fs [IN_MEASURABLE, space_def, subsets_def] \\
6585 GEN_TAC >> FIRST_X_ASSUM MATCH_MP_TAC \\
6586 REWRITE_TAC [BOREL_MEASURABLE_SETS_SING])
6587 >> DISCH_TAC
6588 >> Know `!x. measure m (PREIMAGE f {x} INTER m_space m) < PosInf`
6589 >- (GEN_TAC >> MATCH_MP_TAC let_trans \\
6590 Q.EXISTS_TAC `measure m (m_space m)` >> art [] \\
6591 MATCH_MP_TAC INCREASING >> art [INTER_SUBSET] \\
6592 PROVE_TAC [MEASURE_SPACE_MSPACE_MEASURABLE, MEASURE_SPACE_INCREASING])
6593 >> DISCH_TAC
6594 (* applying EXTREAL_SUM_IMAGE_SUB *)
6595 >> Know `SIGMA (\i. Normal (if 0 <= c i then c i else 0) *
6596 measure m (PREIMAGE f {Normal (c i)} INTER m_space m)) (count n) -
6597 SIGMA (\i. Normal (if c i <= 0 then (-c i) else 0) *
6598 measure m (PREIMAGE f {Normal (c i)} INTER m_space m)) (count n) =
6599 SIGMA (\x. (\i. Normal (if 0 <= c i then c i else 0) *
6600 measure m (PREIMAGE f {Normal (c i)} INTER m_space m)) x -
6601 (\i. Normal (if c i <= 0 then (-c i) else 0) *
6602 measure m (PREIMAGE f {Normal (c i)} INTER m_space m)) x) (count n)`
6603 >- (MATCH_MP_TAC EQ_SYM \\
6604 irule EXTREAL_SUM_IMAGE_SUB >> art [] \\
6605 DISJ1_TAC \\ (* or DISJ2_TAC, doesn't matter *)
6606 GEN_TAC >> DISCH_TAC >> BETA_TAC \\
6607 CONJ_TAC
6608 >- (MATCH_MP_TAC pos_not_neginf \\
6609 `0 <= if 0 <= c x then c x else 0` by SRW_TAC [] [] \\
6610 `0 <= Normal (if 0 <= c x then c x else 0)`
6611 by PROVE_TAC [extreal_of_num_def, extreal_le_eq] \\
6612 Suff `0 <= measure m (PREIMAGE f {Normal (c x)} INTER m_space m)` >- METIS_TAC [le_mul] \\
6613 Suff `(PREIMAGE f {Normal (c x)} INTER m_space m) IN measurable_sets m`
6614 >- PROVE_TAC [measure_space_def, positive_def, measure_def] \\
6615 fs [IN_MEASURABLE]) \\
6616 Cases_on `0 < c x`
6617 >- (`~(c x <= 0)` by METIS_TAC [real_lte] \\
6618 fs [GSYM extreal_of_num_def, mul_lzero] \\
6619 fs [extreal_of_num_def, extreal_not_infty]) \\
6620 `c x <= 0` by METIS_TAC [real_lte] >> fs [] \\
6621 `0 <= -c x` by PROVE_TAC [REAL_NEG_GE0] \\
6622 METIS_TAC [mul_not_infty, lt_infty]) >> Rewr'
6623 >> BETA_TAC
6624 >> Know `!x. Normal (if 0 <= c x then c x else 0) *
6625 measure m (PREIMAGE f {Normal (c x)} INTER m_space m) -
6626 Normal (if c x <= 0 then (-c x) else 0) *
6627 measure m (PREIMAGE f {Normal (c x)} INTER m_space m) =
6628 Normal ((if 0 <= c x then c x else 0) - if c x <= 0 then (-c x) else 0) *
6629 measure m (PREIMAGE f {Normal (c x)} INTER m_space m)`
6630 >- (GEN_TAC >> REWRITE_TAC [GSYM extreal_sub_def] \\
6631 MATCH_MP_TAC EQ_SYM \\
6632 MATCH_MP_TAC sub_rdistrib \\
6633 REWRITE_TAC [extreal_not_infty] \\
6634 CONJ_TAC
6635 >- (MATCH_MP_TAC pos_not_neginf \\
6636 IMP_RES_TAC MEASURE_SPACE_POSITIVE >> PROVE_TAC [positive_def]) \\
6637 PROVE_TAC [lt_infty]) >> Rewr'
6638 >> `!x. ((if 0 <= c x then c x else 0) - if c x <= 0 then -c x else 0) = c x`
6639 by (RW_TAC real_ss []
6640 >> METIS_TAC [REAL_LE_ANTISYM, REAL_ADD_RID, real_lt, REAL_LT_ANTISYM])
6641 >> POP_ORW
6642 >> (MP_TAC o Q.ISPEC `c1:num->extreal` o UNDISCH o Q.ISPEC `count n`)
6643 EXTREAL_SUM_IMAGE_IMAGE
6644 >> Know `INJ c1 (count n) (IMAGE c1 (count n))`
6645 >- (FULL_SIMP_TAC std_ss [BIJ_DEF, INJ_DEF, IN_IMAGE] >> METIS_TAC [])
6646 >> SIMP_TAC std_ss []
6647 >> NTAC 2 STRIP_TAC
6648 >> POP_ASSUM (MP_TAC o Q.SPEC `(\r. r * (measure m (PREIMAGE f {r} INTER m_space m)))`)
6649 >> SIMP_TAC std_ss [o_DEF]
6650 >> `(IMAGE c1 (count n)) = (IMAGE f (m_space m))`
6651 by (ONCE_REWRITE_TAC [EXTENSION] >> RW_TAC std_ss [IN_IMAGE]
6652 >> FULL_SIMP_TAC std_ss [BIJ_DEF, INJ_DEF, SURJ_DEF, IN_IMAGE]
6653 >> METIS_TAC []) >> art []
6654 >> Know `!x. x IN IMAGE f (m_space m) ==>
6655 x * measure m (PREIMAGE f {x} INTER m_space m) <> PosInf`
6656 >- (RW_TAC std_ss [IN_IMAGE] \\
6657 `f x' <> PosInf /\ f x' <> NegInf` by PROVE_TAC [] \\
6658 `?r. f x' = Normal r` by PROVE_TAC [extreal_cases] >> art [] \\
6659 Cases_on `0 <= r` >- METIS_TAC [mul_not_infty, lt_infty] \\
6660 `r <= 0` by PROVE_TAC [REAL_NOT_LE, REAL_LT_IMP_LE] \\
6661 Suff `measure m (PREIMAGE f {Normal r} INTER m_space m) <> NegInf`
6662 >- METIS_TAC [mul_not_infty] \\
6663 MATCH_MP_TAC pos_not_neginf \\
6664 IMP_RES_TAC MEASURE_SPACE_POSITIVE \\
6665 METIS_TAC [positive_def])
6666 >> RW_TAC std_ss []
6667 >> (MATCH_MP_TAC o UNDISCH o Q.SPEC `count n` o INST_TYPE [``:'a`` |-> ``:num``])
6668 EXTREAL_SUM_IMAGE_EQ
6669 >> RW_TAC std_ss []
6670 >> DISJ2_TAC >> GEN_TAC >> DISCH_TAC
6671 >> Cases_on `0 <= c x` >- METIS_TAC [mul_not_infty, lt_infty]
6672 >> `c x <= 0` by PROVE_TAC [REAL_NOT_LE, REAL_LT_IMP_LE]
6673 >> Suff `measure m (PREIMAGE f {Normal (c x)} INTER m_space m) <> NegInf`
6674 >- METIS_TAC [mul_not_infty]
6675 >> MATCH_MP_TAC pos_not_neginf
6676 >> Know ‘positive m’ >- simp [MEASURE_SPACE_POSITIVE]
6677 >> rw [positive_def]
6678QED
6679
6680(* special case of "finite_support_integral_reduce": (m_space m) is finite.
6681
6682 added `measure m (m_space m) < PosInf` into antecedents.
6683 FIXME: remove `integrable m f` and prove it.
6684 *)
6685Theorem finite_space_integral_reduce :
6686 !m f. measure_space m /\ f IN measurable (m_space m,measurable_sets m) Borel /\
6687 (!x. x IN m_space m ==> f x <> NegInf /\ f x <> PosInf) /\
6688 FINITE (m_space m) /\ measure m (m_space m) < PosInf /\
6689 integrable m f
6690 ==> (integral m f = finite_space_integral m f)
6691Proof
6692 rpt STRIP_TAC
6693 >> `FINITE (IMAGE f (m_space m))` by PROVE_TAC [IMAGE_FINITE]
6694 >> MATCH_MP_TAC finite_support_integral_reduce >> art []
6695QED
6696
6697(* No need to have PREIMAGE if `POW (m_space m) = measurable_sets m`.
6698
6699 Added `measure m (m_space m) < PosInf` into antecedents
6700 *)
6701Theorem finite_space_POW_integral_reduce :
6702 !m f. measure_space m /\ (POW (m_space m) = measurable_sets m) /\
6703 FINITE (m_space m) /\
6704 (!x. x IN m_space m ==> f x <> NegInf /\ f x <> PosInf) /\
6705 measure m (m_space m) < PosInf ==>
6706 (integral m f = SIGMA (\x. f x * (measure m {x})) (m_space m))
6707Proof
6708 RW_TAC std_ss []
6709 >> ‘sigma_algebra (measurable_space m)’
6710 by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA]
6711 >> `f IN measurable (m_space m, measurable_sets m) Borel`
6712 by (RW_TAC std_ss [IN_MEASURABLE_BOREL,IN_FUNSET,IN_UNIV,space_def,subsets_def]
6713 >> METIS_TAC [INTER_SUBSET,IN_POW])
6714 >> `?c n. BIJ c (count n) (m_space m)` by RW_TAC std_ss [GSYM FINITE_BIJ_COUNT_EQ]
6715 >> `FINITE (count n)` by RW_TAC std_ss [FINITE_COUNT]
6716 >> `?x. !i. (i IN count n ==> (f (c i) = Normal (x i)))`
6717 by (Q.EXISTS_TAC `(\i. @r. f (c i) = Normal r)`
6718 >> RW_TAC std_ss []
6719 >> SELECT_ELIM_TAC
6720 >> RW_TAC std_ss []
6721 >> FULL_SIMP_TAC std_ss [BIJ_DEF, INJ_DEF, SURJ_DEF, IN_IMAGE]
6722 >> METIS_TAC [extreal_cases])
6723 >> `!i. i IN count n ==> {c i } IN measurable_sets m`
6724 by METIS_TAC [IN_POW, IN_SING, BIJ_DEF, SURJ_DEF, SUBSET_DEF]
6725 >> Know `pos_simple_fn m (fn_plus f)
6726 (count n) (\i. {c i}) (\i. if 0 <= x i then x i else 0)`
6727 >- (RW_TAC std_ss [pos_simple_fn_def, FINITE_COUNT, FN_PLUS_POS, FN_MINUS_POS] >| (* 4 subgoals *)
6728 [ (* goal 1 (of 4) *)
6729 reverse (RW_TAC real_ss [fn_plus_def])
6730 >- (FULL_SIMP_TAC std_ss [extreal_lt_def, IN_INTER] \\
6731 (MP_TAC o Q.SPEC `(\i. Normal (if 0 <= x i then x i else 0) *
6732 indicator_fn {c i} t)` o
6733 UNDISCH o Q.ISPEC `count n`) EXTREAL_SUM_IMAGE_IN_IF \\
6734 Know `!x'. x' IN count n ==>
6735 (\i. Normal (if 0 <= x i then x i else 0) *
6736 indicator_fn {c i} t) x' <> NegInf`
6737 >- (GEN_TAC >> DISCH_TAC >> BETA_TAC >> rename1 `i IN count n` \\
6738 MATCH_MP_TAC pos_not_neginf \\
6739 Cases_on `~(0 <= x i)` >- fs [GSYM extreal_of_num_def, mul_lzero, le_refl] \\
6740 fs [] \\
6741 MATCH_MP_TAC le_mul \\
6742 CONJ_TAC >- fs [extreal_le_eq, extreal_of_num_def] \\
6743 REWRITE_TAC [INDICATOR_FN_POS]) \\
6744 RW_TAC std_ss [] >> POP_ASSUM K_TAC \\
6745 Suff `(\x'. if x' IN count n then Normal (if 0 <= x x' then x x' else 0) *
6746 indicator_fn {c x'} t else 0) = (\x. 0)`
6747 >- RW_TAC std_ss [EXTREAL_SUM_IMAGE_ZERO] \\
6748 RW_TAC std_ss [FUN_EQ_THM] \\
6749 Cases_on `~(x' IN count n)` >- RW_TAC std_ss [] \\
6750 reverse (RW_TAC std_ss [mul_rone, mul_rzero])
6751 >- RW_TAC std_ss [GSYM extreal_of_num_def, mul_lzero] \\
6752 rename1 `i IN count n` \\
6753 Cases_on `c i <> t` >- PROVE_TAC [INDICATOR_FN_SING_0, mul_rzero] \\
6754 fs [INDICATOR_FN_SING_1, mul_rone] \\
6755 `f t = Normal (x i)` by PROVE_TAC [] \\
6756 `0 <= f t` by PROVE_TAC [extreal_le_eq, extreal_of_num_def] \\
6757 `f t = 0` by PROVE_TAC [le_antisym, extreal_lt_def] \\
6758 fs [])
6759 >> FULL_SIMP_TAC std_ss [BIJ_DEF, INJ_DEF, SURJ_DEF, IN_IMAGE]
6760 >> `?i. i IN count n /\ (t = c i)` by METIS_TAC []
6761 >> FULL_SIMP_TAC std_ss []
6762 >> `count n = i INSERT ((count n) DELETE i)`
6763 by (RW_TAC std_ss [EXTENSION, IN_INSERT, IN_DELETE] >> METIS_TAC [])
6764 >> POP_ORW
6765 >> Know `!x'. x' IN (i INSERT count n DELETE i) ==>
6766 (\i'. Normal (if 0 <= x i' then x i' else 0) *
6767 indicator_fn {c i'} (c i)) x' <> NegInf`
6768 >- (GEN_TAC >> DISCH_TAC >> BETA_TAC \\
6769 MATCH_MP_TAC pos_not_neginf \\
6770 MATCH_MP_TAC le_mul >> REWRITE_TAC [INDICATOR_FN_POS] \\
6771 METIS_TAC [extreal_le_eq, extreal_of_num_def, le_refl])
6772 >> reverse (RW_TAC std_ss [EXTREAL_SUM_IMAGE_THM, FINITE_DELETE, GSYM extreal_of_num_def,
6773 mul_lzero, DELETE_DELETE, add_lzero])
6774 >- METIS_TAC [extreal_of_num_def, extreal_lt_eq, lt_antisym, real_lt]
6775 >> RW_TAC std_ss [indicator_fn_def, IN_INTER, DELETE_DELETE, mul_rzero, add_lzero,
6776 IN_PREIMAGE, IN_SING, mul_rone]
6777 >> Suff `SIGMA (\i'. Normal (if 0 <= x i' then x i' else 0) *
6778 if c i = c i' then 1 else 0) (count n DELETE i) = 0`
6779 >- RW_TAC std_ss [add_rzero]
6780 >> MATCH_MP_TAC EXTREAL_SUM_IMAGE_0
6781 >> reverse (RW_TAC std_ss [FINITE_DELETE, mul_rone, mul_rzero])
6782 >- RW_TAC std_ss [extreal_of_num_def]
6783 >> METIS_TAC [IN_DELETE],
6784 (* goal 2 (of 4) *)
6785 RW_TAC real_ss [],
6786 (* goal 3 (of 4) *)
6787 FULL_SIMP_TAC std_ss [DISJOINT_DEF, IN_INTER, NOT_IN_EMPTY, IN_PREIMAGE, EXTENSION,
6788 IN_SING, BIJ_DEF, INJ_DEF]
6789 >> METIS_TAC [],
6790 (* goal 4 (of 4) *)
6791 RW_TAC std_ss [EXTENSION, IN_BIGUNION_IMAGE, IN_PREIMAGE, IN_SING, IN_INTER]
6792 >> FULL_SIMP_TAC std_ss [BIJ_DEF, INJ_DEF, SURJ_DEF]
6793 >> METIS_TAC [IN_IMAGE] ])
6794 >> DISCH_TAC
6795 >> Know `pos_simple_fn m (fn_minus f)
6796 (count n) (\i. {c i}) (\i. if x i <= 0 then -(x i) else 0)`
6797 >- (RW_TAC std_ss [pos_simple_fn_def, FINITE_COUNT, FN_MINUS_POS, FN_MINUS_POS] >| (* 4 subgoals *)
6798 [ (* goal 1 (of 4) *)
6799 reverse (RW_TAC real_ss [fn_minus_def])
6800 >- (FULL_SIMP_TAC std_ss [extreal_lt_def, IN_INTER]
6801 >> (MP_TAC o Q.SPEC `(\i. Normal (if x i <= 0 then -x i else 0) *
6802 indicator_fn {c i} t)` o
6803 UNDISCH o Q.ISPEC `count n`) EXTREAL_SUM_IMAGE_IN_IF
6804 >> Know `!x'. x' IN count n ==>
6805 (\i. Normal (if x i <= 0 then (-x i) else 0) *
6806 indicator_fn {c i} t) x' <> NegInf`
6807 >- (GEN_TAC >> DISCH_TAC >> BETA_TAC \\
6808 MATCH_MP_TAC pos_not_neginf \\
6809 Cases_on `~(x x' <= 0)` >- fs [GSYM extreal_of_num_def, mul_lzero, le_refl] \\
6810 fs [] \\
6811 MATCH_MP_TAC le_mul >> REWRITE_TAC [INDICATOR_FN_POS] \\
6812 `0 <= -(x x')` by PROVE_TAC [REAL_LE_NEG, REAL_NEG_0] \\
6813 fs [extreal_le_eq, extreal_of_num_def])
6814 >> RW_TAC std_ss [] >> POP_ASSUM K_TAC
6815 >> Suff `(\x'. if x' IN count n then Normal (if x x' <= 0 then -(x x') else 0) *
6816 indicator_fn {c x'} t else 0) = (\x. 0)`
6817 >- RW_TAC std_ss [EXTREAL_SUM_IMAGE_ZERO]
6818 >> RW_TAC std_ss [FUN_EQ_THM]
6819 >> Cases_on `~(x' IN count n)` >- RW_TAC std_ss []
6820 >> reverse (RW_TAC std_ss [mul_rone, mul_rzero])
6821 >- RW_TAC std_ss [GSYM extreal_of_num_def, mul_lzero]
6822 >> rename1 `i IN count n`
6823 >> Cases_on `c i <> t` >- PROVE_TAC [INDICATOR_FN_SING_0, mul_rzero]
6824 >> fs [INDICATOR_FN_SING_1, mul_rone]
6825 >> `f t = Normal (x i)` by PROVE_TAC []
6826 >> `f t <= 0` by PROVE_TAC [extreal_le_eq, extreal_of_num_def]
6827 >> `f t = 0` by PROVE_TAC [le_antisym]
6828 >> `x i = 0` by PROVE_TAC [extreal_of_num_def, extreal_11]
6829 >> `-x i = 0` by PROVE_TAC [REAL_NEG_0]
6830 >> METIS_TAC [extreal_of_num_def])
6831 >> FULL_SIMP_TAC std_ss [BIJ_DEF, INJ_DEF, SURJ_DEF, IN_IMAGE]
6832 >> `?i. i IN count n /\ (t = c i)` by METIS_TAC []
6833 >> FULL_SIMP_TAC std_ss []
6834 >> `count n = i INSERT ((count n) DELETE i)`
6835 by (RW_TAC std_ss [EXTENSION, IN_INSERT, IN_DELETE] >> METIS_TAC [])
6836 >> POP_ORW
6837 >> Know `!x'. x' IN (i INSERT count n DELETE i) ==>
6838 (\i'. Normal (if x i' <= 0 then -x i' else 0) *
6839 indicator_fn {c i'} (c i)) x' <> NegInf`
6840 >- (GEN_TAC >> DISCH_TAC >> BETA_TAC \\
6841 MATCH_MP_TAC pos_not_neginf \\
6842 MATCH_MP_TAC le_mul >> REWRITE_TAC [INDICATOR_FN_POS] \\
6843 Cases_on `x x' <= 0`
6844 >- (ASM_SIMP_TAC std_ss [] \\
6845 `0 <= -x x'` by PROVE_TAC [REAL_LE_NEG, REAL_NEG_0] \\
6846 PROVE_TAC [extreal_of_num_def, extreal_le_eq]) \\
6847 ASM_SIMP_TAC std_ss [GSYM extreal_of_num_def, le_refl])
6848 >> reverse (RW_TAC std_ss [EXTREAL_SUM_IMAGE_THM, FINITE_DELETE, GSYM extreal_of_num_def,
6849 mul_lzero, DELETE_DELETE, add_lzero])
6850 >- METIS_TAC [extreal_of_num_def, extreal_lt_eq, lt_antisym, real_lt]
6851 >> RW_TAC std_ss [indicator_fn_def, IN_INTER, DELETE_DELETE, mul_rzero, add_lzero,
6852 IN_PREIMAGE, IN_SING, mul_rone]
6853 >> Suff `SIGMA (\i'. Normal (if x i' <= 0 then -(x i') else 0) *
6854 if c i = c i' then 1 else 0) (count n DELETE i) = 0`
6855 >- RW_TAC std_ss [add_rzero, extreal_ainv_def]
6856 >> MATCH_MP_TAC EXTREAL_SUM_IMAGE_0
6857 >> reverse (RW_TAC std_ss [FINITE_DELETE, mul_rone, mul_rzero])
6858 >- RW_TAC std_ss [extreal_of_num_def]
6859 >> METIS_TAC [IN_DELETE],
6860 (* goal 2 (of 4) *)
6861 METIS_TAC [REAL_LE_REFL, REAL_LE_NEG, REAL_NEG_0],
6862 (* goal 3 (of 4) *)
6863 FULL_SIMP_TAC std_ss [DISJOINT_DEF, IN_INTER, NOT_IN_EMPTY, IN_PREIMAGE, EXTENSION,
6864 IN_SING, BIJ_DEF, INJ_DEF]
6865 >> METIS_TAC [],
6866 (* goal 4 (of 4) *)
6867 RW_TAC std_ss [EXTENSION, IN_BIGUNION_IMAGE, IN_PREIMAGE, IN_SING, IN_INTER]
6868 >> FULL_SIMP_TAC std_ss [BIJ_DEF, INJ_DEF, SURJ_DEF]
6869 >> METIS_TAC [IN_IMAGE] ])
6870 >> DISCH_TAC
6871 >> RW_TAC std_ss [integral_def]
6872 >> (MP_TAC o Q.SPECL [`m`,`fn_plus f`,`count n`,`(\i. {c i})`,
6873 `(\i. if 0 <= x i then x i else 0)`]) pos_fn_integral_pos_simple_fn
6874 >> (MP_TAC o Q.SPECL [`m`,`fn_minus f`,`count n`,`(\i. {c i})`,
6875 `(\i. if x i <= 0 then -(x i) else 0)`]) pos_fn_integral_pos_simple_fn
6876 >> RW_TAC std_ss [pos_simple_fn_integral_def, extreal_sub_def, GSYM REAL_SUM_IMAGE_SUB,
6877 GSYM REAL_SUB_RDISTRIB]
6878 >> `!x. ((if 0 <= x i then x i else 0) - if x i <= 0:real then -(x i) else 0) = x i`
6879 by (RW_TAC real_ss [REAL_SUB_RNEG]
6880 >> METIS_TAC [REAL_LE_ANTISYM, REAL_ADD_RID, real_lt, REAL_LT_ANTISYM])
6881 >> RW_TAC std_ss []
6882 >> (MP_TAC o Q.ISPEC `c:num->'a` o UNDISCH o Q.ISPEC `count n`) EXTREAL_SUM_IMAGE_IMAGE
6883 >> Know `INJ c (count n) (IMAGE c (count n))`
6884 >- (FULL_SIMP_TAC std_ss [BIJ_DEF, INJ_DEF, IN_IMAGE] >> METIS_TAC [])
6885 >> `(IMAGE c (count n)) = (m_space m)`
6886 by (ONCE_REWRITE_TAC [EXTENSION] >> RW_TAC std_ss [IN_IMAGE]
6887 >> FULL_SIMP_TAC std_ss [BIJ_DEF, INJ_DEF, SURJ_DEF, IN_IMAGE]
6888 >> METIS_TAC [])
6889 >> RW_TAC std_ss []
6890 >> POP_ASSUM (MP_TAC o Q.SPEC `(\x. f x * (measure m {x}))`)
6891 >> Know `!x. x IN m_space m ==> f x * measure m {x} <> PosInf`
6892 >- (Q.PAT_ASSUM `IMAGE c (count n) = m_space m` (ONCE_REWRITE_TAC o wrap o SYM) \\
6893 RW_TAC std_ss [IN_IMAGE] >> rename1 `j IN count n` \\
6894 `{c j} IN measurable_sets m` by METIS_TAC [IN_POW, SUBSET_DEF, IN_SING, IN_IMAGE] \\
6895 `(c j) IN m_space m` by METIS_TAC [IN_IMAGE] \\
6896 Know `measure m {c j} <> NegInf`
6897 >- (MATCH_MP_TAC pos_not_neginf >> PROVE_TAC [measure_space_def, positive_def]) \\
6898 Know `measure m {c j} <> PosInf`
6899 >- (REWRITE_TAC [lt_infty] >> MATCH_MP_TAC let_trans \\
6900 Q.EXISTS_TAC `measure m (m_space m)` >> art [] \\
6901 MATCH_MP_TAC INCREASING >> art [] \\
6902 CONJ_TAC >- PROVE_TAC [MEASURE_SPACE_INCREASING] \\
6903 CONJ_TAC >- PROVE_TAC [SUBSET_DEF, IN_SING] \\
6904 IMP_RES_TAC MEASURE_SPACE_MSPACE_MEASURABLE) \\
6905 NTAC 2 DISCH_TAC \\
6906 METIS_TAC [mul_not_infty2])
6907 >> RW_TAC std_ss [o_DEF]
6908 (* applying EXTREAL_SUM_IMAGE_SUB *)
6909 >> Know `SIGMA (\i. Normal (if 0 <= x i then x i else 0) * measure m {c i}) (count n) -
6910 SIGMA (\i. Normal (if x i <= 0 then (-x i) else 0) * measure m {c i}) (count n) =
6911 SIGMA (\j. (\i. Normal (if 0 <= x i then x i else 0) * measure m {c i}) j -
6912 (\i. Normal (if x i <= 0 then (-x i) else 0) *
6913 measure m {c i}) j) (count n)`
6914 >- (MATCH_MP_TAC EQ_SYM \\
6915 irule EXTREAL_SUM_IMAGE_SUB >> art [] \\
6916 DISJ1_TAC \\ (* or DISJ2_TAC, doesn't matter *)
6917 GEN_TAC >> DISCH_TAC >> BETA_TAC >> rename1 `j IN count n` \\
6918 CONJ_TAC
6919 >- (MATCH_MP_TAC pos_not_neginf \\
6920 `0 <= if 0 <= x j then x j else 0` by SRW_TAC [] [] \\
6921 `0 <= Normal (if 0 <= x j then x j else 0)`
6922 by PROVE_TAC [extreal_of_num_def, extreal_le_eq] \\
6923 MATCH_MP_TAC le_mul >> art [] \\
6924 Suff `{c j} IN measurable_sets m`
6925 >- PROVE_TAC [measure_space_def, positive_def, measure_def] \\
6926 METIS_TAC [IN_POW, SUBSET_DEF, IN_SING, IN_IMAGE]) \\
6927 Cases_on `0 < x j`
6928 >- (`~(x j <= 0)` by METIS_TAC [real_lte] \\
6929 fs [GSYM extreal_of_num_def, mul_lzero] \\
6930 fs [extreal_of_num_def, extreal_not_infty]) \\
6931 `x j <= 0` by METIS_TAC [real_lte] >> fs [] \\
6932 `0 <= -x j` by PROVE_TAC [REAL_NEG_GE0] \\
6933 Suff `measure m {c j} <> PosInf` >- METIS_TAC [mul_not_infty] \\
6934 REWRITE_TAC [lt_infty] \\
6935 MATCH_MP_TAC let_trans \\
6936 Q.EXISTS_TAC `measure m (m_space m)` >> art [] \\
6937 MATCH_MP_TAC INCREASING >> art [] \\
6938 CONJ_TAC >- PROVE_TAC [MEASURE_SPACE_INCREASING] \\
6939 `(c j) IN m_space m` by METIS_TAC [IN_IMAGE, IN_COUNT] \\
6940 CONJ_TAC >- PROVE_TAC [SUBSET_DEF, IN_SING] \\
6941 CONJ_TAC >- METIS_TAC [IN_POW, SUBSET_DEF, IN_SING, IN_IMAGE] \\
6942 IMP_RES_TAC MEASURE_SPACE_MSPACE_MEASURABLE) >> Rewr'
6943 >> BETA_TAC
6944 >> Know `!j. j IN count n ==>
6945 (Normal (if 0 <= x j then x j else 0) * measure m {c j} -
6946 Normal (if x j <= 0 then (-x j) else 0) * measure m {c j} =
6947 Normal ((if 0 <= x j then x j else 0) - if x j <= 0 then (-x j) else 0) *
6948 measure m {c j})`
6949 >- (GEN_TAC >> DISCH_TAC \\
6950 REWRITE_TAC [GSYM extreal_sub_def] \\
6951 MATCH_MP_TAC EQ_SYM \\
6952 MATCH_MP_TAC sub_rdistrib \\
6953 REWRITE_TAC [extreal_not_infty] \\
6954 `{c j} IN measurable_sets m` by METIS_TAC [IN_POW, SUBSET_DEF, IN_SING, IN_IMAGE] \\
6955 CONJ_TAC
6956 >- (MATCH_MP_TAC pos_not_neginf \\
6957 IMP_RES_TAC MEASURE_SPACE_POSITIVE >> PROVE_TAC [positive_def]) \\
6958 REWRITE_TAC [lt_infty] \\
6959 MATCH_MP_TAC let_trans \\
6960 Q.EXISTS_TAC `measure m (m_space m)` >> art [] \\
6961 MATCH_MP_TAC INCREASING >> art [] \\
6962 CONJ_TAC >- PROVE_TAC [MEASURE_SPACE_INCREASING] \\
6963 `(c j) IN m_space m` by METIS_TAC [IN_IMAGE, IN_COUNT] \\
6964 CONJ_TAC >- PROVE_TAC [SUBSET_DEF, IN_SING] \\
6965 IMP_RES_TAC MEASURE_SPACE_MSPACE_MEASURABLE)
6966 >> DISCH_TAC
6967 >> `!j. ((if 0 <= x j then x j else 0) - if x j <= 0 then -x j else 0) = x j`
6968 by (RW_TAC real_ss []
6969 >> METIS_TAC [REAL_LE_ANTISYM, REAL_ADD_RID, real_lt, REAL_LT_ANTISYM])
6970 >> Know `SIGMA (\j. Normal (if 0 <= x j then x j else 0) * measure m {c j} -
6971 Normal (if x j <= 0 then (-x j) else 0) * measure m {c j}) (count n) =
6972 SIGMA (\j. Normal ((if 0 <= x j then x j else 0) - if x j <= 0 then -x j else 0) *
6973 measure m {c j}) (count n)`
6974 >- (irule EXTREAL_SUM_IMAGE_EQ >> BETA_TAC >> art [] \\
6975 DISJ2_TAC \\
6976 GEN_TAC >> DISCH_TAC >> rename1 `j IN count n` \\
6977 Q.PAT_X_ASSUM `!j. j IN count n ==> X`
6978 (fn th => (art [MATCH_MP th (ASSUME ``j IN count n``)])) \\
6979 Cases_on `0 <= x j`
6980 >- (Suff `measure m {c j} <> PosInf` >- METIS_TAC [mul_not_infty] \\
6981 REWRITE_TAC [lt_infty] \\
6982 MATCH_MP_TAC let_trans \\
6983 Q.EXISTS_TAC `measure m (m_space m)` >> art [] \\
6984 MATCH_MP_TAC INCREASING >> art [] \\
6985 CONJ_TAC >- PROVE_TAC [MEASURE_SPACE_INCREASING] \\
6986 `(c j) IN m_space m` by METIS_TAC [IN_IMAGE, IN_COUNT] \\
6987 CONJ_TAC >- PROVE_TAC [SUBSET_DEF, IN_SING] \\
6988 CONJ_TAC >- METIS_TAC [IN_POW, SUBSET_DEF, IN_SING, IN_IMAGE] \\
6989 IMP_RES_TAC MEASURE_SPACE_MSPACE_MEASURABLE) \\
6990 `x j <= 0` by PROVE_TAC [real_lte, REAL_LT_IMP_LE] \\
6991 Suff `measure m {c j} <> NegInf` >- METIS_TAC [mul_not_infty] \\
6992 MATCH_MP_TAC pos_not_neginf \\
6993 `{c j} IN measurable_sets m` by METIS_TAC [IN_POW, SUBSET_DEF, IN_SING, IN_IMAGE] \\
6994 IMP_RES_TAC MEASURE_SPACE_POSITIVE >> PROVE_TAC [positive_def])
6995 >> Rewr'
6996 >> ASM_REWRITE_TAC []
6997 >> (MATCH_MP_TAC o UNDISCH o Q.SPEC `count n` o INST_TYPE [``:'a`` |-> ``:num``])
6998 EXTREAL_SUM_IMAGE_EQ
6999 >> RW_TAC std_ss []
7000 >> DISJ2_TAC
7001 >> GEN_TAC >> DISCH_TAC >> rename1 `j IN count n`
7002 >> `{c j} IN measurable_sets m` by METIS_TAC [IN_POW, SUBSET_DEF, IN_SING, IN_IMAGE]
7003 >> `(c j) IN m_space m` by METIS_TAC [IN_IMAGE, IN_COUNT]
7004 >> Cases_on `0 <= x j`
7005 >- (Suff `measure m {c j} <> PosInf` >- METIS_TAC [mul_not_infty] \\
7006 REWRITE_TAC [lt_infty] \\
7007 MATCH_MP_TAC let_trans \\
7008 Q.EXISTS_TAC `measure m (m_space m)` >> art [] \\
7009 MATCH_MP_TAC INCREASING >> art [] \\
7010 CONJ_TAC >- PROVE_TAC [MEASURE_SPACE_INCREASING] \\
7011 CONJ_TAC >- PROVE_TAC [SUBSET_DEF, IN_SING] \\
7012 IMP_RES_TAC MEASURE_SPACE_MSPACE_MEASURABLE)
7013 >> `x j <= 0` by PROVE_TAC [real_lte, REAL_LT_IMP_LE]
7014 >> Suff `measure m {c j} <> NegInf` >- METIS_TAC [mul_not_infty]
7015 >> MATCH_MP_TAC pos_not_neginf
7016 >> IMP_RES_TAC MEASURE_SPACE_POSITIVE
7017 >> PROVE_TAC [positive_def]
7018QED
7019
7020Theorem measure_space_density :
7021 !m f. measure_space m /\ f IN measurable (m_space m,measurable_sets m) Borel /\
7022 (!x. x IN m_space m ==> 0 <= f x) ==> measure_space (density m f)
7023Proof
7024 Q.X_GEN_TAC ‘M’ >> rpt STRIP_TAC
7025 >> ‘sigma_algebra (measurable_space M)’
7026 by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA]
7027 >> SIMP_TAC std_ss [measure_space_def, density_measure_def, density_def,
7028 m_space_def, measurable_sets_def]
7029 >> Q.PAT_ASSUM `measure_space M`
7030 (STRIP_ASSUME_TAC o (REWRITE_RULE [measure_space_def]))
7031 >> RW_TAC std_ss []
7032 >- (FULL_SIMP_TAC std_ss [positive_def, measure_def, measurable_sets_def] \\
7033 CONJ_TAC
7034 >- (SIMP_TAC std_ss [indicator_fn_def, GSPECIFICATION, NOT_IN_EMPTY] \\
7035 ASM_SIMP_TAC std_ss [mul_rzero, pos_fn_integral_zero]) \\
7036 RW_TAC std_ss [] >> MATCH_MP_TAC pos_fn_integral_pos \\
7037 RW_TAC std_ss [] \\
7038 MATCH_MP_TAC le_mul >> ASM_SIMP_TAC std_ss [INDICATOR_FN_POS])
7039 (* countably_additive *)
7040 >> RW_TAC std_ss [countably_additive_def, measure_def, measurable_sets_def,
7041 IN_FUNSET, IN_UNIV]
7042 >> rename1 `!x. A x IN measurable_sets M`
7043 >> Q.PAT_ASSUM `countably_additive M`
7044 (ASSUME_TAC o (ONCE_REWRITE_RULE [GSYM MEASURE_SPACE_REDUCE]))
7045 >> FULL_SIMP_TAC std_ss [countably_additive_alt_eq]
7046 >> `!i. A i IN measurable_sets M` by ASM_SET_TAC []
7047 >> Know `!i. (\x. f x * indicator_fn (A i) x) IN measurable (m_space M,measurable_sets M) Borel`
7048 >- (GEN_TAC \\
7049 MATCH_MP_TAC IN_MEASURABLE_BOREL_MUL_INDICATOR \\
7050 ASM_SIMP_TAC std_ss [subsets_def])
7051 >> RW_TAC std_ss [o_DEF]
7052 >> Know `suminf (\x. pos_fn_integral M ((\x x'. f x' * indicator_fn (A x) x') x)) =
7053 pos_fn_integral M (\x'. suminf (\x. (\x x'. f x' * indicator_fn (A x) x') x x'))`
7054 >- (MATCH_MP_TAC (GSYM pos_fn_integral_suminf) \\
7055 ASM_SIMP_TAC std_ss [] \\
7056 rpt STRIP_TAC >> MATCH_MP_TAC le_mul \\
7057 ASM_SIMP_TAC std_ss [INDICATOR_FN_POS])
7058 >> ASM_SIMP_TAC std_ss [] >> DISC_RW_KILL
7059 >> Know `!y. y IN m_space M ==>
7060 (suminf (\x. (f y) * (\x. indicator_fn (A x) y) x) =
7061 (f y) * suminf (\x. indicator_fn (A x) y))`
7062 >- (GEN_TAC >> DISCH_TAC >> MATCH_MP_TAC ext_suminf_cmul \\
7063 ASM_SIMP_TAC std_ss [INDICATOR_FN_POS])
7064 >> SIMP_TAC std_ss [] >> DISCH_TAC
7065 >> Know ‘pos_fn_integral M (\x'. suminf (\x. f x' * indicator_fn (A x) x')) =
7066 pos_fn_integral M (\y. f y * suminf (\x. indicator_fn (A x) y))’
7067 >- (MATCH_MP_TAC pos_fn_integral_cong >> simp [] \\
7068 rpt STRIP_TAC >> MATCH_MP_TAC le_mul >> simp [] \\
7069 MATCH_MP_TAC ext_suminf_pos >> rw [INDICATOR_FN_POS]) >> Rewr'
7070 >> Know `!y. y IN m_space M ==>
7071 (suminf (\x. indicator_fn (A x) y) =
7072 indicator_fn (BIGUNION (IMAGE A UNIV)) y)`
7073 >- (GEN_TAC >> DISCH_TAC \\
7074 MATCH_MP_TAC indicator_fn_suminf >> art []) >> DISCH_TAC
7075 >> MATCH_MP_TAC pos_fn_integral_cong >> simp []
7076 >> rpt STRIP_TAC
7077 >> MATCH_MP_TAC le_mul >> simp [INDICATOR_FN_POS]
7078QED
7079
7080Theorem measure_space_density' :
7081 !M f. measure_space M /\ f IN measurable (m_space M,measurable_sets M) Borel
7082 ==> measure_space (density M (fn_plus f))
7083Proof
7084 rpt STRIP_TAC
7085 >> MATCH_MP_TAC measure_space_density >> art [FN_PLUS_POS]
7086 >> MATCH_MP_TAC IN_MEASURABLE_BOREL_FN_PLUS
7087 >> rw [MEASURE_SPACE_SIGMA_ALGEBRA]
7088QED
7089
7090(* ‘density_of’ is like ‘density’ but automatically apply ‘fn_plus’, and the measure
7091 part of the returned measure space is total returning 0 for non-measurable sets.
7092 *)
7093Definition density_of :
7094 density_of M f = (m_space M, measurable_sets M,
7095 (\A. if A IN measurable_sets M then
7096 pos_fn_integral M (\x. max 0 (f x * indicator_fn A x)) else 0))
7097End
7098
7099(* This was HVG's measure_space_density *)
7100Theorem measure_space_density_of :
7101 !M f. measure_space M /\ f IN measurable (m_space M, measurable_sets M) Borel
7102 ==> measure_space (density_of M f)
7103Proof
7104 rpt STRIP_TAC
7105 >> ‘measure_space (density M (fn_plus f))’ by PROVE_TAC [measure_space_density']
7106 >> MATCH_MP_TAC measure_space_eq
7107 >> Q.EXISTS_TAC ‘density M f^+’ >> art []
7108 >> simp [density_of, density_def, density_measure_def]
7109 >> rpt STRIP_TAC
7110 >> MATCH_MP_TAC pos_fn_integral_cong >> simp [le_max1]
7111 >> rpt STRIP_TAC
7112 >- (MATCH_MP_TAC le_mul >> simp [FN_PLUS_POS, INDICATOR_FN_POS])
7113 >> ‘max 0 (f x * indicator_fn s x) = (\x. f x * indicator_fn s x)^+ x’
7114 by rw [Once max_comm, FN_PLUS_ALT]
7115 >> POP_ORW
7116 >> ONCE_REWRITE_TAC [mul_comm]
7117 >> MATCH_MP_TAC fn_plus_fmul
7118 >> simp [INDICATOR_FN_POS]
7119QED
7120
7121Theorem suminf_measure[local]:
7122 !M A. measure_space M /\ IMAGE (\i:num. A i) UNIV SUBSET measurable_sets M /\
7123 disjoint_family A ==>
7124 (suminf (\i. measure M (A i)) = measure M (BIGUNION {A i | i IN UNIV}))
7125Proof
7126 RW_TAC std_ss [GSYM IMAGE_DEF]
7127 >> MATCH_MP_TAC (SIMP_RULE std_ss [o_DEF] MEASURE_COUNTABLY_ADDITIVE)
7128 >> FULL_SIMP_TAC std_ss [IN_FUNSET, disjoint_family_on]
7129 >> ASM_SET_TAC []
7130QED
7131
7132(* reduced ‘N’ (measure_space) to ‘B’ (sigma_algebra) *)
7133Theorem measure_space_distr :
7134 !M B f. measure_space M /\ sigma_algebra B /\
7135 f IN measurable (m_space M,measurable_sets M) B ==>
7136 measure_space (space B, subsets B, distr M f)
7137Proof
7138 qx_genl_tac [‘M’, ‘B’, ‘t’]
7139 >> RW_TAC std_ss [measure_space_def, m_space_def, measurable_sets_def, SPACE]
7140 >- (fs [positive_def, distr_def, measure_def, measurable_sets_def] \\
7141 rpt STRIP_TAC >> FIRST_X_ASSUM MATCH_MP_TAC \\
7142 fs [IN_MEASURABLE, space_def, subsets_def])
7143 >> FULL_SIMP_TAC std_ss [countably_additive_alt_eq, distr_def]
7144 >> RW_TAC std_ss []
7145 >> `!i. A i IN subsets B` by ASM_SET_TAC []
7146 >> `IMAGE (\i. PREIMAGE t (A i) INTER m_space M) UNIV SUBSET measurable_sets M`
7147 by (FULL_SIMP_TAC std_ss [IN_MEASURABLE, space_def, subsets_def, SUBSET_DEF] \\
7148 FULL_SIMP_TAC std_ss [IN_IMAGE, IN_UNIV] >> METIS_TAC [])
7149 >> `BIGUNION {PREIMAGE t (A i) INTER m_space M | i IN UNIV} IN measurable_sets M`
7150 by (FULL_SIMP_TAC std_ss [sigma_algebra_alt_eq])
7151 >> `disjoint_family (\i. PREIMAGE t (A i) INTER m_space M)`
7152 by (FULL_SIMP_TAC std_ss [disjoint_family_on, IN_UNIV] \\
7153 FULL_SIMP_TAC std_ss [PREIMAGE_def] THEN ASM_SET_TAC [])
7154 >> SIMP_TAC std_ss [PREIMAGE_BIGUNION, o_DEF]
7155 >> Know `IMAGE (PREIMAGE t) {A i | i IN univ(:num)} =
7156 IMAGE (\i. PREIMAGE t (A i)) UNIV` >- ASM_SET_TAC []
7157 >> ONCE_REWRITE_TAC [METIS [ETA_AX] ``PREIMAGE t = (\s. PREIMAGE t s)``]
7158 >> ONCE_REWRITE_TAC [METIS [ETA_AX] ``PREIMAGE t = (\s. PREIMAGE t s)``]
7159 >> SIMP_TAC std_ss [] >> DISC_RW_KILL
7160 >> Know `BIGUNION (IMAGE (\i. PREIMAGE t (A i)) univ(:num)) INTER m_space M =
7161 BIGUNION (IMAGE (\i. PREIMAGE t (A i) INTER m_space M) univ(:num))`
7162 >- (FULL_SIMP_TAC std_ss [EXTENSION, IN_INTER, IN_BIGUNION] \\
7163 RW_TAC std_ss [] >> EQ_TAC \\
7164 RW_TAC std_ss [IN_IMAGE, IN_UNIV, IN_INTER, IN_PREIMAGE] >|
7165 [ Q.EXISTS_TAC `PREIMAGE t (A i) INTER m_space M` \\
7166 FULL_SIMP_TAC std_ss [] >> ASM_SET_TAC [],
7167 FULL_SIMP_TAC std_ss [IN_INTER] >> METIS_TAC [],
7168 ALL_TAC ] \\
7169 FULL_SIMP_TAC std_ss [IN_INTER])
7170 >> SIMP_TAC std_ss [] >> DISC_RW_KILL
7171 >> Suff `measure M
7172 (BIGUNION (IMAGE (\i. PREIMAGE t (A i) INTER m_space M) univ(:num))) =
7173 suminf (\x. measure M ((\x. PREIMAGE t (A x) INTER m_space M) x))`
7174 >- SIMP_TAC std_ss []
7175 >> MATCH_MP_TAC (GSYM (REWRITE_RULE [GSYM IMAGE_DEF] suminf_measure))
7176 >> FULL_SIMP_TAC std_ss [measure_space_def]
7177 >> ONCE_REWRITE_TAC [GSYM MEASURE_SPACE_REDUCE]
7178 >> METIS_TAC [countably_additive_alt_eq, space_def, subsets_def]
7179QED
7180
7181Definition distr_of : (* was: distr *)
7182 distr_of M N (f :'a -> 'b) =
7183 (m_space N, measurable_sets N,
7184 \s. if s IN measurable_sets N then measure M (PREIMAGE f s INTER m_space M)
7185 else 0)
7186End
7187
7188Theorem distr_of_alt_distr :
7189 !M N f. distr_of M N f =
7190 (m_space N, measurable_sets N,
7191 \s. if s IN measurable_sets N then distr M f s else 0)
7192Proof
7193 rw [distr_of, distr_def]
7194QED
7195
7196(* NOTE: new proof by measure_space_distr *)
7197Theorem measure_space_distr_of :
7198 !M N f. measure_space M /\ measure_space N /\
7199 f IN measurable (measurable_space M) (measurable_space N) ==>
7200 measure_space (distr_of M N f)
7201Proof
7202 rw [distr_of_alt_distr]
7203 >> MATCH_MP_TAC measure_space_eq
7204 >> Q.EXISTS_TAC ‘(m_space N,measurable_sets N,distr M f)’
7205 >> simp [m_space_def, measurable_sets_def, measure_def]
7206 >> qabbrev_tac ‘B = measurable_space N’
7207 >> ‘m_space N = space B’ by rw [Abbr ‘B’] >> POP_ORW
7208 >> ‘measurable_sets N = subsets B’ by rw [Abbr ‘B’] >> POP_ORW
7209 >> MATCH_MP_TAC measure_space_distr
7210 >> rw [Abbr ‘B’, MEASURE_SPACE_SIGMA_ALGEBRA]
7211QED
7212
7213(* Proposition 11.5 [1, p.91]
7214
7215 NOTE: "markov_ineq" in real_lebesgueTheory is a variant [1, p.93] that we shall
7216 prove latter as a corollary (in extreals).
7217 *)
7218Theorem markov_inequality :
7219 !m f a c. measure_space m /\ integrable m f /\ a IN measurable_sets m /\ 0 < c ==>
7220 measure m ({x | c <= abs (f x)} INTER a) <=
7221 inv c * integral m (\x. abs (f x) * indicator_fn a x)
7222Proof
7223 rpt STRIP_TAC
7224 >> Know `{x | c <= abs (f x)} INTER a IN measurable_sets m`
7225 >- (`{x | c <= abs (f x)} = PREIMAGE (abs o f) {x | c <= x}`
7226 by (RW_TAC std_ss [EXTENSION, IN_PREIMAGE, o_DEF, GSPECIFICATION]) \\
7227 `a SUBSET m_space m`
7228 by (fs [measure_space_def, sigma_algebra_def, algebra_def, subset_class_def,
7229 space_def, subsets_def]) \\
7230 `a = m_space m INTER a` by PROVE_TAC [INTER_SUBSET_EQN] >> POP_ORW \\
7231 REWRITE_TAC [INTER_ASSOC] \\
7232 MATCH_MP_TAC MEASURE_SPACE_INTER >> art [] \\
7233 fs [integrable_def] \\
7234 Know `abs o f IN measurable (m_space m,measurable_sets m) Borel`
7235 >- (MATCH_MP_TAC IN_MEASURABLE_BOREL_ABS \\
7236 Q.EXISTS_TAC `f` >> RW_TAC std_ss [o_DEF, space_def] \\
7237 fs [measure_space_def]) \\
7238 DISCH_THEN (STRIP_ASSUME_TAC o
7239 (SIMP_RULE std_ss [measurable_def, GSPECIFICATION, space_def,
7240 subsets_def])) \\
7241 FIRST_X_ASSUM MATCH_MP_TAC \\
7242 REWRITE_TAC [BOREL_MEASURABLE_SETS_CR])
7243 >> DISCH_TAC
7244 >> `integrable m (abs o f)` by PROVE_TAC [integrable_abs]
7245 (* special case: c = PosInf *)
7246 >> Cases_on `c = PosInf`
7247 >- (fs [extreal_inv_def, GSYM extreal_of_num_def, mul_lzero, le_infty] \\
7248 REWRITE_TAC [le_lt] >> DISJ2_TAC \\
7249 irule integrable_infty >> art [] \\
7250 Q.EXISTS_TAC `abs o f` >> art [] \\
7251 RW_TAC std_ss [GSPECIFICATION, IN_INTER, o_DEF])
7252 (* general case *)
7253 >> Know `measure m ({x | c <= abs (f x)} INTER a) =
7254 integral m (indicator_fn ({x | c <= abs (f x)} INTER a))`
7255 >- (MATCH_MP_TAC EQ_SYM \\
7256 MATCH_MP_TAC integral_indicator >> art []) >> Rewr'
7257 >> REWRITE_TAC [INDICATOR_FN_INTER]
7258 >> Know ‘integral m (\t. indicator_fn {x | c <= abs (f x)} t * indicator_fn a t) =
7259 integral m
7260 (\t. inv c *
7261 (c * indicator_fn {x | c <= abs (f x)} t * indicator_fn a t))’
7262 >- (REWRITE_TAC [mul_assoc] \\
7263 `inv c * c = 1` by PROVE_TAC [mul_linv_pos] >> POP_ORW \\
7264 REWRITE_TAC [mul_lone]) >> Rewr'
7265 >> `c <> NegInf` by PROVE_TAC [pos_not_neginf, lt_imp_le]
7266 >> Cases_on `c` >> fs [extreal_of_num_def, extreal_lt_eq]
7267 >> `r <> 0` by PROVE_TAC [REAL_LT_LE]
7268 >> `inv (Normal r) = Normal (inv r)`
7269 by ASM_SIMP_TAC std_ss [extreal_inv_def] >> POP_ORW
7270 (* before further moves, we must convert all `integral`s into `pos_fn_intergral`s *)
7271 >> `0 <= inv r` by PROVE_TAC [REAL_LT_IMP_LE, REAL_LE_INV]
7272 >> Know ‘integral m
7273 (\t. Normal (inv r) *
7274 (Normal r * indicator_fn {x | Normal r <= abs (f x)} t *
7275 indicator_fn a t)) =
7276 pos_fn_integral m
7277 (\t. Normal (inv r) *
7278 (Normal r * indicator_fn {x | Normal r <= abs (f x)} t *
7279 indicator_fn a t))’
7280 >- (MATCH_MP_TAC integral_pos_fn >> RW_TAC std_ss [] \\
7281 MATCH_MP_TAC le_mul >> CONJ_TAC >- art [extreal_of_num_def, extreal_le_eq] \\
7282 MATCH_MP_TAC le_mul >> reverse CONJ_TAC >- REWRITE_TAC [INDICATOR_FN_POS] \\
7283 MATCH_MP_TAC le_mul >> reverse CONJ_TAC >- REWRITE_TAC [INDICATOR_FN_POS] \\
7284 REWRITE_TAC [extreal_of_num_def, extreal_le_eq] \\
7285 MATCH_MP_TAC REAL_LT_IMP_LE >> art []) >> Rewr'
7286 >> Know `integral m (\x. abs (f x) * indicator_fn a x) =
7287 pos_fn_integral m (\x. abs (f x) * indicator_fn a x)`
7288 >- (MATCH_MP_TAC integral_pos_fn >> art [] \\
7289 RW_TAC std_ss [] \\
7290 MATCH_MP_TAC le_mul >> reverse CONJ_TAC >- REWRITE_TAC [INDICATOR_FN_POS] \\
7291 REWRITE_TAC [abs_pos]) >> Rewr'
7292 >> Know ‘pos_fn_integral m
7293 (\x. Normal (inv r) *
7294 (\t. Normal r * indicator_fn {x | Normal r <= abs (f x)} t *
7295 indicator_fn a t) x) =
7296 Normal (inv r) *
7297 pos_fn_integral m
7298 (\t. Normal r * indicator_fn {x | Normal r <= abs (f x)} t *
7299 indicator_fn a t)’
7300 >- (MATCH_MP_TAC pos_fn_integral_cmul >> art [] \\
7301 RW_TAC std_ss [] \\
7302 MATCH_MP_TAC le_mul >> reverse CONJ_TAC >- REWRITE_TAC [INDICATOR_FN_POS] \\
7303 MATCH_MP_TAC le_mul >> reverse CONJ_TAC >- REWRITE_TAC [INDICATOR_FN_POS] \\
7304 REWRITE_TAC [extreal_of_num_def, extreal_le_eq] \\
7305 MATCH_MP_TAC REAL_LT_IMP_LE >> art []) >> BETA_TAC >> Rewr'
7306 >> MATCH_MP_TAC le_lmul_imp
7307 >> CONJ_TAC >- art [extreal_of_num_def, extreal_le_eq]
7308 (* now the core of proof: a smart application of `le_trans` *)
7309 >> MATCH_MP_TAC le_trans
7310 >> Q.EXISTS_TAC
7311 ‘pos_fn_integral m
7312 (\t. abs (f t) * indicator_fn {x | Normal r <= abs (f x)} t *
7313 indicator_fn a t)’
7314 >> CONJ_TAC
7315 >- (MATCH_MP_TAC pos_fn_integral_mono \\
7316 RW_TAC std_ss []
7317 >- (MATCH_MP_TAC le_mul >> reverse CONJ_TAC >- REWRITE_TAC [INDICATOR_FN_POS] \\
7318 MATCH_MP_TAC le_mul >> reverse CONJ_TAC >- REWRITE_TAC [INDICATOR_FN_POS] \\
7319 REWRITE_TAC [extreal_of_num_def, extreal_le_eq] \\
7320 MATCH_MP_TAC REAL_LT_IMP_LE >> art []) \\
7321 Cases_on `Normal r <= abs (f x)`
7322 >- (REWRITE_TAC [GSYM mul_assoc] \\
7323 MATCH_MP_TAC le_rmul_imp >> art [] \\
7324 MATCH_MP_TAC le_mul >> REWRITE_TAC [INDICATOR_FN_POS]) \\
7325 ASM_SIMP_TAC std_ss [indicator_fn_def, GSPECIFICATION, mul_lzero, mul_rzero,
7326 le_refl])
7327 >> MATCH_MP_TAC pos_fn_integral_mono
7328 >> RW_TAC std_ss []
7329 >- (MATCH_MP_TAC le_mul >> reverse CONJ_TAC >- REWRITE_TAC [INDICATOR_FN_POS] \\
7330 MATCH_MP_TAC le_mul >> reverse CONJ_TAC >- REWRITE_TAC [INDICATOR_FN_POS] \\
7331 REWRITE_TAC [abs_pos])
7332 >> MATCH_MP_TAC le_rmul_imp
7333 >> REWRITE_TAC [INDICATOR_FN_POS]
7334 >> `abs (f x) = abs (f x) * 1` by PROVE_TAC [mul_rone]
7335 >> POP_ASSUM (GEN_REWRITE_TAC (RAND_CONV o ONCE_DEPTH_CONV) empty_rewrites o wrap)
7336 >> MATCH_MP_TAC le_lmul_imp
7337 >> REWRITE_TAC [abs_pos, INDICATOR_FN_LE_1]
7338QED
7339
7340(* The special version with `a = m_space m`, the part `INTER m_space m` cannot be
7341 removed, because in general the PREIMAGE of f may go outside of `m_space m`,
7342 even it's integrable.
7343 *)
7344Theorem markov_ineq :
7345 !m f c. measure_space m /\ integrable m f /\ 0 < c ==>
7346 measure m ({x | c <= abs (f x)} INTER m_space m) <=
7347 inv c * integral m (abs o f)
7348Proof
7349 RW_TAC std_ss [o_DEF]
7350 >> MP_TAC (Q.SPECL [`m`, `f`, `m_space m`, `c`] markov_inequality)
7351 >> Know `m_space m IN measurable_sets m`
7352 >- (MATCH_MP_TAC (REWRITE_RULE [space_def, subsets_def]
7353 (Q.SPEC ‘(m_space m,measurable_sets m)’ ALGEBRA_SPACE)) \\
7354 fs [measure_space_def, sigma_algebra_def])
7355 >> RW_TAC std_ss []
7356 >> Know ‘integral m (\x. abs (f x)) =
7357 integral m (\t. (\x. abs (f x)) t * indicator_fn (m_space m) t)’
7358 >- (MATCH_MP_TAC integral_mspace >> art [])
7359 >> BETA_TAC >> Rewr' >> art []
7360QED
7361
7362(* This is not needed any more (but could be useful somewhere)
7363Theorem markov_inequality_AE : (* was: positive_integral_Markov_inequality *)
7364 !M A u c. measure_space M /\
7365 u IN measurable (m_space M, measurable_sets M) Borel /\
7366 (AE x::M. 0 <= u x) /\ A IN measurable_sets M ==>
7367 measure M ({x | x IN m_space M /\ 1 <= &c * u x} INTER A) <=
7368 &c * pos_fn_integral M (\x. u x * indicator_fn A x)
7369Proof
7370QED
7371*)
7372
7373(* Theorem 10.4 (v) [1, p.85] (Triangle Inequality) *)
7374Theorem integral_triangle_ineq :
7375 !m f. measure_space m /\ integrable m f ==>
7376 abs (integral m f) <= integral m (abs o f)
7377Proof
7378 RW_TAC std_ss [abs_max, Once neg_minus1, extreal_of_num_def, extreal_ainv_def]
7379 >> Know `Normal (-1) * integral m f = integral m (\x. Normal (-1) * f x)`
7380 >- (MATCH_MP_TAC EQ_SYM \\
7381 MATCH_MP_TAC integral_cmul >> art []) >> Rewr'
7382 >> Know `integral m (abs o f) = max (integral m (abs o f)) (integral m (abs o f))`
7383 >- REWRITE_TAC [max_refl] >> Rewr'
7384 >> MATCH_MP_TAC max_le2_imp
7385 >> CONJ_TAC
7386 >- (MATCH_MP_TAC integral_mono >> RW_TAC std_ss [le_abs] \\
7387 MATCH_MP_TAC integrable_abs >> art [])
7388 >> MATCH_MP_TAC integral_mono >> RW_TAC std_ss []
7389 >- (MATCH_MP_TAC integrable_cmul >> art [])
7390 >- (MATCH_MP_TAC integrable_abs >> art [])
7391 >> REWRITE_TAC [GSYM extreal_of_num_def, GSYM extreal_ainv_def, GSYM neg_minus1]
7392 >> REWRITE_TAC [le_abs]
7393QED
7394
7395(* special version, RHS is for `pos_fn_integral` *)
7396Theorem integral_triangle_ineq' :
7397 !m f. measure_space m /\ integrable m f ==>
7398 abs (integral m f) <= pos_fn_integral m (abs o f)
7399Proof
7400 rpt STRIP_TAC
7401 >> Suff `pos_fn_integral m (abs o f) = integral m (abs o f)`
7402 >- (Rewr' >> MATCH_MP_TAC integral_triangle_ineq >> art [])
7403 >> MATCH_MP_TAC EQ_SYM
7404 >> MATCH_MP_TAC integral_pos_fn
7405 >> RW_TAC std_ss [o_DEF, abs_pos]
7406QED
7407
7408(* Theorem 11.2 (ii) [1, p.89-90], cf. pos_fn_integral_null_set *)
7409Theorem integral_null_set :
7410 !m f N. measure_space m /\
7411 f IN measurable (m_space m, measurable_sets m) Borel /\
7412 N IN null_set m ==> integrable m (\x. f x * indicator_fn N x) /\
7413 (integral m (\x. f x * indicator_fn N x) = 0)
7414Proof
7415 rpt GEN_TAC
7416 >> SIMP_TAC std_ss [IN_NULL_SET, null_set_def] >> STRIP_TAC
7417 >> Q.ABBREV_TAC `fi = \i:num x. min ((abs o f) x) &i`
7418 >> Know `!i x. 0 <= fi i x`
7419 >- (rpt GEN_TAC >> Q.UNABBREV_TAC `fi` \\
7420 RW_TAC std_ss [le_min, abs_pos] \\
7421 RW_TAC real_ss [extreal_of_num_def, extreal_le_eq]) >> DISCH_TAC
7422 >> Know `!x. (abs o f) x = sup (IMAGE (\i. fi i x) univ(:num))`
7423 >- (GEN_TAC >> Q.UNABBREV_TAC `fi` \\
7424 SIMP_TAC std_ss [o_DEF] \\
7425 Cases_on `(f x = PosInf) \/ (f x = NegInf)` (* special case *)
7426 >- (POP_ASSUM STRIP_ASSUME_TAC \\ (* 2 subgoals, same tactics *)
7427 (ASM_SIMP_TAC std_ss [extreal_abs_def, min_infty] \\
7428 MATCH_MP_TAC EQ_SYM \\
7429 Suff `IMAGE (\i. &i) univ(:num) = \x. ?n. x = &n` >- rw [sup_num] \\
7430 RW_TAC std_ss [Once EXTENSION, IN_IMAGE, IN_UNIV, IN_APP])) >> fs [] \\
7431 MATCH_MP_TAC EQ_SYM >> RW_TAC std_ss [sup_eq'] \\
7432 POP_ASSUM (STRIP_ASSUME_TAC o BETA_RULE o
7433 (REWRITE_RULE [IN_IMAGE, IN_UNIV])) >| (* 2 subgoals *)
7434 [ (* goal 1 (of 2) *)
7435 Q.PAT_X_ASSUM `y = min (abs (f x)) (&x')` (ONCE_REWRITE_TAC o wrap) \\
7436 RW_TAC std_ss [min_le, le_refl],
7437 (* goal 2 (of 2) *)
7438 `abs (f x) <> PosInf` by PROVE_TAC [abs_not_infty] \\
7439 POP_ASSUM (STRIP_ASSUME_TAC o
7440 (MATCH_MP (Q.SPEC `abs ((f :'a -> extreal) x)` SIMP_EXTREAL_ARCH))) \\
7441 Cases_on `&n <= y` (* easy case *)
7442 >- (MATCH_MP_TAC le_trans >> Q.EXISTS_TAC `&n` >> art []) \\
7443 Q.PAT_X_ASSUM `!z. P ==> z <= y` MATCH_MP_TAC \\
7444 Q.EXISTS_TAC `&n` >> PROVE_TAC [min_reduce] ]) >> DISCH_TAC
7445 >> Q.ABBREV_TAC `fi' = \i:num x. fi i x * indicator_fn N x`
7446 >> Know `!i x. 0 <= fi' i x`
7447 >- (rpt GEN_TAC >> Q.UNABBREV_TAC `fi'` >> BETA_TAC \\
7448 MATCH_MP_TAC le_mul >> art [INDICATOR_FN_POS]) >> DISCH_TAC
7449 >> Know `!x. (abs o f) x * indicator_fn N x = sup (IMAGE (\i. fi' i x) univ(:num))`
7450 >- (GEN_TAC >> Q.UNABBREV_TAC `fi'` >> BETA_TAC >> POP_ORW \\
7451 `indicator_fn N x <> PosInf /\ indicator_fn N x <> NegInf`
7452 by PROVE_TAC [INDICATOR_FN_NOT_INFTY] \\
7453 `0 <= indicator_fn N x` by PROVE_TAC [INDICATOR_FN_POS] \\
7454 `?r. indicator_fn N x = Normal r` by METIS_TAC [extreal_cases] \\
7455 `0 <= r` by METIS_TAC [extreal_of_num_def, extreal_le_eq] \\
7456 ONCE_REWRITE_TAC [mul_comm] \\
7457 Q.PAT_X_ASSUM `indicator_fn N x = Normal r` (ONCE_REWRITE_TAC o wrap) \\
7458 POP_ASSUM (rw o wrap o (MATCH_MP sup_cmul))) >> DISCH_TAC
7459 >> `sigma_algebra (m_space m,measurable_sets m)` by PROVE_TAC [measure_space_def]
7460 (* applying Beppo Levi *)
7461 >> Know `pos_fn_integral m (\x. (abs o f) x * indicator_fn N x) =
7462 sup (IMAGE (\i. pos_fn_integral m (fi' i)) univ(:num))`
7463 >- (MATCH_MP_TAC lebesgue_monotone_convergence >> art [] \\
7464 Q.UNABBREV_TAC `fi'` >> REV_FULL_SIMP_TAC bool_ss [] \\
7465 rpt STRIP_TAC >| (* 2 subgoals *)
7466 [ (* goal 1 (of 2) *)
7467 MATCH_MP_TAC IN_MEASURABLE_BOREL_MUL_INDICATOR \\
7468 ASM_SIMP_TAC std_ss [subsets_def] \\
7469 Q.UNABBREV_TAC `fi` >> BETA_TAC \\
7470 `(\x. min ((abs o f) x) (&i)) = (\x. min ((abs o f) x) ((\x. &i) x))`
7471 by METIS_TAC [] >> POP_ORW \\
7472 MATCH_MP_TAC IN_MEASURABLE_BOREL_MIN >> art [] \\
7473 CONJ_TAC >- (MATCH_MP_TAC IN_MEASURABLE_BOREL_ABS' >> art []) \\
7474 MATCH_MP_TAC IN_MEASURABLE_BOREL_CONST' >> art [],
7475 (* goal 2 (of 2) *)
7476 RW_TAC std_ss [ext_mono_increasing_suc] \\
7477 reverse (Cases_on `x IN N`)
7478 >- (ASM_SIMP_TAC std_ss [indicator_fn_def, mul_rzero, le_refl]) \\
7479 ASM_SIMP_TAC std_ss [indicator_fn_def, mul_rone] \\
7480 Q.UNABBREV_TAC `fi` >> BETA_TAC \\
7481 `(&i :real) < &(SUC i)` by RW_TAC real_ss [] \\
7482 `(&i :extreal) < &(SUC i)` by METIS_TAC [extreal_lt_eq, extreal_of_num_def] \\
7483 RW_TAC std_ss [o_DEF, extreal_min_def, le_refl] >| (* 3 subgoals *)
7484 [ (* goal 3.1 (of 3) *)
7485 REV_FULL_SIMP_TAC bool_ss [GSYM extreal_lt_def] \\
7486 METIS_TAC [let_trans, lt_antisym],
7487 (* goal 3.1 (of 3) *)
7488 REV_FULL_SIMP_TAC bool_ss [GSYM extreal_lt_def] \\
7489 MATCH_MP_TAC lt_imp_le >> art [],
7490 (* goal 3.3 (of 3) *)
7491 MATCH_MP_TAC lt_imp_le >> art [] ] ]) >> DISCH_TAC
7492 >> Know `!i. pos_fn_integral m (fi' i) <= pos_fn_integral m (\x. &i * indicator_fn N x)`
7493 >- (GEN_TAC >> MATCH_MP_TAC pos_fn_integral_mono \\
7494 RW_TAC std_ss [] >> qunabbrevl_tac [`fi'`, `fi`] >> BETA_TAC \\
7495 reverse (Cases_on `x IN N`)
7496 >- (ASM_SIMP_TAC std_ss [indicator_fn_def, mul_rzero, le_refl]) \\
7497 ASM_SIMP_TAC std_ss [indicator_fn_def, mul_rone, min_le2])
7498 >> Know `!i. pos_fn_integral m (\x. &i * indicator_fn N x) =
7499 &i * pos_fn_integral m (indicator_fn N)`
7500 >- (GEN_TAC >> SIMP_TAC std_ss [extreal_of_num_def] \\
7501 MATCH_MP_TAC pos_fn_integral_cmul \\
7502 RW_TAC real_ss [INDICATOR_FN_POS, extreal_of_num_def, extreal_lt_eq])
7503 >> ASM_SIMP_TAC std_ss [pos_fn_integral_indicator, mul_rzero]
7504 >> DISCH_THEN K_TAC >> DISCH_TAC
7505 >> Know `!i. pos_fn_integral m (fi' i) = 0`
7506 >- (GEN_TAC >> RW_TAC std_ss [GSYM le_antisym] \\
7507 MATCH_MP_TAC pos_fn_integral_pos >> art [])
7508 >> POP_ASSUM K_TAC >> DISCH_TAC
7509 >> Know `sup (IMAGE (\i. pos_fn_integral m (fi' i)) univ(:num)) = 0`
7510 >- (POP_ORW \\
7511 Suff `IMAGE (\i. (0 :extreal)) univ(:num) = (\y. y = 0)`
7512 >- (Rewr' >> REWRITE_TAC [sup_const]) \\
7513 RW_TAC std_ss [Once EXTENSION, IN_IMAGE, IN_UNIV] \\
7514 SIMP_TAC std_ss [IN_APP])
7515 >> POP_ASSUM K_TAC
7516 >> DISCH_THEN ((REV_FULL_SIMP_TAC bool_ss) o wrap)
7517 >> Know `pos_fn_integral m (\x. (abs o f) x * indicator_fn N x) = 0`
7518 >- (Q.PAT_X_ASSUM `!x. (abs o f) x = _` (ONCE_REWRITE_TAC o wrap) \\
7519 ASM_SIMP_TAC std_ss [])
7520 >> POP_ASSUM K_TAC >> DISCH_TAC
7521 >> Q.PAT_X_ASSUM `!i x. 0 <= fi' i x` K_TAC
7522 >> Q.UNABBREV_TAC `fi'`
7523 (* integrable m (\x. f x * indicator_fn N x) *)
7524 >> STRONG_CONJ_TAC
7525 >- (SIMP_TAC std_ss [integrable_def] \\
7526 CONJ_TAC >- (MATCH_MP_TAC IN_MEASURABLE_BOREL_MUL_INDICATOR \\
7527 ASM_SIMP_TAC std_ss [subsets_def]) \\
7528 CONJ_TAC >| (* 2 subgoals *)
7529 [ (* goal 1 (of 2) *)
7530 Suff `pos_fn_integral m (fn_plus (\x. f x * indicator_fn N x)) <= 0`
7531 >- METIS_TAC [neg_not_posinf] \\
7532 POP_ASSUM (ONCE_REWRITE_TAC o wrap o SYM) \\
7533 REWRITE_TAC [GSYM INDICATOR_FN_ABS_MUL] \\
7534 MATCH_MP_TAC pos_fn_integral_mono \\
7535 RW_TAC std_ss [o_DEF, FN_PLUS_LE_ABS, FN_PLUS_POS],
7536 (* goal 2 (of 2) *)
7537 Suff `pos_fn_integral m (fn_minus (\x. f x * indicator_fn N x)) <= 0`
7538 >- METIS_TAC [neg_not_posinf] \\
7539 POP_ASSUM (ONCE_REWRITE_TAC o wrap o SYM) \\
7540 REWRITE_TAC [GSYM INDICATOR_FN_ABS_MUL] \\
7541 MATCH_MP_TAC pos_fn_integral_mono \\
7542 RW_TAC std_ss [o_DEF, FN_MINUS_LE_ABS, FN_MINUS_POS] ])
7543 >> DISCH_TAC
7544 >> REWRITE_TAC [GSYM abs_le_0]
7545 >> Q.PAT_X_ASSUM `_ = 0` (ONCE_REWRITE_TAC o wrap o SYM)
7546 >> REWRITE_TAC [GSYM INDICATOR_FN_ABS_MUL]
7547 >> MATCH_MP_TAC integral_triangle_ineq' >> art []
7548QED
7549
7550(* Theorem 11.2 (i) [1, p.89] *)
7551Theorem integral_abs_eq_0 :
7552 !m f. measure_space m /\
7553 f IN measurable (m_space m, measurable_sets m) Borel ==>
7554 ((integral m (abs o f) = 0) <=> AE x::m. (abs o f) x = 0) /\
7555 ((AE x::m. (abs o f) x = 0) <=> (measure m {x | x IN m_space m /\ f x <> 0} = 0))
7556Proof
7557 rpt GEN_TAC >> STRIP_TAC
7558 >> ‘sigma_algebra (measurable_space m)’
7559 by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA]
7560 >> Know `{x | x IN m_space m /\ f x <> 0} IN measurable_sets m`
7561 >- (`{x | x IN m_space m /\ f x <> 0} = {x | f x <> 0} INTER m_space m` by SET_TAC [] \\
7562 POP_ORW >> METIS_TAC [IN_MEASURABLE_BOREL_ALL_MEASURE]) >> DISCH_TAC
7563 >> ONCE_REWRITE_TAC [CONJ_SYM]
7564 >> STRONG_CONJ_TAC (* by definition of AE and null_set *)
7565 >- (reverse EQ_TAC
7566 >- (RW_TAC std_ss [AE_ALT, null_set_def] \\
7567 Q.EXISTS_TAC `{x | x IN m_space m /\ f x <> 0}` \\
7568 ASM_REWRITE_TAC [SUBSET_REFL, abs_eq_0]) \\
7569 RW_TAC std_ss [AE_ALT, null_set_def] \\
7570 RW_TAC std_ss [Once CONJ_SYM, Once (GSYM le_antisym)] >| (* 2 subgoals *)
7571 [ (* goal 1 (of 2) *)
7572 IMP_RES_TAC MEASURE_SPACE_POSITIVE \\
7573 fs [positive_def, measure_def, measurable_sets_def],
7574 (* goal 2 (of 2) *)
7575 Q.PAT_X_ASSUM `measure m N = 0`
7576 ((GEN_REWRITE_TAC (RAND_CONV o ONCE_DEPTH_CONV) empty_rewrites) o wrap o SYM) \\
7577 IMP_RES_TAC MEASURE_SPACE_INCREASING \\
7578 MATCH_MP_TAC INCREASING >> fs [abs_eq_0] ]) >> DISCH_TAC
7579 (* RHS ==> LHS, by AE and integral_null_set *)
7580 >> reverse EQ_TAC
7581 >- (SIMP_TAC bool_ss [AE_ALT, GSYM IN_NULL_SET] >> STRIP_TAC \\
7582 Know `(abs o f) IN measurable (m_space m, measurable_sets m) Borel`
7583 >- (MATCH_MP_TAC IN_MEASURABLE_BOREL_ABS' >> art []) >> DISCH_TAC \\
7584 `!x. 0 <= (abs o f) x` by METIS_TAC [o_DEF, abs_pos] \\
7585 `N IN measurable_sets m /\ (measure m N = 0)` by METIS_TAC [IN_NULL_SET, null_set_def] \\
7586 Know `{x | x IN m_space m /\ (abs o f) x <> 0} IN measurable_sets m`
7587 >- (ASM_SIMP_TAC std_ss [o_DEF, abs_eq_0]) >> DISCH_TAC \\
7588 MP_TAC (Q.SPECL [`m`, `abs o f`,
7589 `{x | x IN m_space m /\ (abs o f) x <> 0}`] integral_split) \\
7590 RW_TAC bool_ss [] >> POP_ASSUM K_TAC \\
7591 MP_TAC (Q.SPECL [`m`, `abs o f`,
7592 `{x | x IN m_space m /\ (abs o f) x <> 0}`] integral_null_set) \\
7593 Know `{x | x IN m_space m /\ (abs o f) x <> 0} IN null_set m`
7594 >- (RW_TAC bool_ss [null_set_def, IN_NULL_SET] \\
7595 RW_TAC bool_ss [Once CONJ_SYM, Once (GSYM le_antisym)] >| (* 2 subgoals *)
7596 [ (* goal 1 (of 2) *)
7597 IMP_RES_TAC MEASURE_SPACE_POSITIVE \\
7598 fs [positive_def, measure_def, measurable_sets_def],
7599 (* goal 2 (of 2) *)
7600 Q.PAT_X_ASSUM `measure m N = 0`
7601 ((GEN_REWRITE_TAC (RAND_CONV o ONCE_DEPTH_CONV) empty_rewrites) o wrap o SYM) \\
7602 IMP_RES_TAC MEASURE_SPACE_INCREASING \\
7603 MATCH_MP_TAC INCREASING >> art [] ]) \\
7604 RW_TAC bool_ss [add_lzero] \\
7605 Suff `integral m
7606 (\x. (abs o f) x *
7607 indicator_fn (m_space m DIFF {x | x IN m_space m /\ (abs o f) x <> 0}) x) =
7608 integral m (\x. 0)` >- (Rewr' >> MATCH_MP_TAC integral_zero >> art []) \\
7609 MATCH_MP_TAC integral_cong >> art [] \\
7610 RW_TAC bool_ss [] \\
7611 reverse (Cases_on `x IN (m_space m DIFF {x | x IN m_space m /\ (abs o f) x <> 0})`)
7612 >- (ASM_SIMP_TAC bool_ss [indicator_fn_def, mul_rzero]) \\
7613 POP_ASSUM MP_TAC \\
7614 RW_TAC bool_ss [IN_DIFF, GSPECIFICATION, mul_lzero])
7615 (* LHS ==> RHS, by markov_ineq *)
7616 >> DISCH_TAC >> Q.PAT_X_ASSUM `_ <=> (measure m _ = 0)` (ONCE_REWRITE_TAC o wrap)
7617 >> REWRITE_TAC [GSYM abs_gt_0]
7618 >> `{x | x IN m_space m /\ 0 < abs (f x)} = {x | 0 < abs (f x)} INTER m_space m`
7619 by SET_TAC [] >> POP_ORW
7620 >> Know `{x | 0 < abs (f x)} INTER m_space m =
7621 BIGUNION (IMAGE (\n. {x | 1 / &(SUC n) <= abs (f x)} INTER m_space m) UNIV)`
7622 >- (RW_TAC std_ss [Once EXTENSION, IN_INTER, IN_BIGUNION_IMAGE, IN_UNIV,
7623 GSPECIFICATION] \\
7624 reverse EQ_TAC >> rpt STRIP_TAC >> RW_TAC std_ss []
7625 >- (MATCH_MP_TAC lte_trans >> Q.EXISTS_TAC `1 / &(SUC n)` >> art [] \\
7626 `&(SUC n) = Normal &(SUC n)` by METIS_TAC [extreal_of_num_def] >> POP_ORW \\
7627 MATCH_MP_TAC lt_div >> RW_TAC real_ss [lt_01]) \\
7628 MP_TAC (Q.SPEC `inv (abs (f x))` SIMP_EXTREAL_ARCH) \\
7629 `abs (f x) <> 0` by PROVE_TAC [lt_le] \\
7630 `inv (abs (f x)) <> PosInf` by PROVE_TAC [inv_not_infty] \\
7631 RW_TAC std_ss [] \\
7632 Q.EXISTS_TAC `n` \\
7633 Cases_on `abs (f x) = PosInf` >- art [le_infty] \\
7634 `&(SUC n) <> (0 :real)` by RW_TAC real_ss [] \\
7635 `&(SUC n) <> (0 :extreal)` by METIS_TAC [extreal_of_num_def, extreal_11] \\
7636 `abs (f x) <> NegInf` by METIS_TAC [pos_not_neginf, lt_imp_le] \\
7637 `?r. abs (f x) = Normal r` by METIS_TAC [extreal_cases] \\
7638 FULL_SIMP_TAC std_ss [extreal_of_num_def, extreal_div_eq,
7639 extreal_11, extreal_le_eq, extreal_lt_eq] \\
7640 rfs [extreal_inv_eq, extreal_le_eq, REAL_INV_1OVER] \\
7641 rfs [REAL_LE_LDIV_EQ, REAL_LT_LDIV_EQ] \\
7642 MATCH_MP_TAC REAL_LE_TRANS \\
7643 Q.EXISTS_TAC `r * &n` >> art [] \\
7644 `(&n :real) < &SUC n` by RW_TAC real_ss [] \\
7645 ASM_SIMP_TAC real_ss [REAL_LE_LMUL]) >> DISCH_TAC
7646 >> Know `(abs o f) IN measurable (m_space m,measurable_sets m) Borel`
7647 >- (MATCH_MP_TAC IN_MEASURABLE_BOREL_ABS' >> art []) >> DISCH_TAC
7648 >> Know `{x | 0 < (abs o f) x} INTER m_space m IN measurable_sets m`
7649 >- METIS_TAC [IN_MEASURABLE_BOREL_ALL_MEASURE]
7650 >> ASM_SIMP_TAC std_ss [o_DEF] >> DISCH_TAC
7651 >> Know `!n. {x | 1 / &SUC n <= (abs o f) x} INTER m_space m IN measurable_sets m`
7652 >- METIS_TAC [IN_MEASURABLE_BOREL_ALL_MEASURE]
7653 >> ASM_SIMP_TAC std_ss [o_DEF] >> DISCH_TAC
7654 >> IMP_RES_TAC MEASURE_SPACE_COUNTABLY_SUBADDITIVE
7655 >> Q.ABBREV_TAC `g = \n. {x | 1 / &SUC n <= abs (f x)} INTER m_space m`
7656 >> RW_TAC std_ss [GSYM le_antisym, Once CONJ_SYM]
7657 >- (IMP_RES_TAC MEASURE_SPACE_POSITIVE \\
7658 fs [positive_def, measurable_sets_def, measure_def])
7659 >> Know `measure m (BIGUNION (IMAGE g UNIV)) <= suminf (measure m o g)`
7660 >- (MATCH_MP_TAC COUNTABLY_SUBADDITIVE >> art [] \\
7661 Q.UNABBREV_TAC `g` >> RW_TAC std_ss [IN_FUNSET, IN_UNIV]) >> DISCH_TAC
7662 >> MATCH_MP_TAC le_trans
7663 >> Q.EXISTS_TAC `suminf (measure m o g)` >> art []
7664 >> Know `!n. (measure m o g) n <= inv (1 / &SUC n) * integral m (abs o f)`
7665 >- (GEN_TAC >> Q.UNABBREV_TAC `g` \\
7666 GEN_REWRITE_TAC (RATOR_CONV o ONCE_DEPTH_CONV) empty_rewrites [o_DEF] \\
7667 SIMP_TAC std_ss [] \\
7668 MATCH_MP_TAC markov_ineq >> art [] \\
7669 reverse CONJ_TAC
7670 >- (`&(SUC n) = Normal &(SUC n)` by METIS_TAC [extreal_of_num_def] >> POP_ORW \\
7671 MATCH_MP_TAC lt_div >> art [lt_01] \\
7672 RW_TAC real_ss [extreal_of_num_def, extreal_lt_eq]) \\
7673 MATCH_MP_TAC integral_abs_imp_integrable >> art [])
7674 >> RW_TAC bool_ss [mul_rzero]
7675 >> Know `!n. (measure m o g) n = 0`
7676 >- (RW_TAC bool_ss [GSYM le_antisym, Once CONJ_SYM] \\
7677 IMP_RES_TAC MEASURE_SPACE_POSITIVE \\
7678 Q.UNABBREV_TAC `g` >> SIMP_TAC std_ss [o_DEF] \\
7679 fs [positive_def, measure_def, measurable_sets_def])
7680 >> POP_ASSUM K_TAC >> DISCH_TAC
7681 >> REWRITE_TAC [le_lt] >> DISJ2_TAC
7682 >> MATCH_MP_TAC ext_suminf_zero >> art []
7683QED
7684
7685(* NOTE: changed ‘nonneg f’ to ‘!x. x IN m_space m ==> 0 <= f x’ *)
7686Theorem pos_fn_integral_eq_0 : (* was: positive_integral_0_iff *)
7687 !m f. measure_space m /\ (!x. x IN m_space m ==> 0 <= f x) /\
7688 f IN measurable (m_space m, measurable_sets m) Borel ==>
7689 ((pos_fn_integral m f = 0) <=>
7690 (measure m {x | x IN m_space m /\ f x <> 0} = 0))
7691Proof
7692 rpt STRIP_TAC
7693 >> MP_TAC (Q.SPECL [`m`, `f`] integral_abs_eq_0)
7694 >> RW_TAC std_ss []
7695 >> POP_ASSUM (ONCE_REWRITE_TAC o wrap o SYM)
7696 >> POP_ASSUM (ONCE_REWRITE_TAC o wrap o SYM)
7697 >> Know `integral m (abs o f) = pos_fn_integral m (abs o f)`
7698 >- (MATCH_MP_TAC integral_pos_fn >> rw [abs_pos])
7699 >> Rewr'
7700 >> Suff ‘pos_fn_integral m f = pos_fn_integral m (abs o f)’ >- rw []
7701 >> MATCH_MP_TAC pos_fn_integral_cong
7702 >> rw [abs_pos]
7703 >> METIS_TAC [abs_refl]
7704QED
7705
7706Theorem integral_eq_0 :
7707 !m f. f IN measurable (m_space m, measurable_sets m) Borel /\
7708 measure_space m /\ (AE x::m. 0 <= f x) ==>
7709 ((integral m f = 0) <=> (measure m {x | x IN m_space m /\ f x <> 0} = 0))
7710Proof
7711 qx_genl_tac [‘M’, ‘u’] >> STRIP_TAC
7712 >> MP_TAC (Q.SPECL [`M`, `u`] integral_abs_eq_0) >> RW_TAC std_ss []
7713 >> POP_ASSUM (ONCE_REWRITE_TAC o wrap o SYM)
7714 >> POP_ASSUM (ONCE_REWRITE_TAC o wrap o SYM)
7715 >> REWRITE_TAC [integral_def]
7716 >> `nonneg (abs o u)` by PROVE_TAC [nonneg_abs]
7717 >> Know `fn_minus (abs o u) = (\x. 0)`
7718 >- (MATCH_MP_TAC nonneg_fn_minus >> art []) >> Rewr'
7719 >> Know `pos_fn_integral M (fn_plus u) = pos_fn_integral M (fn_plus (abs o u))`
7720 >- (MATCH_MP_TAC pos_fn_integral_cong_AE \\
7721 RW_TAC std_ss [FN_PLUS_POS] \\
7722 fs [AE_ALT, GSYM IN_NULL_SET] \\
7723 Q.EXISTS_TAC `N` >> art [] \\
7724 Suff `{x | x IN m_space M /\ u^+ x <> (abs o u)^+ x} =
7725 {x | x IN m_space M /\ ~(0 <= u x)}` >- rw [] \\
7726 RW_TAC std_ss [Once EXTENSION, GSPECIFICATION, fn_plus_def] \\
7727 reverse EQ_TAC >> rpt STRIP_TAC >> RW_TAC std_ss []
7728 >- (fs [GSYM extreal_lt_def] \\
7729 `~(0 < u x)` by METIS_TAC [lt_antisym] >> fs [] \\
7730 `u x <> 0` by METIS_TAC [lt_le] \\
7731 `0 < abs (u x)` by METIS_TAC [abs_gt_0] \\
7732 METIS_TAC [lt_le]) \\
7733 fs [le_lt] >- (fs [] >> `u x <> 0` by METIS_TAC [lt_le] \\
7734 `0 < abs (u x)` by METIS_TAC [abs_gt_0] \\
7735 fs [] >> METIS_TAC [abs_refl, lt_imp_le]) \\
7736 `~(0 < u x)` by METIS_TAC [lt_refl] \\
7737 `~(0 < abs (u x))` by METIS_TAC [abs_0] >> fs []) >> Rewr'
7738 >> Suff `pos_fn_integral M (fn_minus u) = pos_fn_integral M (\x. 0)` >- rw []
7739 >> MATCH_MP_TAC pos_fn_integral_cong_AE
7740 >> RW_TAC std_ss [FN_MINUS_POS, le_refl]
7741 >> fs [AE_ALT, GSYM IN_NULL_SET]
7742 >> Q.EXISTS_TAC `N` >> art []
7743 >> Suff `{x | x IN m_space M /\ u^- x <> 0} =
7744 {x | x IN m_space M /\ ~(0 <= u x)}` >- rw []
7745 >> RW_TAC std_ss [Once EXTENSION, GSPECIFICATION, fn_minus_def]
7746 >> reverse EQ_TAC >> rpt STRIP_TAC >> RW_TAC std_ss []
7747 >- (fs [GSYM extreal_lt_def] >> rfs [] \\
7748 `u x <> 0` by METIS_TAC [lt_le] >> METIS_TAC [neg_eq0])
7749 >> `~(u x < 0)` by METIS_TAC [extreal_lt_def] >> fs []
7750QED
7751
7752val indicator_fn_pos_le = INDICATOR_FN_POS;
7753
7754Theorem pos_fn_integral_cmult' :
7755 !f c m. measure_space m /\ 0 <= c /\
7756 f IN measurable (m_space m, measurable_sets m) Borel ==>
7757 (pos_fn_integral m (\x. max 0 (c * f x)) =
7758 c * pos_fn_integral m (\x. max 0 (f x)))
7759Proof
7760 RW_TAC std_ss []
7761 >> Q.ABBREV_TAC `g = (\x. max 0 (f x))`
7762 >> Know `!x. max 0 (c * f x) = c * g x`
7763 >- (RW_TAC std_ss [Abbr ‘g’, extreal_max_def, mul_rzero]
7764 >- (UNDISCH_TAC ``0 <= c * f x`` >> ONCE_REWRITE_TAC [MONO_NOT_EQ] \\
7765 RW_TAC std_ss [GSYM extreal_lt_def] >> ONCE_REWRITE_TAC [GSYM lt_neg] \\
7766 SIMP_TAC std_ss [neg_0, GSYM mul_rneg] >> MATCH_MP_TAC lt_mul \\
7767 CONJ_TAC
7768 >- (SIMP_TAC std_ss [extreal_lt_def] >> POP_ASSUM MP_TAC \\
7769 ONCE_REWRITE_TAC [MONO_NOT_EQ] >> RW_TAC std_ss [] \\
7770 `c = 0` by METIS_TAC [le_antisym] THEN ASM_SIMP_TAC std_ss [mul_lzero]) \\
7771 ONCE_REWRITE_TAC [GSYM lt_neg] \\
7772 ASM_SIMP_TAC std_ss [neg_0, extreal_lt_def, neg_neg]) \\
7773 REWRITE_TAC [GSYM le_antisym] \\
7774 CONJ_TAC >- METIS_TAC [le_mul] \\
7775 METIS_TAC [le_lt, extreal_lt_def]) >> DISC_RW_KILL
7776 >> Know `g IN measurable (m_space m,measurable_sets m) Borel`
7777 >- (Q.UNABBREV_TAC `g` THEN ONCE_REWRITE_TAC [METIS []
7778 ``!x. (\x. max 0 (f x)) = (\x. max ((\x. 0) x) ((\x. f x) x))``] \\
7779 MATCH_MP_TAC IN_MEASURABLE_BOREL_MAX \\
7780 ONCE_REWRITE_TAC [METIS [ETA_AX] ``(\x. f x) = f``] \\
7781 FULL_SIMP_TAC std_ss [measure_space_def] \\
7782 MATCH_MP_TAC IN_MEASURABLE_BOREL_CONST >> METIS_TAC [])
7783 >> DISCH_TAC
7784 >> `!x. 0 <= g x` by METIS_TAC [le_max1]
7785 >> reverse (Cases_on `c = PosInf`)
7786 >- (`c <> NegInf` by METIS_TAC [le_infty, le_trans, num_not_infty] THEN
7787 `c = Normal (real c)` by METIS_TAC [normal_real] THEN
7788 POP_ASSUM (fn th => ONCE_REWRITE_TAC [th]) THEN
7789 MATCH_MP_TAC pos_fn_integral_cmul THEN ASM_SIMP_TAC std_ss [] THEN
7790 ASM_SIMP_TAC std_ss [GSYM extreal_le_def, normal_real, GSYM extreal_of_num_def] THEN
7791 METIS_TAC [normal_real])
7792 (* c = PosInf *)
7793 >> ASM_SIMP_TAC std_ss []
7794 >> Know `pos_fn_integral m (\x. (\x. c * g x) x *
7795 indicator_fn (({x | g x = 0} INTER m_space m) UNION ({x | 0 < g x} INTER m_space m)) x) =
7796 pos_fn_integral m (\x. (\x. c * g x) x * indicator_fn ({x | g x = 0} INTER m_space m) x) +
7797 pos_fn_integral m (\x. (\x. c * g x) x * indicator_fn ({x | 0 < g x} INTER m_space m) x)`
7798 >- (MATCH_MP_TAC pos_fn_integral_disjoint_sets \\
7799 ASM_SIMP_TAC std_ss [] \\
7800 CONJ_TAC
7801 >- (SIMP_TAC std_ss [DISJOINT_DEF, IN_INTER, EXTENSION, NOT_IN_EMPTY] \\
7802 GEN_TAC >> SIMP_TAC std_ss [GSPECIFICATION] \\
7803 ASM_CASES_TAC ``g (x:'a) <> 0:extreal`` >> FULL_SIMP_TAC std_ss [lt_refl]) \\
7804 CONJ_TAC
7805 >- (`{x | g x = 0} = PREIMAGE g {x | x = 0}` by SET_TAC [PREIMAGE_def] \\
7806 POP_ASSUM (fn th => REWRITE_TAC [th]) >> FULL_SIMP_TAC std_ss [IN_MEASURABLE] \\
7807 FULL_SIMP_TAC std_ss [space_def, subsets_def] \\
7808 FIRST_X_ASSUM MATCH_MP_TAC \\
7809 ONCE_REWRITE_TAC [SET_RULE ``{x | x = 0} = {0}``] \\
7810 SIMP_TAC std_ss [BOREL_MEASURABLE_SETS_SING, extreal_of_num_def]) \\
7811 CONJ_TAC
7812 >- (`{x | 0 < g x} = PREIMAGE g {x | 0 < x}` by SET_TAC [PREIMAGE_def] \\
7813 POP_ASSUM (fn th => REWRITE_TAC [th]) THEN FULL_SIMP_TAC std_ss [IN_MEASURABLE] \\
7814 FULL_SIMP_TAC std_ss [space_def, subsets_def] \\
7815 FIRST_X_ASSUM MATCH_MP_TAC \\
7816 SIMP_TAC std_ss [BOREL_MEASURABLE_SETS_OR, extreal_of_num_def]) \\
7817 CONJ_TAC
7818 >- (MATCH_MP_TAC IN_MEASURABLE_BOREL_TIMES >> Q.EXISTS_TAC `(\x. PosInf)` \\
7819 Q.EXISTS_TAC `g` >> ASM_SIMP_TAC std_ss [] \\
7820 MATCH_MP_TAC IN_MEASURABLE_BOREL_CONST >> Q.EXISTS_TAC `PosInf` \\
7821 METIS_TAC [measure_space_def]) \\
7822 rpt STRIP_TAC \\
7823 MATCH_MP_TAC le_mul >> ASM_SIMP_TAC std_ss [le_infty])
7824 >> RW_TAC std_ss []
7825 >> Know `pos_fn_integral m (\x. PosInf * g x) =
7826 pos_fn_integral m (\x. PosInf * g x *
7827 indicator_fn
7828 ({x | g x = 0} INTER m_space m UNION
7829 {x | 0 < g x} INTER m_space m) x)`
7830 >- (MATCH_MP_TAC pos_fn_integral_cong \\
7831 ASM_SIMP_TAC std_ss [le_mul, le_infty] \\
7832 CONJ_TAC
7833 >- (rpt STRIP_TAC \\
7834 MATCH_MP_TAC le_mul >> ASM_SIMP_TAC std_ss [le_mul, le_infty] \\
7835 SIMP_TAC std_ss [indicator_fn_pos_le]) \\
7836 RW_TAC std_ss [UNION_DEF, IN_INTER, GSPECIFICATION] \\
7837 ASM_SIMP_TAC std_ss [indicator_fn_def, GSPECIFICATION] \\
7838 ONCE_REWRITE_TAC [DISJ_COMM] \\
7839 GEN_REWR_TAC (RAND_CONV o ONCE_DEPTH_CONV) [EQ_SYM_EQ] \\
7840 ASM_SIMP_TAC std_ss [GSYM le_lt, mul_rone])
7841 >> DISC_RW_KILL
7842 >> ASM_SIMP_TAC std_ss []
7843 >> Know `pos_fn_integral m
7844 (\x. PosInf * g x * indicator_fn ({x | g x = 0} INTER m_space m) x) =
7845 pos_fn_integral m (\x. 0)`
7846 >- (MATCH_MP_TAC pos_fn_integral_cong >> ASM_SIMP_TAC std_ss [le_refl] \\
7847 CONJ_TAC
7848 >- (rpt STRIP_TAC >> MATCH_MP_TAC le_mul >> ASM_SIMP_TAC std_ss [le_infty, le_mul] \\
7849 SIMP_TAC std_ss [indicator_fn_pos_le]) \\
7850 RW_TAC std_ss [] >> ASM_SIMP_TAC std_ss [indicator_fn_def, GSPECIFICATION, IN_INTER] \\
7851 COND_CASES_TAC >> ASM_SIMP_TAC std_ss [mul_rone, mul_rzero])
7852 >> DISC_RW_KILL
7853 >> ASM_SIMP_TAC std_ss [pos_fn_integral_zero, add_lzero]
7854 >> Suff `pos_fn_integral m (\x. g x *
7855 indicator_fn (({x | g x = 0} INTER m_space m) UNION ({x | 0 < g x} INTER m_space m)) x) =
7856 pos_fn_integral m (\x. g x * indicator_fn (({x | g x = 0} INTER m_space m)) x) +
7857 pos_fn_integral m (\x. g x * indicator_fn (({x | 0 < g x} INTER m_space m)) x)` >|
7858 [ SIMP_TAC std_ss [] THEN DISCH_TAC,
7859 MATCH_MP_TAC pos_fn_integral_disjoint_sets THEN ASM_SIMP_TAC std_ss [] THEN
7860 CONJ_TAC THENL
7861 [SIMP_TAC std_ss [DISJOINT_DEF, IN_INTER, EXTENSION, NOT_IN_EMPTY] THEN
7862 GEN_TAC THEN SIMP_TAC std_ss [GSPECIFICATION] THEN
7863 ASM_CASES_TAC ``g (x:'a) <> 0:extreal`` THEN FULL_SIMP_TAC std_ss [lt_refl],
7864 ALL_TAC] THEN
7865 CONJ_TAC THENL
7866 [`{x | g x = 0} = PREIMAGE g {x | x = 0}` by SET_TAC [PREIMAGE_def] THEN
7867 POP_ASSUM (fn th => REWRITE_TAC [th]) THEN FULL_SIMP_TAC std_ss [IN_MEASURABLE] THEN
7868 FULL_SIMP_TAC std_ss [space_def, subsets_def] THEN
7869 FIRST_X_ASSUM MATCH_MP_TAC THEN
7870 ONCE_REWRITE_TAC [SET_RULE ``{x | x = 0} = {0}``] THEN
7871 SIMP_TAC std_ss [BOREL_MEASURABLE_SETS_SING, extreal_of_num_def],
7872 ALL_TAC] THEN
7873 `{x | 0 < g x} = PREIMAGE g {x | 0 < x}` by SET_TAC [PREIMAGE_def] THEN
7874 POP_ASSUM (fn th => REWRITE_TAC [th]) THEN FULL_SIMP_TAC std_ss [IN_MEASURABLE] THEN
7875 FULL_SIMP_TAC std_ss [space_def, subsets_def] THEN
7876 FIRST_X_ASSUM MATCH_MP_TAC THEN
7877 SIMP_TAC std_ss [BOREL_MEASURABLE_SETS_OR, extreal_of_num_def] ]
7878 >> Suff `pos_fn_integral m g =
7879 pos_fn_integral m (\x. g x *
7880 indicator_fn
7881 ({x | g x = 0} INTER m_space m UNION
7882 {x | 0 < g x} INTER m_space m) x)` THENL
7883 [DISC_RW_KILL,
7884 MATCH_MP_TAC pos_fn_integral_cong THEN ASM_SIMP_TAC std_ss [le_mul, indicator_fn_pos_le] THEN
7885 RW_TAC std_ss [] THEN
7886 ASM_SIMP_TAC std_ss [UNION_DEF, INTER_DEF, indicator_fn_def, GSPECIFICATION] THEN
7887 ONCE_REWRITE_TAC [DISJ_COMM] THEN
7888 GEN_REWR_TAC (RAND_CONV o ONCE_DEPTH_CONV) [EQ_SYM_EQ] THEN
7889 ASM_SIMP_TAC std_ss [GSYM le_lt, mul_rone]]
7890 >> ASM_SIMP_TAC std_ss []
7891 >> Suff `pos_fn_integral m
7892 (\x. g x * indicator_fn ({x | g x = 0} INTER m_space m) x) =
7893 pos_fn_integral m (\x. 0)` THENL
7894 [DISC_RW_KILL,
7895 MATCH_MP_TAC pos_fn_integral_cong THEN ASM_SIMP_TAC std_ss [le_refl] THEN
7896 CONJ_TAC THENL
7897 [rpt STRIP_TAC >> MATCH_MP_TAC le_mul THEN ASM_SIMP_TAC std_ss [le_infty, le_mul] THEN
7898 SIMP_TAC std_ss [indicator_fn_pos_le], ALL_TAC] THEN
7899 RW_TAC std_ss [] THEN ASM_SIMP_TAC std_ss [indicator_fn_def, GSPECIFICATION, IN_INTER] THEN
7900 COND_CASES_TAC THEN ASM_SIMP_TAC std_ss [mul_rone, mul_rzero]]
7901 >> ASM_SIMP_TAC std_ss [pos_fn_integral_zero, add_lzero]
7902 >> Suff `pos_fn_integral m
7903 (\x. PosInf * g x * indicator_fn ({x | 0 < g x} INTER m_space m) x) =
7904 pos_fn_integral m (\x. PosInf * indicator_fn ({x | 0 < g x} INTER m_space m) x)` THENL
7905 [DISC_RW_KILL,
7906 MATCH_MP_TAC pos_fn_integral_cong THEN ASM_SIMP_TAC std_ss [le_infty] THEN
7907 ASM_SIMP_TAC std_ss [le_mul, indicator_fn_pos_le, le_infty] THEN
7908 RW_TAC std_ss [] THEN ASM_SIMP_TAC std_ss [indicator_fn_def, GSPECIFICATION, IN_INTER] THEN
7909 COND_CASES_TAC THEN ASM_SIMP_TAC std_ss [mul_rone, mul_rzero] THEN
7910 `g x <> NegInf` by METIS_TAC [lt_infty, lte_trans, num_not_infty] THEN
7911 ASM_CASES_TAC ``g x = PosInf`` THEN ASM_SIMP_TAC std_ss [extreal_mul_def] THEN
7912 `g x = Normal (real (g x))` by ASM_SIMP_TAC std_ss [normal_real] THEN
7913 POP_ASSUM (fn th => ONCE_REWRITE_TAC [th]) THEN
7914 SIMP_TAC std_ss [extreal_mul_def, GSYM extreal_11, GSYM extreal_lt_eq] THEN
7915 ASM_SIMP_TAC std_ss [GSYM extreal_of_num_def, normal_real] THEN
7916 `g x <> 0` by METIS_TAC [lt_imp_ne] THEN ASM_SIMP_TAC std_ss []]
7917 >> Suff `{x | 0 < g x} INTER m_space m IN measurable_sets m` THENL
7918 [DISCH_TAC,
7919 `{x | 0 < g x} = PREIMAGE g {x | 0 < x}` by SET_TAC [PREIMAGE_def] THEN
7920 POP_ASSUM (fn th => REWRITE_TAC [th]) THEN FULL_SIMP_TAC std_ss [IN_MEASURABLE] THEN
7921 FULL_SIMP_TAC std_ss [space_def, subsets_def] THEN
7922 FIRST_X_ASSUM MATCH_MP_TAC THEN
7923 SIMP_TAC std_ss [BOREL_MEASURABLE_SETS_OR, extreal_of_num_def]]
7924 >> ASM_SIMP_TAC std_ss [pos_fn_integral_cmul_infty]
7925 >> ASM_CASES_TAC ``measure m ({x | 0 < g x} INTER m_space m) = 0``
7926 >- (Suff `pos_fn_integral m
7927 (\x. g x * indicator_fn ({x | 0 < g x} INTER m_space m) x) = 0` THENL
7928 [DISC_RW_KILL,
7929 MATCH_MP_TAC pos_fn_integral_null_set THEN
7930 ASM_SIMP_TAC std_ss [null_sets, GSPECIFICATION]] THEN
7931 SIMP_TAC std_ss [mul_rzero])
7932 >> Suff `measure m ({x | 0 < g x} INTER m_space m) =
7933 measure m ({x | x IN m_space m /\
7934 (\x. g x * indicator_fn ({x | 0 < g x} INTER m_space m) x) x <> 0})` THENL
7935 [DISCH_TAC,
7936 AP_TERM_TAC THEN SIMP_TAC std_ss [EXTENSION, GSPECIFICATION, IN_INTER] THEN
7937 GEN_TAC THEN EQ_TAC THEN RW_TAC std_ss [] THENL
7938 [ASM_SIMP_TAC std_ss [indicator_fn_def, GSPECIFICATION, IN_INTER] THEN
7939 ASM_SIMP_TAC std_ss [lt_imp_ne, mul_rone], ALL_TAC] THEN
7940 POP_ASSUM MP_TAC THEN ONCE_REWRITE_TAC [MONO_NOT_EQ] THEN RW_TAC std_ss [] THEN
7941 FULL_SIMP_TAC std_ss [extreal_not_lt] THEN `g x = 0` by METIS_TAC [le_antisym] THEN
7942 ASM_SIMP_TAC std_ss [mul_lzero]]
7943 >> Q.ABBREV_TAC `ff = (\x. g x * indicator_fn ({x | 0 < g x} INTER m_space m) x)`
7944 >> `measure m {x | x IN m_space m /\ ff x <> 0} <> 0` by METIS_TAC []
7945 >> Know `measure m {x | x IN m_space m /\ ff x <> 0} <> 0 <=>
7946 pos_fn_integral m ff <> 0`
7947 >- (ONCE_REWRITE_TAC [METIS [] ``(a = b:bool) = (~b = ~a)``] THEN
7948 SIMP_TAC std_ss [] THEN
7949 Know `!x. 0 <= ff x`
7950 >- (Q.UNABBREV_TAC `ff` >> GEN_TAC >> BETA_TAC \\
7951 MATCH_MP_TAC le_mul >> art [INDICATOR_FN_POS]) >> DISCH_TAC \\
7952 Know `pos_fn_integral m ff = integral m ff`
7953 >- (MATCH_MP_TAC EQ_SYM \\
7954 MATCH_MP_TAC integral_pos_fn >> art []) >> Rewr' \\
7955 MATCH_MP_TAC integral_eq_0 THEN (* was: pos_fn_integral_eq_0 *)
7956 Q.UNABBREV_TAC `ff` THEN ASM_SIMP_TAC std_ss [le_mul, indicator_fn_pos_le] THEN
7957 CONJ_TAC THENL
7958 [ALL_TAC,
7959 SIMP_TAC std_ss [AE_ALT, GSYM IN_NULL_SET, GSPECIFICATION] THEN
7960 SIMP_TAC std_ss [GSPEC_F, EMPTY_SUBSET, null_sets, GSPECIFICATION] THEN
7961 Q.EXISTS_TAC `{}` THEN METIS_TAC [measure_space_def, SIGMA_ALGEBRA, positive_def, subsets_def]] THEN
7962 MATCH_MP_TAC IN_MEASURABLE_BOREL_TIMES THEN Q.EXISTS_TAC `g` THEN
7963 Q.EXISTS_TAC `indicator_fn ({x | 0 < g x} INTER m_space m)` THEN
7964 ASM_SIMP_TAC std_ss [] THEN MATCH_MP_TAC IN_MEASURABLE_BOREL_INDICATOR THEN
7965 Q.EXISTS_TAC `{x | 0 < g x} INTER m_space m` THEN
7966 CONJ_TAC THENL [METIS_TAC [measure_space_def], ALL_TAC] THEN
7967 ASM_SIMP_TAC std_ss [] THEN
7968 `{x | 0 < g x} = PREIMAGE g {x | 0 < x}` by SET_TAC [PREIMAGE_def] THEN
7969 POP_ASSUM (fn th => REWRITE_TAC [th]) THEN FULL_SIMP_TAC std_ss [IN_MEASURABLE] THEN
7970 FULL_SIMP_TAC std_ss [space_def, subsets_def] THEN
7971 FIRST_X_ASSUM MATCH_MP_TAC THEN
7972 SIMP_TAC std_ss [BOREL_MEASURABLE_SETS_OR, extreal_of_num_def])
7973 >> DISCH_TAC
7974 >> Suff `0 <= pos_fn_integral m ff` THENL
7975 [DISCH_TAC,
7976 MATCH_MP_TAC pos_fn_integral_pos THEN Q.UNABBREV_TAC `ff` THEN
7977 ASM_SIMP_TAC std_ss [le_mul, indicator_fn_pos_le]]
7978 >> `0 < pos_fn_integral m ff` by METIS_TAC [le_lt]
7979 >> `pos_fn_integral m ff <> NegInf` by METIS_TAC [lt_infty, num_not_infty, lte_trans]
7980 >> Suff `PosInf * pos_fn_integral m ff = PosInf` THENL
7981 [DISC_RW_KILL,
7982 ASM_CASES_TAC ``pos_fn_integral m ff = PosInf`` THEN ASM_SIMP_TAC std_ss [extreal_mul_def] THEN
7983 `pos_fn_integral m ff = Normal (real (pos_fn_integral m ff))` by METIS_TAC [normal_real] THEN
7984 POP_ASSUM (fn th => ONCE_REWRITE_TAC[th]) THEN REWRITE_TAC [extreal_mul_def] THEN
7985 ASM_SIMP_TAC std_ss [GSYM extreal_11, GSYM extreal_lt_eq, GSYM extreal_of_num_def] THEN
7986 ASM_SIMP_TAC std_ss [normal_real] THEN METIS_TAC []]
7987 >> Suff `0 <= measure m {x | x IN m_space m /\ ff x <> 0}` THENL
7988 [DISCH_TAC, FULL_SIMP_TAC std_ss [measure_space_def, positive_def] THEN
7989 FIRST_ASSUM MATCH_MP_TAC THEN
7990 Suff `{x | x IN m_space m /\ ff x <> 0} = PREIMAGE ff {x | x <> 0} INTER m_space m` THENL
7991 [DISC_RW_KILL, SIMP_TAC std_ss [PREIMAGE_def] THEN SET_TAC []] THEN
7992 Suff `ff IN measurable (m_space m,measurable_sets m) Borel` THENL
7993 [DISCH_TAC,
7994 Q.UNABBREV_TAC `ff` THEN MATCH_MP_TAC IN_MEASURABLE_BOREL_TIMES THEN Q.EXISTS_TAC `g` THEN
7995 Q.EXISTS_TAC `indicator_fn ({x | 0 < g x} INTER m_space m)` THEN
7996 ASM_SIMP_TAC std_ss [measure_space_def, positive_def] THEN
7997 MATCH_MP_TAC IN_MEASURABLE_BOREL_INDICATOR THEN
7998 Q.EXISTS_TAC `{x | 0 < g x} INTER m_space m` THEN
7999 CONJ_TAC THENL [METIS_TAC [measure_space_def], ALL_TAC] THEN
8000 ASM_SIMP_TAC std_ss [] THEN
8001 `{x | 0 < g x} = PREIMAGE g {x | 0 < x}` by SET_TAC [PREIMAGE_def] THEN
8002 POP_ASSUM (fn th => REWRITE_TAC [th]) THEN FULL_SIMP_TAC std_ss [IN_MEASURABLE] THEN
8003 FULL_SIMP_TAC std_ss [space_def, subsets_def] THEN
8004 FIRST_X_ASSUM MATCH_MP_TAC THEN
8005 SIMP_TAC std_ss [BOREL_MEASURABLE_SETS_OR, extreal_of_num_def]] THEN
8006 FULL_SIMP_TAC std_ss [IN_MEASURABLE, subsets_def, space_def] THEN
8007 FIRST_X_ASSUM MATCH_MP_TAC THEN
8008 ONCE_REWRITE_TAC [SET_RULE ``{x | x <> 0} = UNIV DIFF {0}``] THEN
8009 MATCH_MP_TAC ALGEBRA_DIFF THEN SIMP_TAC std_ss [extreal_of_num_def, GSYM SPACE_BOREL] THEN
8010 ASSUME_TAC SIGMA_ALGEBRA_BOREL THEN `algebra Borel` by METIS_TAC [sigma_algebra_def] THEN
8011 ASM_SIMP_TAC std_ss [ALGEBRA_SPACE, BOREL_MEASURABLE_SETS_SING]]
8012 >> `0 < measure m {x | x IN m_space m /\ ff x <> 0}` by METIS_TAC [le_lt]
8013 >> Q.ABBREV_TAC `gg = {x | x IN m_space m /\ ff x <> 0}`
8014 >> `measure m gg <> NegInf` by METIS_TAC [lt_infty, lte_trans, num_not_infty]
8015 >> ASM_CASES_TAC ``measure m gg = PosInf``
8016 >> ASM_SIMP_TAC std_ss [extreal_mul_def]
8017 >> `measure m gg = Normal (real (measure m gg))` by METIS_TAC [normal_real]
8018 >> POP_ASSUM (fn th => ONCE_REWRITE_TAC[th])
8019 >> SIMP_TAC std_ss [extreal_mul_def]
8020 >> ASM_SIMP_TAC std_ss [GSYM extreal_11, GSYM extreal_lt_eq, GSYM extreal_of_num_def]
8021 >> ASM_SIMP_TAC std_ss [normal_real]
8022QED
8023
8024Theorem pos_fn_integral_max_0 :
8025 !m f. measure_space m /\
8026 (!x. x IN m_space m ==> 0 <= f x) ==>
8027 pos_fn_integral m (\x. max 0 (f x)) = pos_fn_integral m f
8028Proof
8029 rpt STRIP_TAC
8030 >> MATCH_MP_TAC pos_fn_integral_cong >> rw [le_max]
8031 >> MATCH_MP_TAC max_0_reduce >> rw []
8032QED
8033
8034Theorem pos_fn_integral_cmult :
8035 !f c m. measure_space m /\ 0 <= c /\
8036 f IN measurable (m_space m, measurable_sets m) Borel ==>
8037 pos_fn_integral m (\x. c * fn_plus f x) =
8038 c * pos_fn_integral m (fn_plus f)
8039Proof
8040 rpt STRIP_TAC
8041 >> `(\x. c * fn_plus f x) = fn_plus (\x. c * f x)` by METIS_TAC [FN_PLUS_CMUL_full]
8042 >> POP_ORW >> SIMP_TAC std_ss [o_DEF, FN_PLUS_ALT']
8043 >> MATCH_MP_TAC pos_fn_integral_cmult' >> art []
8044QED
8045
8046Theorem pos_fn_integral_cmul_general :
8047 !m f c. measure_space m /\ 0 <= c /\
8048 f IN Borel_measurable (measurable_space m) /\
8049 (!x. x IN m_space m ==> 0 <= f x) ==>
8050 pos_fn_integral m (\x. c * f x) = c * pos_fn_integral m f
8051Proof
8052 rpt STRIP_TAC
8053 >> MP_TAC (Q.SPECL [‘f’, ‘c’, ‘m’] pos_fn_integral_cmult)
8054 >> simp []
8055 >> Know ‘pos_fn_integral m f^+ = pos_fn_integral m f’
8056 >- (MATCH_MP_TAC pos_fn_integral_cong >> rw [FN_PLUS_REDUCE])
8057 >> Rewr'
8058 >> DISCH_THEN (REWRITE_TAC o wrap o SYM)
8059 >> MATCH_MP_TAC pos_fn_integral_cong >> simp []
8060 >> rpt STRIP_TAC
8061 >> MATCH_MP_TAC le_mul >> rw []
8062QED
8063
8064Theorem density_fn_plus :
8065 !M f. density M (fn_plus f) =
8066 (m_space M, measurable_sets M,
8067 (\A. pos_fn_integral M (\x. max 0 (f x * indicator_fn A x))))
8068Proof
8069 RW_TAC std_ss [density_def, density_measure_def, FUN_EQ_THM]
8070 >> Suff `!x. fn_plus f x * indicator_fn A x = max 0 (f x * indicator_fn A x)`
8071 >- rw []
8072 >> RW_TAC std_ss [FN_PLUS_ALT']
8073 >> Cases_on `x IN A`
8074 >> ASM_SIMP_TAC std_ss [indicator_fn_def, mul_rzero, mul_rone, max_refl]
8075QED
8076
8077Theorem pos_fn_integral_density' :
8078 !f g M. measure_space M /\
8079 f IN measurable (m_space M, measurable_sets M) Borel /\
8080 g IN measurable (m_space M, measurable_sets M) Borel /\
8081 (AE x::M. 0 <= f x) /\ (!x. 0 <= g x) ==>
8082 ((pos_fn_integral (m_space M, measurable_sets M,
8083 (\A. pos_fn_integral M (\x. max 0 (f x * indicator_fn A x))))
8084 (\x. max 0 (g x)) =
8085 pos_fn_integral M (\x. max 0 (f x * g x))))
8086Proof
8087 RW_TAC std_ss [GSYM density_fn_plus] THEN
8088 Suff `(\g. pos_fn_integral (density M (fn_plus f)) (\x. max 0 (g x)) =
8089 pos_fn_integral M (\x. max 0 (f x * g x))) g`
8090 >- (SIMP_TAC std_ss []) THEN
8091 MATCH_MP_TAC BOREL_INDUCT THEN (* induction on Borel functions *)
8092 Q.EXISTS_TAC `M` THEN ASM_SIMP_TAC std_ss [] THEN
8093 CONJ_TAC THEN1 (* Part I *)
8094 (RW_TAC std_ss [] THEN
8095 Know `pos_fn_integral (density M (fn_plus f)) (\x. max 0 (g' x)) =
8096 pos_fn_integral (density M (fn_plus f)) (\x. max 0 (f' x))` THEN1
8097 (MATCH_MP_TAC pos_fn_integral_cong THEN ASM_SIMP_TAC std_ss [le_max1] THEN
8098 reverse CONJ_TAC
8099 >- (RW_TAC std_ss [density_def, density_measure_def, m_space_def]) \\
8100 MATCH_MP_TAC measure_space_density' >> art []) THEN DISC_RW_KILL THEN
8101 ASM_SIMP_TAC std_ss [] THEN MATCH_MP_TAC pos_fn_integral_cong THEN
8102 ASM_SIMP_TAC std_ss [le_max1]) THEN
8103 CONJ_TAC THEN1 (* Part II *)
8104 (GEN_TAC THEN ONCE_REWRITE_TAC [METIS [extreal_max_def, indicator_fn_pos_le]
8105 ``!x. max 0 (indicator_fn A x) = indicator_fn A x``] THEN
8106 ONCE_REWRITE_TAC [METIS [ETA_AX] ``(\x. indicator_fn A x) = indicator_fn A``] THEN
8107 DISCH_TAC THEN `A IN measurable_sets (density M (fn_plus f))` by
8108 ASM_SIMP_TAC std_ss [density_fn_plus, measurable_sets_def] THEN
8109 `measure_space (density M (fn_plus f))` by METIS_TAC [measure_space_density'] THEN
8110 ASM_SIMP_TAC std_ss [pos_fn_integral_indicator] THEN
8111 ASM_SIMP_TAC std_ss [density_fn_plus, measure_def]) THEN
8112 CONJ_TAC THEN1 (* Part III *)
8113 (RW_TAC std_ss [] THEN
8114 Suff `pos_fn_integral (density M (fn_plus f)) (\x. max 0 (c * f' x)) =
8115 c * pos_fn_integral (density M (fn_plus f)) (\x. max 0 (f' x))` THENL
8116 [DISC_RW_KILL,
8117 MATCH_MP_TAC pos_fn_integral_cmult' THEN
8118 `measure_space (density M (fn_plus f))` by METIS_TAC [measure_space_density'] THEN
8119 ASM_SIMP_TAC std_ss [density_fn_plus, m_space_def, measurable_sets_def]] THEN
8120 ASM_SIMP_TAC std_ss [] THEN
8121 Suff `c * pos_fn_integral M (\x. max 0 ((\x. f x * f' x) x)) =
8122 pos_fn_integral M (\x. max 0 (c * (\x. f x * f' x) x))` THENL
8123 [SIMP_TAC std_ss [] THEN DISC_RW_KILL,
8124 MATCH_MP_TAC (GSYM pos_fn_integral_cmult') THEN
8125 ASM_SIMP_TAC std_ss [] THEN MATCH_MP_TAC IN_MEASURABLE_BOREL_TIMES THEN
8126 METIS_TAC []] THEN
8127 AP_TERM_TAC THEN ABS_TAC THEN AP_TERM_TAC THEN
8128 METIS_TAC [mul_comm, mul_assoc]) THEN
8129 CONJ_TAC THEN1 (* Part IV *)
8130 (RW_TAC std_ss [] THEN ASM_SIMP_TAC std_ss [add_ldistrib_pos] THEN
8131 Suff `!x. max 0 (f' x + g' x) = max 0 (f' x) + max 0 (g' x)` THENL
8132 [DISC_RW_KILL, METIS_TAC [extreal_max_def, le_add]] THEN
8133 Suff `pos_fn_integral (density M (fn_plus f)) (\x. (\x. max 0 (f' x)) x + (\x. max 0 (g' x)) x) =
8134 pos_fn_integral (density M (fn_plus f)) (\x. max 0 (f' x)) +
8135 pos_fn_integral (density M (fn_plus f)) (\x. max 0 (g' x))` THENL
8136 [SIMP_TAC std_ss [] THEN DISC_RW_KILL,
8137 MATCH_MP_TAC pos_fn_integral_add THEN
8138 `measure_space (density M (fn_plus f))` by METIS_TAC [measure_space_density'] THEN
8139 ASM_SIMP_TAC std_ss [le_max1] THEN ASM_SIMP_TAC std_ss [extreal_max_def] THEN
8140 ASM_SIMP_TAC std_ss [ETA_AX, density_fn_plus, m_space_def, measurable_sets_def]] THEN
8141 Suff `pos_fn_integral M (\x. max 0 (f x * f' x + f x * g' x)) =
8142 pos_fn_integral M (\x. (\x. max 0 (f x * f' x)) x + (\x. max 0 (f x * g' x)) x)` THENL
8143 [DISC_RW_KILL,
8144 MATCH_MP_TAC pos_fn_integral_cong_AE THEN
8145 ASM_SIMP_TAC std_ss [le_max1, le_mul, le_add] THEN
8146 FULL_SIMP_TAC std_ss [AE_ALT, GSPECIFICATION, null_set_def] THEN
8147 Q.EXISTS_TAC `N` THEN ASM_SIMP_TAC std_ss [] THEN
8148 FULL_SIMP_TAC std_ss [SUBSET_DEF, GSPECIFICATION] THEN RW_TAC std_ss [] THEN
8149 FIRST_X_ASSUM MATCH_MP_TAC THEN ASM_SIMP_TAC std_ss [] THEN
8150 POP_ASSUM MP_TAC THEN ONCE_REWRITE_TAC [MONO_NOT_EQ] THEN
8151 RW_TAC std_ss [extreal_max_def, add_rzero, add_lzero] THEN
8152 TRY (METIS_TAC [le_mul, le_add])] THEN
8153 MATCH_MP_TAC (GSYM pos_fn_integral_add) THEN
8154 ASM_SIMP_TAC std_ss [le_max1] THEN
8155 ONCE_REWRITE_TAC [METIS []
8156 ``!g. (\x. max 0 (f x * g x)) = (\x. max ((\x. 0) x) ((\x. f x * g x) x))``] THEN
8157 `(\x. 0) IN measurable (m_space M,measurable_sets M) Borel` by
8158 (MATCH_MP_TAC IN_MEASURABLE_BOREL_CONST THEN
8159 METIS_TAC [measure_space_def]) THEN
8160 CONJ_TAC THEN MATCH_MP_TAC IN_MEASURABLE_BOREL_MAX THEN
8161 FULL_SIMP_TAC std_ss [measure_space_def] THEN
8162 MATCH_MP_TAC IN_MEASURABLE_BOREL_TIMES THEN METIS_TAC [measure_space_def]) THEN
8163 RW_TAC std_ss [] THEN (* Part V *)
8164 Suff `AE x::M. f x * sup (IMAGE (\i. u i x) UNIV) = sup (IMAGE (\i. f x * u i x) UNIV)` THENL
8165 [DISCH_TAC,
8166 FULL_SIMP_TAC std_ss [AE_ALT, GSPECIFICATION, null_set_def, SUBSET_DEF] THEN
8167 Q.EXISTS_TAC `N` THEN ASM_SIMP_TAC std_ss [] THEN RW_TAC std_ss [] THEN
8168 FIRST_ASSUM MATCH_MP_TAC THEN ASM_REWRITE_TAC [] THEN
8169 POP_ASSUM MP_TAC THEN ONCE_REWRITE_TAC [MONO_NOT_EQ] THEN
8170 RW_TAC std_ss [] THEN
8171 Suff `f x * sup (IMAGE (\i. u i x) UNIV) =
8172 sup (IMAGE (\i. f x * (\i. u i x) i) UNIV)` THENL
8173 [SIMP_TAC std_ss [], ALL_TAC] THEN
8174 MATCH_MP_TAC (GSYM sup_cmult) THEN ASM_SIMP_TAC std_ss []] THEN
8175 Suff `pos_fn_integral (density M (fn_plus f))
8176 (\x. max 0 (sup (IMAGE (\i. u i x) univ(:num)))) =
8177 sup (IMAGE (\i. pos_fn_integral (density M (fn_plus f)) ((\i x. max 0 (u i x)) i)) UNIV)` THENL
8178 [DISC_RW_KILL,
8179 MATCH_MP_TAC lebesgue_monotone_convergence THEN
8180 ASM_SIMP_TAC std_ss [measure_space_density', le_max1] THEN
8181 ASM_SIMP_TAC std_ss [m_space_def, measurable_sets_def, density_fn_plus] THEN
8182 CONJ_TAC THENL
8183 [GEN_TAC THEN
8184 Suff `!x. max 0 (u i x) = max ((\x. 0) x) ((\x. u i x) x)` THENL
8185 [DISC_RW_KILL, SIMP_TAC std_ss []] THEN
8186 MATCH_MP_TAC IN_MEASURABLE_BOREL_MAX THEN
8187 `(\x. 0) IN measurable (m_space M,measurable_sets M) Borel` by
8188 (MATCH_MP_TAC IN_MEASURABLE_BOREL_CONST THEN
8189 METIS_TAC [measure_space_def]) THEN
8190 ONCE_REWRITE_TAC [METIS [ETA_AX] ``(\x. u i x) = u i``] THEN
8191 METIS_TAC [measure_space_def], ALL_TAC] THEN
8192 ASM_SIMP_TAC std_ss [extreal_max_def] THEN
8193 GEN_TAC THEN ASM_CASES_TAC ``!i:num. u i x = 0`` THENL
8194 [ASM_SIMP_TAC std_ss [IMAGE_DEF, IN_UNIV] THEN
8195 DISCH_TAC THEN COND_CASES_TAC THEN ASM_SIMP_TAC std_ss [] THEN
8196 POP_ASSUM MP_TAC THEN ONCE_REWRITE_TAC [MONO_NOT_EQ] THEN
8197 RW_TAC std_ss [le_sup] THEN POP_ASSUM (MATCH_MP_TAC) THEN
8198 ONCE_REWRITE_TAC [GSYM SPECIFICATION] THEN SIMP_TAC std_ss [GSPECIFICATION] THEN
8199 ONCE_REWRITE_TAC [EQ_SYM_EQ] THEN METIS_TAC [],
8200 ALL_TAC] THEN
8201 FULL_SIMP_TAC std_ss [] THEN RW_TAC std_ss [] THEN
8202 UNDISCH_TAC ``~(0 <= sup (IMAGE (\i. u i x) univ(:num)))`` THEN
8203 ONCE_REWRITE_TAC [MONO_NOT_EQ] THEN RW_TAC std_ss [le_lt] THEN
8204 SIMP_TAC std_ss [GSYM sup_lt] THEN Q.EXISTS_TAC `u i x` THEN
8205 CONJ_TAC THENL [ALL_TAC, METIS_TAC [le_lt]] THEN
8206 ONCE_REWRITE_TAC [GSYM SPECIFICATION] THEN
8207 SIMP_TAC std_ss [IN_IMAGE, IN_UNIV] THEN METIS_TAC []] THEN
8208 ASM_SIMP_TAC std_ss [] THEN
8209 Suff `pos_fn_integral M (\x. max 0 (f x * sup (IMAGE (\i. u i x) univ(:num)))) =
8210 pos_fn_integral M (\x. max 0 (sup (IMAGE (\i. f x * u i x) univ(:num))))` THENL
8211 [DISC_RW_KILL,
8212 MATCH_MP_TAC pos_fn_integral_cong_AE THEN ASM_SIMP_TAC std_ss [le_max1] THEN
8213 FULL_SIMP_TAC std_ss [AE_ALT, GSPECIFICATION, SUBSET_DEF, null_set_def] THEN
8214 Q.EXISTS_TAC `N'` THEN ASM_SIMP_TAC std_ss [] THEN RW_TAC std_ss [] THEN
8215 FIRST_X_ASSUM MATCH_MP_TAC THEN ASM_REWRITE_TAC [] THEN
8216 POP_ASSUM MP_TAC THEN ONCE_REWRITE_TAC [MONO_NOT_EQ] THEN RW_TAC std_ss []] THEN
8217 Suff
8218 `sup (IMAGE (\i. pos_fn_integral M (\x. max 0 ((\i x. f x * u i x) i x))) univ(:num)) =
8219 pos_fn_integral M (\x. max 0 ((\x. sup (IMAGE (\i. f x * u i x) univ(:num))) x))` THENL
8220 [SIMP_TAC std_ss [], ALL_TAC] THEN
8221 REWRITE_TAC [GSYM FN_PLUS_ALT'] THEN
8222 MATCH_MP_TAC (GSYM lebesgue_monotone_convergence_AE) THEN
8223 ASM_SIMP_TAC std_ss [] THEN CONJ_TAC THENL
8224 [GEN_TAC THEN MATCH_MP_TAC IN_MEASURABLE_BOREL_TIMES THEN
8225 Q.EXISTS_TAC `f` THEN Q.EXISTS_TAC `u i` THEN ASM_SIMP_TAC std_ss [],
8226 ALL_TAC] THEN
8227 FULL_SIMP_TAC std_ss [AE_ALT, GSYM IN_NULL_SET, GSPECIFICATION] THEN
8228 Q.EXISTS_TAC `N` THEN FULL_SIMP_TAC std_ss [SUBSET_DEF, GSPECIFICATION] THEN
8229 RW_TAC std_ss [] THEN FIRST_X_ASSUM MATCH_MP_TAC THENL
8230 [ASM_SIMP_TAC std_ss [] THEN POP_ASSUM MP_TAC THEN
8231 ONCE_REWRITE_TAC [MONO_NOT_EQ] THEN RW_TAC std_ss [] THEN
8232 MATCH_MP_TAC le_lmul_imp THEN FULL_SIMP_TAC std_ss [ext_mono_increasing_def],
8233 ALL_TAC] THEN
8234 ASM_SIMP_TAC std_ss [] THEN POP_ASSUM MP_TAC THEN
8235 ONCE_REWRITE_TAC [MONO_NOT_EQ] THEN RW_TAC std_ss [] THEN
8236 METIS_TAC [le_mul]
8237QED
8238
8239(**********************************************************)
8240(* Radon-Nikodym Theorem *)
8241(**********************************************************)
8242
8243Definition RADON_F_def:
8244 RADON_F m v =
8245 {f | f IN measurable (m_space m,measurable_sets m) Borel /\
8246 (!x. 0 <= f x) /\
8247 !A. A IN measurable_sets m ==>
8248 (pos_fn_integral m (\x. f x * indicator_fn A x) <= measure v A)}
8249End
8250
8251Definition RADON_F_integrals_def:
8252 RADON_F_integrals m v = {r | ?f. (r = pos_fn_integral m f) /\ f IN RADON_F m v}
8253End
8254
8255Theorem lemma_radon_max_in_F[local] :
8256 !f g m v. measure_space m /\ measure_space v /\
8257 (m_space v = m_space m) /\ (measurable_sets v = measurable_sets m) /\
8258 f IN RADON_F m v /\ g IN RADON_F m v
8259 ==> (\x. max (f x) (g x)) IN RADON_F m v
8260Proof
8261 RW_TAC real_ss [RADON_F_def, GSPECIFICATION, max_le, le_max]
8262 >> ‘sigma_algebra (measurable_space m)’
8263 by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA]
8264 >- FULL_SIMP_TAC std_ss [IN_MEASURABLE_BOREL_MAX, measure_space_def]
8265 >> Q.ABBREV_TAC `A1 = {x | x IN A /\ g x < f x}`
8266 >> Q.ABBREV_TAC `A2 = {x | x IN A /\ f x <= g x}`
8267 >> `DISJOINT A1 A2`
8268 by (qunabbrevl_tac [`A1`, `A2`] \\
8269 RW_TAC std_ss [IN_DISJOINT, GSPECIFICATION] \\
8270 METIS_TAC [extreal_lt_def])
8271 >> `A1 UNION A2 = A`
8272 by (qunabbrevl_tac [`A1`, `A2`] \\
8273 RW_TAC std_ss [IN_UNION, EXTENSION, GSPECIFICATION] \\
8274 METIS_TAC [extreal_lt_def])
8275 >> `(\x. max (f x) (g x) * indicator_fn A x) =
8276 (\x. (\x. max (f x) (g x) * indicator_fn A1 x) x +
8277 (\x. max (f x) (g x) * indicator_fn A2 x) x)`
8278 by (qunabbrevl_tac [`A1`, `A2`] \\
8279 RW_TAC std_ss [indicator_fn_def, GSPECIFICATION, FUN_EQ_THM] \\
8280 Cases_on `g x < f x`
8281 >- (RW_TAC std_ss [mul_rone,mul_rzero,add_rzero] >> METIS_TAC [extreal_lt_def])
8282 >> RW_TAC real_ss [mul_rone,mul_rzero,add_lzero] >> METIS_TAC [extreal_lt_def])
8283 >> `additive v` by METIS_TAC [MEASURE_SPACE_ADDITIVE]
8284 >> `A SUBSET m_space m` by RW_TAC std_ss [MEASURE_SPACE_SUBSET_MSPACE]
8285 >> `A1 = ({x | g x < f x} INTER m_space m) INTER A`
8286 by (Q.UNABBREV_TAC `A1` \\
8287 RW_TAC std_ss [EXTENSION, IN_INTER, GSPECIFICATION, CONJ_SYM] \\
8288 METIS_TAC [SUBSET_DEF])
8289 >> `A2 = ({x | f x <= g x} INTER m_space m) INTER A`
8290 by (Q.UNABBREV_TAC `A2` \\
8291 RW_TAC std_ss [EXTENSION, IN_INTER, GSPECIFICATION, CONJ_SYM] \\
8292 METIS_TAC [SUBSET_DEF])
8293 >> `A1 IN measurable_sets m`
8294 by (ASM_SIMP_TAC std_ss [] \\
8295 MATCH_MP_TAC MEASURE_SPACE_INTER >> RW_TAC std_ss [] \\
8296 METIS_TAC [IN_MEASURABLE_BOREL_LT, m_space_def, space_def, subsets_def,
8297 measurable_sets_def])
8298 >> `A2 IN measurable_sets m`
8299 by (ASM_SIMP_TAC std_ss [] \\
8300 MATCH_MP_TAC MEASURE_SPACE_INTER >> RW_TAC std_ss [] \\
8301 METIS_TAC [IN_MEASURABLE_BOREL_LE, m_space_def, space_def, subsets_def,
8302 measurable_sets_def])
8303 >> `measure v A = measure v A1 + measure v A2` by METIS_TAC [ADDITIVE]
8304 >> Q.PAT_X_ASSUM `A1 = M` (K ALL_TAC)
8305 >> Q.PAT_X_ASSUM `A2 = M` (K ALL_TAC)
8306 >> `!x. max (f x) (g x) * indicator_fn A1 x = f x * indicator_fn A1 x`
8307 by (Q.UNABBREV_TAC `A1` \\
8308 RW_TAC std_ss [extreal_max_def, indicator_fn_def, GSPECIFICATION,
8309 mul_rone, mul_rzero] \\
8310 METIS_TAC [extreal_lt_def])
8311 >> `!x. max (f x) (g x) * indicator_fn A2 x = g x * indicator_fn A2 x`
8312 by (Q.UNABBREV_TAC `A2` \\
8313 RW_TAC std_ss [extreal_max_def, indicator_fn_def, GSPECIFICATION,
8314 mul_rone, mul_rzero] \\
8315 METIS_TAC [extreal_lt_def])
8316 >> ASM_SIMP_TAC std_ss []
8317 >> `(\x. f x * indicator_fn A1 x) IN measurable (m_space m,measurable_sets m) Borel`
8318 by METIS_TAC [IN_MEASURABLE_BOREL_MUL_INDICATOR, measure_space_def,
8319 measurable_sets_def, subsets_def]
8320 >> `(\x. g x * indicator_fn A2 x) IN measurable (m_space m,measurable_sets m) Borel`
8321 by METIS_TAC [IN_MEASURABLE_BOREL_MUL_INDICATOR, measure_space_def,
8322 measurable_sets_def, subsets_def]
8323 >> `!x. x IN m_space m ==> 0 <= (\x. f x * indicator_fn A1 x) x`
8324 by RW_TAC std_ss [indicator_fn_def, mul_rone, mul_rzero, le_01, le_refl]
8325 >> `!x. x IN m_space m ==> 0 <= (\x. g x * indicator_fn A2 x) x`
8326 by RW_TAC std_ss [indicator_fn_def, mul_rone, mul_rzero, le_01, le_refl]
8327 >> FULL_SIMP_TAC std_ss [le_add2, pos_fn_integral_add]
8328QED
8329
8330Theorem lemma_radon_seq_conv_sup[local]:
8331 !f m v. (measure_space m /\ measure_space v /\
8332 (m_space v = m_space m) /\ (measurable_sets v = measurable_sets m)) /\
8333 (measure v (m_space v) <> PosInf) ==>
8334 ?f. (!n. f n IN RADON_F m v) /\ (!x n. f n x <= f (SUC n) x) /\
8335 (sup (IMAGE (\n. pos_fn_integral m (f n)) UNIV) = sup (RADON_F_integrals m v))
8336Proof
8337 RW_TAC std_ss [RADON_F_integrals_def]
8338 >> MATCH_MP_TAC EXTREAL_SUP_FUN_SEQ_MONO_IMAGE
8339 >> CONJ_TAC
8340 >- (Q.EXISTS_TAC `0` \\
8341 ONCE_REWRITE_TAC [GSYM SPECIFICATION] \\
8342 RW_TAC std_ss [GSPECIFICATION] \\
8343 Q.EXISTS_TAC `(\x. 0)` \\
8344 RW_TAC real_ss [RADON_F_def, GSPECIFICATION, pos_fn_integral_zero, mul_lzero, le_refl]
8345 >- (MATCH_MP_TAC IN_MEASURABLE_BOREL_CONST \\
8346 METIS_TAC [space_def, measure_space_def]) \\
8347 METIS_TAC [measure_space_def, positive_def])
8348 >> CONJ_TAC
8349 >- (Q.EXISTS_TAC `measure v (m_space v)` \\
8350 RW_TAC std_ss [] \\
8351 POP_ASSUM (MP_TAC o ONCE_REWRITE_RULE [GSYM SPECIFICATION]) \\
8352 RW_TAC std_ss [GSPECIFICATION, RADON_F_def] \\
8353 POP_ASSUM (MP_TAC o Q.SPEC `m_space m`) \\
8354 RW_TAC std_ss [MEASURE_SPACE_MSPACE_MEASURABLE, GSYM pos_fn_integral_mspace])
8355 >> CONJ_TAC
8356 >- RW_TAC std_ss [EXTENSION,GSPECIFICATION, IN_IMAGE, RADON_F_def]
8357 >> CONJ_TAC
8358 >- RW_TAC std_ss [RADON_F_def, GSPECIFICATION, pos_fn_integral_mono]
8359 >> RW_TAC std_ss [lemma_radon_max_in_F]
8360QED
8361
8362Theorem RN_lemma1[local]:
8363 !m v e. measure_space m /\ measure_space v /\ 0 < e /\
8364 (m_space v = m_space m) /\ (measurable_sets v = measurable_sets m) /\
8365 measure v (m_space m) <> PosInf /\
8366 measure m (m_space m) <> PosInf ==>
8367 ?A. A IN measurable_sets m /\
8368 measure m (m_space m) - measure v (m_space m) <= measure m A - measure v A /\
8369 !B. B IN measurable_sets m /\ B SUBSET A ==> -e < measure m B - measure v B
8370Proof
8371 (* proof *)
8372 RW_TAC std_ss []
8373 >> `!A. A IN measurable_sets m ==> measure m A <> NegInf`
8374 by METIS_TAC [MEASURE_SPACE_POSITIVE, positive_not_infty]
8375 >> `!A. A IN measurable_sets m ==> measure m A <= measure m (m_space m)`
8376 by METIS_TAC [MEASURABLE_SETS_SUBSET_SPACE, MEASURE_SPACE_MSPACE_MEASURABLE,
8377 INCREASING, MEASURE_SPACE_INCREASING]
8378 >> `!A. A IN measurable_sets m ==> measure m A <> PosInf` by METIS_TAC [lt_infty, let_trans]
8379 >> `!A. A IN measurable_sets m ==> measure v A <> NegInf`
8380 by METIS_TAC [MEASURE_SPACE_POSITIVE, positive_not_infty,
8381 measure_def, measurable_sets_def]
8382 >> `!A. A IN measurable_sets m ==> measure v A <= measure v (m_space m)`
8383 by METIS_TAC [MEASURABLE_SETS_SUBSET_SPACE, MEASURE_SPACE_MSPACE_MEASURABLE,
8384 INCREASING, MEASURE_SPACE_INCREASING]
8385 >> `!A. A IN measurable_sets m ==> measure v A <> PosInf` by METIS_TAC [lt_infty, let_trans]
8386 >> Q.ABBREV_TAC `d = (\A. measure m A - measure v A)`
8387 >> `!A. A IN measurable_sets m ==> d A <> NegInf` by METIS_TAC [sub_not_infty]
8388 >> `!A. A IN measurable_sets m ==> d A <> PosInf` by METIS_TAC [sub_not_infty]
8389 >> `e <> NegInf` by METIS_TAC [lt_infty, lt_trans, num_not_infty]
8390 >> Cases_on `e = PosInf`
8391 >- (Q.EXISTS_TAC `m_space m` \\
8392 METIS_TAC [MEASURE_SPACE_MSPACE_MEASURABLE, le_refl, lt_infty, extreal_ainv_def])
8393 >> Q.ABBREV_TAC
8394 `h = \A. if (!B. B IN measurable_sets m /\ B SUBSET (m_space m DIFF A) ==> -e < d B)
8395 then {}
8396 else @B. B IN measurable_sets m /\ B SUBSET (m_space m DIFF A) /\ d B <= -e`
8397 >> `!A. A IN measurable_sets m ==> h A IN measurable_sets m`
8398 by (RW_TAC std_ss [] >> METIS_TAC [MEASURE_SPACE_EMPTY_MEASURABLE, extreal_lt_def])
8399 >> Q.ABBREV_TAC `A = SIMP_REC {} (\a. a UNION h a)`
8400 >> `A 0 = {}` by METIS_TAC [SIMP_REC_THM]
8401 >> `!n. A (SUC n) = (A n) UNION (h (A n))`
8402 by (Q.UNABBREV_TAC `A` >> RW_TAC std_ss [SIMP_REC_THM])
8403 >> `!n. A n IN measurable_sets m`
8404 by (Induct >- RW_TAC std_ss [MEASURE_SPACE_EMPTY_MEASURABLE] \\
8405 RW_TAC std_ss [MEASURE_SPACE_UNION])
8406 >> Know `!n. (?B. B IN measurable_sets m /\ B SUBSET (m_space m DIFF (A n)) /\ d B <= -e) ==>
8407 d (A (SUC n)) <= d (A n) - e`
8408 >- (RW_TAC std_ss [] \\
8409 `~(!B. B IN measurable_sets m /\ B SUBSET (m_space m DIFF (A n)) ==> -e < d B)`
8410 by METIS_TAC [extreal_lt_def] \\
8411 `h (A n) = (@B. B IN measurable_sets m /\ B SUBSET m_space m DIFF (A n) /\ d B <= -e)`
8412 by (Q.UNABBREV_TAC `h` >> RW_TAC std_ss []) >> POP_ORW \\
8413 SELECT_ELIM_TAC >> RW_TAC std_ss [] >- METIS_TAC [] \\
8414 `DISJOINT (A n) x`
8415 by (RW_TAC std_ss [DISJOINT_DEF, EXTENSION, IN_INTER, NOT_IN_EMPTY] \\
8416 METIS_TAC [SUBSET_DEF, IN_DIFF]) \\
8417 Know `d ((A n) UNION x) = d (A n) + d x`
8418 >- (Q.UNABBREV_TAC `d` \\
8419 RW_TAC std_ss [] \\
8420 Know `measure m (A n UNION x) = measure m (A n) + measure m x`
8421 >- (MATCH_MP_TAC MEASURE_ADDITIVE >> art []) >> Rewr' \\
8422 Know `measure v (A n UNION x) = measure v (A n) + measure v x`
8423 >- (MATCH_MP_TAC MEASURE_ADDITIVE >> art []) >> Rewr' \\
8424 `?r1. measure v (A n) = Normal r1` by METIS_TAC [extreal_cases] \\
8425 `?r2. measure v x = Normal r2` by METIS_TAC [extreal_cases] \\
8426 RW_TAC std_ss [extreal_add_def] \\
8427 Cases_on `measure m (A n)` \\
8428 Cases_on `measure m x` \\
8429 RW_TAC std_ss [extreal_add_def, extreal_sub_def, REAL_ADD2_SUB2] \\
8430 METIS_TAC []) >> Rewr' \\
8431 `d (A n) - e = d (A n) + -e` by METIS_TAC [extreal_sub_add] \\
8432 METIS_TAC [le_ladd])
8433 >> DISCH_TAC
8434 >> `!n. d (A (SUC n)) <= d (A n)`
8435 by (RW_TAC std_ss [] \\
8436 Cases_on `(?B. B IN measurable_sets m /\ B SUBSET m_space m DIFF A n /\ d B <= -e)`
8437 >- (`d (A n) <= d (A n) + e` by METIS_TAC [lt_le, le_addr_imp] \\
8438 `d (A n) - e <= d (A n)`
8439 by (Cases_on `d (A n)` >> Cases_on `e` \\
8440 RW_TAC std_ss [extreal_add_def, extreal_sub_def, extreal_le_def,
8441 extreal_not_infty, lt_infty, le_infty] \\
8442 METIS_TAC [extreal_add_def, extreal_le_def, REAL_LE_SUB_RADD]) \\
8443 METIS_TAC [le_trans]) \\
8444 `!B. B IN measurable_sets m /\ B SUBSET m_space m DIFF A n ==> -e < d B`
8445 by METIS_TAC [extreal_lt_def] \\
8446 METIS_TAC [UNION_EMPTY, le_refl])
8447 >> Cases_on `?n. !B. ((B IN measurable_sets m /\ B SUBSET (m_space m DIFF (A n))) ==> -e < d B)`
8448 >- (Q.PAT_X_ASSUM `!n. A (SUC n) = a UNION b` (K ALL_TAC) \\
8449 FULL_SIMP_TAC std_ss [] \\
8450 `!n. m_space m DIFF (A n) IN measurable_sets m`
8451 by METIS_TAC [MEASURE_SPACE_DIFF, MEASURE_SPACE_MSPACE_MEASURABLE] \\
8452 Suff `!n. d (m_space m) <= d (m_space m DIFF (A n))`
8453 >- METIS_TAC [] \\
8454 Induct >- RW_TAC std_ss [DIFF_EMPTY, le_refl] \\
8455 `measure m (m_space m DIFF A (SUC n')) = measure m (m_space m) - measure m (A (SUC n'))`
8456 by METIS_TAC [MEASURE_SPACE_FINITE_DIFF] \\
8457 `measure v (m_space m DIFF A (SUC n')) = measure v (m_space m) - measure v (A (SUC n'))`
8458 by METIS_TAC [MEASURE_SPACE_FINITE_DIFF, measure_def, measurable_sets_def,
8459 m_space_def] \\
8460 `measure m (m_space m DIFF A n') = measure m (m_space m) - measure m (A n')`
8461 by METIS_TAC [MEASURE_SPACE_FINITE_DIFF] \\
8462 `measure v (m_space m DIFF A n') = measure v (m_space m) - measure v (A n')`
8463 by METIS_TAC [MEASURE_SPACE_FINITE_DIFF, measure_def, measurable_sets_def,
8464 m_space_def] \\
8465 `d (m_space m DIFF A n') = d (m_space m) - d (A n')`
8466 by (Q.UNABBREV_TAC `d` >> FULL_SIMP_TAC std_ss [] \\
8467 `?r1. measure m (m_space m) = Normal r1`
8468 by METIS_TAC [extreal_cases, MEASURE_SPACE_MSPACE_MEASURABLE] \\
8469 `?r2. measure v (m_space m) = Normal r2`
8470 by METIS_TAC [extreal_cases, MEASURE_SPACE_MSPACE_MEASURABLE] \\
8471 `?r3. measure m (A n') = Normal r3` by METIS_TAC [extreal_cases] \\
8472 `?r4. measure v (A n') = Normal r4` by METIS_TAC [extreal_cases] \\
8473 FULL_SIMP_TAC std_ss [extreal_add_def, extreal_sub_def, extreal_lt_def, extreal_11] \\
8474 REAL_ARITH_TAC) \\
8475 `d (m_space m DIFF A (SUC n')) = d (m_space m) - d (A (SUC n'))`
8476 by (Q.UNABBREV_TAC `d` >> FULL_SIMP_TAC std_ss [] \\
8477 `?r1. measure m (m_space m) = Normal r1`
8478 by METIS_TAC [extreal_cases, MEASURE_SPACE_MSPACE_MEASURABLE] \\
8479 `?r2. measure v (m_space m) = Normal r2`
8480 by METIS_TAC [extreal_cases, MEASURE_SPACE_MSPACE_MEASURABLE] \\
8481 `?r3. measure m (A (SUC n')) = Normal r3` by METIS_TAC [extreal_cases] \\
8482 `?r4. measure v (A (SUC n')) = Normal r4` by METIS_TAC [extreal_cases] \\
8483 FULL_SIMP_TAC std_ss [extreal_add_def, extreal_sub_def, extreal_lt_def, extreal_11] \\
8484 REAL_ARITH_TAC) \\
8485 FULL_SIMP_TAC std_ss [] \\
8486 `d (m_space m) - d (A n') <= d (m_space m) - d (A (SUC n'))`
8487 by METIS_TAC [extreal_sub_add, MEASURE_SPACE_MSPACE_MEASURABLE, le_ladd_imp, le_neg] \\
8488 METIS_TAC [le_trans])
8489 >> `!n. ?B. B IN measurable_sets m /\ B SUBSET (m_space m DIFF (A n)) /\ d B <= -e`
8490 by METIS_TAC [extreal_lt_def]
8491 >> `!n. d (A n) <= - &n * e`
8492 by (Induct
8493 >- METIS_TAC [mul_lzero,neg_0,le_refl,MEASURE_EMPTY,measure_def,sub_rzero]
8494 >> `d (A (SUC n)) <= d (A n) - e` by METIS_TAC []
8495 >> `?r1. d (A n) = Normal r1` by METIS_TAC [extreal_cases]
8496 >> `?r2. d (A (SUC n)) = Normal r2` by METIS_TAC [extreal_cases]
8497 >> `e <> PosInf` by ( METIS_TAC [extreal_sub_def,le_infty,extreal_not_infty])
8498 >> `?r3. e = Normal r3` by METIS_TAC [extreal_cases]
8499 >> FULL_SIMP_TAC std_ss [extreal_sub_def, extreal_le_def, extreal_ainv_def,
8500 extreal_of_num_def, extreal_mul_def]
8501 >> RW_TAC std_ss [ADD1, GSYM REAL_ADD, REAL_NEG_ADD, REAL_ADD_RDISTRIB,
8502 GSYM REAL_NEG_MINUS1]
8503 >> `r1 + -r3 <= -&n * r3 + -r3` by METIS_TAC [REAL_LE_ADD2,REAL_LE_REFL]
8504 >> METIS_TAC [real_sub,REAL_LE_TRANS])
8505 >> `!n. - d (A n) <= - d (A (SUC n))` by METIS_TAC [le_neg]
8506 >> `!n. A n SUBSET A (SUC n)` by METIS_TAC [SUBSET_UNION]
8507 >> `sup (IMAGE (measure m o A) UNIV) = measure m (BIGUNION (IMAGE A UNIV))`
8508 by METIS_TAC [MONOTONE_CONVERGENCE2,IN_FUNSET,IN_UNIV,measure_def,measurable_sets_def]
8509 >> `sup (IMAGE (measure v o A) UNIV) = measure v (BIGUNION (IMAGE A UNIV))`
8510 by METIS_TAC [MONOTONE_CONVERGENCE2,IN_FUNSET,IN_UNIV,measure_def,measurable_sets_def]
8511 >> FULL_SIMP_TAC std_ss [o_DEF]
8512 >> `?r1. !n. measure m (A n) = Normal (r1 n)`
8513 by (Q.EXISTS_TAC `(\n. @r. measure m (A n) = Normal r)`
8514 >> RW_TAC std_ss []
8515 >> SELECT_ELIM_TAC
8516 >> METIS_TAC [extreal_cases])
8517 >> `?r2. !n. measure v (A n) = Normal (r2 n)`
8518 by (Q.EXISTS_TAC `(\n. @r. measure v (A n) = Normal r)`
8519 >> RW_TAC std_ss []
8520 >> SELECT_ELIM_TAC
8521 >> METIS_TAC [extreal_cases])
8522 >> `BIGUNION (IMAGE A UNIV) IN measurable_sets m`
8523 by METIS_TAC [SIGMA_ALGEBRA_ENUM, measure_space_def, subsets_def,
8524 measurable_sets_def, IN_FUNSET, IN_UNIV]
8525 >> `?l1. measure m (BIGUNION (IMAGE A UNIV)) = Normal l1` by METIS_TAC [extreal_cases]
8526 >> `?l2. measure v (BIGUNION (IMAGE A UNIV)) = Normal l2` by METIS_TAC [extreal_cases]
8527 >> FULL_SIMP_TAC std_ss []
8528 >> `mono_increasing r1`
8529 by METIS_TAC [mono_increasing_def, mono_increasing_suc, MEASURE_SPACE_INCREASING,
8530 increasing_def, extreal_le_def]
8531 >> `mono_increasing r2`
8532 by METIS_TAC [mono_increasing_def, mono_increasing_suc, MEASURE_SPACE_INCREASING,
8533 increasing_def, extreal_le_def, measure_def, measurable_sets_def]
8534 >> FULL_SIMP_TAC std_ss [GSYM sup_seq]
8535 >> `!n. -d (A n) = Normal (r2 n - r1 n)`
8536 by (Q.UNABBREV_TAC `d`
8537 >> RW_TAC std_ss [extreal_sub_def,extreal_ainv_def,REAL_NEG_SUB])
8538 >> Q.ABBREV_TAC `r = (\n. r2 n - r1 n)`
8539 >> `mono_increasing r` by METIS_TAC [mono_increasing_suc, extreal_le_def]
8540 >> `r --> (l2 - l1)` by (Q.UNABBREV_TAC `r` >> METIS_TAC [SEQ_SUB])
8541 >> `sup (IMAGE (\n. Normal (r n)) UNIV) = Normal (l2 - l1)` by METIS_TAC [sup_seq]
8542 >> `sup (IMAGE (\n. -d (A n)) UNIV) = -d (BIGUNION (IMAGE A UNIV))`
8543 by (`(\n. -d (A n)) = (\n. Normal (r n))` by METIS_TAC []
8544 >> POP_ORW
8545 >> Q.UNABBREV_TAC `d`
8546 >> RW_TAC std_ss [extreal_sub_def, extreal_ainv_def, REAL_NEG_SUB])
8547 >> `d (BIGUNION (IMAGE A UNIV)) <> NegInf` by METIS_TAC []
8548 >> `- d (BIGUNION (IMAGE A UNIV)) <> PosInf`
8549 by METIS_TAC [extreal_ainv_def, extreal_cases, extreal_not_infty]
8550 >> `?n. - d (BIGUNION (IMAGE A UNIV)) < &n * e` by METIS_TAC [EXTREAL_ARCH]
8551 >> `&n * e <= -d (A n)` by METIS_TAC [le_neg,neg_neg,mul_lneg]
8552 >> `-d (BIGUNION (IMAGE A univ(:num))) < -d (A n)` by METIS_TAC [lte_trans]
8553 >> `-d (A n) <= - d (BIGUNION (IMAGE A UNIV))`
8554 by (RW_TAC std_ss []
8555 >> Q.PAT_X_ASSUM `sup P = -d Q` (MP_TAC o GSYM)
8556 >> DISCH_THEN (fn th => REWRITE_TAC [th])
8557 >> MATCH_MP_TAC le_sup_imp
8558 >> ONCE_REWRITE_TAC [GSYM SPECIFICATION]
8559 >> RW_TAC std_ss [IN_IMAGE,IN_UNIV]
8560 >> METIS_TAC [])
8561 >> METIS_TAC [extreal_lt_def]
8562QED
8563
8564Theorem RN_lemma2[local]:
8565 !m v. measure_space m /\ measure_space v /\
8566 (m_space v = m_space m) /\
8567 (measurable_sets v = measurable_sets m) /\
8568 measure v (m_space m) <> PosInf /\
8569 measure m (m_space m) <> PosInf ==>
8570 ?A. A IN measurable_sets m /\
8571 measure m (m_space m) - measure v (m_space m) <= measure m A - measure v A /\
8572 !B. B IN measurable_sets m /\ B SUBSET A ==> 0 <= measure m B - measure v B
8573Proof
8574 (* proof *)
8575 RW_TAC std_ss []
8576 >> Q.ABBREV_TAC `d = (\a. measure m a - measure v a)`
8577 >> Q.ABBREV_TAC
8578 `p = (\a b n. a IN measurable_sets m /\ a SUBSET b /\ d b <= d a /\
8579 !c. c IN measurable_sets m /\ c SUBSET a ==> -(Normal ((1 / 2) pow n)) < d c)`
8580 >> Q.ABBREV_TAC `sts = (\s. IMAGE (\A. s INTER A) (measurable_sets m))`
8581 >> `!s t. s IN measurable_sets m /\ t IN sts s ==> t IN measurable_sets m`
8582 by (RW_TAC std_ss []
8583 >> Q.UNABBREV_TAC `sts`
8584 >> FULL_SIMP_TAC std_ss [IN_IMAGE, MEASURE_SPACE_INTER])
8585 >> `!s t. t IN sts s ==> t SUBSET s`
8586 by (RW_TAC std_ss []
8587 >> Q.UNABBREV_TAC `sts`
8588 >> FULL_SIMP_TAC std_ss [IN_IMAGE, INTER_SUBSET])
8589 >> `!s. s IN measurable_sets m ==> measure_space (s, sts s, measure m)`
8590 by METIS_TAC [MEASURE_SPACE_RESTRICTED]
8591 >> `!s. s IN measurable_sets m ==> measure_space (s, sts s, measure v)`
8592 by METIS_TAC [MEASURE_SPACE_RESTRICTED]
8593 >> `!n. 0 < Normal ((1 / 2) pow n)`
8594 by METIS_TAC [extreal_lt_eq, extreal_of_num_def, POW_HALF_POS]
8595 >> `!s. s IN measurable_sets m ==> measure m s <> PosInf`
8596 by METIS_TAC [MEASURE_SPACE_FINITE_MEASURE]
8597 >> `!s. s IN measurable_sets m ==> measure v s <> PosInf`
8598 by METIS_TAC [MEASURE_SPACE_FINITE_MEASURE]
8599 >> `!s. s IN measurable_sets m ==> measure m s <> NegInf`
8600 by METIS_TAC [MEASURE_SPACE_POSITIVE, positive_not_infty]
8601 >> `!s. s IN measurable_sets m ==> measure v s <> NegInf`
8602 by METIS_TAC [MEASURE_SPACE_POSITIVE, positive_not_infty]
8603 >> `!s n. s IN measurable_sets m ==> ?A. p A s n`
8604 by (RW_TAC std_ss [] \\
8605 `?A. A IN (sts s) /\ measure m s - measure v s <= measure m A - measure v A /\
8606 !B. B IN (sts s) /\ B SUBSET A ==>
8607 -Normal ((1 / 2) pow n) < measure m B - measure v B`
8608 by (RW_TAC std_ss [] \\
8609 (MP_TAC o Q.SPECL [`(s,sts s,measure m)`,
8610 `(s,sts s,measure v)`,
8611 `Normal ((1 / 2) pow n)`]) RN_lemma1 \\
8612 RW_TAC std_ss [m_space_def, measure_def, measurable_sets_def]) \\
8613 Q.EXISTS_TAC `A` \\
8614 Q.UNABBREV_TAC `p` \\
8615 FULL_SIMP_TAC std_ss [measure_def] \\
8616 RW_TAC std_ss []
8617 >| [ (* goal 1 (of 3) *) METIS_TAC [],
8618 (* goal 2 (of 3) *) METIS_TAC [],
8619 (* goal 3 (of 3) *)
8620 `A SUBSET s` by METIS_TAC []
8621 >> Suff `c IN sts s` >- METIS_TAC []
8622 >> Q.UNABBREV_TAC `sts`
8623 >> FULL_SIMP_TAC std_ss [IN_IMAGE]
8624 >> Q.EXISTS_TAC `c`
8625 >> METIS_TAC [SUBSET_INTER2,SUBSET_TRANS] ])
8626 >> Q.ABBREV_TAC `A = PRIM_REC (m_space m) (\a n. @b. p b a n)`
8627 >> `A 0 = m_space m` by METIS_TAC [PRIM_REC_THM]
8628 >> `!n. A (SUC n) = @b. p b (A n) n`
8629 by (Q.UNABBREV_TAC `A` >> RW_TAC std_ss [PRIM_REC_THM])
8630 >> `!n. A n IN measurable_sets m`
8631 by (Induct >- METIS_TAC [MEASURE_SPACE_MSPACE_MEASURABLE]
8632 >> RW_TAC std_ss []
8633 >> SELECT_ELIM_TAC
8634 >> FULL_SIMP_TAC std_ss []
8635 >> METIS_TAC [])
8636 >> `!n. p (A (SUC n)) (A n) n` by METIS_TAC []
8637 >> `!n. A (SUC n) SUBSET (A n)` by METIS_TAC []
8638 >> `!n. d (A n) <= d (A (SUC n))` by METIS_TAC []
8639 >> `!n c. c IN measurable_sets m /\ c SUBSET (A (SUC n)) ==>
8640 -Normal ((1 / 2) pow n) < d c` by METIS_TAC []
8641 >> Q.EXISTS_TAC `BIGINTER (IMAGE A UNIV)`
8642 >> CONJ_TAC >- METIS_TAC [SIGMA_ALGEBRA_FN_BIGINTER, IN_UNIV, IN_FUNSET,
8643 subsets_def, measurable_sets_def, measure_space_def]
8644 >> reverse CONJ_TAC
8645 >- (RW_TAC std_ss [] \\
8646 SPOSE_NOT_THEN ASSUME_TAC \\
8647 FULL_SIMP_TAC std_ss [GSYM extreal_lt_def] \\
8648 `0 < - (measure m B - measure v B)` by METIS_TAC [lt_neg, neg_0] \\
8649 `?n. measure m B - measure v B < -Normal ((1 / 2) pow n)`
8650 by METIS_TAC [EXTREAL_ARCH_POW2_INV, lt_neg, neg_neg] \\
8651 `d B < -Normal ((1 / 2) pow n)` by METIS_TAC [] \\
8652 `!n. B SUBSET A n` by METIS_TAC [SUBSET_BIGINTER, IN_IMAGE, IN_UNIV] \\
8653 METIS_TAC [lt_antisym])
8654 >> `measure m (BIGINTER (IMAGE A UNIV)) = inf (IMAGE (measure m o A) UNIV)`
8655 by (MATCH_MP_TAC (GSYM MONOTONE_CONVERGENCE_BIGINTER2)
8656 >> RW_TAC std_ss [IN_UNIV, IN_FUNSET])
8657 >> `measure v (BIGINTER (IMAGE A UNIV)) = inf (IMAGE (measure v o A) UNIV)`
8658 by (MATCH_MP_TAC (GSYM MONOTONE_CONVERGENCE_BIGINTER2)
8659 >> RW_TAC std_ss [IN_UNIV, IN_FUNSET])
8660 >> `?r1. !n. measure m (A n) = Normal (r1 n)`
8661 by (Q.EXISTS_TAC `(\n. @r. measure m (A n) = Normal r)`
8662 >> RW_TAC std_ss []
8663 >> SELECT_ELIM_TAC
8664 >> METIS_TAC [extreal_cases])
8665 >> `?r2. !n. measure v (A n) = Normal (r2 n)`
8666 by (Q.EXISTS_TAC `(\n. @r. measure v (A n) = Normal r)`
8667 >> RW_TAC std_ss []
8668 >> SELECT_ELIM_TAC
8669 >> METIS_TAC [extreal_cases])
8670 >> `BIGINTER (IMAGE A UNIV) IN measurable_sets m` by METIS_TAC [MEASURE_SPACE_BIGINTER]
8671 >> `?l1. measure m (BIGINTER (IMAGE A UNIV)) = Normal l1` by METIS_TAC [extreal_cases]
8672 >> `?l2. measure v (BIGINTER (IMAGE A UNIV)) = Normal l2` by METIS_TAC [extreal_cases]
8673 >> FULL_SIMP_TAC std_ss [o_DEF]
8674 >> Q.PAT_X_ASSUM `Normal l1 = Q` (MP_TAC o GSYM)
8675 >> Q.PAT_X_ASSUM `Normal l2 = Q` (MP_TAC o GSYM)
8676 >> RW_TAC std_ss [extreal_sub_def]
8677 >> `mono_decreasing r1`
8678 by METIS_TAC [mono_decreasing_def, mono_decreasing_suc, MEASURE_SPACE_INCREASING,
8679 increasing_def, extreal_le_def]
8680 >> `mono_decreasing r2`
8681 by METIS_TAC [mono_decreasing_def, mono_decreasing_suc, MEASURE_SPACE_INCREASING,
8682 increasing_def, extreal_le_def, measure_def, measurable_sets_def]
8683 >> FULL_SIMP_TAC std_ss [GSYM inf_seq]
8684 >> `!n. -d (A n) = Normal (r2 n - r1 n)`
8685 by (Q.UNABBREV_TAC `d` \\
8686 RW_TAC std_ss [extreal_sub_def, extreal_ainv_def, REAL_NEG_SUB])
8687 >> Q.ABBREV_TAC `r = (\n. r2 n - r1 n)`
8688 >> `!n. -d (A (SUC n)) <= -d (A n)` by METIS_TAC [le_neg]
8689 >> `mono_decreasing r` by METIS_TAC [mono_decreasing_suc, extreal_le_def,extreal_ainv_def]
8690 >> `r --> (l2 - l1)` by (Q.UNABBREV_TAC `r` >> METIS_TAC [SEQ_SUB])
8691 >> `inf (IMAGE (\n. Normal (r n)) UNIV) = Normal (l2 - l1)` by METIS_TAC [inf_seq]
8692 >> `inf (IMAGE (\n. -d (A n)) UNIV) = -d (BIGINTER (IMAGE A UNIV))`
8693 by (`(\n. -d (A n)) = (\n. Normal (r n))` by METIS_TAC [] \\
8694 POP_ORW >> Q.UNABBREV_TAC `d` \\
8695 RW_TAC std_ss [extreal_sub_def, extreal_ainv_def, REAL_NEG_SUB])
8696 >> FULL_SIMP_TAC std_ss [inf_eq]
8697 >> `-d (BIGINTER (IMAGE A univ(:num))) <= -d (A 0)`
8698 by (Q.PAT_X_ASSUM `!y. Q ==> -d (BIGINTER (IMAGE A univ(:num))) <= y` MATCH_MP_TAC
8699 >> ONCE_REWRITE_TAC [GSYM SPECIFICATION]
8700 >> RW_TAC std_ss [IN_IMAGE, IN_UNIV]
8701 >> METIS_TAC [])
8702 >> METIS_TAC [le_neg]
8703QED
8704
8705Theorem Radon_Nikodym_finite : (* was: Radon_Nikodym *)
8706 !M N. measure_space M /\ measure_space N /\
8707 measurable_sets M = measurable_sets N /\
8708 measure M (m_space M) <> PosInf /\
8709 measure N (m_space N) <> PosInf /\
8710 measure_absolutely_continuous (measure N) M ==>
8711 ?f. f IN measurable (m_space M,measurable_sets M) Borel /\
8712 (!x. 0 <= f x) /\
8713 !A. A IN measurable_sets M ==>
8714 pos_fn_integral M (\x. f x * indicator_fn A x) = measure N A
8715Proof
8716 qx_genl_tac [`m`, `v`] >> rpt STRIP_TAC
8717 >> ‘m_space v = m_space m’ by PROVE_TAC [sets_eq_imp_space_eq]
8718 >> Q.PAT_X_ASSUM `measurable_sets m = measurable_sets v` (ASSUME_TAC o SYM)
8719 >> `?f_n. (!n. f_n n IN RADON_F m v) /\ (!x n. f_n n x <= f_n (SUC n) x) /\
8720 (sup (IMAGE (\n. pos_fn_integral m (f_n n)) univ(:num)) =
8721 sup (RADON_F_integrals m v))`
8722 by RW_TAC std_ss [lemma_radon_seq_conv_sup]
8723 >> Q.ABBREV_TAC `g = (\x. sup (IMAGE (\n. f_n n x) UNIV))`
8724 >> Q.EXISTS_TAC `g`
8725 >> `g IN measurable (m_space m,measurable_sets m) Borel`
8726 by (MATCH_MP_TAC IN_MEASURABLE_BOREL_MONO_SUP
8727 >> Q.EXISTS_TAC `f_n`
8728 >> FULL_SIMP_TAC std_ss [RADON_F_def, GSPECIFICATION, measure_space_def,
8729 space_def]
8730 >> RW_TAC std_ss [Abbr ‘g’])
8731 >> Know `!x. 0 <= g x`
8732 >- (RW_TAC std_ss [Abbr ‘g’, le_sup'] \\
8733 MATCH_MP_TAC le_trans >> Q.EXISTS_TAC `f_n 0 x` \\
8734 CONJ_TAC >- FULL_SIMP_TAC std_ss [RADON_F_def, GSPECIFICATION] \\
8735 POP_ASSUM MATCH_MP_TAC \\
8736 RW_TAC std_ss [IN_IMAGE, IN_UNIV] \\
8737 Q.EXISTS_TAC ‘0’ >> REWRITE_TAC []) >> DISCH_TAC
8738 >> RW_TAC std_ss []
8739 >> `!A. A IN measurable_sets m ==>
8740 (pos_fn_integral m (\x. g x * indicator_fn A x) =
8741 sup (IMAGE (\n. pos_fn_integral m (\x. f_n n x * indicator_fn A x)) UNIV))`
8742 by (RW_TAC std_ss []
8743 >> MATCH_MP_TAC lebesgue_monotone_convergence_subset
8744 >> FULL_SIMP_TAC std_ss [RADON_F_def, GSPECIFICATION,
8745 ext_mono_increasing_suc]
8746 >> RW_TAC std_ss [Abbr ‘g’]
8747 >> METIS_TAC [])
8748 >> `g IN RADON_F m v`
8749 by (FULL_SIMP_TAC std_ss [RADON_F_def,GSPECIFICATION,sup_le]
8750 >> RW_TAC std_ss []
8751 >> POP_ASSUM (MP_TAC o ONCE_REWRITE_RULE [GSYM SPECIFICATION])
8752 >> RW_TAC std_ss [IN_IMAGE,IN_UNIV]
8753 >> METIS_TAC [])
8754 >> `pos_fn_integral m g = sup (IMAGE (\n:num. pos_fn_integral m (f_n n)) UNIV)`
8755 by (MATCH_MP_TAC lebesgue_monotone_convergence
8756 >> FULL_SIMP_TAC std_ss [RADON_F_def, GSPECIFICATION, ext_mono_increasing_suc]
8757 >> Q.UNABBREV_TAC `g`
8758 >> METIS_TAC [])
8759 >> `pos_fn_integral m g = sup (RADON_F_integrals m v)` by FULL_SIMP_TAC std_ss []
8760 >> Q.ABBREV_TAC
8761 `nu = (\A. measure v A - pos_fn_integral m (\x. g x * indicator_fn A x))`
8762 >> `!A. A IN measurable_sets m ==>
8763 pos_fn_integral m (\x. g x * indicator_fn A x) <= measure v A`
8764 by FULL_SIMP_TAC std_ss [RADON_F_def, GSPECIFICATION]
8765 >> `!A. A IN measurable_sets m ==> measure v A <> PosInf`
8766 by METIS_TAC [lt_infty, INCREASING, MEASURE_SPACE_INCREASING, let_trans,
8767 MEASURE_SPACE_SUBSET_MSPACE, MEASURE_SPACE_MSPACE_MEASURABLE]
8768 >> `!A. A IN measurable_sets m ==> measure m A <> PosInf`
8769 by METIS_TAC [lt_infty, INCREASING, MEASURE_SPACE_INCREASING, let_trans,
8770 MEASURE_SPACE_SUBSET_MSPACE, MEASURE_SPACE_MSPACE_MEASURABLE]
8771 >> `!A x. 0 <= (\x. g x * indicator_fn A x) x`
8772 by RW_TAC std_ss [indicator_fn_def, mul_rzero, mul_rone, le_01, le_refl]
8773 >> `!A. A IN measurable_sets m ==>
8774 0 <= pos_fn_integral m (\x. g x * indicator_fn A x)`
8775 by (REPEAT STRIP_TAC >> MATCH_MP_TAC pos_fn_integral_pos >> METIS_TAC [])
8776 >> `!A. A IN measurable_sets m ==>
8777 pos_fn_integral m (\x. g x * indicator_fn A x) <> NegInf`
8778 by METIS_TAC [lt_infty, extreal_of_num_def, extreal_not_infty, lte_trans]
8779 >> `!A. A IN measurable_sets m ==>
8780 pos_fn_integral m (\x. g x * indicator_fn A x) <> PosInf`
8781 by METIS_TAC [let_trans, lt_infty]
8782 >> `!A. A IN measurable_sets m ==> 0 <= nu A`
8783 by (RW_TAC std_ss []
8784 >> FULL_SIMP_TAC std_ss [RADON_F_def, GSPECIFICATION]
8785 >> `pos_fn_integral m (\x. g x * indicator_fn A' x) <= measure v A'`
8786 by FULL_SIMP_TAC std_ss []
8787 >> `pos_fn_integral m (\x. g x * indicator_fn A' x) <> PosInf`
8788 by METIS_TAC [lt_infty, INCREASING, MEASURE_SPACE_INCREASING, let_trans,
8789 MEASURE_SPACE_SUBSET_MSPACE, MEASURE_SPACE_MSPACE_MEASURABLE]
8790 >> Q.UNABBREV_TAC `nu` >> METIS_TAC [sub_zero_le])
8791 >> `positive (m_space m,measurable_sets m,nu)`
8792 by (RW_TAC std_ss [positive_def, measure_def, measurable_sets_def] \\
8793 Q.UNABBREV_TAC `nu` \\
8794 RW_TAC std_ss [MEASURE_EMPTY, indicator_fn_def, NOT_IN_EMPTY,
8795 pos_fn_integral_zero, mul_rzero, mul_rone, sub_rzero])
8796 >> Q.PAT_X_ASSUM `!A. A IN measurable_sets m ==>
8797 (pos_fn_integral m (\x. g x * indicator_fn A x) = Q)` (K ALL_TAC)
8798 >> RW_TAC std_ss []
8799 >> `measure_space (m_space m,measurable_sets m,nu)`
8800 by (FULL_SIMP_TAC std_ss [measure_space_def, m_space_def, measurable_sets_def,
8801 countably_additive_def, measure_def]
8802 >> Q.UNABBREV_TAC `nu`
8803 >> RW_TAC std_ss [o_DEF]
8804 >> `suminf (\x. measure v (f x)) = measure v (BIGUNION (IMAGE f univ(:num)))`
8805 by METIS_TAC [o_DEF,countably_additive_def]
8806 >> `suminf (\x. measure v (f x)) <> PosInf` by METIS_TAC []
8807 >> `suminf (\x. measure v (f x) - pos_fn_integral m (\x'. g x' * indicator_fn (f x) x')) =
8808 suminf (\x. measure v (f x)) -
8809 suminf (\x. pos_fn_integral m (\x'. g x' * indicator_fn (f x) x'))`
8810 by (`(\x. measure v (f x) - pos_fn_integral m (\x'. g x' * indicator_fn (f x) x')) =
8811 (\x. (\x. measure v (f x)) x -
8812 (\x. pos_fn_integral m (\x'. g x' * indicator_fn (f x) x')) x)`
8813 by METIS_TAC []
8814 >> POP_ORW
8815 >> MATCH_MP_TAC ext_suminf_sub
8816 >> RW_TAC std_ss []
8817 >- (MATCH_MP_TAC pos_fn_integral_pos
8818 >> RW_TAC std_ss [indicator_fn_def,mul_rzero,mul_rone,le_refl]
8819 >> METIS_TAC [measure_space_def,countably_additive_def])
8820 >> METIS_TAC [IN_FUNSET,IN_UNIV])
8821 >> POP_ORW
8822 >> Suff `pos_fn_integral m (\x. g x * indicator_fn (BIGUNION (IMAGE f univ(:num))) x) =
8823 suminf (\x. pos_fn_integral m (\x'. g x' * indicator_fn (f x) x'))`
8824 >- RW_TAC std_ss []
8825 >> `measure_space m` by METIS_TAC [measure_space_def,countably_additive_def]
8826 >> `(!i x. 0 <= (\i x. g x * indicator_fn (f i) x) i x)`
8827 by RW_TAC std_ss [mul_rzero,mul_rone,indicator_fn_def,le_refl]
8828 >> `(!i. (\i x. g x * indicator_fn (f i) x) i IN measurable (m_space m,measurable_sets m) Borel)`
8829 by (RW_TAC std_ss [] \\
8830 METIS_TAC [IN_MEASURABLE_BOREL_MUL_INDICATOR, IN_FUNSET,
8831 IN_UNIV, measurable_sets_def, subsets_def])
8832 >> (MP_TAC o Q.SPECL [`m`,`(\i:num. (\x. g x * indicator_fn (f i) x))`])
8833 pos_fn_integral_suminf
8834 >> RW_TAC std_ss []
8835 >> POP_ASSUM (MP_TAC o GSYM)
8836 >> RW_TAC std_ss []
8837 >> Suff `(\x. g x * indicator_fn (BIGUNION (IMAGE f univ(:num))) x) =
8838 (\x'. suminf (\x. g x' * indicator_fn (f x) x'))`
8839 >- RW_TAC std_ss []
8840 >> RW_TAC std_ss [FUN_EQ_THM]
8841 >> `suminf (\x. g x' * (\x. indicator_fn (f x) x') x) =
8842 g x' * suminf (\x. indicator_fn (f x) x')`
8843 by (MATCH_MP_TAC ext_suminf_cmul \\
8844 RW_TAC std_ss [mul_rone,mul_rzero,le_refl,indicator_fn_def,le_01])
8845 >> FULL_SIMP_TAC std_ss []
8846 >> Suff `suminf (\i. indicator_fn (f i) x') =
8847 indicator_fn (BIGUNION (IMAGE f univ(:num))) x'`
8848 >- RW_TAC std_ss []
8849 >> FULL_SIMP_TAC std_ss [indicator_fn_suminf])
8850 >> `!A. A IN measurable_sets m ==> nu A <= nu (m_space m)`
8851 by METIS_TAC [MEASURE_SPACE_INCREASING, INCREASING,
8852 MEASURE_SPACE_SUBSET_MSPACE,
8853 measure_def, measurable_sets_def, m_space_def,
8854 MEASURE_SPACE_MSPACE_MEASURABLE]
8855 >> Cases_on `nu A = 0` >- METIS_TAC [sub_0]
8856 >> `0 < nu A` by METIS_TAC [lt_le, MEASURE_SPACE_POSITIVE, positive_def]
8857 >> `0 < nu (m_space m)` by METIS_TAC [lte_trans]
8858 >> `0 <> measure m (m_space m)`
8859 by (SPOSE_NOT_THEN ASSUME_TAC
8860 >> `measure v (m_space m) = 0`
8861 by METIS_TAC [MEASURE_SPACE_MSPACE_MEASURABLE,
8862 measure_absolutely_continuous_def]
8863 >> `pos_fn_integral m (\x. g x * indicator_fn (m_space m) x) <= 0`
8864 by METIS_TAC [MEASURE_SPACE_MSPACE_MEASURABLE]
8865 >> `pos_fn_integral m (\x. g x * indicator_fn (m_space m) x) = 0`
8866 by METIS_TAC [le_antisym,MEASURE_SPACE_MSPACE_MEASURABLE]
8867 >> `nu (m_space m) = 0` by (Q.UNABBREV_TAC `nu` >> METIS_TAC [sub_rzero])
8868 >> METIS_TAC [lt_imp_ne])
8869 >> `0 < measure m (m_space m)`
8870 by METIS_TAC [lt_le, MEASURE_SPACE_POSITIVE, positive_def,
8871 MEASURE_SPACE_MSPACE_MEASURABLE]
8872 >> Q.ABBREV_TAC `z = nu (m_space m) / (2 * measure m (m_space m)) `
8873 >> `nu (m_space m) <> NegInf` by METIS_TAC [lt_trans, lt_infty, num_not_infty]
8874 >> `measure m (m_space m) <> NegInf` by METIS_TAC [lt_trans, lt_infty, num_not_infty]
8875 >> `nu (m_space m) <> PosInf`
8876 by (Q.UNABBREV_TAC `nu`
8877 >> RW_TAC std_ss []
8878 >> METIS_TAC [sub_not_infty, MEASURE_SPACE_MSPACE_MEASURABLE])
8879 >> `?e. 0 < e /\ (z = Normal e)`
8880 by (Q.UNABBREV_TAC `z`
8881 >> `?r1. nu (m_space m) = Normal r1` by METIS_TAC [extreal_cases]
8882 >> `?r2. measure m (m_space m) = Normal r2` by METIS_TAC [extreal_cases]
8883 >> RW_TAC std_ss [extreal_mul_def,extreal_of_num_def]
8884 >> `0 < r1` by METIS_TAC [extreal_of_num_def,extreal_lt_eq]
8885 >> `0 < r2` by METIS_TAC [extreal_of_num_def,extreal_lt_eq]
8886 >> `0 < 2 * r2` by RW_TAC real_ss [REAL_LT_MUL]
8887 >> FULL_SIMP_TAC std_ss [extreal_div_eq,REAL_LT_IMP_NE]
8888 >> `0 < r1 / (2 * r2)` by RW_TAC std_ss [REAL_LT_DIV]
8889 >> METIS_TAC [])
8890 >> Q.ABBREV_TAC `snu = (\A. nu A - Normal e * (measure m A))`
8891 >> `?A'. A' IN measurable_sets m /\ snu(m_space m) <= snu (A') /\
8892 !B. B IN measurable_sets m /\ B SUBSET A' ==> 0 <= snu (B)`
8893 by (Q.UNABBREV_TAC `snu` >> RW_TAC std_ss [] \\
8894 MP_TAC
8895 (Q.SPECL [`(m_space m, measurable_sets m, nu)`,
8896 `(m_space m, measurable_sets m, (\A. Normal e * measure m A))`]
8897 RN_lemma2) \\
8898 RW_TAC std_ss [m_space_def, measurable_sets_def, measure_def] \\
8899 METIS_TAC [MEASURE_SPACE_CMUL, REAL_LT_IMP_LE, mul_not_infty,
8900 extreal_not_infty])
8901 >> Q.ABBREV_TAC `g' = (\x. g x + Normal e * indicator_fn (A') x)`
8902 >> `!A. A IN measurable_sets m ==>
8903 pos_fn_integral m (\x. g' x * indicator_fn A x) =
8904 pos_fn_integral m (\x. g x * indicator_fn A x) +
8905 Normal e * measure m (A INTER A')`
8906 by (rpt STRIP_TAC
8907 >> `measure m (A'' INTER A') =
8908 pos_fn_integral m (indicator_fn (A'' INTER A'))`
8909 by METIS_TAC [pos_fn_integral_indicator,MEASURE_SPACE_INTER]
8910 >> POP_ORW
8911 >> `Normal e * pos_fn_integral m (indicator_fn (A'' INTER A')) =
8912 pos_fn_integral m (\x. Normal e * indicator_fn (A'' INTER A') x)`
8913 by ((MATCH_MP_TAC o GSYM) pos_fn_integral_cmul
8914 >> RW_TAC real_ss [REAL_LT_IMP_LE,indicator_fn_def,le_01,le_refl])
8915 >> POP_ORW
8916 >> Q.UNABBREV_TAC `g'`
8917 >> `(\x. (\x. g x + Normal e * indicator_fn A' x) x * indicator_fn A'' x)
8918 =
8919 (\x. (\x. g x * indicator_fn A'' x) x +
8920 (\x. Normal e * indicator_fn (A'' INTER A') x) x)`
8921 by (RW_TAC std_ss [FUN_EQ_THM, indicator_fn_def, IN_INTER] \\
8922 METIS_TAC [mul_rone, mul_rzero, add_rzero, indicator_fn_def,
8923 IN_INTER])
8924 >> POP_ORW
8925 >> MATCH_MP_TAC pos_fn_integral_add
8926 >> FULL_SIMP_TAC std_ss []
8927 >> CONJ_TAC
8928 >- (RW_TAC std_ss [indicator_fn_def,le_01,le_refl,mul_rone,mul_rzero]
8929 >> FULL_SIMP_TAC std_ss [extreal_of_num_def,extreal_le_def,
8930 REAL_LT_IMP_LE])
8931 >> RW_TAC std_ss []
8932 >- METIS_TAC [IN_MEASURABLE_BOREL_MUL_INDICATOR, measure_space_def,
8933 measurable_sets_def, subsets_def]
8934 >> MATCH_MP_TAC IN_MEASURABLE_BOREL_CMUL
8935 >> RW_TAC std_ss []
8936 >> Q.EXISTS_TAC `indicator_fn (A'' INTER A')`
8937 >> Q.EXISTS_TAC `e`
8938 >> RW_TAC std_ss []
8939 >- FULL_SIMP_TAC std_ss [measure_space_def]
8940 >> MATCH_MP_TAC IN_MEASURABLE_BOREL_INDICATOR
8941 >> METIS_TAC [measure_space_def, measurable_sets_def, subsets_def,
8942 MEASURE_SPACE_INTER, space_def])
8943 >> `!A. A IN measurable_sets m ==> ((A INTER A') IN measurable_sets m /\ (A INTER A') SUBSET A')`
8944 by METIS_TAC [INTER_SUBSET, MEASURE_SPACE_INTER]
8945 >> `!A. A IN measurable_sets m ==> 0 <= nu (A INTER A') - Normal e * measure m (A INTER A')`
8946 by (Q.UNABBREV_TAC `snu` >> METIS_TAC [])
8947 >> `!A. A IN measurable_sets m ==> Normal e * measure m (A INTER A') <= nu (A INTER A')`
8948 by (RW_TAC std_ss [] \\
8949 `Normal e * measure m (A'' INTER A') <> PosInf`
8950 by FULL_SIMP_TAC std_ss [mul_not_infty, REAL_LT_IMP_LE, MEASURE_SPACE_INTER] \\
8951 `Normal e * measure m (A'' INTER A') <> NegInf`
8952 by METIS_TAC [mul_not_infty, REAL_LT_IMP_LE, MEASURE_SPACE_INTER,
8953 MEASURE_SPACE_POSITIVE, positive_not_infty] \\
8954 METIS_TAC [sub_zero_le])
8955 >> `!A. A IN measurable_sets m ==>
8956 pos_fn_integral m (\x. g x * indicator_fn A x) + Normal e * measure m (A INTER A') <=
8957 pos_fn_integral m (\x. g x * indicator_fn A x) + nu (A INTER A')`
8958 by METIS_TAC [le_ladd_imp]
8959 >> `!A. A IN measurable_sets m ==> nu (A INTER A') <= nu A`
8960 by (RW_TAC std_ss [] \\
8961 (MATCH_MP_TAC o REWRITE_RULE [measurable_sets_def, measure_def] o
8962 Q.SPEC `(m_space m,measurable_sets m,nu)`) INCREASING \\
8963 METIS_TAC [MEASURE_SPACE_INCREASING, MEASURE_SPACE_INTER, INTER_SUBSET])
8964 >> `!A. A IN measurable_sets m ==>
8965 pos_fn_integral m (\x. g x * indicator_fn A x) + Normal e * measure m (A INTER A') <=
8966 pos_fn_integral m (\x. g x * indicator_fn A x) + nu (A)`
8967 by METIS_TAC [le_ladd_imp,le_trans]
8968 >> `!A. A IN measurable_sets m ==>
8969 pos_fn_integral m (\x. g x * indicator_fn A x) +
8970 Normal e * measure m (A INTER A') <= measure v A`
8971 by (Q.UNABBREV_TAC `nu` >> FULL_SIMP_TAC std_ss [] \\
8972 RW_TAC std_ss [] >> METIS_TAC [sub_add2])
8973 >> `!A. A IN measurable_sets m ==>
8974 pos_fn_integral m (\x. g' x * indicator_fn A x) <= measure v A`
8975 by METIS_TAC []
8976 >> `g' IN RADON_F m v`
8977 by (RW_TAC std_ss [RADON_F_def,GSPECIFICATION]
8978 >- (Q.UNABBREV_TAC `g'` \\
8979 MATCH_MP_TAC IN_MEASURABLE_BOREL_ADD \\
8980 Q.EXISTS_TAC `g` \\
8981 Q.EXISTS_TAC `(\x. Normal e * indicator_fn A' x)` \\
8982 CONJ_TAC >- FULL_SIMP_TAC std_ss [measure_space_def] \\
8983 FULL_SIMP_TAC std_ss [] \\
8984 CONJ_TAC
8985 >- (MATCH_MP_TAC IN_MEASURABLE_BOREL_CMUL \\
8986 METIS_TAC [measure_space_def, subsets_def, measurable_sets_def,
8987 IN_MEASURABLE_BOREL_INDICATOR]) \\
8988 RW_TAC std_ss [indicator_fn_def, mul_rone, mul_rzero, num_not_infty, space_def] \\
8989 METIS_TAC [lt_infty, lte_trans, num_not_infty]) \\
8990 Q.UNABBREV_TAC `g'` \\
8991 RW_TAC std_ss [indicator_fn_def, mul_rone, mul_rzero, add_rzero] \\
8992 METIS_TAC [le_add2, add_rzero, le_trans, lt_imp_le,
8993 extreal_lt_eq, extreal_of_num_def])
8994 >> `pos_fn_integral m g' IN RADON_F_integrals m v`
8995 by (FULL_SIMP_TAC std_ss [RADON_F_integrals_def, GSPECIFICATION] \\
8996 METIS_TAC [])
8997 >> `pos_fn_integral m (\x. g' x * indicator_fn (m_space m) x) =
8998 pos_fn_integral m (\x. g x * indicator_fn (m_space m) x) + Normal e * measure m A'`
8999 by METIS_TAC [MEASURE_SPACE_MSPACE_MEASURABLE,
9000 MEASURE_SPACE_SUBSET_MSPACE, SUBSET_INTER2]
9001 >> `!x. 0 <= g' x`
9002 by (Q.UNABBREV_TAC `g'` \\
9003 RW_TAC std_ss [indicator_fn_def, mul_rone, mul_rzero, add_rzero] \\
9004 METIS_TAC [le_add2, add_rzero, le_trans, lt_imp_le, extreal_lt_eq, extreal_of_num_def])
9005 >> `pos_fn_integral m g' = pos_fn_integral m g + Normal e * measure m A'`
9006 by METIS_TAC [pos_fn_integral_mspace]
9007 >> `0 < snu (m_space m)`
9008 by (Q.UNABBREV_TAC `snu` \\
9009 RW_TAC std_ss [] \\
9010 `?r1. nu (m_space m) = Normal r1` by METIS_TAC [extreal_cases] \\
9011 `?r2. measure m (m_space m) = Normal r2` by METIS_TAC [extreal_cases] \\
9012 `0 < r1` by METIS_TAC [extreal_of_num_def,extreal_lt_eq] \\
9013 `0 < r2` by METIS_TAC [extreal_of_num_def,extreal_lt_eq] \\
9014 `0 < 2 * r2` by RW_TAC real_ss [REAL_LT_MUL] \\
9015 `Normal e = nu (m_space m) / (2 * measure m (m_space m))`
9016 by RW_TAC std_ss [] >> POP_ORW \\
9017 REWRITE_TAC [extreal_of_num_def] \\
9018 FULL_SIMP_TAC std_ss [extreal_mul_def, extreal_div_eq, REAL_LT_IMP_NE,
9019 extreal_sub_def, extreal_lt_eq] \\
9020 RW_TAC real_ss [real_div, REAL_INV_MUL, REAL_LT_IMP_NE, REAL_MUL_ASSOC] \\
9021 `inv 2 * inv r2 * r2 = inv 2`
9022 by METIS_TAC [REAL_LT_IMP_NE, REAL_MUL_LINV, REAL_MUL_ASSOC,
9023 REAL_MUL_RID] \\
9024 `r1 - r1 * inv 2 * inv r2 * r2 = r1 / 2`
9025 by METIS_TAC [REAL_NEG_HALF, real_div, REAL_MUL_ASSOC] \\
9026 FULL_SIMP_TAC real_ss [REAL_LT_DIV])
9027 >> `0 < snu A'` by METIS_TAC [lte_trans]
9028 >> `Normal e * measure m A' <> PosInf` by METIS_TAC [REAL_LT_IMP_LE,mul_not_infty]
9029 >> `Normal e * measure m A' <> NegInf`
9030 by METIS_TAC [REAL_LT_IMP_LE, mul_not_infty, MEASURE_SPACE_POSITIVE,
9031 positive_not_infty]
9032 >> `Normal e * measure m A' < nu (A')` by METIS_TAC [sub_zero_lt2]
9033 >> `0 <= Normal e * measure m A'`
9034 by METIS_TAC [le_mul, REAL_LT_IMP_LE, extreal_le_def, MEASURE_SPACE_POSITIVE,
9035 positive_def, extreal_of_num_def]
9036 >> `0 < nu A'` by METIS_TAC [let_trans]
9037 >> `0 <> measure m A'`
9038 by (SPOSE_NOT_THEN ASSUME_TAC \\
9039 `measure v A' = 0`
9040 by METIS_TAC [MEASURE_SPACE_MSPACE_MEASURABLE,
9041 measure_absolutely_continuous_def] \\
9042 `pos_fn_integral m (\x. g x * indicator_fn A' x) <= 0` by METIS_TAC [] \\
9043 `pos_fn_integral m (\x. g x * indicator_fn A' x) = 0`
9044 by METIS_TAC [le_antisym] \\
9045 `nu A' = 0` by (Q.UNABBREV_TAC `nu` >> METIS_TAC [sub_rzero]) \\
9046 METIS_TAC [lt_imp_ne])
9047 >> `0 < measure m A'`
9048 by METIS_TAC [lt_le, MEASURE_SPACE_POSITIVE, positive_def,
9049 MEASURE_SPACE_MSPACE_MEASURABLE]
9050 >> `0 < Normal e * measure m A'`
9051 by METIS_TAC [lt_mul, extreal_lt_eq, extreal_of_num_def]
9052 >> `pos_fn_integral m g <> NegInf`
9053 by METIS_TAC [pos_fn_integral_pos, lt_infty, num_not_infty, lte_trans]
9054 >> `pos_fn_integral m g <> PosInf`
9055 by METIS_TAC [MEASURE_SPACE_MSPACE_MEASURABLE, pos_fn_integral_mspace]
9056 >> `pos_fn_integral m g < pos_fn_integral m g'`
9057 by METIS_TAC [let_add2, le_refl, num_not_infty, add_rzero]
9058 >> `pos_fn_integral m g' <= pos_fn_integral m g`
9059 by METIS_TAC [le_sup_imp, SPECIFICATION]
9060 >> METIS_TAC [extreal_lt_def]
9061QED
9062
9063(* cf. measure_density_indicator for simplified statements *)
9064Theorem measure_restricted :
9065 !m s t. measure_space m /\
9066 s IN measurable_sets m /\ t IN measurable_sets m ==>
9067 (measure (m_space m, measurable_sets m,
9068 (\A. pos_fn_integral m (\x. indicator_fn s x * indicator_fn A x))) t =
9069 measure m (s INTER t))
9070Proof
9071 Q.X_GEN_TAC `M` THEN RW_TAC std_ss [] THEN
9072 `algebra (m_space M, measurable_sets M)` by
9073 METIS_TAC [measure_space_def, sigma_algebra_def] THEN
9074 `s INTER t IN measurable_sets M` by METIS_TAC [ALGEBRA_INTER, subsets_def] THEN
9075 Q.ABBREV_TAC `m = (m_space M,measurable_sets M,
9076 (\A. pos_fn_integral M (\x. indicator_fn s x * indicator_fn A x)))` THEN
9077
9078 Suff `measure_space m` THEN1
9079 ( DISCH_TAC THEN `t IN measurable_sets m` by METIS_TAC [measurable_sets_def] THEN
9080 ASM_SIMP_TAC std_ss [GSYM pos_fn_integral_indicator] THEN
9081 ONCE_REWRITE_TAC [METIS [INDICATOR_FN_MUL_INTER]
9082 ``indicator_fn (s INTER t) = (\x. indicator_fn s x * indicator_fn t x)``] THEN
9083 ASM_CASES_TAC ``m_space M = {}`` THENL
9084 [Suff `measurable_sets M = {{}}` THENL
9085 [DISCH_TAC,
9086 FULL_SIMP_TAC std_ss [measure_space_def, sigma_algebra_def, algebra_def] THEN
9087 FULL_SIMP_TAC std_ss [space_def, subsets_def, subset_class_def] THEN
9088 UNDISCH_TAC ``!x. x IN measurable_sets M ==> x SUBSET {}`` THEN
9089 SIMP_TAC std_ss [SUBSET_EMPTY, EXTENSION, IN_SING] THEN DISCH_TAC THEN
9090 GEN_TAC THEN EQ_TAC THEN ASM_SIMP_TAC std_ss [] THEN DISCH_TAC THEN
9091 `x = {}` by ASM_SET_TAC [] THEN METIS_TAC []] THEN
9092 FULL_SIMP_TAC std_ss [IN_SING] THEN
9093 SIMP_TAC std_ss [indicator_fn_def, NOT_IN_EMPTY, mul_rzero] THEN
9094 ASM_SIMP_TAC std_ss [pos_fn_integral_zero],
9095 ALL_TAC] THEN
9096 Q.UNABBREV_TAC `m` THEN
9097 Suff `pos_fn_integral
9098 (m_space M,measurable_sets M,
9099 (\A. pos_fn_integral M (\x. max 0 (indicator_fn s x * indicator_fn A x))))
9100 (\x. max 0 (indicator_fn t x)) =
9101 pos_fn_integral M (\x. max 0 (indicator_fn s x * indicator_fn t x))` THENL
9102 [SIMP_TAC std_ss [extreal_max_def, le_mul, indicator_fn_pos_le] THEN
9103 METIS_TAC [], ALL_TAC] THEN
9104 MATCH_MP_TAC pos_fn_integral_density' THEN
9105 ASM_SIMP_TAC std_ss [] THEN
9106 CONJ_TAC THENL
9107 [MATCH_MP_TAC IN_MEASURABLE_BOREL_INDICATOR THEN
9108 METIS_TAC [subsets_def, measure_space_def],
9109 ALL_TAC] THEN
9110 CONJ_TAC THENL
9111 [MATCH_MP_TAC IN_MEASURABLE_BOREL_INDICATOR THEN
9112 METIS_TAC [subsets_def, measure_space_def],
9113 ALL_TAC] THEN
9114 CONJ_TAC THENL
9115 [SIMP_TAC std_ss [AE_ALT, GSPECIFICATION, null_set_def] THEN
9116 SIMP_TAC std_ss [SUBSET_DEF, GSPECIFICATION] THEN Q.EXISTS_TAC `{}` THEN
9117 FULL_SIMP_TAC std_ss [measure_space_def, sigma_algebra_alt_pow] THEN
9118 FULL_SIMP_TAC std_ss [positive_def, NOT_IN_EMPTY] THEN
9119 GEN_TAC THEN DISJ2_TAC THEN
9120 SIMP_TAC std_ss [indicator_fn_def] THEN COND_CASES_TAC THEN
9121 SIMP_TAC real_ss [le_refl, extreal_of_num_def, extreal_le_def],
9122 ALL_TAC] THEN
9123 GEN_TAC THEN
9124 SIMP_TAC std_ss [indicator_fn_def] THEN COND_CASES_TAC THEN
9125 SIMP_TAC real_ss [le_refl, extreal_of_num_def, extreal_le_def]
9126 (* end of Suff *)
9127 ) THEN
9128 Q.UNABBREV_TAC `m` THEN
9129 FULL_SIMP_TAC std_ss [measure_space_def, m_space_def, measurable_sets_def] THEN
9130 CONJ_TAC THENL
9131 [SIMP_TAC std_ss [positive_def, measure_def, measurable_sets_def] THEN
9132 SIMP_TAC std_ss [indicator_fn_def, NOT_IN_EMPTY, mul_rzero] THEN
9133 FULL_SIMP_TAC std_ss [COND_ID, pos_fn_integral_zero, measure_space_def] THEN
9134 GEN_TAC THEN STRIP_TAC THEN MATCH_MP_TAC pos_fn_integral_pos THEN
9135 FULL_SIMP_TAC std_ss [measure_space_def] THEN GEN_TAC THEN
9136 REPEAT COND_CASES_TAC THEN
9137 SIMP_TAC real_ss [le_refl, extreal_of_num_def, extreal_le_def, mul_rone,
9138 mul_rzero],
9139 ALL_TAC] THEN
9140 SIMP_TAC std_ss [countably_additive_alt_eq, INDICATOR_FN_MUL_INTER] THEN
9141 REPEAT STRIP_TAC THEN SIMP_TAC std_ss [o_DEF] THEN
9142 `!x. A x IN measurable_sets M` by ASM_SET_TAC [] THEN
9143 ASM_SIMP_TAC std_ss [INTER_BIGUNION, GSPECIFICATION, IN_UNIV] THEN
9144 REWRITE_TAC
9145 [SET_RULE ``{s INTER x | ?i'. x = A i'} = {s INTER A i' | i' IN UNIV}``] THEN
9146 SIMP_TAC std_ss [GSYM IMAGE_DEF] THEN
9147 Suff `!x. indicator_fn (BIGUNION (IMAGE (\i'. s INTER A i') univ(:num))) x =
9148 suminf (\j. indicator_fn ((\i'. s INTER A i') j) x)` THENL
9149 [DISCH_TAC THEN ASM_SIMP_TAC std_ss [],
9150 GEN_TAC THEN ONCE_REWRITE_TAC [EQ_SYM_EQ] THEN
9151 MATCH_MP_TAC indicator_fn_suminf THEN
9152 FULL_SIMP_TAC std_ss [disjoint_family_on, DISJOINT_DEF] THEN
9153 ASM_SET_TAC []] THEN ONCE_REWRITE_TAC [METIS [ETA_AX]
9154 “(\x'. indicator_fn (s INTER A x) x') = (\x. indicator_fn (s INTER A x)) x”] THEN
9155 ONCE_REWRITE_TAC [METIS [] ``suminf (\j. indicator_fn (s INTER A j) x) =
9156 suminf (\j. (\k. indicator_fn (s INTER A k)) j x)``] THEN
9157 MATCH_MP_TAC pos_fn_integral_suminf THEN
9158 ASM_SIMP_TAC std_ss [measure_space_def] THEN
9159 CONJ_TAC THENL
9160 [SIMP_TAC std_ss [indicator_fn_def] THEN REPEAT GEN_TAC THEN COND_CASES_TAC THEN
9161 SIMP_TAC real_ss [le_refl, extreal_of_num_def, extreal_le_def], ALL_TAC] THEN
9162 GEN_TAC THEN MATCH_MP_TAC IN_MEASURABLE_BOREL_INDICATOR THEN
9163 Q.EXISTS_TAC `s INTER A i` THEN ASM_SIMP_TAC std_ss [] THEN
9164 MATCH_MP_TAC ALGEBRA_INTER THEN
9165 FULL_SIMP_TAC std_ss [sigma_algebra_def, subsets_def] THEN
9166 METIS_TAC []
9167QED
9168
9169(* |- !m s t.
9170 measure_space m /\ s IN measurable_sets m /\ t IN measurable_sets m ==>
9171 measure (density m (indicator_fn s)) t = measure m (s INTER t)
9172 *)
9173Theorem measure_density_indicator =
9174 REWRITE_RULE [GSYM density_def, GSYM density_measure_def] measure_restricted;
9175
9176(* M is finite, while N can be infinite *)
9177Theorem Radon_Nikodym_finite_arbitrary :
9178 !M N. measure_space M /\ measure_space N /\
9179 (m_space M = m_space N) /\ (measurable_sets M = measurable_sets N) /\
9180 (measure M (m_space M) <> PosInf) /\
9181 measure_absolutely_continuous (measure N) M ==>
9182 ?f. f IN measurable (m_space M,measurable_sets M) Borel /\ (!x. 0 <= f x) /\
9183 !A. A IN measurable_sets M ==>
9184 (pos_fn_integral M (\x. f x * indicator_fn A x) = measure N A)
9185Proof
9186 rpt GEN_TAC THEN DISCH_TAC THEN
9187 FIRST_ASSUM (MP_TAC o MATCH_MP split_space_into_finite_sets_and_rest) THEN
9188 DISCH_THEN (X_CHOOSE_TAC ``Q0:'a->bool``) THEN POP_ASSUM MP_TAC THEN
9189 DISCH_THEN (X_CHOOSE_TAC ``Q:num->'a->bool``) THEN FULL_SIMP_TAC std_ss [] THEN
9190 Q.PAT_X_ASSUM `m_space M = m_space N` (ASSUME_TAC o (MATCH_MP EQ_SYM)) THEN
9191 Q.PAT_X_ASSUM `measurable_sets M = measurable_sets N`
9192 (ASSUME_TAC o (MATCH_MP EQ_SYM)) THEN ASM_REWRITE_TAC [] THEN
9193 Know `!i. Q i IN measurable_sets M` >- ASM_SET_TAC [] THEN DISCH_TAC THEN
9194 Q.ABBREV_TAC `NN = (\i:num. (m_space M, measurable_sets M,
9195 (\A. pos_fn_integral N (\x. indicator_fn (Q i) x * indicator_fn A x))))` THEN
9196 Q.ABBREV_TAC `MM = (\i:num. (m_space M, measurable_sets M,
9197 (\A. pos_fn_integral M (\x. indicator_fn (Q i) x * indicator_fn A x))))` THEN
9198 Know `!i. ?f. f IN measurable (m_space (MM i), measurable_sets (MM i)) Borel /\
9199 (!x. 0 <= f x) /\ !A. A IN measurable_sets (MM i) ==>
9200 (pos_fn_integral (MM i) (\x. f x * indicator_fn A x) = measure (NN i) A)` >-
9201 (GEN_TAC THEN MATCH_MP_TAC Radon_Nikodym_finite THEN
9202 Know `measure (MM i) (m_space (MM i)) <> PosInf` >-
9203 ( Q.UNABBREV_TAC `MM` THEN
9204 SIMP_TAC std_ss [measure_def, m_space_def] THEN
9205 ASM_SIMP_TAC std_ss [MEASURE_SPACE_MSPACE_MEASURABLE] THEN
9206 SIMP_TAC std_ss [INDICATOR_FN_MUL_INTER] THEN
9207 `Q i SUBSET m_space M` by METIS_TAC [MEASURE_SPACE_SUBSET_MSPACE] THEN
9208 ASM_SIMP_TAC std_ss [SET_RULE ``a SUBSET b ==> (a INTER b = a)``] THEN
9209 REWRITE_TAC [METIS [ETA_AX] ``(\x. indicator_fn (Q i) x) = indicator_fn (Q i)``] THEN
9210 ASM_SIMP_TAC std_ss [pos_fn_integral_indicator] THEN
9211 SIMP_TAC std_ss [lt_infty] THEN MATCH_MP_TAC let_trans THEN
9212 Q.EXISTS_TAC `measure M (m_space M)` THEN ASM_REWRITE_TAC [GSYM lt_infty] THEN
9213 MATCH_MP_TAC INCREASING THEN ASM_SIMP_TAC std_ss [MEASURE_SPACE_MSPACE_MEASURABLE] THEN
9214 ASM_SIMP_TAC std_ss [MEASURE_SPACE_INCREASING] ) THEN
9215 DISCH_TAC THEN ASM_REWRITE_TAC [] THEN
9216 Know `measure (NN i) (m_space (NN i)) <> PosInf` >-
9217 ( Q.UNABBREV_TAC `NN` THEN
9218 SIMP_TAC std_ss [measure_def, m_space_def] THEN
9219 ASM_SIMP_TAC std_ss [MEASURE_SPACE_MSPACE_MEASURABLE] THEN
9220 SIMP_TAC std_ss [INDICATOR_FN_MUL_INTER] THEN
9221 `Q i SUBSET m_space M` by METIS_TAC [MEASURE_SPACE_SUBSET_MSPACE] THEN
9222 ASM_SIMP_TAC std_ss [SET_RULE ``a SUBSET b ==> (a INTER b = a)``] THEN
9223 REWRITE_TAC [METIS [ETA_AX] ``(\x. indicator_fn (Q i) x) = indicator_fn (Q i)``] THEN
9224 `pos_fn_integral N (indicator_fn (Q i)) = measure N (Q i)`
9225 by METIS_TAC [pos_fn_integral_indicator] THEN
9226 ASM_SIMP_TAC std_ss [] ) THEN
9227 DISCH_TAC THEN ASM_REWRITE_TAC [] THEN
9228 `measurable_sets (MM i) = measurable_sets (NN i)` by METIS_TAC [measurable_sets_def] THEN
9229 ASM_REWRITE_TAC [] THEN
9230 Know `measure_absolutely_continuous (measure (NN i)) (MM i)` >-
9231 (FULL_SIMP_TAC std_ss [measure_absolutely_continuous_def] THEN
9232 qunabbrevl_tac [`MM`, `NN`] THEN
9233 SIMP_TAC std_ss [measure_def, measurable_sets_def] THEN
9234 SIMP_TAC std_ss [INDICATOR_FN_MUL_INTER] THEN
9235 REWRITE_TAC [METIS [ETA_AX] ``(\x. indicator_fn (Q i) x) = indicator_fn (Q i)``] THEN
9236 GEN_TAC THEN STRIP_TAC THEN POP_ASSUM MP_TAC THEN
9237 FIRST_ASSUM (fn th => REWRITE_TAC [th]) THEN
9238 `Q i INTER s IN measurable_sets M` by
9239 METIS_TAC [ALGEBRA_INTER, measure_space_def, sigma_algebra_def, subsets_def] THEN
9240 FULL_SIMP_TAC std_ss [subsets_def, pos_fn_integral_indicator]) THEN
9241 DISCH_TAC THEN ASM_REWRITE_TAC [] THEN
9242 Know `m_space (MM i) = m_space (NN i)`
9243 >- (qunabbrevl_tac [`MM`, `NN`] >> SIMP_TAC std_ss [m_space_def]) THEN
9244 DISCH_TAC THEN ASM_REWRITE_TAC [] THEN
9245 FULL_SIMP_TAC std_ss [measure_space_def] THEN
9246 qunabbrevl_tac [`MM`, `NN`] THEN
9247 FULL_SIMP_TAC std_ss [m_space_def, measurable_sets_def, measure_def] THEN
9248 REWRITE_TAC [GSYM CONJ_ASSOC] THEN CONJ_TAC
9249 >- (SIMP_TAC std_ss [positive_def, measure_def, measurable_sets_def] THEN
9250 `{} IN measurable_sets N` by METIS_TAC [measure_space_def, sigma_algebra_alt_pow] THEN
9251 ASM_SIMP_TAC std_ss [] THEN CONJ_TAC
9252 >- (SIMP_TAC std_ss [indicator_fn_def, NOT_IN_EMPTY, mul_rzero] THEN
9253 METIS_TAC [pos_fn_integral_zero, measure_space_def]) THEN
9254 RW_TAC std_ss [] THEN MATCH_MP_TAC pos_fn_integral_pos THEN
9255 REWRITE_TAC [INDICATOR_FN_MUL_INTER] THEN ASM_SIMP_TAC std_ss [measure_space_def] THEN
9256 SIMP_TAC std_ss [indicator_fn_def] THEN GEN_TAC THEN COND_CASES_TAC THEN
9257 SIMP_TAC real_ss [le_refl, extreal_of_num_def, extreal_le_def]) THEN
9258 CONJ_TAC (* countably_additive *)
9259 >- (SIMP_TAC std_ss [countably_additive_alt_eq, INDICATOR_FN_MUL_INTER] THEN
9260 REPEAT STRIP_TAC THEN SIMP_TAC std_ss [o_DEF] THEN
9261 `!x. A x IN measurable_sets M` by ASM_SET_TAC [] THEN
9262 ASM_SIMP_TAC std_ss [INTER_BIGUNION, GSPECIFICATION, IN_UNIV] THEN
9263 REWRITE_TAC [SET_RULE ``{Q i INTER x | ?i'. x = A i'} = {Q i INTER A i' | i' IN UNIV}``] THEN
9264 SIMP_TAC std_ss [GSYM IMAGE_DEF] THEN
9265 Suff `!x. indicator_fn (BIGUNION (IMAGE (\i'. Q i INTER A i') univ(:num))) x =
9266 suminf (\j. indicator_fn ((\i'. Q i INTER A i') j) x)` THENL
9267 [DISCH_TAC THEN ASM_SIMP_TAC std_ss [],
9268 GEN_TAC THEN ONCE_REWRITE_TAC [EQ_SYM_EQ] THEN MATCH_MP_TAC indicator_fn_suminf THEN
9269 FULL_SIMP_TAC std_ss [disjoint_family_on, DISJOINT_DEF] THEN
9270 ASM_SET_TAC []] THEN ONCE_REWRITE_TAC [METIS [ETA_AX]
9271 ``(\x'. indicator_fn (Q i INTER A x) x') = (\x. indicator_fn (Q i INTER A x)) x``] THEN
9272 ONCE_REWRITE_TAC [METIS [] ``suminf (\j. indicator_fn (Q i INTER A j) x) =
9273 suminf (\j. (\k. indicator_fn (Q i INTER A k)) j x)``] THEN
9274 MATCH_MP_TAC pos_fn_integral_suminf THEN ASM_SIMP_TAC std_ss [measure_space_def] THEN
9275 CONJ_TAC THENL
9276 [SIMP_TAC std_ss [indicator_fn_def] THEN REPEAT GEN_TAC THEN COND_CASES_TAC THEN
9277 SIMP_TAC real_ss [le_refl, extreal_of_num_def, extreal_le_def], ALL_TAC] THEN
9278 GEN_TAC THEN MATCH_MP_TAC IN_MEASURABLE_BOREL_INDICATOR THEN
9279 Q.EXISTS_TAC `Q i INTER A i'` THEN ASM_SIMP_TAC std_ss [] THEN
9280 MATCH_MP_TAC ALGEBRA_INTER THEN
9281 FULL_SIMP_TAC std_ss [sigma_algebra_def, subsets_def] THEN
9282 METIS_TAC []) THEN
9283 CONJ_TAC (* positive *)
9284 >- (SIMP_TAC std_ss [positive_def, measure_def, measurable_sets_def] THEN
9285 `{} IN measurable_sets M` by METIS_TAC [measure_space_def, sigma_algebra_alt_pow] THEN
9286 ASM_SIMP_TAC std_ss [] THEN CONJ_TAC THENL
9287 [SIMP_TAC std_ss [indicator_fn_def, NOT_IN_EMPTY, mul_rzero] THEN
9288 METIS_TAC [pos_fn_integral_zero, measure_space_def], ALL_TAC] THEN
9289 RW_TAC std_ss [] THEN MATCH_MP_TAC pos_fn_integral_pos THEN
9290 REWRITE_TAC [INDICATOR_FN_MUL_INTER] THEN ASM_SIMP_TAC std_ss [measure_space_def] THEN
9291 SIMP_TAC std_ss [indicator_fn_def] THEN GEN_TAC THEN COND_CASES_TAC THEN
9292 SIMP_TAC real_ss [le_refl, extreal_of_num_def, extreal_le_def]) THEN
9293 (* countably_additive *)
9294 SIMP_TAC std_ss [countably_additive_alt_eq, INDICATOR_FN_MUL_INTER] THEN
9295 REPEAT STRIP_TAC THEN SIMP_TAC std_ss [o_DEF] THEN
9296 `!x. A x IN measurable_sets M` by ASM_SET_TAC [] THEN
9297 ASM_SIMP_TAC std_ss [INTER_BIGUNION, GSPECIFICATION, IN_UNIV] THEN
9298 REWRITE_TAC [SET_RULE ``{Q i INTER x | ?i'. x = A i'} = {Q i INTER A i' | i' IN UNIV}``] THEN
9299 SIMP_TAC std_ss [GSYM IMAGE_DEF] THEN
9300 Suff `!x. indicator_fn (BIGUNION (IMAGE (\i'. Q i INTER A i') univ(:num))) x =
9301 suminf (\j. indicator_fn ((\i'. Q i INTER A i') j) x)` THENL
9302 [DISCH_TAC THEN ASM_SIMP_TAC std_ss [],
9303 GEN_TAC THEN ONCE_REWRITE_TAC [EQ_SYM_EQ] THEN MATCH_MP_TAC indicator_fn_suminf THEN
9304 FULL_SIMP_TAC std_ss [disjoint_family_on, DISJOINT_DEF] THEN
9305 ASM_SET_TAC []] THEN ONCE_REWRITE_TAC [METIS [ETA_AX]
9306 ``(\x'. indicator_fn (Q i INTER A x) x') = (\x. indicator_fn (Q i INTER A x)) x``] THEN
9307 ONCE_REWRITE_TAC [METIS [] ``suminf (\j. indicator_fn (Q i INTER A j) x) =
9308 suminf (\j. (\k. indicator_fn (Q i INTER A k)) j x)``] THEN
9309 MATCH_MP_TAC pos_fn_integral_suminf THEN ASM_SIMP_TAC std_ss [measure_space_def] THEN
9310 CONJ_TAC THENL
9311 [SIMP_TAC std_ss [indicator_fn_def] THEN REPEAT GEN_TAC THEN COND_CASES_TAC THEN
9312 SIMP_TAC real_ss [le_refl, extreal_of_num_def, extreal_le_def], ALL_TAC] THEN
9313 GEN_TAC THEN MATCH_MP_TAC IN_MEASURABLE_BOREL_INDICATOR THEN
9314 Q.EXISTS_TAC `Q i INTER A i'` THEN ASM_SIMP_TAC std_ss [] THEN
9315 MATCH_MP_TAC ALGEBRA_INTER THEN
9316 FULL_SIMP_TAC std_ss [sigma_algebra_def, subsets_def] THEN
9317 METIS_TAC [] ) THEN DISCH_TAC THEN
9318 Suff `?f. (!i. f i IN measurable (m_space (MM i), measurable_sets (MM i)) Borel) /\
9319 (!i x. 0 <= f i x) /\ !i A. A IN measurable_sets (MM i) ==>
9320 (pos_fn_integral (MM i) (\x. (f i) x * indicator_fn A x) = measure (NN i) A)` THENL
9321 [STRIP_TAC, METIS_TAC []] THEN
9322 Q.ABBREV_TAC
9323 `ff = (\x. suminf (\i. f i x * indicator_fn (Q i) x) + PosInf * indicator_fn (Q0) x)` THEN
9324 Know `ff IN measurable (m_space M,measurable_sets M) Borel` >-
9325 (Know `ff = (\x. if x IN Q0 then (\x. PosInf) x
9326 else (\x. suminf (\i. f i x * indicator_fn (Q i) x)) x)` >-
9327 (Q.UNABBREV_TAC `ff` THEN SIMP_TAC std_ss [FUN_EQ_THM] THEN GEN_TAC THEN
9328 COND_CASES_TAC THENL
9329 [POP_ASSUM (fn th => SIMP_TAC std_ss [indicator_fn_def, th, mul_rone]) THEN
9330 Suff `!x. 0 <= x ==> (x + PosInf = PosInf)`
9331 >- (DISCH_THEN (MATCH_MP_TAC) THEN
9332 Know `!n. 0 <= (\i. f i x * if x IN Q i then 1 else 0) n`
9333 >- (RW_TAC std_ss [mul_rone, mul_rzero, le_refl]) THEN
9334 DISCH_THEN (REWRITE_TAC o wrap o (MATCH_MP ext_suminf_def)) THEN
9335 SIMP_TAC std_ss [le_sup'] THEN
9336 GEN_TAC THEN DISCH_THEN (MATCH_MP_TAC) THEN
9337 SIMP_TAC std_ss [GSPECIFICATION, IN_IMAGE, IN_UNIV] THEN Q.EXISTS_TAC `0` THEN
9338 SIMP_TAC std_ss [count_def, GSPEC_F, EXTREAL_SUM_IMAGE_EMPTY]) THEN
9339 GEN_TAC THEN DISCH_TAC THEN
9340 `x <> NegInf` by METIS_TAC [lt_infty, lte_trans, num_not_infty] THEN
9341 ASM_CASES_TAC ``x = PosInf`` THENL [METIS_TAC [extreal_add_def], ALL_TAC] THEN
9342 METIS_TAC [extreal_cases, extreal_add_def], ALL_TAC] THEN
9343 POP_ASSUM (fn th => SIMP_TAC std_ss [indicator_fn_def, th, mul_rzero]) THEN
9344 SIMP_TAC std_ss [add_rzero]) THEN DISCH_TAC THEN
9345 ONCE_REWRITE_TAC [METIS [SPACE, m_space_def, measurable_sets_def]
9346 ``Borel = (m_space (space Borel, subsets Borel, (\x. 0)),
9347 measurable_sets (space Borel, subsets Borel, (\x. 0)))``] THEN
9348 FIRST_X_ASSUM (ASSUME_TAC o ONCE_REWRITE_RULE [SPECIFICATION]) THEN
9349 POP_ASSUM (fn th => ONCE_REWRITE_TAC [th]) THEN
9350 ONCE_REWRITE_TAC [METIS [] ``PosInf = (\x. PosInf) x``] THEN
9351 MATCH_MP_TAC MEASURABLE_IF >> rpt STRIP_TAC >| (* 5 subgoals *)
9352 [(* goal 1 (of 5) *)
9353 SIMP_TAC std_ss [SPACE, m_space_def, measurable_sets_def] THEN
9354 MATCH_MP_TAC IN_MEASURABLE_BOREL_CONST THEN Q.EXISTS_TAC `PosInf` THEN
9355 METIS_TAC [measure_space_def],
9356 (* goal 2 (of 5) *)
9357 ALL_TAC,
9358 (* goal 3 (of 5) *)
9359 ONCE_REWRITE_TAC [prove (``{x | x IN m_space M /\ Q0 x} = {x | x IN m_space M /\ x IN Q0}``,
9360 SIMP_TAC std_ss [SPECIFICATION])] THEN SIMP_TAC std_ss [GSYM INTER_DEF] THEN
9361 ONCE_REWRITE_TAC [METIS [subsets_def]
9362 ``measurable_sets M = subsets (m_space M, measurable_sets M)``] THEN
9363 MATCH_MP_TAC ALGEBRA_INTER THEN SIMP_TAC std_ss [subsets_def] THEN
9364 CONJ_TAC THENL [METIS_TAC [measure_space_def, sigma_algebra_def], ALL_TAC] THEN
9365 METIS_TAC [MEASURE_SPACE_MSPACE_MEASURABLE],
9366 (* goal 4 (of 5) *)
9367 ASM_REWRITE_TAC [],
9368 (* goal 5 (of 5) *)
9369 rw [SIGMA_ALGEBRA_BOREL] ] THEN
9370 Know `!x. suminf (\i. f i x * indicator_fn (Q i) x) =
9371 sup (IMAGE (\n. SIGMA (\i. f i x * indicator_fn (Q i) x)
9372 (count n)) univ(:num))`
9373 >- (GEN_TAC >> MATCH_MP_TAC ext_suminf_def \\
9374 GEN_TAC >> BETA_TAC \\
9375 MATCH_MP_TAC le_mul >> art [INDICATOR_FN_POS]) >> Rewr' THEN
9376 SIMP_TAC std_ss [SPACE, m_space_def, measurable_sets_def] THEN
9377 Suff `!x. (\n. SIGMA (\i. f i x * indicator_fn (Q i) x) (count n)) =
9378 (\n. (\n x. SIGMA (\i. f i x * indicator_fn (Q i) x) (count n)) n x)` THENL
9379 [DISC_RW_KILL, METIS_TAC []] THEN MATCH_MP_TAC IN_MEASURABLE_BOREL_MONO_SUP THEN
9380 Q.EXISTS_TAC `(\n x. SIGMA (\i. f i x * indicator_fn (Q i) x) (count n))` THEN
9381 SIMP_TAC std_ss [space_def] THEN
9382 CONJ_TAC >- METIS_TAC [measure_space_def] THEN
9383 reverse CONJ_TAC
9384 >- (rpt STRIP_TAC THEN MATCH_MP_TAC EXTREAL_SUM_IMAGE_MONO_SET THEN
9385 SIMP_TAC std_ss [FINITE_COUNT, count_def] THEN
9386 SIMP_TAC arith_ss [SUBSET_DEF, GSPECIFICATION] THEN
9387 rpt STRIP_TAC THEN MATCH_MP_TAC le_mul THEN art [INDICATOR_FN_POS]) THEN
9388 GEN_TAC THEN
9389 MP_TAC (ISPECL [``(m_space (M:('a->bool)#(('a->bool)->bool)#(('a->bool)->extreal)),
9390 measurable_sets M)``,
9391 ``(\i x. (f:num->'a->extreal) i x * indicator_fn (Q i) x)``,
9392 ``(\x. SIGMA (\i. (f:num->'a->extreal) i x * indicator_fn (Q i) x) (count n))``,
9393 ``count n``] IN_MEASURABLE_BOREL_SUM) THEN
9394 ASM_REWRITE_TAC [] THEN DISCH_THEN (MATCH_MP_TAC) THEN
9395 SIMP_TAC std_ss [FINITE_COUNT, space_def] THEN
9396 CONJ_TAC >- METIS_TAC [measure_space_def] THEN
9397 reverse CONJ_TAC
9398 >- (rpt GEN_TAC >> STRIP_TAC THEN MATCH_MP_TAC pos_not_neginf THEN
9399 MATCH_MP_TAC le_mul THEN art [INDICATOR_FN_POS]) THEN
9400 GEN_TAC THEN STRIP_TAC THEN MATCH_MP_TAC IN_MEASURABLE_BOREL_MUL_INDICATOR THEN
9401 METIS_TAC [subsets_def, measure_space_def, m_space_def, measurable_sets_def] ) THEN
9402 DISCH_TAC THEN
9403 Know `!x. 0 <= ff x` THEN1
9404 (Q.UNABBREV_TAC `ff` >> BETA_TAC THEN GEN_TAC THEN
9405 ASM_CASES_TAC ``(x:'a) IN Q0`` THENL
9406 [POP_ASSUM (fn th => SIMP_TAC std_ss [indicator_fn_def, th, mul_rone]) THEN
9407 Suff `suminf (\i. f i x * if x IN Q i then 1 else 0) + PosInf = PosInf` THENL
9408 [METIS_TAC [le_infty], ALL_TAC] THEN
9409 Suff `!x. 0 <= x ==> (x + PosInf = PosInf)` THENL
9410 [DISCH_THEN (MATCH_MP_TAC) THEN
9411 Know `!n. 0 <= (\i. f i x * if x IN Q i then 1 else 0) n`
9412 >- (RW_TAC std_ss [mul_rone, mul_rzero, le_refl]) THEN
9413 DISCH_THEN (REWRITE_TAC o wrap o (MATCH_MP ext_suminf_def)) THEN
9414 SIMP_TAC std_ss [le_sup'] THEN
9415 GEN_TAC THEN DISCH_THEN (MATCH_MP_TAC) THEN
9416 SIMP_TAC std_ss [GSPECIFICATION, IN_IMAGE, IN_UNIV] THEN Q.EXISTS_TAC `0` THEN
9417 SIMP_TAC std_ss [count_def, GSPEC_F, EXTREAL_SUM_IMAGE_EMPTY],
9418 ALL_TAC] THEN
9419 GEN_TAC THEN DISCH_TAC THEN
9420 `x <> NegInf` by METIS_TAC [lt_infty, lte_trans, num_not_infty] THEN
9421 ASM_CASES_TAC ``x = PosInf`` THENL [METIS_TAC [extreal_add_def], ALL_TAC] THEN
9422 METIS_TAC [extreal_cases, extreal_add_def], ALL_TAC] THEN
9423 POP_ASSUM (fn th => SIMP_TAC std_ss [indicator_fn_def, th, mul_rzero]) THEN
9424 SIMP_TAC std_ss [add_rzero] THEN
9425 MATCH_MP_TAC ext_suminf_pos THEN
9426 RW_TAC std_ss [mul_rone, mul_rzero, le_refl]) THEN DISCH_TAC THEN
9427 Q.EXISTS_TAC `ff` THEN ASM_SIMP_TAC std_ss [] THEN
9428 GEN_TAC THEN DISCH_TAC THEN
9429 ASM_CASES_TAC ``m_space M = {}`` THENL
9430 [`m_space M = m_space N` by METIS_TAC [sets_eq_imp_space_eq] THEN
9431 `A SUBSET m_space M` by METIS_TAC [MEASURE_SPACE_SUBSET_MSPACE] THEN
9432 `positive N` by METIS_TAC [MEASURE_SPACE_POSITIVE] THEN
9433 `A = {}` by ASM_SET_TAC [] THEN FULL_SIMP_TAC std_ss [positive_def] THEN
9434 SIMP_TAC std_ss [indicator_fn_def, NOT_IN_EMPTY, mul_rzero] THEN
9435 METIS_TAC [pos_fn_integral_zero],
9436 ALL_TAC] THEN
9437 Suff `(!i. (\x. f i x * indicator_fn (Q i INTER A) x) IN
9438 measurable (m_space M, measurable_sets M) Borel) /\
9439 (!i. ?x. x IN m_space M /\ 0 <= f i x * indicator_fn (Q i INTER A) x)` THENL
9440 [STRIP_TAC,
9441 CONJ_TAC THENL
9442 [ALL_TAC,
9443 GEN_TAC THEN FULL_SIMP_TAC std_ss [GSYM MEMBER_NOT_EMPTY] THEN
9444 Q.EXISTS_TAC `x` THEN ASM_SIMP_TAC std_ss [] THEN
9445 MATCH_MP_TAC le_mul THEN ASM_SIMP_TAC std_ss [indicator_fn_def] THEN
9446 COND_CASES_TAC THEN SIMP_TAC real_ss [le_refl, extreal_of_num_def, extreal_le_def]] THEN
9447 GEN_TAC THEN MATCH_MP_TAC IN_MEASURABLE_BOREL_MUL_INDICATOR THEN
9448 CONJ_TAC THENL [METIS_TAC [measure_space_def], ALL_TAC] THEN
9449 CONJ_TAC THENL [METIS_TAC [m_space_def, measurable_sets_def], ALL_TAC] THEN
9450 MATCH_MP_TAC ALGEBRA_INTER THEN CONJ_TAC THENL
9451 [ALL_TAC, METIS_TAC [subsets_def]] THEN
9452 METIS_TAC [measure_space_def, sigma_algebra_def]] THEN
9453 Know `pos_fn_integral M (\x. ff x * indicator_fn A x) =
9454 pos_fn_integral M (\x. suminf (\i. f i x * indicator_fn (Q i INTER A) x) +
9455 PosInf * indicator_fn (Q0 INTER A) x)` THEN1
9456 (Q.UNABBREV_TAC `ff` >> BETA_TAC THEN
9457 Know `!x. 0 <= suminf (\i. f i x * indicator_fn (Q i) x)`
9458 >- (GEN_TAC >> MATCH_MP_TAC ext_suminf_pos THEN
9459 RW_TAC std_ss [] THEN
9460 MATCH_MP_TAC le_mul >> art [INDICATOR_FN_POS]) THEN DISCH_TAC THEN
9461 Know `!x. 0 <= PosInf * indicator_fn Q0 x`
9462 >- (GEN_TAC >> MATCH_MP_TAC le_mul THEN
9463 SIMP_TAC std_ss [le_infty, INDICATOR_FN_POS]) THEN DISCH_TAC THEN
9464
9465 `!x. (suminf (\i. f i x * indicator_fn (Q i) x) +
9466 PosInf * indicator_fn Q0 x) * indicator_fn A x =
9467 (suminf (\i. f i x * indicator_fn (Q i) x) * indicator_fn A x) +
9468 ((PosInf * indicator_fn Q0 x) * indicator_fn A x)` by METIS_TAC [add_rdistrib] THEN
9469 POP_ASSUM (fn th => REWRITE_TAC [th]) THEN REWRITE_TAC [GSYM mul_assoc] THEN
9470 ONCE_REWRITE_TAC [METIS [INDICATOR_FN_MUL_INTER]
9471 ``indicator_fn Q0 x * indicator_fn A x = indicator_fn (Q0 INTER A) x``] THEN
9472 Suff `!x. suminf (\i. f i x * indicator_fn (Q i) x) * indicator_fn A x =
9473 suminf (\i. f i x * indicator_fn (Q i INTER A) x)` THENL
9474 [DISCH_TAC THEN ASM_SIMP_TAC std_ss [], ALL_TAC] THEN
9475 GEN_TAC THEN
9476 ONCE_REWRITE_TAC [METIS [INDICATOR_FN_MUL_INTER]
9477 ``indicator_fn (Q i INTER A) x = indicator_fn (Q i) x * indicator_fn A x``] THEN
9478 ASM_CASES_TAC ``(x:'a) IN A`` THEN
9479 ASM_SIMP_TAC std_ss [indicator_fn_def, mul_rone, mul_rzero] THEN
9480 SIMP_TAC std_ss [ext_suminf_0] ) THEN DISCH_TAC THEN
9481 (* stage work *)
9482 Know `pos_fn_integral M (\x. suminf (\i. f i x * indicator_fn (Q i INTER A) x) +
9483 PosInf * indicator_fn (Q0 INTER A) x) =
9484 pos_fn_integral M (\x. suminf (\i. f i x * indicator_fn (Q i INTER A) x)) +
9485 PosInf * measure M (Q0 INTER A)` >-
9486 ( Suff `pos_fn_integral M (\x. (\x. suminf (\i. f i x * indicator_fn (Q i INTER A) x)) x +
9487 (\x. PosInf * indicator_fn (Q0 INTER A) x) x) =
9488 pos_fn_integral M (\x. suminf (\i. f i x * indicator_fn (Q i INTER A) x)) +
9489 pos_fn_integral M (\x. PosInf * indicator_fn (Q0 INTER A) x)`
9490 >- (SIMP_TAC std_ss [] THEN DISCH_TAC THEN
9491 MATCH_MP_TAC (METIS [] ``(b = c) ==> (a + b = a + c)``) THEN
9492 MATCH_MP_TAC pos_fn_integral_cmul_infty THEN
9493 CONJ_TAC >- METIS_TAC [] THEN
9494 ONCE_REWRITE_TAC [METIS [subsets_def]
9495 ``measurable_sets M = subsets (m_space M, measurable_sets M)``] THEN
9496 METIS_TAC [measure_space_def, sigma_algebra_def, ALGEBRA_INTER, subsets_def]) \\
9497 MATCH_MP_TAC pos_fn_integral_add THEN SIMP_TAC std_ss [] THEN
9498 CONJ_TAC THENL [ASM_REWRITE_TAC [], ALL_TAC] THEN
9499 Know `!x. 0 <= suminf (\i. f i x * indicator_fn (Q i INTER A) x)`
9500 >- (GEN_TAC THEN MATCH_MP_TAC ext_suminf_pos THEN
9501 GEN_TAC THEN BETA_TAC THEN
9502 MATCH_MP_TAC le_mul >> art [INDICATOR_FN_POS]) THEN DISCH_TAC THEN
9503 Know `!x. 0 <= PosInf * indicator_fn (Q0 INTER A) x`
9504 >- (GEN_TAC THEN MATCH_MP_TAC le_mul THEN
9505 SIMP_TAC std_ss [le_infty, INDICATOR_FN_POS]) THEN DISCH_TAC THEN
9506 CONJ_TAC THENL [METIS_TAC [], ALL_TAC] THEN
9507 CONJ_TAC >- (simp []) \\
9508 CONJ_TAC THENL
9509 [Know `!x. suminf (\i. f i x * indicator_fn (Q i INTER A) x) =
9510 sup (IMAGE (\n. SIGMA (\i. f i x * indicator_fn (Q i INTER A) x)
9511 (count n)) univ(:num))`
9512 >- (GEN_TAC >> MATCH_MP_TAC ext_suminf_def \\
9513 GEN_TAC >> BETA_TAC >> MATCH_MP_TAC le_mul >> art [INDICATOR_FN_POS]) THEN
9514 Rewr' >> SIMP_TAC std_ss [] THEN
9515 Suff `!x. (\n. SIGMA (\i. f i x * indicator_fn (Q i INTER A) x) (count n)) =
9516 (\n. (\n x. SIGMA (\i. f i x * indicator_fn (Q i INTER A) x) (count n)) n x)` THENL
9517 [DISC_RW_KILL, METIS_TAC []] THEN MATCH_MP_TAC IN_MEASURABLE_BOREL_MONO_SUP THEN
9518 Q.EXISTS_TAC `(\n x. SIGMA (\i. f i x * indicator_fn (Q i INTER A) x) (count n))` THEN
9519 SIMP_TAC std_ss [] THEN
9520 CONJ_TAC >- METIS_TAC [measure_space_def] THEN
9521 reverse CONJ_TAC
9522 >- (rpt STRIP_TAC THEN MATCH_MP_TAC EXTREAL_SUM_IMAGE_MONO_SET THEN
9523 SIMP_TAC std_ss [FINITE_COUNT] THEN
9524 CONJ_TAC >- (MATCH_MP_TAC COUNT_MONO >> RW_TAC arith_ss []) THEN
9525 SIMP_TAC arith_ss [IN_COUNT, SUBSET_DEF, GSPECIFICATION] THEN
9526 GEN_TAC THEN DISCH_TAC THEN
9527 MATCH_MP_TAC le_mul THEN ASM_SIMP_TAC std_ss [INDICATOR_FN_POS]) THEN
9528 GEN_TAC THEN
9529 MP_TAC (ISPECL [``(m_space (M:('a->bool)#(('a->bool)->bool)#(('a->bool)->extreal)),
9530 measurable_sets M)``,
9531 ``(\i x. (f:num->'a->extreal) i x * indicator_fn (Q i INTER A) x)``,
9532 ``(\x. SIGMA (\i. (f:num->'a->extreal) i x * indicator_fn (Q i INTER A) x) (count n))``,
9533 ``count n``] IN_MEASURABLE_BOREL_SUM) THEN
9534 ASM_REWRITE_TAC [] THEN DISCH_THEN (MATCH_MP_TAC) THEN
9535 SIMP_TAC std_ss [FINITE_COUNT] THEN CONJ_TAC THENL [METIS_TAC [measure_space_def], ALL_TAC] THEN
9536 reverse CONJ_TAC
9537 >- (rpt GEN_TAC THEN STRIP_TAC THEN
9538 MATCH_MP_TAC pos_not_neginf THEN
9539 MATCH_MP_TAC le_mul THEN ASM_SIMP_TAC std_ss [INDICATOR_FN_POS]) THEN
9540 GEN_TAC THEN STRIP_TAC THEN MATCH_MP_TAC IN_MEASURABLE_BOREL_MUL_INDICATOR THEN
9541 METIS_TAC [subsets_def, measure_space_def, m_space_def, measurable_sets_def,
9542 ALGEBRA_INTER, sigma_algebra_def], ALL_TAC] THEN
9543 ONCE_REWRITE_TAC [METIS [] ``(\x. PosInf * indicator_fn (Q0 INTER A) x) =
9544 (\x. (\x. PosInf) x * indicator_fn (Q0 INTER A) x)``] THEN
9545 MATCH_MP_TAC IN_MEASURABLE_BOREL_MUL_INDICATOR THEN
9546 CONJ_TAC THENL [METIS_TAC [measure_space_def], ALL_TAC] THEN
9547 CONJ_TAC THENL
9548 [MATCH_MP_TAC IN_MEASURABLE_BOREL_CONST THEN Q.EXISTS_TAC `PosInf` THEN
9549 METIS_TAC [measure_space_def], ALL_TAC] THEN
9550 METIS_TAC [ALGEBRA_INTER, measure_space_def, sigma_algebra_def, subsets_def] ) THEN
9551 DISCH_TAC THEN
9552 Know `!A i. A IN measurable_sets M ==>
9553 (pos_fn_integral M (\x. f i x * indicator_fn (Q i INTER A) x) =
9554 measure (m_space (MM i), measurable_sets (MM i),
9555 (\A. pos_fn_integral (MM i) (\x. f i x * indicator_fn A x))) A)` >-
9556 (rpt GEN_TAC THEN SIMP_TAC std_ss [measure_def] THEN
9557 DISCH_TAC THEN
9558 Know `pos_fn_integral (MM i) (\x. f i x * indicator_fn A' x) =
9559 pos_fn_integral M (\x. indicator_fn (Q i) x * (\x. f i x * indicator_fn A' x) x)` >-
9560 (Q.UNABBREV_TAC `MM` THEN BETA_TAC THEN
9561 ONCE_REWRITE_TAC [METIS [] ``(\x. indicator_fn (Q i) x * (f i x * indicator_fn A' x)) =
9562 (\x. indicator_fn (Q i) x * (\x. f i x * indicator_fn A' x) x)``] THEN
9563 Suff `pos_fn_integral
9564 (m_space M,measurable_sets M,
9565 (\A. pos_fn_integral M (\x. max 0 (indicator_fn (Q i) x * indicator_fn A x))))
9566 (\x. max 0 ((\x. f i x * indicator_fn A' x) x)) =
9567 pos_fn_integral M
9568 (\x. max 0 (indicator_fn (Q i) x * (\x. f i x * indicator_fn A' x) x))` THENL
9569 [ASM_SIMP_TAC std_ss [extreal_max_def, indicator_fn_pos_le, le_mul], ALL_TAC] THEN
9570 MATCH_MP_TAC pos_fn_integral_density' THEN ASM_SIMP_TAC std_ss [] THEN
9571 CONJ_TAC
9572 >- (MATCH_MP_TAC IN_MEASURABLE_BOREL_INDICATOR THEN Q.EXISTS_TAC `Q i` THEN
9573 ASM_SIMP_TAC std_ss [] THEN METIS_TAC [measure_space_def, subsets_def]) THEN
9574 CONJ_TAC
9575 >- (MATCH_MP_TAC IN_MEASURABLE_BOREL_MUL_INDICATOR THEN
9576 METIS_TAC [measure_space_def, subsets_def, m_space_def, measurable_sets_def]) THEN
9577 CONJ_TAC (* AE *)
9578 >- (SIMP_TAC std_ss [AE_ALT, GSPECIFICATION, null_set_def] THEN
9579 SIMP_TAC std_ss [SUBSET_DEF, GSPECIFICATION] THEN Q.EXISTS_TAC `{}` THEN
9580 FULL_SIMP_TAC std_ss [measure_space_def, sigma_algebra_alt_pow] THEN
9581 FULL_SIMP_TAC std_ss [positive_def, NOT_IN_EMPTY] THEN
9582 GEN_TAC THEN DISJ2_TAC THEN
9583 SIMP_TAC std_ss [indicator_fn_def] THEN COND_CASES_TAC THEN
9584 SIMP_TAC real_ss [le_refl, extreal_of_num_def, extreal_le_def]) THEN
9585 GEN_TAC THEN MATCH_MP_TAC le_mul THEN ASM_SIMP_TAC std_ss [INDICATOR_FN_POS]) THEN
9586 DISC_RW_KILL THEN SIMP_TAC std_ss [mul_assoc] THEN
9587 ONCE_REWRITE_TAC [mul_comm] THEN SIMP_TAC std_ss [mul_assoc] THEN
9588 ONCE_REWRITE_TAC [METIS [INDICATOR_FN_MUL_INTER]
9589 ``indicator_fn A' x * indicator_fn (Q i) x = indicator_fn (A' INTER Q i) x``] THEN
9590 METIS_TAC [INTER_COMM]) THEN
9591 DISCH_TAC THEN
9592 Know `!i. measure (m_space (MM i),measurable_sets (MM i),
9593 (\A. pos_fn_integral (MM i) (\x. f i x * indicator_fn A x))) A =
9594 measure N (Q i INTER A)`
9595 >- (GEN_TAC THEN
9596 Know `measure N (Q i INTER A) =
9597 measure (m_space N,measurable_sets N,
9598 (\s. pos_fn_integral N (\x. indicator_fn (Q i) x * indicator_fn s x))) A`
9599 >- (MATCH_MP_TAC (GSYM measure_restricted) THEN METIS_TAC []) THEN
9600 DISC_RW_KILL THEN SIMP_TAC std_ss [measure_def] THEN
9601 `measurable_sets (MM i) = measurable_sets (N)` by METIS_TAC [measurable_sets_def] THEN
9602 Know `pos_fn_integral (MM i) (\x. f i x * indicator_fn A x) = measure (NN i) A`
9603 >- (FIRST_X_ASSUM MATCH_MP_TAC >> PROVE_TAC []) >> Rewr' THEN
9604 Q.UNABBREV_TAC `NN` THEN SIMP_TAC std_ss [measure_def] ) THEN DISCH_TAC THEN
9605 `!i. measure N (Q i INTER A) =
9606 pos_fn_integral M (\x. f i x * indicator_fn (Q i INTER A) x)` by METIS_TAC [] THEN
9607 Know `pos_fn_integral M (\x. suminf (\i. f i x * indicator_fn (Q i INTER A) x)) +
9608 PosInf * measure M (Q0 INTER A) =
9609 suminf (\i. measure N (Q i INTER A)) + PosInf * measure M (Q0 INTER A)`
9610 >- (MATCH_MP_TAC (METIS [] ``(b = c) ==> (b + a = c + a)``) THEN
9611 Know `pos_fn_integral M (\x. suminf (\i. (\i x. f i x * indicator_fn (Q i INTER A) x) i x)) =
9612 suminf (\i. pos_fn_integral M ((\i x. f i x * indicator_fn (Q i INTER A) x) i))`
9613 >- (MATCH_MP_TAC pos_fn_integral_suminf >> ASM_SIMP_TAC std_ss [] \\
9614 rpt STRIP_TAC >> MATCH_MP_TAC le_mul \\
9615 ASM_SIMP_TAC std_ss [INDICATOR_FN_POS]) \\
9616 SIMP_TAC std_ss [] THEN DISC_RW_KILL THEN REWRITE_TAC [] ) >> DISCH_TAC THEN
9617 Suff `suminf (\i. measure N (Q i INTER A)) =
9618 measure N (BIGUNION {Q i | i IN UNIV} INTER A)` THENL
9619 [DISCH_TAC,
9620 SIMP_TAC std_ss [INTER_BIGUNION, GSPECIFICATION, IN_UNIV] THEN
9621 ONCE_REWRITE_TAC [SET_RULE ``BIGUNION {x INTER A | ?i. x = Q i} =
9622 BIGUNION {Q i INTER A | i IN UNIV}``] THEN
9623 ONCE_REWRITE_TAC [EQ_SYM_EQ] THEN
9624 `countably_additive N` by METIS_TAC [measure_space_def] THEN
9625 POP_ASSUM MP_TAC THEN SIMP_TAC std_ss [countably_additive_def] THEN
9626 SIMP_TAC std_ss [GSYM IMAGE_DEF] THEN
9627 DISCH_THEN (MP_TAC o Q.SPEC `(\i. Q i INTER A)`) THEN
9628 SIMP_TAC std_ss [o_DEF] THEN DISCH_THEN (MATCH_MP_TAC) THEN
9629 CONJ_TAC THENL
9630 [EVAL_TAC THEN ASM_SIMP_TAC std_ss [IN_DEF,IN_FUNSET] THEN SRW_TAC[][] THEN
9631 ONCE_REWRITE_TAC [GSYM SPECIFICATION] THEN
9632 METIS_TAC [ALGEBRA_INTER, subsets_def, measure_space_def, sigma_algebra_def],
9633 ALL_TAC] THEN
9634 CONJ_TAC THENL
9635 [ASM_SET_TAC [DISJOINT_DEF, disjoint_family_on], ALL_TAC] THEN
9636 ONCE_REWRITE_TAC [METIS [subsets_def] ``measurbale_sets M =
9637 subsets (m_space M, measurbale_sets M)``] THEN
9638 MATCH_MP_TAC SIGMA_ALGEBRA_COUNTABLE_UNION THEN
9639 CONJ_TAC THENL [METIS_TAC [measure_space_def], ALL_TAC] THEN
9640 CONJ_TAC THENL
9641 [MATCH_MP_TAC image_countable THEN
9642 SIMP_TAC std_ss [pred_setTheory.COUNTABLE_NUM], ALL_TAC] THEN
9643 ASM_SIMP_TAC std_ss [SUBSET_DEF, IN_IMAGE] THEN GEN_TAC THEN
9644 METIS_TAC [ALGEBRA_INTER, measure_space_def, sigma_algebra_def, subsets_def]] THEN
9645 Know `PosInf * measure M (Q0 INTER A) = measure N (Q0 INTER A)` >-
9646 (UNDISCH_TAC ``!A.
9647 A IN measurable_sets M /\ A SUBSET Q0 ==>
9648 (measure M A = 0) /\ (measure N A = 0) \/
9649 0 < measure M A /\ (measure N A = PosInf)`` THEN
9650 DISCH_THEN (MP_TAC o Q.SPEC `Q0 INTER A`) THEN
9651 `Q0 INTER A SUBSET Q0` by SET_TAC [] THEN
9652 `Q0 INTER A IN measurable_sets M` by
9653 METIS_TAC [ALGEBRA_INTER, subsets_def, measure_space_def, sigma_algebra_def] THEN
9654 POP_ASSUM (fn th => REWRITE_TAC [th]) THEN POP_ASSUM (fn th => REWRITE_TAC [th]) THEN
9655 STRIP_TAC THEN ASM_SIMP_TAC std_ss [mul_rzero] THEN
9656 Suff `(m_space M DIFF BIGUNION {Q i | i IN univ(:num)}) INTER A
9657 IN measurable_sets M` THENL
9658 [DISCH_TAC,
9659 ONCE_REWRITE_TAC [METIS [subsets_def]
9660 ``measurable_sets M = subsets (m_space M, measurable_sets M)``] THEN
9661 MATCH_MP_TAC ALGEBRA_INTER THEN
9662 CONJ_TAC THENL [METIS_TAC [measure_space_def, sigma_algebra_def], ALL_TAC] THEN
9663 CONJ_TAC THENL [ALL_TAC, ASM_SIMP_TAC std_ss [subsets_def]] THEN
9664 MATCH_MP_TAC ALGEBRA_DIFF THEN
9665 CONJ_TAC THENL [METIS_TAC [measure_space_def, sigma_algebra_def], ALL_TAC] THEN
9666 CONJ_TAC THENL [METIS_TAC [subsets_def, MEASURE_SPACE_MSPACE_MEASURABLE], ALL_TAC] THEN
9667 MATCH_MP_TAC SIGMA_ALGEBRA_COUNTABLE_UNION THEN
9668 CONJ_TAC THENL [METIS_TAC [measure_space_def], ALL_TAC] THEN
9669 CONJ_TAC THENL
9670 [SIMP_TAC std_ss [GSYM IMAGE_DEF] THEN
9671 MATCH_MP_TAC image_countable THEN
9672 SIMP_TAC std_ss [pred_setTheory.COUNTABLE_NUM], ALL_TAC] THEN
9673 ASM_SIMP_TAC std_ss [SUBSET_DEF, GSPECIFICATION, IN_UNIV] THEN GEN_TAC THEN
9674 METIS_TAC [subsets_def]] THEN
9675 `!A. A IN measurable_sets M ==> 0 <= measure M A`
9676 by METIS_TAC [measure_space_def, positive_def] THEN
9677 POP_ASSUM (MP_TAC o Q.SPEC `(m_space M DIFF BIGUNION {Q i | i IN univ(:num)}) INTER A`) THEN
9678 ASM_REWRITE_TAC [] THEN DISCH_TAC THEN
9679 Suff `0 < measure M ((m_space M DIFF BIGUNION {Q i | i IN univ(:num)}) INTER A)` THENL
9680 [DISCH_TAC,
9681 MATCH_MP_TAC lte_trans THEN Q.EXISTS_TAC `measure M (Q0 INTER A)` THEN
9682 ASM_SIMP_TAC std_ss [le_refl]] THEN
9683 `measure M ((m_space M DIFF BIGUNION {Q i | i IN univ(:num)}) INTER A) <> NegInf` by
9684 METIS_TAC [lte_trans, lt_infty, num_not_infty] THEN
9685 ASM_CASES_TAC ``measure M ((m_space M DIFF BIGUNION {Q i | i IN univ(:num)}) INTER A) = PosInf`` THENL
9686 [ASM_SIMP_TAC std_ss [extreal_mul_def], ALL_TAC] THEN
9687 `?r. measure M ((m_space M DIFF BIGUNION {Q i | i IN univ(:num)}) INTER A) = Normal r` by
9688 METIS_TAC [extreal_cases] THEN FULL_SIMP_TAC std_ss [] THEN
9689 SIMP_TAC std_ss [extreal_mul_def] THEN
9690 `0 < r` by METIS_TAC [extreal_lt_eq, extreal_of_num_def] THEN
9691 METIS_TAC [REAL_LT_IMP_NE] ) THEN DISCH_TAC THEN
9692 Suff `Q0 INTER A IN measurable_sets M /\
9693 (BIGUNION {Q i | i IN UNIV} INTER A) IN measurable_sets M` THENL
9694 [DISCH_TAC,
9695 CONJ_TAC THENL
9696 [METIS_TAC [ALGEBRA_INTER, subsets_def, measure_space_def, sigma_algebra_def],
9697 ALL_TAC] THEN
9698 ONCE_REWRITE_TAC [METIS [subsets_def] ``measurbale_sets M =
9699 subsets (m_space M, measurbale_sets M)``] THEN
9700 MATCH_MP_TAC ALGEBRA_INTER THEN CONJ_TAC THENL
9701 [METIS_TAC [measure_space_def, sigma_algebra_def], ALL_TAC] THEN
9702 CONJ_TAC THENL [ALL_TAC, METIS_TAC [subsets_def]] THEN
9703 MATCH_MP_TAC SIGMA_ALGEBRA_COUNTABLE_UNION THEN
9704 CONJ_TAC THENL [METIS_TAC [measure_space_def], ALL_TAC] THEN
9705 CONJ_TAC THENL
9706 [SIMP_TAC std_ss [GSYM IMAGE_DEF] THEN
9707 MATCH_MP_TAC image_countable THEN
9708 SIMP_TAC std_ss [pred_setTheory.COUNTABLE_NUM], ALL_TAC] THEN
9709 ASM_SIMP_TAC std_ss [SUBSET_DEF, GSPECIFICATION, IN_UNIV] THEN GEN_TAC THEN
9710 METIS_TAC [subsets_def]] THEN
9711 Suff `((BIGUNION {Q i | i IN UNIV} INTER A) UNION (Q0 INTER A) = A) /\
9712 ((BIGUNION {Q i | i IN UNIV} INTER A) INTER (Q0 INTER A) = {})` THENL
9713 [DISCH_TAC,
9714 CONJ_TAC THENL [ALL_TAC, ASM_SET_TAC [disjoint_family_on]] THEN
9715 UNDISCH_TAC ``Q0 = m_space M DIFF BIGUNION {Q i | i IN univ(:num)}`` THEN
9716 UNDISCH_TAC ``disjoint_family (Q:num->'a->bool)`` THEN
9717 SIMP_TAC std_ss [disjoint_family_on, IN_UNIV] THEN
9718 FULL_SIMP_TAC std_ss [measure_space_def, sigma_algebra_alt_pow, POW_DEF] THEN
9719 ASM_SET_TAC []] THEN
9720 ONCE_REWRITE_TAC [EQ_SYM_EQ] THEN ASM_REWRITE_TAC [] THEN
9721 MATCH_MP_TAC ADDITIVE THEN
9722 CONJ_TAC THENL [METIS_TAC [MEASURE_SPACE_ADDITIVE], ALL_TAC] THEN
9723 CONJ_TAC THENL [METIS_TAC [], ALL_TAC] THEN
9724 CONJ_TAC THENL [METIS_TAC [], ALL_TAC] THEN ASM_SET_TAC [DISJOINT_DEF]
9725QED
9726
9727Theorem finite_integrable_function_exists : (* was: Ex_finite_integrable_function *)
9728 !m. measure_space m /\ sigma_finite m ==>
9729 ?h. h IN measurable (m_space m, measurable_sets m) Borel /\
9730 (pos_fn_integral m h <> PosInf) /\
9731 (!x. x IN m_space m ==> 0 < h x /\ h x < PosInf) /\
9732 (!x. 0 <= h x)
9733Proof
9734 GEN_TAC THEN DISCH_TAC THEN
9735 FIRST_ASSUM (ASSUME_TAC o MATCH_MP sigma_finite_disjoint) THEN
9736 FULL_SIMP_TAC std_ss [] THEN
9737 Q.ABBREV_TAC `B = (\i. 2 pow (SUC i) * measure m (A i))` THEN
9738 Q.ABBREV_TAC `inv' = \x. if (x = 0) then PosInf else inv x` THEN
9739 Know `!x. 0 < inv' x <=> x <> PosInf /\ 0 <= x` (* inv_pos_eq' *)
9740 >- (GEN_TAC \\
9741 Cases_on `x = 0`
9742 >- (Q.UNABBREV_TAC `inv'` \\
9743 ASM_SIMP_TAC std_ss [le_refl, num_not_infty, lt_infty]) \\
9744 Q.UNABBREV_TAC `inv'` >> ASM_SIMP_TAC std_ss [] \\
9745 POP_ASSUM (REWRITE_TAC o wrap o (MATCH_MP inv_pos_eq))) THEN
9746 DISCH_TAC THEN
9747 Know `!i:num. ?x. 0 < x /\ x < inv' (B i)` >-
9748 (GEN_TAC THEN Q.UNABBREV_TAC `B` THEN BETA_TAC THEN
9749 Suff `0 < inv' (2 pow SUC i * measure m (A i))`
9750 >- (DISCH_THEN (MP_TAC o MATCH_MP Q_DENSE_IN_R) THEN METIS_TAC []) THEN
9751 POP_ORW THEN
9752 `(2 pow SUC i <> NegInf) /\ (2 pow SUC i <> PosInf)`
9753 by METIS_TAC [pow_not_infty, num_not_infty] THEN
9754 KNOW_TAC ``measure m ((A:num->'a->bool) i) <> NegInf`` THENL
9755 [FULL_SIMP_TAC std_ss [measure_space_def, positive_def, lt_infty] THEN
9756 MATCH_MP_TAC lte_trans THEN Q.EXISTS_TAC `0` THEN
9757 SIMP_TAC std_ss [num_not_infty, GSYM lt_infty] THEN
9758 FIRST_X_ASSUM MATCH_MP_TAC THEN ASM_SET_TAC [],
9759 DISCH_TAC] THEN CONJ_TAC THENL
9760 [`?r. measure m (A i) = Normal r` by METIS_TAC [extreal_cases] THEN
9761 ASM_REWRITE_TAC [] THEN KNOW_TAC ``0:real <= r`` THENL
9762 [REWRITE_TAC [GSYM extreal_le_def] THEN
9763 FIRST_X_ASSUM (ASSUME_TAC o ONCE_REWRITE_RULE [EQ_SYM_EQ]) THEN
9764 ASM_SIMP_TAC std_ss [GSYM extreal_of_num_def] THEN
9765 FULL_SIMP_TAC std_ss [measure_space_def, positive_def] THEN
9766 FIRST_X_ASSUM MATCH_MP_TAC THEN ASM_SET_TAC [], DISCH_TAC] THEN
9767 ONCE_REWRITE_TAC [mul_comm] THEN METIS_TAC [mul_not_infty],
9768 ALL_TAC] THEN
9769 `2 pow SUC i = Normal (real (2 pow SUC i))` by METIS_TAC [normal_real] THEN
9770 `measure m (A i) = Normal (real (measure m (A i)))` by METIS_TAC [normal_real] THEN
9771 MATCH_MP_TAC le_mul THEN CONJ_TAC THENL
9772 [ALL_TAC,
9773 FULL_SIMP_TAC std_ss [measure_space_def, positive_def] THEN
9774 FIRST_X_ASSUM MATCH_MP_TAC THEN ASM_SET_TAC []] THEN
9775 MATCH_MP_TAC pow_pos_le THEN
9776 SIMP_TAC real_ss [extreal_le_def, extreal_of_num_def]) THEN DISCH_TAC THEN
9777 Know `?f. !x. 0 < f x /\ f x < inv' (2 pow SUC x * measure m (A x))`
9778 >- (METIS_TAC []) THEN STRIP_TAC THEN
9779 Know `!x. 0 <= f x` >- (ASM_SIMP_TAC std_ss [le_lt]) THEN DISCH_TAC THEN
9780 Q.ABBREV_TAC `h = (\x. suminf (\i. f i * indicator_fn (A i) x))` THEN
9781 Know `!i. A i IN measurable_sets m` >- ASM_SET_TAC [] THEN DISCH_TAC THEN
9782 Know `pos_fn_integral m h = suminf (\i. f i * measure m (A i))` >-
9783 (Q.UNABBREV_TAC `h` THEN
9784 Know `pos_fn_integral m (\x. suminf (\i. (\i x. f i * indicator_fn (A i) x) i x)) =
9785 suminf (\i. pos_fn_integral m ((\i x. f i * indicator_fn (A i) x) i))` >-
9786 (MATCH_MP_TAC pos_fn_integral_suminf THEN RW_TAC std_ss [] THENL
9787 [MATCH_MP_TAC le_mul THEN ASM_SIMP_TAC std_ss [indicator_fn_def] THEN
9788 COND_CASES_TAC THEN SIMP_TAC std_ss [le_refl] THEN
9789 SIMP_TAC real_ss [extreal_le_def, extreal_of_num_def], ALL_TAC] THEN
9790 ONCE_REWRITE_TAC [METIS [] ``(\x. f i * indicator_fn (A i) x) =
9791 (\x. (\x. f i) x * indicator_fn (A i) x)``] THEN
9792 MATCH_MP_TAC IN_MEASURABLE_BOREL_MUL_INDICATOR THEN
9793 FULL_SIMP_TAC std_ss [measure_space_def, subsets_def] THEN
9794 MATCH_MP_TAC IN_MEASURABLE_BOREL_CONST THEN Q.EXISTS_TAC `f i` THEN
9795 ASM_SIMP_TAC std_ss [] ) THEN
9796 RW_TAC std_ss [] THEN POP_ASSUM K_TAC THEN AP_TERM_TAC THEN ABS_TAC THEN
9797 Suff `(f i <> NegInf) /\ (f i <> PosInf)` THENL
9798 [STRIP_TAC THEN `f i = Normal (real (f i))` by METIS_TAC [GSYM normal_real] THEN
9799 ONCE_ASM_REWRITE_TAC [] THEN MATCH_MP_TAC pos_fn_integral_cmul_indicator THEN
9800 POP_ASSUM K_TAC THEN ASM_SIMP_TAC std_ss [] THEN
9801 SIMP_TAC std_ss [GSYM extreal_le_def, GSYM extreal_of_num_def] THEN
9802 ASM_SIMP_TAC std_ss [normal_real], ALL_TAC] THEN
9803 CONJ_TAC THENL
9804 [SIMP_TAC std_ss [lt_infty] THEN MATCH_MP_TAC lte_trans THEN
9805 Q.EXISTS_TAC `0` THEN ASM_SIMP_TAC std_ss [num_not_infty, GSYM lt_infty],
9806 ALL_TAC] THEN SIMP_TAC std_ss [lt_infty] THEN
9807 Cases_on `measure m (A i) = 0`
9808 >- (POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN POP_ASSUM MP_TAC THEN
9809 POP_ASSUM (MP_TAC o Q.SPEC `i`) THEN
9810 qunabbrevl_tac [`inv'`, `B`] THEN RW_TAC std_ss [] THEN
9811 FULL_SIMP_TAC std_ss [mul_rzero]) THEN
9812 MATCH_MP_TAC lt_trans THEN
9813 Q.EXISTS_TAC `inv' (2 pow SUC i * measure m (A i))` THEN
9814 ASM_SIMP_TAC std_ss [] THEN
9815 `(2 pow SUC i <> NegInf) /\ (2 pow SUC i <> PosInf)`
9816 by METIS_TAC [pow_not_infty, num_not_infty] THEN
9817 Know `measure m ((A:num->'a->bool) i) <> NegInf`
9818 >- (IMP_RES_TAC MEASURE_SPACE_POSITIVE \\
9819 POP_ASSUM (MATCH_MP_TAC o (MATCH_MP positive_not_infty)) >> art []) THEN
9820 DISCH_TAC THEN
9821 `?r. 2 pow SUC i = Normal r` by METIS_TAC [extreal_cases] THEN
9822 `?a. measure m (A i) = Normal a` by METIS_TAC [extreal_cases] THEN
9823 qunabbrevl_tac [`inv'`, `B`] THEN BETA_TAC THEN
9824 ONCE_ASM_REWRITE_TAC [] THEN
9825 SIMP_TAC std_ss [extreal_mul_def, extreal_of_num_def, extreal_11] THEN
9826 `(0 :extreal) < 2 pow (SUC i)` by METIS_TAC [pow_pos_lt, lt_02] THEN
9827 `a <> 0` by METIS_TAC [extreal_of_num_def, extreal_11] THEN
9828 `0 < r` by METIS_TAC [extreal_of_num_def, extreal_lt_eq] THEN
9829 Know `r * a <> 0`
9830 >- (`r <> 0` by METIS_TAC [REAL_LT_LE] \\
9831 CCONTR_TAC >> METIS_TAC [REAL_ENTIRE]) THEN DISCH_TAC THEN
9832 ASM_SIMP_TAC std_ss [extreal_inv_eq, lt_infty] ) THEN DISCH_TAC THEN
9833 Know `suminf (\i. f i * measure m (A i)) <= suminf (\i. (1 / 2) pow SUC i)` >-
9834 (MATCH_MP_TAC ext_suminf_mono THEN RW_TAC std_ss [lt_infty]
9835 >- (MATCH_MP_TAC le_mul THEN
9836 FULL_SIMP_TAC std_ss [measure_space_def, positive_def]) THEN
9837 MATCH_MP_TAC le_trans THEN
9838 Q.EXISTS_TAC `inv' (2 pow SUC n * measure m (A n)) * measure m (A n)` THEN
9839 CONJ_TAC
9840 >- (Cases_on `measure m (A n) = 0`
9841 >- (ASM_SIMP_TAC std_ss [mul_rzero, le_refl]) THEN
9842 MATCH_MP_TAC le_rmul_imp THEN FULL_SIMP_TAC std_ss [measure_space_def, le_lt] THEN
9843 FULL_SIMP_TAC std_ss [positive_def, le_lt] THEN METIS_TAC []) THEN
9844 `(2 pow SUC n <> NegInf) /\ (2 pow SUC n <> PosInf)`
9845 by METIS_TAC [pow_not_infty, num_not_infty] THEN
9846 KNOW_TAC ``measure m ((A:num->'a->bool) n) <> NegInf`` THENL
9847 [FULL_SIMP_TAC std_ss [measure_space_def, positive_def, lt_infty] THEN
9848 MATCH_MP_TAC lte_trans THEN Q.EXISTS_TAC `0` THEN
9849 SIMP_TAC std_ss [num_not_infty, GSYM lt_infty] THEN
9850 FIRST_X_ASSUM MATCH_MP_TAC THEN ASM_SET_TAC [],
9851 DISCH_TAC] THEN
9852 Cases_on `measure m (A n) = 0`
9853 >- (ASM_SIMP_TAC std_ss [mul_rzero] THEN MATCH_MP_TAC pow_pos_le THEN
9854 SIMP_TAC std_ss [half_between]) THEN
9855 `?r. 2 pow SUC n = Normal r` by METIS_TAC [extreal_cases] THEN
9856 `?a. measure m (A n) = Normal a` by METIS_TAC [extreal_cases] THEN
9857 ONCE_ASM_REWRITE_TAC [] THEN SIMP_TAC std_ss [extreal_mul_def] THEN
9858 `(0 :extreal) < 2 pow (SUC n)` by METIS_TAC [pow_pos_lt, lt_02] THEN
9859 `a <> 0` by METIS_TAC [extreal_of_num_def, extreal_11] THEN
9860 `0 < r` by METIS_TAC [extreal_of_num_def, extreal_lt_eq] THEN
9861 Know `r * a <> 0`
9862 >- (`r <> 0` by METIS_TAC [REAL_LT_LE] \\
9863 CCONTR_TAC >> METIS_TAC [REAL_ENTIRE]) THEN DISCH_TAC THEN
9864 Q.UNABBREV_TAC `inv'` >> BETA_TAC THEN
9865 `Normal (r * a) <> 0` by METIS_TAC [extreal_of_num_def, extreal_11] THEN
9866 ASM_SIMP_TAC std_ss [extreal_inv_eq] THEN
9867 `r <> 0` by METIS_TAC [REAL_LT_LE] THEN
9868 ASM_SIMP_TAC std_ss [REAL_INV_MUL, GSYM extreal_mul_def] THEN
9869 Know `Normal (inv a) * Normal a = 1`
9870 >- (SIMP_TAC std_ss [extreal_mul_def] THEN
9871 GEN_REWR_TAC RAND_CONV [extreal_of_num_def] THEN
9872 SIMP_TAC std_ss [extreal_11] THEN ASM_SIMP_TAC std_ss [REAL_MUL_LINV]) THEN
9873 ONCE_REWRITE_TAC [GSYM mul_assoc] THEN Rewr' THEN
9874 RW_TAC std_ss [mul_rone] THEN
9875 ASM_SIMP_TAC std_ss [normal_inv_eq] THEN
9876 GEN_REWR_TAC LAND_CONV [GSYM mul_lone] THEN
9877 ASM_SIMP_TAC std_ss [GSYM extreal_div_def] THEN
9878 ASM_SIMP_TAC std_ss [GSYM le_ldiv] THEN
9879 Q.PAT_ASSUM `_ = Normal r` (ONCE_REWRITE_TAC o wrap o SYM) THEN
9880 ASM_SIMP_TAC std_ss [GSYM pow_mul] THEN
9881 MATCH_MP_TAC le_trans THEN Q.EXISTS_TAC `(1 / 2 * 2) pow 0` THEN
9882 CONJ_TAC >- (SIMP_TAC std_ss [pow_0, le_lt]) THEN
9883 MATCH_MP_TAC pow_le_mono THEN SIMP_TAC arith_ss [] THEN
9884 SIMP_TAC real_ss [extreal_le_def, extreal_of_num_def, extreal_div_eq,
9885 extreal_mul_def, GSYM REAL_LE_LDIV_EQ] ) THEN
9886 RW_TAC std_ss [pow_half_ser'] THEN
9887 `pos_fn_integral m h <> PosInf`
9888 by METIS_TAC [lt_infty, num_not_infty, let_trans] THEN
9889 Know `!x. x IN m_space m ==> ?i. x IN A i`
9890 >- (RULE_ASSUM_TAC (ONCE_REWRITE_RULE [EQ_SYM_EQ]) THEN
9891 FULL_SIMP_TAC std_ss [IN_BIGUNION, IN_UNIV, GSPECIFICATION] THEN
9892 METIS_TAC []) THEN DISCH_TAC THEN
9893 Know `!x i. x IN A i ==> (h x = f i)`
9894 >- (RW_TAC std_ss [] \\
9895 Q.UNABBREV_TAC `h` >> BETA_TAC \\
9896 MATCH_MP_TAC ext_suminf_cmult_indicator \\
9897 ASM_SIMP_TAC std_ss []) THEN DISCH_TAC THEN
9898 Know `!x. x IN m_space m ==> 0 < h x /\ h x < PosInf`
9899 >- (RW_TAC std_ss []
9900 >- (FIRST_X_ASSUM (MP_TAC o Q.SPEC `x`) THEN
9901 FIRST_X_ASSUM (MP_TAC o Q.SPEC `x`) THEN ASM_REWRITE_TAC [] THEN
9902 STRIP_TAC THEN DISCH_THEN (MP_TAC o Q.SPEC `i`) THEN
9903 ASM_REWRITE_TAC [] THEN RW_TAC std_ss []) THEN
9904 FIRST_X_ASSUM (MP_TAC o Q.SPEC `x`) THEN
9905 FIRST_X_ASSUM (MP_TAC o Q.SPEC `x`) THEN ASM_REWRITE_TAC [] THEN
9906 STRIP_TAC THEN DISCH_THEN (MP_TAC o Q.SPEC `i`) THEN
9907 ASM_REWRITE_TAC [] THEN RW_TAC std_ss [] THEN
9908 UNDISCH_TAC ``!x. 0 < f x /\ f x < inv' (2 pow SUC x * measure m (A x))`` THEN
9909 DISCH_THEN (MP_TAC o Q.SPEC `i`) THEN
9910 Cases_on `measure m (A i) = 0`
9911 >- (POP_ORW THEN SIMP_TAC std_ss [mul_rzero] THEN
9912 Q.UNABBREV_TAC `inv'` THEN METIS_TAC []) THEN
9913 STRIP_TAC THEN MATCH_MP_TAC lte_trans THEN
9914 Q.EXISTS_TAC `inv' (2 pow SUC i * measure m (A i))` THEN
9915 ASM_REWRITE_TAC [le_infty]) THEN DISCH_TAC THEN
9916 Know `!x. 0 <= h x`
9917 >- (GEN_TAC >> Q.UNABBREV_TAC `h` >> BETA_TAC \\
9918 MATCH_MP_TAC ext_suminf_pos >> RW_TAC std_ss [] \\
9919 MATCH_MP_TAC le_mul >> art [INDICATOR_FN_POS]) THEN DISCH_TAC THEN
9920 Q.EXISTS_TAC `h` THEN ASM_SIMP_TAC std_ss [] THEN
9921 (* h IN Borel_measurable (m_space m,measurable_sets m) *)
9922 Q.UNABBREV_TAC `h` \\
9923 MATCH_MP_TAC IN_MEASURABLE_BOREL_SUMINF \\
9924 Q.EXISTS_TAC `\i x. f i * indicator_fn (A i) x` \\
9925 STRONG_CONJ_TAC >- PROVE_TAC [measure_space_def] >> DISCH_TAC \\
9926 RW_TAC std_ss [space_def] >| (* 2 subgoals *)
9927 [ (* goal 1 (of 2) *)
9928 MATCH_MP_TAC
9929 (BETA_RULE (Q.SPECL [`(m_space m,measurable_sets m)`, `\x. f n`, `A n`]
9930 IN_MEASURABLE_BOREL_MUL_INDICATOR)) \\
9931 RW_TAC std_ss [subsets_def] \\
9932 MATCH_MP_TAC IN_MEASURABLE_BOREL_CONST' >> art [],
9933 (* goal 2 (of 2) *)
9934 MATCH_MP_TAC le_mul >> art [INDICATOR_FN_POS] ]
9935QED
9936
9937(* The most general version (M: sigma-finite, N: arbitrary). *)
9938Theorem Radon_Nikodym_sigma_finite :
9939 !M N. measure_space M /\ measure_space N /\
9940 measurable_sets M = measurable_sets N /\
9941 sigma_finite M /\ measure_absolutely_continuous (measure N) M ==>
9942 ?f. f IN measurable (m_space M,measurable_sets M) Borel /\ (!x. 0 <= f x) /\
9943 !A. A IN measurable_sets M ==>
9944 (pos_fn_integral M (\x. f x * indicator_fn A x) = measure N A)
9945Proof
9946 rpt STRIP_TAC
9947 >> `m_space M = m_space N` by METIS_TAC [sets_eq_imp_space_eq]
9948 >> ‘sigma_algebra (measurable_space M) /\ sigma_algebra (measurable_space N)’
9949 by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA]
9950 >> Q.PAT_X_ASSUM `m_space M = m_space N` (ASSUME_TAC o SYM)
9951 >> Q.PAT_X_ASSUM `measurable_sets M = measurable_sets N` (ASSUME_TAC o SYM)
9952 >> ASM_REWRITE_TAC []
9953 >> `{PosInf} IN subsets Borel` by METIS_TAC [BOREL_MEASURABLE_INFINITY]
9954 >> `?h. h IN measurable (m_space M,measurable_sets M) Borel /\
9955 pos_fn_integral M h <> PosInf /\
9956 (!x. x IN m_space M ==> 0 < h x /\ h x < PosInf) /\ !x. 0 <= h x`
9957 by METIS_TAC [finite_integrable_function_exists]
9958 >> Q.ABBREV_TAC `t = \A. pos_fn_integral M (\x. h x * indicator_fn A x)`
9959 >> Q.ABBREV_TAC `mt = (m_space M, measurable_sets M,
9960 (\A. pos_fn_integral M (\x. h x * indicator_fn A x)))`
9961 >> Know `measure mt (m_space mt) <> PosInf`
9962 >- (Q.UNABBREV_TAC `mt` THEN
9963 SIMP_TAC std_ss [measure_def, m_space_def] THEN
9964 ASM_SIMP_TAC std_ss [MEASURE_SPACE_MSPACE_MEASURABLE] THEN
9965 Suff `pos_fn_integral M (\x. h x * indicator_fn (m_space M) x) =
9966 pos_fn_integral M h` >- METIS_TAC [] THEN
9967 MATCH_MP_TAC (GSYM pos_fn_integral_mspace) THEN ASM_SIMP_TAC std_ss [])
9968 >> DISCH_TAC
9969 >> Know `measure_space mt`
9970 >- (Q.UNABBREV_TAC `mt` THEN
9971 FULL_SIMP_TAC std_ss [measure_space_def, m_space_def, measurable_sets_def] THEN
9972 CONJ_TAC (* positive *)
9973 >- (SIMP_TAC std_ss [positive_def, measure_def, measurable_sets_def] \\
9974 Q.UNABBREV_TAC `t` >> BETA_TAC \\
9975 CONJ_TAC
9976 >- (SIMP_TAC std_ss [indicator_fn_def, NOT_IN_EMPTY, mul_rzero] \\
9977 ASM_SIMP_TAC std_ss [pos_fn_integral_zero, measure_space_def]) \\
9978 rpt STRIP_TAC >> MATCH_MP_TAC pos_fn_integral_pos \\
9979 ASM_SIMP_TAC std_ss [measure_space_def] \\
9980 rpt STRIP_TAC >> MATCH_MP_TAC le_mul >> art [INDICATOR_FN_POS]) \\
9981 SIMP_TAC std_ss [countably_additive_alt_eq] \\
9982 rpt STRIP_TAC >> SIMP_TAC std_ss [o_DEF] \\
9983 `!x. A x IN measurable_sets M` by ASM_SET_TAC [] \\
9984 ASM_SIMP_TAC std_ss [GSYM IMAGE_DEF] \\
9985 Q.UNABBREV_TAC `t` >> BETA_TAC \\
9986 Know `!x. indicator_fn (BIGUNION (IMAGE A univ(:num))) x =
9987 suminf (\j. indicator_fn (A j) x)`
9988 >- (GEN_TAC >> ONCE_REWRITE_TAC [EQ_SYM_EQ] \\
9989 MATCH_MP_TAC indicator_fn_suminf \\
9990 FULL_SIMP_TAC std_ss [disjoint_family_on, DISJOINT_DEF] \\
9991 ASM_SET_TAC []) \\
9992 DISCH_TAC >> ASM_SIMP_TAC std_ss [] \\
9993 Know `!x. h x * suminf (\j. indicator_fn (A j) x) =
9994 suminf (\j. h x * (\j. indicator_fn (A j) x) j)`
9995 >- (GEN_TAC >> MATCH_MP_TAC (GSYM ext_suminf_cmul) \\
9996 ASM_SIMP_TAC std_ss [INDICATOR_FN_POS]) >> DISC_RW_KILL \\
9997 SIMP_TAC std_ss [] \\
9998 ONCE_REWRITE_TAC [METIS [] ``(\x'. h x' * indicator_fn (A x) x') =
9999 (\x. (\x'. h x' * indicator_fn (A x) x')) x``] \\
10000 ONCE_REWRITE_TAC
10001 [METIS [] ``suminf (\j. h x * indicator_fn (A j) x) =
10002 suminf (\j. (\x x'. h x' * indicator_fn (A x) x') j x)``] \\
10003 MATCH_MP_TAC pos_fn_integral_suminf \\
10004 ASM_SIMP_TAC std_ss [measure_space_def] \\
10005 CONJ_TAC >- (RW_TAC std_ss [] \\
10006 MATCH_MP_TAC le_mul >> art [INDICATOR_FN_POS]) \\
10007 GEN_TAC >> MATCH_MP_TAC IN_MEASURABLE_BOREL_MUL_INDICATOR \\
10008 METIS_TAC [subsets_def, measurable_sets_def])
10009 >> DISCH_TAC
10010 >> Q.UNABBREV_TAC `t` (* not needed any more *)
10011 >> Cases_on `m_space M = {}`
10012 >- (Know `measurable_sets M = {{}}`
10013 >- (FULL_SIMP_TAC std_ss [measure_space_def, sigma_algebra_alt_pow, POW_DEF] \\
10014 FULL_SIMP_TAC std_ss [SUBSET_EMPTY] \\
10015 UNDISCH_TAC ``measurable_sets M SUBSET {s:'a->bool | s = {}}`` \\
10016 SIMP_TAC std_ss [SUBSET_DEF, GSPECIFICATION, EXTENSION, IN_SING] \\
10017 SIMP_TAC std_ss [NOT_IN_EMPTY] \\
10018 ONCE_REWRITE_TAC [SET_RULE ``(!x'. x' NOTIN x) = (x = {})``] \\
10019 DISCH_TAC >> GEN_TAC >> POP_ASSUM (MP_TAC o Q.SPEC `x`) \\
10020 STRIP_TAC >> EQ_TAC >| [ASM_SET_TAC [], METIS_TAC []]) \\
10021 DISCH_TAC \\
10022 Q.EXISTS_TAC `(\x. 0)` >> ASM_SIMP_TAC std_ss [le_refl, IN_SING] \\
10023 FULL_SIMP_TAC std_ss [mul_lzero, measure_space_def, positive_def] \\
10024 reverse CONJ_TAC
10025 >- (MATCH_MP_TAC pos_fn_integral_zero \\
10026 METIS_TAC [measure_space_def, positive_def]) \\
10027 ASM_SIMP_TAC std_ss [IN_MEASURABLE_BOREL] \\
10028 ASM_SIMP_TAC std_ss [space_def, INTER_EMPTY, subsets_def] \\
10029 SRW_TAC [] [IN_DEF, IN_FUNSET])
10030 >> Suff `measure_absolutely_continuous (measure N) mt`
10031 >- (STRIP_TAC \\
10032 MP_TAC (Q.SPECL [`mt`, `N`] Radon_Nikodym_finite_arbitrary) \\
10033 `m_space mt = m_space M` by METIS_TAC [m_space_def] \\
10034 `measurable_sets mt = measurable_sets M` by METIS_TAC [measurable_sets_def] \\
10035 RW_TAC std_ss [] >> POP_ASSUM MP_TAC \\
10036 Know `!A. A IN measurable_sets mt ==>
10037 (pos_fn_integral mt (\x. f x * indicator_fn A x) =
10038 pos_fn_integral M (\x. h x * (\x. f x * indicator_fn A x) x))`
10039 >- (GEN_TAC THEN DISCH_TAC THEN
10040 Q.UNABBREV_TAC `mt` THEN
10041 ONCE_REWRITE_TAC [METIS []
10042 “pos_fn_integral M (\x. h x * (f x * indicator_fn A x)) =
10043 pos_fn_integral M (\x. h x * (\x. f x * indicator_fn A x) x)”] \\
10044 Suff `pos_fn_integral
10045 (m_space M,measurable_sets M,
10046 (\A. pos_fn_integral M (\x. max 0 (h x * indicator_fn A x))))
10047 (\x. max 0 ((\x. f x * indicator_fn A x) x)) =
10048 pos_fn_integral M (\x. max 0 (h x * (\x. f x * indicator_fn A x) x))`
10049 >- (ASM_SIMP_TAC std_ss [extreal_max_def, le_mul, indicator_fn_pos_le] \\
10050 METIS_TAC []) \\
10051 MATCH_MP_TAC pos_fn_integral_density' THEN ASM_SIMP_TAC std_ss [] \\
10052 CONJ_TAC
10053 >- (MATCH_MP_TAC IN_MEASURABLE_BOREL_MUL_INDICATOR \\
10054 METIS_TAC [subsets_def, measure_space_def, measurable_sets_def,
10055 m_space_def]) \\
10056 CONJ_TAC
10057 >- (SIMP_TAC std_ss [AE_ALT, GSPECIFICATION, null_set_def, GSPEC_T] \\
10058 Q.EXISTS_TAC `{}` >> SIMP_TAC std_ss [IN_UNIV, GSPEC_F, SUBSET_REFL] \\
10059 METIS_TAC [measure_space_def, sigma_algebra_alt_pow, positive_def]) \\
10060 GEN_TAC >> MATCH_MP_TAC le_mul \\
10061 ASM_SIMP_TAC std_ss [INDICATOR_FN_POS]) \\
10062 NTAC 2 (DISCH_TAC) \\
10063 Q.EXISTS_TAC `(\x. h x * f x)` \\
10064 CONJ_TAC (* (\x. h x * f x) is borel-measurable *)
10065 >- (MATCH_MP_TAC IN_MEASURABLE_BOREL_TIMES \\
10066 qexistsl_tac [`h`, `f`] >> ASM_SIMP_TAC std_ss []) \\
10067 CONJ_TAC (* 0 <= h x * f x *)
10068 >- (GEN_TAC >> BETA_TAC >> MATCH_MP_TAC le_mul >> art []) \\
10069 RW_TAC std_ss [] >> REV_FULL_SIMP_TAC std_ss [mul_assoc])
10070 (* below was reworked by Chun Tian without using null_sets_density_iff (nonsense) *)
10071 >> FULL_SIMP_TAC std_ss [measure_absolutely_continuous_def]
10072 >> rpt STRIP_TAC
10073 >> `measurable_sets mt = measurable_sets M`
10074 by METIS_TAC [measurable_sets_def] THEN FULL_SIMP_TAC std_ss []
10075 >> rename1 `measure N A = 0`
10076 >> FIRST_X_ASSUM MATCH_MP_TAC >> art []
10077 >> Q.PAT_X_ASSUM `measure mt A = 0` MP_TAC
10078 >> Q.UNABBREV_TAC `mt`
10079 >> FULL_SIMP_TAC std_ss [m_space_def, measurable_sets_def, measure_def]
10080 >> MP_TAC (Q.SPECL [`M`, `\x. h x * indicator_fn A x`] pos_fn_integral_eq_0)
10081 >> ASM_SIMP_TAC std_ss []
10082 >> Know ‘!x. x IN m_space M ==> 0 <= h x * indicator_fn A x’
10083 >- rw [le_mul, INDICATOR_FN_POS]
10084 >> Know `(\x. h x * indicator_fn A x) IN Borel_measurable (measurable_space M)`
10085 >- (MATCH_MP_TAC IN_MEASURABLE_BOREL_MUL_INDICATOR \\
10086 fs [measure_space_def, subsets_def])
10087 >> RW_TAC std_ss []
10088 >> Suff `A = {x | x IN m_space M /\ h x * indicator_fn A x <> 0}`
10089 >- (Rewr' >> art [])
10090 >> RW_TAC std_ss [Once EXTENSION, GSPECIFICATION, indicator_fn_def]
10091 >> Cases_on `x IN A` >> ASM_SIMP_TAC std_ss [mul_rone, mul_rzero]
10092 >> STRONG_CONJ_TAC >- METIS_TAC [MEASURE_SPACE_IN_MSPACE]
10093 >> METIS_TAC [lt_le]
10094QED
10095
10096(* This version has “!x. x IN m_space M ==> 0 <= f x” instead of “!x. 0 <= f x” *)
10097Theorem RADON_NIKODYM :
10098 !M N. measure_space M /\ measure_space N /\
10099 measurable_sets M = measurable_sets N /\
10100 sigma_finite M /\ measure_absolutely_continuous (measure N) M ==>
10101 ?f. f IN measurable (m_space M,measurable_sets M) Borel /\
10102 (!x. x IN m_space M ==> 0 <= f x) /\
10103 !A. A IN measurable_sets M ==>
10104 (pos_fn_integral M (\x. f x * indicator_fn A x) = measure N A)
10105Proof
10106 rpt STRIP_TAC
10107 >> MP_TAC (Q.SPECL [‘M’, ‘N’] Radon_Nikodym_sigma_finite) >> rw []
10108 >> Q.EXISTS_TAC ‘f’ >> rw []
10109QED
10110
10111(* Final version: more compact using of "<<" and "*" (density_measure_def) *)
10112Theorem Radon_Nikodym :
10113 !m v. measure_space m /\ sigma_finite m /\
10114 measure_space (m_space m,measurable_sets m,v) /\
10115 measure_absolutely_continuous v m ==>
10116 ?f. f IN measurable (m_space m,measurable_sets m) Borel /\ (!x. 0 <= f x) /\
10117 !s. s IN (measurable_sets m) ==> ((f * m) s = v s)
10118Proof
10119 RW_TAC std_ss [density_measure_def]
10120 >> MP_TAC (REWRITE_RULE [m_space_def, measurable_sets_def, measure_def]
10121 (Q.SPECL [`m`, `(m_space m,measurable_sets m,v)`]
10122 Radon_Nikodym_sigma_finite))
10123 >> RW_TAC std_ss []
10124QED
10125
10126(* A variant with ‘x IN m_space m’ added, aligned with ‘RN_deriv’. *)
10127Theorem Radon_Nikodym' :
10128 !m v. measure_space m /\ sigma_finite m /\
10129 measure_space (m_space m,measurable_sets m,v) /\
10130 measure_absolutely_continuous v m ==>
10131 ?f. f IN measurable (m_space m,measurable_sets m) Borel /\
10132 (!x. x IN m_space m ==> 0 <= f x) /\
10133 !s. s IN (measurable_sets m) ==> ((f * m) s = v s)
10134Proof
10135 rpt STRIP_TAC
10136 >> ‘?f. f IN measurable (m_space m,measurable_sets m) Borel /\ (!x. 0 <= f x) /\
10137 !s. s IN (measurable_sets m) ==> ((f * m) s = v s)’
10138 by METIS_TAC [Radon_Nikodym]
10139 >> Q.EXISTS_TAC ‘f’ >> rw []
10140QED
10141
10142(* Helper simps for later results *)
10143
10144Theorem m_space_density[simp]:
10145 !m f. m_space (density m f) = m_space m
10146Proof
10147 simp[density_def]
10148QED
10149
10150Theorem measurable_sets_density[simp]:
10151 !m f. measurable_sets (density m f) = measurable_sets m
10152Proof
10153 simp[density_def]
10154QED
10155
10156Theorem measurable_space_density[simp] :
10157 measurable_space (density m f) = measurable_space m
10158Proof
10159 simp [density_def]
10160QED
10161
10162(* References:
10163
10164 [1] Schilling, R.L.: Measures, Integrals and Martingales (Second Edition).
10165 Cambridge University Press (2017).
10166 [2] Mhamdi, T., Hasan, O., Tahar, S.: Formalization of Measure Theory and Lebesgue
10167 Integration for Probabilistic Analysis in HOL. ACM Trans. Embedded Comput. Syst.
10168 12, 1-23 (2013). DOI:10.1145/2406336.2406349
10169 [4] Wikipedia: https://en.wikipedia.org/wiki/Beppo_Levi
10170 [5] Wikipedia: https://en.wikipedia.org/wiki/Giuseppe_Vitali
10171 [6] Shiryaev, A.N.: Probability-1. Springer-Verlag New York (2016).
10172 [7] Coble, A.R.: Anonymity, information, and machine-assisted proof.
10173 University of Cambridge (2010).
10174 *)