probabilityScript.sml
1(* ------------------------------------------------------------------------- *)
2(* Probability Theory *)
3(* Authors: Tarek Mhamdi, Osman Hasan, Sofiene Tahar *)
4(* HVG Group, Concordia University, Montreal *)
5(* *)
6(* Further enriched by Chun Tian (2019 - 2025) *)
7(* ------------------------------------------------------------------------- *)
8(* Originally based on the work of Joe Hurd [7] and Aaron Coble [8] *)
9(* Cambridge University. *)
10(* ========================================================================= *)
11Theory probability
12Ancestors
13 pair combin option prim_rec arithmetic pred_set topology real
14 iterate seq transc real_sigma real_topology metric extreal
15 sigma_algebra measure real_borel borel lebesgue martingale
16Libs
17 pred_setLib hurdUtils numLib realLib
18
19
20(* "... This task would have been a rather hopeless one before the
21 introduction of Lebesgue's theories of measure and integration. ...
22 But if probability theory was to be based on the above analogies, it
23 still was necessary to make the theories of measure and integration
24 independent of the geometric elements which were in the foreground
25 with Lebesgue. ...
26
27 I wish to call attention to those points of the present exposition
28 which are outside the above-mentioned range of ideas familiar to
29 the specialist. They are the following: Probability distributions
30 in infinite-dimensional spaces (Chapter III, 4); differentiation
31 and integration of mathematical expectations with respect to a
32 parameter (Chapter IV, 5); and especially the theory of conditional
33 probabilities and conditional expectations (Chapter V). ..."
34
35 -- A. N. Kolmogorov, "Foundations of the Theory of Probability." [1] *)
36
37val set_ss = std_ss ++ PRED_SET_ss;
38
39val _ = hide "S";
40val _ = hide "W";
41
42val _ = intLib.deprecate_int ();
43val _ = ratLib.deprecate_rat ();
44
45(* ------------------------------------------------------------------------- *)
46(* Basic probability theory definitions. *)
47(* ------------------------------------------------------------------------- *)
48
49Type p_space = “:'a m_space”
50Type events = “:'a set set”
51
52Definition p_space_def: p_space = m_space
53End
54
55Definition events_def: events = measurable_sets
56End
57
58Definition prob_def: prob = measure
59End
60
61Definition prob_space_def:
62 prob_space p <=> measure_space p /\ (measure p (m_space p) = 1)
63End
64
65Definition probably_def:
66 probably p e <=> e IN events p /\ (prob p e = 1)
67End
68
69Definition possibly_def:
70 possibly p e <=> e IN events p /\ prob p e <> 0
71End
72
73Definition random_variable_def :
74 random_variable X p s <=> X IN measurable (p_space p, events p) s
75End
76
77(* `real_random_variable` is dedicated to Borel-measurable functions
78
79 NOTE: ‘x IN p_space p’ was wrongly removed in k14 release.
80 *)
81Definition real_random_variable_def :
82 real_random_variable X p <=>
83 random_variable X p Borel /\
84 !x. x IN p_space p ==> X x <> NegInf /\ X x <> PosInf
85End
86
87(* A (probability) distribution is a probability measure on `(p_space p,events p)`,
88
89 cf. lebesgueTheory.distr_def, of type ``:'a m_space``
90 *)
91Definition distribution_def: (* was: pmf in [10] *)
92 distribution (p :'a p_space) X = (\s. prob p ((PREIMAGE X s) INTER p_space p))
93End
94
95(* c.f. [2, p.36], [4, p.206], [6, p.256], etc. *)
96Definition distribution_function_def:
97 distribution_function p X = (\x. prob p ({w | X w <= x} INTER p_space p))
98End
99
100(* NOTE (fixes after k14): changed ‘i IN J’ to ‘j IN J’ *)
101Definition identical_distribution_def :
102 identical_distribution p X E (J :'index set) =
103 !i j s. s IN subsets E /\ i IN J /\ j IN J ==>
104 (distribution p (X i) s = distribution p (X j) s)
105End
106
107Definition joint_distribution_def :
108 joint_distribution (p :'a p_space) X Y =
109 (\a. prob p (PREIMAGE (\x. (X x,Y x)) a INTER p_space p))
110End
111
112Definition joint_distribution3_def :
113 joint_distribution3 (p :'a p_space) X Y Z =
114 (\a. prob p (PREIMAGE (\x. (X x,Y x,Z x)) a INTER p_space p))
115End
116
117Definition conditional_distribution_def:
118 conditional_distribution (p :'a p_space) X Y a b =
119 joint_distribution p X Y (a CROSS b) / distribution p Y b
120End
121
122Definition expectation_def :
123 expectation = lebesgue$integral
124End
125
126(* not used *)
127Definition conditional_expectation_def:
128 conditional_expectation p X s =
129 @f. real_random_variable f p /\
130 !g. g IN s ==>
131 (expectation p (\x. f x * indicator_fn g x) =
132 expectation p (\x. X x * indicator_fn g x))
133End
134
135(* not used *)
136Definition conditional_prob_def:
137 conditional_prob p e1 e2 =
138 conditional_expectation p (indicator_fn e1) e2
139End
140
141Definition cond_prob_def:
142 cond_prob p e1 e2 = (prob p (e1 INTER e2)) / (prob p e2)
143End
144
145(* not used *)
146Definition rv_conditional_expectation_def:
147 rv_conditional_expectation (p :'a p_space) s X Y =
148 conditional_expectation p X (IMAGE (\a. (PREIMAGE Y a) INTER p_space p) (subsets s))
149End
150
151(* this only works in discrete probability spaces *)
152Definition uniform_distribution_def:
153 uniform_distribution (s :'a algebra) =
154 (\(a :'a set). (&CARD a / &CARD (space s)) :extreal)
155End
156
157(* ------------------------------------------------------------------------- *)
158(* Basic probability theorems *)
159(* ------------------------------------------------------------------------- *)
160
161Theorem PROB_SPACE_REDUCE :
162 !p. (p_space p,events p,prob p) = p
163Proof
164 RW_TAC std_ss [p_space_def, events_def, prob_def, MEASURE_SPACE_REDUCE]
165QED
166
167Theorem POSITIVE_PROB:
168 !p. positive p <=> (prob p {} = 0) /\ !s. s IN events p ==> 0 <= prob p s
169Proof
170 RW_TAC std_ss [positive_def, prob_def, events_def]
171QED
172
173Theorem INCREASING_PROB:
174 !p. increasing p <=> !s t. s IN events p /\ t IN events p /\ s SUBSET t ==>
175 prob p s <= prob p t
176Proof
177 RW_TAC std_ss [increasing_def, prob_def, events_def]
178QED
179
180Theorem ADDITIVE_PROB:
181 !p. additive p <=>
182 !s t. s IN events p /\ t IN events p /\ DISJOINT s t /\ s UNION t IN events p ==>
183 (prob p (s UNION t) = prob p s + prob p t)
184Proof
185 RW_TAC std_ss [additive_def, prob_def, events_def]
186QED
187
188Theorem COUNTABLY_ADDITIVE_PROB:
189 !p. countably_additive p <=>
190 !f. f IN (UNIV -> events p) /\ (!m n. m <> n ==> DISJOINT (f m) (f n)) /\
191 BIGUNION (IMAGE f UNIV) IN events p ==>
192 (prob p (BIGUNION (IMAGE f UNIV)) = suminf (prob p o f))
193Proof
194 RW_TAC std_ss [countably_additive_def, prob_def, events_def]
195QED
196
197Theorem PROB_SPACE:
198 !p. prob_space p <=> sigma_algebra (p_space p, events p) /\ positive p /\
199 countably_additive p /\ (prob p (p_space p) = 1)
200Proof
201 RW_TAC std_ss [prob_space_def, prob_def, events_def, measure_space_def, p_space_def]
202 >> PROVE_TAC []
203QED
204
205Theorem EVENTS_SIGMA_ALGEBRA: !p. prob_space p ==> sigma_algebra (p_space p, events p)
206Proof
207 RW_TAC std_ss [PROB_SPACE]
208QED
209
210Theorem EVENTS_ALGEBRA: !p. prob_space p ==> algebra (p_space p, events p)
211Proof
212 PROVE_TAC [SIGMA_ALGEBRA_ALGEBRA, EVENTS_SIGMA_ALGEBRA]
213QED
214
215Theorem PROB_EMPTY: !p. prob_space p ==> (prob p {} = 0)
216Proof
217 PROVE_TAC [PROB_SPACE, POSITIVE_PROB]
218QED
219
220Theorem PROB_UNIV: !p. prob_space p ==> (prob p (p_space p) = 1)
221Proof
222 RW_TAC std_ss [PROB_SPACE]
223QED
224
225Theorem PROB_SPACE_NOT_EMPTY :
226 !p. prob_space p ==> p_space p <> {}
227Proof
228 METIS_TAC [PROB_EMPTY, PROB_UNIV, ne_01]
229QED
230
231Theorem PROB_SPACE_POSITIVE: !p. prob_space p ==> positive p
232Proof
233 RW_TAC std_ss [PROB_SPACE]
234QED
235
236Theorem PROB_SPACE_COUNTABLY_ADDITIVE: !p. prob_space p ==> countably_additive p
237Proof
238 RW_TAC std_ss [PROB_SPACE]
239QED
240
241Theorem PROB_SPACE_ADDITIVE: !p. prob_space p ==> additive p
242Proof
243 rpt STRIP_TAC
244 >> MATCH_MP_TAC (REWRITE_RULE [premeasure_def] ALGEBRA_PREMEASURE_ADDITIVE)
245 >> IMP_RES_TAC EVENTS_ALGEBRA
246 >> fs [events_def, p_space_def]
247 >> PROVE_TAC [PROB_SPACE_COUNTABLY_ADDITIVE, PROB_SPACE_POSITIVE]
248QED
249
250Theorem PROB_SPACE_INCREASING:
251 !p. prob_space p ==> increasing p
252Proof
253 PROVE_TAC [ADDITIVE_INCREASING, EVENTS_ALGEBRA, PROB_SPACE_ADDITIVE,
254 PROB_SPACE_POSITIVE, events_def, p_space_def]
255QED
256
257Theorem PROB_POSITIVE:
258 !p s. prob_space p /\ s IN events p ==> 0 <= prob p s
259Proof
260 PROVE_TAC [POSITIVE_PROB, PROB_SPACE_POSITIVE]
261QED
262
263Theorem PROB_SPACE_SUBSET_PSPACE:
264 !p s. prob_space p /\ s IN events p ==> s SUBSET p_space p
265Proof
266 RW_TAC std_ss [prob_space_def, events_def, p_space_def, MEASURE_SPACE_SUBSET_MSPACE]
267QED
268
269Theorem PROB_SPACE_IN_PSPACE :
270 !p E. prob_space p /\ E IN events p ==> !x. x IN E ==> x IN p_space p
271Proof
272 RW_TAC std_ss [prob_space_def, events_def, p_space_def]
273 >> irule MEASURE_SPACE_IN_MSPACE >> art []
274 >> Q.EXISTS_TAC `E` >> art []
275QED
276
277(* Thus TONELLI and FUBINI theorems are applicable *)
278Theorem PROB_SPACE_SIGMA_FINITE :
279 !p. prob_space p ==> sigma_finite p
280Proof
281 RW_TAC std_ss [prob_space_def]
282 >> MATCH_MP_TAC FINITE_IMP_SIGMA_FINITE
283 >> rw [extreal_of_num_def, extreal_not_infty]
284QED
285
286Theorem PROB_UNDER_UNIV:
287 !p s. prob_space p /\ s IN events p ==> (prob p (s INTER p_space p) = prob p s)
288Proof
289 RW_TAC std_ss [prob_space_def, prob_def, events_def, p_space_def]
290 >> `s SUBSET m_space p` by PROVE_TAC [MEASURE_SPACE_SUBSET_MSPACE]
291 >> `s INTER m_space p = s` by PROVE_TAC [INTER_SUBSET_EQN] >> art []
292QED
293
294Theorem PROB_INCREASING:
295 !p s t. prob_space p /\ s IN events p /\ t IN events p /\ s SUBSET t ==>
296 prob p s <= prob p t
297Proof
298 PROVE_TAC [INCREASING_PROB, PROB_SPACE_INCREASING]
299QED
300
301Theorem PROB_ADDITIVE:
302 !p s t u. prob_space p /\ s IN events p /\ t IN events p /\
303 DISJOINT s t /\ (u = s UNION t) ==>
304 (prob p u = prob p s + prob p t)
305Proof
306 rpt STRIP_TAC
307 >> IMP_RES_TAC PROB_SPACE_ADDITIVE >> art []
308 >> POP_ASSUM (MATCH_MP_TAC o (REWRITE_RULE [ADDITIVE_PROB]))
309 >> art []
310 >> IMP_RES_TAC EVENTS_ALGEBRA
311 >> PROVE_TAC [ALGEBRA_UNION, subsets_def]
312QED
313
314Theorem PROB_COUNTABLY_ADDITIVE:
315 !p s f. prob_space p /\ f IN (UNIV -> events p) /\
316 (!m n. m <> n ==> DISJOINT (f m) (f n)) /\ (s = BIGUNION (IMAGE f UNIV)) ==>
317 (prob p s = suminf (prob p o f))
318Proof
319 RW_TAC std_ss []
320 >> Suff `BIGUNION (IMAGE f UNIV) IN events p`
321 >- PROVE_TAC [COUNTABLY_ADDITIVE_PROB, PROB_SPACE_COUNTABLY_ADDITIVE]
322 >> (MATCH_MP_TAC o REWRITE_RULE [subsets_def, space_def] o
323 Q.SPECL [`(p_space p, events p)`,`f`]) SIGMA_ALGEBRA_ENUM
324 >> PROVE_TAC [EVENTS_SIGMA_ALGEBRA]
325QED
326
327Theorem PROB_FINITE:
328 !p s. prob_space p /\ s IN events p ==> (prob p s <> NegInf /\ prob p s <> PosInf)
329Proof
330 RW_TAC std_ss [prob_space_def, prob_def, events_def, positive_not_infty, MEASURE_SPACE_POSITIVE]
331 >> RW_TAC std_ss [GSYM le_infty,GSYM extreal_lt_def]
332 >> MATCH_MP_TAC let_trans
333 >> Q.EXISTS_TAC `measure p (m_space p)`
334 >> reverse (RW_TAC std_ss [])
335 >- METIS_TAC [num_not_infty,lt_infty]
336 >> METIS_TAC [MEASURE_SPACE_SUBSET_MSPACE, INCREASING, MEASURE_SPACE_INCREASING,
337 MEASURE_SPACE_MSPACE_MEASURABLE]
338QED
339
340Theorem PROB_LT_POSINF:
341 !p s. prob_space p /\ s IN events p ==> prob p s < PosInf
342Proof
343 rpt GEN_TAC
344 >> DISCH_THEN (STRIP_ASSUME_TAC o (MATCH_MP PROB_FINITE))
345 >> art [GSYM lt_infty]
346QED
347
348Theorem PROB_COMPL:
349 !p s. prob_space p /\ s IN events p ==> (prob p (p_space p DIFF s) = 1 - prob p s)
350Proof
351 METIS_TAC [MEASURE_SPACE_FINITE_DIFF, PROB_FINITE,
352 prob_space_def, events_def, prob_def, p_space_def]
353QED
354
355Theorem PROB_DIFF_SUBSET:
356 !p s t.
357 prob_space p /\ s IN events p /\ t IN events p /\ (t SUBSET s) ==>
358 (prob p (s DIFF t) = prob p s - prob p t)
359Proof
360 rpt STRIP_TAC
361 >> `prob p t < PosInf` by PROVE_TAC [PROB_LT_POSINF]
362 >> fs [prob_space_def, prob_def, events_def]
363 >> MATCH_MP_TAC MEASURE_DIFF_SUBSET >> art []
364QED
365
366Theorem PSPACE: !a b c. p_space (a, b, c) = a
367Proof
368 RW_TAC std_ss [p_space_def, m_space_def]
369QED
370
371Theorem EVENTS: !a b c. events (a, b, c) = b
372Proof
373 RW_TAC std_ss [events_def, measurable_sets_def]
374QED
375
376Theorem PROB: !a b c. prob (a, b, c) = c
377Proof
378 RW_TAC std_ss [prob_def, measure_def]
379QED
380
381Theorem EVENTS_INTER:
382 !p s t. prob_space p /\ s IN events p /\ t IN events p ==> s INTER t IN events p
383Proof
384 RW_TAC std_ss []
385 >> (MATCH_MP_TAC o REWRITE_RULE [subsets_def, space_def] o
386 Q.SPEC `(p_space p, events p)`) ALGEBRA_INTER
387 >> PROVE_TAC [PROB_SPACE, SIGMA_ALGEBRA_ALGEBRA]
388QED
389
390Theorem EVENTS_EMPTY: !p. prob_space p ==> {} IN events p
391Proof
392 RW_TAC std_ss []
393 >> (MATCH_MP_TAC o REWRITE_RULE [subsets_def, space_def] o
394 Q.SPEC `(p_space p, events p)`) ALGEBRA_EMPTY
395 >> PROVE_TAC [SIGMA_ALGEBRA_ALGEBRA, PROB_SPACE]
396QED
397
398Theorem EVENTS_SPACE: !p. prob_space p ==> (p_space p) IN events p
399Proof
400 RW_TAC std_ss []
401 >> (MATCH_MP_TAC o REWRITE_RULE [subsets_def, space_def] o
402 Q.SPEC `(p_space p, events p)`) ALGEBRA_SPACE
403 >> PROVE_TAC [SIGMA_ALGEBRA_ALGEBRA, PROB_SPACE]
404QED
405
406Theorem EVENTS_UNION:
407 !p s t. prob_space p /\ s IN events p /\ t IN events p ==> s UNION t IN events p
408Proof
409 RW_TAC std_ss []
410 >> (MATCH_MP_TAC o REWRITE_RULE [subsets_def, space_def] o
411 Q.SPEC `(p_space p, events p)`) ALGEBRA_UNION
412 >> PROVE_TAC [PROB_SPACE, SIGMA_ALGEBRA_ALGEBRA]
413QED
414
415Theorem INTER_PSPACE: !p s. prob_space p /\ s IN events p ==> (p_space p INTER s = s)
416Proof
417 RW_TAC std_ss [PROB_SPACE, SIGMA_ALGEBRA, space_def, subsets_def, subset_class_def,
418 SUBSET_DEF]
419 >> RW_TAC std_ss [Once EXTENSION, IN_INTER]
420 >> PROVE_TAC []
421QED
422
423(* `P` is usually a higher order term, `s` is a simple events, e.g. `p_space p` *)
424Theorem PROB_GSPEC:
425 !P p s. prob p {x | x IN s /\ P x} = prob p ({x | P x} INTER s)
426Proof
427 RW_TAC std_ss []
428 >> Suff `{x | x IN s /\ P x} = {x | P x} INTER s` >- METIS_TAC []
429 >> RW_TAC std_ss [Once EXTENSION, GSPECIFICATION, IN_INTER]
430 >> METIS_TAC []
431QED
432
433Theorem EVENTS_DIFF:
434 !p s t. prob_space p /\ s IN events p /\ t IN events p ==> s DIFF t IN events p
435Proof
436 RW_TAC std_ss []
437 >> (MATCH_MP_TAC o REWRITE_RULE [subsets_def, space_def] o
438 Q.SPEC `(p_space p, events p)`) ALGEBRA_DIFF
439 >> PROVE_TAC [PROB_SPACE, SIGMA_ALGEBRA_ALGEBRA]
440QED
441
442Theorem EVENTS_COMPL: !p s. prob_space p /\ s IN events p ==> (p_space p) DIFF s IN events p
443Proof
444 RW_TAC std_ss []
445 >> (MATCH_MP_TAC o REWRITE_RULE [subsets_def, space_def] o
446 Q.SPEC `(p_space p, events p)`) ALGEBRA_COMPL
447 >> PROVE_TAC [PROB_SPACE, SIGMA_ALGEBRA_ALGEBRA]
448QED
449
450Theorem EVENTS_BIGUNION :
451 !p f n. prob_space p /\ f IN (count n -> events p) ==>
452 BIGUNION (IMAGE f (count n)) IN events p
453Proof
454 RW_TAC std_ss [IN_FUNSET, IN_COUNT]
455 >> `BIGUNION (IMAGE f (count n)) =
456 BIGUNION (IMAGE (\m. (if m < n then f m else {})) UNIV)`
457 by (RW_TAC std_ss [EXTENSION,IN_BIGUNION_IMAGE, IN_COUNT, IN_UNIV] \\
458 METIS_TAC [NOT_IN_EMPTY])
459 >> POP_ORW
460 >> (MATCH_MP_TAC o REWRITE_RULE [subsets_def, space_def] o
461 Q.SPECL [`(p_space p, events p)`,`(\m. if m < n then A m else {})`])
462 SIGMA_ALGEBRA_ENUM
463 >> RW_TAC std_ss [EVENTS_SIGMA_ALGEBRA]
464 >> RW_TAC std_ss [IN_FUNSET, IN_UNIV, DISJOINT_EMPTY]
465 >> METIS_TAC [EVENTS_EMPTY]
466QED
467
468Theorem EVENTS_COUNTABLE_UNION:
469 !p c. prob_space p /\ c SUBSET events p /\ countable c ==> BIGUNION c IN events p
470Proof
471 RW_TAC std_ss []
472 >> (MATCH_MP_TAC o REWRITE_RULE [subsets_def, space_def] o
473 Q.SPEC `(p_space p, events p)`) SIGMA_ALGEBRA_COUNTABLE_UNION
474 >> RW_TAC std_ss [EVENTS_SIGMA_ALGEBRA]
475QED
476
477Theorem EVENTS_BIGUNION_ENUM :
478 !p f. prob_space p /\ f IN (univ(:num) -> events p) ==>
479 BIGUNION (IMAGE f univ(:num)) IN events p
480Proof
481 rw [IN_FUNSET]
482 >> MATCH_MP_TAC EVENTS_COUNTABLE_UNION
483 >> rw [SUBSET_DEF] >> art []
484QED
485
486Theorem PROB_ZERO_UNION:
487 !p s t. prob_space p /\ s IN events p /\ t IN events p /\ (prob p t = 0) ==>
488 (prob p (s UNION t) = prob p s)
489Proof
490 RW_TAC std_ss []
491 >> Know `t DIFF s IN events p`
492 >- (MATCH_MP_TAC EVENTS_DIFF >> RW_TAC std_ss [])
493 >> STRIP_TAC
494 >> Know `prob p (t DIFF s) = 0`
495 >- (ONCE_REWRITE_TAC [GSYM le_antisym]
496 >> reverse CONJ_TAC >- PROVE_TAC [PROB_POSITIVE]
497 >> Q.PAT_X_ASSUM `prob p t = 0` (ONCE_REWRITE_TAC o wrap o SYM)
498 >> MATCH_MP_TAC PROB_INCREASING
499 >> RW_TAC std_ss [DIFF_SUBSET])
500 >> STRIP_TAC
501 >> Suff `prob p (s UNION t) = prob p s + prob p (t DIFF s)`
502 >- RW_TAC real_ss [add_rzero]
503 >> MATCH_MP_TAC PROB_ADDITIVE
504 >> RW_TAC std_ss [DISJOINT_DEF, DIFF_DEF, EXTENSION, IN_UNION, IN_DIFF, NOT_IN_EMPTY, IN_INTER]
505 >> PROVE_TAC []
506QED
507
508Theorem PROB_INTER_ZERO :
509 !p A B. prob_space p /\ A IN events p /\ B IN events p /\ (prob p B = 0) ==>
510 (prob p (A INTER B) = 0)
511Proof
512 RW_TAC std_ss []
513 >> `(A INTER B) SUBSET B` by RW_TAC std_ss [INTER_SUBSET]
514 >> `prob p (A INTER B) <= prob p B` by FULL_SIMP_TAC std_ss [PROB_INCREASING, EVENTS_INTER]
515 >> `0 <= prob p (A INTER B)` by FULL_SIMP_TAC std_ss [PROB_POSITIVE, EVENTS_INTER]
516 >> METIS_TAC [le_antisym]
517QED
518
519Theorem PROB_ZERO_INTER :
520 !p A B. prob_space p /\ A IN events p /\ B IN events p /\ (prob p A = 0) ==>
521 (prob p (A INTER B) = 0)
522Proof
523 RW_TAC std_ss [] >> (MP_TAC o Q.SPECL [`p`, `B`, `A`]) PROB_INTER_ZERO
524 >> RW_TAC std_ss [INTER_COMM]
525QED
526
527Theorem PROB_EQ_COMPL:
528 !p s t. prob_space p /\ s IN events p /\ t IN events p /\
529 (prob p (p_space p DIFF s) = prob p (p_space p DIFF t)) ==> (prob p s = prob p t)
530Proof
531 RW_TAC std_ss []
532 >> Know `1 - prob p s = 1 - prob p t`
533 >- (POP_ASSUM MP_TAC >> RW_TAC std_ss [PROB_COMPL])
534 >> `?r1 r2. (prob p t = Normal r1) /\ (prob p s = Normal r2)`
535 by METIS_TAC [extreal_cases,PROB_FINITE]
536 >> FULL_SIMP_TAC std_ss [extreal_of_num_def,extreal_sub_def,extreal_11]
537 >> REAL_ARITH_TAC
538QED
539
540Theorem PROB_ONE_INTER:
541 !p s t. prob_space p /\ s IN events p /\ t IN events p /\ (prob p t = 1) ==>
542 (prob p (s INTER t) = prob p s)
543Proof
544 RW_TAC std_ss []
545 >> MATCH_MP_TAC PROB_EQ_COMPL
546 >> RW_TAC std_ss [EVENTS_INTER]
547 >> Know `p_space p DIFF s INTER t = (p_space p DIFF s) UNION (p_space p DIFF t)`
548 >- (RW_TAC std_ss [Once EXTENSION, IN_INTER, IN_UNION, IN_DIFF]
549 >> DECIDE_TAC)
550 >> RW_TAC std_ss [] >> POP_ASSUM (K ALL_TAC)
551 >> MATCH_MP_TAC PROB_ZERO_UNION
552 >> RW_TAC std_ss [PROB_COMPL, EVENTS_COMPL]
553 >> RW_TAC real_ss [extreal_of_num_def,extreal_sub_def]
554QED
555
556Theorem EVENTS_COUNTABLE_INTER:
557 !p c. prob_space p /\ c SUBSET events p /\ countable c /\ c <> {} ==>
558 BIGINTER c IN events p
559Proof
560 RW_TAC std_ss []
561 >> Know `BIGINTER c = p_space p DIFF (p_space p DIFF (BIGINTER c))`
562 >- (ONCE_REWRITE_TAC [EXTENSION] >> RW_TAC std_ss [IN_DIFF, LEFT_AND_OVER_OR, IN_BIGINTER]
563 >> FULL_SIMP_TAC std_ss [PROB_SPACE, SIGMA_ALGEBRA, subset_class_def,
564 subsets_def, space_def, SUBSET_DEF]
565 >> EQ_TAC
566 >- (Know `(c = {}) \/ ?x t. (c = x INSERT t) /\ ~(x IN t)` >- PROVE_TAC [SET_CASES]
567 >> RW_TAC std_ss []
568 >> PROVE_TAC [IN_INSERT])
569 >> PROVE_TAC [])
570 >> Rewr'
571 >> MATCH_MP_TAC EVENTS_COMPL
572 >> Know `p_space p DIFF BIGINTER c = BIGUNION (IMAGE (\s. p_space p DIFF s) c)`
573 >- (ONCE_REWRITE_TAC [EXTENSION] >> RW_TAC std_ss [IN_DIFF, IN_BIGUNION, IN_IMAGE, IN_BIGINTER]
574 >> EQ_TAC
575 >- (RW_TAC std_ss [] >> Q.EXISTS_TAC `p_space p DIFF P`
576 >> RW_TAC std_ss [IN_DIFF] >> Q.EXISTS_TAC `P`
577 >> RW_TAC std_ss [])
578 >> RW_TAC std_ss []
579 >- FULL_SIMP_TAC std_ss [IN_DIFF]
580 >> Q.EXISTS_TAC `s'`
581 >> FULL_SIMP_TAC std_ss [IN_DIFF])
582 >> RW_TAC std_ss [] >> POP_ASSUM (K ALL_TAC)
583 >> MATCH_MP_TAC EVENTS_COUNTABLE_UNION
584 >> Q.PAT_X_ASSUM `c SUBSET events p` MP_TAC
585 >> RW_TAC std_ss [image_countable, SUBSET_DEF, IN_IMAGE]
586 >> PROVE_TAC [EVENTS_COMPL]
587QED
588
589Theorem EVENTS_BIGINTER_FN:
590 !p A J. prob_space p /\ (IMAGE A J) SUBSET events p /\ countable J /\ J <> {} ==>
591 BIGINTER (IMAGE A J) IN events p
592Proof
593 rpt STRIP_TAC
594 >> MATCH_MP_TAC EVENTS_COUNTABLE_INTER >> art []
595 >> CONJ_TAC
596 >- (MATCH_MP_TAC image_countable >> art [])
597 >> RW_TAC std_ss [Once EXTENSION, IN_IMAGE, NOT_IN_EMPTY]
598 >> fs [GSYM MEMBER_NOT_EMPTY]
599 >> Q.EXISTS_TAC `x` >> art []
600QED
601
602Theorem ABS_PROB: !p s. prob_space p /\ s IN events p ==> (abs (prob p s) = prob p s)
603Proof
604 RW_TAC std_ss [extreal_abs_def]
605 >> PROVE_TAC [PROB_POSITIVE,abs_refl]
606QED
607
608Theorem PROB_COMPL_LE1:
609 !p s r. prob_space p /\ s IN events p ==>
610 (prob p (p_space p DIFF s) <= r <=> 1 - r <= prob p s)
611Proof
612 RW_TAC std_ss [PROB_COMPL]
613 >> METIS_TAC [sub_le_switch2,PROB_FINITE,num_not_infty]
614QED
615
616Theorem PROB_LE_1: !p s. prob_space p /\ s IN events p ==> prob p s <= 1
617Proof
618 RW_TAC std_ss []
619 >> Suff `0 <= 1 - prob p s` >- METIS_TAC [sub_zero_le,PROB_FINITE]
620 >> RW_TAC std_ss [GSYM PROB_COMPL]
621 >> RW_TAC std_ss [EVENTS_COMPL, PROB_POSITIVE]
622QED
623
624Theorem PROB_EQ_BIGUNION_IMAGE :
625 !p f g. prob_space p /\ f IN (UNIV -> events p) /\ g IN (UNIV -> events p) /\
626 (!m n. m <> n ==> DISJOINT (f m) (f n)) /\
627 (!m n. m <> n ==> DISJOINT (g m) (g n)) /\
628 (!n :num. prob p (f n) = prob p (g n)) ==>
629 (prob p (BIGUNION (IMAGE f UNIV)) = prob p (BIGUNION (IMAGE g UNIV)))
630Proof
631 RW_TAC std_ss []
632 >> Know `prob p (BIGUNION (IMAGE f UNIV)) = suminf (prob p o f)`
633 >- PROVE_TAC [PROB_COUNTABLY_ADDITIVE]
634 >> Know `prob p (BIGUNION (IMAGE g UNIV)) = suminf (prob p o g)`
635 >- PROVE_TAC [PROB_COUNTABLY_ADDITIVE]
636 >> METIS_TAC [o_DEF]
637QED
638
639Theorem ABS_1_MINUS_PROB:
640 !p s. prob_space p /\ s IN events p /\ ~(prob p s = 0) ==> abs (1 - prob p s) < 1
641Proof
642 RW_TAC std_ss []
643 >> Know `0 <= prob p s` >- PROVE_TAC [PROB_POSITIVE]
644 >> Know `prob p s <= 1` >- PROVE_TAC [PROB_LE_1]
645 >> `?r. prob p s = Normal r` by METIS_TAC [PROB_FINITE,extreal_cases]
646 >> FULL_SIMP_TAC std_ss [extreal_of_num_def,extreal_sub_def,extreal_abs_def,
647 extreal_lt_eq,extreal_le_def,extreal_11]
648 >> RW_TAC std_ss [abs]
649 >> rpt (POP_ASSUM MP_TAC)
650 >> REAL_ARITH_TAC
651QED
652
653Theorem PROB_INCREASING_UNION:
654 !p f. prob_space p /\ f IN (UNIV -> events p) /\ (!n. f n SUBSET f (SUC n)) ==>
655 (sup (IMAGE (prob p o f) UNIV) = prob p (BIGUNION (IMAGE f UNIV)))
656Proof
657 RW_TAC std_ss [prob_space_def, events_def, prob_def, MONOTONE_CONVERGENCE]
658QED
659
660Theorem PROB_SUBADDITIVE:
661 !p t u. prob_space p /\ t IN events p /\ u IN events p ==>
662 prob p (t UNION u) <= prob p t + prob p u
663Proof
664 RW_TAC std_ss []
665 >> Know `t UNION u = t UNION (u DIFF t)`
666 >- (SET_EQ_TAC
667 >> RW_TAC std_ss [IN_UNION, IN_DIFF]
668 >> PROVE_TAC [])
669 >> Rewr
670 >> Know `u DIFF t IN events p`
671 >- PROVE_TAC [EVENTS_DIFF]
672 >> STRIP_TAC
673 >> Know `prob p (t UNION (u DIFF t)) = prob p t + prob p (u DIFF t)`
674 >- (MATCH_MP_TAC PROB_ADDITIVE
675 >> RW_TAC std_ss [DISJOINT_ALT, IN_DIFF])
676 >> Rewr
677 >> MATCH_MP_TAC le_ladd_imp
678 >> MATCH_MP_TAC PROB_INCREASING
679 >> RW_TAC std_ss [DIFF_DEF, SUBSET_DEF, GSPECIFICATION]
680QED
681
682Theorem PROB_COUNTABLY_SUBADDITIVE :
683 !p f. prob_space p /\ (IMAGE f UNIV) SUBSET events p ==>
684 prob p (BIGUNION (IMAGE f UNIV)) <= suminf (prob p o f)
685Proof
686 RW_TAC std_ss [SUBSET_DEF, IN_IMAGE, IN_UNIV]
687 >> Know `!n. 0 <= (prob p o f) n`
688 >- (RW_TAC std_ss [o_DEF] \\
689 POP_ASSUM (ASSUME_TAC o (Q.SPEC `(f :num -> 'a -> bool) n`)) \\
690 MATCH_MP_TAC PROB_POSITIVE >> art [] \\
691 POP_ASSUM MATCH_MP_TAC \\
692 Q.EXISTS_TAC `n` >> art [])
693 >> DISCH_THEN (MP_TAC o (MATCH_MP ext_suminf_def)) >> Rewr'
694 >> Suff `prob p (BIGUNION (IMAGE f UNIV)) =
695 sup (IMAGE (prob p o (\n. BIGUNION (IMAGE f (count n)))) UNIV)`
696 >- (RW_TAC std_ss []
697 >> MATCH_MP_TAC sup_mono
698 >> RW_TAC std_ss [o_DEF]
699 >> Induct_on `n`
700 >- RW_TAC std_ss [COUNT_ZERO, IMAGE_EMPTY, BIGUNION_EMPTY, PROB_EMPTY,
701 EXTREAL_SUM_IMAGE_EMPTY, le_refl]
702 >> RW_TAC std_ss [COUNT_SUC, IMAGE_INSERT, BIGUNION_INSERT]
703 >> (MP_TAC o Q.SPEC `n` o REWRITE_RULE [FINITE_COUNT,o_DEF] o
704 Q.SPECL [`prob p o f`,`count n`] o INST_TYPE [alpha |-> ``:num``])
705 EXTREAL_SUM_IMAGE_PROPERTY
706 >> `(!x. x IN n INSERT count n ==> prob p (f x) <> NegInf)` by METIS_TAC [PROB_FINITE]
707 >> RW_TAC std_ss [COUNT_SUC]
708 >> `~(n < n)` by RW_TAC real_ss []
709 >> `count n DELETE n = count n` by METIS_TAC [DELETE_NON_ELEMENT,IN_COUNT]
710 >> RW_TAC std_ss []
711 >> `prob p (f n UNION BIGUNION (IMAGE f (count n))) <=
712 prob p (f n) + prob p (BIGUNION (IMAGE f (count n)))`
713 by (MATCH_MP_TAC PROB_SUBADDITIVE
714 >> RW_TAC std_ss []
715 >- METIS_TAC []
716 >> MATCH_MP_TAC EVENTS_COUNTABLE_UNION
717 >> RW_TAC std_ss [SUBSET_DEF, IN_IMAGE, IN_COUNT, image_countable,
718 COUNTABLE_COUNT]
719 >> METIS_TAC [])
720 >> METIS_TAC [le_ladd_imp, le_trans])
721 >> (MP_TAC o Q.SPECL [`p`,`(\n. BIGUNION (IMAGE f (count n)))`]) PROB_INCREASING_UNION
722 >> RW_TAC std_ss []
723 >> `BIGUNION (IMAGE (\n. BIGUNION (IMAGE f (count n))) UNIV) = BIGUNION (IMAGE f UNIV)`
724 by (RW_TAC std_ss [EXTENSION,IN_BIGUNION_IMAGE,IN_UNIV,IN_COUNT]
725 >> METIS_TAC [DECIDE ``x < SUC x``])
726 >> FULL_SIMP_TAC std_ss []
727 >> POP_ASSUM (K ALL_TAC)
728 >> POP_ASSUM (MATCH_MP_TAC o GSYM)
729 >> RW_TAC std_ss [IN_FUNSET,IN_UNIV]
730 >- (MATCH_MP_TAC EVENTS_COUNTABLE_UNION
731 >> RW_TAC std_ss [SUBSET_DEF, IN_IMAGE, IN_COUNT, image_countable, COUNTABLE_COUNT]
732 >> METIS_TAC [])
733 >> RW_TAC std_ss [SUBSET_DEF, IN_BIGUNION_IMAGE, IN_COUNT]
734 >> METIS_TAC [DECIDE ``n < SUC n``, LESS_TRANS]
735QED
736
737Theorem PROB_COUNTABLY_ZERO :
738 !p c. prob_space p /\ countable c /\ c SUBSET events p /\
739 (!x. x IN c ==> (prob p x = 0)) ==> (prob p (BIGUNION c) = 0)
740Proof
741 RW_TAC std_ss [COUNTABLE_ENUM]
742 >- RW_TAC std_ss [BIGUNION_EMPTY, PROB_EMPTY]
743 >> Know `(!n. prob p (f n) = 0) /\ (!n. f n IN events p)`
744 >- (FULL_SIMP_TAC std_ss [IN_IMAGE, IN_UNIV, SUBSET_DEF] \\
745 PROVE_TAC [])
746 >> NTAC 2 (POP_ASSUM K_TAC)
747 >> STRIP_TAC
748 >> ONCE_REWRITE_TAC [GSYM le_antisym]
749 >> reverse CONJ_TAC
750 >- (MATCH_MP_TAC PROB_POSITIVE \\
751 RW_TAC std_ss [] \\
752 MATCH_MP_TAC EVENTS_COUNTABLE_UNION \\
753 RW_TAC std_ss [COUNTABLE_IMAGE_NUM, SUBSET_DEF, IN_IMAGE, IN_UNIV] \\
754 RW_TAC std_ss [])
755 >> Know `!n. 0 <= (prob p o f) n`
756 >- RW_TAC std_ss [o_DEF, le_refl] >> DISCH_TAC
757 >> Know `suminf (prob p o f) = 0`
758 >- RW_TAC std_ss [ext_suminf_def, o_DEF, EXTREAL_SUM_IMAGE_ZERO, FINITE_COUNT,
759 sup_const_over_set, UNIV_NOT_EMPTY]
760 >> RW_TAC std_ss []
761 >> POP_ASSUM (REWRITE_TAC o wrap o SYM)
762 >> MATCH_MP_TAC PROB_COUNTABLY_SUBADDITIVE
763 >> RW_TAC std_ss [SUBSET_DEF, IN_IMAGE, IN_UNIV]
764 >> RW_TAC std_ss []
765QED
766
767(* This theorem is more general than measureTheory.FINITE_ADDITIVE:
768
769 `f :'b -> 'a -> bool` has an finite index set of type ('b set)
770 *)
771Theorem PROB_FINITE_ADDITIVE :
772 !p s f t. prob_space p /\ FINITE s /\ (!x. x IN s ==> f x IN events p) /\
773 (!a b. (a :'b) IN s /\ b IN s /\ a <> b ==> DISJOINT (f a) (f b)) /\
774 (t = BIGUNION (IMAGE f s)) ==> (prob p t = SIGMA (prob p o f) s)
775Proof
776 Suff `!s. FINITE (s:'b -> bool) ==>
777 ((\s. !p f t. prob_space p /\ (!x. x IN s ==> f x IN events p) /\
778 (!a b. a IN s /\ b IN s /\ a <> b ==> DISJOINT (f a) (f b)) /\
779 (t = BIGUNION (IMAGE f s)) ==> (prob p t = SIGMA (prob p o f) s)) s)`
780 >- rw []
781 >> MATCH_MP_TAC FINITE_INDUCT >> RW_TAC std_ss [IMAGE_EMPTY]
782 >- RW_TAC std_ss [EXTREAL_SUM_IMAGE_EMPTY, BIGUNION_EMPTY, PROB_EMPTY]
783 >> Know `SIGMA (prob p o f) ((e:'b) INSERT s) =
784 (prob p o f) e + SIGMA (prob p o f) (s DELETE e)`
785 >- (irule EXTREAL_SUM_IMAGE_PROPERTY >> art [] \\
786 DISJ1_TAC >> GEN_TAC >> DISCH_TAC \\
787 SIMP_TAC std_ss [o_DEF] >> METIS_TAC [PROB_FINITE])
788 >> `s DELETE (e:'b) = s` by FULL_SIMP_TAC std_ss [DELETE_NON_ELEMENT]
789 >> RW_TAC std_ss [IMAGE_INSERT, BIGUNION_INSERT]
790 >> Know `DISJOINT (f e) (BIGUNION (IMAGE f s))`
791 >- (RW_TAC set_ss [DISJOINT_BIGUNION, IN_IMAGE] \\
792 `e IN e INSERT s` by PROVE_TAC [IN_INSERT] \\
793 `x IN e INSERT s` by PROVE_TAC [IN_INSERT] \\
794 `e <> x` by METIS_TAC [] \\
795 FULL_SIMP_TAC std_ss []) >> DISCH_TAC
796 >> `(f e) IN events p` by PROVE_TAC [IN_INSERT]
797 >> `BIGUNION (IMAGE f s) IN events p`
798 by (MATCH_MP_TAC EVENTS_COUNTABLE_UNION >> RW_TAC std_ss []
799 >- (RW_TAC std_ss [SUBSET_DEF,IN_IMAGE] >> METIS_TAC [IN_INSERT])
800 >> MATCH_MP_TAC image_countable >> RW_TAC std_ss [finite_countable])
801 >> `(prob p (f e UNION BIGUNION (IMAGE f s))) = prob p (f e) + prob p (BIGUNION (IMAGE f s))`
802 by (MATCH_MP_TAC PROB_ADDITIVE >> FULL_SIMP_TAC std_ss [])
803 >> POP_ORW
804 >> Suff `prob p (BIGUNION (IMAGE f s)) = SIGMA (prob p o f) s` >- rw []
805 >> FIRST_X_ASSUM MATCH_MP_TAC >> rw [IN_INSERT]
806QED
807
808Theorem PROB_EXTREAL_SUM_IMAGE:
809 !p s. prob_space p /\ s IN events p /\ (!x. x IN s ==> {x} IN events p) /\ FINITE s ==>
810 (prob p s = SIGMA (\x. prob p {x}) s)
811Proof
812 Suff `!s. FINITE s ==>
813 (\s. !p. prob_space p /\ s IN events p /\ (!x. x IN s ==> {x} IN events p) ==>
814 (prob p s = SIGMA (\x. prob p {x}) s)) s`
815 >- METIS_TAC []
816 >> MATCH_MP_TAC FINITE_INDUCT
817 >> RW_TAC std_ss [EXTREAL_SUM_IMAGE_EMPTY,PROB_EMPTY,IN_INSERT]
818 >> (MP_TAC o Q.SPEC `e` o UNDISCH o Q.SPECL [`(\x. prob p {x})`,`s`]) EXTREAL_SUM_IMAGE_PROPERTY
819 >> `!x. x IN e INSERT s ==> (\x. prob p {x}) x <> NegInf` by METIS_TAC [PROB_FINITE,IN_INSERT]
820 >> RW_TAC std_ss []
821 >> Q.PAT_X_ASSUM `!p. prob_space p /\ s IN events p /\
822 (!x. x IN s ==> {x} IN events p) ==>
823 (prob p s = SIGMA (\x. prob p {x}) s)` (MP_TAC o GSYM o Q.SPEC `p`)
824 >> RW_TAC std_ss []
825 >> `s IN events p`
826 by (`s = (e INSERT s) DIFF {e}`
827 by (RW_TAC std_ss [EXTENSION, IN_INSERT, IN_DIFF, IN_SING] \\
828 METIS_TAC [GSYM DELETE_NON_ELEMENT])
829 >> POP_ORW
830 >> FULL_SIMP_TAC std_ss [prob_space_def, measure_space_def, sigma_algebra_def, events_def]
831 >> METIS_TAC [space_def, subsets_def, ALGEBRA_DIFF])
832 >> FULL_SIMP_TAC std_ss [DELETE_NON_ELEMENT]
833 >> MATCH_MP_TAC PROB_ADDITIVE
834 >> RW_TAC std_ss [IN_DISJOINT, IN_SING, Once INSERT_SING_UNION]
835 >> FULL_SIMP_TAC std_ss [GSYM DELETE_NON_ELEMENT]
836QED
837
838Theorem PROB_EQUIPROBABLE_FINITE_UNIONS:
839 !p s. prob_space p /\ FINITE s /\ s IN events p /\ (!x. x IN s ==> {x} IN events p) /\
840 (!x y. x IN s /\ y IN s ==> (prob p {x} = prob p {y})) ==>
841 (prob p s = & (CARD s) * prob p {CHOICE s})
842Proof
843 RW_TAC std_ss []
844 >> Cases_on `s = {}`
845 >- RW_TAC real_ss [PROB_EMPTY, CARD_EMPTY,mul_lzero]
846 >> `prob p s = SIGMA (\x. prob p {x}) s`
847 by METIS_TAC [PROB_EXTREAL_SUM_IMAGE]
848 >> POP_ORW
849 >> `prob p {CHOICE s} = (\x. prob p {x}) (CHOICE s)` by RW_TAC std_ss []
850 >> POP_ORW
851 >> (MATCH_MP_TAC o UNDISCH o Q.SPEC `s`) EXTREAL_SUM_IMAGE_FINITE_SAME
852 >> RW_TAC std_ss [CHOICE_DEF]
853 >> METIS_TAC [PROB_FINITE]
854QED
855
856Theorem PROB_EXTREAL_SUM_IMAGE_FN:
857 !p f e s. prob_space p /\ e IN events p /\
858 (!x. x IN s ==> e INTER f x IN events p) /\ FINITE s /\
859 (!x y. x IN s /\ y IN s /\ (~(x=y)) ==> DISJOINT (f x) (f y)) /\
860 (BIGUNION (IMAGE f s) INTER p_space p = p_space p) ==>
861 (prob p e = SIGMA (\x. prob p (e INTER f x)) s)
862Proof
863 Suff `!(s :'b -> bool). FINITE s ==>
864 (\s. !(p :('a -> bool) # (('a -> bool) -> bool) # (('a -> bool) -> extreal))
865 (f :'b -> 'a -> bool) (e :'a -> bool). prob_space p /\ e IN events p /\
866 (!x. x IN s ==> e INTER f x IN events p) /\
867 (!x y. x IN s /\ y IN s /\ (~(x=y)) ==> DISJOINT (f x) (f y)) /\
868 (BIGUNION (IMAGE f s) INTER p_space p = p_space p) ==>
869 (prob p e = SIGMA (\x. prob p (e INTER f x)) s)) s`
870 >- METIS_TAC []
871 >> MATCH_MP_TAC FINITE_INDUCT
872 >> RW_TAC std_ss [EXTREAL_SUM_IMAGE_EMPTY, PROB_EMPTY, DELETE_NON_ELEMENT, IN_INSERT,
873 IMAGE_EMPTY, BIGUNION_EMPTY, INTER_EMPTY]
874 >- METIS_TAC [PROB_UNIV, PROB_EMPTY, REAL_10,extreal_of_num_def,extreal_11]
875 >> (MP_TAC o Q.SPEC `e` o UNDISCH o Q.SPECL [`(\x. prob p (e' INTER f x))`,`s`] o
876 INST_TYPE [alpha |-> beta]) EXTREAL_SUM_IMAGE_PROPERTY
877 >> `!x. x IN e INSERT s ==> (\x. prob p (e' INTER f x)) x <> NegInf`
878 by METIS_TAC [PROB_FINITE,IN_INSERT]
879 >> RW_TAC std_ss []
880 >> `prob p e' =
881 prob p (e' INTER f e) +
882 prob p (e' DIFF f e)`
883 by (MATCH_MP_TAC PROB_ADDITIVE
884 >> RW_TAC std_ss []
885 >| [`e' DIFF f e = e' DIFF (e' INTER f e)`
886 by (RW_TAC std_ss [EXTENSION, IN_DIFF, IN_INTER] >> DECIDE_TAC)
887 >> POP_ORW
888 >> METIS_TAC [EVENTS_DIFF],
889 FULL_SIMP_TAC std_ss [IN_DISJOINT, IN_INTER, IN_DIFF] >> METIS_TAC [],
890 RW_TAC std_ss [Once EXTENSION, IN_INTER, IN_UNION, IN_DIFF] >> DECIDE_TAC])
891 >> POP_ORW
892 >> RW_TAC std_ss [EXTREAL_EQ_LADD,PROB_FINITE]
893 >> (MP_TAC o Q.ISPEC `(s :'b -> bool)`) SET_CASES
894 >> RW_TAC std_ss []
895 >- (RW_TAC std_ss [EXTREAL_SUM_IMAGE_EMPTY]
896 >> `IMAGE f {e} = {f e}`
897 by RW_TAC std_ss [EXTENSION, IN_IMAGE, IN_SING]
898 >> FULL_SIMP_TAC std_ss [BIGUNION_SING, DIFF_UNIV, PROB_EMPTY]
899 >> `e' DIFF f e = {}`
900 by (RW_TAC std_ss [Once EXTENSION, NOT_IN_EMPTY, IN_DIFF]
901 >> METIS_TAC [SUBSET_DEF, MEASURABLE_SETS_SUBSET_SPACE, prob_space_def,
902 events_def, p_space_def, IN_INTER])
903 >> RW_TAC std_ss [PROB_EMPTY])
904 >> Q.PAT_X_ASSUM `!p f e.
905 prob_space p /\ e IN events p /\
906 (!x. x IN s ==> e INTER f x IN events p) /\
907 (!x y. x IN s /\ y IN s /\ ~(x = y) ==> DISJOINT (f x) (f y)) /\
908 (BIGUNION (IMAGE f s) INTER p_space p = p_space p) ==>
909 (prob p e = SIGMA (\x. prob p (e INTER f x)) s)`
910 (MP_TAC o Q.SPECL [`p`,`(\y. if y = x then f x UNION f e else f y)`,`e' DIFF f e`])
911 >> ASM_SIMP_TAC std_ss []
912 >> `e' DIFF f e IN events p`
913 by (`e' DIFF f e = e' DIFF (e' INTER f e)`
914 by (RW_TAC std_ss [EXTENSION, IN_DIFF, IN_INTER] >> DECIDE_TAC)
915 >> POP_ORW
916 >> METIS_TAC [EVENTS_DIFF])
917 >> ASM_SIMP_TAC std_ss []
918 >> `(!x'.
919 x' IN x INSERT t ==>
920 (e' DIFF f e) INTER (if x' = x then f x UNION f e else f x') IN
921 events p)`
922 by (RW_TAC std_ss []
923 >- (`(e' DIFF f e) INTER (f x UNION f e) =
924 e' INTER f x`
925 by (ONCE_REWRITE_TAC [EXTENSION] >> RW_TAC std_ss [IN_INTER, IN_DIFF, IN_UNION]
926 >> FULL_SIMP_TAC std_ss [IN_DISJOINT, GSYM DELETE_NON_ELEMENT]
927 >> METIS_TAC [])
928 >> RW_TAC std_ss [])
929 >> `(e' DIFF f e) INTER f x' =
930 (e' INTER f x') DIFF (e' INTER f e)`
931 by (ONCE_REWRITE_TAC [EXTENSION] >> RW_TAC std_ss [IN_INTER, IN_DIFF]
932 >> FULL_SIMP_TAC std_ss [IN_DISJOINT, GSYM DELETE_NON_ELEMENT]
933 >> METIS_TAC [])
934 >> METIS_TAC [EVENTS_DIFF])
935 >> ASM_SIMP_TAC std_ss []
936 >> `(!x' y.
937 x' IN x INSERT t /\ y IN x INSERT t /\ ~(x' = y) ==>
938 DISJOINT (if x' = x then f x UNION f e else f x')
939 (if y = x then f x UNION f e else f y))`
940 by (RW_TAC std_ss [IN_DISJOINT, IN_UNION]
941 >> FULL_SIMP_TAC std_ss [IN_DISJOINT, GSYM DELETE_NON_ELEMENT]
942 >> METIS_TAC [])
943 >> ASM_SIMP_TAC std_ss []
944 >> `(BIGUNION
945 (IMAGE (\y. (if y = x then f x UNION f e else f y)) (x INSERT t)) INTER p_space p = p_space p)`
946 by (FULL_SIMP_TAC std_ss [IMAGE_INSERT, BIGUNION_INSERT]
947 >> `IMAGE (\y. (if y = x then f x UNION f e else f y)) t =
948 IMAGE f t`
949 by (ONCE_REWRITE_TAC [EXTENSION] >> RW_TAC std_ss [IN_IMAGE]
950 >> EQ_TAC
951 >- (RW_TAC std_ss [] >> METIS_TAC [])
952 >> RW_TAC std_ss [] >> METIS_TAC [])
953 >> POP_ORW
954 >> METIS_TAC [UNION_COMM, UNION_ASSOC])
955 >> ASM_SIMP_TAC std_ss []
956 >> STRIP_TAC >> POP_ASSUM (K ALL_TAC)
957 >> FULL_SIMP_TAC std_ss [FINITE_INSERT]
958 >> (MP_TAC o Q.SPEC `x` o UNDISCH o Q.SPECL [`(\x. prob p (e' INTER f x))`,`t`] o
959 INST_TYPE [alpha |-> beta]) EXTREAL_SUM_IMAGE_PROPERTY
960 >> `!x'. x' IN x INSERT t ==> (\x. prob p (e' INTER f x)) x' <> NegInf`
961 by METIS_TAC [PROB_FINITE,IN_INSERT]
962 >> RW_TAC std_ss []
963 >> (MP_TAC o Q.SPEC `x` o UNDISCH o
964 Q.SPECL [`(\x'. prob p ((e' DIFF f e) INTER if x' = x then f x UNION f e else f x'))`,`t`] o
965 INST_TYPE [alpha |-> beta]) EXTREAL_SUM_IMAGE_PROPERTY
966 >> `!x'. x' IN x INSERT t ==>
967 (\x'. prob p ((e' DIFF f e) INTER
968 if x' = x then f x UNION f e else f x')) x' <> NegInf`
969 by METIS_TAC [PROB_FINITE,IN_INSERT]
970 >> RW_TAC std_ss []
971 >> FULL_SIMP_TAC std_ss [DELETE_NON_ELEMENT]
972 >> FULL_SIMP_TAC std_ss [GSYM DELETE_NON_ELEMENT]
973 >> `(e' DIFF f e) INTER (f x UNION f e) = e' INTER f x`
974 by (ONCE_REWRITE_TAC [EXTENSION] >> RW_TAC std_ss [IN_INTER, IN_DIFF, IN_UNION]
975 >> FULL_SIMP_TAC std_ss [IN_DISJOINT, GSYM DELETE_NON_ELEMENT, IN_INSERT]
976 >> METIS_TAC [])
977 >> FULL_SIMP_TAC std_ss [EXTREAL_EQ_LADD,PROB_FINITE,IN_INSERT]
978 >> (MP_TAC o Q.SPEC `(\x. prob p (e' INTER f x))` o
979 UNDISCH o Q.ISPEC `(t :'b -> bool)`) EXTREAL_SUM_IMAGE_IN_IF
980 >> (MP_TAC o Q.SPEC `(\x'. prob p ((e' DIFF f e) INTER
981 if x' = x then f x UNION f e else f x'))` o
982 UNDISCH o Q.ISPEC `(t :'b -> bool)`) EXTREAL_SUM_IMAGE_IN_IF
983 >> RW_TAC std_ss []
984 >> Suff `(\x'.
985 (if x' IN t then
986 (\x'.
987 prob p
988 ((e' DIFF f e) INTER
989 (if x' = x then f x UNION f e else f x'))) x'
990 else
991 0)) =
992 (\x. (if x IN t then (\x. prob p (e' INTER f x)) x else 0))`
993 >- RW_TAC std_ss []
994 >> RW_TAC std_ss [FUN_EQ_THM] >> RW_TAC std_ss []
995 >> Suff `(e' DIFF f e) INTER f x' = e' INTER f x'`
996 >- RW_TAC std_ss []
997 >> RW_TAC std_ss [Once EXTENSION, IN_INTER, IN_DIFF]
998 >> FULL_SIMP_TAC std_ss [IN_DISJOINT, IN_INSERT]
999 >> METIS_TAC []
1000QED
1001
1002Theorem PROB_EXTREAL_SUM_IMAGE_SPACE:
1003 !p. prob_space p /\ FINITE (p_space p) /\ (!x. x IN p_space p ==> {x} IN events p) ==>
1004 (SIGMA (\x. prob p {x}) (p_space p) = 1)
1005Proof
1006 RW_TAC std_ss []
1007 >> (MP_TAC o GSYM o Q.SPECL [`p`,`p_space p`]) PROB_EXTREAL_SUM_IMAGE
1008 >> RW_TAC std_ss [EVENTS_SPACE,PROB_UNIV]
1009QED
1010
1011Theorem PROB_DISCRETE_EVENTS:
1012 !p. prob_space p /\ FINITE (p_space p) /\ (!x. x IN p_space p ==> {x} IN events p) ==>
1013 !s. s SUBSET p_space p ==> s IN events p
1014Proof
1015 RW_TAC std_ss []
1016 >> `s = BIGUNION ({{x} | x IN s})`
1017 by (RW_TAC std_ss [EXTENSION,IN_BIGUNION,GSPECIFICATION,IN_SING]
1018 >> METIS_TAC [IN_SING])
1019 >> POP_ORW
1020 >> `{{x} | x IN s} SUBSET events p`
1021 by (RW_TAC std_ss [SUBSET_DEF,GSPECIFICATION] >> METIS_TAC [SUBSET_DEF])
1022 >> `FINITE {{x} | x IN s}`
1023 by (Suff `{{x} | x IN s} = IMAGE (\x. {x}) s` >- METIS_TAC [IMAGE_FINITE,SUBSET_FINITE]
1024 >> RW_TAC std_ss [EXTENSION,GSPECIFICATION,IN_IMAGE])
1025 >> METIS_TAC [EVENTS_COUNTABLE_UNION,finite_countable]
1026QED
1027
1028Theorem PROB_DISCRETE_EVENTS_COUNTABLE:
1029 !p. prob_space p /\ countable (p_space p) /\ (!x. x IN p_space p ==> {x} IN events p) ==>
1030 !s. s SUBSET p_space p ==> s IN events p
1031Proof
1032 RW_TAC std_ss []
1033 >> `s = BIGUNION ({{x} | x IN s})`
1034 by (RW_TAC std_ss [EXTENSION,IN_BIGUNION,GSPECIFICATION,IN_SING]
1035 >> METIS_TAC [IN_SING])
1036 >> POP_ORW
1037 >> `{{x} | x IN s} SUBSET events p`
1038 by (RW_TAC std_ss [SUBSET_DEF,GSPECIFICATION] >> METIS_TAC [SUBSET_DEF])
1039 >> `countable {{x} | x IN s}`
1040 by (Suff `{{x} | x IN s} = IMAGE (\x. {x}) s`
1041 >- METIS_TAC [image_countable, COUNTABLE_SUBSET]
1042 >> RW_TAC std_ss [EXTENSION,GSPECIFICATION,IN_IMAGE])
1043 >> METIS_TAC [EVENTS_COUNTABLE_UNION]
1044QED
1045
1046Theorem prob_normal:
1047 !p. prob_space p ==>
1048 !x. x IN events p ==> ?r. prob p x = Normal r /\ 0 <= r /\ r <= 1
1049Proof
1050 rpt strip_tac
1051 \\ imp_res_tac PROB_LE_1
1052 \\ imp_res_tac PROB_POSITIVE
1053 \\ qexists_tac`real (prob p x)`
1054 \\ dep_rewrite.DEP_REWRITE_TAC[normal_real]
1055 \\ conj_asm1_tac >- (
1056 rpt strip_tac \\ fs[le_infty] )
1057 \\ Cases_on`prob p x` \\ fs[]
1058 \\ metis_tac[extreal_of_num_def, extreal_le_eq]
1059QED
1060
1061Theorem prob_on_finite_set:
1062 !p. FINITE (m_space p) /\ measurable_sets p = POW (m_space p) ==>
1063 (prob_space p <=>
1064 positive p /\ prob p (p_space p) = 1 /\ additive p)
1065Proof
1066 ntac 2 strip_tac
1067 \\ simp[prob_space_def]
1068 \\ simp[p_space_def, prob_def]
1069 \\ simp[measure_space_def]
1070 \\ Cases_on`positive p` \\ simp[]
1071 \\ Cases_on`measure p (m_space p) = 1` \\ simp[]
1072 \\ eq_tac \\ strip_tac
1073 >- (
1074 `measure_space p` by simp[measure_space_def]
1075 \\ imp_res_tac MEASURE_SPACE_EMPTY_MEASURABLE
1076 \\ imp_res_tac COUNTABLY_ADDITIVE_FINITE_ADDITIVE
1077 \\ fs[finite_additive_def, additive_def]
1078 \\ rpt strip_tac
1079 \\ first_x_assum(qspecl_then[`(0n =+ s) ((1 =+ t) (K {}))`,`2`]mp_tac)
1080 \\ simp[count_EQN]
1081 \\ simp[DECIDE``n < 2n <=> (n = 0) \/ (n = 1)``]
1082 \\ dsimp[combinTheory.APPLY_UPDATE_THM]
1083 \\ fs[events_def, DISJOINT_SYM, UNION_COMM]
1084 \\ ‘measure p s <> PosInf /\ measure p t <> PosInf’
1085 by (
1086 conj_tac \\ irule MEASURE_SPACE_FINITE_MEASURE
1087 \\ simp[]
1088 \\ simp[measure_space_def] )
1089 \\ dep_rewrite.DEP_REWRITE_TAC[extrealTheory.EXTREAL_SUM_IMAGE_INSERT]
1090 \\ simp[combinTheory.APPLY_UPDATE_THM]
1091 \\ dep_rewrite.DEP_REWRITE_TAC[DELETE_NON_ELEMENT |> SPEC_ALL |> EQ_IMP_RULE |> #1]
1092 \\ simp[]
1093 \\ dep_rewrite.DEP_REWRITE_TAC[extrealTheory.EXTREAL_SUM_IMAGE_INSERT]
1094 \\ simp[combinTheory.APPLY_UPDATE_THM]
1095 \\ simp[extrealTheory.EXTREAL_SUM_IMAGE_EMPTY]
1096 \\ reverse conj_asm1_tac
1097 >- ( simp[] \\ simp[extrealTheory.add_comm] )
1098 \\ disj1_tac
1099 \\ rw[]
1100 \\ dep_rewrite.DEP_REWRITE_TAC[MEASURE_EMPTY]
1101 \\ simp[measure_space_def] )
1102 \\ reverse conj_asm1_tac
1103 >- (
1104 imp_res_tac finite_additivity_sufficient_for_finite_spaces2
1105 \\ fs[measure_space_def] )
1106 \\ simp[sigma_algebraTheory.SIGMA_ALGEBRA]
1107 \\ conj_asm1_tac >- simp[sigma_algebraTheory.subset_class_POW]
1108 \\ simp[IN_POW]
1109 \\ simp[SUBSET_DEF, PULL_EXISTS]
1110 \\ simp[IN_POW, SUBSET_DEF]
1111 \\ metis_tac[]
1112QED
1113
1114(* NOTE: This is one of the rare theorems having ‘prob_space p’ at the conclusion.
1115 It's most common uniform distribution over discrete sample space.
1116 *)
1117Theorem prob_space_on_finite_set :
1118 !p. FINITE (p_space p) /\ p_space p <> {} /\ events p = POW (p_space p) /\
1119 (!s. s IN events p ==> prob p s = &CARD s / &CARD (p_space p)) ==>
1120 prob_space p
1121Proof
1122 rw [p_space_def, events_def, prob_def]
1123 >> ‘CARD (m_space p) <> 0’ by rw [CARD_EQ_0]
1124 >> rw [prob_on_finite_set]
1125 >| [ (* goal 1 (of 3) *)
1126 rw [positive_def]
1127 >- (MATCH_MP_TAC zero_div >> rw [extreal_of_num_def]) \\
1128 qabbrev_tac ‘N = CARD (m_space p)’ \\
1129 ‘&N = Normal (&N)’ by rw [extreal_of_num_def] >> POP_ORW \\
1130 MATCH_MP_TAC le_div \\
1131 rw [extreal_lt_eq, extreal_of_num_def],
1132 (* goal 2 (of 3) *)
1133 rw [prob_def, p_space_def] \\
1134 ‘m_space p IN measurable_sets p’ by rw [IN_POW] \\
1135 rw [] \\
1136 MATCH_MP_TAC div_refl >> rw [extreal_of_num_def],
1137 (* goal 3 (of 3) *)
1138 rw [additive_def] \\
1139 Know ‘CARD (s UNION t) = CARD s + CARD t’
1140 >- (MATCH_MP_TAC CARD_UNION_DISJOINT >> fs [IN_POW] \\
1141 CONJ_TAC \\ (* 2 subgoals, same tactics *)
1142 MATCH_MP_TAC FINITE_SUBSET \\
1143 Q.EXISTS_TAC ‘m_space p’ >> art []) >> Rewr' \\
1144 Know ‘&(CARD s + CARD t) = &CARD s + (&CARD t :extreal)’
1145 >- rw [extreal_of_num_def, extreal_add_def] >> Rewr' \\
1146 ONCE_REWRITE_TAC [EQ_SYM_EQ] \\
1147 MATCH_MP_TAC div_add >> rw [extreal_of_num_def] ]
1148QED
1149
1150(* The same theorem using ‘uniform_distribution’ *)
1151Theorem prob_space_on_finite_set' :
1152 !p. FINITE (p_space p) /\ p_space p <> {} /\ events p = POW (p_space p) /\
1153 prob p = uniform_distribution (p_space p,events p) ==> prob_space p
1154Proof
1155 simp [uniform_distribution_def, prob_space_on_finite_set]
1156QED
1157
1158(* ************************************************************************* *)
1159
1160Theorem distribution_distr :
1161 distribution = distr
1162Proof
1163 rpt FUN_EQ_TAC >> qx_genl_tac [`p`, `X`, `s`]
1164 >> RW_TAC std_ss [distribution_def, distr_def, prob_def, p_space_def]
1165QED
1166
1167Theorem distribution_GSPEC :
1168 !s. distribution p X s = prob p {x | x IN p_space p /\ X x IN s}
1169Proof
1170 rw [distribution_def, PREIMAGE_def]
1171 >> simp [PROB_GSPEC]
1172QED
1173
1174(* alternative definition of ‘distribution_function’ *)
1175Theorem distribution_function :
1176 !p X t. distribution_function p X t = distribution p X {x | x <= t}
1177Proof
1178 rw [distribution_function_def, distribution_def, PREIMAGE_def]
1179QED
1180
1181Theorem joint_distribution_alt :
1182 !p X Y. joint_distribution p X Y = distribution p (\x. (X x,Y x))
1183Proof
1184 rw [joint_distribution_def, distribution_def]
1185QED
1186
1187(* See "stochastic_processTheory.finite_dimensional_distribution_def" for the joint
1188 distribution of a finite sequence of random variables.
1189 *)
1190Theorem joint_distribution3_alt :
1191 !p X Y Z. joint_distribution3 p X Y Z = distribution p (\x. (X x,Y x,Z x))
1192Proof
1193 rw [joint_distribution3_def, distribution_def]
1194QED
1195
1196(* ************************************************************************* *)
1197
1198Theorem marginal_joint_zero :
1199 !p X Y s t. prob_space p /\ (events p = POW (p_space p)) /\
1200 ((distribution p X s = 0) \/ (distribution p Y t = 0))
1201 ==> (joint_distribution p X Y (s CROSS t) = 0)
1202Proof
1203 RW_TAC std_ss [joint_distribution_def, distribution_def]
1204 >- (`PREIMAGE (\x. (X x,Y x)) (s CROSS t) INTER p_space p
1205 SUBSET (PREIMAGE X s INTER p_space p)`
1206 by RW_TAC std_ss [SUBSET_DEF, IN_PREIMAGE, IN_INTER, IN_CROSS] \\
1207 `prob p (PREIMAGE (\x. (X x,Y x)) (s CROSS t) INTER p_space p) <=
1208 prob p (PREIMAGE X s INTER p_space p)`
1209 by METIS_TAC [PROB_INCREASING, INTER_SUBSET, IN_POW] \\
1210 METIS_TAC [PROB_POSITIVE, INTER_SUBSET, IN_POW, le_antisym])
1211 >> `(PREIMAGE (\x. (X x,Y x)) (s CROSS t) INTER p_space p)
1212 SUBSET (PREIMAGE Y t INTER p_space p)`
1213 by RW_TAC std_ss [SUBSET_DEF, IN_PREIMAGE, IN_INTER, IN_CROSS]
1214 >> `prob p (PREIMAGE (\x. (X x,Y x)) (s CROSS t) INTER p_space p) <=
1215 prob p (PREIMAGE Y t INTER p_space p)`
1216 by METIS_TAC [PROB_INCREASING, INTER_SUBSET, IN_POW]
1217 >> METIS_TAC [PROB_POSITIVE, INTER_SUBSET, IN_POW, le_antisym]
1218QED
1219
1220Theorem marginal_joint_zero3 :
1221 !p X Y Z s t u. prob_space p /\ (events p = POW (p_space p)) /\
1222 ((distribution p X s = 0) \/
1223 (distribution p Y t = 0) \/
1224 (distribution p Z u = 0))
1225 ==> (joint_distribution3 p X Y Z (s CROSS (t CROSS u)) = 0)
1226Proof
1227 RW_TAC std_ss [joint_distribution3_def, distribution_def]
1228 >| [ (* goal 1 (of 3) *)
1229 `PREIMAGE (\x. (X x,Y x,Z x)) (s CROSS (t CROSS u)) INTER p_space p
1230 SUBSET (PREIMAGE X s INTER p_space p)`
1231 by RW_TAC std_ss [SUBSET_DEF, IN_PREIMAGE, IN_INTER, IN_CROSS] \\
1232 `prob p (PREIMAGE (\x. (X x,Y x,Z x)) (s CROSS (t CROSS u)) INTER p_space p) <=
1233 prob p (PREIMAGE X s INTER p_space p)`
1234 by METIS_TAC [PROB_INCREASING, INTER_SUBSET, IN_POW] \\
1235 METIS_TAC [PROB_POSITIVE, INTER_SUBSET, IN_POW, le_antisym],
1236 (* goal 2 (of 3) *)
1237 `PREIMAGE (\x. (X x,Y x,Z x)) (s CROSS (t CROSS u)) INTER p_space p
1238 SUBSET (PREIMAGE Y t INTER p_space p)`
1239 by RW_TAC std_ss [SUBSET_DEF, IN_PREIMAGE, IN_INTER, IN_CROSS] \\
1240 `prob p (PREIMAGE (\x. (X x,Y x, Z x)) (s CROSS (t CROSS u)) INTER p_space p) <=
1241 prob p (PREIMAGE Y t INTER p_space p)`
1242 by METIS_TAC [PROB_INCREASING, INTER_SUBSET, IN_POW] \\
1243 METIS_TAC [PROB_POSITIVE, INTER_SUBSET, IN_POW, le_antisym],
1244 (* goal 3 (of 3) *)
1245 `PREIMAGE (\x. (X x,Y x,Z x)) (s CROSS (t CROSS u)) INTER p_space p
1246 SUBSET (PREIMAGE Z u INTER p_space p)`
1247 by RW_TAC std_ss [SUBSET_DEF, IN_PREIMAGE, IN_INTER, IN_CROSS] \\
1248 `prob p (PREIMAGE (\x. (X x,Y x, Z x)) (s CROSS (t CROSS u)) INTER p_space p) <=
1249 prob p (PREIMAGE Z u INTER p_space p)`
1250 by METIS_TAC [PROB_INCREASING, INTER_SUBSET, IN_POW] \\
1251 METIS_TAC [PROB_POSITIVE, INTER_SUBSET, IN_POW, le_antisym] ]
1252QED
1253
1254Theorem distribution_pos :
1255 !p X a. prob_space p /\ (events p = POW (p_space p)) ==>
1256 0 <= distribution p X a
1257Proof
1258 RW_TAC std_ss [distribution_def]
1259 >> MATCH_MP_TAC PROB_POSITIVE
1260 >> RW_TAC std_ss [IN_POW, INTER_SUBSET]
1261QED
1262
1263(* NOTE: for general prob_space *)
1264Theorem distribution_positive :
1265 !p X B s. prob_space p /\ random_variable X p B /\ sigma_algebra B /\
1266 s IN subsets B ==> 0 <= distribution p X s
1267Proof
1268 rw [distribution_def, random_variable_def, IN_MEASURABLE]
1269 >> MATCH_MP_TAC PROB_POSITIVE >> rw []
1270QED
1271
1272Theorem distribution_le_1 :
1273 !p X a. prob_space p /\ (events p = POW (p_space p)) ==>
1274 distribution p X a <= 1
1275Proof
1276 RW_TAC std_ss [distribution_def]
1277 >> MATCH_MP_TAC PROB_LE_1
1278 >> RW_TAC std_ss [IN_POW, INTER_SUBSET]
1279QED
1280
1281(* NOTE: for general prob_space *)
1282Theorem distribution_le_one :
1283 !p X B s. prob_space p /\ random_variable X p B /\ sigma_algebra B /\
1284 s IN subsets B ==> distribution p X s <= 1
1285Proof
1286 rw [distribution_def, random_variable_def, IN_MEASURABLE]
1287 >> MATCH_MP_TAC PROB_LE_1 >> rw []
1288QED
1289
1290(* Theorem 3.1.3 [2, p.36], cf. measure_space_distr
1291
1292 NOTE: added ‘sigma_algebra s’ due to changes in ‘measurable’
1293 *)
1294Theorem distribution_prob_space : (* was: prob_space_distr *)
1295 !p X s. prob_space p /\ sigma_algebra s /\ random_variable X p s ==>
1296 prob_space (space s, subsets s, distribution p X)
1297Proof
1298 RW_TAC std_ss [random_variable_def, distribution_def, prob_space_def, measure_def, PSPACE,
1299 measure_space_def, m_space_def, measurable_sets_def, IN_MEASURABLE,
1300 SPACE, positive_def, PREIMAGE_EMPTY, INTER_EMPTY, PROB_EMPTY,
1301 PROB_POSITIVE, space_def, subsets_def, countably_additive_def]
1302 >- (Q.PAT_X_ASSUM
1303 `!f. _ ==> measure p (BIGUNION (IMAGE f univ(:num))) = suminf (measure p o f)`
1304 (MP_TAC o Q.SPEC `(\x. PREIMAGE X x INTER p_space p) o f`) \\
1305 RW_TAC std_ss [prob_def, o_DEF, PREIMAGE_BIGUNION, IMAGE_IMAGE] \\
1306 `(BIGUNION (IMAGE (\x. PREIMAGE X (f x)) UNIV) INTER p_space p) =
1307 (BIGUNION (IMAGE (\x. PREIMAGE X (f x) INTER p_space p) UNIV))`
1308 by (RW_TAC std_ss [Once EXTENSION, IN_BIGUNION, IN_INTER, IN_IMAGE, IN_UNIV] \\
1309 METIS_TAC [IN_INTER]) \\
1310 POP_ORW \\
1311 POP_ASSUM MATCH_MP_TAC \\
1312 FULL_SIMP_TAC std_ss [o_DEF, IN_FUNSET, IN_UNIV, events_def] \\
1313 CONJ_TAC
1314 >- (rpt STRIP_TAC \\
1315 Suff `DISJOINT (PREIMAGE X (f i)) (PREIMAGE X (f j))`
1316 >- (RW_TAC std_ss [IN_DISJOINT, IN_INTER] >> METIS_TAC []) \\
1317 RW_TAC std_ss [PREIMAGE_DISJOINT]) \\
1318 Suff `BIGUNION (IMAGE (\x. PREIMAGE X (f x) INTER p_space p) UNIV) =
1319 PREIMAGE X (BIGUNION (IMAGE f UNIV)) INTER p_space p`
1320 >- RW_TAC std_ss [] \\
1321 RW_TAC std_ss [Once EXTENSION, IN_INTER, IN_BIGUNION, IN_IMAGE, IN_UNIV,
1322 IN_PREIMAGE, IN_BIGUNION] \\
1323 METIS_TAC [IN_INTER, IN_PREIMAGE])
1324 >> Suff `PREIMAGE X (space s) INTER p_space p = p_space p`
1325 >- RW_TAC std_ss [prob_def, p_space_def]
1326 >> FULL_SIMP_TAC std_ss [IN_FUNSET, EXTENSION, IN_PREIMAGE, IN_INTER]
1327 >> METIS_TAC []
1328QED
1329
1330(* `prob_space p` is added since it's not provided by random_variable_def
1331
1332 NOTE: added ‘sigma_algebra s’ due to changes in ‘measurable’
1333 *)
1334Theorem uniform_distribution_prob_space :
1335 !X p s. prob_space p /\ FINITE (p_space p) /\
1336 FINITE (space s) /\ sigma_algebra s /\ random_variable X p s ==>
1337 prob_space (space s, subsets s, uniform_distribution s)
1338Proof
1339 RW_TAC std_ss []
1340 >> `p_space p <> {}`
1341 by METIS_TAC [MEASURE_EMPTY, EVAL ``0 <> 1:extreal``, prob_space_def, p_space_def]
1342 >> `space s <> {}`
1343 by (FULL_SIMP_TAC std_ss [random_variable_def, IN_FUNSET,
1344 IN_MEASURABLE, space_def] \\
1345 METIS_TAC [CHOICE_DEF, NOT_IN_EMPTY])
1346 >> `CARD (space s) <> 0` by METIS_TAC [CARD_EQ_0]
1347 >> Know `&CARD (space s) <> 0:extreal`
1348 >- (REWRITE_TAC [extreal_of_num_def] \\
1349 CCONTR_TAC >> fs [extreal_11]) >> DISCH_TAC
1350 >> `&CARD (space s) <> PosInf /\ &CARD (space s) <> NegInf`
1351 by METIS_TAC [extreal_of_num_def, extreal_not_infty]
1352 >> reverse (RW_TAC std_ss [prob_space_def, measure_def, m_space_def, PSPACE])
1353 >- RW_TAC std_ss [uniform_distribution_def, div_refl]
1354 >> MATCH_MP_TAC finite_additivity_sufficient_for_finite_spaces
1355 >> CONJ_TAC >- FULL_SIMP_TAC std_ss [random_variable_def, IN_MEASURABLE]
1356 >> CONJ_TAC >- RW_TAC std_ss []
1357 >> CONJ_TAC
1358 >- (RW_TAC real_ss [positive_def, measure_def, uniform_distribution_def, PREIMAGE_EMPTY,
1359 CARD_EMPTY, INTER_EMPTY, measurable_sets_def, zero_div] \\
1360 `&CARD s' <> PosInf /\ &CARD s' <> NegInf`
1361 by METIS_TAC [extreal_of_num_def, extreal_not_infty] \\
1362 `0 <= CARD s' /\ 0 <= CARD (space s)` by RW_TAC std_ss [] \\
1363 `?a. &CARD s' = Normal a` by PROVE_TAC [extreal_cases] \\
1364 `?b. &CARD (space s) = Normal b` by PROVE_TAC [extreal_cases] \\
1365 `b <> 0` by PROVE_TAC [extreal_of_num_def, extreal_11] \\
1366 `0 <= a /\ 0 <= b` by PROVE_TAC [extreal_of_num_def, extreal_le_eq, REAL_LE] \\
1367 ASM_SIMP_TAC real_ss [extreal_div_eq, extreal_of_num_def, extreal_le_eq] \\
1368 RW_TAC real_ss [REAL_LE_MUL, REAL_LE_INV, real_div])
1369 >> RW_TAC std_ss [additive_def, measure_def, uniform_distribution_def, measurable_sets_def]
1370 >> FULL_SIMP_TAC std_ss [random_variable_def, IN_MEASURABLE, IN_FUNSET, space_def, subsets_def]
1371 >> `s' SUBSET space s /\ t SUBSET space s`
1372 by METIS_TAC [sigma_algebra_def, algebra_def, subset_class_def]
1373 >> `CARD (s' INTER t) = 0` by METIS_TAC [DISJOINT_DEF, CARD_EMPTY]
1374 >> `CARD (s' UNION t) = CARD s' + CARD t` by METIS_TAC [CARD_UNION, ADD_0, SUBSET_FINITE]
1375 >> RW_TAC std_ss [GSYM REAL_ADD, extreal_of_num_def]
1376 >> ASM_SIMP_TAC real_ss [extreal_div_eq, extreal_add_def]
1377QED
1378
1379Theorem distribution_partition :
1380 !p X. prob_space p /\ (!x. x IN p_space p ==> {x} IN events p) /\
1381 FINITE (p_space p) /\ random_variable X p Borel ==>
1382 (SIGMA (\x. distribution p X {x}) (IMAGE X (p_space p)) = 1)
1383Proof
1384 RW_TAC std_ss []
1385 >> `random_variable X p (IMAGE X (p_space p), POW (IMAGE X (p_space p)))`
1386 by (RW_TAC std_ss [random_variable_def] \\
1387 RW_TAC std_ss [IN_MEASURABLE, IN_FUNSET, space_def, subsets_def,
1388 IN_IMAGE,POW_SIGMA_ALGEBRA]
1389 >- METIS_TAC [] \\
1390 METIS_TAC [PROB_DISCRETE_EVENTS, INTER_SUBSET])
1391 >> `prob_space (space (IMAGE X (p_space p), POW (IMAGE X (p_space p))),
1392 subsets (IMAGE X (p_space p), POW (IMAGE X (p_space p))),
1393 distribution p X)`
1394 by (MATCH_MP_TAC distribution_prob_space >> art [] \\
1395 REWRITE_TAC [POW_SIGMA_ALGEBRA])
1396 >> (MP_TAC o Q.ISPEC `(space (IMAGE (X :'a->extreal) (p_space p), POW (IMAGE X (p_space p))),
1397 subsets (IMAGE X (p_space p),POW (IMAGE X (p_space p))),
1398 distribution p X)`) PROB_EXTREAL_SUM_IMAGE_SPACE
1399 >> RW_TAC std_ss []
1400 >> FULL_SIMP_TAC std_ss [space_def, subsets_def, p_space_def, events_def, m_space_def,
1401 measurable_sets_def, prob_def, measure_def]
1402 >> `FINITE (IMAGE X (m_space p))` by METIS_TAC [IMAGE_FINITE]
1403 >> `(!x. x IN IMAGE X (m_space p) ==> {x} IN POW (IMAGE X (m_space p)))`
1404 by RW_TAC std_ss [IN_POW, SUBSET_DEF, IN_IMAGE, IN_SING]
1405 >> METIS_TAC []
1406QED
1407
1408Theorem distribution_space_eq_1 : (* was: lemma1 (normal_rvScript.sml) *)
1409 !p X. prob_space p ==> (distribution p X (IMAGE X (p_space p)) = 1)
1410Proof
1411 RW_TAC std_ss [prob_space_def, p_space_def]
1412 >> SIMP_TAC std_ss [distribution_def]
1413 >> SIMP_TAC std_ss [IMAGE_DEF, PREIMAGE_def, INTER_DEF, GSPECIFICATION]
1414 >> REWRITE_TAC [prob_def, p_space_def]
1415 >> REWRITE_TAC [SET_RULE ``{x | (?x''. (X x = X x'') /\ x'' IN s) /\ x IN s} = s``]
1416 >> ASM_REWRITE_TAC []
1417QED
1418
1419(* NOTE: added ‘sigma_algebra s’ due to changes in ‘measurable’ (‘random_variable’) *)
1420Theorem distribution_lebesgue_thm1 :
1421 !X p s A. prob_space p /\ sigma_algebra s /\
1422 random_variable X p s /\ A IN subsets s ==>
1423 (distribution p X A = integral p (indicator_fn (PREIMAGE X A INTER p_space p)))
1424Proof
1425 RW_TAC std_ss [random_variable_def, prob_space_def, distribution_def, events_def,
1426 IN_MEASURABLE, p_space_def, prob_def, subsets_def, space_def,
1427 GSYM integral_indicator]
1428QED
1429
1430(* NOTE: added ‘sigma_algebra s’ due to changes in ‘measurable’ (‘random_variable’) *)
1431Theorem distribution_lebesgue_thm2 :
1432 !X p s A. prob_space p /\ sigma_algebra s /\
1433 random_variable X p s /\ A IN subsets s ==>
1434 (distribution p X A = integral (space s, subsets s, distribution p X) (indicator_fn A))
1435Proof
1436 rpt STRIP_TAC
1437 >> `prob_space (space s,subsets s,distribution p X)`
1438 by RW_TAC std_ss [distribution_prob_space]
1439 >> Q.PAT_X_ASSUM `random_variable X p s` MP_TAC
1440 >> RW_TAC std_ss [random_variable_def, prob_space_def, distribution_def, events_def,
1441 IN_MEASURABLE, p_space_def, prob_def, subsets_def, space_def]
1442 >> `measure p (PREIMAGE X A INTER m_space p) =
1443 measure (space s,subsets s,(\A. measure p (PREIMAGE X A INTER m_space p))) A`
1444 by RW_TAC std_ss [measure_def]
1445 >> POP_ORW
1446 >> (MP_TAC o Q.SPECL [`(space s,subsets s,\A. measure p (PREIMAGE X A INTER m_space p))`,`A`]
1447 o INST_TYPE [``:'a``|->``:'b``]) integral_indicator
1448 >> FULL_SIMP_TAC std_ss [measurable_sets_def, prob_space_def, distribution_def,
1449 prob_def, p_space_def]
1450QED
1451
1452(* ************************************************************************* *)
1453
1454(* |- !X p.
1455 real_random_variable X p <=>
1456 prob_space p /\ X IN measurable (p_space p,events p) Borel /\
1457 !x. x IN p_space p ==> X x <> NegInf /\ X x <> PosInf *)
1458Theorem real_random_variable =
1459 (REWRITE_RULE [random_variable_def] real_random_variable_def)
1460
1461Theorem real_random_variable_zero :
1462 !p. prob_space p ==> real_random_variable (\x. 0) p
1463Proof
1464 RW_TAC std_ss [prob_space_def, real_random_variable_def,
1465 random_variable_def, p_space_def, events_def, num_not_infty]
1466 >> MATCH_MP_TAC IN_MEASURABLE_BOREL_CONST'
1467 >> FULL_SIMP_TAC std_ss [measure_space_def]
1468QED
1469
1470Theorem real_random_variable_const :
1471 !p m. prob_space p /\ m <> PosInf /\ m <> NegInf ==>
1472 real_random_variable (\x. m) p
1473Proof
1474 RW_TAC std_ss [real_random_variable, p_space_def, events_def]
1475 >> MATCH_MP_TAC IN_MEASURABLE_BOREL_CONST'
1476 >> FULL_SIMP_TAC std_ss [prob_space_def, measure_space_def]
1477QED
1478
1479Theorem real_random_variable_add :
1480 !p X Y. prob_space p /\ real_random_variable X p /\
1481 real_random_variable Y p ==> real_random_variable (\x. X x + Y x) p
1482Proof
1483 RW_TAC std_ss [prob_space_def, real_random_variable_def,
1484 random_variable_def, p_space_def, events_def]
1485 >| [ (* goal 1 (of 3) *)
1486 MATCH_MP_TAC IN_MEASURABLE_BOREL_ADD \\
1487 qexistsl_tac [`X`, `Y`] >> fs [measure_space_def, space_def],
1488 (* goal 2 (of 3) *)
1489 `?a. X x = Normal a` by METIS_TAC [extreal_cases] \\
1490 `?b. Y x = Normal b` by METIS_TAC [extreal_cases] \\
1491 rw [extreal_not_infty, extreal_add_def],
1492 (* goal 3 (of 3) *)
1493 `?a. X x = Normal a` by METIS_TAC [extreal_cases] \\
1494 `?b. Y x = Normal b` by METIS_TAC [extreal_cases] \\
1495 rw [extreal_not_infty, extreal_add_def] ]
1496QED
1497
1498Theorem real_random_variable_sub :
1499 !p X Y. prob_space p /\ real_random_variable X p /\
1500 real_random_variable Y p ==> real_random_variable (\x. X x - Y x) p
1501Proof
1502 RW_TAC std_ss [prob_space_def, real_random_variable_def,
1503 random_variable_def, p_space_def, events_def]
1504 >| [ (* goal 1 (of 3) *)
1505 MATCH_MP_TAC IN_MEASURABLE_BOREL_SUB \\
1506 qexistsl_tac [`X`, `Y`] >> fs [measure_space_def, space_def],
1507 (* goal 2 (of 3) *)
1508 `?a. X x = Normal a` by METIS_TAC [extreal_cases] \\
1509 `?b. Y x = Normal b` by METIS_TAC [extreal_cases] \\
1510 rw [extreal_not_infty, extreal_sub_def],
1511 (* goal 3 (of 3) *)
1512 `?a. X x = Normal a` by METIS_TAC [extreal_cases] \\
1513 `?b. Y x = Normal b` by METIS_TAC [extreal_cases] \\
1514 rw [extreal_not_infty, extreal_sub_def] ]
1515QED
1516
1517Theorem real_random_variable_ainv :
1518 !p X. prob_space p /\ real_random_variable X p ==> real_random_variable (\x. -X x) p
1519Proof
1520 rpt STRIP_TAC
1521 >> MP_TAC (Q.SPECL [‘p’, ‘\x. 0’, ‘X’] real_random_variable_sub)
1522 >> ‘real_random_variable (\x. 0) p’ by PROVE_TAC [real_random_variable_zero]
1523 >> RW_TAC std_ss [sub_lzero]
1524QED
1525
1526Theorem real_random_variable_cmul :
1527 !p X r. prob_space p /\ real_random_variable X p ==>
1528 real_random_variable (\x. Normal r * X x) p
1529Proof
1530 rpt GEN_TAC
1531 >> simp [real_random_variable, prob_space_def, p_space_def, events_def]
1532 >> STRIP_TAC
1533 >> CONJ_TAC (* Borel_measurable *)
1534 >- (MATCH_MP_TAC IN_MEASURABLE_BOREL_CMUL \\
1535 qexistsl_tac [‘X’, ‘r’] >> rw [] \\
1536 FULL_SIMP_TAC std_ss [measure_space_def])
1537 >> Q.X_GEN_TAC ‘x’
1538 >> DISCH_TAC
1539 >> ‘?z. X x = Normal z’ by METIS_TAC [extreal_cases] >> POP_ORW
1540 >> rw [extreal_mul_def]
1541QED
1542
1543Theorem real_random_variable_cdiv :
1544 !p X c. prob_space p /\ real_random_variable X p /\ c <> 0 ==>
1545 real_random_variable (\x. X x / Normal c) p
1546Proof
1547 rw [extreal_div_def, extreal_inv_def, Once mul_comm]
1548 >> MATCH_MP_TAC real_random_variable_cmul >> art []
1549QED
1550
1551Theorem real_random_variable_sum :
1552 !p X (J :'index set). prob_space p /\ FINITE J /\
1553 (!i. i IN J ==> real_random_variable (X i) p) ==>
1554 real_random_variable (\x. SIGMA (\n. X n x) J) p
1555Proof
1556 RW_TAC std_ss [real_random_variable]
1557 >| [ (* goal 1 (of 3) *)
1558 MATCH_MP_TAC (INST_TYPE [“:'b” |-> “:'index”] IN_MEASURABLE_BOREL_SUM) \\
1559 qexistsl_tac [‘X’, ‘J’] \\
1560 ‘sigma_algebra (p_space p,events p)’
1561 by METIS_TAC [prob_space_def, measure_space_def, p_space_def, events_def] \\
1562 rw [],
1563 (* goal 2 (of 3) *)
1564 MATCH_MP_TAC EXTREAL_SUM_IMAGE_NOT_NEGINF \\
1565 RW_TAC std_ss [],
1566 (* goal 3 (of 3) *)
1567 MATCH_MP_TAC EXTREAL_SUM_IMAGE_NOT_POSINF \\
1568 RW_TAC std_ss [] ]
1569QED
1570
1571(* NOTE: added ‘prob_space p’ due to changes of ‘measurable’ *)
1572Theorem real_random_variable_fn_plus :
1573 !p X. prob_space p /\ real_random_variable X p ==>
1574 real_random_variable (fn_plus X) p
1575Proof
1576 rpt STRIP_TAC
1577 >> ‘sigma_algebra (measurable_space p)’
1578 by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA, prob_space_def]
1579 >> fs [real_random_variable, p_space_def, events_def]
1580 >> CONJ_TAC
1581 >- (MATCH_MP_TAC IN_MEASURABLE_BOREL_FN_PLUS >> art [])
1582 >> NTAC 3 STRIP_TAC
1583 >- (MATCH_MP_TAC pos_not_neginf >> rw [FN_PLUS_POS])
1584 >> MATCH_MP_TAC FN_PLUS_NOT_INFTY >> rw []
1585QED
1586
1587(* NOTE: added ‘prob_space p’ due to changes of ‘measurable’ *)
1588Theorem real_random_variable_fn_minus :
1589 !p X. prob_space p /\ real_random_variable X p ==>
1590 real_random_variable (fn_minus X) p
1591Proof
1592 rpt STRIP_TAC
1593 >> ‘sigma_algebra (measurable_space p)’
1594 by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA, prob_space_def]
1595 >> fs [real_random_variable, p_space_def, events_def]
1596 >> CONJ_TAC
1597 >- (MATCH_MP_TAC IN_MEASURABLE_BOREL_FN_MINUS >> art [])
1598 >> NTAC 3 STRIP_TAC
1599 >- (MATCH_MP_TAC pos_not_neginf >> rw [FN_MINUS_POS])
1600 >> MATCH_MP_TAC FN_MINUS_NOT_INFTY >> rw []
1601QED
1602
1603Theorem real_random_variable_mul_indicator :
1604 !p E X. prob_space p /\ E IN events p /\ real_random_variable X p ==>
1605 real_random_variable (\x. X x * indicator_fn E x) p
1606Proof
1607 RW_TAC std_ss [real_random_variable]
1608 >- (HO_MATCH_MP_TAC IN_MEASURABLE_BOREL_MUL_INDICATOR \\
1609 fs [prob_space_def, measure_space_def, p_space_def, events_def])
1610 >> ‘?r. 0 <= r /\ r <= 1 /\ indicator_fn E x = Normal r’
1611 by METIS_TAC [indicator_fn_normal] >> POP_ORW
1612 >> ONCE_REWRITE_TAC [mul_comm]
1613 >> METIS_TAC [mul_not_infty]
1614QED
1615
1616Theorem random_variable_cong :
1617 !p X Y A. (!x. x IN p_space p ==> X x = Y x) ==>
1618 (random_variable X p A <=> random_variable Y p A)
1619Proof
1620 rw [random_variable_def]
1621 >> EQ_TAC >> rw []
1622 >| [ (* goal 1 (of 2) *)
1623 fs [p_space_def, events_def, IN_MEASURABLE, IN_FUNSET, PREIMAGE_def] \\
1624 CONJ_TAC >- METIS_TAC [] \\
1625 rpt STRIP_TAC \\
1626 Suff ‘{x | Y x IN s} INTER m_space p =
1627 {x | X x IN s} INTER m_space p’ >- METIS_TAC [] \\
1628 rw [Once EXTENSION] >> METIS_TAC [],
1629 (* goal 2 (of 2) *)
1630 fs [p_space_def, events_def, IN_MEASURABLE, IN_FUNSET, PREIMAGE_def] \\
1631 rpt STRIP_TAC \\
1632 Suff ‘{x | X x IN s} INTER m_space p =
1633 {x | Y x IN s} INTER m_space p’ >- METIS_TAC [] \\
1634 rw [Once EXTENSION] >> METIS_TAC [] ]
1635QED
1636
1637Theorem real_random_variable_cong :
1638 !p X Y. (!x. x IN p_space p ==> X x = Y x) ==>
1639 (real_random_variable X p <=> real_random_variable Y p)
1640Proof
1641 rw [real_random_variable]
1642 >> EQ_TAC >> rw []
1643 >| [ (* goal 1 (of 2) *)
1644 fs [p_space_def, events_def] \\
1645 MATCH_MP_TAC IN_MEASURABLE_BOREL_EQ \\
1646 Q.EXISTS_TAC ‘X’ >> rw [],
1647 (* goal 2 (of 2) *)
1648 fs [p_space_def, events_def] \\
1649 MATCH_MP_TAC IN_MEASURABLE_BOREL_EQ \\
1650 Q.EXISTS_TAC ‘Y’ >> rw [] ]
1651QED
1652
1653Theorem real_random_variable_equiv :
1654 !p X. prob_space p ==>
1655 (real_random_variable (Normal o X) p <=>
1656 random_variable X p borel)
1657Proof
1658 rw [real_random_variable_def, random_variable_def,
1659 AND_INTRO_THM, EQ_IMP_THM]
1660 >- (MP_TAC (Q.SPECL [‘(p_space p,events p)’, ‘Normal o X’]
1661 in_borel_measurable_from_Borel) \\
1662 FULL_SIMP_TAC std_ss [SIGMA_ALGEBRA_BOREL, prob_space_def,
1663 p_space_def, events_def, measure_space_def] \\
1664 rw [o_DEF] \\
1665 METIS_TAC [])
1666 >> irule IN_MEASURABLE_BOREL_IMP_BOREL'
1667 >> FULL_SIMP_TAC std_ss [SIGMA_ALGEBRA_BOREL, prob_space_def, p_space_def, events_def, measure_space_def]
1668QED
1669
1670Theorem real_random_variable_abs :
1671 !p X.
1672 prob_space p /\ real_random_variable X p ==>
1673 real_random_variable (λx. abs (X x)) p
1674Proof
1675 rpt STRIP_TAC
1676 >> fs [real_random_variable, prob_space_def, p_space_def, events_def]
1677 >> CONJ_TAC
1678 (* (λx. abs (X x)) IN Borel_measurable (measurable_space p) *)
1679 >- (irule IN_MEASURABLE_BOREL_ABS \\
1680 FULL_SIMP_TAC std_ss [SIGMA_ALGEBRA_BOREL, measure_space_def] \\
1681 qexists ‘X’ \\
1682 simp [])
1683 (* !x. x IN m_space p ==> abs (X x) <> - ∞ /\ abs (X x) <> +∞ *)
1684 >> Q.X_GEN_TAC ‘x’
1685 >> DISCH_TAC
1686 >> ‘?z. X x = Normal z’ by METIS_TAC [extreal_cases] >> POP_ORW
1687 >> rw[extreal_abs_def]
1688QED
1689
1690Theorem real_random_variable_exp :
1691 !p X r. prob_space p /\ real_random_variable X p ==> real_random_variable (λx. exp (X x)) p
1692Proof
1693 rpt GEN_TAC
1694 >> simp [real_random_variable, prob_space_def, p_space_def, events_def]
1695 >> STRIP_TAC
1696 >> CONJ_TAC
1697 >- (MATCH_MP_TAC IN_MEASURABLE_BOREL_EXP >> qexists_tac ‘X’ >> rw [])
1698 >> Q.X_GEN_TAC ‘x’
1699 >> DISCH_TAC
1700 >> ‘?z. X x = Normal z’ by METIS_TAC [extreal_cases] >> POP_ORW
1701 >> rw[extreal_exp_def]
1702QED
1703
1704Theorem real_random_variable_exp_normal :
1705 !p X r s. prob_space p /\ real_random_variable X p ==>
1706 real_random_variable (λx. exp (Normal s * X x)) p
1707Proof
1708 rw [real_random_variable_cmul, real_random_variable_exp]
1709QED
1710
1711Theorem real_random_variable_sum_cdiv :
1712 !p X s n. prob_space p /\
1713 (!i. i IN (count n) ==> real_random_variable (X i) p) /\
1714 0 < s n /\ s n <> PosInf /\ s n <> NegInf ==>
1715 real_random_variable ((λx. ∑ (λi. X i x) (count n) / s n)) p
1716Proof
1717 rpt STRIP_TAC
1718 >> BETA_TAC
1719 >> ‘?r. Normal r = s n’ by METIS_TAC [extreal_cases]
1720 >> ‘0 < r’ by POP_ASSUM (fs o wrap o SYM)
1721 >> Know ‘!x. ∑ (λi. X i x) (count n) / s n = ∑ (λi. X i x) (count n) / Normal r’
1722 >- (qx_gen_tac ‘x’ \\
1723 POP_ORW \\
1724 rw [])
1725 >> DISCH_TAC
1726 >> Know ‘real_random_variable (λx. ∑ (λi. X i x) (count n)) p’
1727 >- (HO_MATCH_MP_TAC real_random_variable_sum \\
1728 rw [])
1729 >> DISCH_TAC
1730 >> Know ‘real_random_variable (λx. ∑ (λi. X i x) (count n) / Normal r) p’
1731 >- (HO_MATCH_MP_TAC real_random_variable_cdiv \\
1732 simp [] \\
1733 ‘r <> 0’ by METIS_TAC [REAL_LT_IMP_NE] \\
1734 fs [])
1735 >> DISCH_TAC
1736 >> METIS_TAC []
1737QED
1738
1739(* added `integrable p X`, otherwise `expectation p X` is not defined *)
1740Theorem finite_expectation1:
1741 !p X. prob_space p /\ FINITE (p_space p) /\
1742 real_random_variable X p /\ integrable p X ==>
1743 (expectation p X =
1744 SIGMA (\r. r * prob p (PREIMAGE X {r} INTER p_space p)) (IMAGE X (p_space p)))
1745Proof
1746 RW_TAC std_ss [expectation_def, p_space_def, prob_def, prob_space_def,
1747 real_random_variable, events_def]
1748 >> (MATCH_MP_TAC o REWRITE_RULE [finite_space_integral_def]) finite_space_integral_reduce
1749 >> RW_TAC std_ss [num_lt_infty]
1750QED
1751
1752(* added `integrable p X`, otherwise `expectation p X` is not defined *)
1753Theorem finite_expectation2:
1754 !p X. prob_space p /\ FINITE (IMAGE X (p_space p)) /\
1755 real_random_variable X p /\ integrable p X ==>
1756 (expectation p X =
1757 SIGMA (\r. r * prob p (PREIMAGE X {r} INTER p_space p)) (IMAGE X (p_space p)))
1758Proof
1759 RW_TAC std_ss [expectation_def, p_space_def, prob_def, prob_space_def,
1760 real_random_variable, events_def]
1761 >> (MATCH_MP_TAC o REWRITE_RULE [finite_space_integral_def]) finite_support_integral_reduce
1762 >> RW_TAC std_ss [num_lt_infty]
1763QED
1764
1765(* added `integrable p X`, otherwise `expectation p X` is not defined *)
1766Theorem finite_expectation:
1767 !p X. prob_space p /\ FINITE (p_space p) /\
1768 real_random_variable X p /\ integrable p X ==>
1769 (expectation p X = SIGMA (\r. r * distribution p X {r}) (IMAGE X (p_space p)))
1770Proof
1771 RW_TAC std_ss [distribution_def]
1772 >> METIS_TAC [finite_expectation1]
1773QED
1774
1775(* added `integrable p X`, otherwise `expectation p X` is not defined *)
1776Theorem finite_support_expectation:
1777 !p X. prob_space p /\ FINITE (IMAGE X (p_space p)) /\
1778 real_random_variable X p /\ integrable p X ==>
1779 (expectation p X = SIGMA (\r. r * distribution p X {r}) (IMAGE X (p_space p)))
1780Proof
1781 RW_TAC std_ss [distribution_def]
1782 >> METIS_TAC [finite_expectation2]
1783QED
1784
1785(* ************************************************************************* *)
1786
1787Theorem finite_marginal_product_space_POW:
1788 !p X Y. prob_space p /\ FINITE (p_space p) /\ (POW (p_space p) = events p) /\
1789 random_variable X p (IMAGE X (p_space p), POW (IMAGE X (p_space p))) /\
1790 random_variable Y p (IMAGE Y (p_space p), POW (IMAGE Y (p_space p)))
1791 ==> measure_space (((IMAGE X (p_space p)) CROSS (IMAGE Y (p_space p))),
1792 POW ((IMAGE X (p_space p)) CROSS (IMAGE Y (p_space p))),
1793 (\a. prob p (PREIMAGE (\x. (X x,Y x)) a INTER p_space p)))
1794Proof
1795 rpt STRIP_TAC
1796 >> `(IMAGE X (p_space p) CROSS IMAGE Y (p_space p),
1797 POW (IMAGE X (p_space p) CROSS IMAGE Y (p_space p)),
1798 (\a. prob p (PREIMAGE (\x. (X x,Y x)) a INTER p_space p))) =
1799 (space (IMAGE X (p_space p) CROSS IMAGE Y (p_space p),
1800 POW (IMAGE X (p_space p) CROSS IMAGE Y (p_space p))),
1801 subsets (IMAGE X (p_space p) CROSS IMAGE Y (p_space p),
1802 POW (IMAGE X (p_space p) CROSS IMAGE Y (p_space p))),
1803 (\a. prob p (PREIMAGE (\x. (X x,Y x)) a INTER p_space p)))`
1804 by RW_TAC std_ss [space_def, subsets_def]
1805 >> POP_ORW
1806 >> MATCH_MP_TAC finite_additivity_sufficient_for_finite_spaces
1807 >> RW_TAC std_ss [POW_SIGMA_ALGEBRA, space_def, FINITE_CROSS, subsets_def, IMAGE_FINITE]
1808 >- (RW_TAC std_ss [positive_def, measure_def, measurable_sets_def, PREIMAGE_EMPTY, INTER_EMPTY]
1809 >- FULL_SIMP_TAC std_ss [random_variable_def, PROB_EMPTY] \\
1810 METIS_TAC [PROB_POSITIVE, SUBSET_DEF, IN_POW, IN_INTER, random_variable_def])
1811 >> RW_TAC std_ss [additive_def, measure_def, measurable_sets_def]
1812 >> MATCH_MP_TAC PROB_ADDITIVE
1813 >> Q.PAT_X_ASSUM `POW (p_space p) = events p` (MP_TAC o GSYM)
1814 >> FULL_SIMP_TAC std_ss [IN_POW, SUBSET_DEF, IN_PREIMAGE, IN_CROSS, IN_DISJOINT,
1815 random_variable_def, IN_INTER]
1816 >> RW_TAC std_ss [] >- METIS_TAC [SND]
1817 >> RW_TAC std_ss [Once EXTENSION, IN_UNION, IN_PREIMAGE, IN_INTER]
1818 >> METIS_TAC []
1819QED
1820
1821Theorem finite_marginal_product_space_POW2:
1822 !p s1 s2 X Y. prob_space p /\ FINITE (p_space p) /\ (POW (p_space p) = events p) /\
1823 random_variable X p (s1, POW s1) /\
1824 random_variable Y p (s2, POW s2) /\ FINITE s1 /\ FINITE s2
1825 ==> measure_space (s1 CROSS s2,POW (s1 CROSS s2),joint_distribution p X Y)
1826Proof
1827 (* proof *)
1828 rpt STRIP_TAC
1829 >> `(s1 CROSS s2, POW (s1 CROSS s2), joint_distribution p X Y) =
1830 (space (s1 CROSS s2, POW (s1 CROSS s2)),
1831 subsets (s1 CROSS s2, POW (s1 CROSS s2)),
1832 joint_distribution p X Y)`
1833 by RW_TAC std_ss [space_def, subsets_def]
1834 >> POP_ORW
1835 >> MATCH_MP_TAC finite_additivity_sufficient_for_finite_spaces
1836 >> RW_TAC std_ss [POW_SIGMA_ALGEBRA, space_def, FINITE_CROSS, subsets_def]
1837 >- (RW_TAC std_ss [positive_def, measure_def, measurable_sets_def, PREIMAGE_EMPTY, INTER_EMPTY,
1838 joint_distribution_def]
1839 >- FULL_SIMP_TAC std_ss [random_variable_def, PROB_EMPTY] \\
1840 METIS_TAC [PROB_POSITIVE, SUBSET_DEF, IN_POW, IN_INTER, random_variable_def])
1841 >> RW_TAC std_ss [additive_def, measure_def, measurable_sets_def, joint_distribution_def]
1842 >> MATCH_MP_TAC PROB_ADDITIVE
1843 >> Q.PAT_X_ASSUM `POW (p_space p) = events p` (MP_TAC o GSYM)
1844 >> FULL_SIMP_TAC std_ss [IN_POW, SUBSET_DEF, IN_PREIMAGE, IN_CROSS, IN_DISJOINT,
1845 random_variable_def, IN_INTER]
1846 >> RW_TAC std_ss [] >- METIS_TAC [SND]
1847 >> RW_TAC std_ss [Once EXTENSION, IN_UNION, IN_PREIMAGE, IN_INTER]
1848 >> METIS_TAC []
1849QED
1850
1851Theorem finite_marginal_product_space_POW3 :
1852 !p s1 s2 s3 X Y Z.
1853 prob_space p /\ FINITE (p_space p) /\ (POW (p_space p) = events p) /\
1854 random_variable X p (s1, POW s1) /\
1855 random_variable Y p (s2, POW s2) /\
1856 random_variable Z p (s3, POW s3) /\
1857 FINITE s1 /\ FINITE s2 /\ FINITE s3 ==>
1858 measure_space (s1 CROSS (s2 CROSS s3), POW (s1 CROSS (s2 CROSS s3)),
1859 joint_distribution3 p X Y Z)
1860Proof
1861 rpt STRIP_TAC
1862 >> `(s1 CROSS (s2 CROSS s3), POW (s1 CROSS (s2 CROSS s3)), joint_distribution3 p X Y Z) =
1863 (space (s1 CROSS (s2 CROSS s3), POW (s1 CROSS (s2 CROSS s3))),
1864 subsets (s1 CROSS (s2 CROSS s3), POW (s1 CROSS (s2 CROSS s3))),
1865 joint_distribution3 p X Y Z)`
1866 by RW_TAC std_ss [space_def, subsets_def]
1867 >> POP_ORW
1868 >> MATCH_MP_TAC finite_additivity_sufficient_for_finite_spaces
1869 >> RW_TAC std_ss [POW_SIGMA_ALGEBRA, space_def, FINITE_CROSS, subsets_def]
1870 >- (RW_TAC std_ss [positive_def, measure_def, measurable_sets_def, PREIMAGE_EMPTY,
1871 INTER_EMPTY, joint_distribution3_def]
1872 >- FULL_SIMP_TAC std_ss [random_variable_def, PROB_EMPTY] \\
1873 METIS_TAC [PROB_POSITIVE, SUBSET_DEF, IN_POW, IN_INTER, random_variable_def])
1874 >> RW_TAC std_ss [additive_def, measure_def, measurable_sets_def, joint_distribution3_def]
1875 >> MATCH_MP_TAC PROB_ADDITIVE
1876 >> Q.PAT_X_ASSUM `POW (p_space p) = events p` (MP_TAC o GSYM)
1877 >> FULL_SIMP_TAC std_ss [IN_POW, SUBSET_DEF, IN_PREIMAGE, IN_CROSS, IN_DISJOINT,
1878 random_variable_def, IN_INTER]
1879 >> RW_TAC std_ss [] >- METIS_TAC [SND]
1880 >> RW_TAC std_ss [Once EXTENSION, IN_UNION, IN_PREIMAGE, IN_INTER]
1881 >> METIS_TAC []
1882QED
1883
1884Theorem prob_x_eq_1_imp_prob_y_eq_0:
1885 !p x. prob_space p /\ {x} IN events p /\ (prob p {x} = 1) ==>
1886 !y. {y} IN events p /\ y <> x ==> (prob p {y} = 0)
1887Proof
1888 rpt STRIP_TAC
1889 >> (MP_TAC o Q.SPECL [`p`, `{y}`, `{x}`]) PROB_ONE_INTER
1890 >> RW_TAC std_ss []
1891 >> Know `{y} INTER {x} = {}`
1892 >- RW_TAC std_ss [Once EXTENSION, NOT_IN_EMPTY, IN_INTER, IN_SING]
1893 >> METIS_TAC [PROB_EMPTY]
1894QED
1895
1896(* NOTE: this is the last theorem in HVG's "probability_hvgScript.sml" *)
1897Theorem distribution_x_eq_1_imp_distribution_y_eq_0 :
1898 !X p x. prob_space p /\
1899 random_variable X p (IMAGE X (p_space p),POW (IMAGE X (p_space p))) /\
1900 (distribution p X {x} = 1)
1901 ==> !y. y <> x ==> (distribution p X {y} = 0)
1902Proof
1903 rpt STRIP_TAC
1904 >> (MP_TAC o Q.SPECL [`p`, `X`, `(IMAGE X (p_space p),POW (IMAGE X (p_space p)))`])
1905 distribution_prob_space
1906 >> RW_TAC std_ss [space_def, subsets_def, POW_SIGMA_ALGEBRA]
1907 >> (MP_TAC o Q.ISPECL [`(IMAGE (X :'a -> 'b) (p_space (p :'a p_space)),
1908 POW (IMAGE X (p_space p)),distribution p X)`, `x:'b`])
1909 prob_x_eq_1_imp_prob_y_eq_0
1910 >> SIMP_TAC std_ss [EVENTS, IN_POW, SUBSET_DEF, IN_SING, PROB]
1911 >> `x IN IMAGE X (p_space p)`
1912 by (FULL_SIMP_TAC std_ss [distribution_def, IN_IMAGE] \\
1913 SPOSE_NOT_THEN STRIP_ASSUME_TAC \\
1914 `PREIMAGE X {x} INTER p_space p = {}`
1915 by (RW_TAC std_ss [Once EXTENSION, IN_INTER, IN_SING, IN_PREIMAGE, NOT_IN_EMPTY] \\
1916 METIS_TAC []) \\
1917 METIS_TAC [random_variable_def, PROB_EMPTY, ne_01])
1918 >> POP_ORW
1919 >> RW_TAC std_ss []
1920 >> Cases_on `y IN IMAGE X (p_space p)` >- ASM_SIMP_TAC std_ss []
1921 >> FULL_SIMP_TAC std_ss [distribution_def, IN_IMAGE]
1922 >> `PREIMAGE X {y} INTER p_space p = {}`
1923 by (RW_TAC std_ss [Once EXTENSION, IN_INTER, IN_SING, IN_PREIMAGE, NOT_IN_EMPTY]
1924 >> METIS_TAC [])
1925 >> POP_ORW
1926 >> MATCH_MP_TAC PROB_EMPTY
1927 >> FULL_SIMP_TAC std_ss [random_variable_def]
1928QED
1929
1930Theorem joint_distribution_sym:
1931 !p X Y a b. prob_space p ==>
1932 (joint_distribution p X Y (a CROSS b) = joint_distribution p Y X (b CROSS a))
1933Proof
1934 RW_TAC std_ss [joint_distribution_def]
1935 >> Suff `PREIMAGE (\x. (X x,Y x)) (a CROSS b) INTER p_space p =
1936 PREIMAGE (\x. (Y x,X x)) (b CROSS a) INTER p_space p`
1937 >- METIS_TAC []
1938 >> RW_TAC std_ss [EXTENSION, IN_INTER, IN_PREIMAGE, IN_CROSS]
1939 >> METIS_TAC []
1940QED
1941
1942Theorem joint_distribution_pos:
1943 !p X Y a. prob_space p /\ (events p = POW (p_space p)) ==>
1944 0 <= joint_distribution p X Y a
1945Proof
1946 RW_TAC std_ss [joint_distribution_def]
1947 >> MATCH_MP_TAC PROB_POSITIVE
1948 >> RW_TAC std_ss [IN_POW, INTER_SUBSET]
1949QED
1950
1951Theorem joint_distribution_le_1:
1952 !p X Y a. prob_space p /\ (events p = POW (p_space p)) ==>
1953 (joint_distribution p X Y a <= 1)
1954Proof
1955 RW_TAC std_ss [joint_distribution_def]
1956 >> MATCH_MP_TAC PROB_LE_1
1957 >> RW_TAC std_ss [IN_POW, INTER_SUBSET]
1958QED
1959
1960Theorem joint_distribution_not_infty :
1961 !p X Y a. prob_space p /\ (events p = POW (p_space p)) ==>
1962 joint_distribution p X Y a <> NegInf /\
1963 joint_distribution p X Y a <> PosInf
1964Proof
1965 rpt GEN_TAC >> STRIP_TAC
1966 >> `0 <= joint_distribution p X Y a` by PROVE_TAC [joint_distribution_pos]
1967 >> `joint_distribution p X Y a <= 1` by PROVE_TAC [joint_distribution_le_1]
1968 >> CONJ_TAC >- (MATCH_MP_TAC pos_not_neginf >> art [])
1969 >> REWRITE_TAC [lt_infty]
1970 >> MATCH_MP_TAC let_trans >> Q.EXISTS_TAC `1` >> art []
1971 >> REWRITE_TAC [extreal_of_num_def, lt_infty]
1972QED
1973
1974Theorem joint_distribution_le:
1975 !p X Y a b. prob_space p /\ (events p = POW (p_space p)) ==>
1976 joint_distribution p X Y (a CROSS b) <= distribution p X a
1977Proof
1978 RW_TAC std_ss [joint_distribution_def,distribution_def]
1979 >> MATCH_MP_TAC PROB_INCREASING
1980 >> RW_TAC std_ss [IN_POW,INTER_SUBSET]
1981 >> RW_TAC std_ss [SUBSET_DEF,IN_PREIMAGE,IN_CROSS,IN_INTER]
1982QED
1983
1984Theorem joint_distribution_le2:
1985 !p X Y a b. prob_space p /\ (events p = POW (p_space p)) ==>
1986 joint_distribution p X Y (a CROSS b) <= distribution p Y b
1987Proof
1988 RW_TAC std_ss [joint_distribution_def,distribution_def]
1989 >> MATCH_MP_TAC PROB_INCREASING
1990 >> RW_TAC std_ss [IN_POW, INTER_SUBSET]
1991 >> RW_TAC std_ss [SUBSET_DEF, IN_PREIMAGE, IN_CROSS,IN_INTER]
1992QED
1993
1994Theorem distribution_not_infty :
1995 !p X a. prob_space p /\ (events p = POW (p_space p)) ==>
1996 distribution p X a <> NegInf /\
1997 distribution p X a <> PosInf
1998Proof
1999 rpt GEN_TAC >> STRIP_TAC
2000 >> `0 <= distribution p X a` by PROVE_TAC [distribution_pos]
2001 >> `distribution p X a <= 1` by PROVE_TAC [distribution_le_1]
2002 >> CONJ_TAC >- (MATCH_MP_TAC pos_not_neginf >> art [])
2003 >> REWRITE_TAC [lt_infty]
2004 >> MATCH_MP_TAC let_trans >> Q.EXISTS_TAC `1` >> art []
2005 >> REWRITE_TAC [extreal_of_num_def, lt_infty]
2006QED
2007
2008(* NOTE: more general version of the above theorem *)
2009Theorem distribution_finite :
2010 !p X B s. prob_space p /\ random_variable X p B /\
2011 sigma_algebra B /\ s IN subsets B ==>
2012 distribution p X s <> NegInf /\
2013 distribution p X s <> PosInf
2014Proof
2015 rpt GEN_TAC >> STRIP_TAC
2016 >> ‘0 <= distribution p X s /\ distribution p X s <= 1’
2017 by PROVE_TAC [distribution_positive, distribution_le_one]
2018 >> CONJ_TAC >- (MATCH_MP_TAC pos_not_neginf >> art [])
2019 >> REWRITE_TAC [lt_infty]
2020 >> Q_TAC (TRANS_TAC let_trans) ‘1’ >> rw []
2021QED
2022
2023Theorem joint_conditional :
2024 !p X Y a b. prob_space p /\ (events p = POW (p_space p)) ==>
2025 (joint_distribution p X Y (a CROSS b) =
2026 conditional_distribution p Y X b a * distribution p X a)
2027Proof
2028 RW_TAC std_ss [conditional_distribution_def, Once joint_distribution_sym]
2029 >> Cases_on `distribution p X a = 0`
2030 >- METIS_TAC [le_antisym, joint_distribution_pos, joint_distribution_le,
2031 joint_distribution_sym, mul_rzero]
2032 >> `distribution p X a <> NegInf /\ distribution p X a <> PosInf`
2033 by PROVE_TAC [distribution_not_infty]
2034 >> `?r. distribution p X a = Normal r` by PROVE_TAC [extreal_cases]
2035 >> fs []
2036 >> `r <> 0` by METIS_TAC [extreal_of_num_def, extreal_11]
2037 >> ASM_SIMP_TAC std_ss [div_mul_refl]
2038QED
2039
2040(* add `distribution p Y b <> 0` as divide-by-zero is not
2041 supported by (new) extreals *)
2042Theorem conditional_distribution_pos :
2043 !p X Y a b. prob_space p /\ (events p = POW (p_space p)) /\
2044 distribution p Y b <> 0 ==>
2045 0 <= conditional_distribution p X Y a b
2046Proof
2047 RW_TAC std_ss [conditional_distribution_def, distribution_pos,
2048 joint_distribution_pos]
2049 >> `0 <= distribution p Y b` by PROVE_TAC [distribution_pos]
2050 >> `distribution p Y b <> NegInf /\ distribution p Y b <> PosInf`
2051 by PROVE_TAC [distribution_not_infty]
2052 >> `?r. distribution p Y b = Normal r` by PROVE_TAC [extreal_cases]
2053 >> `0 <= joint_distribution p X Y (a CROSS b)`
2054 by PROVE_TAC [joint_distribution_pos]
2055 >> `joint_distribution p X Y (a CROSS b) <> NegInf /\
2056 joint_distribution p X Y (a CROSS b) <> PosInf`
2057 by PROVE_TAC [joint_distribution_not_infty]
2058 >> `?c. joint_distribution p X Y (a CROSS b) = Normal c`
2059 by PROVE_TAC [extreal_cases]
2060 >> fs []
2061 >> `r <> 0` by PROVE_TAC [extreal_of_num_def, extreal_11]
2062 >> `0 <= r /\ 0 <= c` by PROVE_TAC [extreal_of_num_def, extreal_le_eq]
2063 >> rw [extreal_div_eq, extreal_of_num_def, extreal_le_eq]
2064 >> RW_TAC real_ss [real_div, REAL_LE_MUL, REAL_LE_INV]
2065QED
2066
2067(* add `distribution p Y b <> 0` as divide-by-zero is not
2068 supported by (new) extreals *)
2069Theorem conditional_distribution_le_1 :
2070 !p X Y a b. prob_space p /\ (events p = POW (p_space p)) /\
2071 distribution p Y b <> 0 ==>
2072 conditional_distribution p X Y a b <= 1
2073Proof
2074 RW_TAC std_ss [conditional_distribution_def]
2075 >> `joint_distribution p X Y (a CROSS b) <= distribution p Y b`
2076 by PROVE_TAC [joint_distribution_le2]
2077 >> `0 <= distribution p Y b` by PROVE_TAC [distribution_pos]
2078 >> `distribution p Y b <> NegInf /\ distribution p Y b <> PosInf`
2079 by PROVE_TAC [distribution_not_infty]
2080 >> `?r. distribution p Y b = Normal r` by PROVE_TAC [extreal_cases]
2081 >> `0 <= joint_distribution p X Y (a CROSS b)`
2082 by PROVE_TAC [joint_distribution_pos]
2083 >> `joint_distribution p X Y (a CROSS b) <> NegInf /\
2084 joint_distribution p X Y (a CROSS b) <> PosInf`
2085 by PROVE_TAC [joint_distribution_not_infty]
2086 >> `?c. joint_distribution p X Y (a CROSS b) = Normal c`
2087 by PROVE_TAC [extreal_cases]
2088 >> fs []
2089 >> `r <> 0` by PROVE_TAC [extreal_of_num_def, extreal_11]
2090 >> `0 <= r /\ 0 <= c` by PROVE_TAC [extreal_of_num_def, extreal_le_eq]
2091 >> rw [extreal_div_eq, extreal_of_num_def, extreal_le_eq]
2092 >> `0 < r` by PROVE_TAC [REAL_LT_LE]
2093 >> RW_TAC real_ss [REAL_LE_LDIV_EQ]
2094 >> fs [extreal_le_eq]
2095QED
2096
2097Theorem marginal_distribution1 :
2098 !p X Y a. prob_space p /\ FINITE (p_space p) /\ (events p = POW (p_space p)) ==>
2099 (distribution p X a =
2100 SIGMA (\x. joint_distribution p X Y (a CROSS {x})) (IMAGE Y (p_space p)))
2101Proof
2102 RW_TAC std_ss [joint_distribution_def, distribution_def]
2103 >> `FINITE (IMAGE Y (p_space p))` by METIS_TAC [IMAGE_FINITE]
2104 >> RW_TAC std_ss [PREIMAGE_def, IN_CROSS, IN_SING]
2105 >> `(prob p ({x | X x IN a} INTER p_space p) =
2106 SIGMA (\x. prob p ({x | X x IN a} INTER p_space p INTER (\x. {x' | Y x' = x}) x))
2107 (IMAGE Y (p_space p)))`
2108 by (MATCH_MP_TAC PROB_EXTREAL_SUM_IMAGE_FN
2109 >> RW_TAC std_ss [IN_POW, INTER_SUBSET]
2110 >|[RW_TAC std_ss [SUBSET_DEF, IN_INTER, GSPECIFICATION],
2111 RW_TAC std_ss [DISJOINT_DEF, EXTENSION, NOT_IN_EMPTY, GSPECIFICATION, IN_INTER]
2112 >> METIS_TAC [],
2113 RW_TAC std_ss [EXTENSION, IN_BIGUNION_IMAGE, IN_INTER, GSPECIFICATION]
2114 >> METIS_TAC [IN_IMAGE]])
2115 >> RW_TAC std_ss []
2116 >> irule EXTREAL_SUM_IMAGE_EQ
2117 >> RW_TAC std_ss []
2118 >- (Suff `{x | X x IN a} INTER p_space p INTER {x' | Y x' = x} =
2119 {x' | X x' IN a /\ (Y x' = x)} INTER p_space p`
2120 >- RW_TAC std_ss [] \\
2121 RW_TAC std_ss [EXTENSION, IN_INTER, GSPECIFICATION] >> METIS_TAC [])
2122 >> DISJ1_TAC
2123 >> RW_TAC std_ss [IN_IMAGE] (* 2 subgoals, same tactics *)
2124 >> MATCH_MP_TAC pos_not_neginf
2125 >> MATCH_MP_TAC PROB_POSITIVE >> art [IN_POW]
2126 >> SET_TAC []
2127QED
2128
2129Theorem marginal_distribution2 :
2130 !p X Y b. prob_space p /\ FINITE (p_space p) /\ (events p = POW (p_space p)) ==>
2131 (distribution p Y b =
2132 SIGMA (\x. joint_distribution p X Y ({x} CROSS b)) (IMAGE X (p_space p)))
2133Proof
2134 RW_TAC std_ss [joint_distribution_def, distribution_def]
2135 >> `FINITE (IMAGE X (p_space p))` by METIS_TAC [IMAGE_FINITE]
2136 >> RW_TAC std_ss [PREIMAGE_def, IN_CROSS, IN_SING]
2137 >> `prob p ({x | Y x IN b} INTER p_space p) =
2138 SIGMA (\x. prob p ({x | Y x IN b} INTER p_space p INTER (\x. {x' | X x' = x}) x))
2139 (IMAGE X (p_space p))`
2140 by (MATCH_MP_TAC PROB_EXTREAL_SUM_IMAGE_FN
2141 >> RW_TAC std_ss [IN_POW, INTER_SUBSET]
2142 >|[RW_TAC std_ss [SUBSET_DEF, IN_INTER, GSPECIFICATION],
2143 RW_TAC std_ss [DISJOINT_DEF, EXTENSION, NOT_IN_EMPTY, GSPECIFICATION, IN_INTER]
2144 >> METIS_TAC [],
2145 RW_TAC std_ss [EXTENSION, IN_BIGUNION_IMAGE, IN_INTER, GSPECIFICATION]
2146 >> METIS_TAC [IN_IMAGE]])
2147 >> RW_TAC std_ss []
2148 >> irule EXTREAL_SUM_IMAGE_EQ
2149 >> RW_TAC std_ss []
2150 >- (Suff `{x | Y x IN b} INTER p_space p INTER {x' | X x' = x} =
2151 {x' | (X x' = x) /\ Y x' IN b} INTER p_space p`
2152 >- RW_TAC std_ss [] \\
2153 RW_TAC std_ss [EXTENSION, IN_INTER, GSPECIFICATION] >> METIS_TAC [])
2154 >> DISJ1_TAC
2155 >> RW_TAC std_ss [IN_IMAGE] (* 2 subgoals, same tactics *)
2156 >> MATCH_MP_TAC pos_not_neginf
2157 >> MATCH_MP_TAC PROB_POSITIVE >> art [IN_POW]
2158 >> SET_TAC []
2159QED
2160
2161Theorem joint_distribution_sums_1 :
2162 !p X Y. prob_space p /\ FINITE (p_space p) /\ (events p = POW (p_space p)) ==>
2163 (SIGMA (\(x,y). joint_distribution p X Y {(x,y)})
2164 ((IMAGE X (p_space p)) CROSS (IMAGE Y (p_space p))) = 1)
2165Proof
2166 RW_TAC std_ss []
2167 >> `(\(x,y). joint_distribution p X Y {(x,y)}) =
2168 (\x. (\a b. joint_distribution p X Y ({a} CROSS {b})) (FST x) (SND x))`
2169 by (RW_TAC std_ss [FUN_EQ_THM]
2170 >> Cases_on `x`
2171 >> RW_TAC std_ss [FST,SND]
2172 >> METIS_TAC [CROSS_SINGS])
2173 >> POP_ORW
2174 >> Know `SIGMA (\x. (\a b. joint_distribution p X Y ({a} CROSS {b})) (FST x) (SND x))
2175 (IMAGE X (p_space p) CROSS IMAGE Y (p_space p)) =
2176 SIGMA (\x. SIGMA ((\a b. joint_distribution p X Y ({a} CROSS {b})) x)
2177 (IMAGE Y (p_space p))) (IMAGE X (p_space p))`
2178 >- (MATCH_MP_TAC EQ_SYM \\
2179 irule EXTREAL_SUM_IMAGE_SUM_IMAGE \\
2180 RW_TAC std_ss [IMAGE_FINITE] \\
2181 DISJ1_TAC >> RW_TAC std_ss [IN_IMAGE] \\
2182 MATCH_MP_TAC pos_not_neginf \\
2183 rw [joint_distribution_pos]) >> Rewr'
2184 >> BETA_TAC
2185 >> rw [GSYM marginal_distribution1]
2186 >> `random_variable X p (IMAGE X (p_space p), POW (IMAGE X (p_space p)))`
2187 by (RW_TAC std_ss [random_variable_def, IN_MEASURABLE, IN_FUNSET, POW_SIGMA_ALGEBRA,
2188 space_def, subsets_def, IN_POW, INTER_SUBSET, IN_IMAGE]
2189 >> METIS_TAC [IN_IMAGE])
2190 >> Q.ABBREV_TAC `p1 = (IMAGE X (p_space p), POW (IMAGE X (p_space p)), distribution p X)`
2191 >> Know `prob_space p1`
2192 >- (Q.UNABBREV_TAC ‘p1’ \\
2193 Q.ABBREV_TAC ‘s = (IMAGE X (p_space p),POW (IMAGE X (p_space p)))’ \\
2194 ‘(IMAGE X (p_space p),POW (IMAGE X (p_space p)),distribution p X) =
2195 (space s,subsets s,distribution p X)’ by rw [Abbr ‘s’] >> POP_ORW \\
2196 MATCH_MP_TAC distribution_prob_space \\
2197 rw [POW_SIGMA_ALGEBRA, Abbr ‘s’])
2198 >> DISCH_TAC
2199 >> (MP_TAC o Q.SPEC `p1` o INST_TYPE [``:'a`` |-> ``:'b``]) PROB_EXTREAL_SUM_IMAGE_SPACE
2200 >> `FINITE (p_space p1)` by METIS_TAC [PSPACE, IMAGE_FINITE]
2201 >> `!x. x IN p_space p1 ==> {x} IN events p1`
2202 by METIS_TAC [EVENTS, IN_POW, SUBSET_DEF, IN_SING, PSPACE]
2203 >> RW_TAC std_ss []
2204 >> METIS_TAC [PROB, PSPACE]
2205QED
2206
2207(* added `!x. f x <> PosInf /\ f x <> NegInf` into antecedents *)
2208Theorem joint_distribution_sum_mul1 :
2209 !p X Y f. prob_space p /\ FINITE (p_space p) /\
2210 (events p = POW (p_space p)) /\
2211 (!x. f x <> PosInf /\ f x <> NegInf) ==>
2212 (SIGMA (\(x,y). joint_distribution p X Y {(x,y)} * (f x))
2213 (IMAGE X (p_space p) CROSS IMAGE Y (p_space p)) =
2214 SIGMA (\x. distribution p X {x} * (f x)) (IMAGE X (p_space p)))
2215Proof
2216 RW_TAC std_ss []
2217 >> Q.ABBREV_TAC `s1 = IMAGE X (p_space p)`
2218 >> Q.ABBREV_TAC `s2 = IMAGE Y (p_space p)`
2219 >> `FINITE s1 /\ FINITE s2` by METIS_TAC [IMAGE_FINITE]
2220 >> `(\(x,y). joint_distribution p X Y {(x,y)} * (f x)) =
2221 (\x. (\a b. joint_distribution p X Y {(a,b)} * (f a) ) (FST x) (SND x))`
2222 by (RW_TAC std_ss [FUN_EQ_THM] \\
2223 Cases_on `x` >> RW_TAC std_ss [])
2224 >> POP_ORW
2225 >> (MP_TAC o GSYM o Q.SPECL [`s1`,`s2`,`(\a b. joint_distribution p X Y {(a,b)} * (f a))`] o
2226 INST_TYPE [``:'a`` |-> ``:'b``, ``:'b`` |-> ``:'c``]) EXTREAL_SUM_IMAGE_SUM_IMAGE
2227 >> RW_TAC std_ss []
2228 >> Know `(!x. x IN s1 CROSS s2 ==>
2229 NegInf <> joint_distribution p X Y {x} * f (FST x)) \/
2230 (!x. x IN s1 CROSS s2 ==>
2231 PosInf <> joint_distribution p X Y {x} * f (FST x))`
2232 >- (DISJ2_TAC >> RW_TAC std_ss [] \\
2233 Suff `joint_distribution p X Y {x} * f (FST x) <> PosInf` >- rw [] \\
2234 `joint_distribution p X Y {x} <> NegInf /\
2235 joint_distribution p X Y {x} <> PosInf`
2236 by PROVE_TAC [joint_distribution_not_infty] \\
2237 `?r. joint_distribution p X Y {x} = Normal r` by PROVE_TAC [extreal_cases] \\
2238 `?c. f (FST x) = Normal c` by PROVE_TAC [extreal_cases] \\
2239 fs [extreal_mul_def, extreal_not_infty])
2240 >> DISCH_TAC
2241 >> `SIGMA (\x. joint_distribution p X Y {x} * f (FST x)) (s1 CROSS s2) =
2242 SIGMA (\x. SIGMA (\b. joint_distribution p X Y {(x,b)} * f x) s2) s1`
2243 by PROVE_TAC [] >> POP_ORW
2244 >> NTAC 2 (POP_ASSUM K_TAC)
2245 >> `!x. (\b. joint_distribution p X Y {(x,b)} * (f x)) =
2246 (\b. (f x) * (\b. joint_distribution p X Y {(x,b)}) b)`
2247 by RW_TAC std_ss [FUN_EQ_THM, mul_comm] >> POP_ORW
2248 >> Know `!x. SIGMA (\b. f x * (\b. joint_distribution p X Y {(x,b)}) b) s2 =
2249 f x * SIGMA (\b. joint_distribution p X Y {(x,b)}) s2`
2250 >- (GEN_TAC \\
2251 `?c. f x = Normal c` by PROVE_TAC [extreal_cases] >> POP_ORW \\
2252 irule EXTREAL_SUM_IMAGE_CMUL >> art [] \\
2253 DISJ1_TAC >> Q.X_GEN_TAC `y` >> RW_TAC std_ss [] \\
2254 MATCH_MP_TAC pos_not_neginf \\
2255 rw [joint_distribution_pos]) >> Rewr'
2256 >> `!x:'b b:'c. {(x,b)} = {x} CROSS {b}` by METIS_TAC [CROSS_SINGS]
2257 >> Q.UNABBREV_TAC `s1`
2258 >> Q.UNABBREV_TAC `s2`
2259 >> RW_TAC std_ss [GSYM marginal_distribution1]
2260 >> Suff `(\x. (f x) * distribution p X {x}) = (\x. distribution p X {x} * (f x))`
2261 >- RW_TAC std_ss []
2262 >> RW_TAC std_ss [FUN_EQ_THM, mul_comm]
2263QED
2264
2265(******************************************************************************)
2266(* Moments and variance [2, p.49] *)
2267(******************************************************************************)
2268
2269Definition absolute_moment_def:
2270 absolute_moment p X a r = expectation p (\x. (abs (X x - a)) pow r)
2271End
2272
2273Definition moment_def:
2274 moment p X a r = expectation p (\x. (X x - a) pow r)
2275End
2276
2277Definition central_moment_def:
2278 central_moment p X r = moment p X (expectation p X) r
2279End
2280
2281(* `variance` = central second moment, this is the most used one. *)
2282Definition variance_def:
2283 variance p X = central_moment p X 2
2284End
2285
2286Definition standard_deviation_def:
2287 standard_deviation p X = sqrt (variance p X)
2288End
2289
2290Definition second_moment_def:
2291 second_moment p X a = moment p X a 2
2292End
2293
2294Theorem second_moment_alt:
2295 !p X. second_moment p X 0 = expectation p (\x. (X x) pow 2)
2296Proof
2297 RW_TAC std_ss [second_moment_def, moment_def, sub_rzero]
2298QED
2299
2300Theorem integrable_imp_finite_expectation:
2301 !p X. prob_space p /\ integrable p X ==>
2302 expectation p X <> PosInf /\ expectation p X <> NegInf
2303Proof
2304 rpt GEN_TAC >> SIMP_TAC std_ss [prob_space_def, expectation_def]
2305 >> STRIP_TAC
2306 >> MATCH_MP_TAC integrable_finite_integral >> art []
2307QED
2308
2309Theorem integrable_from_square:
2310 !p X. prob_space p /\ real_random_variable X p /\
2311 integrable p (\x. X x pow 2) ==> integrable p X
2312Proof
2313 RW_TAC std_ss [prob_space_def, p_space_def]
2314 >> Know `integrable p (\x. 1)`
2315 >- (REWRITE_TAC [extreal_of_num_def] \\
2316 MATCH_MP_TAC integrable_const >> art [extreal_of_num_def, lt_infty])
2317 >> DISCH_TAC
2318 >> Know `integrable p (\x. (\x. (X x) pow 2) x + (\x. 1) x)`
2319 >- (MATCH_MP_TAC integrable_add_pos >> ASM_SIMP_TAC std_ss [le_01, le_pow2])
2320 >> BETA_TAC >> DISCH_TAC
2321 >> MATCH_MP_TAC integrable_bounded
2322 >> Q.EXISTS_TAC `\x. (X x) pow 2 + 1`
2323 >> ASM_SIMP_TAC std_ss [abs_le_square_plus1]
2324 >> `(\x. (X x) pow 2) IN measurable (m_space p,measurable_sets p) Borel`
2325 by PROVE_TAC [integrable_def]
2326 >> fs [real_random_variable, p_space_def, events_def]
2327QED
2328
2329(* In general, if X has a finite absolute moment of order k, then it has finite absolute
2330 moments of orders 1,2,...k-1 as well. [6, p.274] *)
2331Theorem integrable_absolute_moments :
2332 !p X n. prob_space p /\ real_random_variable X p /\
2333 integrable p (\x. (abs (X x)) pow n) ==>
2334 !m. m <= n ==> integrable p (\x. (abs (X x)) pow m)
2335Proof
2336 RW_TAC std_ss [prob_space_def, p_space_def]
2337 >> Know `integrable p (\x. 1)`
2338 >- (REWRITE_TAC [extreal_of_num_def] \\
2339 MATCH_MP_TAC integrable_const >> art [extreal_of_num_def, lt_infty])
2340 >> DISCH_TAC
2341 >> Know `integrable p (\x. (\x. 1) x + (\x. (abs (X x)) pow n) x)`
2342 >- (MATCH_MP_TAC integrable_add_pos >> RW_TAC std_ss [le_01] \\
2343 MATCH_MP_TAC pow_pos_le >> REWRITE_TAC [abs_pos])
2344 >> BETA_TAC >> DISCH_TAC
2345 >> MATCH_MP_TAC integrable_bounded
2346 >> Q.EXISTS_TAC `\x. 1 + (abs (X x)) pow n`
2347 >> fs [real_random_variable, p_space_def, events_def]
2348 >> RW_TAC std_ss []
2349 >- (`!x. abs (X x) pow m = ((abs o X) x) pow m` by METIS_TAC [o_DEF] >> POP_ORW \\
2350 MATCH_MP_TAC IN_MEASURABLE_BOREL_POW >> fs [measure_space_def, space_def, o_DEF] \\
2351 MATCH_MP_TAC IN_MEASURABLE_BOREL_ABS >> Q.EXISTS_TAC `X` \\
2352 ASM_SIMP_TAC std_ss [])
2353 >> Know `abs (abs (X x) pow m) = abs (X x) pow m`
2354 >- (REWRITE_TAC [abs_refl] \\
2355 MATCH_MP_TAC pow_pos_le >> REWRITE_TAC [abs_pos]) >> Rewr'
2356 >> MATCH_MP_TAC abs_pow_le_mono >> art []
2357QED
2358
2359Theorem integrable_absolute_moments_mono :
2360 !p X n.
2361 prob_space p /\ real_random_variable X p /\
2362 integrable p (\x. (abs (X x)) pow n) ==>
2363 (!m. m <= n ==> integrable p (λx. (X x) pow m))
2364Proof
2365 rpt STRIP_TAC
2366 >> MATCH_MP_TAC integrable_from_abs
2367 >> fs [prob_space_def]
2368 >> CONJ_TAC
2369 >- (irule IN_MEASURABLE_BOREL_POW' \\
2370 simp [MEASURE_SPACE_SIGMA_ALGEBRA] \\
2371 qexistsl [‘X’, ‘m’] >> fs [real_random_variable, p_space_def, events_def])
2372 >> rw [o_DEF]
2373 >> MP_TAC (Q.SPECL [‘p’, ‘X’, ‘n’] integrable_absolute_moments)
2374 >> impl_tac >- (fs [prob_space_def])
2375 >> rw [GSYM pow_abs]
2376QED
2377
2378Theorem variance_alt:
2379 !p X. variance p X = expectation p (\x. (X x - expectation p X) pow 2)
2380Proof
2381 RW_TAC std_ss [variance_def, central_moment_def, moment_def]
2382QED
2383
2384Theorem variance_pos :
2385 !p X. prob_space p ==> 0 <= variance p X
2386Proof
2387 RW_TAC std_ss [variance_alt, expectation_def, prob_space_def]
2388 >> MATCH_MP_TAC integral_pos
2389 >> RW_TAC std_ss [le_pow2]
2390QED
2391
2392Theorem second_moment_pos :
2393 !p X a. prob_space p ==> 0 <= second_moment p X a
2394Proof
2395 RW_TAC std_ss [second_moment_def, moment_def, expectation_def, prob_space_def]
2396 >> MATCH_MP_TAC integral_pos
2397 >> RW_TAC std_ss [le_pow2]
2398QED
2399
2400(* This is the most famous formula in Elementary Probability:
2401
2402 Var(X) = E[X^2] - E[X]^2
2403
2404 `integrable p X` is not needed due to "integrable_from_square"
2405 *)
2406Theorem variance_eq :
2407 !p X. prob_space p /\ real_random_variable X p /\
2408 integrable p (\x. X x pow 2) ==>
2409 variance p X = expectation p (\x. X x pow 2) - (expectation p X) pow 2
2410Proof
2411 rpt STRIP_TAC
2412 >> IMP_RES_TAC integrable_from_square
2413 >> REWRITE_TAC [variance_def, central_moment_def, moment_def, expectation_def]
2414 >> Q.ABBREV_TAC `EX = integral p X`
2415 >> fs [prob_space_def, real_random_variable_def, p_space_def]
2416 >> `?r. EX = Normal r` by PROVE_TAC [integrable_normal_integral]
2417 >> Know `!x. x IN m_space p ==> (X x - EX) pow 2 = (X x + (-EX)) pow 2`
2418 >- (rpt STRIP_TAC \\
2419 Suff ‘X x - EX = X x + (-EX)’ >- rw [] \\
2420 MATCH_MP_TAC extreal_sub_add >> DISJ1_TAC \\
2421 PROVE_TAC [extreal_not_infty])
2422 >> DISCH_TAC
2423 >> Know ‘integral p (\x. (X x - EX) pow 2) =
2424 integral p (\x. (X x + -EX) pow 2)’
2425 >- (MATCH_MP_TAC integral_cong >> rw []) >> Rewr'
2426 >> POP_ASSUM K_TAC
2427 >> Know `!x. x IN m_space p ==>
2428 (X x + -EX) pow 2 = (X x) pow 2 + (-EX) pow 2 + 2 * (X x) * (-EX)`
2429 >- (rpt STRIP_TAC \\
2430 MATCH_MP_TAC add_pow2 >> simp [extreal_ainv_def, extreal_not_infty])
2431 >> DISCH_TAC
2432 >> Know ‘integral p (\x. (X x + -EX) pow 2) =
2433 integral p (\x. X x pow 2 + -EX pow 2 + 2 * X x * -EX)’
2434 >- (MATCH_MP_TAC integral_cong >> rw []) >> Rewr'
2435 >> POP_ASSUM K_TAC
2436 >> Know `(-EX) pow 2 = EX pow 2`
2437 >- (REWRITE_TAC [pow_2, neg_mul2]) >> Rewr'
2438 >> Know `!x. 2 * X x * -EX = 2 * -EX * X x`
2439 >- (METIS_TAC [mul_assoc, mul_comm]) >> Rewr'
2440 >> Know `2 * -EX = Normal (2 * -r)`
2441 >- (art [extreal_of_num_def, extreal_ainv_def, extreal_mul_def]) >> Rewr'
2442 >> Know `EX pow 2 <> PosInf`
2443 >- (art [pow_2, extreal_mul_def, extreal_not_infty]) >> DISCH_TAC
2444 (* preparing for applying "integral_add" *)
2445 >> Know `integral p (\x. (\x. (X x) pow 2 + EX pow 2) x + (\x. Normal (2 * -r) * X x) x) =
2446 integral p (\x. (X x) pow 2 + EX pow 2) + integral p (\x. Normal (2 * -r) * X x)`
2447 >- (MATCH_MP_TAC integral_add >> simp [] \\
2448 CONJ_TAC
2449 >- (Suff `integrable p (\x. (\x. (X x) pow 2) x + (\x. (Normal r) pow 2) x)`
2450 >- METIS_TAC [] \\
2451 MATCH_MP_TAC integrable_add_pos >> ASM_SIMP_TAC std_ss [le_pow2] \\
2452 REWRITE_TAC [pow_2, extreal_mul_def] \\
2453 MATCH_MP_TAC integrable_const >> art [extreal_of_num_def, lt_infty]) \\
2454 CONJ_TAC >- (MATCH_MP_TAC integrable_cmul >> art []) \\
2455 GEN_TAC >> DISCH_TAC >> DISJ1_TAC \\
2456 RW_TAC std_ss [pow_2, extreal_mul_def] >| (* 2 subgoals *)
2457 [ `?c. X x = Normal c` by PROVE_TAC [extreal_cases] >> POP_ORW \\
2458 REWRITE_TAC [extreal_mul_def, extreal_add_def, extreal_not_infty],
2459 `?c. X x = Normal c` by PROVE_TAC [extreal_cases] >> POP_ORW \\
2460 REWRITE_TAC [extreal_mul_def, extreal_not_infty] ])
2461 >> BETA_TAC >> Rewr'
2462 >> Know `integral p (\x. (\x. (X x) pow 2) x + (\x. EX pow 2) x) =
2463 integral p (\x. (X x) pow 2) + integral p (\x. EX pow 2)`
2464 >- (MATCH_MP_TAC integral_add \\
2465 simp [pow_2, extreal_mul_def, extreal_not_infty] \\
2466 MATCH_MP_TAC integrable_const >> art [extreal_of_num_def, lt_infty])
2467 >> BETA_TAC >> Rewr'
2468 >> Know `integral p (\x. EX pow 2) = EX pow 2 * measure p (m_space p)`
2469 >- (Q.PAT_X_ASSUM `EX = Normal r` (REWRITE_TAC o wrap) \\
2470 REWRITE_TAC [pow_2, extreal_mul_def] \\
2471 MATCH_MP_TAC integral_const >> art [extreal_of_num_def, lt_infty])
2472 >> Rewr'
2473 >> Know `integral p (\x. Normal (2 * -r) * X x) = Normal (2 * -r) * EX`
2474 >- (Q.PAT_X_ASSUM `EX = Normal r` K_TAC >> Q.UNABBREV_TAC `EX` \\
2475 MATCH_MP_TAC integral_cmul >> art []) >> Rewr'
2476 >> Know `Normal (2 * -r) = -2 * EX`
2477 >- (art [extreal_of_num_def, extreal_mul_def, extreal_ainv_def, extreal_11] \\
2478 RW_TAC real_ss []) >> Rewr'
2479 >> Q.PAT_X_ASSUM `EX = Normal r` K_TAC
2480 >> ASM_REWRITE_TAC [mul_rone, GSYM pow_2, GSYM mul_assoc]
2481 >> Know `integral p (\x. (X x) pow 2) + EX pow 2 + -2 * EX pow 2 =
2482 integral p (\x. (X x) pow 2) + (EX pow 2 + -2 * EX pow 2)`
2483 >- (MATCH_MP_TAC EQ_SYM \\
2484 MATCH_MP_TAC add_assoc \\
2485 `?r. integral p (\x. (X x) pow 2) = Normal r` by PROVE_TAC [integrable_normal_integral] \\
2486 `?c. EX = Normal c` by PROVE_TAC [integrable_normal_integral] \\
2487 art [extreal_not_infty, pow_2, extreal_of_num_def, extreal_ainv_def, extreal_mul_def])
2488 >> Rewr'
2489 >> Know `1 * EX pow 2 + -2 * EX pow 2 = (1 + -2) * EX pow 2`
2490 >- (MATCH_MP_TAC EQ_SYM \\
2491 `?c. EX = Normal c` by PROVE_TAC [integrable_normal_integral] \\
2492 art [pow_2, extreal_mul_def] \\
2493 MATCH_MP_TAC add_rdistrib_normal \\
2494 REWRITE_TAC [extreal_of_num_def, extreal_ainv_def, extreal_not_infty])
2495 >> REWRITE_TAC [mul_lone] >> Rewr'
2496 >> Know `(1:extreal) + -2 = -1`
2497 >- (RW_TAC real_ss [extreal_of_num_def, extreal_ainv_def, extreal_11, extreal_add_def])
2498 >> Rewr' >> REWRITE_TAC [GSYM neg_minus1]
2499 >> MATCH_MP_TAC EQ_SYM
2500 >> MATCH_MP_TAC extreal_sub_add
2501 >> DISJ1_TAC >> art []
2502 >> `?r. integral p (\x. (X x) pow 2) = Normal r`
2503 by PROVE_TAC [integrable_normal_integral]
2504 >> POP_ORW >> REWRITE_TAC [extreal_not_infty]
2505QED
2506
2507(* A corollary: Var(X) is always less or equal than E[X^2] *)
2508Theorem variance_le :
2509 !p X. prob_space p /\ real_random_variable X p /\ integrable p (\x. X x pow 2) ==>
2510 variance p X <= expectation p (\x. X x pow 2)
2511Proof
2512 rpt STRIP_TAC
2513 >> Know `variance p X = expectation p (\x. X x pow 2) - expectation p X pow 2`
2514 >- (MATCH_MP_TAC variance_eq >> art []) >> Rewr'
2515 >> IMP_RES_TAC integrable_from_square
2516 >> Q.ABBREV_TAC `EX = integral p X`
2517 >> fs [prob_space_def, real_random_variable_def, p_space_def, expectation_def]
2518 >> `?r. EX = Normal r` by PROVE_TAC [integrable_normal_integral]
2519 >> Know `EX pow 2 <> PosInf`
2520 >- (art [pow_2, extreal_mul_def, extreal_not_infty]) >> DISCH_TAC
2521 >> Know `EX pow 2 <> NegInf`
2522 >- (MATCH_MP_TAC pos_not_neginf >> REWRITE_TAC [le_pow2]) >> DISCH_TAC
2523 >> Know `integral p (\x. (X x) pow 2) - EX pow 2 <= integral p (\x. (X x) pow 2) <=>
2524 integral p (\x. (X x) pow 2) <= integral p (\x. (X x) pow 2) + EX pow 2`
2525 >- (MATCH_MP_TAC sub_le_eq >> art []) >> Rewr'
2526 >> MATCH_MP_TAC le_addr_imp
2527 >> REWRITE_TAC [le_pow2]
2528QED
2529
2530(* NOTE: this definition is new, later we shall prove that it's equivalence with
2531 finite variance or finite second moment at `a = 0` *)
2532Definition finite_second_moments_def:
2533 finite_second_moments p X = ?a. second_moment p X a < PosInf
2534End
2535
2536Theorem finite_variance_imp_finite_second_moments[local]:
2537 !p X. variance p X < PosInf ==> finite_second_moments p X
2538Proof
2539 RW_TAC std_ss [finite_second_moments_def, variance_def, central_moment_def,
2540 second_moment_def]
2541 >> Q.EXISTS_TAC `expectation p X` >> art []
2542QED
2543
2544(* TODO: extend `Normal c` to all extreals (not possible for integral_cmul) *)
2545Theorem expectation_cmul :
2546 !p X c. prob_space p /\ integrable p X ==>
2547 expectation p (\x. Normal c * X x) = Normal c * expectation p X
2548Proof
2549 rw [prob_space_def, expectation_def]
2550 >> MATCH_MP_TAC integral_cmul >> art []
2551QED
2552
2553Theorem expectation_cdiv :
2554 !p X c. prob_space p /\ integrable p X /\ c <> 0 ==>
2555 expectation p (\x. X x / Normal c) = expectation p X / Normal c
2556Proof
2557 rw [extreal_div_def, extreal_inv_def]
2558 >> ONCE_REWRITE_TAC [mul_comm]
2559 >> MATCH_MP_TAC expectation_cmul >> art []
2560QED
2561
2562Theorem expectation_pos :
2563 !p X. prob_space p /\ (!x. x IN p_space p ==> 0 <= X x) ==>
2564 0 <= expectation p X
2565Proof
2566 rw [prob_space_def, p_space_def, expectation_def]
2567 >> MATCH_MP_TAC integral_pos >> rw []
2568QED
2569
2570Theorem expectation_posinf[local] :
2571 !p. prob_space p ==> expectation p (\x. PosInf) = PosInf
2572Proof
2573 RW_TAC std_ss [prob_space_def, p_space_def, expectation_def]
2574 >> MATCH_MP_TAC integral_posinf >> art [lt_01]
2575QED
2576
2577Theorem expectation_neginf[local] :
2578 !p. prob_space p ==> expectation p (\x. NegInf) = NegInf
2579Proof
2580 RW_TAC std_ss [prob_space_def, p_space_def, expectation_def]
2581 >> MATCH_MP_TAC integral_neginf >> art [lt_01]
2582QED
2583
2584(* NOTE: the type of ‘c’ has changed from “:real” to “:extreal” *)
2585Theorem expectation_const :
2586 !p c. prob_space p ==> expectation p (\x. c) = c
2587Proof
2588 rpt STRIP_TAC
2589 >> Cases_on ‘c’
2590 >| [ (* goal 1 (of 3) *)
2591 MATCH_MP_TAC expectation_neginf >> art [],
2592 (* goal 2 (of 3) *)
2593 MATCH_MP_TAC expectation_posinf >> art [],
2594 (* goal 3 (of 3) *)
2595 MP_TAC (Q.SPECL [`p`, `r`] integral_const) \\
2596 `1 < PosInf` by PROVE_TAC [lt_infty, extreal_of_num_def] \\
2597 fs [prob_space_def, p_space_def, expectation_def, mul_rone] ]
2598QED
2599
2600(* |- !p. prob_space p ==> expectation p (\x. 0) = 0 *)
2601Theorem expectation_zero =
2602 Q.GEN ‘p’ (Q.SPECL [‘p’, ‘0’] expectation_const)
2603
2604Theorem variance_const :
2605 !p c. prob_space p ==> variance p (\x. Normal c) = 0
2606Proof
2607 rpt STRIP_TAC
2608 >> rw [variance_alt, expectation_const, extreal_sub_def]
2609 >> rw [extreal_pow_def, expectation_zero]
2610QED
2611
2612Theorem expectation_sum :
2613 !p X J.
2614 FINITE J /\ prob_space p /\ (!i. i IN J ==> integrable p (X i)) /\
2615 (!i. i IN J ==> real_random_variable (X i) p) ==>
2616 expectation p (\x. SIGMA (\i. X i x) J) = SIGMA (\i. expectation p (X i)) J
2617Proof
2618 RW_TAC std_ss [expectation_def, real_random_variable_def, prob_space_def,
2619 p_space_def]
2620 >> MATCH_MP_TAC integral_sum >> rw []
2621QED
2622
2623(* |- !p. prob_space p ==> variance p (\x. 0) = 0 *)
2624Theorem variance_zero =
2625 variance_const |> Q.SPECL [‘p’, ‘0’]
2626 |> REWRITE_RULE [GSYM extreal_of_num_def]
2627 |> Q.GEN ‘p’
2628
2629Theorem expectation_cong :
2630 !p f g. prob_space p /\ (!x. x IN p_space p ==> f x = g x) ==>
2631 expectation p f = expectation p g
2632Proof
2633 rw [prob_space_def, p_space_def, expectation_def]
2634 >> MATCH_MP_TAC integral_cong >> art []
2635QED
2636
2637Theorem expectation_add :
2638 !p f g.
2639 prob_space p /\ integrable p f /\ integrable p g ==>
2640 expectation p (λx. f x + g x) = expectation p f + expectation p g
2641Proof
2642 rw [expectation_def, prob_space_def]
2643 >> MATCH_MP_TAC integral_add'
2644 >> simp []
2645QED
2646
2647Theorem expectation_sub :
2648 !p X Y.
2649 prob_space p /\
2650 integrable p X /\
2651 integrable p Y ==>
2652 expectation p (λx. X x - Y x) = expectation p X - expectation p Y
2653Proof
2654 rw [expectation_def, prob_space_def]
2655 >> MATCH_MP_TAC integral_sub'
2656 >> simp []
2657QED
2658
2659Theorem expectation_mono:
2660 !p f g.
2661 prob_space p /\ integrable p f /\ integrable p g /\
2662 (!x. x IN p_space p ==> f x <= g x) ==>
2663 expectation p f <= expectation p g
2664Proof
2665 rw [prob_space_def, p_space_def, expectation_def]
2666 >> MATCH_MP_TAC integral_mono >> art []
2667QED
2668
2669Theorem variance_cong :
2670 !p f g. prob_space p /\ (!x. x IN p_space p ==> f x = g x) ==>
2671 variance p f = variance p g
2672Proof
2673 RW_TAC std_ss [variance_alt]
2674 >> MATCH_MP_TAC expectation_cong
2675 >> RW_TAC std_ss []
2676 >> Suff ‘expectation p f = expectation p g’ >- rw []
2677 >> MATCH_MP_TAC expectation_cong
2678 >> RW_TAC std_ss []
2679QED
2680
2681(* Deep lemma: all second moments are finite iff one of them is finite *)
2682Theorem finite_second_moments_all :
2683 !p X. prob_space p /\ real_random_variable X p ==>
2684 (finite_second_moments p X <=> !r. second_moment p X (Normal r) < PosInf)
2685Proof
2686 RW_TAC std_ss [finite_second_moments_def, second_moment_def, moment_def]
2687 >> reverse EQ_TAC >> rpt STRIP_TAC
2688 >- (POP_ASSUM (STRIP_ASSUME_TAC o (Q.SPEC `0`)) \\
2689 Q.EXISTS_TAC `Normal 0` >> art [])
2690 >> fs [real_random_variable]
2691 >> Cases_on `(a = PosInf) \/ (a = NegInf)`
2692 >- (Suff `!x. x IN p_space p ==> (X x - a) pow 2 = PosInf`
2693 >- (DISCH_TAC \\
2694 Q.PAT_X_ASSUM ‘expectation p (\x. (X x - a) pow 2) < PosInf’ MP_TAC \\
2695 Know ‘expectation p (\x. (X x - a) pow 2) =
2696 expectation p (\x. PosInf)’
2697 >- (MATCH_MP_TAC expectation_cong >> simp []) \\
2698 simp [expectation_const] \\
2699 METIS_TAC [lt_infty]) \\
2700 rpt STRIP_TAC \\
2701 `?r. X x = Normal r` by PROVE_TAC [extreal_cases] >> POP_ORW \\
2702 `EVEN 2` by RW_TAC arith_ss [] \\
2703 Q.PAT_X_ASSUM `(a = PosInf) \/ (a = NegInf)` STRIP_ASSUME_TAC \\
2704 ASM_SIMP_TAC std_ss [extreal_sub_def, extreal_pow_def])
2705 >> `?c. a = Normal c` by PROVE_TAC [extreal_cases]
2706 >> POP_ASSUM (fs o wrap)
2707 >> fs [expectation_def, p_space_def, events_def, prob_space_def]
2708 >> Know `integrable p (\x. (\x. X x - Normal c) x pow 2)`
2709 >- (RW_TAC pure_ss [integrable_def] >| (* 3 subgoals *)
2710 [ (* goal 1 (of 3) *)
2711 MATCH_MP_TAC IN_MEASURABLE_BOREL_POW >> fs [measure_space_def, space_def] \\
2712 MATCH_MP_TAC IN_MEASURABLE_BOREL_SUB' \\
2713 qexistsl_tac [`X`, `\x. Normal c`] \\
2714 ASM_SIMP_TAC std_ss [] \\
2715 MATCH_MP_TAC IN_MEASURABLE_BOREL_CONST >> Q.EXISTS_TAC `Normal c` \\
2716 ASM_SIMP_TAC std_ss [],
2717 (* goal 2 (of 3) *)
2718 BETA_TAC \\
2719 `!x. 0 <= (X x - Normal c) pow 2` by REWRITE_TAC [le_pow2] \\
2720 Know `fn_plus (\x. (X x - Normal c) pow 2) = (\x. (X x - Normal c) pow 2)`
2721 >- (MATCH_MP_TAC FN_PLUS_POS_ID >> BETA_TAC >> art []) >> Rewr' \\
2722 REWRITE_TAC [lt_infty] \\
2723 Know `pos_fn_integral p (\x. (X x - Normal c) pow 2) =
2724 integral p (\x. (X x - Normal c) pow 2)`
2725 >- (MATCH_MP_TAC EQ_SYM \\
2726 MATCH_MP_TAC integral_pos_fn >> ASM_SIMP_TAC std_ss []) >> Rewr' >> art [],
2727 (* goal 3 (of 3) *)
2728 BETA_TAC \\
2729 `!x. 0 <= (X x - Normal c) pow 2` by REWRITE_TAC [le_pow2] \\
2730 Know `fn_minus (\x. (X x - Normal c) pow 2) = (\x. 0)`
2731 >- (MATCH_MP_TAC FN_MINUS_POS_ZERO >> BETA_TAC >> art []) >> Rewr' \\
2732 ASM_SIMP_TAC std_ss [pos_fn_integral_zero, extreal_of_num_def, extreal_not_infty] ])
2733 >> DISCH_TAC
2734 >> Know `integrable p (\x. X x - Normal c)`
2735 >- (MATCH_MP_TAC integrable_from_square \\
2736 fs [prob_space_def, real_random_variable,
2737 p_space_def, events_def, prob_space_def, measure_space_def] \\
2738 reverse CONJ_TAC
2739 >- (GEN_TAC >> DISCH_TAC \\
2740 `?r. X x = Normal r` by PROVE_TAC [extreal_cases] >> POP_ORW \\
2741 REWRITE_TAC [extreal_sub_def, extreal_not_infty]) \\
2742 MATCH_MP_TAC IN_MEASURABLE_BOREL_SUB' \\
2743 Q.EXISTS_TAC `X` >> Q.EXISTS_TAC `\x. Normal c` \\
2744 ASM_SIMP_TAC std_ss [] \\
2745 MATCH_MP_TAC IN_MEASURABLE_BOREL_CONST >> Q.EXISTS_TAC `Normal c` \\
2746 ASM_SIMP_TAC std_ss [])
2747 >> DISCH_TAC
2748 >> Know `integrable p X`
2749 >- (Know `X = \x. X x - Normal c + Normal c`
2750 >- (FUN_EQ_TAC >> GEN_TAC >> BETA_TAC \\
2751 MATCH_MP_TAC EQ_SYM \\
2752 MATCH_MP_TAC sub_add >> REWRITE_TAC [extreal_not_infty]) >> Rewr' \\
2753 `(\x. X x - Normal c + Normal c) = (\x. (\x. X x - Normal c) x + (\x. Normal c) x)`
2754 by METIS_TAC [] >> POP_ORW \\
2755 MATCH_MP_TAC integrable_add >> art [] \\
2756 CONJ_TAC >- (MATCH_MP_TAC integrable_const >> art [extreal_of_num_def, lt_infty]) \\
2757 GEN_TAC >> DISCH_TAC >> DISJ1_TAC \\
2758 RW_TAC std_ss [extreal_not_infty] \\
2759 `?r. X x = Normal r` by PROVE_TAC [extreal_cases] >> POP_ORW \\
2760 REWRITE_TAC [extreal_sub_def, extreal_not_infty])
2761 >> DISCH_TAC
2762 >> Suff `integrable p (\x. (X x - Normal r) pow 2)`
2763 >- METIS_TAC [integrable_finite_integral, lt_infty]
2764 >> Know `!x. x IN m_space p ==>
2765 (X x - Normal r) pow 2 = (\x. (X x - Normal c) pow 2) x +
2766 (\x. Normal (2 * (c - r)) * (X x) +
2767 Normal (r pow 2 - c pow 2)) x`
2768 >- (GEN_TAC >> BETA_TAC >> STRIP_TAC \\
2769 `?y. X x = Normal y` by PROVE_TAC [extreal_cases] >> POP_ORW \\
2770 SIMP_TAC real_ss [sub_pow2, extreal_not_infty, pow_2] \\
2771 SIMP_TAC real_ss [extreal_mul_def, extreal_add_def, extreal_sub_def, extreal_11,
2772 extreal_of_num_def] \\
2773 RW_TAC real_ss [REAL_SUB_LDISTRIB, REAL_SUB_RDISTRIB, REAL_ADD_LDISTRIB,
2774 REAL_ADD_RDISTRIB, REAL_ADD_ASSOC, POW_2, GSYM REAL_DOUBLE] \\
2775 REAL_ARITH_TAC)
2776 >> DISCH_TAC
2777 >> Know ‘integrable p (\x. (X x - Normal r) pow 2) <=>
2778 integrable p (\x. (\x. (X x - Normal c) pow 2) x +
2779 (\x. Normal (2 * (c - r)) * X x + Normal (r pow 2 - c pow 2)) x)’
2780 >- (MATCH_MP_TAC integrable_cong >> ASM_SIMP_TAC std_ss [])
2781 >> Rewr'
2782 >> MATCH_MP_TAC integrable_add >> fs []
2783 >> reverse CONJ_TAC
2784 >- (GEN_TAC >> DISCH_TAC >> DISJ1_TAC \\
2785 RW_TAC std_ss [pow_2] >| (* 2 subgoals *)
2786 [ (* goal 1 (of 2) *)
2787 `?y. X x = Normal y` by PROVE_TAC [extreal_cases] >> POP_ORW \\
2788 REWRITE_TAC [extreal_sub_def, extreal_mul_def, extreal_not_infty],
2789 (* goal 2 (of 2) *)
2790 `?y. X x = Normal y` by PROVE_TAC [extreal_cases] >> POP_ORW \\
2791 REWRITE_TAC [extreal_add_def, extreal_mul_def, extreal_not_infty] ])
2792 >> `(\x. Normal (2 * (c - r)) * X x + Normal (r pow 2 - c pow 2)) =
2793 (\x. (\x. Normal (2 * (c - r)) * X x) x + (\x. Normal (r pow 2 - c pow 2)) x)`
2794 by METIS_TAC [] >> POP_ORW
2795 >> MATCH_MP_TAC integrable_add
2796 >> RW_TAC std_ss [] (* 2 subgoals *)
2797 >| [ (* goal 1 (of 2) *)
2798 MATCH_MP_TAC integrable_cmul >> art [],
2799 (* goal 2 (of 2) *)
2800 MATCH_MP_TAC integrable_const >> art [extreal_of_num_def, lt_infty] ]
2801QED
2802
2803Theorem finite_second_moments_eq_finite_variance :
2804 !p X. prob_space p /\ real_random_variable X p ==>
2805 (finite_second_moments p X <=> variance p X < PosInf)
2806Proof
2807 rpt STRIP_TAC
2808 >> reverse EQ_TAC >> DISCH_TAC
2809 >- (MATCH_MP_TAC finite_variance_imp_finite_second_moments >> art [])
2810 >> fs [variance_def, central_moment_def, second_moment_def]
2811 >> `!r. second_moment p X (Normal r) < PosInf` by PROVE_TAC [finite_second_moments_all]
2812 >> fs [second_moment_def, moment_def]
2813 >> Q.PAT_ASSUM `!r. expectation p _ < PosInf` (MP_TAC o (Q.SPEC `0`))
2814 >> REWRITE_TAC [GSYM extreal_of_num_def, sub_rzero]
2815 >> DISCH_TAC
2816 >> Know `integrable p (\x. (X x) pow 2)`
2817 >- (RW_TAC std_ss [integrable_def] >| (* 3 subgoals *)
2818 [ (* goal 1 (of 3) *)
2819 MATCH_MP_TAC IN_MEASURABLE_BOREL_POW \\
2820 fs [prob_space_def, measure_space_def, real_random_variable_def,
2821 random_variable_def, space_def, p_space_def, events_def],
2822 (* goal 2 (of 3) *)
2823 Know `fn_plus (\x. (X x) pow 2) = (\x. (X x) pow 2)`
2824 >- (MATCH_MP_TAC FN_PLUS_POS_ID >> RW_TAC std_ss [le_pow2]) >> Rewr' \\
2825 Know `pos_fn_integral p (\x. (X x) pow 2) = integral p (\x. (X x) pow 2)`
2826 >- (MATCH_MP_TAC EQ_SYM \\
2827 MATCH_MP_TAC integral_pos_fn >> fs [prob_space_def, le_pow2]) \\
2828 Rewr' >> fs [expectation_def, lt_infty],
2829 (* goal 3 (of 3) *)
2830 Know `fn_minus (\x. (X x) pow 2) = (\x. 0)`
2831 >- (MATCH_MP_TAC FN_MINUS_POS_ZERO >> RW_TAC std_ss [le_pow2]) >> Rewr' \\
2832 Know `pos_fn_integral p (\x. 0) = 0`
2833 >- (MATCH_MP_TAC pos_fn_integral_zero >> fs [prob_space_def]) >> Rewr' \\
2834 REWRITE_TAC [extreal_of_num_def, extreal_not_infty] ])
2835 >> DISCH_TAC
2836 >> Know `integrable p X`
2837 >- (MATCH_MP_TAC integrable_from_square >> art []) >> DISCH_TAC
2838 >> `expectation p X <> PosInf /\ expectation p X <> NegInf`
2839 by METIS_TAC [integrable_imp_finite_expectation]
2840 >> `?c. expectation p X = Normal c` by PROVE_TAC [extreal_cases] >> art []
2841QED
2842
2843Theorem finite_second_moments_lemma[local] :
2844 !p X. prob_space p /\ real_random_variable X p ==>
2845 (variance p X < PosInf <=> second_moment p X 0 < PosInf)
2846Proof
2847 rpt STRIP_TAC
2848 >> Know `variance p X < PosInf <=> finite_second_moments p X`
2849 >- (MATCH_MP_TAC EQ_SYM \\
2850 MATCH_MP_TAC finite_second_moments_eq_finite_variance >> art []) >> Rewr'
2851 >> EQ_TAC >> STRIP_TAC
2852 >- (Know `finite_second_moments p X <=> !r. second_moment p X (Normal r) < PosInf`
2853 >- (MATCH_MP_TAC finite_second_moments_all >> art []) \\
2854 DISCH_THEN (fs o wrap) \\
2855 POP_ASSUM (REWRITE_TAC o wrap o (REWRITE_RULE [GSYM extreal_of_num_def]) o (Q.SPEC `0`)))
2856 >> REWRITE_TAC [finite_second_moments_def]
2857 >> Q.EXISTS_TAC `0` >> art []
2858QED
2859
2860(* alternative definition of `finite_second_moments` for easier verification *)
2861Theorem finite_second_moments_alt :
2862 !p X. prob_space p /\ real_random_variable X p ==>
2863 (finite_second_moments p X <=> second_moment p X 0 < PosInf)
2864Proof
2865 rpt STRIP_TAC
2866 >> METIS_TAC [finite_second_moments_eq_finite_variance,
2867 finite_second_moments_lemma]
2868QED
2869
2870(* |- !p X.
2871 prob_space p /\ real_random_variable X p ==>
2872 (finite_second_moments p X <=> expectation p (\x. (X x) pow 2) < PosInf)
2873 *)
2874Theorem finite_second_moments_literally =
2875 REWRITE_RULE [second_moment_def, moment_def, sub_rzero] finite_second_moments_alt
2876
2877Theorem finite_second_moments_eq_integrable_square :
2878 !p X. prob_space p /\ real_random_variable X p ==>
2879 (finite_second_moments p X <=> integrable p (\x. X x pow 2))
2880Proof
2881 rpt STRIP_TAC
2882 >> EQ_TAC >> STRIP_TAC
2883 >| [ (* goal 1 (of 2) *)
2884 RW_TAC std_ss [integrable_def] >| (* 3 subgoals *)
2885 [ (* goal 1.1 (of 3) *)
2886 MATCH_MP_TAC IN_MEASURABLE_BOREL_POW \\
2887 fs [prob_space_def, measure_space_def, real_random_variable_def,
2888 random_variable_def, space_def, p_space_def, events_def],
2889 (* goal 1.2 (of 3) *)
2890 Know `fn_plus (\x. (X x) pow 2) = (\x. (X x) pow 2)`
2891 >- (MATCH_MP_TAC FN_PLUS_POS_ID >> RW_TAC std_ss [le_pow2]) >> Rewr' \\
2892 Know `pos_fn_integral p (\x. (X x) pow 2) = integral p (\x. (X x) pow 2)`
2893 >- (MATCH_MP_TAC EQ_SYM \\
2894 MATCH_MP_TAC integral_pos_fn >> fs [prob_space_def, le_pow2]) \\
2895 Rewr' >> REWRITE_TAC [lt_infty] \\
2896 Know `finite_second_moments p X <=> second_moment p X 0 < PosInf`
2897 >- (MATCH_MP_TAC finite_second_moments_alt >> art []) \\
2898 REWRITE_TAC [second_moment_def, moment_def, sub_rzero, expectation_def] \\
2899 DISCH_THEN (fs o wrap),
2900 (* goal 1.3 (of 3) *)
2901 Know `fn_minus (\x. (X x) pow 2) = (\x. 0)`
2902 >- (MATCH_MP_TAC FN_MINUS_POS_ZERO >> RW_TAC std_ss [le_pow2]) >> Rewr' \\
2903 Know `pos_fn_integral p (\x. 0) = 0`
2904 >- (MATCH_MP_TAC pos_fn_integral_zero >> fs [prob_space_def]) >> Rewr' \\
2905 REWRITE_TAC [extreal_of_num_def, extreal_not_infty] ],
2906 (* goal 2 (of 2) *)
2907 IMP_RES_TAC integrable_imp_finite_expectation \\
2908 Know `finite_second_moments p X <=> second_moment p X 0 < PosInf`
2909 >- (MATCH_MP_TAC finite_second_moments_alt >> art []) \\
2910 REWRITE_TAC [second_moment_def, moment_def, sub_rzero] \\
2911 Rewr' >> art [GSYM lt_infty] ]
2912QED
2913
2914(* more general version *)
2915Theorem finite_second_moments_eq_integrable_squares :
2916 !p X. prob_space p /\ real_random_variable X p ==>
2917 (finite_second_moments p X <=> !c. integrable p (\x. (X x - Normal c) pow 2))
2918Proof
2919 rpt STRIP_TAC
2920 >> EQ_TAC >> STRIP_TAC
2921 >| [ (* goal 1 (of 2) *)
2922 RW_TAC std_ss [integrable_def] >| (* 3 subgoals *)
2923 [ (* goal 1.1 (of 3) *)
2924 `!x. (X x - Normal c) pow 2 = ((\x. X x - Normal c) x) pow 2` by METIS_TAC [] \\
2925 POP_ORW >> MATCH_MP_TAC IN_MEASURABLE_BOREL_POW \\
2926 fs [prob_space_def, measure_space_def, real_random_variable_def,
2927 random_variable_def, space_def, p_space_def, events_def] \\
2928 MATCH_MP_TAC IN_MEASURABLE_BOREL_SUB \\
2929 qexistsl_tac [`X`, `\x. Normal c`] >> RW_TAC std_ss [] \\
2930 MATCH_MP_TAC IN_MEASURABLE_BOREL_CONST >> Q.EXISTS_TAC `Normal c` \\
2931 RW_TAC std_ss [space_def],
2932 (* goal 1.2 (of 3) *)
2933 Know `fn_plus (\x. (X x - Normal c) pow 2) = (\x. (X x - Normal c) pow 2)`
2934 >- (MATCH_MP_TAC FN_PLUS_POS_ID >> RW_TAC std_ss [le_pow2]) >> Rewr' \\
2935 Know `pos_fn_integral p (\x. (X x - Normal c) pow 2) =
2936 integral p (\x. (X x - Normal c) pow 2)`
2937 >- (MATCH_MP_TAC EQ_SYM \\
2938 MATCH_MP_TAC integral_pos_fn >> fs [prob_space_def, le_pow2]) \\
2939 Rewr' >> REWRITE_TAC [lt_infty] \\
2940 IMP_RES_TAC finite_second_moments_all \\
2941 fs [second_moment_def, moment_def, expectation_def],
2942 (* goal 1.3 (of 3) *)
2943 Know `fn_minus (\x. (X x - Normal c) pow 2) = (\x. 0)`
2944 >- (MATCH_MP_TAC FN_MINUS_POS_ZERO >> RW_TAC std_ss [le_pow2]) >> Rewr' \\
2945 Know `pos_fn_integral p (\x. 0) = 0`
2946 >- (MATCH_MP_TAC pos_fn_integral_zero >> fs [prob_space_def]) >> Rewr' \\
2947 REWRITE_TAC [extreal_of_num_def, extreal_not_infty] ],
2948 (* goal 2 (of 2) *)
2949 Know `finite_second_moments p X <=> second_moment p X (Normal c) < PosInf`
2950 >- (EQ_TAC >> DISCH_TAC >| (* 2 subgoals *)
2951 [ (* goal 2.1 (of 2) *)
2952 IMP_RES_TAC finite_second_moments_all >> art [],
2953 (* goal 2.2 (of 2) *)
2954 REWRITE_TAC [finite_second_moments_def] \\
2955 Q.EXISTS_TAC `Normal c` >> art [] ]) >> Rewr' \\
2956 REWRITE_TAC [GSYM lt_infty, second_moment_def, moment_def] \\
2957 METIS_TAC [integrable_imp_finite_expectation] ]
2958QED
2959
2960Theorem bounded_imp_finite_second_moments :
2961 !p X. prob_space p /\ random_variable X p Borel /\
2962 (?r. !x. x IN p_space p ==> abs (X x) <= Normal r) ==> finite_second_moments p X
2963Proof
2964 rpt STRIP_TAC
2965 >> Know ‘real_random_variable X p’
2966 >- (rw [real_random_variable_def] \\
2967 fs [abs_bounds, lt_infty] >| (* 2 subgoals *)
2968 [ (* goal 1 (of 2) *)
2969 MATCH_MP_TAC lte_trans >> Q.EXISTS_TAC ‘Normal (-r)’ \\
2970 fs [lt_infty, extreal_ainv_def],
2971 (* goal 2 (of 2) *)
2972 MATCH_MP_TAC let_trans >> Q.EXISTS_TAC ‘Normal r’ \\
2973 rw [lt_infty] ])
2974 >> DISCH_TAC
2975 >> Know ‘finite_second_moments p X <=> integrable p (\x. X x pow 2)’
2976 >- (MATCH_MP_TAC finite_second_moments_eq_integrable_square >> art [])
2977 >> Rewr'
2978 >> fs [integrable_def, real_random_variable, prob_space_def, p_space_def, events_def]
2979 >> CONJ_TAC
2980 >- (MATCH_MP_TAC IN_MEASURABLE_BOREL_POW \\
2981 fs [measure_space_def])
2982 >> reverse CONJ_TAC
2983 >- (rw [FN_MINUS_POS_ZERO, le_pow2] \\
2984 rw [pos_fn_integral_zero, extreal_of_num_def, extreal_not_infty])
2985 >> rw [FN_PLUS_POS_ID, le_pow2, lt_infty]
2986 >> MATCH_MP_TAC let_trans
2987 >> Q.EXISTS_TAC ‘pos_fn_integral p (\x. Normal (r pow 2))’
2988 (* applying pos_fn_integral_const *)
2989 >> reverse CONJ_TAC
2990 >- (REWRITE_TAC [GSYM lt_infty] \\
2991 Suff ‘pos_fn_integral p (\x. Normal (r pow 2)) =
2992 Normal (r pow 2) * measure p (m_space p)’ >- rw [] \\
2993 MATCH_MP_TAC pos_fn_integral_const \\
2994 rw [le_pow2, lt_infty, extreal_of_num_def, extreal_not_infty])
2995 >> MATCH_MP_TAC pos_fn_integral_mono
2996 >> rw [le_pow2, GSYM extreal_pow_def]
2997 (* ‘0 <= r’ is implicit *)
2998 >> reverse (Cases_on ‘0 <= r’)
2999 >- (fs [GSYM real_lt] \\
3000 Suff ‘abs (X x) < 0’ >- METIS_TAC [abs_pos, let_antisym] \\
3001 MATCH_MP_TAC let_trans >> Q.EXISTS_TAC ‘Normal r’ >> rw [] \\
3002 rw [extreal_of_num_def, extreal_lt_eq])
3003 >> ‘X x pow 2 = (abs (X x)) pow 2’ by rw [abs_pow2] >> POP_ORW
3004 >> MATCH_MP_TAC pow_le >> rw [abs_pos]
3005QED
3006
3007(* NOTE: ‘integrable p X’ makes sure that ‘expectation p X’ exists and is finite *)
3008Theorem bounded_imp_finite_second_moments' :
3009 !p X. prob_space p /\ random_variable X p Borel /\ integrable p X /\
3010 (?r. !x. x IN p_space p ==> abs (X x - expectation p X) <= Normal r) ==>
3011 finite_second_moments p X
3012Proof
3013 qx_genl_tac [‘p’, ‘Y’] >> rpt STRIP_TAC
3014 >> MATCH_MP_TAC bounded_imp_finite_second_moments >> art []
3015 >> Q.ABBREV_TAC ‘M = expectation p Y’
3016 >> ‘M <> PosInf /\ M <> NegInf’ by METIS_TAC [integrable_imp_finite_expectation]
3017 >> ‘r < 0 \/ 0 <= r’ by PROVE_TAC [REAL_LTE_TOTAL]
3018 >- (‘?x. x IN p_space p’ by METIS_TAC [PROB_SPACE_NOT_EMPTY, MEMBER_NOT_EMPTY] \\
3019 ‘Normal r < 0’ by METIS_TAC [extreal_of_num_def, extreal_lt_eq] \\
3020 ‘abs (Y x - M) < 0’ by METIS_TAC [let_trans] \\
3021 METIS_TAC [abs_pos, let_antisym])
3022 >> ‘?m. M = Normal m’ by METIS_TAC [extreal_cases] >> fs []
3023 >> rename1 ‘0 <= a’
3024 >> Know ‘!x. x IN p_space p ==> Y x <> NegInf /\ Y x <> PosInf’
3025 >- (NTAC 2 STRIP_TAC \\
3026 Q.PAT_X_ASSUM ‘!x. x IN p_space p ==> P’ (MP_TAC o (Q.SPEC ‘x’)) \\
3027 RW_TAC std_ss [] >> CCONTR_TAC >> fs [extreal_abs_def, extreal_sub_def])
3028 >> DISCH_TAC
3029 >> Q.EXISTS_TAC ‘max (m + a) (abs (m - a))’
3030 >> RW_TAC std_ss []
3031 >> Q.PAT_X_ASSUM ‘!x. x IN p_space p ==> Y x <> NegInf /\ Y x <> PosInf’
3032 (MP_TAC o (Q.SPEC ‘x’))
3033 >> Q.PAT_X_ASSUM ‘!x. x IN p_space p ==> abs _ <= Normal a’ (MP_TAC o (Q.SPEC ‘x’))
3034 >> RW_TAC std_ss []
3035 >> ‘?y. Y x = Normal y’ by METIS_TAC [extreal_cases]
3036 >> gs [extreal_sub_def, extreal_abs_def]
3037 >> rw [REAL_LE_MAX]
3038 >> ‘0 <= m \/ m <= 0’ by PROVE_TAC [REAL_LE_TOTAL]
3039 >| [ (* goal 1 (of 2) *)
3040 DISJ1_TAC \\
3041 ‘abs m + abs (y - m) <= m + a’ by PROVE_TAC [REAL_LE_LADD, ABS_REFL] \\
3042 MATCH_MP_TAC REAL_LE_TRANS \\
3043 Q.EXISTS_TAC ‘abs m + abs (y - m)’ >> art [] \\
3044 ‘abs y = abs (m + (y - m))’ by REAL_ARITH_TAC >> POP_ORW \\
3045 REWRITE_TAC [ABS_TRIANGLE],
3046 (* goal 2 (of 2) *)
3047 DISJ2_TAC \\
3048 MATCH_MP_TAC REAL_LE_TRANS \\
3049 Q.EXISTS_TAC ‘abs m + abs (y - m)’ >> REWRITE_TAC [ABS_TRIANGLE_SUB] \\
3050 Suff ‘abs (m - a) = abs m + a’ >- rw [REAL_LE_LADD] \\
3051 ‘abs (m - a) = abs (a - m)’ by REAL_ARITH_TAC >> POP_ORW \\
3052 Know ‘abs (a - m) = a - m’
3053 >- (rw [ABS_REFL, REAL_SUB_LE] \\
3054 MATCH_MP_TAC REAL_LE_TRANS >> Q.EXISTS_TAC ‘0’ >> art []) >> Rewr' \\
3055 Know ‘abs (--m) = -m’ >- art [Once ABS_NEG, ABS_REFL, REAL_NEG_GE0] \\
3056 REWRITE_TAC [REAL_NEG_NEG] >> Rewr' \\
3057 REAL_ARITH_TAC ]
3058QED
3059
3060Theorem finite_second_moments_imp_integrable :
3061 !p X. prob_space p /\ real_random_variable X p /\ finite_second_moments p X ==>
3062 integrable p X
3063Proof
3064 rpt GEN_TAC >> STRIP_TAC
3065 >> MATCH_MP_TAC integrable_from_square >> art []
3066 >> IMP_RES_TAC finite_second_moments_eq_integrable_square
3067QED
3068
3069(* This theorem doesn't hold for general measure spaces (cf. integrable_bounded) *)
3070Theorem bounded_imp_integrable :
3071 !p X. prob_space p /\ random_variable X p Borel /\
3072 (?r. !x. x IN p_space p ==> abs (X x) <= Normal r) ==> integrable p X
3073Proof
3074 rpt STRIP_TAC
3075 >> MATCH_MP_TAC finite_second_moments_imp_integrable >> art []
3076 >> reverse CONJ_TAC
3077 >- (MATCH_MP_TAC bounded_imp_finite_second_moments >> art [] \\
3078 Q.EXISTS_TAC ‘r’ >> art [])
3079 >> FULL_SIMP_TAC std_ss [abs_bounds]
3080 >> RW_TAC std_ss [real_random_variable_def, lt_infty]
3081 >| [ (* goal 1 (of 2) *)
3082 MATCH_MP_TAC lte_trans \\
3083 Q.EXISTS_TAC ‘-Normal r’ >> rw [lt_infty, extreal_ainv_def],
3084 (* goal 2 (of 2) *)
3085 MATCH_MP_TAC let_trans \\
3086 Q.EXISTS_TAC ‘Normal r’ >> rw [lt_infty, extreal_ainv_def] ]
3087QED
3088
3089Theorem finite_second_moments_imp_finite_expectation :
3090 !p X. prob_space p /\ real_random_variable X p /\ finite_second_moments p X ==>
3091 expectation p X <> PosInf /\ expectation p X <> NegInf
3092Proof
3093 rpt GEN_TAC >> STRIP_TAC
3094 >> MATCH_MP_TAC integrable_imp_finite_expectation >> art []
3095 >> MATCH_MP_TAC finite_second_moments_imp_integrable >> art []
3096QED
3097
3098Theorem finite_second_moments_cmul :
3099 !p X c. prob_space p /\ real_random_variable X p /\ finite_second_moments p X ==>
3100 finite_second_moments p (\x. Normal c * X x)
3101Proof
3102 rpt STRIP_TAC
3103 >> ‘real_random_variable (\x. Normal c * X x) p’
3104 by METIS_TAC [real_random_variable_cmul]
3105 >> ‘integrable p X’ by METIS_TAC [finite_second_moments_imp_integrable]
3106 >> ‘integrable p (\x. X x pow 2)’
3107 by METIS_TAC [finite_second_moments_eq_integrable_square]
3108 >> Q.PAT_X_ASSUM ‘finite_second_moments p X’ MP_TAC
3109 >> RW_TAC std_ss [finite_second_moments_literally, GSYM lt_infty, pow_mul, extreal_pow_def]
3110 >> Know ‘expectation p (\x. Normal (c pow 2) * X x pow 2) =
3111 Normal (c pow 2) * expectation p (\x. X x pow 2)’
3112 >- (HO_MATCH_MP_TAC expectation_cmul >> art [])
3113 >> Rewr'
3114 >> Know ‘expectation p (\x. X x pow 2) <> NegInf’
3115 >- (MATCH_MP_TAC pos_not_neginf \\
3116 MATCH_MP_TAC expectation_pos >> rw [le_pow2])
3117 >> DISCH_TAC
3118 >> ‘?r. expectation p (\x. X x pow 2) = Normal r’ by METIS_TAC [extreal_cases]
3119 >> rw [extreal_mul_def]
3120QED
3121
3122Theorem finite_second_moments_ainv :
3123 !p X. prob_space p /\ real_random_variable X p /\ finite_second_moments p X ==>
3124 finite_second_moments p (\x. -X x)
3125Proof
3126 rpt STRIP_TAC
3127 >> Know ‘(\x. -X x) = (\x. Normal (-1) * X x)’
3128 >- RW_TAC std_ss [FUN_EQ_THM, Once neg_minus1, extreal_of_num_def, extreal_ainv_def]
3129 >> Rewr'
3130 >> MATCH_MP_TAC finite_second_moments_cmul >> art []
3131QED
3132
3133Theorem finite_second_moments_cdiv :
3134 !p X c. prob_space p /\ real_random_variable X p /\
3135 finite_second_moments p X /\ c <> 0 ==>
3136 finite_second_moments p (\x. X x / Normal c)
3137Proof
3138 rw [extreal_div_def, extreal_inv_def, Once mul_comm]
3139 >> MATCH_MP_TAC finite_second_moments_cmul >> art []
3140QED
3141
3142Theorem finite_second_moments_cong :
3143 !p X Y. prob_space p /\ (!x. x IN p_space p ==> X x = Y x) ==>
3144 (finite_second_moments p X <=> finite_second_moments p Y)
3145Proof
3146 RW_TAC std_ss [finite_second_moments_def, second_moment_def, moment_def]
3147 >> Suff ‘!a. expectation p (\x. (X x - a) pow 2) =
3148 expectation p (\x. (Y x - a) pow 2)’ >- rw []
3149 >> Q.X_GEN_TAC ‘a’
3150 >> MATCH_MP_TAC expectation_cong >> rw []
3151QED
3152
3153(* An easy corollary of Minkowski_inequality *)
3154Theorem finite_second_moments_add :
3155 !p X Y. prob_space p /\
3156 real_random_variable X p /\ real_random_variable Y p /\
3157 finite_second_moments p X /\ finite_second_moments p Y ==>
3158 finite_second_moments p (\x. X x + Y x)
3159Proof
3160 rpt STRIP_TAC
3161 >> ‘real_random_variable (\x. X x + Y x) p’
3162 by METIS_TAC [real_random_variable_add]
3163 >> rfs [finite_second_moments_eq_integrable_square, prob_space_def]
3164 >> fs [real_random_variable, p_space_def, events_def]
3165 >> Suff ‘(\x. X x + Y x) IN L2_space p’
3166 >- rw [L2_space_alt_integrable_square]
3167 >> MP_TAC (Q.SPECL [‘2’, ‘p’, ‘X’, ‘Y’] Minkowski_inequality)
3168 >> ‘1 <= (2 :extreal)’ by rw [extreal_of_num_def, extreal_le_eq]
3169 >> rw [L2_space_alt_integrable_square]
3170QED
3171
3172Theorem finite_second_moments_sum :
3173 !p X (J :'index set). prob_space p /\ FINITE J /\
3174 (!i. i IN J ==> real_random_variable (X i) p) /\
3175 (!i. i IN J ==> finite_second_moments p (X i)) ==>
3176 finite_second_moments p (\x. SIGMA (\n. X n x) J)
3177Proof
3178 rpt STRIP_TAC
3179 >> NTAC 3 (POP_ASSUM MP_TAC)
3180 >> qid_spec_tac ‘J’
3181 >> Induct_on ‘J’
3182 >> rw [EXTREAL_SUM_IMAGE_EMPTY]
3183 >- (IMP_RES_TAC real_random_variable_zero \\
3184 rw [finite_second_moments_eq_finite_variance, variance_zero])
3185 >> Know ‘finite_second_moments p (\x. SIGMA (\n. X n x) (e INSERT J)) <=>
3186 finite_second_moments p (\x. X e x + SIGMA (\n. X n x) (J DELETE e))’
3187 >- (MATCH_MP_TAC finite_second_moments_cong >> rw [] \\
3188 MATCH_MP_TAC (List.nth
3189 (CONJUNCTS (BETA_RULE
3190 (Q.SPEC ‘(\n. X n x)’ EXTREAL_SUM_IMAGE_THM)),2)) \\
3191 simp [] >> DISJ1_TAC >> Q.X_GEN_TAC ‘i’ \\
3192 METIS_TAC [real_random_variable])
3193 >> Rewr'
3194 >> ‘J DELETE e = J’ by PROVE_TAC [DELETE_NON_ELEMENT]
3195 >> POP_ORW
3196 >> HO_MATCH_MP_TAC finite_second_moments_add
3197 >> RW_TAC std_ss []
3198 >| [ (* goal 1 (of 3) *)
3199 METIS_TAC [],
3200 (* goal 2 (of 3) *)
3201 MATCH_MP_TAC real_random_variable_sum >> RW_TAC std_ss [],
3202 (* goal 3 (of 3) *)
3203 METIS_TAC [] ]
3204QED
3205
3206Theorem finite_second_moments_sub :
3207 !p X Y. prob_space p /\
3208 real_random_variable X p /\ real_random_variable Y p /\
3209 finite_second_moments p X /\ finite_second_moments p Y ==>
3210 finite_second_moments p (\x. X x - Y x)
3211Proof
3212 rpt STRIP_TAC
3213 >> Know ‘finite_second_moments p (\x. X x - Y x) <=>
3214 finite_second_moments p (\x. X x + -Y x)’
3215 >- (MATCH_MP_TAC finite_second_moments_cong >> rw [] \\
3216 MATCH_MP_TAC extreal_sub_add >> METIS_TAC [real_random_variable])
3217 >> Rewr'
3218 >> HO_MATCH_MP_TAC finite_second_moments_add >> rw []
3219 >| [ (* goal 1 (of 2) *)
3220 MATCH_MP_TAC real_random_variable_ainv >> art [],
3221 (* goal 2 (of 2) *)
3222 MATCH_MP_TAC finite_second_moments_ainv >> art [] ]
3223QED
3224
3225(* An easy corollary of Cauchy_Schwarz_inequality *)
3226Theorem finite_second_moments_imp_integrable_mul :
3227 !p X Y. prob_space p /\
3228 real_random_variable X p /\ real_random_variable Y p /\
3229 finite_second_moments p X /\ finite_second_moments p Y ==>
3230 integrable p (\x. X x * Y x)
3231Proof
3232 rpt STRIP_TAC
3233 >> rfs [finite_second_moments_eq_integrable_square, prob_space_def]
3234 >> fs [real_random_variable, p_space_def, events_def]
3235 >> MP_TAC (Q.SPECL [‘p’, ‘X’, ‘Y’] Cauchy_Schwarz_inequality)
3236 >> rw [L2_space_alt_integrable_square]
3237QED
3238
3239Theorem expectation_real_affine :
3240 !p X c. prob_space p /\ real_random_variable X p /\ integrable p X /\
3241 c <> PosInf /\ c <> NegInf ==>
3242 (expectation p (\x. X x + c) = expectation p X + c)
3243Proof
3244 RW_TAC std_ss [real_random_variable_def, prob_space_def, p_space_def,
3245 events_def, expectation_def]
3246 >> `?r. c = Normal r` by METIS_TAC [extreal_cases] >> POP_ORW
3247 >> Know `integral p (\x. X x + (\x. Normal r) x) =
3248 integral p X + integral p (\x. Normal r)`
3249 >- (MATCH_MP_TAC integral_add >> rw [integral_const] \\
3250 MATCH_MP_TAC integrable_const >> rw [lt_infty])
3251 >> BETA_TAC >> Rewr'
3252 >> rw [integral_const, extreal_add_def, extreal_sub_def]
3253QED
3254
3255Theorem expectation_normal :
3256 !p X. prob_space p /\ integrable p X ==> ?r. expectation p X = Normal r
3257Proof
3258 fs [prob_space_def, expectation_def, integrable_normal_integral]
3259QED
3260
3261Theorem expectation_finite = integrable_imp_finite_expectation
3262
3263Theorem variance_real_affine :
3264 !p X c. prob_space p /\ real_random_variable X p /\ integrable p X /\
3265 c <> PosInf /\ c <> NegInf ==> (variance p (\x. X x + c) = variance p X)
3266Proof
3267 RW_TAC std_ss [variance_alt]
3268 >> MATCH_MP_TAC expectation_cong
3269 >> RW_TAC std_ss [expectation_real_affine]
3270 >> `?r. c = Normal r` by METIS_TAC [extreal_cases] >> POP_ORW
3271 >> `?e. expectation p X = Normal e` by METIS_TAC [expectation_normal]
3272 >> fs [real_random_variable_def]
3273 >> `?z. X x = Normal z` by METIS_TAC [extreal_cases]
3274 >> simp [extreal_add_def, extreal_sub_def]
3275 >> Suff ‘z + r - (e + r) = z - e’ >- rw []
3276 >> REAL_ARITH_TAC
3277QED
3278
3279Theorem variance_real_affine' :
3280 !p X c. prob_space p /\ real_random_variable X p /\ integrable p X /\
3281 c <> PosInf /\ c <> NegInf ==> (variance p (\x. X x - c) = variance p X)
3282Proof
3283 rpt STRIP_TAC
3284 >> Know ‘variance p (\x. X x - c) = variance p (\x. X x + -c)’
3285 >- (MATCH_MP_TAC variance_cong >> rw [] \\
3286 MATCH_MP_TAC extreal_sub_add \\
3287 fs [real_random_variable_def]) >> Rewr'
3288 >> MATCH_MP_TAC variance_real_affine >> art []
3289 >> `?r. c = Normal r` by METIS_TAC [extreal_cases]
3290 >> rw [extreal_ainv_def, extreal_not_infty]
3291QED
3292
3293Theorem variance_cmul :
3294 !p X c. prob_space p /\ real_random_variable X p /\
3295 finite_second_moments p X ==>
3296 (variance p (\x. Normal c * X x) = Normal (c pow 2) * variance p X)
3297Proof
3298 rw [variance_alt]
3299 >> ‘integrable p X’ by PROVE_TAC [finite_second_moments_imp_integrable]
3300 >> ASM_SIMP_TAC std_ss [expectation_cmul]
3301 >> Know ‘expectation p (\x. (Normal c * X x - Normal c * expectation p X) pow 2) =
3302 expectation p (\x. (Normal c * (X x - expectation p X)) pow 2)’
3303 >- (MATCH_MP_TAC expectation_cong >> rw [] \\
3304 Suff ‘Normal c * (X x - expectation p X) =
3305 Normal c * X x - Normal c * expectation p X’ >- Rewr \\
3306 MATCH_MP_TAC sub_ldistrib \\
3307 fs [real_random_variable_def, extreal_not_infty] \\
3308 PROVE_TAC [integrable_imp_finite_expectation])
3309 >> Rewr'
3310 >> REWRITE_TAC [pow_mul, extreal_pow_def]
3311 >> HO_MATCH_MP_TAC expectation_cmul >> art []
3312 >> ‘expectation p X <> PosInf /\ expectation p X <> NegInf’
3313 by PROVE_TAC [integrable_imp_finite_expectation]
3314 >> ‘?r. expectation p X = Normal r’ by METIS_TAC [extreal_cases]
3315 >> POP_ORW
3316 >> METIS_TAC [finite_second_moments_eq_integrable_squares]
3317QED
3318
3319Theorem variance_cdiv :
3320 !p X c. prob_space p /\ real_random_variable X p /\
3321 finite_second_moments p X /\ c <> 0 ==>
3322 (variance p (\x. X x / Normal c) = variance p X / Normal (c pow 2))
3323Proof
3324 rw [extreal_div_def, extreal_inv_def, POW_INV]
3325 >> ONCE_REWRITE_TAC [mul_comm]
3326 >> MATCH_MP_TAC variance_cmul >> art []
3327QED
3328
3329(* ------------------------------------------------------------------------- *)
3330(* Markov and Chebyshev's Inequalities *)
3331(* ------------------------------------------------------------------------- *)
3332
3333(* Markov's inequality (probability version) *)
3334Theorem prob_markov_inequality :
3335 !p X a c. prob_space p /\ integrable p X /\ 0 < c /\ a IN events p ==>
3336 prob p ({x | c <= abs (X x)} INTER a) <=
3337 inv c * (expectation p (\x. abs (X x) * indicator_fn a x))
3338Proof
3339 RW_TAC std_ss [prob_space_def, prob_def, events_def, expectation_def]
3340 >> MATCH_MP_TAC markov_inequality >> art []
3341QED
3342
3343(* The special version with `a = p_space p`, c.f. PROB_GSPEC for moving `a` outside *)
3344Theorem prob_markov_ineq :
3345 !p X c. prob_space p /\ integrable p X /\ 0 < c ==>
3346 prob p ({x | c <= abs (X x)} INTER p_space p) <= inv c * expectation p (abs o X)
3347Proof
3348 RW_TAC std_ss [prob_space_def, p_space_def, prob_def, events_def, expectation_def]
3349 >> MATCH_MP_TAC markov_ineq >> art []
3350QED
3351
3352(* Chebyshev's inequality (probability version) *)
3353Theorem chebyshev_inequality :
3354 !p X a t c. prob_space p /\ real_random_variable X p /\
3355 finite_second_moments p X /\ 0 < t /\ a IN events p ==>
3356 prob p ({x | t <= abs (X x - Normal c)} INTER a) <=
3357 inv (t pow 2) * (expectation p (\x. (X x - Normal c) pow 2 * indicator_fn a x))
3358Proof
3359 rpt STRIP_TAC
3360 >> Know `!x. t <= abs (X x - Normal c) <=> t pow 2 <= (X x - Normal c) pow 2`
3361 >- (GEN_TAC \\
3362 Know `0 <= t /\ 0 <= abs (X x - Normal c)` >- PROVE_TAC [lt_imp_le, abs_pos] \\
3363 DISCH_THEN (REWRITE_TAC o wrap o (MATCH_MP pow2_le_eq)) \\
3364 REWRITE_TAC [abs_pow2]) >> Rewr'
3365 >> Q.ABBREV_TAC `Y = \x. (X x - Normal c) pow 2`
3366 >> Know `!x. (X x - Normal c) pow 2 = abs (Y x)`
3367 >- (GEN_TAC >> Q.UNABBREV_TAC `Y` >> BETA_TAC \\
3368 `0 <= (X x - Normal c) pow 2` by PROVE_TAC [le_pow2] >> fs [GSYM abs_refl]) >> Rewr'
3369 >> MATCH_MP_TAC prob_markov_inequality >> art []
3370 >> reverse CONJ_TAC >- (MATCH_MP_TAC pow_pos_lt >> art [])
3371 >> Q.UNABBREV_TAC `Y`
3372 >> METIS_TAC [finite_second_moments_eq_integrable_squares]
3373QED
3374
3375(* The special version with `a = p_space p` *)
3376Theorem chebyshev_ineq :
3377 !p X t c. prob_space p /\ real_random_variable X p /\
3378 finite_second_moments p X /\ 0 < t ==>
3379 prob p ({x | t <= abs (X x - Normal c)} INTER p_space p) <=
3380 inv (t pow 2) * (expectation p (\x. (X x - Normal c) pow 2))
3381Proof
3382 rpt STRIP_TAC
3383 >> Know `expectation p (\x. (X x - Normal c) pow 2) =
3384 expectation p (\x. (\x. (X x - Normal c) pow 2) x * indicator_fn (p_space p) x)`
3385 >- (FULL_SIMP_TAC pure_ss [prob_space_def, p_space_def, events_def, expectation_def] \\
3386 MATCH_MP_TAC integral_mspace >> art [])
3387 >> BETA_TAC >> Rewr'
3388 >> MATCH_MP_TAC chebyshev_inequality >> art []
3389 >> MATCH_MP_TAC EVENTS_SPACE >> art []
3390QED
3391
3392(* The special version with `a = p_space p` and `m = expectation p X` *)
3393Theorem chebyshev_ineq_variance :
3394 !p X t. prob_space p /\ real_random_variable X p /\
3395 finite_second_moments p X /\ 0 < t ==>
3396 prob p ({x | t <= abs (X x - expectation p X)} INTER p_space p) <=
3397 inv (t pow 2) * variance p X
3398Proof
3399 RW_TAC std_ss [variance_alt]
3400 >> IMP_RES_TAC finite_second_moments_imp_finite_expectation
3401 >> `?c. expectation p X = Normal c` by PROVE_TAC [extreal_cases] >> POP_ORW
3402 >> MATCH_MP_TAC chebyshev_ineq >> art []
3403QED
3404
3405(* The special version with ‘<’ in place of ‘<=’ *)
3406Theorem chebyshev_ineq_variance' :
3407 !p X t. prob_space p /\ real_random_variable X p /\
3408 finite_second_moments p X /\ 0 < t ==>
3409 prob p ({x | t < abs (X x - expectation p X)} INTER p_space p) <=
3410 inv (t pow 2) * variance p X
3411Proof
3412 rpt STRIP_TAC
3413 >> MATCH_MP_TAC le_trans
3414 >> Q.EXISTS_TAC ‘prob p ({x | t <= abs (X x - expectation p X)} INTER p_space p)’
3415 >> reverse CONJ_TAC
3416 >- (MATCH_MP_TAC chebyshev_ineq_variance >> art [])
3417 >> MATCH_MP_TAC PROB_INCREASING >> art []
3418 >> REWRITE_TAC [CONJ_ASSOC]
3419 >> reverse CONJ_TAC
3420 >- (rw [SUBSET_DEF, GSPECIFICATION] \\
3421 MATCH_MP_TAC lt_imp_le >> art [])
3422 >> fs [real_random_variable, prob_space_def, p_space_def, events_def]
3423 >> Q.ABBREV_TAC ‘Y = \x. X x - expectation p X’ >> simp []
3424 >> ‘sigma_algebra (measurable_space p)’
3425 by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA]
3426 >> Know ‘Y IN measurable (m_space p,measurable_sets p) Borel’
3427 >- (rw [Abbr ‘Y’] \\
3428 MATCH_MP_TAC IN_MEASURABLE_BOREL_SUB' \\
3429 qexistsl_tac [‘X’, ‘\x. expectation p X’] >> simp [] \\
3430 fs [measure_space_def] \\
3431 MATCH_MP_TAC IN_MEASURABLE_BOREL_CONST' >> art [])
3432 >> DISCH_TAC
3433 >> rw [lt_abs_bounds, le_abs_bounds]
3434 >| [ (* goal 1 (of 2) *)
3435 ‘{x | Y x < -t \/ t < Y x} INTER m_space p =
3436 ({x | Y x < -t} INTER m_space p) UNION
3437 ({x | t < Y x} INTER m_space p)’ by SET_TAC [] >> POP_ORW \\
3438 MATCH_MP_TAC MEASURE_SPACE_UNION >> art [] \\
3439 METIS_TAC [IN_MEASURABLE_BOREL_ALL_MEASURE],
3440 (* goal 2 (of 2) *)
3441 ‘{x | Y x <= -t \/ t <= Y x} INTER m_space p =
3442 ({x | Y x <= -t} INTER m_space p) UNION
3443 ({x | t <= Y x} INTER m_space p)’ by SET_TAC [] >> POP_ORW \\
3444 MATCH_MP_TAC MEASURE_SPACE_UNION >> art [] \\
3445 METIS_TAC [IN_MEASURABLE_BOREL_ALL_MEASURE] ]
3446QED
3447
3448(******************************************************************************)
3449(* Independent families [3, p.31-33] - 9 definitions *)
3450(******************************************************************************)
3451
3452(* "The concept of mutual independence of two or more experiments holds,
3453 in a certain sense, a central position in the theory of probability....
3454 Historically, the independence of experiments and random variables represents
3455 the very mathematical concept that has given the theory of probability its
3456 peculiar stamp."
3457
3458 -- A. N. Kolmogorov, "Foundations of the Theory of Probability." [1] *)
3459
3460(* 1. independence of two events: (DO NOT CHANGE) *)
3461Definition indep_def :
3462 indep p a b = (a IN events p /\ b IN events p /\
3463 (prob p (a INTER b) = prob p a * prob p b))
3464End
3465
3466(* 2. extension of `indep`: a sequence of pairwise independent events
3467
3468 new definition based on real_topologyTheory.pairwise, users may use
3469 `pairwise (indep p) E` if possible (for any two different events in E).
3470 *)
3471Definition pairwise_indep_events :
3472 pairwise_indep_events p E (J :'index set) =
3473 pairwise (\i j. indep p (E i) (E j)) J
3474End
3475
3476Theorem pairwise_indep_events_def :
3477 !p E (J :'index set).
3478 pairwise_indep_events p E J <=>
3479 !i j. i IN J /\ j IN J /\ i <> j ==> indep p (E i) (E j)
3480Proof
3481 RW_TAC std_ss [pairwise_indep_events, pairwise]
3482QED
3483
3484(* 3. extension of `indep`: a sequence of total independent events *)
3485Definition indep_events_def :
3486 indep_events p E (J :'index set) =
3487 !N. N SUBSET J /\ N <> {} /\ FINITE N ==>
3488 (prob p (BIGINTER (IMAGE E N)) = PI (prob p o E) N)
3489End
3490
3491(* 4. independence of two sets/collections of events: (DO NOT CHANGE) *)
3492Definition indep_families_def :
3493 indep_families p q r = !s t. s IN q /\ t IN r ==> indep p s t
3494End
3495
3496Overload indep_sets = “indep_families”
3497
3498(* 5. extension of `indep_families`: pairwise independent sets/collections of events *)
3499Definition pairwise_indep_sets :
3500 pairwise_indep_sets p A (J :'index set) =
3501 pairwise (\i j. indep_families p (A i) (A j)) J
3502End
3503
3504Theorem pairwise_indep_sets_def :
3505 !p A (J :'index set).
3506 pairwise_indep_sets p A J <=>
3507 !i j. i IN J /\ j IN J /\ i <> j ==> indep_families p (A i) (A j)
3508Proof
3509 RW_TAC std_ss [pairwise_indep_sets, pairwise]
3510QED
3511
3512(* 6. extension of `indep_families`: total independent sets/collections of events *)
3513Definition indep_sets_def :
3514 indep_sets p A (J :'index set) =
3515 !N. N SUBSET J /\ N <> {} /\ FINITE N ==>
3516 !E. E IN (N --> A) ==> (prob p (BIGINTER (IMAGE E N)) = PI (prob p o E) N)
3517End
3518
3519(* 7. independence of two r.v.'s, added `INTER p_space p` after taking the PREIMAGE *)
3520Definition indep_rv_def :
3521 indep_rv (p :'a p_space) (X :'a -> 'b) (Y :'a -> 'b) s t =
3522 !a b. (a IN subsets s) /\ (b IN subsets t) ==>
3523 indep p ((PREIMAGE X a) INTER p_space p)
3524 ((PREIMAGE Y b) INTER p_space p)
3525End
3526
3527Overload indep_vars = “indep_rv”
3528
3529(* 8. extension of `indep_rv`: pairwise independent random variables *)
3530Definition pairwise_indep_vars :
3531 pairwise_indep_vars p X A (J :'index set) =
3532 pairwise (\i j. indep_rv p (X i) (X j) (A i) (A j)) J
3533End
3534
3535Theorem pairwise_indep_vars_def :
3536 !p X A (J :'index set).
3537 pairwise_indep_vars p X A J <=>
3538 !i j. i IN J /\ j IN J /\ i <> j ==> indep_rv p (X i) (X j) (A i) (A j)
3539Proof
3540 RW_TAC std_ss [pairwise_indep_vars, pairwise]
3541QED
3542
3543Theorem pairwise_indep_vars_subset :
3544 !p X A (s :'index set) (t :'index set).
3545 pairwise_indep_vars p X A t /\ s SUBSET t ==>
3546 pairwise_indep_vars p X A s
3547Proof
3548 rw [pairwise_indep_vars_def]
3549 >> FIRST_X_ASSUM MATCH_MP_TAC >> art []
3550 >> METIS_TAC [SUBSET_DEF]
3551QED
3552
3553(* 9. extension of `indep-rv`: totally/mutually independent r.v.'s
3554
3555 See indep_vars_alt_indep_events for a weaker equivalent condition for testing
3556 independence.
3557
3558 NOTE: ‘indep_vars’ has been modified to make sure [indep_vars_subset] holds.
3559
3560 old definition:
3561
3562Definition old_indep_vars_def :
3563 old_indep_vars p X A (J :'index set) =
3564 !E. E IN (J --> (subsets o A)) ==>
3565 indep_events p (\n. (PREIMAGE (X n) (E n)) INTER p_space p) J
3566End
3567
3568 new definition is moved to martingaleTheory.indep_functions_def
3569 *)
3570Definition indep_vars_def :
3571 indep_vars p X A (J :'index set) =
3572 !E N. N SUBSET J /\ N <> {} /\ FINITE N /\
3573 E IN (N --> subsets o A) ==>
3574 prob p (BIGINTER (IMAGE (\n. PREIMAGE (X n) (E n) INTER p_space p) N)) =
3575 PI (prob p o (\n. PREIMAGE (X n) (E n) INTER p_space p)) N
3576End
3577
3578(* NOTE: If a set of r.v.'s is (totally) independent, so is any subset of them.
3579 With the new definition of ‘indep_vars’, this proof is very easy now.
3580 *)
3581Theorem indep_vars_subset :
3582 !p X A (s :'index set) (t :'index set).
3583 indep_vars p X A t /\ s SUBSET t ==> indep_vars p X A s
3584Proof
3585 RW_TAC std_ss [indep_vars_def, IN_DFUNSET, indep_events_def]
3586 >> FIRST_X_ASSUM irule >> simp []
3587 >> PROVE_TAC [SUBSET_TRANS]
3588QED
3589
3590(* NOTE: the old and new definitions are actually equivalent, given ‘A n’ is indeed
3591 a sigma-algebra (which can be actually weakened to ‘?x. x IN subsets (A n)’), or
3592 ring, semiring, algebra, etc.
3593 *)
3594Theorem indep_vars_alt_indep_events :
3595 !p X A (J :'index set).
3596 (!n. n IN J ==> sigma_algebra (A n)) ==>
3597 (indep_vars p X A (J :'index set) <=>
3598 !E. E IN (J --> (subsets o A)) ==>
3599 indep_events p (\n. (PREIMAGE (X n) (E n)) INTER p_space p) J)
3600Proof
3601 rpt STRIP_TAC
3602 >> EQ_TAC
3603 >> RW_TAC std_ss [indep_vars_def, indep_events_def]
3604 >- (FIRST_X_ASSUM MATCH_MP_TAC >> fs [IN_DFUNSET] \\
3605 METIS_TAC [SUBSET_DEF])
3606 (* The key is to choose V such that, for each indexes ‘n NOTIN N’, an arbitrary
3607 element ‘E n’ is choosen such that ‘E n IN subsets (A n)’ holds. Here we chose
3608 ‘{}’, assuming ‘sigma_algebra (A n)’.
3609 *)
3610 >> Q.ABBREV_TAC ‘V = \n. if n IN N then E n else {}’
3611 >> Q.PAT_X_ASSUM ‘!E. E IN J --> subsets o A ==> P’ (MP_TAC o (Q.SPEC ‘V’))
3612 >> Know ‘V IN J --> subsets o A’
3613 >- (fs [Abbr ‘V’, IN_DFUNSET] >> rw [] \\
3614 METIS_TAC [SIGMA_ALGEBRA_EMPTY])
3615 >> RW_TAC std_ss []
3616 >> POP_ASSUM (MP_TAC o (Q.SPEC ‘N’))
3617 >> RW_TAC std_ss []
3618 >> Suff ‘IMAGE (\n. PREIMAGE (X n) (E n) INTER p_space p) N =
3619 IMAGE (\n. PREIMAGE (X n) (V n) INTER p_space p) N /\
3620 PI (prob p o (\n. PREIMAGE (X n) (E n) INTER p_space p)) N =
3621 PI (prob p o (\n. PREIMAGE (X n) (V n) INTER p_space p)) N’ >- rw []
3622 >> CONJ_TAC
3623 >- (rw [Once EXTENSION] >> EQ_TAC >> rw [Abbr ‘V’] \\
3624 Q.EXISTS_TAC ‘n’ >> rw [])
3625 >> MATCH_MP_TAC EXTREAL_PROD_IMAGE_EQ
3626 >> Q.X_GEN_TAC ‘n’ >> rw [Abbr ‘V’]
3627QED
3628
3629(* Alternative definition of independent r.v.'s for index set as ‘univ(:num)’
3630
3631 It's sufficient that the increasing first n r.v.'s are mutually independent,
3632 and no need for arbitrary (non-empty) subset N of univ(:num).
3633 *)
3634Theorem indep_vars_alt_univ :
3635 !p X A. prob_space p /\ (!n. sigma_algebra (A n)) /\
3636 (!n. random_variable (X n) p (A n)) ==>
3637 (indep_vars p X A univ(:num) <=>
3638 !E n. E IN (count1 n --> subsets o A) ==>
3639 prob p (BIGINTER (IMAGE (\n. PREIMAGE (X n) (E n) INTER p_space p) (count1 n))) =
3640 PI (prob p o (\n. PREIMAGE (X n) (E n) INTER p_space p)) (count1 n))
3641Proof
3642 RW_TAC std_ss [indep_vars_def]
3643 >> EQ_TAC >> rw [] (* only one goal remains *)
3644 >> Q.ABBREV_TAC ‘V = \n. if n IN N then E n else space (A n)’
3645 (* find the maximal element m of N *)
3646 >> MP_TAC (FINITE_is_measure_maximal |> INST_TYPE [“:'a” |-> “:num”]
3647 |> Q.SPECL [‘I’, ‘N’])
3648 >> rw [is_measure_maximal_def] >> rename1 ‘m IN N’
3649 >> Q.PAT_X_ASSUM ‘!E n. E IN count1 n --> subsets o A ==> P’
3650 (MP_TAC o (Q.SPECL [‘V’, ‘m’]))
3651 >> Know ‘V IN count1 m --> subsets o A’
3652 >- (rw [IN_DFUNSET, Abbr ‘V’] \\
3653 Cases_on ‘n IN N’ >- fs [IN_DFUNSET] \\
3654 simp [SIGMA_ALGEBRA_SPACE])
3655 >> RW_TAC std_ss []
3656 >> Suff ‘prob p (BIGINTER (IMAGE (\n. PREIMAGE (X n) (E n) INTER p_space p) N)) =
3657 prob p (BIGINTER (IMAGE (\n. PREIMAGE (X n) (V n) INTER p_space p) (count1 m))) /\
3658 PI (prob p o (\n. PREIMAGE (X n) (E n) INTER p_space p)) N =
3659 PI (prob p o (\n. PREIMAGE (X n) (V n) INTER p_space p)) (count1 m)’ >- rw []
3660 >> Q.ABBREV_TAC ‘D = count1 m DIFF N’
3661 >> ‘DISJOINT N D’ by rw [DISJOINT_ALT, Abbr ‘D’]
3662 >> Know ‘count1 m = N UNION D’
3663 >- (rw [Once EXTENSION, Abbr ‘D’] \\
3664 EQ_TAC >> rw [] >> rw [LT_SUC_LE]) >> Rewr'
3665 >> Know ‘IMAGE (\n. PREIMAGE (X n) (E n) INTER p_space p) N =
3666 IMAGE (\n. PREIMAGE (X n) (V n) INTER p_space p) N’
3667 >- (rw [Once EXTENSION, IN_IMAGE, Abbr ‘V’] \\
3668 EQ_TAC >> rw [] >> Q.EXISTS_TAC ‘n’ >> rw [])
3669 >> Rewr'
3670 >> Know ‘PI (prob p o (\n. PREIMAGE (X n) (E n) INTER p_space p)) N =
3671 PI (prob p o (\n. PREIMAGE (X n) (V n) INTER p_space p)) N’
3672 >- (MATCH_MP_TAC EXTREAL_PROD_IMAGE_EQ >> rw [Abbr ‘V’])
3673 >> Rewr'
3674 >> Cases_on ‘D = {}’ >- rw []
3675 >> Know ‘!n. n IN D ==> PREIMAGE (X n) (V n) INTER p_space p = p_space p’
3676 >- (rw [Abbr ‘D’, Abbr ‘V’, PREIMAGE_def] \\
3677 rw [Once EXTENSION] \\
3678 EQ_TAC >> rw [] \\
3679 fs [random_variable_def, measurable_def, IN_FUNSET])
3680 >> DISCH_TAC
3681 >> CONJ_TAC
3682 >- (rw [IMAGE_UNION, BIGINTER_UNION] \\
3683 Know ‘IMAGE (\n. PREIMAGE (X n) (V n) INTER p_space p) D =
3684 IMAGE (\n. p_space p) D’
3685 >- (rw [Once EXTENSION] \\
3686 EQ_TAC >> rw [] >> Q.EXISTS_TAC ‘n’ >> rw []) >> Rewr' \\
3687 Know ‘BIGINTER (IMAGE (\n. p_space p) D) = p_space p’
3688 >- (rw [Once EXTENSION, IN_BIGINTER_IMAGE] \\
3689 EQ_TAC >> rw [] \\
3690 FIRST_X_ASSUM MATCH_MP_TAC \\
3691 METIS_TAC [MEMBER_NOT_EMPTY]) >> Rewr' \\
3692 ONCE_REWRITE_TAC [EQ_SYM_EQ] \\
3693 MATCH_MP_TAC PROB_UNDER_UNIV >> art [] \\
3694 MATCH_MP_TAC EVENTS_BIGINTER_FN >> art [COUNTABLE_NUM] \\
3695 rw [SUBSET_DEF] \\
3696 fs [random_variable_def, measurable_def, IN_DFUNSET, Abbr ‘V’])
3697 >> Know ‘FINITE D’
3698 >- (irule SUBSET_FINITE >> Q.EXISTS_TAC ‘count1 m’ >> rw [Abbr ‘D’])
3699 >> DISCH_TAC
3700 >> Know ‘PI (prob p o (\n. PREIMAGE (X n) (V n) INTER p_space p)) (N UNION D) =
3701 PI (prob p o (\n. PREIMAGE (X n) (V n) INTER p_space p)) N *
3702 PI (prob p o (\n. PREIMAGE (X n) (V n) INTER p_space p)) D’
3703 >- (MATCH_MP_TAC EXTREAL_PROD_IMAGE_DISJOINT_UNION >> art [])
3704 >> Rewr'
3705 >> Suff ‘PI (prob p o (\n. PREIMAGE (X n) (V n) INTER p_space p)) D = 1’ >- rw []
3706 >> Know ‘PI (prob p o (\n. PREIMAGE (X n) (V n) INTER p_space p)) D =
3707 PI (prob p o (\n. p_space p)) D’
3708 >- (MATCH_MP_TAC EXTREAL_PROD_IMAGE_EQ >> rw [])
3709 >> Rewr'
3710 >> simp [o_DEF, PROB_UNIV, EXTREAL_PROD_IMAGE_ONE]
3711QED
3712
3713(* This is an old (possibly also wrong) definition not used anywhere,
3714
3715 cf. ‘martingale$indep_functions’ (or ‘indep_vars’) for a set of independent
3716 (measurable) functions, including r.v.'s.
3717
3718val indep_function_def = Define
3719 `indep_function p =
3720 {f | indep_families p (IMAGE (PREIMAGE (FST o f)) UNIV)
3721 (IMAGE (PREIMAGE (SND o f)) (events p))}`;
3722 *)
3723
3724Theorem PROB_INDEP :
3725 !p s t u. indep p s t /\ (u = s INTER t) ==> (prob p u = prob p s * prob p t)
3726Proof
3727 RW_TAC std_ss [indep_def]
3728QED
3729
3730Theorem INDEP :
3731 !p a b. a IN events p /\ b IN events p /\
3732 prob p (a INTER b) = prob p a * prob p b ==> indep p a b
3733Proof
3734 rw [indep_def]
3735QED
3736
3737Theorem INDEP_EMPTY :
3738 !p s. prob_space p /\ s IN events p ==> indep p {} s
3739Proof
3740 RW_TAC std_ss [indep_def, EVENTS_EMPTY, PROB_EMPTY, INTER_EMPTY, mul_lzero]
3741QED
3742
3743(* `prob_space p` is not needed here *)
3744Theorem INDEP_SYM: !p a b. indep p a b ==> indep p b a
3745Proof
3746 RW_TAC std_ss [indep_def]
3747 >> PROVE_TAC [mul_comm, INTER_COMM]
3748QED
3749
3750Theorem INDEP_SYM_EQ: !p a b. indep p a b <=> indep p b a
3751Proof
3752 rpt GEN_TAC >> EQ_TAC >> rpt STRIP_TAC
3753 >> MATCH_MP_TAC INDEP_SYM >> art []
3754QED
3755
3756Theorem INDEP_SPACE :
3757 !p s. prob_space p /\ s IN events p ==> indep p (p_space p) s
3758Proof
3759 RW_TAC std_ss [indep_def, EVENTS_SPACE, PROB_UNIV, INTER_PSPACE, mul_lone]
3760QED
3761
3762Theorem INDEP_SPACE' :
3763 !p s. prob_space p /\ s IN events p ==> indep p s (p_space p)
3764Proof
3765 rw [Once INDEP_SYM_EQ, INDEP_SPACE]
3766QED
3767
3768Theorem INDEP_EMPTY' :
3769 !p s. prob_space p /\ s IN events p ==> indep p s {}
3770Proof
3771 RW_TAC std_ss [Once INDEP_SYM_EQ]
3772 >> MATCH_MP_TAC INDEP_EMPTY >> art []
3773QED
3774
3775Theorem INDEP_FAMILIES_SYM: !p q r. indep_families p q r ==> indep_families p r q
3776Proof
3777 RW_TAC std_ss [indep_families_def]
3778 >> MATCH_MP_TAC INDEP_SYM
3779 >> FIRST_X_ASSUM MATCH_MP_TAC >> art []
3780QED
3781
3782(* This is the simplest "0-1 law" *)
3783Theorem INDEP_REFL:
3784 !p a. prob_space p /\ a IN events p ==>
3785 (indep p a a = (prob p a = 0) \/ (prob p a = 1))
3786Proof
3787 RW_TAC std_ss [indep_def, INTER_IDEMPOT]
3788 >> `?r. prob p a = Normal r` by METIS_TAC [PROB_FINITE, extreal_cases]
3789 >> RW_TAC std_ss [extreal_mul_def, extreal_of_num_def, extreal_11]
3790 >> METIS_TAC [REAL_MUL_IDEMPOT]
3791QED
3792
3793Theorem INDEP_COMPL :
3794 !p s t. prob_space p /\ indep p s t ==> indep p s (p_space p DIFF t)
3795Proof
3796 RW_TAC std_ss [indep_def, EVENTS_COMPL, PROB_COMPL]
3797 >> `s SUBSET (p_space p) /\ t SUBSET (p_space p)`
3798 by PROVE_TAC [PROB_SPACE_SUBSET_PSPACE]
3799 >> `s INTER (p_space p DIFF t) = s DIFF (s INTER t)` by ASM_SET_TAC []
3800 >> POP_ORW
3801 >> `(s INTER t) SUBSET s` by PROVE_TAC [INTER_SUBSET]
3802 >> `s INTER t IN events p` by PROVE_TAC [EVENTS_INTER]
3803 >> Know `prob p (s DIFF (s INTER t)) = prob p s - prob p (s INTER t)`
3804 >- (MATCH_MP_TAC PROB_DIFF_SUBSET >> art [])
3805 >> Rewr' >> art []
3806 >> Know `prob p s * (1 - prob p t) = prob p s * 1 - prob p s * prob p t`
3807 >- (MATCH_MP_TAC sub_ldistrib \\
3808 REWRITE_TAC [extreal_of_num_def, extreal_not_infty] \\
3809 PROVE_TAC [PROB_FINITE])
3810 >> Rewr' >> REWRITE_TAC [mul_rone]
3811QED
3812
3813Theorem INDEP_COMPL' :
3814 !p s t. prob_space p /\ indep p s t ==> indep p (p_space p DIFF s) t
3815Proof
3816 rpt STRIP_TAC
3817 >> MATCH_MP_TAC INDEP_SYM
3818 >> MATCH_MP_TAC INDEP_COMPL >> art []
3819 >> MATCH_MP_TAC INDEP_SYM >> art []
3820QED
3821
3822Theorem INDEP_COMPL2 :
3823 !p s t. prob_space p /\ indep p s t ==>
3824 indep p (p_space p DIFF s) (p_space p DIFF t)
3825Proof
3826 rpt STRIP_TAC
3827 >> MATCH_MP_TAC INDEP_COMPL >> art []
3828 >> Suff `indep p t (p_space p DIFF s)`
3829 >- (DISCH_TAC >> MATCH_MP_TAC INDEP_SYM >> art [])
3830 >> MATCH_MP_TAC INDEP_COMPL >> art []
3831 >> MATCH_MP_TAC INDEP_SYM >> art []
3832QED
3833
3834Theorem INDEP_DISJOINT_UNION :
3835 !p A B C. prob_space p /\ indep p A B /\ indep p A C /\ DISJOINT B C ==>
3836 indep p A (B UNION C)
3837Proof
3838 rw [indep_def, UNION_OVER_INTER]
3839 >- (MATCH_MP_TAC EVENTS_UNION >> art [])
3840 >> Know ‘prob p (B UNION C) = prob p B + prob p C’
3841 >- (MATCH_MP_TAC PROB_ADDITIVE >> art [])
3842 >> Rewr'
3843 >> Know ‘prob p (A INTER B UNION A INTER C) =
3844 prob p (A INTER B) + prob p (A INTER C)’
3845 >- (MATCH_MP_TAC PROB_ADDITIVE >> rw [EVENTS_INTER] \\
3846 MATCH_MP_TAC DISJOINT_RESTRICT_R >> art [])
3847 >> Rewr'
3848 >> simp [Once EQ_SYM_EQ]
3849 >> MATCH_MP_TAC add_ldistrib
3850 >> simp [PROB_POSITIVE]
3851QED
3852
3853Theorem INDEP_DISJOINT_UNION' :
3854 !p A B C. prob_space p /\ indep p A C /\ indep p B C /\ DISJOINT A B ==>
3855 indep p (A UNION B) C
3856Proof
3857 rpt STRIP_TAC
3858 >> MATCH_MP_TAC INDEP_SYM
3859 >> MATCH_MP_TAC INDEP_DISJOINT_UNION >> art []
3860 >> CONJ_TAC >> rw [Once INDEP_SYM_EQ]
3861QED
3862
3863Theorem INDEP_COUNTABLE_DUNION :
3864 !p A E. prob_space p /\ E IN events p /\ disjoint_family A /\
3865 (!i. indep p E (A i)) ==> indep p E (BIGUNION (IMAGE A univ(:num)))
3866Proof
3867 rpt GEN_TAC >> simp [indep_def]
3868 >> STRIP_TAC
3869 >> STRONG_CONJ_TAC
3870 >- (MATCH_MP_TAC EVENTS_BIGUNION_ENUM >> rw [IN_FUNSET])
3871 >> DISCH_TAC
3872 >> REWRITE_TAC [BIGUNION_OVER_INTER_R]
3873 >> Know ‘prob p (BIGUNION (IMAGE A univ(:num))) = suminf (prob p o A)’
3874 >- (MATCH_MP_TAC PROB_COUNTABLY_ADDITIVE >> rw [IN_FUNSET] \\
3875 fs [disjoint_family_def])
3876 >> Rewr'
3877 >> qabbrev_tac ‘A' = \i. E INTER A i’
3878 >> Know ‘disjoint_family A'’
3879 >- (rw [disjoint_family_def, Abbr ‘A'’] \\
3880 MATCH_MP_TAC DISJOINT_RESTRICT_R \\
3881 fs [disjoint_family_def])
3882 >> DISCH_TAC
3883 >> ‘!i. A' i IN events p’ by rw [Abbr ‘A'’, EVENTS_INTER]
3884 >> Know ‘BIGUNION (IMAGE A' UNIV) IN events p’
3885 >- (MATCH_MP_TAC EVENTS_BIGUNION_ENUM >> rw [IN_FUNSET])
3886 >> DISCH_TAC
3887 >> Know ‘prob p (BIGUNION (IMAGE A' univ(:num))) = suminf (prob p o A')’
3888 >- (MATCH_MP_TAC PROB_COUNTABLY_ADDITIVE >> rw [IN_FUNSET] \\
3889 fs [disjoint_family_def])
3890 >> Rewr'
3891 >> rw [Abbr ‘A'’, o_DEF]
3892 >> HO_MATCH_MP_TAC ext_suminf_cmul >> rw [PROB_POSITIVE]
3893QED
3894
3895Theorem INDEP_COUNTABLE_DUNION' :
3896 !p A E. prob_space p /\ E IN events p /\ disjoint_family A /\
3897 (!i. indep p (A i) E) ==> indep p (BIGUNION (IMAGE A univ(:num))) E
3898Proof
3899 rpt STRIP_TAC
3900 >> MATCH_MP_TAC INDEP_SYM
3901 >> MATCH_MP_TAC INDEP_COUNTABLE_DUNION
3902 >> rw [Once INDEP_SYM_EQ]
3903QED
3904
3905(* total ==> pairwise independence (of events) *)
3906Theorem total_imp_pairwise_indep_events :
3907 !p E (J :'index set).
3908 (!n. n IN J ==> (E n) IN events p) /\ indep_events p E J ==>
3909 pairwise_indep_events p E J
3910Proof
3911 RW_TAC std_ss [indep_events_def, pairwise_indep_events_def, indep_def]
3912 >> Q.PAT_X_ASSUM `!N. N SUBSET J /\ N <> {} /\ FINITE N ==> X`
3913 (MP_TAC o (Q.SPEC `{i; j}`))
3914 >> Know `{i; j} SUBSET J` >- ASM_SET_TAC []
3915 >> Know `{i; j} <> {}` >- SET_TAC []
3916 >> Know `FINITE {i; j}` >- PROVE_TAC [FINITE_INSERT, FINITE_SING]
3917 >> Know `BIGINTER (IMAGE E {i; j}) = E i INTER E j`
3918 >- (rw [Once EXTENSION, IN_BIGINTER_IMAGE] \\
3919 METIS_TAC [])
3920 >> RW_TAC std_ss []
3921 >> `!i. prob p (E i) = (prob p o E) i` by PROVE_TAC [o_DEF] >> POP_ORW
3922 >> MATCH_MP_TAC EXTREAL_PROD_IMAGE_PAIR >> art []
3923QED
3924
3925(* total ==> pairwise independence (of sets of events) *)
3926Theorem total_imp_pairwise_indep_sets :
3927 !p A (J :'index set).
3928 (!n. n IN J ==> (A n) SUBSET events p) /\ indep_sets p A J ==>
3929 pairwise_indep_sets p A J
3930Proof
3931 RW_TAC std_ss [indep_sets_def, pairwise_indep_sets_def, indep_families_def,
3932 indep_def, IN_DFUNSET]
3933 >- PROVE_TAC [SUBSET_DEF]
3934 >- PROVE_TAC [SUBSET_DEF]
3935 >> Q.PAT_X_ASSUM `!N. N SUBSET J /\ N <> {} /\ FINITE N ==> X`
3936 (MP_TAC o (Q.SPEC `{i; j}`))
3937 >> Know `{i; j} SUBSET J` >- ASM_SET_TAC []
3938 >> Know `{i; j} <> {}` >- SET_TAC []
3939 >> Know `FINITE {i; j}` >- PROVE_TAC [FINITE_INSERT, FINITE_SING]
3940 >> Know `!E. BIGINTER (IMAGE E {i; j}) = E i INTER E j`
3941 >- (rw [Once EXTENSION, IN_BIGINTER_IMAGE] \\
3942 METIS_TAC [])
3943 >> Know `!E. PI (prob p o E) {i; j} = prob p (E i) * prob p (E j)`
3944 >- (GEN_TAC \\
3945 `!i. prob p (E i) = (prob p o E) i` by PROVE_TAC [o_DEF] >> POP_ORW \\
3946 MATCH_MP_TAC EXTREAL_PROD_IMAGE_PAIR >> art [])
3947 >> RW_TAC std_ss []
3948 >> fs [IN_INSERT, IN_SING]
3949 >> Q.ABBREV_TAC `E = \x. if x = i then s else if x = j then t else {}`
3950 >> Q.PAT_X_ASSUM `!E. X ==> Y` (MP_TAC o (Q.SPEC `E`))
3951 >> Know `!x. (x = i) \/ (x = j) ==> E x IN A x`
3952 >- (Q.UNABBREV_TAC `E` >> RW_TAC std_ss [])
3953 >> Know `E i = s` >- (Q.UNABBREV_TAC `E` >> RW_TAC std_ss [])
3954 >> Know `E j = t` >- (Q.UNABBREV_TAC `E` >> RW_TAC std_ss [])
3955 >> RW_TAC std_ss []
3956 >> POP_ASSUM MATCH_MP_TAC >> art []
3957QED
3958
3959(* total ==> pairwise independence (of random variables)
3960
3961 NOTE: added ‘prob_space p /\ !i. i IN J ==> sigma_algebra (A i)’ due to
3962 changes of ‘measurable’
3963 *)
3964Theorem total_imp_pairwise_indep_vars :
3965 !p X A (J :'index set). prob_space p /\
3966 (!i. i IN J ==> random_variable (X i) p (A i)) /\
3967 (!i. i IN J ==> sigma_algebra (A i)) /\
3968 indep_vars p X A J ==> pairwise_indep_vars p X A J
3969Proof
3970 RW_TAC std_ss [indep_vars_def, pairwise_indep_vars_def, indep_rv_def,
3971 indep_events_def, random_variable_def]
3972 >> ‘sigma_algebra (measurable_space p)’
3973 by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA, prob_space_def]
3974 >> REWRITE_TAC [indep_def]
3975 >> STRONG_CONJ_TAC
3976 >- (‘X i IN measurable (p_space p,events p) (A i)’ by PROVE_TAC [] \\
3977 POP_ASSUM (STRIP_ASSUME_TAC o (REWRITE_RULE [IN_MEASURABLE, space_def, subsets_def])) \\
3978 POP_ASSUM MATCH_MP_TAC >> art []) >> DISCH_TAC
3979 >> STRONG_CONJ_TAC
3980 >- (‘X j IN measurable (p_space p,events p) (A j)’ by PROVE_TAC [] \\
3981 POP_ASSUM (STRIP_ASSUME_TAC o (REWRITE_RULE [IN_MEASURABLE, space_def, subsets_def])) \\
3982 POP_ASSUM MATCH_MP_TAC >> art []) >> DISCH_TAC
3983 >> Q.ABBREV_TAC ‘E = \x. if x = i then a else if x = j then b else {}’
3984 >> Q.PAT_X_ASSUM ‘!E N. _’ (MP_TAC o (Q.SPEC ‘E’))
3985 >> SIMP_TAC std_ss [IN_DFUNSET, o_DEF]
3986 >> ‘{i; j} SUBSET J’ by rw [SUBSET_DEF]
3987 >> DISCH_THEN (MP_TAC o Q.SPEC ‘{i; j}’) >> simp [FINITE_TWO]
3988 >> Know ‘PI (\n. prob p (PREIMAGE (X n) (E n) INTER p_space p)) {i; j} =
3989 (\n. prob p (PREIMAGE (X n) (E n) INTER p_space p)) i *
3990 (\n. prob p (PREIMAGE (X n) (E n) INTER p_space p)) j’
3991 >- (MATCH_MP_TAC EXTREAL_PROD_IMAGE_PAIR >> art [])
3992 >> BETA_TAC >> Rewr'
3993 >> Know ‘E i = a’ >- RW_TAC std_ss [Abbr ‘E’] >> Rewr'
3994 >> Know ‘E j = b’ >- RW_TAC std_ss [Abbr ‘E’] >> Rewr'
3995 >> DISCH_THEN MATCH_MP_TAC
3996 >> rw [Abbr ‘E’]
3997QED
3998
3999(* alternative definition of ‘indep_rv’ in ‘indep_vars’ *)
4000Theorem indep_rv_alt_indep_vars :
4001 !p X Y A B. random_variable (X :'a -> 'b) p A /\
4002 random_variable (Y :'a -> 'b) p B ==>
4003 (indep_rv p X Y A B <=> indep_vars p (binary X Y) (binary A B) {0; 1})
4004Proof
4005 rw [indep_vars_def, indep_rv_def, indep_events_def]
4006 >> reverse EQ_TAC >> rw []
4007 >- (Q.PAT_X_ASSUM ‘!E N. P’ (MP_TAC o (Q.SPECL [‘binary a b’, ‘{0;1}’])) \\
4008 Know ‘binary a b IN {0; 1} --> subsets o binary A B’
4009 >- (rw [IN_DFUNSET, binary_def] >> simp []) >> Rewr \\
4010 simp [binary_def] \\
4011 ‘{1} DELETE (0 :num) = {1}’ by rw [GSYM DELETE_NON_ELEMENT] \\
4012 rw [EXTREAL_PROD_IMAGE_THM, FINITE_TWO, indep_def] \\
4013 fs [random_variable_def, IN_MEASURABLE])
4014 >> ‘N = {0} \/ N = {1} \/ N = {0; 1}’ by METIS_TAC [SUBSET_TWO]
4015 >- rw [EXTREAL_PROD_IMAGE_SING]
4016 >- rw [EXTREAL_PROD_IMAGE_SING]
4017 >> POP_ASSUM (fs o wrap)
4018 >> ‘{1} DELETE (0 :num) = {1}’ by rw [GSYM DELETE_NON_ELEMENT]
4019 >> rw [EXTREAL_PROD_IMAGE_THM, FINITE_TWO, binary_def]
4020 >> fs [IN_DFUNSET]
4021 >> ‘E 0 IN subsets A’ by METIS_TAC [binary_def]
4022 >> Know ‘E 1 IN subsets B’
4023 >- (Q.PAT_X_ASSUM ‘!x. x = 0 \/ x = 1 ==> P’ (MP_TAC o (Q.SPEC ‘1’)) \\
4024 rw [binary_def])
4025 >> DISCH_TAC
4026 >> Q.PAT_X_ASSUM ‘!a b. P’ (MP_TAC o (Q.SPECL [‘E (0 :num)’, ‘E (1 :num)’]))
4027 >> rw [indep_def]
4028QED
4029
4030(******************************************************************************)
4031(* Kolmogorov's 0-1 Law (for independent events) *)
4032(******************************************************************************)
4033
4034(* Probability version of SIGMA_SUBSET_MEASURABLE_SETS *)
4035Theorem SIGMA_SUBSET_EVENTS[local] :
4036 !a p. prob_space p /\ a SUBSET events p ==>
4037 subsets (sigma (p_space p) a) SUBSET events p
4038Proof
4039 RW_TAC std_ss [prob_space_def, p_space_def, events_def]
4040 >> MATCH_MP_TAC SIGMA_SUBSET_MEASURABLE_SETS >> art []
4041QED
4042
4043(* Lemma 3.5.2 [3, p.37], with simplifications from the Solution Manual of [9]
4044 (Problem 5.11)
4045 *)
4046Theorem INDEP_FAMILIES_SIGMA_lemma[local] :
4047 !p B n (J :'index set).
4048 prob_space p /\ (IMAGE B (n INSERT J)) SUBSET events p /\
4049 indep_events p B (n INSERT J) /\ n NOTIN J
4050 ==> indep_families p {B n} (subsets (sigma (p_space p) (IMAGE B J)))
4051Proof
4052 RW_TAC std_ss [indep_families_def, IN_SING]
4053 >> REWRITE_TAC [indep_def]
4054 >> Know `B n IN events p /\ (IMAGE B J) SUBSET events p`
4055 >- fs [SUBSET_DEF, IN_IMAGE, IN_INSERT] >> STRIP_TAC >> art []
4056 >> STRONG_CONJ_TAC
4057 >- (Suff `subsets (sigma (p_space p) (IMAGE B J)) SUBSET events p`
4058 >- (DISCH_TAC >> PROVE_TAC [SUBSET_DEF]) \\
4059 MATCH_MP_TAC SIGMA_SUBSET_EVENTS >> art []) >> DISCH_TAC
4060 >> Q.ABBREV_TAC `G = (p_space p) INSERT
4061 {BIGINTER (IMAGE B N) | N SUBSET J /\ FINITE N /\ N <> {}}`
4062 >> Q.ABBREV_TAC `u = \x. prob p (B n INTER x)`
4063 >> Q.ABBREV_TAC `v = \x. prob p (B n) * prob p x`
4064 >> Suff `u t = v t` >- METIS_TAC []
4065 >> irule UNIQUENESS_OF_MEASURE_FINITE
4066 >> qexistsl_tac [`p_space p`, `G`]
4067 (* !s t. s IN G /\ t IN G ==> s INTER t IN G *)
4068 >> CONJ_TAC
4069 >- (Q.UNABBREV_TAC `G` >> RW_TAC std_ss [GSPECIFICATION, IN_INSERT] >| (* 4 subgoals *)
4070 [ (* goal 1 (of 4) *)
4071 DISJ1_TAC >> REWRITE_TAC [INTER_IDEMPOT],
4072 (* goal 2 (of 4) *)
4073 DISJ2_TAC >> Q.EXISTS_TAC `N` >> art [] \\
4074 Suff `BIGINTER (IMAGE B N) SUBSET p_space p` >- PROVE_TAC [INTER_SUBSET_EQN] \\
4075 MATCH_MP_TAC BIGINTER_SUBSET \\
4076 RW_TAC std_ss [IN_IMAGE, PULL_EXISTS] \\
4077 `!i. i IN J ==> B i IN events p` by PROVE_TAC [SUBSET_DEF, IN_INSERT, IN_IMAGE] \\
4078 drule_then (qx_choose_then ‘x’ strip_assume_tac)
4079 (iffRL MEMBER_NOT_EMPTY) >>
4080 `B x IN events p` by PROVE_TAC [SUBSET_DEF] \\
4081 irule_at Any PROB_SPACE_SUBSET_PSPACE >> art[] >>
4082 first_assum (irule_at Any) >> art[],
4083 (* goal 3 (of 4) *)
4084 DISJ2_TAC >> Q.EXISTS_TAC `N` >> art [] \\
4085 Suff `BIGINTER (IMAGE B N) SUBSET p_space p`
4086 >- PROVE_TAC [INTER_SUBSET_EQN] \\
4087 MATCH_MP_TAC BIGINTER_SUBSET \\
4088 RW_TAC std_ss [IN_IMAGE, PULL_EXISTS] \\
4089 `!i. i IN J ==> B i IN events p` by PROVE_TAC [SUBSET_DEF, IN_INSERT, IN_IMAGE] \\
4090 drule_then (qx_choose_then ‘x’ strip_assume_tac)
4091 (iffRL MEMBER_NOT_EMPTY) >>
4092 `B x IN events p` by PROVE_TAC [SUBSET_DEF] \\
4093 irule_at Any PROB_SPACE_SUBSET_PSPACE >> art[] >>
4094 first_assum (irule_at Any) >> art[],
4095 (* goal 4 (of 4) *)
4096 DISJ2_TAC >> Q.EXISTS_TAC `N UNION N'` \\
4097 CONJ_TAC >- REWRITE_TAC [BIGINTER_UNION, IMAGE_UNION] \\
4098 art [FINITE_UNION] \\
4099 CONJ_TAC >- (RW_TAC std_ss [IN_UNION, SUBSET_DEF] >> fs [SUBSET_DEF]) \\
4100 RW_TAC std_ss [Once EXTENSION, IN_UNION, NOT_IN_EMPTY] \\
4101 fs [GSYM MEMBER_NOT_EMPTY] >> Q.EXISTS_TAC `x` >> DISJ1_TAC >> art [] ])
4102 (* !s. s IN G ==> (u s = v s) *)
4103 >> CONJ_TAC
4104 >- (Q.UNABBREV_TAC `G` >> RW_TAC std_ss [GSPECIFICATION, IN_INSERT] (* 2 subgoals *)
4105 >- (Q.UNABBREV_TAC `u` >> Q.UNABBREV_TAC `v` >> BETA_TAC \\
4106 RW_TAC std_ss [PROB_UNIV, mul_rone, PROB_UNDER_UNIV]) \\
4107 Q.UNABBREV_TAC `u` >> Q.UNABBREV_TAC `v` >> BETA_TAC \\
4108 Know `B n INTER BIGINTER (IMAGE B N) = BIGINTER (IMAGE B (n INSERT N))`
4109 >- REWRITE_TAC [IMAGE_INSERT, BIGINTER_INSERT] >> Rewr' \\
4110 FULL_SIMP_TAC bool_ss [indep_events_def] \\
4111 `(n INSERT N) SUBSET (n INSERT J) /\ N SUBSET (n INSERT J)` by ASM_SET_TAC [] \\
4112 `FINITE (n INSERT N)` by PROVE_TAC [FINITE_INSERT] \\
4113 Know `prob p (BIGINTER (IMAGE B (n INSERT N))) = PI (prob p o B) (n INSERT N)`
4114 >- (FIRST_X_ASSUM MATCH_MP_TAC >> art [] \\
4115 RW_TAC std_ss [Once EXTENSION, IN_INSERT, NOT_IN_EMPTY] \\
4116 Q.EXISTS_TAC `n` >> DISJ1_TAC >> REWRITE_TAC []) >> Rewr' \\
4117 Know `prob p (BIGINTER (IMAGE B N)) = PI (prob p o B) N`
4118 >- (FIRST_X_ASSUM MATCH_MP_TAC >> art []) >> Rewr' \\
4119 Know `PI (prob p o B) (n INSERT N) = (prob p o B) n * PI (prob p o B) (N DELETE n)`
4120 >- (MATCH_MP_TAC EXTREAL_PROD_IMAGE_PROPERTY >> art []) >> Rewr' \\
4121 `N DELETE n = N` by ASM_SET_TAC [] >> POP_ORW \\
4122 SIMP_TAC std_ss [o_DEF])
4123 >> Know `subsets (sigma (p_space p) G) SUBSET events p`
4124 >- (MATCH_MP_TAC SIGMA_SUBSET_EVENTS >> art [] \\
4125 Q.UNABBREV_TAC `G` >> RW_TAC std_ss [GSPECIFICATION, IN_INSERT, SUBSET_DEF]
4126 >- (MATCH_MP_TAC EVENTS_SPACE >> art []) \\
4127 MATCH_MP_TAC EVENTS_COUNTABLE_INTER >> art [] \\
4128 CONJ_TAC >- (MATCH_MP_TAC SUBSET_TRANS >> Q.EXISTS_TAC `IMAGE B J` >> art [] \\
4129 MATCH_MP_TAC IMAGE_SUBSET >> PROVE_TAC [SUBSET_DEF]) \\
4130 CONJ_TAC >- (MATCH_MP_TAC finite_countable \\
4131 MATCH_MP_TAC IMAGE_FINITE >> art []) \\
4132 RW_TAC std_ss [Once EXTENSION, IN_IMAGE, NOT_IN_EMPTY] \\
4133 fs [GSYM MEMBER_NOT_EMPTY] >> Q.EXISTS_TAC `x` >> art [])
4134 >> DISCH_TAC
4135 >> Know `sigma_algebra (p_space p,subsets (sigma (p_space p) G))`
4136 >- (REWRITE_TAC [SIGMA_REDUCE] \\
4137 MATCH_MP_TAC SIGMA_ALGEBRA_SIGMA \\
4138 Q.UNABBREV_TAC `G` >> RW_TAC std_ss [subset_class_def, GSPECIFICATION, IN_INSERT]
4139 >- REWRITE_TAC [SUBSET_REFL] \\
4140 MATCH_MP_TAC PROB_SPACE_SUBSET_PSPACE >> art [] \\
4141 MATCH_MP_TAC EVENTS_COUNTABLE_INTER >> art [] \\
4142 CONJ_TAC >- (MATCH_MP_TAC SUBSET_TRANS >> Q.EXISTS_TAC `IMAGE B J` >> art [] \\
4143 MATCH_MP_TAC IMAGE_SUBSET >> PROVE_TAC [SUBSET_DEF]) \\
4144 CONJ_TAC >- (MATCH_MP_TAC finite_countable \\
4145 MATCH_MP_TAC IMAGE_FINITE >> art []) \\
4146 RW_TAC std_ss [Once EXTENSION, IN_IMAGE, NOT_IN_EMPTY] \\
4147 fs [GSYM MEMBER_NOT_EMPTY] >> Q.EXISTS_TAC `x` >> art [])
4148 >> DISCH_TAC
4149 (* measure_space (p_space p,subsets (sigma (p_space p) G),u) *)
4150 >> CONJ_TAC
4151 >- (Suff `measure_space (p_space p,events p,u)`
4152 >- (DISCH_TAC >> MATCH_MP_TAC MEASURE_SPACE_RESTRICTION \\
4153 Q.EXISTS_TAC `events p` >> art []) \\
4154 Q.UNABBREV_TAC `u` \\
4155 fs [p_space_def, events_def, prob_def, prob_space_def] \\
4156 MATCH_MP_TAC MEASURE_SPACE_RESTRICTED_MEASURE >> art [])
4157 (* measure_space (p_space p,subsets (sigma (p_space p) G),v) *)
4158 >> CONJ_TAC
4159 >- (Suff `measure_space (p_space p,events p,v)`
4160 >- (DISCH_TAC >> MATCH_MP_TAC MEASURE_SPACE_RESTRICTION \\
4161 Q.EXISTS_TAC `events p` >> art []) \\
4162 Q.UNABBREV_TAC `v` \\
4163 `prob p (B n) <> NegInf /\ prob p (B n) <> PosInf` by PROVE_TAC [PROB_FINITE] \\
4164 `0 <= prob p (B n)` by PROVE_TAC [PROB_POSITIVE] \\
4165 `?c. prob p (B n) = Normal c` by PROVE_TAC [extreal_cases] \\
4166 `0 <= c` by PROVE_TAC [extreal_of_num_def, extreal_le_eq] \\
4167 fs [p_space_def, events_def, prob_def, prob_space_def] \\
4168 MATCH_MP_TAC MEASURE_SPACE_CMUL >> art [])
4169 (* u (p_space p) = v (p_space p) *)
4170 >> CONJ_TAC
4171 >- (Q.UNABBREV_TAC `u` >> Q.UNABBREV_TAC `v` >> BETA_TAC \\
4172 RW_TAC std_ss [PROB_UNIV, mul_rone, PROB_UNDER_UNIV])
4173 (* t IN subsets (sigma (p_space p) G) *)
4174 >> CONJ_TAC
4175 >- (Suff `subsets (sigma (p_space p) (IMAGE B J)) SUBSET subsets (sigma (p_space p) G)`
4176 >- (DISCH_THEN (ASSUME_TAC o (REWRITE_RULE [SUBSET_DEF])) \\
4177 POP_ASSUM MATCH_MP_TAC >> art []) \\
4178 MATCH_MP_TAC SIGMA_MONOTONE \\
4179 Q.UNABBREV_TAC `G` \\
4180 RW_TAC std_ss [Once SUBSET_DEF, IN_IMAGE, GSPECIFICATION, IN_INSERT] \\
4181 DISJ2_TAC \\
4182 rename1 ‘x IN J’ >> Q.EXISTS_TAC `{x}` \\
4183 RW_TAC std_ss [IMAGE_SING, BIGINTER_SING, FINITE_SING, SUBSET_DEF, IN_SING] \\
4184 RW_TAC std_ss [Once EXTENSION, NOT_IN_EMPTY, IN_SING])
4185 (* u (p_space p) < PosInf *)
4186 >> CONJ_TAC
4187 >- (Q.UNABBREV_TAC `u` >> BETA_TAC \\
4188 RW_TAC std_ss [PROB_UNDER_UNIV, PROB_LT_POSINF])
4189 (* subset_class (p_space p) G *)
4190 >> Q.UNABBREV_TAC `G`
4191 >> RW_TAC std_ss [subset_class_def, IN_INSERT, GSPECIFICATION]
4192 >- REWRITE_TAC [SUBSET_REFL]
4193 >> MATCH_MP_TAC PROB_SPACE_SUBSET_PSPACE >> art []
4194 >> MATCH_MP_TAC EVENTS_COUNTABLE_INTER >> art []
4195 >> CONJ_TAC >- (MATCH_MP_TAC SUBSET_TRANS >> Q.EXISTS_TAC `IMAGE B J` >> art [] \\
4196 MATCH_MP_TAC IMAGE_SUBSET >> PROVE_TAC [SUBSET_DEF])
4197 >> CONJ_TAC >- (MATCH_MP_TAC finite_countable \\
4198 MATCH_MP_TAC IMAGE_FINITE >> art [])
4199 >> RW_TAC std_ss [Once EXTENSION, IN_IMAGE, NOT_IN_EMPTY]
4200 >> fs [GSYM MEMBER_NOT_EMPTY] >> Q.EXISTS_TAC `x` >> art []
4201QED
4202
4203(* Lemma 3.5.2 [3, p.37], more useful form *)
4204Theorem INDEP_FAMILIES_SIGMA_lemma1[local] :
4205 !p A m (N :'index set) S2.
4206 prob_space p /\ IMAGE A (m INSERT N) SUBSET events p /\
4207 indep_events p A (m INSERT N) /\ m NOTIN N /\
4208 S2 IN subsets (sigma (p_space p) (IMAGE A N)) ==> indep p (A m) S2
4209Proof
4210 rpt STRIP_TAC
4211 >> irule (SIMP_RULE std_ss [indep_families_def, IN_SING]
4212 (Q.SPEC `p` INDEP_FAMILIES_SIGMA_lemma)) >> art []
4213 >> Q.EXISTS_TAC `N` >> art []
4214QED
4215
4216(* Corollary 3.5.3 of [3, p.37], Part I *)
4217Theorem INDEP_FAMILIES_SIGMA_lemma2[local] :
4218 !p A (M :'index set) N m S1.
4219 prob_space p /\ (IMAGE A (M UNION N)) SUBSET events p /\
4220 indep_events p A (M UNION N) /\ DISJOINT M N /\ m IN M /\ N <> {} /\
4221 S1 IN (subsets (sigma (p_space p) (IMAGE A M))) ==>
4222 indep_events p (\x. if x IN N then A x else S1) (m INSERT N)
4223Proof
4224 rpt STRIP_TAC
4225 >> Q.ABBREV_TAC `G = {BIGINTER (IMAGE A J) | J SUBSET N /\ FINITE J /\ J <> {}}`
4226 >> fs [GSYM MEMBER_NOT_EMPTY]
4227 >> rename1 `n IN N`
4228 >> Q.ABBREV_TAC `B = \a x. if x IN M then A x else a`
4229 >> Know `!a. a IN G ==> indep_events p (B a) (n INSERT M)`
4230 >- (Q.UNABBREV_TAC `B` >> BETA_TAC \\
4231 Q.UNABBREV_TAC `G` \\
4232 RW_TAC std_ss [GSPECIFICATION, indep_events_def, IN_INSERT] \\
4233 Cases_on `n NOTIN N'` (* easy case *)
4234 >- (`N' SUBSET M` by PROVE_TAC [SUBSET_INSERT] \\
4235 Know `IMAGE (\x. if x IN M then A x else BIGINTER (IMAGE A J)) N' = IMAGE A N'`
4236 >- (RW_TAC std_ss [Once EXTENSION, IN_IMAGE] \\
4237 EQ_TAC >> rpt STRIP_TAC >| (* 2 subgoals *)
4238 [ (* goal 3.1 (of 2) *)
4239 `x'' IN M` by PROVE_TAC [SUBSET_DEF] >> fs [] \\
4240 Q.EXISTS_TAC `x''` >> art [],
4241 (* goal 3.2 (of 2) *)
4242 `x'' IN M` by PROVE_TAC [SUBSET_DEF] \\
4243 Q.EXISTS_TAC `x''` >> ASM_SIMP_TAC std_ss [] ]) >> Rewr' \\
4244 Know `PI (prob p o (\x. if x IN M then A x else BIGINTER (IMAGE A J))) N' =
4245 PI (prob p o A) N'`
4246 >- (irule EXTREAL_PROD_IMAGE_EQ >> RW_TAC std_ss [] \\
4247 `x' IN M` by PROVE_TAC [SUBSET_DEF]) >> Rewr' \\
4248 fs [indep_events_def] >> FIRST_X_ASSUM MATCH_MP_TAC >> art [] \\
4249 ASM_SET_TAC []) \\
4250 fs [] (* hard case: `n IN N'` *) \\
4251 Q.ABBREV_TAC `N'' = N' DELETE n` \\
4252 `N'' SUBSET M` by ASM_SET_TAC [] \\
4253 `N'' DELETE n = N''` by ASM_SET_TAC [] \\
4254 `N' = n INSERT N''` by ASM_SET_TAC [] >> POP_ORW \\
4255 `n NOTIN N''` by ASM_SET_TAC [] \\
4256 `n NOTIN M` by ASM_SET_TAC [DISJOINT_DEF] \\
4257 ASM_SIMP_TAC std_ss [IMAGE_INSERT] \\
4258 Know `IMAGE (\x. if x IN M then A x else BIGINTER (IMAGE A J)) N'' = IMAGE A N''`
4259 >- (RW_TAC std_ss [Once EXTENSION, IN_IMAGE] \\
4260 EQ_TAC >> rpt STRIP_TAC >| (* 2 subgoals *)
4261 [ (* goal 3.1 (of 2) *)
4262 `x'' IN M` by PROVE_TAC [SUBSET_DEF] >> fs [] \\
4263 Q.EXISTS_TAC `x''` >> art [],
4264 (* goal 3.2 (of 2) *)
4265 `x'' IN M` by PROVE_TAC [SUBSET_DEF] \\
4266 Q.EXISTS_TAC `x''` >> ASM_SIMP_TAC std_ss [] ]) >> Rewr' \\
4267 REWRITE_TAC [BIGINTER_INSERT, GSYM BIGINTER_UNION, GSYM IMAGE_UNION] \\
4268 `N'' SUBSET N'` by ASM_SET_TAC [] \\
4269 `FINITE N''` by PROVE_TAC [SUBSET_FINITE_I] \\
4270 POP_ASSUM ((ASM_SIMP_TAC std_ss) o wrap o (MATCH_MP EXTREAL_PROD_IMAGE_PROPERTY)) \\
4271 Know `PI (prob p o (\x. if x IN M then A x else BIGINTER (IMAGE A J))) N'' =
4272 PI (prob p o A) N''`
4273 >- (irule EXTREAL_PROD_IMAGE_EQ \\
4274 RW_TAC std_ss [] >- (`x' IN M` by PROVE_TAC [SUBSET_DEF]) \\
4275 PROVE_TAC [SUBSET_FINITE_I]) >> Rewr' \\
4276 FULL_SIMP_TAC std_ss [indep_events_def] \\
4277 Know `prob p (BIGINTER (IMAGE A (J UNION N''))) = PI (prob p o A) (J UNION N'')`
4278 >- (FIRST_X_ASSUM MATCH_MP_TAC >> art [FINITE_UNION] \\
4279 CONJ_TAC >- ASM_SET_TAC [] \\
4280 CONJ_TAC >- ASM_SET_TAC [] \\
4281 PROVE_TAC [SUBSET_FINITE_I]) >> Rewr' \\
4282 Know `prob p (BIGINTER (IMAGE A J)) = PI (prob p o A) J`
4283 >- (FIRST_X_ASSUM MATCH_MP_TAC >> art [] \\
4284 CONJ_TAC >- ASM_SET_TAC [] \\
4285 METIS_TAC [MEMBER_NOT_EMPTY]) >> Rewr' \\
4286 MATCH_MP_TAC EXTREAL_PROD_IMAGE_DISJOINT_UNION >> art [] \\
4287 CONJ_TAC >- PROVE_TAC [SUBSET_FINITE_I] \\
4288 MATCH_MP_TAC SUBSET_DISJOINT \\
4289 qexistsl_tac [`N`, `M`] >> art [DISJOINT_SYM])
4290 >> DISCH_TAC
4291 >> Know `!s a. a IN G /\ s IN subsets (sigma (p_space p) (IMAGE (B a) M)) ==>
4292 indep p (B a n) s`
4293 >- (rpt STRIP_TAC \\
4294 MATCH_MP_TAC INDEP_FAMILIES_SIGMA_lemma1 \\
4295 Q.EXISTS_TAC `M` >> art [] \\
4296 Know `n NOTIN M` >- ASM_SET_TAC [DISJOINT_DEF] >> DISCH_TAC >> art [] \\
4297 reverse CONJ_TAC >- (FIRST_X_ASSUM MATCH_MP_TAC >> art []) \\
4298 RW_TAC std_ss [IMAGE_INSERT, INSERT_SUBSET] >| (* 2 subgoals *)
4299 [ (* goal 1 (of 2) *)
4300 Know `B a n = a` >- (Q.UNABBREV_TAC `B` >> ASM_SIMP_TAC std_ss []) >> Rewr' \\
4301 Q.PAT_X_ASSUM `a IN G` MP_TAC \\
4302 Q.UNABBREV_TAC `G` >> RW_TAC std_ss [GSPECIFICATION] \\
4303 MATCH_MP_TAC EVENTS_BIGINTER_FN >> art [GSYM MEMBER_NOT_EMPTY] \\
4304 CONJ_TAC
4305 >- (MATCH_MP_TAC SUBSET_TRANS >> Q.EXISTS_TAC `IMAGE A N` >> art [] \\
4306 MATCH_MP_TAC IMAGE_SUBSET >> art []) \\
4307 CONJ_TAC >- (MATCH_MP_TAC finite_countable >> art []) \\
4308 Q.EXISTS_TAC `x` >> art [],
4309 (* goal 2 (of 2) *)
4310 Suff `IMAGE (B a) M = IMAGE A M` >- METIS_TAC [] \\
4311 Q.UNABBREV_TAC `B` >> RW_TAC std_ss [Once EXTENSION, IN_IMAGE] \\
4312 EQ_TAC >> rpt STRIP_TAC >> fs [] >- (Q.EXISTS_TAC `x'` >> art []) \\
4313 Q.EXISTS_TAC `x'` >> ASM_SIMP_TAC std_ss [] ])
4314 >> Know `!a. IMAGE (B a) M = IMAGE A M`
4315 >- (GEN_TAC >> Q.UNABBREV_TAC `B` >> RW_TAC std_ss [Once EXTENSION, IN_IMAGE] \\
4316 EQ_TAC >> rpt STRIP_TAC >> fs [] >- (Q.EXISTS_TAC `x'` >> art []) \\
4317 Q.EXISTS_TAC `x'` >> ASM_SIMP_TAC std_ss []) >> Rewr'
4318 >> `n NOTIN M` by ASM_SET_TAC [DISJOINT_DEF]
4319 >> Know `!a. B a n = a`
4320 >- (GEN_TAC >> Q.UNABBREV_TAC `B` >> RW_TAC std_ss [Once EXTENSION]) >> Rewr'
4321 >> DISCH_THEN (MP_TAC o (ONCE_REWRITE_RULE [INDEP_SYM_EQ]) o (Q.SPEC `S1`)) >> art []
4322 >> DISCH_TAC (* !a. a IN G ==> indep p S1 a *)
4323 >> Q.ABBREV_TAC `B' = \x. if x IN N then A x else S1`
4324 >> Know `IMAGE B' N = IMAGE A N`
4325 >- (Q.UNABBREV_TAC `B'` >> RW_TAC std_ss [Once EXTENSION, IN_IMAGE] \\
4326 EQ_TAC >> rpt STRIP_TAC >> fs [] >- (Q.EXISTS_TAC `x'` >> art []) \\
4327 Q.EXISTS_TAC `x'` >> ASM_SIMP_TAC std_ss []) >> DISCH_TAC
4328 >> Q.UNABBREV_TAC `B'` >> BETA_TAC
4329 >> RW_TAC std_ss [indep_events_def, IN_INSERT]
4330 >> Cases_on `m NOTIN N'` (* easy case *)
4331 >- (`N' SUBSET N` by PROVE_TAC [SUBSET_INSERT] \\
4332 Know `IMAGE (\x. if x IN N then A x else S1) N' = IMAGE A N'`
4333 >- (RW_TAC std_ss [Once EXTENSION, IN_IMAGE] \\
4334 EQ_TAC >> rpt STRIP_TAC >| (* 2 subgoals *)
4335 [ (* goal 3.1 (of 2) *)
4336 `x' IN N` by PROVE_TAC [SUBSET_DEF] >> fs [] \\
4337 Q.EXISTS_TAC `x'` >> art [],
4338 (* goal 3.2 (of 2) *)
4339 `x' IN N` by PROVE_TAC [SUBSET_DEF] \\
4340 Q.EXISTS_TAC `x'` >> ASM_SIMP_TAC std_ss [] ]) >> Rewr' \\
4341 Know `PI (prob p o (\x. if x IN N then A x else S1)) N' = PI (prob p o A) N'`
4342 >- (irule EXTREAL_PROD_IMAGE_EQ >> RW_TAC std_ss [] \\
4343 `x IN N` by PROVE_TAC [SUBSET_DEF]) >> Rewr' \\
4344 fs [indep_events_def] >> FIRST_X_ASSUM MATCH_MP_TAC >> art [] \\
4345 ASM_SET_TAC [])
4346 >> fs [] (* hard case: `m IN N'` *)
4347 >> Q.ABBREV_TAC `N'' = N' DELETE m`
4348 >> `N'' SUBSET N` by ASM_SET_TAC []
4349 >> `N'' DELETE m = N''` by ASM_SET_TAC []
4350 >> `N' = m INSERT N''` by ASM_SET_TAC [] >> POP_ORW
4351 >> `m NOTIN N''` by ASM_SET_TAC []
4352 >> `m NOTIN N` by ASM_SET_TAC [DISJOINT_DEF]
4353 >> ASM_SIMP_TAC std_ss [IMAGE_INSERT]
4354 >> Know `IMAGE (\x. if x IN N then A x else S1) N'' = IMAGE A N''`
4355 >- (RW_TAC std_ss [Once EXTENSION, IN_IMAGE] \\
4356 EQ_TAC >> rpt STRIP_TAC >| (* 2 subgoals *)
4357 [ (* goal 3.1 (of 2) *)
4358 `x' IN N` by PROVE_TAC [SUBSET_DEF] >> fs [] \\
4359 Q.EXISTS_TAC `x'` >> art [],
4360 (* goal 3.2 (of 2) *)
4361 `x' IN N` by PROVE_TAC [SUBSET_DEF] \\
4362 Q.EXISTS_TAC `x'` >> ASM_SIMP_TAC std_ss [] ]) >> Rewr'
4363 >> REWRITE_TAC [BIGINTER_INSERT, GSYM BIGINTER_UNION, GSYM IMAGE_UNION]
4364 >> `N'' SUBSET N'` by ASM_SET_TAC []
4365 >> `FINITE N''` by PROVE_TAC [SUBSET_FINITE_I]
4366 >> POP_ASSUM ((ASM_SIMP_TAC std_ss) o wrap o (MATCH_MP EXTREAL_PROD_IMAGE_PROPERTY))
4367 >> Know `PI (prob p o (\x. if x IN N then A x else S1)) N'' = PI (prob p o A) N''`
4368 >- (irule EXTREAL_PROD_IMAGE_EQ \\
4369 RW_TAC std_ss [] >- (`x IN N` by PROVE_TAC [SUBSET_DEF]) \\
4370 PROVE_TAC [SUBSET_FINITE_I]) >> Rewr'
4371 >> Cases_on `N'' = {}`
4372 >- art [IMAGE_EMPTY, BIGINTER_EMPTY, INTER_UNIV, EXTREAL_PROD_IMAGE_EMPTY, mul_rone]
4373 >> Know `prob p (S1 INTER BIGINTER (IMAGE A N'')) =
4374 prob p S1 * prob p (BIGINTER (IMAGE A N''))`
4375 >- (FULL_SIMP_TAC std_ss [indep_def] \\
4376 `!a. a IN G ==> a IN events p` by PROVE_TAC [] \\
4377 `!a. a IN G ==> (prob p (S1 INTER a) = prob p S1 * prob p a)` by PROVE_TAC [] \\
4378 POP_ASSUM MATCH_MP_TAC \\
4379 Q.UNABBREV_TAC `G` >> RW_TAC std_ss [GSPECIFICATION] \\
4380 Q.EXISTS_TAC `N''` >> art [] \\
4381 CONJ_TAC >- PROVE_TAC [SUBSET_FINITE_I] \\
4382 fs [GSYM MEMBER_NOT_EMPTY] >> Q.EXISTS_TAC `x'` >> art []) >> Rewr'
4383 >> FULL_SIMP_TAC std_ss [indep_events_def]
4384 >> Know `prob p (BIGINTER (IMAGE A N'')) = PI (prob p o A) N''`
4385 >- (FIRST_X_ASSUM MATCH_MP_TAC >> art [FINITE_UNION] \\
4386 CONJ_TAC >- ASM_SET_TAC [] \\
4387 PROVE_TAC [SUBSET_FINITE_I]) >> Rewr
4388QED
4389
4390(* Corollary 3.5.3 of [3, p.37], Part II (futhermore, ...) *)
4391Theorem INDEP_FAMILIES_SIGMA :
4392 !p A (M :'index set) N.
4393 prob_space p /\ (IMAGE A (M UNION N)) SUBSET events p /\
4394 indep_events p A (M UNION N) /\ DISJOINT M N /\ M <> {} /\ N <> {} ==>
4395 indep_families p (subsets (sigma (p_space p) (IMAGE A M)))
4396 (subsets (sigma (p_space p) (IMAGE A N)))
4397Proof
4398 RW_TAC std_ss [indep_families_def]
4399 >> rename1 `indep p S1 S2`
4400 >> FULL_SIMP_TAC std_ss [GSYM MEMBER_NOT_EMPTY]
4401 >> rename1 `m IN M` >> rename1 `n IN N`
4402 >> Q.ABBREV_TAC `B' = \x. if x IN N then A x else S1`
4403 >> Know `IMAGE B' N = IMAGE A N`
4404 >- (Q.UNABBREV_TAC `B'` >> RW_TAC std_ss [Once EXTENSION, IN_IMAGE] \\
4405 EQ_TAC >> rpt STRIP_TAC >> fs [] >- (Q.EXISTS_TAC `x'` >> art []) \\
4406 Q.EXISTS_TAC `x'` >> ASM_SIMP_TAC std_ss []) >> DISCH_TAC
4407 >> Know `indep_events p B' (m INSERT N)`
4408 >- (Q.UNABBREV_TAC `B'` >> BETA_TAC \\
4409 MATCH_MP_TAC INDEP_FAMILIES_SIGMA_lemma2 \\
4410 Q.EXISTS_TAC `M` >> art [] \\
4411 REWRITE_TAC [GSYM MEMBER_NOT_EMPTY] >> Q.EXISTS_TAC `n` >> art [])
4412 >> DISCH_TAC
4413 >> `m NOTIN N` by ASM_SET_TAC [DISJOINT_DEF]
4414 >> Know `S1 = B' m`
4415 >- (Q.UNABBREV_TAC `B'` >> ASM_SIMP_TAC std_ss []) >> Rewr'
4416 >> MATCH_MP_TAC INDEP_FAMILIES_SIGMA_lemma1
4417 >> Q.EXISTS_TAC `N` >> art []
4418 >> ASM_SIMP_TAC std_ss [IMAGE_INSERT, INSERT_SUBSET]
4419 >> Know `B' m = S1`
4420 >- (Q.UNABBREV_TAC `B'` >> ASM_SIMP_TAC std_ss []) >> Rewr'
4421 >> FULL_SIMP_TAC std_ss [IMAGE_UNION, UNION_SUBSET]
4422 >> Suff `subsets (sigma (p_space p) (IMAGE A M)) SUBSET events p` >- METIS_TAC [SUBSET_DEF]
4423 >> MATCH_MP_TAC SIGMA_SUBSET_EVENTS >> art []
4424QED
4425
4426(* c.f. set_limsup_alt, the only difference here is the additional sigma() inside *)
4427Definition tail_algebra_def:
4428 tail_algebra (p :'a p_space) (E :num -> 'a set) =
4429 (p_space p,
4430 BIGINTER (IMAGE (\n. subsets (sigma (p_space p) (IMAGE E (from n)))) UNIV))
4431End
4432
4433Definition tail_algebra_of_rv_def:
4434 tail_algebra_of_rv (p :'a p_space) (X :num -> 'a -> 'b) (A :num -> 'b algebra) =
4435 (p_space p,
4436 BIGINTER (IMAGE (\n. subsets (sigma_functions (p_space p) A X (from n))) UNIV))
4437End
4438
4439Overload tail_algebra = “tail_algebra_of_rv”
4440
4441(* Theorem 3.5.1 of [3, p.37], Kolmogorov 0-1 Law (for independent events).
4442
4443 NOTE: there's a more general version of "Kolmogorov 0-1 Law" for independent r.v.'s
4444 ([5, p.3] or [2, p.264]) under a different definition of "tail field" generated by
4445 `sigma_functions` (martingaleTheory).
4446 *)
4447Theorem Kolmogorov_0_1_Law :
4448 !p E. prob_space p /\ (!n. E n IN events p) /\ indep_events p E UNIV ==>
4449 !e. e IN subsets (tail_algebra p E) ==> (prob p e = 0) \/ (prob p e = 1)
4450Proof
4451 RW_TAC std_ss [tail_algebra_def, subsets_def, IN_BIGINTER_IMAGE, IN_UNIV]
4452 >> Know `e IN events p`
4453 >- (fs [indep_events_def] \\
4454 POP_ASSUM (STRIP_ASSUME_TAC o (REWRITE_RULE [FROM_0]) o (Q.SPEC `0`)) \\
4455 Suff `subsets (sigma (p_space p) (IMAGE E UNIV)) SUBSET events p`
4456 >- METIS_TAC [SUBSET_DEF] \\
4457 MATCH_MP_TAC SIGMA_SUBSET_EVENTS >> art [] \\
4458 RW_TAC std_ss [SUBSET_DEF, IN_IMAGE, IN_UNIV] >> art []) >> DISCH_TAC
4459 >> Know `!n. indep_events p (\x. if x IN (count n) then E x else e)
4460 (n INSERT count n)`
4461 >- (GEN_TAC >> Cases_on `n = 0`
4462 >- (ASM_SIMP_TAC std_ss [COUNT_ZERO, indep_events_def, IN_SING, NOT_IN_EMPTY] \\
4463 RW_TAC std_ss [SUBSET_DEF, IN_SING, NOT_IN_EMPTY] \\
4464 Know `N = {0}`
4465 >- (RW_TAC std_ss [GSYM UNIQUE_MEMBER_SING] \\
4466 fs [GSYM MEMBER_NOT_EMPTY] >> RES_TAC >> fs []) >> Rewr' \\
4467 SIMP_TAC std_ss [IMAGE_SING, BIGINTER_SING, EXTREAL_PROD_IMAGE_SING]) \\
4468 `0 < n` by RW_TAC arith_ss [] \\
4469 MATCH_MP_TAC INDEP_FAMILIES_SIGMA_lemma2 \\
4470 Q.EXISTS_TAC `from n` >> art [UNION_FROM_COUNT, DISJOINT_FROM_COUNT] \\
4471 CONJ_TAC >- (fs [indep_events_def] \\
4472 RW_TAC std_ss [SUBSET_DEF, IN_IMAGE, IN_UNIV] >> art []) \\
4473 CONJ_TAC >- (RW_TAC arith_ss [IN_FROM]) \\
4474 PROVE_TAC [COUNT_NOT_EMPTY]) >> DISCH_TAC
4475 >> Know `indep_events p (\x. if EVEN x then E (DIV2 x) else e)
4476 (1 INSERT {2 * n | T})`
4477 >- (RW_TAC std_ss [indep_events_def, IN_INSERT, GSPECIFICATION] \\
4478 Cases_on `1 NOTIN N` (* easier case *)
4479 >- (`~EVEN 1` by RW_TAC arith_ss [] \\
4480 `N SUBSET {2 * n | T}` by ASM_SET_TAC [] \\
4481 Know `!x. x IN N ==> EVEN x`
4482 >- (POP_ASSUM MP_TAC >> RW_TAC std_ss [SUBSET_DEF, GSPECIFICATION] \\
4483 `?n. x = 2 * n` by PROVE_TAC [] >> POP_ORW \\
4484 REWRITE_TAC [EVEN_DOUBLE]) >> DISCH_TAC \\
4485 Know `IMAGE (\x. if EVEN x then E (DIV2 x) else e) N = IMAGE (E o DIV2) N`
4486 >- (RW_TAC std_ss [Once EXTENSION, IN_IMAGE, o_DEF] \\
4487 EQ_TAC >> rpt STRIP_TAC >| (* 2 subgoals *)
4488 [ (* goal 3.1 (of 2) *)
4489 `EVEN x'` by PROVE_TAC [] >> fs [] \\
4490 `?v. x' = 2 * v` by PROVE_TAC [EVEN_ODD_EXISTS] \\
4491 Q.EXISTS_TAC `2 * v` >> PROVE_TAC [],
4492 (* goal 3.2 (of 2) *)
4493 `EVEN x'` by PROVE_TAC [] \\
4494 Q.EXISTS_TAC `x'` >> art [] ]) >> Rewr' \\
4495 Know `PI (prob p o (\x. if EVEN x then E (DIV2 x) else e)) N =
4496 PI ((prob p o E) o DIV2) N`
4497 >- (irule EXTREAL_PROD_IMAGE_EQ >> RW_TAC std_ss [o_DEF]) >> Rewr' \\
4498 `IMAGE (E o DIV2) N = IMAGE E (IMAGE DIV2 N)`
4499 by PROVE_TAC [IMAGE_IMAGE] >> POP_ORW \\
4500 Know `PI ((prob p o E) o DIV2) N = PI (prob p o E) (IMAGE DIV2 N)`
4501 >- (MATCH_MP_TAC EQ_SYM >> irule EXTREAL_PROD_IMAGE_IMAGE >> art [] \\
4502 MATCH_MP_TAC INJ_IMAGE >> Q.EXISTS_TAC `IMAGE DIV2 N` \\
4503 RW_TAC std_ss [INJ_DEF, GSPECIFICATION, IN_IMAGE]
4504 >- (Q.EXISTS_TAC `x` >> art []) \\
4505 `(?v1. x = 2 * v1) /\ (?v2. y = 2 * v2)` by PROVE_TAC [EVEN_ODD_EXISTS] \\
4506 fs [DIV2_DOUBLE]) >> Rewr' \\
4507 fs [indep_events_def]) \\
4508 fs [] (* harder case: `1 IN N` *) \\
4509 Q.ABBREV_TAC `N' = N DELETE 1` \\
4510 `N' SUBSET N` by ASM_SET_TAC [] \\
4511 `1 NOTIN N'` by ASM_SET_TAC [] \\
4512 `N' DELETE 1 = N'` by PROVE_TAC [DELETE_NON_ELEMENT] \\
4513 `N = 1 INSERT N'` by ASM_SET_TAC [] >> POP_ORW \\
4514 ASM_SIMP_TAC std_ss [IMAGE_INSERT] \\
4515 `~EVEN 1` by RW_TAC arith_ss [] \\
4516 `N' SUBSET {2 * n | T}` by ASM_SET_TAC [] \\
4517 Know `!x. x IN N'==> EVEN x`
4518 >- (POP_ASSUM MP_TAC >> RW_TAC std_ss [SUBSET_DEF, GSPECIFICATION] \\
4519 `?n. x = 2 * n` by PROVE_TAC [] >> POP_ORW \\
4520 REWRITE_TAC [EVEN_DOUBLE]) >> DISCH_TAC \\
4521 Know `IMAGE (\x. if EVEN x then E (DIV2 x) else e) N' = IMAGE (E o DIV2) N'`
4522 >- (RW_TAC std_ss [Once EXTENSION, IN_IMAGE, o_DEF] \\
4523 EQ_TAC >> rpt STRIP_TAC >| (* 2 subgoals *)
4524 [ (* goal 3.1 (of 2) *)
4525 `EVEN x'` by PROVE_TAC [] >> fs [] \\
4526 `?v. x' = 2 * v` by PROVE_TAC [EVEN_ODD_EXISTS] \\
4527 Q.EXISTS_TAC `2 * v` >> PROVE_TAC [],
4528 (* goal 3.2 (of 2) *)
4529 `EVEN x'` by PROVE_TAC [] \\
4530 Q.EXISTS_TAC `x'` >> art [] ]) >> Rewr' \\
4531 `FINITE N'` by PROVE_TAC [SUBSET_FINITE_I] \\
4532 ASM_SIMP_TAC std_ss [EXTREAL_PROD_IMAGE_PROPERTY] \\
4533 Know `PI (prob p o (\x. if EVEN x then E (DIV2 x) else e)) N' = PI ((prob p o E) o DIV2) N'`
4534 >- (irule EXTREAL_PROD_IMAGE_EQ \\
4535 RW_TAC std_ss [o_DEF]) >> Rewr' \\
4536 `IMAGE (E o DIV2) N' = IMAGE E (IMAGE DIV2 N')` by PROVE_TAC [IMAGE_IMAGE] >> POP_ORW \\
4537 Know `PI ((prob p o E) o DIV2) N' = PI (prob p o E) (IMAGE DIV2 N')`
4538 >- (MATCH_MP_TAC EQ_SYM >> irule EXTREAL_PROD_IMAGE_IMAGE >> art [] \\
4539 MATCH_MP_TAC INJ_IMAGE >> Q.EXISTS_TAC `IMAGE DIV2 N'` \\
4540 RW_TAC std_ss [INJ_DEF, GSPECIFICATION, IN_IMAGE]
4541 >- (Q.EXISTS_TAC `x` >> art []) \\
4542 `(?v1. x = 2 * v1) /\ (?v2. y = 2 * v2)` by PROVE_TAC [EVEN_ODD_EXISTS] \\
4543 fs [DIV2_DOUBLE]) >> Rewr' \\
4544 (* now applying indep_events_def *)
4545 Q.ABBREV_TAC `n = SUC (MAX_SET N')` \\
4546 Q.PAT_X_ASSUM `!n. indep_events p _ (n INSERT count n)`
4547 (STRIP_ASSUME_TAC o (REWRITE_RULE [indep_events_def]) o (Q.SPEC `n`)) \\
4548 POP_ASSUM (MP_TAC o (Q.SPEC `n INSERT (IMAGE DIV2 N')`)) \\
4549 Know `!x. x IN N' ==> DIV2 x < n`
4550 >- (rpt STRIP_TAC >> Q.UNABBREV_TAC `n` \\
4551 MATCH_MP_TAC LESS_EQ_LESS_TRANS \\
4552 Q.EXISTS_TAC `MAX_SET N'` >> SIMP_TAC arith_ss [] \\
4553 MATCH_MP_TAC LESS_EQ_TRANS \\
4554 Q.EXISTS_TAC `x` >> RW_TAC std_ss [in_max_set] \\
4555 REWRITE_TAC [DIV2_def] >> MATCH_MP_TAC DIV_LESS_EQ >> RW_TAC arith_ss []) \\
4556 DISCH_TAC \\
4557 Know `n INSERT (IMAGE DIV2 N') SUBSET (n INSERT (count n))`
4558 >- (RW_TAC std_ss [SUBSET_DEF, IN_COUNT, IN_INSERT, IN_IMAGE] \\
4559 DISJ2_TAC >> PROVE_TAC []) \\
4560 Know `~(n INSERT (IMAGE DIV2 N') = {})`
4561 >- (RW_TAC std_ss [Once EXTENSION, IN_INSERT, NOT_IN_EMPTY] \\
4562 Q.EXISTS_TAC `n` >> DISJ1_TAC >> REWRITE_TAC []) \\
4563 Know `FINITE (n INSERT (IMAGE DIV2 N'))`
4564 >- (REWRITE_TAC [FINITE_INSERT] \\
4565 MATCH_MP_TAC IMAGE_FINITE >> art []) \\
4566 RW_TAC std_ss [] >> POP_ASSUM MP_TAC \\
4567 SIMP_TAC arith_ss [IMAGE_INSERT] \\
4568 Know `IMAGE (\x. if x < n then E x else e) (IMAGE DIV2 N') = IMAGE (E o DIV2) N'`
4569 >- (RW_TAC arith_ss [Once EXTENSION, IN_IMAGE, o_DEF] \\
4570 EQ_TAC >> rpt STRIP_TAC >| (* 2 subgoals *)
4571 [ (* goal 3.1 (of 2) *)
4572 `x' < n` by PROVE_TAC [] >> fs [] \\
4573 Q.EXISTS_TAC `x''` >> art [],
4574 (* goal 3.2 (of 2) *)
4575 `EVEN x'` by PROVE_TAC [] \\
4576 Q.EXISTS_TAC `DIV2 x'` \\
4577 reverse CONJ_TAC >- (Q.EXISTS_TAC `x'` >> art []) \\
4578 Suff `DIV2 x' < n` >- ASM_SIMP_TAC std_ss [] \\
4579 PROVE_TAC [] ]) >> Rewr' \\
4580 `IMAGE (E o DIV2) N' = IMAGE E (IMAGE DIV2 N')` by PROVE_TAC [IMAGE_IMAGE] \\
4581 POP_ORW >> Rewr' \\
4582 Know `n NOTIN (IMAGE DIV2 N')`
4583 >- (RW_TAC std_ss [IN_IMAGE] \\
4584 CCONTR_TAC \\
4585 ‘DIV2 x < DIV2 x’ by METIS_TAC [] \\
4586 FULL_SIMP_TAC arith_ss []) >> DISCH_TAC \\
4587 `(IMAGE DIV2 N') DELETE n = IMAGE DIV2 N'` by PROVE_TAC [DELETE_NON_ELEMENT] \\
4588 `FINITE (IMAGE DIV2 N')` by PROVE_TAC [FINITE_INSERT] \\
4589 RW_TAC std_ss [EXTREAL_PROD_IMAGE_PROPERTY] \\
4590 Suff `PI (prob p o (\x. if x < n then E x else e)) (IMAGE DIV2 N') =
4591 PI (prob p o E) (IMAGE DIV2 N')` >- RW_TAC std_ss [] \\
4592 irule EXTREAL_PROD_IMAGE_EQ >> RW_TAC std_ss [IN_IMAGE] \\
4593 Suff `DIV2 x' < n` >- PROVE_TAC [] \\
4594 PROVE_TAC [] ) >> DISCH_TAC
4595 (* applying INDEP_FAMILIES_SIGMA_lemma1 *)
4596 >> Know `!a. a IN subsets
4597 (sigma (p_space p)
4598 (IMAGE (\x. if EVEN x then E (DIV2 x) else e) {2 * n | T}))
4599 ==> indep p ((\x. if EVEN x then E (DIV2 x) else e) 1) a`
4600 >- (rpt STRIP_TAC >> irule INDEP_FAMILIES_SIGMA_lemma1 >> art [] \\
4601 Q.EXISTS_TAC `{2 * n | T}` >> art [] \\
4602 `ODD 1` by RW_TAC arith_ss [] \\
4603 CONJ_TAC >- (RW_TAC arith_ss [GSPECIFICATION]) \\
4604 SIMP_TAC std_ss [IMAGE_INSERT] \\
4605 Know `IMAGE (\x. if EVEN x then E (DIV2 x) else e) {2 * n | T} = IMAGE E UNIV`
4606 >- (RW_TAC arith_ss [Once EXTENSION, IN_IMAGE, IN_UNIV, GSPECIFICATION] \\
4607 EQ_TAC >> rpt STRIP_TAC >| (* 2 subgoals *)
4608 [ (* goal 1 (of 2) *)
4609 `EVEN x'` by PROVE_TAC [EVEN_DOUBLE] >> fs [] \\
4610 Q.EXISTS_TAC `n` >> REWRITE_TAC [],
4611 (* goal 2 (of 2) *)
4612 POP_ORW >> Q.EXISTS_TAC `2 * x'` >> SIMP_TAC std_ss [EVEN_DOUBLE, DIV2_DOUBLE] \\
4613 Q.EXISTS_TAC `x'` >> REWRITE_TAC [] ]) >> Rewr' \\
4614 RW_TAC std_ss [SUBSET_DEF, IN_INSERT] >- art [] \\
4615 fs [indep_events_def, IN_IMAGE, IN_UNIV])
4616 >> Know `IMAGE (\x. if EVEN x then E (DIV2 x) else e) {2 * n | T} = IMAGE E UNIV`
4617 >- (RW_TAC arith_ss [Once EXTENSION, IN_IMAGE, IN_UNIV, GSPECIFICATION] \\
4618 EQ_TAC >> rpt STRIP_TAC >| (* 2 subgoals *)
4619 [ (* goal 1 (of 2) *)
4620 `EVEN x'` by PROVE_TAC [EVEN_DOUBLE] >> fs [] \\
4621 Q.EXISTS_TAC `n` >> REWRITE_TAC [],
4622 (* goal 2 (of 2) *)
4623 POP_ORW >> Q.EXISTS_TAC `2 * x'` >> SIMP_TAC std_ss [EVEN_DOUBLE, DIV2_DOUBLE] \\
4624 Q.EXISTS_TAC `x'` >> REWRITE_TAC [] ]) >> Rewr'
4625 >> `ODD 1` by RW_TAC arith_ss []
4626 >> `~(EVEN 1)` by PROVE_TAC [EVEN_ODD] >> SIMP_TAC arith_ss [] >> DISCH_TAC
4627 >> Know `e IN subsets (sigma (p_space p) (IMAGE E univ(:num)))`
4628 >- (Suff `subsets (sigma (p_space p) (IMAGE E (from n))) SUBSET
4629 subsets (sigma (p_space p) (IMAGE E univ(:num)))` >- METIS_TAC [SUBSET_DEF] \\
4630 MATCH_MP_TAC SIGMA_MONOTONE \\
4631 MATCH_MP_TAC IMAGE_SUBSET >> REWRITE_TAC [SUBSET_UNIV]) >> DISCH_TAC
4632 >> `indep p e e` by PROVE_TAC []
4633 >> METIS_TAC [INDEP_REFL]
4634QED
4635
4636(******************************************************************************)
4637(* Uncorrelation of r.v.'s [2, p.107-108] *)
4638(******************************************************************************)
4639
4640(* "The requirement of finite second moments seems unnecessary, but it does ensure the
4641 finiteness of E[XY] (Cauchy-Schwarz inequality!) as well as that of E[X] and E[Y]."
4642 [2, p.107] *)
4643Definition uncorrelated_def:
4644 uncorrelated p X Y <=>
4645 finite_second_moments p X /\ finite_second_moments p Y /\
4646 (expectation p (\s. X s * Y s) = expectation p X * expectation p Y)
4647End
4648
4649Definition uncorrelated_vars_def:
4650 uncorrelated_vars p X J <=>
4651 !i j. i IN J /\ j IN J /\ i <> j ==> uncorrelated p (X i) (X j)
4652End
4653
4654Definition orthogonal_def:
4655 orthogonal p X Y <=>
4656 finite_second_moments p X /\ finite_second_moments p Y /\
4657 (expectation p (\s. X s * Y s) = 0)
4658End
4659
4660Definition orthogonal_vars_def:
4661 orthogonal_vars p X J <=>
4662 !i j. i IN J /\ j IN J /\ i <> j ==> orthogonal p (X i) (X j)
4663End
4664
4665Definition covariance_def:
4666 covariance p X Y =
4667 expectation p (\x. (X x - expectation p X) * (Y x - expectation p Y))
4668End
4669
4670Theorem covariance_self :
4671 !p X. covariance p X X = variance p X
4672Proof
4673 RW_TAC std_ss [variance_alt, covariance_def, pow_2]
4674QED
4675
4676(* i.e. `covariance p X Y` is zero if X and Y are uncorelated *)
4677Theorem uncorrelated_thm :
4678 !p X Y. prob_space p /\ real_random_variable X p /\ real_random_variable Y p /\
4679 uncorrelated p X Y ==>
4680 (expectation p (\s. (X s - expectation p X) * (Y s - expectation p Y)) = 0)
4681Proof
4682 RW_TAC std_ss [uncorrelated_def] (* 2 subgoals *)
4683 >> `expectation p X <> PosInf /\ expectation p X <> NegInf /\
4684 expectation p Y <> PosInf /\ expectation p Y <> NegInf`
4685 by PROVE_TAC [finite_second_moments_imp_finite_expectation]
4686 >> `!s. s IN p_space p ==>
4687 X s <> PosInf /\ X s <> NegInf /\ Y s <> PosInf /\ Y s <> NegInf`
4688 by PROVE_TAC [real_random_variable_def]
4689 >> `?c. expectation p X = Normal c` by PROVE_TAC [extreal_cases]
4690 >> `?d. expectation p Y = Normal d` by PROVE_TAC [extreal_cases] >> art []
4691 >> Know `!s. s IN p_space p ==>
4692 (X s - Normal c) * (Y s - Normal d) =
4693 (\x. (X x) * (Y x)) s +
4694 (\x. (Normal c * Normal d - Normal c * (Y x) - Normal d * (X x))) s`
4695 >- (RW_TAC std_ss [] \\
4696 `?a. X s = Normal a` by PROVE_TAC [extreal_cases] >> POP_ORW \\
4697 `?b. Y s = Normal b` by PROVE_TAC [extreal_cases] >> POP_ORW \\
4698 rw [extreal_sub_def, extreal_add_def, extreal_mul_def, extreal_11] \\
4699 REAL_ARITH_TAC)
4700 >> DISCH_TAC
4701 >> Know ‘expectation p (\s. (X s - Normal c) * (Y s - Normal d)) =
4702 expectation p (\s. (\x. X x * Y x) s +
4703 (\x. Normal c * Normal d - Normal c * Y x - Normal d * X x) s)’
4704 >- (MATCH_MP_TAC expectation_cong >> RW_TAC std_ss []) >> Rewr'
4705 >> POP_ASSUM K_TAC (* clean up useless assumption *)
4706 >> `integrable p (\x. X x pow 2) /\ integrable p (\x. Y x pow 2)`
4707 by METIS_TAC [finite_second_moments_eq_integrable_square]
4708 >> Know `integrable p (\x. X x * Y x)`
4709 >- (MATCH_MP_TAC integrable_bounded \\
4710 Q.EXISTS_TAC `\x. Normal (1 / 2) * ((X x) pow 2 + (Y x) pow 2)` \\
4711 fs [prob_space_def, p_space_def, events_def, real_random_variable] \\
4712 rpt STRIP_TAC >| (* 3 subgoals *)
4713 [ (* goal 1 (of 3) *)
4714 `(\x. Normal (1 / 2) * ((X x) pow 2 + (Y x) pow 2)) =
4715 (\x. Normal (1 / 2) * (\x. (X x) pow 2 + (Y x) pow 2) x)` by METIS_TAC [] >> POP_ORW \\
4716 MATCH_MP_TAC integrable_cmul >> art [] \\
4717 `(\x. (X x) pow 2 + (Y x) pow 2) = (\x. (\x. (X x) pow 2) x + (\x. (Y x) pow 2) x)`
4718 by METIS_TAC [] >> POP_ORW \\
4719 MATCH_MP_TAC integrable_add >> RW_TAC std_ss [pow_2] \\
4720 DISJ1_TAC >> CONJ_TAC >| (* 2 subgoals *)
4721 [ `?r. X x = Normal r` by PROVE_TAC [extreal_cases] >> POP_ORW \\
4722 REWRITE_TAC [extreal_mul_def, extreal_not_infty],
4723 `?r. Y x = Normal r` by PROVE_TAC [extreal_cases] >> POP_ORW \\
4724 REWRITE_TAC [extreal_mul_def, extreal_not_infty] ],
4725 (* goal 2 (of 3) *)
4726 MATCH_MP_TAC IN_MEASURABLE_BOREL_MUL \\
4727 qexistsl_tac [‘X’, ‘Y’] >> fs [measure_space_def],
4728 (* goal 3 (of 3) *)
4729 REWRITE_TAC [abs_le_half_pow2] ]) >> DISCH_TAC
4730 >> `integrable p X /\ integrable p Y` by METIS_TAC [integrable_from_square]
4731 >> FULL_SIMP_TAC pure_ss [expectation_def, prob_space_def, p_space_def]
4732 (* applying "integral_add" *)
4733 >> Know `integral p (\s. (\x. X x * Y x) s +
4734 (\x. Normal c * Normal d - Normal c * Y x - Normal d * X x) s) =
4735 integral p (\x. X x * Y x) +
4736 integral p (\x. Normal c * Normal d - Normal c * Y x - Normal d * X x)`
4737 >- (MATCH_MP_TAC integral_add \\
4738 RW_TAC std_ss [extreal_mul_def, extreal_not_infty] >| (* 2 subgoals *)
4739 [ (* goal 1 (of 2) *)
4740 `(\x. Normal (c * d) - Normal c * Y x - Normal d * X x) =
4741 (\x. (\x. Normal (c * d) - Normal c * Y x) x - (\x. Normal d * X x) x)`
4742 by METIS_TAC [] >> POP_ORW \\
4743 MATCH_MP_TAC integrable_sub >> RW_TAC std_ss [integrable_cmul] >| (* 3 subgoals *)
4744 [ (* goal 1.1 (of 3) *)
4745 `(\x. Normal (c * d) - Normal c * Y x) =
4746 (\x. (\x. Normal (c * d)) x - (\x. Normal c * Y x) x)` by METIS_TAC [] >> POP_ORW \\
4747 MATCH_MP_TAC integrable_sub >> RW_TAC std_ss [integrable_cmul] >| (* 2 subgoals *)
4748 [ (* goal 1.1.1 (of 2) *)
4749 MATCH_MP_TAC integrable_const >> art [extreal_of_num_def, lt_infty],
4750 (* goal 1.1.2 (of 2) *)
4751 `?r. Y x = Normal r` by PROVE_TAC [extreal_cases] >> POP_ORW \\
4752 REWRITE_TAC [extreal_mul_def, extreal_not_infty] ],
4753 (* goal 1.2 (of 3) *)
4754 `?r. Y x = Normal r` by PROVE_TAC [extreal_cases] >> POP_ORW \\
4755 REWRITE_TAC [extreal_mul_def, extreal_sub_def, extreal_not_infty],
4756 (* goal 1.3 (of 3) *)
4757 `?r. X x = Normal r` by PROVE_TAC [extreal_cases] >> POP_ORW \\
4758 REWRITE_TAC [extreal_mul_def, extreal_not_infty] ],
4759 (* goal 2 (of 2) *)
4760 DISJ1_TAC >> CONJ_TAC >| (* 2 subgoals *)
4761 [ (* goal 2.1 (of 2) *)
4762 `?a. X x = Normal a` by PROVE_TAC [extreal_cases] >> POP_ORW \\
4763 `?b. Y x = Normal b` by PROVE_TAC [extreal_cases] >> POP_ORW \\
4764 REWRITE_TAC [extreal_mul_def, extreal_not_infty],
4765 (* goal 2.2 (of 2) *)
4766 `?a. X x = Normal a` by PROVE_TAC [extreal_cases] >> POP_ORW \\
4767 `?b. Y x = Normal b` by PROVE_TAC [extreal_cases] >> POP_ORW \\
4768 REWRITE_TAC [extreal_mul_def, extreal_sub_def, extreal_not_infty] ] ]) >> Rewr'
4769 >> Know `integral p (\x. Normal c * Normal d - Normal c * Y x - Normal d * X x) =
4770 integral p (\x. (\x. Normal c * Normal d) x +
4771 (\x. (- Normal c) * Y x + (- Normal d) * X x) x)`
4772 >- (MATCH_MP_TAC integral_cong >> RW_TAC std_ss [] \\
4773 `?a. X x = Normal a` by PROVE_TAC [extreal_cases] >> POP_ORW \\
4774 `?b. Y x = Normal b` by PROVE_TAC [extreal_cases] >> POP_ORW \\
4775 SIMP_TAC real_ss [extreal_mul_def, extreal_ainv_def, extreal_add_def, extreal_sub_def,
4776 extreal_11] \\
4777 REAL_ARITH_TAC)
4778 >> Rewr'
4779 >> Know `integral p (\x. (\x. Normal c * Normal d) x +
4780 (\x. -Normal c * Y x + -Normal d * X x) x) =
4781 integral p (\x. Normal c * Normal d) +
4782 integral p (\x. -Normal c * Y x + -Normal d * X x)`
4783 >- (MATCH_MP_TAC integral_add \\
4784 RW_TAC std_ss [extreal_ainv_def, extreal_mul_def, extreal_not_infty] >| (* 2 subgoals *)
4785 [ (* goal 1 (of 2) *)
4786 MATCH_MP_TAC integrable_const >> art [extreal_of_num_def, lt_infty],
4787 (* goal 2 (of 2) *)
4788 `(\x. Normal (-c) * Y x + Normal (-d) * X x) =
4789 (\x. (\x. Normal (-c) * Y x) x + (\x. Normal (-d) * X x) x)`
4790 by METIS_TAC [] >> POP_ORW \\
4791 MATCH_MP_TAC integrable_add >> RW_TAC std_ss [integrable_cmul] \\
4792 DISJ1_TAC >> CONJ_TAC >| (* 2 subgoals *)
4793 [ (* goal 2.1 (of 2) *)
4794 `?r. Y x = Normal r` by PROVE_TAC [extreal_cases] >> POP_ORW \\
4795 REWRITE_TAC [extreal_mul_def, extreal_not_infty],
4796 (* goal 2.2 (of 2) *)
4797 `?r. X x = Normal r` by PROVE_TAC [extreal_cases] >> POP_ORW \\
4798 REWRITE_TAC [extreal_mul_def, extreal_not_infty] ] ]) >> Rewr'
4799 >> Know `integral p (\x. Normal c * Normal d) = Normal c * Normal d`
4800 >- (REWRITE_TAC [GSYM expectation_def, extreal_mul_def] \\
4801 MATCH_MP_TAC expectation_const >> art [prob_space_def, p_space_def]) >> Rewr'
4802 >> `(\x. -Normal c * Y x + -Normal d * X x) =
4803 (\x. (\x. -Normal c * Y x) x + (\x. -Normal d * X x) x)` by METIS_TAC [] >> POP_ORW
4804 >> Know `integral p (\x. (\x. -Normal c * Y x) x + (\x. -Normal d * X x) x) =
4805 integral p (\x. -Normal c * Y x) + integral p (\x. -Normal d * X x)`
4806 >- (MATCH_MP_TAC integral_add >> art [extreal_ainv_def] \\
4807 RW_TAC std_ss [integrable_cmul] \\
4808 DISJ1_TAC >> CONJ_TAC >| (* 2 subgoals *)
4809 [ (* goal 1 (of 2) *)
4810 `?r. Y x = Normal r` by PROVE_TAC [extreal_cases] >> POP_ORW \\
4811 REWRITE_TAC [extreal_mul_def, extreal_not_infty],
4812 (* goal 2.2 (of 2) *)
4813 `?r. X x = Normal r` by PROVE_TAC [extreal_cases] >> POP_ORW \\
4814 REWRITE_TAC [extreal_mul_def, extreal_not_infty] ]) >> Rewr'
4815 >> Know `integral p (\x. -Normal c * Y x) = -Normal c * integral p Y`
4816 >- (REWRITE_TAC [extreal_ainv_def] \\
4817 MATCH_MP_TAC integral_cmul >> art []) >> Rewr'
4818 >> Know `integral p (\x. -Normal d * X x) = -Normal d * integral p X`
4819 >- (REWRITE_TAC [extreal_ainv_def] \\
4820 MATCH_MP_TAC integral_cmul >> art []) >> Rewr'
4821 >> ASM_REWRITE_TAC [extreal_ainv_def, extreal_mul_def, extreal_add_def, extreal_11,
4822 extreal_of_num_def]
4823 >> REAL_ARITH_TAC
4824QED
4825
4826Theorem uncorrelated_covariance :
4827 !p X Y. prob_space p /\ real_random_variable X p /\ real_random_variable Y p /\
4828 uncorrelated p X Y ==> (covariance p X Y = 0)
4829Proof
4830 RW_TAC std_ss [covariance_def]
4831 >> MATCH_MP_TAC uncorrelated_thm >> art []
4832QED
4833
4834Theorem uncorrelated_orthogonal :
4835 !p X Y. prob_space p /\ real_random_variable X p /\ real_random_variable Y p /\
4836 (expectation p X = 0) /\ (expectation p Y = 0) ==>
4837 (uncorrelated p X Y <=> orthogonal p X Y)
4838Proof
4839 rw [orthogonal_def, uncorrelated_def]
4840QED
4841
4842(* Fundamental relation of uncorrelated r.v.'s [2, p.108] *)
4843Theorem variance_sum :
4844 !p X (J :'index set).
4845 prob_space p /\ FINITE J /\ (!i. i IN J ==> real_random_variable (X i) p) /\
4846 uncorrelated_vars p X J ==>
4847 (variance p (\x. SIGMA (\n. X n x) J) = SIGMA (\n. variance p (X n)) J)
4848Proof
4849 RW_TAC std_ss [uncorrelated_vars_def, variance_alt]
4850 >> Cases_on `J = {}`
4851 >- (Know `expectation p (\x. 0) = 0`
4852 >- (REWRITE_TAC [extreal_of_num_def] \\
4853 MATCH_MP_TAC expectation_const >> art []) \\
4854 RW_TAC std_ss [EXTREAL_SUM_IMAGE_EMPTY, sub_rzero, pow_2, mul_rzero])
4855 >> Cases_on `SING J`
4856 >- (FULL_SIMP_TAC std_ss [SING_DEF] \\
4857 RW_TAC std_ss [EXTREAL_SUM_IMAGE_SING] >> METIS_TAC [])
4858 (* LHS: applying integral_sum *)
4859 >> Know `expectation p (\x. SIGMA (\n. X n x) J) = SIGMA (\n. expectation p (X n)) J`
4860 >- (fs [expectation_def, prob_space_def, p_space_def, real_random_variable_def,
4861 random_variable_def, events_def] \\
4862 MATCH_MP_TAC integral_sum >> RW_TAC std_ss [] \\
4863 MATCH_MP_TAC finite_second_moments_imp_integrable \\
4864 fs [uncorrelated_def, prob_space_def, p_space_def, real_random_variable_def,
4865 random_variable_def, events_def] \\
4866 `?j. i <> j /\ j IN J` by ASM_SET_TAC [SING_DEF] >> METIS_TAC [])
4867 >> Rewr'
4868 >> Know `!n. n IN J ==> finite_second_moments p (X n)`
4869 >- (fs [uncorrelated_def] >> RW_TAC std_ss [] \\
4870 `?n'. n <> n' /\ n' IN J` by ASM_SET_TAC [SING_DEF] >> METIS_TAC [])
4871 >> DISCH_TAC
4872 >> `!n. n IN J ==> expectation p (X n) <> PosInf /\ expectation p (X n) <> NegInf`
4873 by METIS_TAC [finite_second_moments_imp_finite_expectation]
4874 >> Know `!i x. i IN J /\ x IN p_space p ==> X i x <> PosInf /\ X i x <> NegInf`
4875 >- fs [real_random_variable_def] >> DISCH_TAC
4876 (* LHS: applying EXTREAL_SUM_IMAGE_SUB *)
4877 >> Know `!x. x IN p_space p ==>
4878 SIGMA (\n. X n x) J - SIGMA (\n. expectation p (X n)) J =
4879 SIGMA (\n. (\n. X n x) n - (\n. expectation p (X n)) n) J`
4880 >- (rpt STRIP_TAC >> MATCH_MP_TAC EQ_SYM \\
4881 irule EXTREAL_SUM_IMAGE_SUB >> art [] >> DISJ1_TAC >> RW_TAC std_ss [])
4882 >> DISCH_TAC
4883 >> Know ‘expectation p
4884 (\x. (SIGMA (\n. X n x) J - SIGMA (\n. expectation p (X n)) J) pow 2) =
4885 expectation p
4886 (\x. (SIGMA (\n. (\n. X n x) n - (\n. expectation p (X n)) n) J) pow 2)’
4887 >- (MATCH_MP_TAC expectation_cong >> RW_TAC std_ss [])
4888 >> Rewr' >> BETA_TAC
4889 >> POP_ASSUM K_TAC
4890 (* LHS: applying EXTREAL_SUM_IMAGE_POW *)
4891 >> Know `!x. x IN p_space p ==>
4892 (SIGMA (\n. X n x - expectation p (X n)) J) pow 2 =
4893 SIGMA (\(i,j). (\n. X n x - expectation p (X n)) i *
4894 (\n. X n x - expectation p (X n)) j) (J CROSS J)`
4895 >- (rpt STRIP_TAC \\
4896 irule EXTREAL_SUM_IMAGE_POW >> RW_TAC std_ss [] \\ (* 2 subgoals, same tactics *)
4897 `?a. X x' x = Normal a` by METIS_TAC [extreal_cases] >> POP_ORW \\
4898 `?b. expectation p (X x') = Normal b` by METIS_TAC [extreal_cases] >> POP_ORW \\
4899 REWRITE_TAC [extreal_sub_def, extreal_not_infty])
4900 >> DISCH_TAC
4901 >> Know ‘expectation p (\x. SIGMA (\n. X n x - expectation p (X n)) J pow 2) =
4902 expectation p (\x. SIGMA (\(i,j). (\n. X n x - expectation p (X n)) i *
4903 (\n. X n x - expectation p (X n)) j) (J CROSS J))’
4904 >- (MATCH_MP_TAC expectation_cong >> RW_TAC std_ss [])
4905 >> Rewr' >> BETA_TAC
4906 >> POP_ASSUM K_TAC
4907 (* LHS: applying EXTREAL_SUM_IMAGE_DISJOINT_UNION *)
4908 >> Q.ABBREV_TAC `A = {(i,i) | i IN J}`
4909 >> Q.ABBREV_TAC `B = {(i,j) | i IN J /\ j IN J /\ i <> j}`
4910 >> Know `DISJOINT A B`
4911 >- (Q.UNABBREV_TAC `A` >> Q.UNABBREV_TAC `B` \\
4912 RW_TAC std_ss [DISJOINT_DEF, Once EXTENSION, NOT_IN_EMPTY, GSPECIFICATION, IN_INTER] \\
4913 Cases_on `x` >> Cases_on `q = r`
4914 >- (DISJ2_TAC >> GEN_TAC >> Cases_on `x'` >> RW_TAC std_ss [] \\
4915 METIS_TAC []) \\
4916 DISJ1_TAC >> GEN_TAC >> RW_TAC std_ss [] >> METIS_TAC [])
4917 >> DISCH_TAC
4918 >> Know `J CROSS J = A UNION B`
4919 >- (Q.UNABBREV_TAC `A` >> Q.UNABBREV_TAC `B` \\
4920 RW_TAC std_ss [IN_CROSS, Once EXTENSION] >> Cases_on `x` \\
4921 RW_TAC std_ss [Once EXTENSION, GSPECIFICATION, IN_UNION] \\
4922 EQ_TAC >> rpt STRIP_TAC >| (* 5 subgoals *)
4923 [ (* goal 1 (of 5) *)
4924 Cases_on `r = q` >- (DISJ1_TAC >> art []) \\
4925 DISJ2_TAC >> Q.EXISTS_TAC `(q,r)` >> RW_TAC std_ss [],
4926 (* goal 2 (of 5) *) art [],
4927 (* goal 3 (of 5) *) art [],
4928 (* goal 4 (of 5) *) Cases_on `x` >> fs [],
4929 (* goal 5 (of 5) *) Cases_on `x` >> fs [] ])
4930 >> DISCH_TAC >> art []
4931 >> Know ‘expectation p
4932 (\x. SIGMA (\(i,j). (X i x - expectation p (X i)) *
4933 (X j x - expectation p (X j))) (A UNION B)) =
4934 expectation p
4935 (\x. SIGMA (\(i,j). (X i x - expectation p (X i)) *
4936 (X j x - expectation p (X j))) A +
4937 SIGMA (\(i,j). (X i x - expectation p (X i)) *
4938 (X j x - expectation p (X j))) B)’
4939 >- (MATCH_MP_TAC expectation_cong >> RW_TAC std_ss [] \\
4940 irule EXTREAL_SUM_IMAGE_DISJOINT_UNION \\
4941
4942 `FINITE (J CROSS J)` by PROVE_TAC [FINITE_CROSS] \\
4943 `A SUBSET (J CROSS J) /\ B SUBSET (J CROSS J)` by ASM_SET_TAC [] \\
4944 `FINITE A /\ FINITE B` by PROVE_TAC [SUBSET_FINITE] \\
4945 Q.PAT_X_ASSUM `J CROSS J = A UNION B` (art o wrap o SYM) \\
4946 DISJ2_TAC >> RW_TAC std_ss [IN_CROSS] >> Cases_on `x'` \\
4947 FULL_SIMP_TAC std_ss [] \\
4948 `?a. X q x = Normal a` by PROVE_TAC [extreal_cases] >> POP_ORW \\
4949 `?b. X r x = Normal b` by PROVE_TAC [extreal_cases] >> POP_ORW \\
4950 `?c. expectation p (X q) = Normal c` by PROVE_TAC [extreal_cases] >> POP_ORW \\
4951 `?d. expectation p (X r) = Normal d` by PROVE_TAC [extreal_cases] >> POP_ORW \\
4952 REWRITE_TAC [extreal_sub_def, extreal_mul_def, extreal_not_infty]) >> Rewr'
4953 (* LHS: applying EXTREAL_SUM_IMAGE_IMAGE *)
4954 >> `A = IMAGE (\x. (x,x)) J`
4955 by (RW_TAC std_ss [Abbr ‘A’, Once EXTENSION, IN_IMAGE, GSPECIFICATION])
4956 >> Know ‘!x. x IN p_space p ==>
4957 SIGMA (\(i,j). (X i x - expectation p (X i)) *
4958 (X j x - expectation p (X j))) A =
4959 SIGMA ((\(i,j). (X i x - expectation p (X i)) *
4960 (X j x - expectation p (X j))) o (\x. (x,x))) J’
4961 >- (rpt STRIP_TAC >> art [] >> irule EXTREAL_SUM_IMAGE_IMAGE >> art [] \\
4962 reverse CONJ_TAC
4963 >- (MATCH_MP_TAC INJ_IMAGE >> Q.EXISTS_TAC `J CROSS J` \\
4964 Q.PAT_X_ASSUM `J CROSS J = A UNION B` K_TAC \\
4965 RW_TAC std_ss [INJ_DEF, IN_IMAGE, IN_CROSS]) \\
4966 Q.PAT_X_ASSUM `A = IMAGE (\x. (x,x)) J` (REWRITE_TAC o wrap o SYM) \\
4967 DISJ2_TAC >> RW_TAC std_ss [] >> Cases_on `x'` >> SIMP_TAC std_ss [] \\
4968 `A SUBSET (J CROSS J) /\ B SUBSET (J CROSS J)` by ASM_SET_TAC [] \\
4969 Know `q IN J /\ r IN J`
4970 >- (CONJ_TAC >> `(q,r) IN (J CROSS J)` by PROVE_TAC [SUBSET_DEF] \\
4971 POP_ASSUM MP_TAC >> SIMP_TAC std_ss [IN_CROSS]) >> STRIP_TAC \\
4972 `?a. X q x = Normal a` by PROVE_TAC [extreal_cases] >> POP_ORW \\
4973 `?b. X r x = Normal b` by PROVE_TAC [extreal_cases] >> POP_ORW \\
4974 `?c. expectation p (X q) = Normal c` by PROVE_TAC [extreal_cases] >> POP_ORW \\
4975 `?d. expectation p (X r) = Normal d` by PROVE_TAC [extreal_cases] >> POP_ORW \\
4976 REWRITE_TAC [extreal_sub_def, extreal_mul_def, extreal_not_infty])
4977 >> SIMP_TAC std_ss [o_DEF, GSYM pow_2]
4978 >> DISCH_TAC
4979 >> Know ‘expectation p
4980 (\x. SIGMA (\(i,j). (X i x - expectation p (X i)) *
4981 (X j x - expectation p (X j))) A +
4982 SIGMA (\(i,j). (X i x - expectation p (X i)) *
4983 (X j x - expectation p (X j))) B) =
4984 expectation p
4985 (\x. SIGMA (\n. (X n x - expectation p (X n)) pow 2) J +
4986 SIGMA (\(i,j). (X i x - expectation p (X i)) *
4987 (X j x - expectation p (X j))) B)’
4988 >- (MATCH_MP_TAC expectation_cong >> RW_TAC std_ss []) >> Rewr'
4989 >> POP_ASSUM K_TAC
4990 (* an important shared result *)
4991 >> Know `!q r. q IN J /\ r IN J ==>
4992 integrable p (\x. (X q x - expectation p (X q)) *
4993 (X r x - expectation p (X r)))`
4994 >- (rpt STRIP_TAC \\
4995 Q.ABBREV_TAC `E1 = expectation p (X q)` \\
4996 Q.ABBREV_TAC `E2 = expectation p (X r)` \\
4997 (* integrable p (\x. (X q x - E1) * (X r x - E2)) *)
4998 MATCH_MP_TAC integrable_bounded \\
4999 Q.EXISTS_TAC `\x. Normal (1 / 2) * ((X q x - E1) pow 2 + (X r x - E2) pow 2)` \\
5000 CONJ_TAC >- fs [prob_space_def] \\
5001 CONJ_TAC
5002 >- (`(\x. Normal (1 / 2) * ((X q x - E1) pow 2 + (X r x - E2) pow 2)) =
5003 (\x. Normal (1 / 2) * (\x. (X q x - E1) pow 2 + (X r x - E2) pow 2) x)`
5004 by METIS_TAC [] >> POP_ORW \\
5005 MATCH_MP_TAC integrable_cmul >> CONJ_TAC >- fs [prob_space_def] \\
5006 `!x. (X q x - E1) pow 2 + (X r x - E2) pow 2 =
5007 (\x. (X q x - E1) pow 2) x + (\x. (X r x - E2) pow 2) x`
5008 by METIS_TAC [] >> POP_ORW \\
5009 MATCH_MP_TAC integrable_add \\
5010 CONJ_TAC >- fs [prob_space_def] \\
5011 `?e1. E1 = Normal e1` by PROVE_TAC [extreal_cases] >> POP_ORW \\
5012 `?e2. E2 = Normal e2` by PROVE_TAC [extreal_cases] >> POP_ORW \\
5013 REWRITE_TAC [CONJ_ASSOC] \\
5014 CONJ_TAC >- METIS_TAC [finite_second_moments_eq_integrable_squares] \\
5015 GEN_TAC >> DISCH_TAC >> DISJ1_TAC >> BETA_TAC \\
5016 CONJ_TAC >> MATCH_MP_TAC pos_not_neginf >> REWRITE_TAC [le_pow2]) \\
5017 CONJ_TAC
5018 >- (MATCH_MP_TAC IN_MEASURABLE_BOREL_TIMES \\
5019 qexistsl_tac [`\x. X q x - E1`, `\x. X r x - E2`] \\
5020 fs [prob_space_def, measure_space_def, space_def, p_space_def, events_def] \\
5021 CONJ_TAC
5022 >- (`!x. X q x - E1 = X q x - (\x. E1) x` by METIS_TAC [] >> POP_ORW \\
5023 MATCH_MP_TAC IN_MEASURABLE_BOREL_SUB \\
5024 qexistsl_tac [`X q`, `\x. E1`] \\
5025 fs [real_random_variable, space_def, p_space_def, events_def] \\
5026 MATCH_MP_TAC IN_MEASURABLE_BOREL_CONST \\
5027 Q.EXISTS_TAC `E1` >> fs [space_def]) \\
5028 `!x. X r x - E2 = X r x - (\x. E2) x` by METIS_TAC [] >> POP_ORW \\
5029 MATCH_MP_TAC IN_MEASURABLE_BOREL_SUB \\
5030 qexistsl_tac [`X r`, `\x. E2`] \\
5031 fs [real_random_variable, space_def, p_space_def, events_def] \\
5032 MATCH_MP_TAC IN_MEASURABLE_BOREL_CONST \\
5033 Q.EXISTS_TAC `E2` >> fs [space_def]) \\
5034 RW_TAC std_ss [abs_le_half_pow2])
5035 >> DISCH_TAC
5036 (* LHS: applying integral_add *)
5037 >> Know `expectation p
5038 (\x. (\x. SIGMA (\n. (X n x - expectation p (X n)) pow 2) J) x +
5039 (\x. SIGMA (\(i,j). (X i x - expectation p (X i)) *
5040 (X j x - expectation p (X j))) B) x) =
5041 expectation p (\x. SIGMA (\n. (X n x - expectation p (X n)) pow 2) J) +
5042 expectation p (\x. SIGMA (\(i,j). (X i x - expectation p (X i)) *
5043 (X j x - expectation p (X j))) B)`
5044 >- (REWRITE_TAC [expectation_def] >> MATCH_MP_TAC integral_add \\
5045 CONJ_TAC >- FULL_SIMP_TAC std_ss [prob_space_def] \\
5046 REWRITE_TAC [CONJ_ASSOC] \\
5047 reverse CONJ_TAC (* easy goals first *)
5048 >- (GEN_TAC >> BETA_TAC >> DISCH_TAC >> DISJ1_TAC \\
5049 CONJ_TAC
5050 >- (MATCH_MP_TAC EXTREAL_SUM_IMAGE_NOT_NEGINF >> RW_TAC std_ss [lt_infty] \\
5051 MATCH_MP_TAC lte_trans >> Q.EXISTS_TAC `0` \\
5052 REWRITE_TAC [le_pow2] >> REWRITE_TAC [lt_infty, extreal_of_num_def]) \\
5053 MATCH_MP_TAC EXTREAL_SUM_IMAGE_NOT_NEGINF \\
5054 `B SUBSET (J CROSS J)` by ASM_SET_TAC [] \\
5055 `FINITE (J CROSS J)` by PROVE_TAC [FINITE_CROSS] \\
5056 `FINITE B` by PROVE_TAC [SUBSET_FINITE] >> art [] \\
5057 Q.X_GEN_TAC `n` >> Cases_on `n` >> DISCH_TAC >> SIMP_TAC std_ss [] \\
5058 Know `q IN J /\ r IN J`
5059 >- (CONJ_TAC >> `(q,r) IN (J CROSS J)` by PROVE_TAC [SUBSET_DEF] \\
5060 POP_ASSUM MP_TAC >> SIMP_TAC std_ss [IN_CROSS]) >> STRIP_TAC \\
5061 REWRITE_TAC [GSYM expectation_def] \\
5062 FULL_SIMP_TAC std_ss [p_space_def] \\
5063 `?a. X q x = Normal a` by PROVE_TAC [extreal_cases] >> POP_ORW \\
5064 `?b. X r x = Normal b` by PROVE_TAC [extreal_cases] >> POP_ORW \\
5065 `?c. expectation p (X q) = Normal c` by PROVE_TAC [extreal_cases] >> POP_ORW \\
5066 `?d. expectation p (X r) = Normal d` by PROVE_TAC [extreal_cases] >> POP_ORW \\
5067 REWRITE_TAC [extreal_sub_def, extreal_mul_def, extreal_not_infty]) \\
5068 (* integrable p (\x. SIGMA (\n. (X n x - integral p (X n)) pow 2) J) *)
5069 CONJ_TAC
5070 >- (`!x n. (X n x - integral p (X n)) pow 2 =
5071 (\n x. (X n x - integral p (X n)) pow 2) n x` by METIS_TAC [] \\
5072 POP_ORW >> MATCH_MP_TAC integrable_sum >> ASM_SIMP_TAC std_ss [] \\
5073 CONJ_TAC >- FULL_SIMP_TAC std_ss [prob_space_def] \\
5074 CONJ_TAC
5075 >- (RW_TAC std_ss [GSYM expectation_def] \\
5076 `?r. expectation p (X i) = Normal r` by PROVE_TAC [extreal_cases] >> POP_ORW \\
5077 METIS_TAC [finite_second_moments_eq_integrable_squares]) \\
5078 rpt GEN_TAC >> SIMP_TAC std_ss [GSYM expectation_def] >> STRIP_TAC \\
5079 `?r. expectation p (X i) = Normal r` by PROVE_TAC [extreal_cases] >> POP_ORW \\
5080 FULL_SIMP_TAC std_ss [p_space_def] \\
5081 `?c. X i x = Normal c` by PROVE_TAC [extreal_cases] >> POP_ORW \\
5082 REWRITE_TAC [pow_2, extreal_sub_def, extreal_mul_def, extreal_not_infty]) \\
5083 (* applying integrable_sum *)
5084 Know `!x. (\(i,j). (X i x - integral p (X i)) * (X j x - integral p (X j))) =
5085 (\i. (\i x. (X (FST i) x - integral p (X (FST i))) *
5086 (X (SND i) x - integral p (X (SND i)))) i x)`
5087 >- (GEN_TAC >> FUN_EQ_TAC >> Q.X_GEN_TAC `y` >> Cases_on `y` \\
5088 SIMP_TAC std_ss []) >> Rewr' \\
5089 MATCH_MP_TAC integrable_sum \\
5090 `B SUBSET (J CROSS J)` by ASM_SET_TAC [] \\
5091 `FINITE (J CROSS J)` by PROVE_TAC [FINITE_CROSS] \\
5092 `FINITE B` by PROVE_TAC [SUBSET_FINITE] >> art [] \\
5093 CONJ_TAC >- FULL_SIMP_TAC std_ss [prob_space_def] \\
5094 reverse CONJ_TAC
5095 >- (rpt GEN_TAC >> STRIP_TAC \\
5096 Cases_on `i` >> FULL_SIMP_TAC std_ss [] \\
5097 Know `q IN J /\ r IN J`
5098 >- (CONJ_TAC >> `(q,r) IN (J CROSS J)` by PROVE_TAC [SUBSET_DEF] \\
5099 POP_ASSUM MP_TAC >> SIMP_TAC std_ss [IN_CROSS]) >> STRIP_TAC \\
5100 REWRITE_TAC [GSYM expectation_def] \\
5101 FULL_SIMP_TAC std_ss [p_space_def] \\
5102 `?a. X q x = Normal a` by PROVE_TAC [extreal_cases] >> POP_ORW \\
5103 `?b. X r x = Normal b` by PROVE_TAC [extreal_cases] >> POP_ORW \\
5104 `?c. expectation p (X q) = Normal c` by PROVE_TAC [extreal_cases] >> POP_ORW \\
5105 `?d. expectation p (X r) = Normal d` by PROVE_TAC [extreal_cases] >> POP_ORW \\
5106 REWRITE_TAC [extreal_sub_def, extreal_mul_def, extreal_not_infty]) \\
5107 GEN_TAC >> DISCH_TAC \\
5108 Cases_on `i` >> FULL_SIMP_TAC std_ss [] \\
5109 Know `q IN J /\ r IN J`
5110 >- (CONJ_TAC >> `(q,r) IN (J CROSS J)` by PROVE_TAC [SUBSET_DEF] \\
5111 POP_ASSUM MP_TAC >> SIMP_TAC std_ss [IN_CROSS]) >> STRIP_TAC \\
5112 REWRITE_TAC [GSYM expectation_def] \\
5113 FIRST_X_ASSUM MATCH_MP_TAC >> art [])
5114 >> BETA_TAC >> Rewr'
5115 (* LHS: applying integral_sum *)
5116 >> Know `expectation p (\x. SIGMA (\n. (\i x. (X i x - expectation p (X i)) pow 2) n x) J) =
5117 SIGMA (\n. expectation p ((\i x. (X i x - expectation p (X i)) pow 2) n)) J`
5118 >- (REWRITE_TAC [expectation_def] \\
5119 MATCH_MP_TAC integral_sum >> ASM_SIMP_TAC std_ss [] \\
5120 CONJ_TAC >- FULL_SIMP_TAC std_ss [prob_space_def] \\
5121 reverse CONJ_TAC
5122 >- (RW_TAC std_ss [GSYM expectation_def, pow_2] \\
5123 FULL_SIMP_TAC std_ss [p_space_def] \\
5124 `?r. X i x = Normal r` by PROVE_TAC [extreal_cases] >> POP_ORW \\
5125 `?c. expectation p (X i) = Normal c` by PROVE_TAC [extreal_cases] >> POP_ORW \\
5126 REWRITE_TAC [extreal_sub_def, extreal_mul_def, extreal_not_infty]) \\
5127 RW_TAC std_ss [GSYM expectation_def] \\
5128 `?c. expectation p (X i) = Normal c` by PROVE_TAC [extreal_cases] >> POP_ORW \\
5129 METIS_TAC [finite_second_moments_eq_integrable_squares])
5130 >> BETA_TAC >> Rewr'
5131 >> Suff `expectation p (\x. SIGMA (\(i,j). (X i x - expectation p (X i)) *
5132 (X j x - expectation p (X j))) B) = 0`
5133 >- (Rewr' >> REWRITE_TAC [add_rzero])
5134 (* LHS: applying integral_sum again *)
5135 >> Know `!x. (\(i,j). (X i x - expectation p (X i)) * (X j x - expectation p (X j))) =
5136 (\i. (X (FST i) x - expectation p (X (FST i))) *
5137 (X (SND i) x - expectation p (X (SND i))))`
5138 >- (GEN_TAC >> RW_TAC std_ss [FUN_EQ_THM] \\
5139 Cases_on `i` >> SIMP_TAC std_ss [])
5140 >> Rewr'
5141 >> Know `expectation p (\x. SIGMA (\i. (\i x. (X (FST i) x - expectation p (X (FST i))) *
5142 (X (SND i) x - expectation p (X (SND i)))) i x) B) =
5143 SIGMA (\i. expectation p ((\i x. (X (FST i) x - expectation p (X (FST i))) *
5144 (X (SND i) x - expectation p (X (SND i)))) i)) B`
5145 >- (REWRITE_TAC [expectation_def] >> MATCH_MP_TAC integral_sum \\
5146 `B SUBSET (J CROSS J)` by ASM_SET_TAC [] \\
5147 `FINITE (J CROSS J)` by PROVE_TAC [FINITE_CROSS] \\
5148 `FINITE B` by PROVE_TAC [SUBSET_FINITE] \\
5149 ASM_SIMP_TAC std_ss [] \\
5150 CONJ_TAC >- FULL_SIMP_TAC std_ss [prob_space_def] \\
5151 reverse CONJ_TAC
5152 >- (rpt GEN_TAC >> STRIP_TAC \\
5153 Cases_on `i` >> FULL_SIMP_TAC std_ss [] \\
5154 Know `q IN J /\ r IN J`
5155 >- (CONJ_TAC >> `(q,r) IN (J CROSS J)` by PROVE_TAC [SUBSET_DEF] \\
5156 POP_ASSUM MP_TAC >> SIMP_TAC std_ss [IN_CROSS]) \\
5157 STRIP_TAC \\
5158 REWRITE_TAC [GSYM expectation_def] \\
5159 FULL_SIMP_TAC std_ss [p_space_def] \\
5160 `?a. X q x = Normal a` by PROVE_TAC [extreal_cases] >> POP_ORW \\
5161 `?b. X r x = Normal b` by PROVE_TAC [extreal_cases] >> POP_ORW \\
5162 `?c. expectation p (X q) = Normal c` by PROVE_TAC [extreal_cases] >> POP_ORW \\
5163 `?d. expectation p (X r) = Normal d` by PROVE_TAC [extreal_cases] >> POP_ORW \\
5164 REWRITE_TAC [extreal_sub_def, extreal_mul_def, extreal_not_infty]) \\
5165 GEN_TAC >> DISCH_TAC \\
5166 Cases_on `i` >> FULL_SIMP_TAC std_ss [] \\
5167 Know `q IN J /\ r IN J`
5168 >- (CONJ_TAC >> `(q,r) IN (J CROSS J)` by PROVE_TAC [SUBSET_DEF] \\
5169 POP_ASSUM MP_TAC >> SIMP_TAC std_ss [IN_CROSS]) >> STRIP_TAC \\
5170 REWRITE_TAC [GSYM expectation_def] \\
5171 FIRST_X_ASSUM MATCH_MP_TAC >> art [])
5172 >> BETA_TAC >> Rewr'
5173 >> `B SUBSET (J CROSS J)` by ASM_SET_TAC []
5174 >> `FINITE (J CROSS J)` by PROVE_TAC [FINITE_CROSS]
5175 >> `FINITE B` by PROVE_TAC [SUBSET_FINITE]
5176 >> Suff `SIGMA (\i. expectation p (\x. (X (FST i) x - expectation p (X (FST i))) *
5177 (X (SND i) x - expectation p (X (SND i))))) B =
5178 SIGMA (\i. 0) B`
5179 >- (Rewr' >> MATCH_MP_TAC EXTREAL_SUM_IMAGE_ZERO >> art [])
5180 (* final step: applying EXTREAL_SUM_IMAGE_EQ *)
5181 >> irule EXTREAL_SUM_IMAGE_EQ
5182 >> ASM_SIMP_TAC std_ss [extreal_of_num_def, extreal_not_infty]
5183 >> Suff `!x. x IN B ==>
5184 (expectation p (\x'. (X (FST x) x' - expectation p (X (FST x))) *
5185 (X (SND x) x' - expectation p (X (SND x)))) = 0)`
5186 >- (RW_TAC std_ss [extreal_of_num_def, extreal_not_infty])
5187 >> Q.X_GEN_TAC `n` >> Cases_on `n`
5188 >> Q.UNABBREV_TAC `B` >> RW_TAC std_ss [GSPECIFICATION]
5189 >> Cases_on `x` >> FULL_SIMP_TAC std_ss []
5190 >> MATCH_MP_TAC uncorrelated_thm
5191 >> PROVE_TAC []
5192QED
5193
5194(******************************************************************************)
5195(* Almost sure convergence; Borel-Cantelli Lemma [2, p.75] *)
5196(******************************************************************************)
5197
5198Theorem INDICATOR_FN_REAL_RV:
5199 !p s. prob_space p /\ s IN events p ==> real_random_variable (indicator_fn s) p
5200Proof
5201 RW_TAC std_ss [real_random_variable, INDICATOR_FN_NOT_INFTY]
5202 >> MATCH_MP_TAC IN_MEASURABLE_BOREL_INDICATOR
5203 >> Q.EXISTS_TAC `s`
5204 >> RW_TAC std_ss [subsets_def, space_def]
5205 >> fs [prob_space_def, measure_space_def, p_space_def, events_def]
5206QED
5207
5208Theorem EVENTS_LIMSUP:
5209 !p E. prob_space p /\ (!n. E n IN events p) ==> limsup E IN events p
5210Proof
5211 (* proof *)
5212 RW_TAC std_ss [prob_space_def, measure_space_def, events_def, set_limsup_def]
5213 >> IMP_RES_TAC SIGMA_ALGEBRA_FN_BIGINTER
5214 >> fs [space_def, subsets_def, IN_FUNSET, IN_UNIV]
5215 >> POP_ASSUM MATCH_MP_TAC
5216 >> GEN_TAC >> BETA_TAC
5217 >> fs [sigma_algebra_def, space_def, subsets_def]
5218 >> FIRST_X_ASSUM MATCH_MP_TAC
5219 >> RW_TAC std_ss [tail_countable, SUBSET_DEF, GSPECIFICATION]
5220 >> ASM_REWRITE_TAC []
5221QED
5222
5223Theorem EVENTS_LIMINF:
5224 !p E. prob_space p /\ (!n. E n IN events p) ==> liminf E IN events p
5225Proof
5226 (* proof *)
5227 RW_TAC std_ss [prob_space_def, measure_space_def, events_def, set_liminf_def]
5228 >> STRIP_ASSUME_TAC
5229 (REWRITE_RULE [ASSUME ``sigma_algebra (m_space p,measurable_sets p)``, subsets_def]
5230 (Q.SPEC `(m_space p,measurable_sets p)` SIGMA_ALGEBRA_ALT))
5231 >> POP_ASSUM MATCH_MP_TAC
5232 >> RW_TAC std_ss [IN_FUNSET, IN_UNIV]
5233 >> Know `{E n | m <= n} <> {}` >- METIS_TAC [tail_not_empty]
5234 >> Know `countable {E n | m <= n}` >- METIS_TAC [tail_countable]
5235 >> RW_TAC std_ss [COUNTABLE_ENUM] >> art []
5236 >> IMP_RES_TAC SIGMA_ALGEBRA_FN_BIGINTER
5237 >> fs [space_def, subsets_def, IN_FUNSET, IN_UNIV]
5238 >> POP_ASSUM MATCH_MP_TAC
5239 >> Q.PAT_X_ASSUM `{E n | m <= n} = IMAGE f univ(:num)` (MP_TAC o (MATCH_MP EQ_SYM))
5240 >> RW_TAC std_ss [Once EXTENSION, IN_IMAGE, IN_UNIV, GSPECIFICATION]
5241 >> POP_ASSUM (STRIP_ASSUME_TAC o (Q.SPEC `f (x :num)`))
5242 >> Know `?x'. f x = f x'` >- (Q.EXISTS_TAC `x` >> REWRITE_TAC [])
5243 >> RW_TAC std_ss []
5244 >> PROVE_TAC []
5245QED
5246
5247Theorem PROB_LIMSUP:
5248 !p E. prob_space p /\ (!n. E n IN events p) ==>
5249 (prob p (limsup E) = inf (IMAGE (\m. prob p (BIGUNION {E n | m <= n})) UNIV))
5250Proof
5251 RW_TAC std_ss [prob_space_def, p_space_def, events_def, prob_def]
5252 >> MATCH_MP_TAC measure_limsup_finite >> art [extreal_of_num_def, lt_infty]
5253QED
5254
5255Theorem PROB_LIMINF:
5256 !p E. prob_space p /\ (!n. E n IN events p) ==>
5257 (prob p (liminf E) = sup (IMAGE (\m. prob p (BIGINTER {E n | m <= n})) UNIV))
5258Proof
5259 RW_TAC std_ss [prob_space_def, p_space_def, events_def, prob_def]
5260 >> MATCH_MP_TAC measure_liminf >> art []
5261QED
5262
5263Theorem expectation_indicator:
5264 !p s. prob_space p /\ s IN events p ==> (expectation p (indicator_fn s) = prob p s)
5265Proof
5266 RW_TAC std_ss [prob_space_def, events_def, expectation_def, prob_def]
5267 >> MATCH_MP_TAC integral_indicator >> art []
5268QED
5269
5270(* The "easy" part of Borel-Cantelli Lemma
5271
5272 The following proof is taken from Theorem 24.9 of [9, p.296], which depends on
5273 Beppo Levi's monotone convergence theorem, IN_limsup and a collorary from Marokv
5274 inequality.
5275
5276 Its usual "simple" proofs [2, p.77] [3, p.35] [4, p.308] [6, p.59] all
5277 require Bool's inequality for p.m.'s, and the convergence (to zero) of the
5278 remainders of `suminf (prob p o E)`, which the latter part is not easy to
5279 formalize as is.
5280 *)
5281Theorem Borel_Cantelli_Lemma1 :
5282 !p E. prob_space p /\ (!n. E n IN events p) /\
5283 suminf (prob p o E) < PosInf ==> (prob p (limsup E) = 0)
5284Proof
5285 RW_TAC std_ss [o_DEF]
5286 >> Know `limsup E = {x | x IN m_space p /\ (suminf (\n. indicator_fn (E n) x) = PosInf)}`
5287 >- (MATCH_MP_TAC (((REWRITE_RULE [space_def, subsets_def]) o
5288 (Q.SPECL [`(m_space p,measurable_sets p)`, `E`]))
5289 limsup_suminf_indicator_space) \\
5290 fs [prob_space_def, measure_space_def, events_def]) >> Rewr'
5291 >> Q.PAT_X_ASSUM `suminf (\x. prob p (E x)) < PosInf` MP_TAC
5292 >> Know `!x. prob p (E x) = integral p (indicator_fn (E x))`
5293 >- (GEN_TAC >> MATCH_MP_TAC EQ_SYM \\
5294 MATCH_MP_TAC (REWRITE_RULE [expectation_def] expectation_indicator) >> art [])
5295 >> Rewr'
5296 >> Know `!x. integral p (indicator_fn (E x)) = pos_fn_integral p (indicator_fn (E x))`
5297 >- (GEN_TAC >> MATCH_MP_TAC integral_pos_fn \\
5298 fs [prob_space_def, INDICATOR_FN_POS]) >> Rewr'
5299 >> Know `!x. pos_fn_integral p (indicator_fn (E x)) =
5300 pos_fn_integral p ((indicator_fn o E) x)`
5301 >- RW_TAC std_ss [o_DEF] >> Rewr'
5302 >> FULL_SIMP_TAC bool_ss [prob_space_def, events_def, p_space_def, prob_def]
5303 >> `sigma_algebra (m_space p,measurable_sets p)` by PROVE_TAC [measure_space_def]
5304 (* applying "pos_fn_integral_suminf" *)
5305 >> Know `suminf (\x. pos_fn_integral p ((indicator_fn o E) x)) =
5306 pos_fn_integral p (\x. suminf (\i. (indicator_fn o E) i x))`
5307 >- (MATCH_MP_TAC EQ_SYM \\
5308 MATCH_MP_TAC pos_fn_integral_suminf >> RW_TAC std_ss [INDICATOR_FN_POS] \\
5309 MATCH_MP_TAC IN_MEASURABLE_BOREL_INDICATOR \\
5310 Q.EXISTS_TAC `E i` >> art [subsets_def, space_def])
5311 >> Rewr'
5312 >> RW_TAC std_ss [o_DEF]
5313 >> Know `integrable p (\x. suminf (\i. indicator_fn (E i) x))`
5314 >- (RW_TAC std_ss [integrable_def, lt_infty] >| (* 3 subgoals *)
5315 [ (* goal 1 (of 3) *)
5316 MATCH_MP_TAC IN_MEASURABLE_BOREL_SUMINF >> BETA_TAC \\
5317 Q.EXISTS_TAC `indicator_fn o E` \\
5318 ASM_SIMP_TAC std_ss [o_DEF, space_def, INDICATOR_FN_POS] \\
5319 GEN_TAC >> MATCH_MP_TAC IN_MEASURABLE_BOREL_INDICATOR \\
5320 Q.EXISTS_TAC `E n` >> ASM_SIMP_TAC std_ss [subsets_def, space_def],
5321 (* goal 2 (of 3) *)
5322 Know `fn_plus (\x. suminf (\i. indicator_fn (E i) x)) =
5323 (\x. suminf (\i. indicator_fn (E i) x))`
5324 >- (MATCH_MP_TAC FN_PLUS_POS_ID >> GEN_TAC >> BETA_TAC \\
5325 MATCH_MP_TAC ext_suminf_pos >> RW_TAC std_ss [INDICATOR_FN_POS]) \\
5326 DISCH_THEN (art o wrap),
5327 (* goal 3 (of 3) *)
5328 Know `fn_minus (\x. suminf (\i. indicator_fn (E i) x)) = (\x. 0)`
5329 >- (MATCH_MP_TAC FN_MINUS_POS_ZERO >> GEN_TAC >> BETA_TAC \\
5330 MATCH_MP_TAC ext_suminf_pos >> RW_TAC std_ss [INDICATOR_FN_POS]) \\
5331 Rewr' \\
5332 `pos_fn_integral p (\x. 0) = 0` by PROVE_TAC [pos_fn_integral_zero] >> POP_ORW \\
5333 REWRITE_TAC [lt_infty, extreal_of_num_def] ])
5334 >> DISCH_TAC
5335 >> Know `pos_fn_integral p (\x. suminf (\i. indicator_fn (E i) x)) =
5336 integral p (\x. suminf (\i. indicator_fn (E i) x))`
5337 >- (MATCH_MP_TAC EQ_SYM \\
5338 MATCH_MP_TAC integral_pos_fn >> RW_TAC std_ss [] \\
5339 MATCH_MP_TAC ext_suminf_pos >> RW_TAC std_ss [INDICATOR_FN_POS])
5340 >> DISCH_THEN (fs o wrap)
5341 >> IMP_RES_TAC integrable_infty_null >> fs [null_set_def]
5342QED
5343
5344Theorem finite_second_moments_indicator_fn:
5345 !p s. prob_space p /\ s IN events p ==> finite_second_moments p (indicator_fn s)
5346Proof
5347 rpt STRIP_TAC
5348 >> Know `finite_second_moments p (indicator_fn s) <=>
5349 second_moment p (indicator_fn s) 0 < PosInf`
5350 >- (MATCH_MP_TAC finite_second_moments_alt >> art [] \\
5351 MATCH_MP_TAC INDICATOR_FN_REAL_RV >> art []) >> Rewr'
5352 >> fs [second_moment_def, moment_def, sub_rzero]
5353 >> Know `expectation p (\x. (indicator_fn s x) pow 2) = expectation p (indicator_fn s)`
5354 >- (fs [prob_space_def, p_space_def, expectation_def, events_def] \\
5355 MATCH_MP_TAC integral_indicator_pow_eq >> ASM_SIMP_TAC arith_ss []) >> Rewr'
5356 >> Know `expectation p (indicator_fn s) = prob p s`
5357 >- (MATCH_MP_TAC expectation_indicator >> art []) >> Rewr'
5358 >> MATCH_MP_TAC let_trans >> Q.EXISTS_TAC `1`
5359 >> METIS_TAC [PROB_LE_1, extreal_of_num_def, lt_infty]
5360QED
5361
5362Theorem variance_eq_indicator_fn :
5363 !p s. prob_space p /\ s IN events p ==>
5364 (variance p (indicator_fn s) =
5365 expectation p (indicator_fn s) - (expectation p (indicator_fn s)) pow 2)
5366Proof
5367 rpt STRIP_TAC
5368 >> Suff `variance p (indicator_fn s) =
5369 expectation p (\x. (indicator_fn s x) pow 2) - (expectation p (indicator_fn s)) pow 2`
5370 >- (Know `expectation p (\x. (indicator_fn s x) pow 2) = expectation p (indicator_fn s)`
5371 >- (fs [prob_space_def, p_space_def, expectation_def, events_def] \\
5372 MATCH_MP_TAC integral_indicator_pow_eq >> ASM_SIMP_TAC arith_ss []) >> Rewr)
5373 >> MATCH_MP_TAC variance_eq >> art []
5374 >> STRONG_CONJ_TAC
5375 >- (MATCH_MP_TAC INDICATOR_FN_REAL_RV >> art []) >> DISCH_TAC
5376 >> Know `integrable p (\x. (indicator_fn s x) pow 2) <=> finite_second_moments p (indicator_fn s)`
5377 >- (MATCH_MP_TAC EQ_SYM \\
5378 MATCH_MP_TAC finite_second_moments_eq_integrable_square >> art []) >> Rewr'
5379 >> MATCH_MP_TAC finite_second_moments_indicator_fn >> art []
5380QED
5381
5382Theorem variance_le_indicator_fn :
5383 !p s. prob_space p /\ s IN events p ==>
5384 variance p (indicator_fn s) <= expectation p (indicator_fn s)
5385Proof
5386 rpt STRIP_TAC
5387 >> Suff `variance p (indicator_fn s) <= expectation p (\x. (indicator_fn s x) pow 2)`
5388 >- (Know `expectation p (\x. (indicator_fn s x) pow 2) = expectation p (indicator_fn s)`
5389 >- (fs [prob_space_def, p_space_def, expectation_def, events_def] \\
5390 MATCH_MP_TAC integral_indicator_pow_eq >> ASM_SIMP_TAC arith_ss []) >> Rewr)
5391 >> MATCH_MP_TAC variance_le >> art []
5392 >> STRONG_CONJ_TAC
5393 >- (MATCH_MP_TAC INDICATOR_FN_REAL_RV >> art []) >> DISCH_TAC
5394 >> Know `integrable p (\x. (indicator_fn s x) pow 2) <=> finite_second_moments p (indicator_fn s)`
5395 >- (MATCH_MP_TAC EQ_SYM \\
5396 MATCH_MP_TAC finite_second_moments_eq_integrable_square >> art []) >> Rewr'
5397 >> MATCH_MP_TAC finite_second_moments_indicator_fn >> art []
5398QED
5399
5400(* for indicator_fn r.v.'s, pairwise independence implies additive of variances *)
5401Theorem variance_sum_indicator_fn :
5402 !p E J. prob_space p /\ (!n. n IN J ==> (E n) IN events p) /\
5403 pairwise_indep_events p E J /\ FINITE J ==>
5404 (variance p (\x. SIGMA (\n. (indicator_fn o E) n x) J) =
5405 SIGMA (\n. variance p ((indicator_fn o E) n)) J)
5406Proof
5407 RW_TAC bool_ss [pairwise_indep_events_def]
5408 >> MATCH_MP_TAC variance_sum
5409 >> RW_TAC std_ss [o_DEF, uncorrelated_vars_def, uncorrelated_def,
5410 finite_second_moments_indicator_fn, INDICATOR_FN_REAL_RV]
5411 >> REWRITE_TAC [GSYM INDICATOR_FN_INTER]
5412 >> `E i INTER E j IN events p` by PROVE_TAC [EVENTS_INTER]
5413 >> ASM_SIMP_TAC std_ss [expectation_indicator] >> fs [indep_def]
5414QED
5415
5416(* The harder part of Borel-Cantelli Lemma (of pairwise independence) *)
5417Theorem Borel_Cantelli_Lemma2p :
5418 !p E. prob_space p /\ (!n. (E n) IN events p) /\
5419 pairwise_indep_events p E univ(:num) /\
5420 (suminf (prob p o E) = PosInf) ==> (prob p (limsup E) = 1)
5421Proof
5422 RW_TAC std_ss [pairwise_indep_events_def, IN_UNIV]
5423 >> Q.ABBREV_TAC `X = indicator_fn o E`
5424 >> Know `!n. real_random_variable (X n) p`
5425 >- (GEN_TAC >> Q.UNABBREV_TAC `X` >> SIMP_TAC std_ss [o_DEF] \\
5426 MATCH_MP_TAC INDICATOR_FN_REAL_RV >> art []) >> DISCH_TAC
5427 >> Know `!n. (prob p o E) n = expectation p (X n)`
5428 >- (Q.UNABBREV_TAC `X` \\
5429 RW_TAC std_ss [o_DEF] >> MATCH_MP_TAC EQ_SYM \\
5430 MATCH_MP_TAC expectation_indicator >> art []) >> DISCH_TAC
5431 (* this result can be also derived directly from independence (for any events) *)
5432 >> Know `!i j. i <> j ==> (expectation p (\x. (X i) x * (X j) x) =
5433 expectation p (X i) * expectation p (X j))`
5434 >- (Q.UNABBREV_TAC `X` >> RW_TAC std_ss [o_DEF] \\
5435 REWRITE_TAC [GSYM INDICATOR_FN_INTER] \\
5436 `E i INTER E j IN events p` by PROVE_TAC [EVENTS_INTER] \\
5437 ASM_SIMP_TAC std_ss [expectation_indicator] >> fs [indep_def]) >> DISCH_TAC
5438 (* X n is uncorrelated *)
5439 >> Know `!i j. i <> j ==> uncorrelated p (X i) (X j)`
5440 >- (Q.UNABBREV_TAC `X` >> RW_TAC std_ss [uncorrelated_def] \\ (* 2 subgoals *)
5441 MATCH_MP_TAC finite_second_moments_indicator_fn >> art []) >> DISCH_TAC
5442 (* S is the partial sums of X, always finite *)
5443 >> Q.ABBREV_TAC `S = \n s. SIGMA (\i. X i s) (count n)`
5444 >> Know `!n x. S n x <> PosInf /\ S n x <> NegInf`
5445 >- (rpt GEN_TAC >> Q.UNABBREV_TAC `S` >> BETA_TAC \\
5446 Q.UNABBREV_TAC `X` >> RW_TAC std_ss [o_DEF] >| (* 2 subgoals, similar tactics *)
5447 [ (* goal 1 (of 2) *)
5448 MATCH_MP_TAC EXTREAL_SUM_IMAGE_NOT_POSINF >> RW_TAC std_ss [FINITE_COUNT, IN_COUNT] \\
5449 PROVE_TAC [INDICATOR_FN_NOT_INFTY],
5450 (* goal 2 (of 2) *)
5451 MATCH_MP_TAC EXTREAL_SUM_IMAGE_NOT_NEGINF >> RW_TAC std_ss [FINITE_COUNT, IN_COUNT] \\
5452 PROVE_TAC [INDICATOR_FN_NOT_INFTY] ]) >> DISCH_TAC
5453 (* S is Borel-measurable (needed later) *)
5454 >> Know `!n. S n IN measurable (p_space p,events p) Borel`
5455 >- (GEN_TAC >> Q.UNABBREV_TAC `S` \\
5456 MATCH_MP_TAC (INST_TYPE [``:'b`` |-> ``:num``] IN_MEASURABLE_BOREL_SUM) \\
5457 BETA_TAC >> Q.EXISTS_TAC `X` >> Q.EXISTS_TAC `count n` \\
5458 fs [measure_space_def, real_random_variable] \\
5459 RW_TAC std_ss [space_def, FINITE_COUNT, IN_COUNT] \\
5460 fs [prob_space_def, p_space_def, events_def, measure_space_def]) >> DISCH_TAC
5461 (* M is the mean of S, also always finite *)
5462 >> Q.ABBREV_TAC `M = \n. expectation p (S n)`
5463 >> Know `!n. M n = SIGMA (prob p o E) (count n)`
5464 >- (GEN_TAC >> Q.UNABBREV_TAC `M` >> BETA_TAC \\
5465 Q.UNABBREV_TAC `S` >> BETA_TAC \\
5466 Q.UNABBREV_TAC `X` >> BETA_TAC \\
5467 REWRITE_TAC [expectation_def] \\
5468 (* applying integral_pos_fn, pos_fn_integral_sum *)
5469 Know `integral p (\s. SIGMA (\i. (indicator_fn o E) i s) (count n)) =
5470 pos_fn_integral p (\s. SIGMA (\i. (indicator_fn o E) i s) (count n))`
5471 >- (MATCH_MP_TAC integral_pos_fn >> fs [o_DEF, prob_space_def] \\
5472 rpt STRIP_TAC >> MATCH_MP_TAC EXTREAL_SUM_IMAGE_POS \\
5473 RW_TAC std_ss [FINITE_COUNT, INDICATOR_FN_POS]) >> Rewr' \\
5474 Know `(prob p o E) = \x. expectation p ((indicator_fn o E) x)`
5475 >- RW_TAC std_ss [o_DEF, FUN_EQ_THM] >> Rewr' \\
5476 Know `!x. expectation p ((indicator_fn o E) x) = pos_fn_integral p ((indicator_fn o E) x)`
5477 >- (RW_TAC std_ss [o_DEF, expectation_def] \\
5478 MATCH_MP_TAC integral_pos_fn >> fs [prob_space_def, INDICATOR_FN_POS]) >> Rewr' \\
5479 MATCH_MP_TAC pos_fn_integral_sum \\
5480 fs [o_DEF, FINITE_COUNT, prob_space_def, INDICATOR_FN_POS, IN_COUNT] \\
5481 rpt STRIP_TAC >> MATCH_MP_TAC IN_MEASURABLE_BOREL_INDICATOR \\
5482 Q.EXISTS_TAC `E i` >> fs [measure_space_def, subsets_def, events_def, space_def])
5483 >> DISCH_TAC
5484 >> Know `!n. M n <> PosInf /\ M n <> NegInf`
5485 >- (GEN_TAC >> POP_ASSUM (ONCE_REWRITE_TAC o wrap) \\
5486 Q.PAT_X_ASSUM `!n. (prob p o E) n = expectation p (X n)` K_TAC \\
5487 STRIP_TAC >| (* 2 subgoals, similar tactics *)
5488 [ (* goal 1 (of 2) *)
5489 MATCH_MP_TAC EXTREAL_SUM_IMAGE_NOT_POSINF >> RW_TAC std_ss [FINITE_COUNT, IN_COUNT, o_DEF] \\
5490 PROVE_TAC [PROB_FINITE],
5491 (* goal 2 (of 2) *)
5492 MATCH_MP_TAC EXTREAL_SUM_IMAGE_NOT_NEGINF >> RW_TAC std_ss [FINITE_COUNT, IN_COUNT, o_DEF] \\
5493 PROVE_TAC [PROB_FINITE] ]) >> DISCH_TAC
5494 >> Know `!n. 0 <= M n`
5495 >- (GEN_TAC >> art [] \\
5496 MATCH_MP_TAC EXTREAL_SUM_IMAGE_POS \\
5497 Q.PAT_X_ASSUM `!n. (prob p o E) n = P` K_TAC \\
5498 RW_TAC std_ss [o_DEF, FINITE_COUNT, IN_COUNT] \\
5499 MATCH_MP_TAC PROB_POSITIVE >> art []) >> DISCH_TAC
5500 >> Know `!m n. m <= n ==> M m <= M n`
5501 >- (rpt STRIP_TAC \\
5502 Q.PAT_X_ASSUM `!n. M n = SIGMA (prob p o E) (count n)` (REWRITE_TAC o wrap) \\
5503 MATCH_MP_TAC EXTREAL_SUM_IMAGE_MONO_SET \\
5504 Q.PAT_X_ASSUM `!n. (prob p o E) n = expectation p (X n)` K_TAC \\
5505 RW_TAC std_ss [FINITE_COUNT, COUNT_MONO, IN_COUNT, o_DEF] \\
5506 MATCH_MP_TAC PROB_POSITIVE >> art []) >> DISCH_TAC
5507 (* Step 1: variance of S is smaller than M, by noncorrelation *)
5508 >> Know `!n. variance p (S n) <= M n`
5509 >- (GEN_TAC >> Q.UNABBREV_TAC `S` >> Q.UNABBREV_TAC `X` >> BETA_TAC \\
5510 Know `variance p (\s. SIGMA (\i. (indicator_fn o E) i s) (count n)) =
5511 SIGMA (\n. variance p ((indicator_fn o E) n)) (count n)`
5512 >- (MATCH_MP_TAC variance_sum_indicator_fn \\
5513 ASM_SIMP_TAC std_ss [pairwise_indep_events_def, FINITE_COUNT]) >> Rewr' \\
5514 Q.PAT_X_ASSUM `!n. M n = SIGMA (prob p o E) (count n)` (REWRITE_TAC o wrap) \\
5515 irule EXTREAL_SUM_IMAGE_MONO >> RW_TAC bool_ss [IN_COUNT, FINITE_COUNT]
5516 >- (SIMP_TAC std_ss [o_DEF] \\
5517 MATCH_MP_TAC variance_le_indicator_fn >> art []) \\
5518 DISJ2_TAC >> GEN_TAC >> DISCH_TAC \\
5519 `x <> n` by RW_TAC arith_ss [] \\
5520 Q.PAT_X_ASSUM `!i j. i <> j ==> uncorrelated p ((indicator_fn o E) i) ((indicator_fn o E) j)`
5521 (MP_TAC o (PURE_REWRITE_RULE [uncorrelated_def]) o (Q.SPECL [`x`, `n`])) \\
5522 RW_TAC bool_ss [] >| (* 2 subgoals *)
5523 [ METIS_TAC [lt_infty, finite_second_moments_eq_finite_variance],
5524 METIS_TAC [finite_second_moments_imp_finite_expectation] ]) >> DISCH_TAC
5525 >> Know `!n. real_random_variable (S n) p`
5526 >- (RW_TAC std_ss [real_random_variable]) >> DISCH_TAC
5527 >> Know `!n. finite_second_moments p (S n)`
5528 >- (RW_TAC std_ss [finite_second_moments_eq_finite_variance] \\
5529 MATCH_MP_TAC let_trans >> Q.EXISTS_TAC `M n` >> art [GSYM lt_infty]) >> DISCH_TAC
5530 (* Now rewriting the goal, eliminating `limsup` *)
5531 >> `limsup E IN events p` by PROVE_TAC [EVENTS_LIMSUP]
5532 >> Know `limsup E = {x | x IN p_space p /\ (suminf (\n. X n x) = PosInf)}`
5533 >- (Q.UNABBREV_TAC `X` >> SIMP_TAC std_ss [o_DEF] \\
5534 MATCH_MP_TAC (((REWRITE_RULE [space_def, subsets_def]) o
5535 (Q.SPECL [`(p_space p,events p)`, `E`])) limsup_suminf_indicator_space) \\
5536 fs [prob_space_def, measure_space_def, p_space_def, events_def]) >> DISCH_TAC
5537 >> Q.ABBREV_TAC `S' = \x. sup (IMAGE (\n. S n x) univ(:num))`
5538 >> Know `!n x. S n x <= S' x`
5539 >- (rpt GEN_TAC >> Q.UNABBREV_TAC `S'` \\
5540 RW_TAC std_ss [le_sup', IN_IMAGE, IN_UNIV] \\
5541 POP_ASSUM MATCH_MP_TAC >> Q.EXISTS_TAC `n` >> REWRITE_TAC []) >> DISCH_TAC
5542 >> Know `!x. suminf (\n. X n x) = S' x`
5543 >- (GEN_TAC >> Q.UNABBREV_TAC `S'` >> Q.UNABBREV_TAC `S` >> BETA_TAC \\
5544 MATCH_MP_TAC ext_suminf_def \\
5545 Q.UNABBREV_TAC `X` >> RW_TAC std_ss [INDICATOR_FN_POS])
5546 >> DISCH_TAC >> fs []
5547 (* S' is also Borel-measurable (needed later) *)
5548 >> Know `S' IN measurable (p_space p,events p) Borel`
5549 >- (MATCH_MP_TAC IN_MEASURABLE_BOREL_SUMINF >> Q.EXISTS_TAC `X` \\
5550 fs [real_random_variable, space_def] \\
5551 CONJ_TAC >- fs [prob_space_def, measure_space_def, p_space_def, events_def] \\
5552 Q.UNABBREV_TAC `X` >> RW_TAC std_ss [o_DEF, INDICATOR_FN_POS]) >> DISCH_TAC
5553 (* prob p {x | x IN p_space p /\ S' x = PosInf} = 1 *)
5554 >> Q.ABBREV_TAC `s = {x | x IN p_space p /\ S' x < PosInf}`
5555 >> Know `limsup E = (p_space p) DIFF s`
5556 >- (Q.UNABBREV_TAC `s` >> art [] >> RW_TAC std_ss [Once EXTENSION, IN_DIFF, GSPECIFICATION] \\
5557 EQ_TAC >> RW_TAC std_ss [GSYM lt_infty]) >> DISCH_TAC
5558 >> Know `s IN events p`
5559 >- (`s = (p_space p) DIFF (limsup E)` by ASM_SET_TAC [] >> POP_ORW \\
5560 MATCH_MP_TAC EVENTS_COMPL >> METIS_TAC []) >> DISCH_TAC
5561 >> Suff `prob p s = 0`
5562 >- (DISCH_TAC >> `1 = 1 - prob p s` by METIS_TAC [sub_rzero] >> POP_ORW \\
5563 `{x | x IN p_space p /\ (S' x = PosInf)} = (p_space p) DIFF s` by METIS_TAC [] \\
5564 POP_ORW >> MATCH_MP_TAC PROB_COMPL >> art [])
5565 >> Q.UNABBREV_TAC `s`
5566 >> Know `sup (IMAGE (\n. M n) univ(:num)) = PosInf`
5567 >- (Q.PAT_X_ASSUM `!n. M n = P` (ONCE_REWRITE_TAC o wrap) \\
5568 Suff `suminf (prob p o E) =
5569 sup (IMAGE (\n. SIGMA (prob p o E) (count n)) univ(:num))` >- rw [] \\
5570 MATCH_MP_TAC ext_suminf_def \\
5571 GEN_TAC >> SIMP_TAC std_ss [o_DEF] \\
5572 MATCH_MP_TAC PROB_POSITIVE >> art [])
5573 >> REWRITE_TAC [ETA_THM] >> DISCH_TAC
5574 (* M n can be larger than any given positive real *)
5575 >> Know `!e. 0 < e /\ e <> PosInf ==> ?m. e <= M m`
5576 >- (Q.PAT_X_ASSUM `!n. M n = P` K_TAC >> RW_TAC std_ss [] \\
5577 CCONTR_TAC >> fs [GSYM extreal_lt_def] \\
5578 Know `sup (IMAGE M UNIV) <= e`
5579 >- (RW_TAC std_ss [sup_le', IN_IMAGE, IN_UNIV] \\
5580 MATCH_MP_TAC lt_imp_le >> art []) >> DISCH_TAC \\
5581 Know `sup (IMAGE M UNIV) < PosInf`
5582 >- (MATCH_MP_TAC let_trans >> Q.EXISTS_TAC `e` >> art [GSYM lt_infty]) \\
5583 RW_TAC std_ss [GSYM lt_infty]) >> DISCH_TAC
5584 (* Step 2: P {S' x <= (1 / 2) * M n} <= 4 * inv (M n) *)
5585 >> Know `!n. {x | x IN p_space p /\ S' x <= (1 / 2) * M n} IN events p`
5586 >- (GEN_TAC >> Q.PAT_X_ASSUM `!n. M n = P` K_TAC \\
5587 Know `{x | x IN p_space p /\ S' x <= (1 / 2) * M n} =
5588 PREIMAGE S' {x | x <= (1 / 2) * M n} INTER space (p_space p,events p)`
5589 >- (RW_TAC std_ss [Once EXTENSION, PREIMAGE_def, IN_INTER, space_def, GSPECIFICATION] \\
5590 METIS_TAC []) >> Rewr' \\
5591 fs [IN_MEASURABLE, space_def, subsets_def] >> FIRST_X_ASSUM irule \\
5592 REWRITE_TAC [BOREL_MEASURABLE_SETS_RC]) >> DISCH_TAC
5593 >> Know `!n. 0 < M n ==>
5594 prob p {x | x IN p_space p /\ S' x <= (1 / 2) * M n} <= 4 * inv (M n)`
5595 >- (rpt STRIP_TAC >> MATCH_MP_TAC le_trans \\
5596 Q.EXISTS_TAC `prob p {x | x IN p_space p /\ S n x <= (1 / 2) * M n}` \\
5597 CONJ_TAC
5598 >- (MATCH_MP_TAC PROB_INCREASING >> CONJ_TAC >- art [] \\
5599 REWRITE_TAC [CONJ_ASSOC] >> reverse CONJ_TAC
5600 >- (RW_TAC std_ss [SUBSET_DEF, GSPECIFICATION] \\
5601 MATCH_MP_TAC le_trans >> Q.EXISTS_TAC `S' x` >> art []) \\
5602 Q.PAT_X_ASSUM `!n. M n = P` K_TAC \\
5603 CONJ_TAC >- art [] \\
5604 Know `{x | x IN p_space p /\ S n x <= (1 / 2) * M n} =
5605 PREIMAGE (S n) {x | x <= (1 / 2) * M n} INTER space (p_space p,events p)`
5606 >- (RW_TAC std_ss [Once EXTENSION, PREIMAGE_def, IN_INTER, space_def, GSPECIFICATION] \\
5607 METIS_TAC []) >> Rewr' \\
5608 fs [IN_MEASURABLE, space_def, subsets_def] \\
5609 Q.PAT_X_ASSUM `!n. S n IN (p_space p -> space Borel) /\ P`
5610 (STRIP_ASSUME_TAC o (Q.SPEC `n`)) >> POP_ASSUM MATCH_MP_TAC \\
5611 REWRITE_TAC [BOREL_MEASURABLE_SETS_RC]) \\
5612 Know `!x. S n x <= (1 / 2) * M n <=> S n x - M n <= -(1 / 2) * M n`
5613 >- (GEN_TAC \\
5614 Suff `(1 / 2) * M n = -(1 / 2) * M n + 1 * M n`
5615 >- (Rewr' >> MATCH_MP_TAC EQ_SYM >> REWRITE_TAC [mul_lone] \\
5616 MATCH_MP_TAC sub_le_eq >> art []) \\
5617 Suff `1 / 2 = -(1 / 2) + 1`
5618 >- (DISCH_THEN ((GEN_REWRITE_TAC (RATOR_CONV o ONCE_DEPTH_CONV) empty_rewrites) o wrap) \\
5619 `?r. M n = Normal r` by PROVE_TAC [extreal_cases] >> POP_ORW \\
5620 MATCH_MP_TAC add_rdistrib_normal \\
5621 RW_TAC real_ss [extreal_of_num_def, extreal_not_infty, extreal_div_eq,
5622 extreal_ainv_def]) \\
5623 RW_TAC real_ss [extreal_of_num_def, extreal_not_infty, extreal_div_eq, extreal_ainv_def,
5624 extreal_add_def, extreal_11]) >> DISCH_TAC \\
5625 Q.PAT_ASSUM `!x. S n x <= (1 / 2) * M n <=> P` (ONCE_REWRITE_TAC o wrap) \\
5626 MATCH_MP_TAC le_trans \\
5627 Q.EXISTS_TAC `prob p {x | x IN p_space p /\ (1 / 2) * M n <= abs (S n x - M n)}` \\
5628 CONJ_TAC
5629 >- (MATCH_MP_TAC PROB_INCREASING >> CONJ_TAC >- art [] \\
5630 Q.PAT_X_ASSUM `!n. M n = P` K_TAC \\
5631 REWRITE_TAC [CONJ_ASSOC] >> reverse CONJ_TAC
5632 >- (Know `0 <= (1 / 2) * M n` >- (MATCH_MP_TAC le_mul >> art [half_between]) \\
5633 RW_TAC std_ss [SUBSET_DEF, GSPECIFICATION, abs_unbounds] \\
5634 DISJ1_TAC >> art [GSYM mul_lneg]) \\
5635 STRIP_TAC >| (* 2 subgoals, similar tactics *)
5636 [ (* goal 1 (of 2) *)
5637 POP_ASSUM (ONCE_REWRITE_TAC o wrap o GSYM) \\
5638 Know `{x | x IN p_space p /\ S n x <= (1 / 2) * M n} =
5639 PREIMAGE (S n) {x | x <= (1 / 2) * M n} INTER space (p_space p,events p)`
5640 >- (RW_TAC std_ss [Once EXTENSION, PREIMAGE_def, IN_INTER, space_def, GSPECIFICATION] \\
5641 METIS_TAC []) >> Rewr' \\
5642 fs [IN_MEASURABLE, space_def, subsets_def] \\
5643 Q.PAT_X_ASSUM `!n. S n IN (p_space p -> space Borel) /\ P`
5644 (STRIP_ASSUME_TAC o (Q.SPEC `n`)) >> POP_ASSUM MATCH_MP_TAC \\
5645 REWRITE_TAC [BOREL_MEASURABLE_SETS_RC],
5646 (* goal 2 (of 2) *)
5647 Know `0 <= (1 / 2) * M n` >- (MATCH_MP_TAC le_mul >> art [half_between]) \\
5648 DISCH_THEN (MP_TAC o (MATCH_MP abs_unbounds)) >> Rewr' \\
5649 REWRITE_TAC [GSYM mul_lneg] \\
5650 POP_ASSUM (ONCE_REWRITE_TAC o wrap o GSYM) \\
5651 Know `!x. 1 / 2 * M n <= S n x - M n <=> (1 / 2 + 1) * M n <= S n x`
5652 >- (GEN_TAC \\
5653 Suff `(1 / 2 + 1) * M n = (1 / 2) * M n + 1 * M n`
5654 >- (Rewr' >> REWRITE_TAC [mul_lone] \\
5655 MATCH_MP_TAC le_sub_eq2 >> art [] \\
5656 SIMP_TAC real_ss [extreal_of_num_def, extreal_div_eq] \\
5657 `0 <= 1 / 2r` by RW_TAC real_ss [] \\
5658 METIS_TAC [mul_not_infty]) \\
5659 `?r. M n = Normal r` by PROVE_TAC [extreal_cases] >> POP_ORW \\
5660 MATCH_MP_TAC add_rdistrib_normal \\
5661 RW_TAC real_ss [extreal_of_num_def, extreal_not_infty, extreal_div_eq,
5662 extreal_ainv_def]) >> Rewr' \\
5663 Know `{x | x IN p_space p /\ (S n x <= 1 / 2 * M n \/ (1 / 2 + 1) * M n <= S n x)} =
5664 (PREIMAGE (S n) {x | x <= (1 / 2) * M n} INTER space (p_space p,events p)) UNION
5665 (PREIMAGE (S n) {x | (1 / 2 + 1) * M n <= x} INTER space (p_space p,events p))`
5666 >- (RW_TAC std_ss [Once EXTENSION, PREIMAGE_def, IN_UNION, IN_INTER,
5667 space_def, GSPECIFICATION] \\
5668 METIS_TAC []) >> Rewr' \\
5669 MATCH_MP_TAC EVENTS_UNION \\
5670 fs [IN_MEASURABLE, space_def, subsets_def] \\
5671 Q.PAT_X_ASSUM `!n. S n IN (p_space p -> space Borel) /\ P`
5672 (STRIP_ASSUME_TAC o (Q.SPEC `n`)) \\
5673 STRIP_TAC >| (* 2 subgoals *)
5674 [ (* goal 2.1 (of 2) *)
5675 POP_ASSUM MATCH_MP_TAC >> REWRITE_TAC [BOREL_MEASURABLE_SETS_RC],
5676 (* goal 2.2 (of 2) *)
5677 POP_ASSUM MATCH_MP_TAC >> REWRITE_TAC [BOREL_MEASURABLE_SETS_CR] ] ]) \\
5678 (* applying chebyshev_ineq_variance *)
5679 Know `!x. S n x - M n = S n x - expectation p (S n)`
5680 >- (GEN_TAC >> Q.UNABBREV_TAC `M` >> SIMP_TAC std_ss []) >> Rewr' \\
5681 MATCH_MP_TAC le_trans \\
5682 Q.EXISTS_TAC `inv ((1 / 2 * M n) pow 2) * variance p (S n)` \\
5683 Q.PAT_X_ASSUM `!n. M n = P` K_TAC \\
5684 CONJ_TAC
5685 >- (SIMP_TAC std_ss [PROB_GSPEC] \\
5686 MATCH_MP_TAC chebyshev_ineq_variance >> art [] \\
5687 MATCH_MP_TAC lt_mul >> art [half_between]) \\
5688 Suff `4 * inv (M n) = inv ((1 / 2 * M n) pow 2) * M n`
5689 >- (Rewr' >> MATCH_MP_TAC le_lmul_imp >> art [] \\
5690 MATCH_MP_TAC le_inv >> MATCH_MP_TAC pow_pos_lt \\
5691 MATCH_MP_TAC lt_mul >> art [half_between]) \\
5692 `?r. M n = Normal r` by PROVE_TAC [extreal_cases] >> art [] \\
5693 `0 < r` by PROVE_TAC [extreal_lt_eq, extreal_of_num_def] \\
5694 `r <> 0` by PROVE_TAC [REAL_LT_LE] \\
5695 Know `1 / 2 * r * (1 / 2 * r) <> 0` >- (CCONTR_TAC >> fs []) >> DISCH_TAC \\
5696 ASM_SIMP_TAC real_ss [extreal_of_num_def, extreal_inv_def, extreal_mul_def, pow_2,
5697 extreal_div_eq, extreal_11] \\
5698 ASM_SIMP_TAC real_ss [GSYM REAL_INV_1OVER, REAL_MUL_ASSOC] \\
5699 `inv 2r <> 0` by RW_TAC real_ss [REAL_INV_EQ_0] \\
5700 Know `inv 2 * r <> 0` >- (CCONTR_TAC >> fs [] >> PROVE_TAC []) >> DISCH_TAC \\
5701 Know `inv 2 * r * inv 2 <> 0` >- (CCONTR_TAC >> fs [] >> PROVE_TAC []) >> DISCH_TAC \\
5702 ASM_SIMP_TAC real_ss [REAL_INV_MUL, REAL_INV_INV] \\
5703 ASM_SIMP_TAC real_ss [GSYM REAL_MUL_ASSOC, REAL_MUL_LINV] >> REAL_ARITH_TAC)
5704 >> DISCH_TAC
5705 >> Q.ABBREV_TAC `f = \n. {x | x IN p_space p /\ S' x <= 1 / 2 * M n}` >> fs []
5706 >> Know `!m n. m <= n ==> f m SUBSET f n`
5707 >- (Q.PAT_X_ASSUM `!n. M n = P` K_TAC \\
5708 Q.UNABBREV_TAC `f` >> RW_TAC bool_ss [SUBSET_DEF, GSPECIFICATION] \\
5709 MATCH_MP_TAC le_trans >> Q.EXISTS_TAC `(1 / 2) * M m` >> art [] \\
5710 MATCH_MP_TAC le_lmul_imp >> ASM_SIMP_TAC arith_ss [half_between]) >> DISCH_TAC
5711 (* Step 3: P {S' x < PosInf} = sup (IMAGE (prob p o f) UNIV) *)
5712 >> Know `prob p {x | x IN p_space p /\ S' x < PosInf} = sup (IMAGE (prob p o f) univ(:num))`
5713 >- (REWRITE_TAC [prob_def] >> MATCH_MP_TAC EQ_SYM \\
5714 MATCH_MP_TAC MONOTONE_CONVERGENCE \\
5715 CONJ_TAC >- fs [prob_space_def] \\
5716 CONJ_TAC >- fs [events_def, IN_FUNSET, IN_UNIV] \\
5717 CONJ_TAC >- ASM_SIMP_TAC arith_ss [] \\
5718 Q.PAT_X_ASSUM `!n. M n = P` K_TAC >> Q.UNABBREV_TAC `f` \\
5719 RW_TAC std_ss [Once EXTENSION, GSPECIFICATION, IN_BIGUNION_IMAGE, IN_UNIV] \\
5720 reverse EQ_TAC >> rpt STRIP_TAC >- art [] >| (* 2 subgoals left *)
5721 [ (* goal 1 (of 2) *)
5722 MATCH_MP_TAC let_trans >> Q.EXISTS_TAC `(1 / 2) * M n` >> art [GSYM lt_infty] \\
5723 `?r. M n = Normal r` by PROVE_TAC [extreal_cases] >> POP_ORW \\
5724 SIMP_TAC real_ss [extreal_div_eq, extreal_of_num_def, extreal_mul_def, extreal_not_infty],
5725 (* goal 2 (of 2) *)
5726 Know `2 * (S' x) < 2 * PosInf`
5727 >- (Know `0 < 2 /\ 2 <> PosInf`
5728 >- PROVE_TAC [lt_02, extreal_of_num_def, extreal_not_infty] \\
5729 DISCH_THEN (REWRITE_TAC o wrap o (MATCH_MP lt_lmul)) >> art []) \\
5730 Know `2 * PosInf = PosInf`
5731 >- (SIMP_TAC real_ss [extreal_of_num_def, extreal_mul_def]) >> Rewr' \\
5732 Q.PAT_X_ASSUM `sup (IMAGE M univ(:num)) = PosInf` (REWRITE_TAC o wrap o SYM) \\
5733 RW_TAC std_ss [GSYM sup_lt', IN_IMAGE, IN_UNIV] \\
5734 Q.EXISTS_TAC `x''` >> MATCH_MP_TAC lt_imp_le \\
5735 Suff `S' x = (1 / 2) * 2 * S' x`
5736 >- (Rewr' >> REWRITE_TAC [GSYM mul_assoc] \\
5737 Know `0 < (1 / 2) /\ (1 / 2) <> PosInf`
5738 >- (REWRITE_TAC [half_between] \\
5739 SIMP_TAC real_ss [extreal_of_num_def, extreal_div_eq, extreal_not_infty]) \\
5740 DISCH_THEN (REWRITE_TAC o wrap o (MATCH_MP lt_lmul)) >> art []) \\
5741 Know `1 / 2 = extreal_inv 2`
5742 >- (MATCH_MP_TAC (GSYM inv_1over) \\
5743 SIMP_TAC real_ss [extreal_of_num_def, extreal_11]) >> Rewr' \\
5744 Know `extreal_inv 2 * 2 = 1`
5745 >- (MATCH_MP_TAC mul_linv_pos \\
5746 SIMP_TAC real_ss [lt_02, extreal_of_num_def, extreal_not_infty]) >> Rewr' \\
5747 REWRITE_TAC [mul_lone] ]) >> Rewr'
5748 >> REWRITE_TAC [GSYM le_antisym]
5749 >> reverse CONJ_TAC
5750 >- (MATCH_MP_TAC le_sup_imp2 >> RW_TAC std_ss [o_DEF, IN_IMAGE, IN_UNIV] \\
5751 MATCH_MP_TAC PROB_POSITIVE >> art [])
5752 (* Step 4: sup (IMAGE (prob p o f) univ(:num)) <= 0 *)
5753 >> MATCH_MP_TAC le_epsilon >> RW_TAC std_ss [add_lzero]
5754 >> Know `!m n. m <= n ==> (prob p o f) m <= (prob p o f) n`
5755 >- (RW_TAC std_ss [o_DEF] >> MATCH_MP_TAC PROB_INCREASING >> art [] \\
5756 FIRST_X_ASSUM MATCH_MP_TAC >> art []) >> DISCH_TAC
5757 >> Q.PAT_X_ASSUM `!e. 0 < e /\ e <> PosInf ==> P` (MP_TAC o (Q.SPEC `4 * inv e`))
5758 >> Know `0 < 4 * inv e /\ 4 * inv e <> PosInf`
5759 >- (CONJ_TAC
5760 >- (MATCH_MP_TAC lt_mul \\
5761 CONJ_TAC >- RW_TAC real_ss [extreal_of_num_def, extreal_lt_eq] \\
5762 MATCH_MP_TAC inv_pos' >> art []) \\
5763 `e <> NegInf` by PROVE_TAC [pos_not_neginf, lt_imp_le] \\
5764 `?r. e = Normal r` by PROVE_TAC [extreal_cases] >> art [] \\
5765 `0 < r` by PROVE_TAC [extreal_of_num_def, extreal_lt_eq] \\
5766 `r <> 0` by PROVE_TAC [REAL_LT_LE] \\
5767 ASM_SIMP_TAC std_ss [extreal_of_num_def, extreal_inv_def, extreal_mul_def, extreal_not_infty])
5768 >> Q.PAT_X_ASSUM `!n. M n = P` K_TAC
5769 >> RW_TAC std_ss []
5770 >> Know `0 < M m` >- (MATCH_MP_TAC lte_trans >> Q.EXISTS_TAC `4 * inv e` >> art [])
5771 >> DISCH_TAC
5772 >> Know `(prob p o f) m <= 4 * inv (M m)`
5773 >- (SIMP_TAC std_ss [o_DEF] \\
5774 FIRST_X_ASSUM MATCH_MP_TAC >> art []) >> DISCH_TAC
5775 >> Know `4 * inv e * e <= M m * e`
5776 >- (MATCH_MP_TAC le_rmul_imp >> art [] \\
5777 MATCH_MP_TAC lt_imp_le >> art [])
5778 >> REWRITE_TAC [GSYM mul_assoc]
5779 >> Know `inv e * e = 1`
5780 >- (MATCH_MP_TAC mul_linv_pos >> art []) >> Rewr'
5781 >> REWRITE_TAC [mul_rone] >> DISCH_TAC
5782 >> Know `inv (M m) * 4 <= inv (M m) * (M m * e)`
5783 >- (MATCH_MP_TAC le_lmul_imp >> art [] \\
5784 MATCH_MP_TAC lt_imp_le >> MATCH_MP_TAC inv_pos' >> art [])
5785 >> REWRITE_TAC [mul_assoc]
5786 >> Know `inv (M m) * M m = 1`
5787 >- (MATCH_MP_TAC mul_linv_pos >> art []) >> Rewr'
5788 >> REWRITE_TAC [mul_lone, Once mul_comm] >> DISCH_TAC
5789 >> Know `!n. m <= n ==> (prob p o f) n <= e`
5790 >- (RW_TAC std_ss [] \\
5791 MATCH_MP_TAC le_trans >> Q.EXISTS_TAC `4 * inv (M n)` \\
5792 Know `0 < M n`
5793 >- (MATCH_MP_TAC lte_trans >> Q.EXISTS_TAC `M m` >> art [] \\
5794 FIRST_X_ASSUM MATCH_MP_TAC >> art []) \\
5795 RW_TAC std_ss [] \\
5796 MATCH_MP_TAC le_trans >> Q.EXISTS_TAC `4 * inv (M m)` >> art [] \\
5797 MATCH_MP_TAC le_lmul_imp \\
5798 CONJ_TAC >- RW_TAC real_ss [extreal_of_num_def, extreal_le_eq] \\
5799 METIS_TAC [inv_le_antimono]) >> DISCH_TAC
5800 >> Know `sup (IMAGE (prob p o f) UNIV) = sup (IMAGE (\n. (prob p o f) (n + m)) UNIV)`
5801 >- (MATCH_MP_TAC EQ_SYM \\
5802 MATCH_MP_TAC sup_shift >> RW_TAC std_ss []) >> Rewr'
5803 >> RW_TAC bool_ss [sup_le', IN_IMAGE, IN_UNIV]
5804 >> POP_ASSUM MATCH_MP_TAC
5805 >> RW_TAC arith_ss []
5806QED
5807
5808(* The hardest part of Borel-Cantelli Lemma (of full independency)
5809
5810 TODO: prove it directly without using Borel_Cantelli_Lemma2p
5811 *)
5812Theorem Borel_Cantelli_Lemma2 :
5813 !p E. prob_space p /\ (!n. (E n) IN events p) /\
5814 indep_events p E univ(:num) /\
5815 (suminf (prob p o E) = PosInf) ==> (prob p (limsup E) = 1)
5816Proof
5817 rpt STRIP_TAC
5818 >> MATCH_MP_TAC Borel_Cantelli_Lemma2p >> art []
5819 >> MATCH_MP_TAC total_imp_pairwise_indep_events >> art []
5820QED
5821
5822(* An easy corollary of Borel-Cantelli Lemma [2, p.82] *)
5823Theorem Borel_0_1_Law :
5824 !p E. prob_space p /\ (!n. (E n) IN events p) /\
5825 pairwise_indep_events p E univ(:num) ==>
5826 (prob p (limsup E) = 0) \/ (prob p (limsup E) = 1)
5827Proof
5828 rpt STRIP_TAC
5829 >> Cases_on `suminf (prob p o E) = PosInf`
5830 >| [ (* goal 1 (of 2) *)
5831 DISJ2_TAC >> MATCH_MP_TAC Borel_Cantelli_Lemma2p >> art [],
5832 (* goal 2 (of 2) *)
5833 DISJ1_TAC >> MATCH_MP_TAC Borel_Cantelli_Lemma1 \\
5834 fs [GSYM lt_infty, pairwise_indep_events_def] ]
5835QED
5836
5837(* ========================================================================= *)
5838(* Convergence Concepts and The Law(s) of Large Numbers (uncorrelated_rv) *)
5839(* ========================================================================= *)
5840
5841(* convergence modes *)
5842Datatype: convergence_mode = almost_everywhere ('a p_space)
5843 | in_probability ('a p_space)
5844 | in_lebesgue extreal ('a p_space)
5845 | in_distribution ('a p_space)
5846End
5847
5848(* convergence of extreal-valued random series [1, p.68,70], only works
5849 for real-valued random variables (cf. real_random_variable_def)
5850 *)
5851Definition converge_def[nocompute] :
5852 (* X(n) converges to Y (a.e.) *)
5853 (converge (X :num -> 'a -> extreal) (Y :'a -> extreal) (almost_everywhere p) =
5854 AE x::p. ((\n. X n x) --> Y x) sequentially) /\
5855
5856 (* X(n) converges to Y (in pr.) *)
5857 (converge (X :num -> 'a -> extreal) (Y :'a -> extreal) (in_probability p) =
5858 !e. 0 < e /\ e <> PosInf ==>
5859 ((\n. prob p {x | x IN p_space p /\ e < abs (X n x - Y x)}) --> 0)
5860 sequentially) /\
5861
5862 (* X(n) converges to Y (in L^r), assuming ‘0 < r /\ r <> PosInf’ *)
5863 (converge (X :num -> 'a -> extreal) (Y :'a -> extreal) (in_lebesgue r p) <=>
5864 (!n. X n IN lp_space r p) /\ Y IN lp_space r p /\
5865 ((\n. expectation p (\x. (abs (X n x - Y x)) powr r)) --> 0) sequentially) /\
5866
5867 (* X(n) converges to Y in distribution (see [4, p.425] or [2, p.96]) *)
5868 (converge (X :num -> 'a -> extreal) (Y :'a -> extreal) (in_distribution p) =
5869 !(f :extreal -> real).
5870 f IN C_b ext_euclidean ==>
5871 ((\n. expectation p (Normal o f o (X n))) --> expectation p (Normal o f o Y))
5872 sequentially)
5873End
5874
5875(* "-->" was defined in util_probTheory for IN_DFUNSET *)
5876Overload "-->" = “converge”
5877
5878(* NOTE: see distributionTheory for supporting theorems *)
5879Theorem converge_in_dist_def = cj 4 converge_def
5880
5881(* |- !X Y p.
5882 (X --> Y) (almost_everywhere p) <=>
5883 AE x::p. ((\n. X n x) --> Y x) sequentially
5884 *)
5885Theorem converge_AE = cj 1 converge_def
5886
5887(* The old definition based on LIM_SEQUENTIALLY *)
5888Theorem converge_AE_def :
5889 !p X Y. (!n. real_random_variable (X n) p) /\ real_random_variable Y p ==>
5890 ((X --> Y) (almost_everywhere p) <=>
5891 AE x::p. ((\n. real (X n x)) --> real (Y x)) sequentially)
5892Proof
5893 rw [converge_AE, real_random_variable_def]
5894 >> HO_MATCH_MP_TAC AE_cong
5895 >> rw [GSYM p_space_def]
5896 >> HO_MATCH_MP_TAC (REWRITE_RULE [o_DEF] extreal_lim_sequentially_eq)
5897 >> rw []
5898QED
5899
5900(* |- !X Y p.
5901 (X --> Y) (in_probability p) <=>
5902 !e. 0 < e /\ e <> PosInf ==>
5903 ((\n. prob p {x | x IN p_space p /\ e < abs (X n x - Y x)}) --> 0)
5904 sequentially
5905 *)
5906Theorem converge_PR = cj 2 converge_def
5907
5908(* The old definition based on LIM_SEQUENTIALLY *)
5909Theorem converge_PR_def :
5910 !p X Y. prob_space p /\
5911 (!n. real_random_variable (X n) p) /\ real_random_variable Y p ==>
5912 ((X --> Y) (in_probability p) <=>
5913 !e. 0 < e /\ e <> PosInf ==>
5914 ((\n. real (prob p {x | x IN p_space p /\ e < abs (X n x - Y x)})) -->
5915 0) sequentially)
5916Proof
5917 rw [converge_PR, real_random_variable_def]
5918 >> Q.ABBREV_TAC ‘f = \n x. X n x - Y x’
5919 >> Know ‘!n. (f n) IN measurable (m_space p,measurable_sets p) Borel’
5920 >- (rw [Abbr ‘f’] \\
5921 MATCH_MP_TAC IN_MEASURABLE_BOREL_SUB \\
5922 qexistsl_tac [‘X n’, ‘Y’] \\
5923 fs [prob_space_def, p_space_def, events_def, space_def,
5924 measure_space_def, random_variable_def])
5925 >> DISCH_TAC
5926 >> Q.ABBREV_TAC ‘A = \e n. {x | x IN p_space p /\ e < abs (f n x)}’
5927 >> Know ‘!e n. A e n IN events p’
5928 >- (RW_TAC std_ss [Abbr ‘A’] \\
5929 ‘{x | x IN p_space p /\ e < abs (f n x)} =
5930 p_space p DIFF {x | x IN p_space p /\ abs (f n x) <= e}’
5931 by (RW_TAC set_ss [Once EXTENSION, GSYM extreal_lt_def] >> METIS_TAC []) >> POP_ORW \\
5932 MATCH_MP_TAC EVENTS_COMPL >> art [] \\
5933 REWRITE_TAC [abs_bounds] \\
5934 ‘{x | x IN p_space p /\ -e <= f n x /\ f n x <= e} =
5935 ({x | -e <= f n x} INTER p_space p) INTER ({x | f n x <= e} INTER p_space p)’
5936 by SET_TAC [] >> POP_ORW \\
5937 MATCH_MP_TAC EVENTS_INTER >> fs [events_def, p_space_def] \\
5938 ‘sigma_algebra (measurable_space p)’ by fs [prob_space_def, measure_space_def] \\
5939 METIS_TAC [IN_MEASURABLE_BOREL_ALL_MEASURE])
5940 >> DISCH_TAC
5941 >> Q.ABBREV_TAC ‘g = \e n. prob p (A e n)’
5942 >> Know ‘!e. (\n. prob p {x | x IN p_space p /\ e < abs (X n x - Y x)}) = g e’
5943 >- rw [Abbr ‘A’, Abbr ‘g’, FUN_EQ_THM]
5944 >> Rewr'
5945 >> Know ‘!e. (\n. real (prob p {x | x IN p_space p /\ e < abs (X n x - Y x)})) = real o (g e)’
5946 >- rw [Abbr ‘A’, Abbr ‘g’, FUN_EQ_THM]
5947 >> Rewr'
5948 >> EQ_TAC >> rw []
5949 >> Q.PAT_X_ASSUM ‘!e. 0 < e /\ e <> PosInf ==> P’ (MP_TAC o (Q.SPEC ‘e’))
5950 >> RW_TAC std_ss [] (* 2 subgoals, same initial & ending tactics *)
5951 >| [ (* goal 1 (of 2) *)
5952 Suff ‘(g e --> 0) sequentially <=> (real o g e --> real 0) sequentially’
5953 >- rw [real_0],
5954 (* goal 2 (of 2) *)
5955 Suff ‘(g e --> 0) sequentially <=> (real o g e --> real 0) sequentially’
5956 >- fs [real_0] ]
5957 >> MATCH_MP_TAC extreal_lim_sequentially_eq >> rw []
5958 >> Q.EXISTS_TAC ‘0’ >> GEN_TAC >> simp [Abbr ‘g’]
5959 >> PROVE_TAC [PROB_FINITE]
5960QED
5961
5962(* |- !X Y r p.
5963 (X --> Y) (in_lebesgue r p) <=>
5964 (!n. X n IN lp_space r p) /\ Y IN lp_space r p /\
5965 ((\n. expectation p (\x. abs (X n x - Y x) powr r)) --> 0)
5966 sequentially
5967 *)
5968Theorem converge_LP = cj 3 converge_def
5969
5970Theorem converge_LP_def :
5971 !p X Y r. prob_space p /\
5972 (!n. real_random_variable (X n) p) /\ real_random_variable Y p /\
5973 0 < r /\ r <> PosInf ==>
5974 ((X --> Y) (in_lebesgue r p) <=>
5975 (!n. X n IN lp_space r p) /\ Y IN lp_space r p /\
5976 ((\n. real (expectation p (\x. (abs (X n x - Y x)) powr r))) --> 0)
5977 sequentially)
5978Proof
5979 rw [converge_LP, real_random_variable, expectation_def, prob_space_def,
5980 p_space_def, events_def]
5981 >> EQ_TAC >> rw [lp_space_alt_finite']
5982 (* 2 subgoals, same initial & ending tactics *)
5983 >> ‘(!n. X n IN lp_space r p) /\ Y IN lp_space r p’
5984 by METIS_TAC [lp_space_alt_finite']
5985 >> ‘!n. (\x. X n x - Y x) IN lp_space r p’ by METIS_TAC [lp_space_sub]
5986 >> ‘!n. integral p (\x. abs (X n x - Y x) powr r) <> PosInf’
5987 by METIS_TAC [lp_space_alt_finite']
5988 >> Q.ABBREV_TAC ‘f = (\n. integral p (\x. abs (X n x - Y x) powr r))’
5989 >> ‘(\n. real (integral p (\x. abs (X n x - Y x) powr r))) = real o f’
5990 by rw [Abbr ‘f’, FUN_EQ_THM] >> fs []
5991 >| [ Suff ‘(f --> 0) sequentially <=> (real o f --> real 0) sequentially’
5992 >- rw [real_0],
5993 Suff ‘(f --> 0) sequentially <=> (real o f --> real 0) sequentially’
5994 >- fs [real_0] ]
5995 >> MATCH_MP_TAC extreal_lim_sequentially_eq >> rw []
5996 >> Q.EXISTS_TAC ‘0’ >> rw []
5997 >> MATCH_MP_TAC pos_not_neginf
5998 >> simp [Abbr ‘f’]
5999 >> MATCH_MP_TAC integral_pos >> rw [powr_pos]
6000QED
6001
6002(* alternative definition of converge_LP based on absolute moment *)
6003Theorem converge_LP_alt_absolute_moment :
6004 !p X Y k. prob_space p /\ (!n. real_random_variable (X n) p) /\
6005 real_random_variable Y p /\ 0 < k ==>
6006 ((X --> Y) (in_lebesgue (&k :extreal) p) <=>
6007 (!n. expectation p (\x. (abs (X n x)) pow k) <> PosInf) /\
6008 (expectation p (\x. (abs (Y x)) pow k) <> PosInf) /\
6009 ((\n. real (absolute_moment p (\x. X n x - Y x) 0 k)) --> 0) sequentially)
6010Proof
6011 rpt GEN_TAC >> STRIP_TAC
6012 >> ‘0 < &k /\ &k <> PosInf’ by rw [extreal_of_num_def, extreal_lt_eq, extreal_not_infty]
6013 >> rw [converge_LP_def, absolute_moment_def, sub_rzero, num_not_infty]
6014 >> fs [prob_space_def, p_space_def, events_def, real_random_variable]
6015 >> rw [lp_space_alt_finite', expectation_def]
6016 >> Know `!Z. 0 < k ==> abs Z powr &k = abs Z pow k`
6017 >- (rpt STRIP_TAC >> MATCH_MP_TAC EQ_SYM \\
6018 MATCH_MP_TAC gen_powr >> REWRITE_TAC [abs_pos])
6019 >> DISCH_TAC
6020 >> EQ_TAC >> rw []
6021QED
6022
6023(* alternative definition of converge_LP using `pow k` explicitly;
6024 |- !p X Y k.
6025 prob_space p /\ (!n. real_random_variable (X n) p) /\
6026 real_random_variable Y p /\ 0 < k ==>
6027 ((X --> Y) (in_lebesgue (&k) p) <=>
6028 (!n. expectation p (\x. abs (X n x) pow k) <> PosInf) /\
6029 expectation p (\x. abs (Y x) pow k) <> PosInf /\
6030 ((\n. real (expectation p (\x. abs (X n x - Y x) pow k))) --> 0)
6031 sequentially)
6032 *)
6033Theorem converge_LP_alt_pow =
6034 SIMP_RULE std_ss [absolute_moment_def, sub_rzero]
6035 converge_LP_alt_absolute_moment
6036
6037(* Theorem 4.1.1 [1, p.69] (2) *)
6038Theorem converge_AE_alt_sup :
6039 !p X Y. prob_space p /\ (!n. real_random_variable (X n) p) /\
6040 real_random_variable Y p ==>
6041 ((X --> Y) (almost_everywhere p) <=>
6042 !e. 0 < e /\ e <> PosInf ==>
6043 (sup (IMAGE (\m. prob p {x | x IN p_space p /\
6044 !n. m <= n ==> abs (X n x - Y x) <= e})
6045 univ(:num)) = 1))
6046Proof
6047 RW_TAC std_ss [converge_AE_def]
6048 >> fs [real_random_variable_def]
6049 >> Q.ABBREV_TAC
6050 `A = \m e. BIGINTER
6051 (IMAGE (\n. {x | x IN p_space p /\ abs (X n x - Y x) <= e}) (from m))`
6052 >> Q.ABBREV_TAC
6053 `E = \m e. {x | x IN p_space p /\ !n. m <= n ==> abs (X n x - Y x) <= e}`
6054 >> Know `!m e. {x | x IN p_space p /\
6055 !n. m <= n ==> abs (X n x - Y x) <= e} = E m e`
6056 >- METIS_TAC [] >> Rewr'
6057 >> Know `!m e. E m e = A m e`
6058 >- (RW_TAC set_ss [Abbr `E`, Abbr `A`, Once EXTENSION, IN_BIGINTER_IMAGE, IN_FROM] \\
6059 EQ_TAC >> RW_TAC std_ss [] \\
6060 POP_ASSUM (STRIP_ASSUME_TAC o
6061 (REWRITE_RULE [LESS_EQ_REFL]) o (Q.SPEC `m`))) >> Rewr'
6062 >> ‘sigma_algebra (measurable_space p)’
6063 by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA, prob_space_def]
6064 >> Know `!e n. {x | x IN p_space p /\ abs (X n x - Y x) <= e} IN events p`
6065 >- (RW_TAC std_ss [abs_bounds] \\
6066 Q.ABBREV_TAC `f = \x. X n x - Y x` \\
6067 `f IN measurable (m_space p,measurable_sets p) Borel`
6068 by (Q.UNABBREV_TAC `f` \\
6069 MATCH_MP_TAC IN_MEASURABLE_BOREL_SUB \\
6070 qexistsl_tac [`X n`, `Y`] \\
6071 fs [prob_space_def, p_space_def, events_def, space_def,
6072 measure_space_def, random_variable_def]) \\
6073 Know `{x | x IN p_space p /\ -e <= X n x - Y x /\ X n x - Y x <= e} =
6074 ({x | -e <= f x} INTER p_space p) INTER ({x | f x <= e} INTER p_space p)`
6075 >- (Q.UNABBREV_TAC `f` >> BETA_TAC >> SET_TAC []) >> Rewr' \\
6076 MATCH_MP_TAC EVENTS_INTER >> fs [events_def, p_space_def] \\
6077 METIS_TAC [IN_MEASURABLE_BOREL_ALL_MEASURE]) >> DISCH_TAC
6078 >> Know `!m e. A m e IN events p`
6079 >- (RW_TAC std_ss [Abbr `A`] \\
6080 MATCH_MP_TAC EVENTS_BIGINTER_FN >> art [COUNTABLE_FROM, FROM_NOT_EMPTY] \\
6081 RW_TAC std_ss [SUBSET_DEF, IN_IMAGE, IN_FROM] \\
6082 METIS_TAC []) >> DISCH_TAC
6083 >> Q.UNABBREV_TAC `E`
6084 >> Know `!e. BIGUNION (IMAGE (\m. A m e) univ(:num)) IN events p`
6085 >- (GEN_TAC \\
6086 MATCH_MP_TAC EVENTS_COUNTABLE_UNION >> art [] \\
6087 reverse CONJ_TAC
6088 >- (MATCH_MP_TAC image_countable >> REWRITE_TAC [COUNTABLE_NUM]) \\
6089 RW_TAC std_ss [SUBSET_DEF, IN_IMAGE, IN_UNIV] >> PROVE_TAC []) >> DISCH_TAC
6090 >> Know `!m e. A m e SUBSET A (SUC m) e`
6091 >- (RW_TAC set_ss [Abbr `A`, SUBSET_DEF, IN_BIGINTER_IMAGE, IN_FROM]
6092 >- (Q.PAT_X_ASSUM `!n. m <= n ==> P`
6093 (STRIP_ASSUME_TAC o (REWRITE_RULE [LESS_EQ_REFL]) o (Q.SPEC `m`))) \\
6094 `m <= n` by RW_TAC arith_ss [] >> METIS_TAC []) >> DISCH_TAC
6095 (* Part I: AE ==> (liminf = 1) *)
6096 >> EQ_TAC
6097 >- (RW_TAC std_ss [AE_DEF, null_set_def, LIM_SEQUENTIALLY, dist] \\
6098 Know `!x. x IN m_space p DIFF N ==> ?m. x IN (A m e)`
6099 >- (rpt STRIP_TAC \\
6100 Q.PAT_X_ASSUM `!x. x IN m_space p DIFF N ==> P` (MP_TAC o (Q.SPEC `x`)) \\
6101 RW_TAC std_ss [] \\
6102 `e <> NegInf` by METIS_TAC [pos_not_neginf, lt_imp_le] \\
6103 `?r. e = Normal r` by METIS_TAC [extreal_cases] \\
6104 `0 < r` by METIS_TAC [extreal_lt_eq, extreal_of_num_def] \\
6105 Q.PAT_X_ASSUM `!e. 0 < e ==> P` (MP_TAC o (Q.SPEC `r`)) \\
6106 RW_TAC std_ss [] \\
6107 Q.EXISTS_TAC `N'` \\
6108 RW_TAC set_ss [Abbr `A`, IN_BIGINTER_IMAGE, IN_FROM]
6109 >- METIS_TAC [DIFF_SUBSET, SUBSET_DEF, p_space_def] \\
6110 Q.PAT_X_ASSUM `!n. N' <= n ==> P` (MP_TAC o (Q.SPEC `n`)) \\
6111 RW_TAC std_ss [] \\
6112 FULL_SIMP_TAC std_ss [p_space_def] \\
6113 ‘m_space p DIFF N SUBSET m_space p’ by SET_TAC [] \\
6114 ‘x IN m_space p’ by METIS_TAC [SUBSET_DEF] \\
6115 `?a. X n x = Normal a` by METIS_TAC [extreal_cases] \\
6116 `?b. Y x = Normal b` by METIS_TAC [extreal_cases] \\
6117 MATCH_MP_TAC lt_imp_le \\
6118 FULL_SIMP_TAC std_ss [real_normal, extreal_sub_def, extreal_abs_def, extreal_lt_eq]) \\
6119 DISCH_TAC \\
6120 `(m_space p DIFF N) SUBSET BIGUNION (IMAGE (\m. A m e) univ(:num))`
6121 by (RW_TAC std_ss [SUBSET_DEF, IN_BIGUNION_IMAGE, IN_UNIV]) \\
6122 Know `sup (IMAGE (prob p o (\m. A m e)) univ(:num)) =
6123 prob p (BIGUNION (IMAGE (\m. A m e) univ(:num)))`
6124 >- (REWRITE_TAC [prob_def] \\
6125 MATCH_MP_TAC MONOTONE_CONVERGENCE \\
6126 CONJ_TAC >- fs [prob_space_def] \\
6127 RW_TAC std_ss [IN_FUNSET, IN_UNIV, GSYM events_def]) \\
6128 SIMP_TAC std_ss [o_DEF] >> DISCH_THEN K_TAC \\
6129 REWRITE_TAC [GSYM le_antisym] \\
6130 CONJ_TAC >- (MATCH_MP_TAC PROB_LE_1 >> art []) \\
6131 fs [GSYM p_space_def, GSYM events_def, GSYM prob_def] \\
6132 Know `prob p (p_space p DIFF N) = 1 - prob p N`
6133 >- (MATCH_MP_TAC PROB_COMPL >> art []) >> art [sub_rzero] \\
6134 DISCH_THEN (ONCE_REWRITE_TAC o wrap o (MATCH_MP EQ_SYM)) \\
6135 MATCH_MP_TAC PROB_INCREASING >> art [] \\
6136 MATCH_MP_TAC EVENTS_COMPL >> PROVE_TAC [EVENTS_SPACE])
6137 (* Part II: (liminf = 1) ==> AE *)
6138 >> RW_TAC std_ss [AE_DEF, null_set_def, LIM_SEQUENTIALLY, dist]
6139 >> Q.ABBREV_TAC `B = \e. BIGUNION (IMAGE (\m. A m e) univ(:num))`
6140 >> Know `!e. 0 < e /\ e <> PosInf ==> (prob p (B e) = 1)`
6141 >- (RW_TAC std_ss [Abbr `B`] \\
6142 Suff `sup (IMAGE (prob p o (\m. A m e)) univ(:num)) =
6143 prob p (BIGUNION (IMAGE (\m. A m e) univ(:num)))` >- METIS_TAC [] \\
6144 REWRITE_TAC [prob_def] \\
6145 MATCH_MP_TAC MONOTONE_CONVERGENCE \\
6146 CONJ_TAC >- fs [prob_space_def] \\
6147 RW_TAC std_ss [IN_FUNSET, IN_UNIV, GSYM events_def])
6148 >> Q.PAT_X_ASSUM `!e. 0 < e /\ e <> PosInf ==> P` K_TAC
6149 >> DISCH_TAC
6150 >> Q.ABBREV_TAC `C = BIGINTER (IMAGE (\n. B (1 / &SUC n)) univ(:num))`
6151 >> Know `C IN events p`
6152 >- (Q.UNABBREV_TAC `C` \\
6153 MATCH_MP_TAC EVENTS_BIGINTER_FN >> art [COUNTABLE_NUM] \\
6154 reverse CONJ_TAC >- (SET_TAC []) \\
6155 RW_TAC std_ss [SUBSET_DEF, IN_IMAGE, IN_UNIV] \\
6156 Q.UNABBREV_TAC `B` >> METIS_TAC [])
6157 >> DISCH_TAC
6158 >> Know `prob p C = 1`
6159 >- (Q.UNABBREV_TAC `C` >> REWRITE_TAC [prob_def] \\
6160 `measure p (BIGINTER (IMAGE (\n. B (1 / &SUC n)) univ(:num))) =
6161 inf (IMAGE (measure p o (\n. B (1 / &SUC n))) univ(:num))`
6162 by (MATCH_MP_TAC EQ_SYM \\
6163 MATCH_MP_TAC MONOTONE_CONVERGENCE_BIGINTER \\
6164 ASM_SIMP_TAC std_ss [] \\
6165 CONJ_TAC >- fs [prob_space_def] \\
6166 STRONG_CONJ_TAC
6167 >- RW_TAC std_ss [IN_FUNSET, IN_UNIV, Abbr `B`, GSYM events_def] \\
6168 RW_TAC std_ss [IN_FUNSET, IN_UNIV, GSYM events_def, GSYM prob_def]
6169 >- METIS_TAC [PROB_FINITE] \\
6170 RW_TAC std_ss [Abbr `B`, SUBSET_DEF, IN_BIGUNION_IMAGE, IN_UNIV] \\
6171 Q.EXISTS_TAC `m` >> POP_ASSUM MP_TAC \\
6172 NTAC 6 (POP_ASSUM K_TAC) \\ (* up to Abbrev A *)
6173 RW_TAC set_ss [Abbr `A`, IN_BIGINTER_IMAGE, IN_FROM]
6174 >- (Q.PAT_X_ASSUM `!n'. m <= n' ==> x IN p_space p /\ _`
6175 (STRIP_ASSUME_TAC o (REWRITE_RULE [LESS_EQ_REFL]) o (Q.SPEC `m`))) \\
6176 rename1 `m <= N` \\
6177 Q.PAT_X_ASSUM `!n'. m <= n' ==> x IN p_space p /\ _`
6178 (MP_TAC o (Q.SPEC `N`)) >> RW_TAC std_ss [] \\
6179 fs [abs_bounds] \\
6180 `(&SUC n) :real <> 0` by RW_TAC real_ss [] \\
6181 `(&SUC (SUC n)) :real <> 0` by RW_TAC real_ss [] \\
6182 CONJ_TAC >| (* 2 subgoals *)
6183 [ (* goal 1 (of 2) *)
6184 MATCH_MP_TAC le_trans \\
6185 Q.EXISTS_TAC `-(1 / &SUC (SUC n))` >> art [] \\
6186 rw [extreal_of_num_def, extreal_div_eq, extreal_ainv_def,
6187 extreal_le_eq] \\
6188 rw [GSYM REAL_INV_1OVER],
6189 (* goal 2 (of 2) *)
6190 MATCH_MP_TAC le_trans \\
6191 Q.EXISTS_TAC `1 / &SUC (SUC n)` >> art [] \\
6192 rw [extreal_of_num_def, extreal_div_eq, extreal_ainv_def, extreal_le_eq] \\
6193 rw [GSYM REAL_INV_1OVER]
6194 ]) >> POP_ORW \\
6195 REWRITE_TAC [GSYM prob_def] \\
6196 Suff `IMAGE (prob p o (\n. B (1 / &SUC n))) univ(:num) = (\y. y = 1)`
6197 >- (Rewr' >> REWRITE_TAC [inf_const]) \\
6198 RW_TAC std_ss [Once EXTENSION, IN_IMAGE, IN_UNIV] \\
6199 SIMP_TAC std_ss [IN_APP] \\
6200 EQ_TAC >> RW_TAC std_ss []
6201 >- (FIRST_X_ASSUM MATCH_MP_TAC \\
6202 `(&SUC x') :real <> 0` by RW_TAC real_ss [] \\
6203 rw [extreal_of_num_def, extreal_div_eq, extreal_lt_eq, extreal_not_infty] \\
6204 MATCH_MP_TAC REAL_LT_DIV >> RW_TAC real_ss []) \\
6205 Q.EXISTS_TAC `0` (* any number is fine *) \\
6206 MATCH_MP_TAC EQ_SYM \\
6207 FIRST_X_ASSUM MATCH_MP_TAC \\
6208 `(&SUC 0) :real <> 0` by RW_TAC real_ss [] \\
6209 rw [extreal_of_num_def, extreal_div_eq, extreal_lt_eq, extreal_not_infty])
6210 >> DISCH_TAC
6211 >> Q.EXISTS_TAC `p_space p DIFF C`
6212 >> REWRITE_TAC [GSYM CONJ_ASSOC, GSYM events_def, GSYM prob_def, GSYM p_space_def]
6213 >> STRONG_CONJ_TAC
6214 >- (MATCH_MP_TAC EVENTS_COMPL >> art []) >> DISCH_TAC
6215 >> CONJ_TAC
6216 >- (Know `prob p (p_space p DIFF C) = 1 - prob p C`
6217 >- (MATCH_MP_TAC PROB_COMPL >> art []) >> Rewr' >> art [] \\
6218 MATCH_MP_TAC sub_refl >> rw [extreal_of_num_def])
6219 >> rw [] (* p_space p DIFF (p_space p DIFF C) is simplified *)
6220 >> Q.PAT_X_ASSUM `x IN C` MP_TAC
6221 >> Q.PAT_X_ASSUM `C IN events p` K_TAC
6222 >> Q.PAT_X_ASSUM `prob p C = 1` K_TAC
6223 >> Q.PAT_X_ASSUM `p_space p DIFF C IN events p` K_TAC
6224 >> Q.UNABBREV_TAC `C`
6225 >> RW_TAC std_ss [IN_BIGINTER_IMAGE, IN_UNIV]
6226 >> Q.PAT_X_ASSUM `!e. 0 < e /\ e <> PosInf ==> _` K_TAC
6227 >> Q.UNABBREV_TAC `B` >> fs []
6228 >> MP_TAC (Q.SPEC `e` REAL_ARCH_INV_SUC) >> RW_TAC std_ss []
6229 >> Q.PAT_X_ASSUM `!n. ?s. x IN s /\ P` (STRIP_ASSUME_TAC o (Q.SPEC `n`))
6230 >> Q.PAT_X_ASSUM `x IN s` MP_TAC >> POP_ORW
6231 >> Q.PAT_X_ASSUM `!m e. A m e SUBSET A (SUC m) e` K_TAC
6232 >> Q.PAT_X_ASSUM `!e. BIGUNION (IMAGE (\m. A m e) UNIV) IN events p` K_TAC
6233 >> Q.PAT_X_ASSUM `!m e. A m e IN events p` K_TAC
6234 >> Q.UNABBREV_TAC `A`
6235 >> RW_TAC set_ss [IN_BIGINTER_IMAGE, IN_FROM]
6236 >> Q.EXISTS_TAC `m`
6237 >> RW_TAC std_ss []
6238 >> MATCH_MP_TAC REAL_LET_TRANS
6239 >> Q.EXISTS_TAC `inv (&SUC n)` >> art []
6240 >> rename1 `m <= N`
6241 >> Q.PAT_X_ASSUM `!n'. m <= n' ==> P` (MP_TAC o (Q.SPEC `N`))
6242 >> RW_TAC std_ss []
6243 >> `?a. X N x = Normal a` by METIS_TAC [extreal_cases]
6244 >> `?b. Y x = Normal b` by METIS_TAC [extreal_cases]
6245 >> `(&SUC n) :real <> 0` by RW_TAC real_ss []
6246 >> fs [real_normal, extreal_sub_def, extreal_abs_def, extreal_inv_eq,
6247 extreal_of_num_def, extreal_div_eq, extreal_le_eq, real_div]
6248QED
6249
6250(* Theorem 4.1.1 [1, p.69] (2') *)
6251Theorem converge_AE_alt_inf :
6252 !p X Y. prob_space p /\ (!n. real_random_variable (X n) p) /\
6253 real_random_variable Y p ==>
6254 ((X --> Y) (almost_everywhere p) <=>
6255 !e. 0 < e /\ e <> PosInf ==>
6256 (inf (IMAGE (\m. prob p {x | x IN p_space p /\
6257 ?n. m <= n /\ e < abs (X n x - Y x)})
6258 univ(:num)) = 0))
6259Proof
6260 rpt STRIP_TAC
6261 >> MP_TAC (Q.SPECL [`p`, `X`, `Y`] converge_AE_alt_sup)
6262 >> RW_TAC std_ss [] >> POP_ASSUM K_TAC
6263 >> Q.ABBREV_TAC
6264 `E = \m e. {x | x IN p_space p /\ !n. m <= n ==> abs (X n x - Y x) <= e}`
6265 >> `!m e. {x | x IN p_space p /\
6266 !n. m <= n ==> abs (X n x - Y x) <= e} = E m e`
6267 by METIS_TAC [] >> POP_ORW
6268 >> Know `!m e. {x | x IN p_space p /\ ?n. m <= n /\ e < abs (X n x - Y x)} =
6269 p_space p DIFF (E m e)`
6270 >- (RW_TAC set_ss [Abbr `E`, Once EXTENSION] \\
6271 EQ_TAC >> RW_TAC std_ss [GSYM extreal_lt_def] \\
6272 Q.EXISTS_TAC `n` >> art []) >> Rewr'
6273 >> Q.ABBREV_TAC
6274 `A = \m e. BIGINTER
6275 (IMAGE (\n. {x | x IN p_space p /\ abs (X n x - Y x) <= e}) (from m))`
6276 >> Know `!m e. E m e = A m e`
6277 >- (RW_TAC set_ss [Abbr `E`, Abbr `A`, Once EXTENSION, IN_BIGINTER_IMAGE, IN_FROM] \\
6278 EQ_TAC >> RW_TAC std_ss [] \\
6279 POP_ASSUM (STRIP_ASSUME_TAC o
6280 (REWRITE_RULE [LESS_EQ_REFL]) o (Q.SPEC `m`))) >> Rewr'
6281 >> ‘sigma_algebra (measurable_space p)’
6282 by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA, prob_space_def]
6283 >> fs [real_random_variable_def]
6284 >> Know `!e n. {x | x IN p_space p /\ abs (X n x - Y x) <= e} IN events p`
6285 >- (RW_TAC std_ss [abs_bounds] \\
6286 Q.ABBREV_TAC `f = \x. X n x - Y x` \\
6287 `f IN measurable (m_space p,measurable_sets p) Borel`
6288 by (Q.UNABBREV_TAC `f` \\
6289 MATCH_MP_TAC IN_MEASURABLE_BOREL_SUB \\
6290 qexistsl_tac [`X n`, `Y`] \\
6291 fs [prob_space_def, p_space_def, events_def, space_def,
6292 measure_space_def, random_variable_def]) \\
6293 Know `{x | x IN p_space p /\ -e <= X n x - Y x /\ X n x - Y x <= e} =
6294 ({x | -e <= f x} INTER p_space p) INTER ({x | f x <= e} INTER p_space p)`
6295 >- (Q.UNABBREV_TAC `f` >> BETA_TAC >> SET_TAC []) >> Rewr' \\
6296 MATCH_MP_TAC EVENTS_INTER >> fs [events_def, p_space_def] \\
6297 METIS_TAC [IN_MEASURABLE_BOREL_ALL_MEASURE]) >> DISCH_TAC
6298 >> Know `!m e. A m e IN events p`
6299 >- (RW_TAC std_ss [Abbr `A`] \\
6300 MATCH_MP_TAC EVENTS_BIGINTER_FN >> art [COUNTABLE_FROM, FROM_NOT_EMPTY] \\
6301 RW_TAC std_ss [SUBSET_DEF, IN_IMAGE, IN_FROM] \\
6302 METIS_TAC []) >> DISCH_TAC
6303 >> Q.UNABBREV_TAC `E`
6304 >> Know `!e. BIGUNION (IMAGE (\m. A m e) univ(:num)) IN events p`
6305 >- (GEN_TAC >> MATCH_MP_TAC EVENTS_COUNTABLE_UNION >> art [] \\
6306 reverse CONJ_TAC >- (MATCH_MP_TAC image_countable >> REWRITE_TAC [COUNTABLE_NUM]) \\
6307 RW_TAC std_ss [SUBSET_DEF, IN_IMAGE, IN_UNIV] >> PROVE_TAC []) >> DISCH_TAC
6308 >> Know `!m e. A m e SUBSET A (SUC m) e`
6309 >- (RW_TAC set_ss [Abbr `A`, SUBSET_DEF, IN_BIGINTER_IMAGE, IN_FROM]
6310 >- (Q.PAT_X_ASSUM `!n. m <= n ==> P`
6311 (STRIP_ASSUME_TAC o (REWRITE_RULE [LESS_EQ_REFL]) o (Q.SPEC `m`))) \\
6312 `m <= n` by RW_TAC arith_ss [] >> METIS_TAC []) >> DISCH_TAC
6313 >> Q.PAT_X_ASSUM `!e n. {x | x IN p_space p /\ P} IN events p` K_TAC
6314 >> Q.ABBREV_TAC `B = \m e. p_space p DIFF A m e`
6315 >> Know `!m e. p_space p DIFF A m e = B m e` >- METIS_TAC [] >> Rewr'
6316 >> `!m e. B m e IN events p` by METIS_TAC [EVENTS_COMPL]
6317 >> Know `!e. BIGINTER (IMAGE (\m. B m e) univ(:num)) IN events p`
6318 >- (GEN_TAC >> MATCH_MP_TAC EVENTS_COUNTABLE_INTER >> art [] \\
6319 CONJ_TAC
6320 >- (RW_TAC std_ss [SUBSET_DEF, IN_IMAGE, IN_UNIV] >> PROVE_TAC []) \\
6321 CONJ_TAC >- (MATCH_MP_TAC image_countable >> REWRITE_TAC [COUNTABLE_NUM]) \\
6322 RW_TAC std_ss [Once EXTENSION, NOT_IN_EMPTY, IN_IMAGE, IN_UNIV]) >> DISCH_TAC
6323 >> Know `!m e. B (SUC m) e SUBSET B m e`
6324 >- (RW_TAC set_ss [Abbr `B`, SUBSET_DEF, IN_BIGINTER_IMAGE, IN_FROM] \\
6325 ASM_SET_TAC []) >> DISCH_TAC
6326 >> Suff `!e. 0 < e /\ e <> PosInf ==>
6327 ((sup (IMAGE (\m. prob p (A m e)) univ(:num)) = 1) <=>
6328 (inf (IMAGE (\m. prob p (B m e)) univ(:num)) = 0))` >- METIS_TAC []
6329 >> rpt STRIP_TAC
6330 >> Know `sup (IMAGE (prob p o (\m. A m e)) univ(:num)) =
6331 prob p (BIGUNION (IMAGE (\m. A m e) univ(:num)))`
6332 >- (REWRITE_TAC [prob_def] \\
6333 MATCH_MP_TAC MONOTONE_CONVERGENCE \\
6334 CONJ_TAC >- fs [prob_space_def] \\
6335 RW_TAC std_ss [IN_FUNSET, IN_UNIV, GSYM events_def])
6336 >> SIMP_TAC std_ss [o_DEF] >> DISCH_THEN K_TAC
6337 >> Know `inf (IMAGE (prob p o (\m. B m e)) univ(:num)) =
6338 prob p (BIGINTER (IMAGE (\m. B m e) univ(:num)))`
6339 >- (REWRITE_TAC [prob_def] \\
6340 MATCH_MP_TAC MONOTONE_CONVERGENCE_BIGINTER \\
6341 CONJ_TAC >- fs [prob_space_def] \\
6342 RW_TAC std_ss [IN_FUNSET, IN_UNIV, GSYM events_def, GSYM prob_def] \\
6343 PROVE_TAC [PROB_FINITE])
6344 >> SIMP_TAC std_ss [o_DEF] >> DISCH_THEN K_TAC
6345 >> Know `BIGUNION (IMAGE (\m. A m e) univ(:num)) =
6346 p_space p DIFF (BIGINTER (IMAGE (\m. B m e) univ(:num)))`
6347 >- (RW_TAC std_ss [Once EXTENSION, Abbr `B`, IN_DIFF, IN_UNIV,
6348 IN_BIGUNION_IMAGE, IN_BIGINTER_IMAGE] \\
6349 EQ_TAC >> RW_TAC std_ss [] >| (* 3 subgoals *)
6350 [ (* goal 1 (of 3) *)
6351 irule PROB_SPACE_IN_PSPACE >> art [] \\
6352 Q.EXISTS_TAC `A m e` >> art [],
6353 (* goal 2 (of 3) *)
6354 Q.EXISTS_TAC `m` >> DISJ2_TAC >> art [],
6355 (* goal 3 (of 3) *)
6356 Q.EXISTS_TAC `m` >> art [] ]) >> Rewr'
6357 >> Know `prob p (p_space p DIFF BIGINTER (IMAGE (\m. B m e) univ(:num))) =
6358 1 - prob p (BIGINTER (IMAGE (\m. B m e) univ(:num)))`
6359 >- (MATCH_MP_TAC PROB_COMPL >> art []) >> Rewr'
6360 >> `prob p (BIGINTER (IMAGE (\m. B m e) univ(:num))) <> PosInf /\
6361 prob p (BIGINTER (IMAGE (\m. B m e) univ(:num))) <> NegInf`
6362 by METIS_TAC [PROB_FINITE]
6363 >> `?r. prob p (BIGINTER (IMAGE (\m. B m e) univ(:num))) = Normal r`
6364 by METIS_TAC [extreal_cases] >> POP_ORW
6365 >> rw [extreal_of_num_def, extreal_sub_def, extreal_11]
6366 >> REAL_ARITH_TAC
6367QED
6368
6369(* Theorem 4.1.2 [1, p.70]: convergence a.e. implies convergence in pr. *)
6370Theorem converge_AE_imp_PR :
6371 !p X Y. prob_space p /\ (!n. real_random_variable (X n) p) /\
6372 real_random_variable Y p /\
6373 (X --> Y) (almost_everywhere p) ==> (X --> Y) (in_probability p)
6374Proof
6375 rpt GEN_TAC >> STRIP_TAC
6376 >> POP_ASSUM MP_TAC
6377 >> MP_TAC (Q.SPECL [`p`, `X`, `Y`] converge_AE_alt_inf)
6378 >> RW_TAC std_ss []
6379 >> Q.PAT_X_ASSUM `(X --> Y) (almost_everywhere p) <=> P` K_TAC
6380 >> RW_TAC real_ss [converge_PR_def, LIM_SEQUENTIALLY, dist]
6381 >> rename1 `0 < r`
6382 >> fs [real_random_variable_def]
6383 >> Q.ABBREV_TAC `D = \n. {x | x IN p_space p /\ e < abs (X n x - Y x)}`
6384 >> `!n. {x | x IN p_space p /\ e < abs (X n x - Y x)} = D n`
6385 by METIS_TAC [] >> POP_ORW
6386 >> Q.ABBREV_TAC `B = \m. {x | x IN p_space p /\ ?n. m <= n /\ e < abs (X n x - Y x)}`
6387 >> Q.PAT_X_ASSUM `!e. 0 < e /\ e <> PosInf ==> P` (MP_TAC o (Q.SPEC `e`))
6388 >> `!m. {x | x IN p_space p /\ ?n. m <= n /\ e < abs (X n x - Y x)} = B m`
6389 by METIS_TAC [] >> POP_ORW
6390 >> RW_TAC std_ss []
6391 >> Know `!n. D n SUBSET B n`
6392 >- (RW_TAC set_ss [Abbr `D`, Abbr `B`, SUBSET_DEF] \\
6393 Q.EXISTS_TAC `n` >> art [LESS_EQ_REFL]) >> DISCH_TAC
6394 >> ‘sigma_algebra (measurable_space p)’
6395 by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA, prob_space_def]
6396 >> Q.ABBREV_TAC `f = \n x. X n x - Y x`
6397 >> Know `!n. (f n) IN measurable (m_space p,measurable_sets p) Borel`
6398 >- (GEN_TAC >> Q.UNABBREV_TAC `f` >> BETA_TAC \\
6399 MATCH_MP_TAC IN_MEASURABLE_BOREL_SUB \\
6400 qexistsl_tac [`X n`, `Y`] \\
6401 fs [prob_space_def, p_space_def, events_def, space_def,
6402 measure_space_def, random_variable_def]) >> DISCH_TAC
6403 >> Know `!n. D n IN events p`
6404 >- (GEN_TAC >> Q.UNABBREV_TAC `D` >> BETA_TAC \\
6405 `{x | x IN p_space p /\ e < abs (X n x - Y x)} =
6406 p_space p DIFF {x | x IN p_space p /\ abs (X n x - Y x) <= e}`
6407 by (RW_TAC set_ss [Once EXTENSION, GSYM extreal_lt_def] \\
6408 METIS_TAC []) >> POP_ORW \\
6409 MATCH_MP_TAC EVENTS_COMPL >> art [] \\
6410 RW_TAC std_ss [abs_bounds] \\
6411 `{x | x IN p_space p /\ -e <= f n x /\ f n x <= e} =
6412 ({x | -e <= f n x} INTER p_space p) INTER ({x | f n x <= e} INTER p_space p)`
6413 by SET_TAC [] >> POP_ORW \\
6414 MATCH_MP_TAC EVENTS_INTER >> fs [events_def, p_space_def] \\
6415 METIS_TAC [IN_MEASURABLE_BOREL_ALL_MEASURE]) >> DISCH_TAC
6416 >> `!n. 0 <= prob p (D n)` by METIS_TAC [PROB_POSITIVE]
6417 >> `!n. prob p (D n) <> PosInf /\ prob p (D n) <> NegInf` by METIS_TAC [PROB_FINITE]
6418 >> Know `!n. abs (real (prob p (D n))) = real (prob p (D n))`
6419 >- (RW_TAC std_ss [ABS_REFL] \\
6420 ASM_SIMP_TAC std_ss [GSYM extreal_le_eq, normal_real,
6421 GSYM extreal_of_num_def]) >> Rewr'
6422 >> ASM_SIMP_TAC std_ss [GSYM extreal_lt_eq, normal_real]
6423 >> Q.ABBREV_TAC
6424 `E = \m. {x | x IN p_space p /\ !n. m <= n ==> abs (X n x - Y x) <= e}`
6425 >> Know `!m. {x | x IN p_space p /\ ?n. m <= n /\ e < abs (X n x - Y x)} =
6426 p_space p DIFF (E m)`
6427 >- (RW_TAC set_ss [Abbr `E`, Once EXTENSION] \\
6428 EQ_TAC >> RW_TAC std_ss [GSYM extreal_lt_def] \\
6429 Q.EXISTS_TAC `n` >> art [])
6430 >> DISCH_THEN (fs o wrap)
6431 >> Q.ABBREV_TAC
6432 `A = \m. BIGINTER
6433 (IMAGE (\n. {x | x IN p_space p /\ abs (X n x - Y x) <= e}) (from m))`
6434 >> Know `!m. E m = A m`
6435 >- (RW_TAC set_ss [Abbr `E`, Abbr `A`, Once EXTENSION, IN_BIGINTER_IMAGE, IN_FROM] \\
6436 EQ_TAC >> RW_TAC std_ss [] \\
6437 POP_ASSUM (STRIP_ASSUME_TAC o
6438 (REWRITE_RULE [LESS_EQ_REFL]) o (Q.SPEC `m`)))
6439 >> DISCH_THEN (fs o wrap)
6440 >> Know `!m. A m SUBSET A (SUC m)`
6441 >- (RW_TAC set_ss [Abbr `A`, SUBSET_DEF, IN_BIGINTER_IMAGE, IN_FROM]
6442 >- (Q.PAT_X_ASSUM `!n. m <= n ==> P`
6443 (STRIP_ASSUME_TAC o (REWRITE_RULE [LESS_EQ_REFL]) o (Q.SPEC `m`))) \\
6444 `m <= n` by RW_TAC arith_ss [] >> METIS_TAC []) >> DISCH_TAC
6445 >> Know `!m. B (SUC m) SUBSET B m`
6446 >- (RW_TAC set_ss [Abbr `B`, SUBSET_DEF, IN_BIGINTER_IMAGE, IN_FROM] \\
6447 ASM_SET_TAC []) >> DISCH_TAC
6448 >> Know `!m n. m <= n ==> B n SUBSET B m`
6449 >- (GEN_TAC >> Induct_on `n`
6450 >- (DISCH_TAC >> `m = 0` by RW_TAC arith_ss [] >> art [SUBSET_REFL]) \\
6451 DISCH_TAC \\
6452 `m = SUC n \/ m < SUC n` by RW_TAC arith_ss [] >- art [SUBSET_REFL] \\
6453 `m <= n` by RW_TAC arith_ss [] \\
6454 MATCH_MP_TAC SUBSET_TRANS >> Q.EXISTS_TAC `B n` >> art [] \\
6455 FIRST_X_ASSUM MATCH_MP_TAC >> art []) >> DISCH_TAC
6456 >> Know `!n. B n IN events p`
6457 >- (GEN_TAC >> Q.UNABBREV_TAC `B` >> BETA_TAC \\
6458 MATCH_MP_TAC EVENTS_COMPL >> art [] \\
6459 Q.UNABBREV_TAC `A` >> BETA_TAC \\
6460 MATCH_MP_TAC EVENTS_BIGINTER_FN >> art [COUNTABLE_FROM, FROM_NOT_EMPTY] \\
6461 RW_TAC std_ss [SUBSET_DEF, IN_IMAGE, IN_FROM] \\
6462 rename1 `n <= m` >> REWRITE_TAC [abs_bounds] \\
6463 `{x | x IN p_space p /\ -e <= f m x /\ f m x <= e} =
6464 ({x | -e <= f m x} INTER p_space p) INTER ({x | f m x <= e} INTER p_space p)`
6465 by SET_TAC [] >> POP_ORW \\
6466 MATCH_MP_TAC EVENTS_INTER >> fs [events_def, p_space_def] \\
6467 METIS_TAC [IN_MEASURABLE_BOREL_ALL_MEASURE]) >> DISCH_TAC
6468 >> `!n. prob p (D n) <= prob p (B n)` by METIS_TAC [PROB_INCREASING]
6469 >> Know `inf (IMAGE (\m. prob p (B m)) univ(:num)) < Normal r`
6470 >- (ASM_SIMP_TAC std_ss [extreal_of_num_def, extreal_lt_eq])
6471 >> RW_TAC std_ss [GSYM inf_lt', IN_IMAGE, IN_UNIV]
6472 >> Q.EXISTS_TAC `m` >> rpt STRIP_TAC
6473 >> MATCH_MP_TAC let_trans
6474 >> Q.EXISTS_TAC `prob p (B n)` >> art []
6475 >> MATCH_MP_TAC let_trans
6476 >> Q.EXISTS_TAC `prob p (B m)` >> art []
6477 >> MATCH_MP_TAC PROB_INCREASING >> art []
6478 >> FIRST_X_ASSUM MATCH_MP_TAC >> art []
6479QED
6480
6481(* converge_AE_alt_sup restated by liminf, cf. PROB_LIMINF *)
6482Theorem converge_AE_alt_liminf :
6483 !p X Y. prob_space p /\ (!n. real_random_variable (X n) p) /\
6484 real_random_variable Y p ==>
6485 ((X --> Y) (almost_everywhere p) <=>
6486 !e. 0 < e /\ e <> PosInf ==>
6487 prob p (liminf (\n. {x | x IN p_space p /\ abs (X n x - Y x) <= e})) = 1)
6488Proof
6489 rpt STRIP_TAC
6490 >> MP_TAC (Q.SPECL [`p`, `X`, `Y`] converge_AE_alt_sup)
6491 >> RW_TAC std_ss [] >> POP_ASSUM K_TAC
6492 >> Suff `!e. 0 < e /\ e <> PosInf ==>
6493 ((sup
6494 (IMAGE
6495 (\m. prob p
6496 {x |
6497 x IN p_space p /\
6498 !n. m <= n ==> abs (X n x - Y x) <= e}) univ(:num)) = 1) <=>
6499 (prob p (liminf (\n. {x | x IN p_space p /\ abs (X n x - Y x) <= e})) = 1))`
6500 >- METIS_TAC []
6501 >> rpt STRIP_TAC
6502 >> fs [real_random_variable_def]
6503 >> Q.ABBREV_TAC `f = \n x. X n x - Y x`
6504 >> ‘sigma_algebra (measurable_space p)’
6505 by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA, prob_space_def]
6506 >> Know `!n. (f n) IN measurable (m_space p,measurable_sets p) Borel`
6507 >- (GEN_TAC >> Q.UNABBREV_TAC `f` >> BETA_TAC \\
6508 MATCH_MP_TAC IN_MEASURABLE_BOREL_SUB \\
6509 qexistsl_tac [`X n`, `Y`] \\
6510 fs [prob_space_def, p_space_def, events_def, space_def,
6511 measure_space_def, random_variable_def]) >> DISCH_TAC
6512 >> Q.ABBREV_TAC `E = \n. {x | x IN p_space p /\ abs (X n x - Y x) <= e}`
6513 >> Know `!n. E n IN events p`
6514 >- (RW_TAC std_ss [Abbr `E`, abs_bounds] \\
6515 `{x | x IN p_space p /\ -e <= f n x /\ f n x <= e} =
6516 ({x | -e <= f n x} INTER p_space p) INTER ({x | f n x <= e} INTER p_space p)`
6517 by SET_TAC [] >> POP_ORW \\
6518 MATCH_MP_TAC EVENTS_INTER >> fs [events_def, p_space_def] \\
6519 METIS_TAC [IN_MEASURABLE_BOREL_ALL_MEASURE]) >> DISCH_TAC
6520 >> ASM_SIMP_TAC std_ss [PROB_LIMINF]
6521 >> Suff `!m. {x | x IN p_space p /\ !n. m <= n ==> abs (f n x) <= e} =
6522 (BIGINTER {E n | m <= n})` >- rw []
6523 >> GEN_TAC
6524 >> `{E n | m <= n} = (IMAGE E (from m))`
6525 by (RW_TAC set_ss [Abbr `E`, IN_FROM, Once EXTENSION]) >> POP_ORW
6526 >> RW_TAC set_ss [Abbr `E`, Abbr `f`, Once EXTENSION, IN_BIGINTER_IMAGE, IN_FROM]
6527 >> EQ_TAC >> RW_TAC std_ss []
6528 >> POP_ASSUM (STRIP_ASSUME_TAC o
6529 (REWRITE_RULE [LESS_EQ_REFL]) o (Q.SPEC `m`))
6530QED
6531
6532(* converge_AE_alt_inf restated by limsup, cf. PROB_LIMSUP
6533
6534 Theorem 4.2.2 [1, p.77] (extended version), also see Borel_Cantelli_Lemma1.
6535 *)
6536Theorem converge_AE_alt_limsup :
6537 !p X Y. prob_space p /\ (!n. real_random_variable (X n) p) /\
6538 real_random_variable Y p ==>
6539 ((X --> Y) (almost_everywhere p) <=>
6540 !e. 0 < e /\ e <> PosInf ==>
6541 prob p (limsup (\n. {x | x IN p_space p /\ e < abs (X n x - Y x)})) = 0)
6542Proof
6543 rpt STRIP_TAC
6544 >> MP_TAC (Q.SPECL [`p`, `X`, `Y`] converge_AE_alt_inf)
6545 >> RW_TAC std_ss [] >> POP_ASSUM K_TAC
6546 >> Suff `!e. 0 < e /\ e <> PosInf ==>
6547 ((inf
6548 (IMAGE
6549 (\m. prob p
6550 {x |
6551 x IN p_space p /\
6552 ?n. m <= n /\ e < abs (X n x - Y x)}) univ(:num)) = 0) <=>
6553 (prob p (limsup (\n. {x | x IN p_space p /\ e < abs (X n x - Y x)})) = 0))`
6554 >- METIS_TAC []
6555 >> rpt STRIP_TAC
6556 >> ‘sigma_algebra (measurable_space p)’
6557 by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA, prob_space_def]
6558 >> fs [real_random_variable_def]
6559 >> Q.ABBREV_TAC `f = \n x. X n x - Y x`
6560 >> Know `!n. (f n) IN measurable (m_space p,measurable_sets p) Borel`
6561 >- (GEN_TAC >> Q.UNABBREV_TAC `f` >> BETA_TAC \\
6562 MATCH_MP_TAC IN_MEASURABLE_BOREL_SUB \\
6563 qexistsl_tac [`X n`, `Y`] \\
6564 fs [prob_space_def, p_space_def, events_def, space_def,
6565 measure_space_def, random_variable_def]) >> DISCH_TAC
6566 >> Q.ABBREV_TAC `E = \n. {x | x IN p_space p /\ e < abs (X n x - Y x)}`
6567 >> Know `!n. E n IN events p`
6568 >- (RW_TAC std_ss [Abbr `E`] \\
6569 `{x | x IN p_space p /\ e < abs (f n x)} =
6570 p_space p DIFF {x | x IN p_space p /\ abs (f n x) <= e}`
6571 by (RW_TAC set_ss [Once EXTENSION, GSYM extreal_lt_def] \\
6572 METIS_TAC []) >> POP_ORW \\
6573 MATCH_MP_TAC EVENTS_COMPL >> art [] \\
6574 REWRITE_TAC [abs_bounds] \\
6575 `{x | x IN p_space p /\ -e <= f n x /\ f n x <= e} =
6576 ({x | -e <= f n x} INTER p_space p) INTER ({x | f n x <= e} INTER p_space p)`
6577 by SET_TAC [] >> POP_ORW \\
6578 MATCH_MP_TAC EVENTS_INTER >> fs [events_def, p_space_def] \\
6579 METIS_TAC [IN_MEASURABLE_BOREL_ALL_MEASURE]) >> DISCH_TAC
6580 (* applying PROB_LIMSUP *)
6581 >> ASM_SIMP_TAC std_ss [PROB_LIMSUP]
6582 >> Suff `!m. {x | x IN p_space p /\ ?n. m <= n /\ e < abs (f n x)} =
6583 (BIGUNION {E n | m <= n})` >- rw []
6584 >> GEN_TAC
6585 >> `{E n | m <= n} = (IMAGE E (from m))`
6586 by (RW_TAC set_ss [Abbr `E`, IN_FROM, Once EXTENSION]) >> POP_ORW
6587 >> RW_TAC set_ss [Abbr `E`, Abbr `f`, Once EXTENSION, IN_BIGUNION_IMAGE, IN_FROM]
6588 >> EQ_TAC >> RW_TAC std_ss [] >- art []
6589 >> Q.EXISTS_TAC `n` >> art []
6590QED
6591
6592(* Theorem 4.2.2 [1, p.77] (original version) *)
6593Theorem converge_AE_alt_limsup' :
6594 !p X. prob_space p /\ (!n. real_random_variable (X n) p) ==>
6595 ((X --> (\x. 0)) (almost_everywhere p) <=>
6596 !e. 0 < e /\ e <> PosInf ==>
6597 prob p (limsup (\n. {x | x IN p_space p /\ e < abs (X n x)})) = 0)
6598Proof
6599 rpt STRIP_TAC
6600 >> ‘real_random_variable (\x. 0) p’ by METIS_TAC [real_random_variable_zero]
6601 >> MP_TAC (Q.SPECL [‘p’, ‘X’, ‘\x. 0’] converge_AE_alt_limsup)
6602 >> RW_TAC std_ss [sub_rzero]
6603QED
6604
6605Theorem converge_AE_to_zero :
6606 !p X Y. prob_space p /\ (!n. real_random_variable (X n) p) /\
6607 real_random_variable Y p ==>
6608 ((X --> Y) (almost_everywhere p) <=>
6609 ((\n x. X n x - Y x) --> (\x. 0)) (almost_everywhere p))
6610Proof
6611 rpt STRIP_TAC
6612 >> `real_random_variable (\x. 0) p` by PROVE_TAC [real_random_variable_zero]
6613 >> Q.ABBREV_TAC `Z = \n x. X n x - Y x`
6614 >> Know ‘!n. real_random_variable (Z n) p’
6615 >- (RW_TAC std_ss [Abbr `Z`] \\
6616 MATCH_MP_TAC real_random_variable_sub >> art [])
6617 >> RW_TAC std_ss [converge_AE_alt_limsup, sub_rzero]
6618QED
6619
6620Theorem converge_PR_to_zero :
6621 !p X Y. prob_space p /\ (!n. real_random_variable (X n) p) /\
6622 real_random_variable Y p ==>
6623 ((X --> Y) (in_probability p) <=>
6624 ((\n x. X n x - Y x) --> (\x. 0)) (in_probability p))
6625Proof
6626 rpt STRIP_TAC
6627 >> `real_random_variable (\x. 0) p` by PROVE_TAC [real_random_variable_zero]
6628 >> Q.ABBREV_TAC `Z = \n x. X n x - Y x`
6629 >> Know ‘!n. real_random_variable (Z n) p’
6630 >- (RW_TAC std_ss [Abbr `Z`] \\
6631 MATCH_MP_TAC real_random_variable_sub >> art [])
6632 >> DISCH_TAC
6633 >> RW_TAC std_ss [converge_PR_def, sub_rzero]
6634QED
6635
6636Theorem converge_AE_imp_PR' :
6637 !p X. prob_space p /\ (!n. real_random_variable (X n) p) /\
6638 (X --> (\x. 0)) (almost_everywhere p) ==>
6639 (X --> (\x. 0)) (in_probability p)
6640Proof
6641 rpt STRIP_TAC
6642 >> irule converge_AE_imp_PR
6643 >> rw [real_random_variable_zero]
6644QED
6645
6646(* Theorem 4.1.4 [2, p.71], for moments (integer-valued) only. *)
6647Theorem converge_LP_imp_PR' :
6648 !p X k. prob_space p /\ (!n. real_random_variable (X n) p) /\ 0 < k /\
6649 (X --> (\x. 0)) (in_lebesgue (&k :extreal) p) ==>
6650 (X --> (\x. 0)) (in_probability p)
6651Proof
6652 rpt GEN_TAC >> STRIP_TAC
6653 >> POP_ASSUM MP_TAC
6654 >> `real_random_variable (\x. 0) p` by PROVE_TAC [real_random_variable_zero]
6655 >> RW_TAC real_ss [converge_LP_alt_pow, converge_PR_def, LIM_SEQUENTIALLY,
6656 dist, expectation_def, sub_rzero, REAL_SUB_RZERO]
6657 >> ‘sigma_algebra (measurable_space p)’
6658 by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA, prob_space_def]
6659 >> fs [real_random_variable_def]
6660 >> rename1 `0 < d` (* the last assumption *)
6661 >> Know `!n. {x | x IN p_space p /\ e < abs (X n x)} IN events p`
6662 >- (GEN_TAC \\
6663 `{x | x IN p_space p /\ e < abs (X n x)} =
6664 p_space p DIFF {x | x IN p_space p /\ abs (X n x) <= e}`
6665 by (RW_TAC set_ss [Once EXTENSION, GSYM extreal_lt_def] \\
6666 METIS_TAC []) >> POP_ORW \\
6667 MATCH_MP_TAC EVENTS_COMPL >> art [] \\
6668 REWRITE_TAC [abs_bounds] \\
6669 `{x | x IN p_space p /\ -e <= X n x /\ X n x <= e} =
6670 ({x | -e <= X n x} INTER p_space p) INTER ({x | X n x <= e} INTER p_space p)`
6671 by SET_TAC [] >> POP_ORW \\
6672 MATCH_MP_TAC EVENTS_INTER >> fs [events_def, p_space_def] \\
6673 fs [random_variable_def, events_def, p_space_def] \\
6674 METIS_TAC [IN_MEASURABLE_BOREL_ALL_MEASURE])
6675 >> DISCH_TAC
6676 >> Know `!n. abs (real (prob p {x | x IN p_space p /\ e < abs (X n x)})) =
6677 real (prob p {x | x IN p_space p /\ e < abs (X n x)})`
6678 >- (GEN_TAC \\
6679 `prob p {x | x IN p_space p /\ e < abs (X n x)} <> PosInf /\
6680 prob p {x | x IN p_space p /\ e < abs (X n x)} <> NegInf`
6681 by METIS_TAC [PROB_FINITE] \\
6682 ASM_SIMP_TAC std_ss [ABS_REFL, GSYM extreal_le_eq, normal_real,
6683 GSYM extreal_of_num_def] \\
6684 MATCH_MP_TAC PROB_POSITIVE >> art []) >> Rewr'
6685 >> Know `!n. 0 <= integral p (\x. abs (X n x) pow k)`
6686 >- (GEN_TAC >> MATCH_MP_TAC integral_pos \\
6687 fs [prob_space_def] \\
6688 rpt STRIP_TAC >> MATCH_MP_TAC pow_pos_le >> REWRITE_TAC [abs_pos])
6689 >> DISCH_TAC
6690 >> `!n. integral p (\x. abs (X n x) pow k) <> NegInf`
6691 by METIS_TAC [pos_not_neginf]
6692 >> Know `!n. abs (real (integral p (\x. abs (X n x) pow k))) =
6693 real (integral p (\x. abs (X n x) pow k))`
6694 >- (GEN_TAC \\
6695 ASM_SIMP_TAC std_ss [ABS_REFL, GSYM extreal_le_eq, normal_real,
6696 GSYM extreal_of_num_def])
6697 >> DISCH_THEN (fs o wrap)
6698 >> Know `!n. integrable p (\x. abs (X n x) pow k)`
6699 >- (Q.X_GEN_TAC ‘n’ \\
6700 fs [prob_space_def, random_variable_def, p_space_def, events_def] \\
6701 Know `measure_space p /\
6702 (!x. x IN m_space p ==> 0 <= (\x. abs (X n x) pow k) x)`
6703 >- (RW_TAC std_ss [] \\
6704 MATCH_MP_TAC pow_pos_le >> REWRITE_TAC [abs_pos]) \\
6705 DISCH_THEN (REWRITE_TAC o wrap o (MATCH_MP integrable_pos)) \\
6706 reverse CONJ_TAC
6707 >- (Suff `pos_fn_integral p (\x. abs (X n x) pow k) =
6708 integral p (\x. abs (X n x) pow k)` >- rw [] \\
6709 MATCH_MP_TAC EQ_SYM \\
6710 MATCH_MP_TAC integral_pos_fn \\
6711 RW_TAC std_ss [] \\
6712 MATCH_MP_TAC pow_pos_le >> REWRITE_TAC [abs_pos]) \\
6713 ONCE_REWRITE_TAC [METIS_PROVE []
6714 ``(\x. abs (X n x) pow k) = (\x. (\x. abs (X n x)) x pow k)``] \\
6715 MATCH_MP_TAC IN_MEASURABLE_BOREL_POW \\
6716 MATCH_MP_TAC IN_MEASURABLE_BOREL_ABS \\
6717 Q.EXISTS_TAC `X n` >> fs [measure_space_def])
6718 >> DISCH_TAC
6719 (* eliminate all `real (prob p ...)` *)
6720 >> `!n. real (prob p {x | x IN p_space p /\ e < abs (X n x)}) < d <=>
6721 prob p {x | x IN p_space p /\ e < abs (X n x)} < Normal d`
6722 by (METIS_TAC [PROB_FINITE, normal_real, extreal_lt_eq]) >> POP_ORW
6723 >> `!n. integral p (\x. abs (X n x) pow k) <> NegInf`
6724 by (METIS_TAC [pos_not_neginf])
6725 >> `!e n. real (integral p (\x. abs (X n x) pow k)) < e <=>
6726 integral p (\x. abs (X n x) pow k) < Normal e`
6727 by (METIS_TAC [normal_real, extreal_lt_eq])
6728 >> POP_ASSUM (fs o wrap)
6729 (* prepare for prob_markov_ineq *)
6730 >> `e <> NegInf` by METIS_TAC [lt_imp_le, pos_not_neginf]
6731 >> `?E. e = Normal E` by METIS_TAC [extreal_cases]
6732 >> `0 < E` by METIS_TAC [extreal_of_num_def, extreal_lt_eq]
6733 >> Q.PAT_X_ASSUM `!e. 0 < e ==> ?N. P` (MP_TAC o (Q.SPEC `d * E pow k`))
6734 >> `0 < E pow k` by PROVE_TAC [REAL_POW_LT]
6735 >> Know `0 < d * E pow k` >- (MATCH_MP_TAC REAL_LT_MUL >> art [])
6736 >> RW_TAC std_ss []
6737 >> Q.EXISTS_TAC `N` >> rpt STRIP_TAC
6738 >> Q.PAT_X_ASSUM `!n. N <= n ==> P`
6739 (MP_TAC o (REWRITE_RULE [GSYM expectation_def]) o (Q.SPEC `n`))
6740 >> RW_TAC std_ss [GSYM extreal_mul_def]
6741 >> Know `!m x. x IN p_space p ==>
6742 (Normal E < abs (X m x) <=> Normal (E pow k) < abs (X m x) pow k)`
6743 >- (rpt STRIP_TAC \\
6744 `?r. X m x = Normal r` by METIS_TAC [extreal_cases] >> POP_ORW \\
6745 SIMP_TAC std_ss [extreal_abs_def, extreal_pow_def, extreal_lt_eq] \\
6746 `k <> 0` by RW_TAC arith_ss [] \\
6747 EQ_TAC >> STRIP_TAC
6748 >- (MATCH_MP_TAC REAL_POW_LT2 >> art [] \\
6749 MATCH_MP_TAC REAL_LT_IMP_LE >> art []) \\
6750 SPOSE_NOT_THEN (ASSUME_TAC o (REWRITE_RULE [GSYM real_lte])) \\
6751 `abs r pow k <= E pow k` by METIS_TAC [POW_LE, ABS_POS] \\
6752 METIS_TAC [REAL_LTE_ANTISYM])
6753 >> DISCH_TAC
6754 >> Know ‘!m. {x | x IN p_space p /\ Normal E < abs (X m x)} =
6755 {x | x IN p_space p /\ Normal (E pow k) < abs (X m x) pow k}’
6756 >- (rw [Once EXTENSION] \\
6757 METIS_TAC [])
6758 >> DISCH_THEN (fs o wrap)
6759 >> MATCH_MP_TAC let_trans
6760 >> Q.EXISTS_TAC `prob p {x | x IN p_space p /\ Normal (E pow k) <= abs (X n x) pow k}`
6761 >> CONJ_TAC (* from `<` to `<=` *)
6762 >- (MATCH_MP_TAC PROB_INCREASING >> art [] \\
6763 reverse CONJ_TAC
6764 >- (RW_TAC set_ss [SUBSET_DEF] >> MATCH_MP_TAC lt_imp_le >> art []) \\
6765 fs [random_variable_def, prob_space_def, events_def, p_space_def] \\
6766 `{x | x IN m_space p /\ Normal (E pow k) <= abs (X n x) pow k} =
6767 {x | Normal (E pow k) <= (\x. abs (X n x) pow k) x} INTER m_space p`
6768 by SET_TAC [] >> POP_ORW \\
6769 Suff `(\x. abs (X n x) pow k) IN measurable (m_space p,measurable_sets p) Borel`
6770 >- rw [IN_MEASURABLE_BOREL_ALL_MEASURE] \\
6771 `!x. abs (X n x) = (\x. abs (X n x)) x` by METIS_TAC [] >> POP_ORW \\
6772 MATCH_MP_TAC IN_MEASURABLE_BOREL_POW \\
6773 MATCH_MP_TAC IN_MEASURABLE_BOREL_ABS >> Q.EXISTS_TAC `X n` \\
6774 FULL_SIMP_TAC std_ss [measure_space_def])
6775 (* applying prob_markov_ineq *)
6776 >> Q.ABBREV_TAC `Y = \x. abs (X n x) pow k`
6777 >> Know `!x. abs (X n x) pow k = abs (Y x)`
6778 >- (RW_TAC std_ss [Abbr `Y`, Once EQ_SYM_EQ, abs_refl] \\
6779 MATCH_MP_TAC pow_pos_le >> rw [abs_pos]) >> Rewr'
6780 >> `{x | x IN p_space p /\ Normal (E pow k) <= abs (Y x)} =
6781 {x | Normal (E pow k) <= abs (Y x)} INTER p_space p` by SET_TAC [] >> POP_ORW
6782 >> MATCH_MP_TAC let_trans
6783 >> Q.EXISTS_TAC `inv (Normal (E pow k)) * expectation p (abs o Y)`
6784 >> CONJ_TAC
6785 >- (MATCH_MP_TAC prob_markov_ineq \\
6786 RW_TAC std_ss [Abbr `Y`, extreal_of_num_def, extreal_lt_eq])
6787 >> Know `abs o Y = Y`
6788 >- (RW_TAC std_ss [o_DEF, Abbr `Y`, abs_refl, FUN_EQ_THM] \\
6789 MATCH_MP_TAC pow_pos_le >> rw [abs_pos]) >> Rewr'
6790 >> `0 < Normal (E pow k) /\ Normal (E pow k) <> PosInf`
6791 by (ASM_SIMP_TAC std_ss [extreal_not_infty, extreal_of_num_def, extreal_lt_eq])
6792 >> Know `inv (Normal (E pow k)) * expectation p Y < Normal d <=>
6793 Normal (E pow k) * (inv (Normal (E pow k)) * expectation p Y) <
6794 Normal (E pow k) * Normal d`
6795 >- (MATCH_MP_TAC EQ_SYM >> MATCH_MP_TAC lt_lmul >> art []) >> Rewr'
6796 >> ASM_SIMP_TAC std_ss [mul_assoc, mul_lone,
6797 ONCE_REWRITE_RULE [mul_comm] mul_linv_pos]
6798 >> ASM_REWRITE_TAC [Once mul_comm]
6799QED
6800
6801Theorem converge_AE_cong_full :
6802 !p X Y A B m. (!n x. m <= n /\ x IN p_space p ==> X n x = Y n x) /\
6803 (!x. x IN p_space p ==> A x = B x) ==>
6804 ((X --> A) (almost_everywhere p) <=> (Y --> B) (almost_everywhere p))
6805Proof
6806 rw [p_space_def, converge_AE, AE_DEF, EXTREAL_LIM_SEQUENTIALLY]
6807 >> EQ_TAC >> rw []
6808 >| [ (* goal 1 (of 2) *)
6809 Q.EXISTS_TAC ‘N’ >> rw [] \\
6810 Q.PAT_X_ASSUM ‘!x. x IN m_space p /\ x NOTIN N ==> P’ (MP_TAC o (Q.SPEC ‘x’)) \\
6811 rw [] >> POP_ASSUM (MP_TAC o (Q.SPEC ‘e’)) >> rw [] \\
6812 Q.EXISTS_TAC ‘MAX N' m’ >> rw [MAX_LE] \\
6813 ‘Y n x = X n x’ by METIS_TAC [] >> POP_ORW \\
6814 FIRST_X_ASSUM MATCH_MP_TAC >> art [],
6815 (* goal 2 (of 2) *)
6816 Q.EXISTS_TAC ‘N’ >> rw [] \\
6817 Q.PAT_X_ASSUM ‘!x. x IN m_space p /\ x NOTIN N ==> P’ (MP_TAC o (Q.SPEC ‘x’)) \\
6818 rw [] >> POP_ASSUM (MP_TAC o (Q.SPEC ‘e’)) >> rw [] \\
6819 Q.EXISTS_TAC ‘MAX N' m’ >> rw [MAX_LE] ]
6820QED
6821
6822Theorem converge_AE_cong :
6823 !p X Y Z m. (!n x. m <= n /\ x IN p_space p ==> X n x = Y n x) ==>
6824 ((X --> Z) (almost_everywhere p) <=> (Y --> Z) (almost_everywhere p))
6825Proof
6826 rpt STRIP_TAC
6827 >> MATCH_MP_TAC converge_AE_cong_full
6828 >> Q.EXISTS_TAC ‘m’ >> rw []
6829QED
6830
6831Theorem converge_PR_cong_full :
6832 !p X Y A B m. (!n x. m <= n /\ x IN p_space p ==> X n x = Y n x) /\
6833 (!x. x IN p_space p ==> A x = B x) ==>
6834 ((X --> A) (in_probability p) <=> (Y --> B) (in_probability p))
6835Proof
6836 rw [converge_PR, EXTREAL_LIM_SEQUENTIALLY]
6837 >> EQ_TAC >> rw []
6838 >| [ (* goal 1 (of 2) *)
6839 Q.PAT_X_ASSUM ‘!e. 0 < e /\ e <> PosInf ==> P’ (MP_TAC o (Q.SPEC ‘e’)) >> rw [] \\
6840 rename1 ‘0 < (E :real)’ \\
6841 POP_ASSUM (MP_TAC o (Q.SPEC ‘E’)) >> rw [] \\
6842 Q.EXISTS_TAC ‘MAX N m’ >> rw [MAX_LE] \\
6843 Know ‘{x | x IN p_space p /\ e < abs (Y n x - B x)} =
6844 {x | x IN p_space p /\ e < abs (X n x - A x)}’
6845 >- (rw [Once EXTENSION] \\
6846 EQ_TAC >> rw [] >> METIS_TAC []) >> Rewr' \\
6847 FIRST_X_ASSUM MATCH_MP_TAC >> art [],
6848 (* goal 2 (of 2) *)
6849 Q.PAT_X_ASSUM ‘!e. 0 < e /\ e <> PosInf ==> P’ (MP_TAC o (Q.SPEC ‘e’)) >> rw [] \\
6850 rename1 ‘0 < (E :real)’ \\
6851 POP_ASSUM (MP_TAC o (Q.SPEC ‘E’)) >> rw [] \\
6852 Q.EXISTS_TAC ‘MAX N m’ >> rw [MAX_LE] \\
6853 Know ‘{x | x IN p_space p /\ e < abs (X n x - A x)} =
6854 {x | x IN p_space p /\ e < abs (Y n x - B x)}’
6855 >- (rw [Once EXTENSION] \\
6856 EQ_TAC >> rw [] >> METIS_TAC []) >> Rewr' \\
6857 FIRST_X_ASSUM MATCH_MP_TAC >> art [] ]
6858QED
6859
6860Theorem converge_PR_cong :
6861 !p X Y Z m. (!n x. m <= n /\ x IN p_space p ==> X n x = Y n x) ==>
6862 ((X --> Z) (in_probability p) <=> (Y --> Z) (in_probability p))
6863Proof
6864 rpt STRIP_TAC
6865 >> MATCH_MP_TAC converge_PR_cong_full
6866 >> Q.EXISTS_TAC ‘m’ >> rw []
6867QED
6868
6869Theorem converge_LP_cong :
6870 !p X Y Z r. prob_space p /\ (!n x. x IN p_space p ==> X n x = Y n x) /\
6871 0 < r /\ r <> PosInf ==>
6872 ((X --> Z) (in_lebesgue r p) <=> (Y --> Z) (in_lebesgue r p))
6873Proof
6874 rw [converge_LP, EXTREAL_LIM_SEQUENTIALLY]
6875 >> EQ_TAC >> RW_TAC std_ss []
6876 >| [ (* goal 1 (of 4) *)
6877 Know ‘Y n IN lp_space r p <=> X n IN lp_space r p’
6878 >- (MATCH_MP_TAC lp_space_cong >> fs [prob_space_def, p_space_def]) \\
6879 DISCH_THEN (ASM_REWRITE_TAC o wrap),
6880 (* goal 2 (of 4) *)
6881 Q.PAT_X_ASSUM ‘!e. 0 < e ==> P’ (MP_TAC o (Q.SPEC ‘e’)) >> rw [] \\
6882 Q.EXISTS_TAC ‘N’ >> rw [] \\
6883 Know ‘expectation p (\x. abs (Y n x - Z x) powr r) =
6884 expectation p (\x. abs (X n x - Z x) powr r)’
6885 >- (MATCH_MP_TAC expectation_cong >> rw []) >> Rewr' \\
6886 FIRST_X_ASSUM MATCH_MP_TAC >> art [],
6887 (* goal 3 (of 4) *)
6888 Know ‘X n IN lp_space r p <=> Y n IN lp_space r p’
6889 >- (MATCH_MP_TAC lp_space_cong >> fs [prob_space_def, p_space_def]) \\
6890 DISCH_THEN (ASM_REWRITE_TAC o wrap),
6891 (* goal 4 (of 4) *)
6892 Q.PAT_X_ASSUM ‘!e. 0 < e ==> P’ (MP_TAC o (Q.SPEC ‘e’)) >> rw [] \\
6893 Q.EXISTS_TAC ‘N’ >> rw [] \\
6894 Know ‘expectation p (\x. abs (X n x - Z x) powr r) =
6895 expectation p (\x. abs (Y n x - Z x) powr r)’
6896 >- (MATCH_MP_TAC expectation_cong >> rw []) >> Rewr' \\
6897 FIRST_X_ASSUM MATCH_MP_TAC >> art [] ]
6898QED
6899
6900(*
6901Theorem WLLN_uncorrelated_L2 :
6902
6903 has been moved to examples/probability/large_numberTheory with improved statements.
6904 *)
6905
6906Theorem converge_AE_to_zero' :
6907 !p X Y Z. prob_space p /\ (!n. real_random_variable (X n) p) /\
6908 real_random_variable Y p /\
6909 (!n x. x IN p_space p ==> Z n x = X n x - Y x) ==>
6910 ((X --> Y) (almost_everywhere p) <=> (Z --> (\x. 0)) (almost_everywhere p))
6911Proof
6912 rw [converge_AE_to_zero]
6913 >> MATCH_MP_TAC converge_AE_cong
6914 >> Q.EXISTS_TAC ‘0’ >> rw []
6915QED
6916
6917Theorem converge_PR_to_zero' :
6918 !p X Y Z. prob_space p /\ (!n. real_random_variable (X n) p) /\
6919 real_random_variable Y p /\
6920 (!n x. x IN p_space p ==> Z n x = X n x - Y x) ==>
6921 ((X --> Y) (in_probability p) <=> (Z --> (\x. 0)) (in_probability p))
6922Proof
6923 rw [converge_PR_to_zero]
6924 >> MATCH_MP_TAC converge_PR_cong
6925 >> Q.EXISTS_TAC ‘0’ >> rw []
6926QED
6927
6928Theorem converge_AE_alt_shift :
6929 !D p X Y. (X --> Y) (almost_everywhere p) <=>
6930 ((\n. X (n + D)) --> Y) (almost_everywhere p)
6931Proof
6932 RW_TAC std_ss [converge_AE, AE_DEF, GSYM IN_NULL_SET, EXTREAL_LIM_SEQUENTIALLY]
6933 >> EQ_TAC >> rw [] (* 2 subgoals *)
6934 >| [ (* goal 1 (of 2) *)
6935 Q.EXISTS_TAC ‘N’ >> RW_TAC std_ss [] \\
6936 Q.PAT_X_ASSUM `!x. x IN m_space p /\ x NOTIN N ==> P` (MP_TAC o (Q.SPEC `x`)) \\
6937 RW_TAC std_ss [] \\
6938 rename1 `z IN null_set p` \\
6939 Q.PAT_X_ASSUM `!e. 0 < e ==> P` (MP_TAC o (Q.SPEC `e`)) >> RW_TAC std_ss [] \\
6940 Q.EXISTS_TAC ‘N’ >> RW_TAC std_ss [] \\
6941 Q.PAT_X_ASSUM ‘!n. N <= n ==> P’ (MP_TAC o (Q.SPEC ‘D + n’)) >> rw [],
6942 (* goal 2 (of 2) *)
6943 Q.EXISTS_TAC `N` >> RW_TAC std_ss [] \\
6944 Q.PAT_X_ASSUM `!x. x IN m_space p /\ x NOTIN N ==> P` (MP_TAC o (Q.SPEC `x`)) \\
6945 RW_TAC std_ss [] \\
6946 rename1 `z IN null_set p` \\
6947 Q.PAT_X_ASSUM `!e. 0 < e ==> P` (MP_TAC o (Q.SPEC `e`)) >> RW_TAC std_ss [] \\
6948 Q.EXISTS_TAC `D + N` >> rpt STRIP_TAC \\
6949 ‘N <= n - D’ by rw [] \\
6950 Q.PAT_X_ASSUM ‘!n. N <= n ==> P’ (MP_TAC o (Q.SPEC ‘n - D’)) >> rw [] ]
6951QED
6952
6953Theorem converge_PR_alt_shift :
6954 !D p X Y. (X --> Y) (in_probability p) <=>
6955 ((\n. X (n + D)) --> Y) (in_probability p)
6956Proof
6957 RW_TAC std_ss [converge_PR, EXTREAL_LIM_SEQUENTIALLY]
6958 >> EQ_TAC >> RW_TAC std_ss [] (* 2 subgoals *)
6959 >| [ (* goal 1 (of 2) *)
6960 rename1 `E <> PosInf` \\
6961 Q.PAT_X_ASSUM `!e. 0 < e /\ e <> PosInf ==> P` (MP_TAC o (Q.SPEC `E`)) \\
6962 RW_TAC std_ss [] \\
6963 rename1 `0 < e` (* this changes the last matching assumption *) \\
6964 Q.PAT_X_ASSUM `!e. 0 < e ==> P` (MP_TAC o (Q.SPEC `e`)) \\
6965 RW_TAC std_ss [] \\
6966 Q.EXISTS_TAC ‘N’ >> RW_TAC std_ss [] \\
6967 Q.PAT_X_ASSUM ‘!n. N <= n ==> P’ (MP_TAC o (Q.SPEC ‘n + D’)) \\
6968 RW_TAC arith_ss [],
6969 (* goal 2 (of 2) *)
6970 rename1 `E <> PosInf` \\
6971 Q.PAT_X_ASSUM `!e. 0 < e /\ e <> PosInf ==> P` (MP_TAC o (Q.SPEC `E`)) \\
6972 RW_TAC std_ss [] \\
6973 rename1 `0 < e` (* this changes the last matching assumption *) \\
6974 Q.PAT_X_ASSUM `!e. 0 < e ==> P` (MP_TAC o (Q.SPEC `e`)) \\
6975 RW_TAC std_ss [] \\
6976 Q.EXISTS_TAC ‘N + D’ >> RW_TAC std_ss [] \\
6977 ‘N <= n - D’ by rw [] \\
6978 Q.PAT_X_ASSUM ‘!n. N <= n ==> P’ (MP_TAC o (Q.SPEC ‘n - D’)) \\
6979 RW_TAC arith_ss [] ]
6980QED
6981
6982(* |- !p X Y. ((\n. X (SUC n)) --> Y) (almost_everywhere p) ==>
6983 (X --> Y) (almost_everywhere p)
6984 *)
6985Theorem converge_AE_shift =
6986 converge_AE_alt_shift |> (Q.SPECL [‘1’, ‘p’, ‘X’, ‘Y’])
6987 |> (snd o EQ_IMP_RULE)
6988 |> (REWRITE_RULE [GSYM ADD1])
6989 |> Q.GENL [‘p’, ‘X’, ‘Y’]
6990
6991(* |- !p X Y. ((\n. X (SUC n)) --> Y) (in_probability p) ==>
6992 (X --> Y) (in_probability p)
6993 *)
6994Theorem converge_PR_shift =
6995 converge_PR_alt_shift |> (Q.SPECL [‘1’, ‘p’, ‘X’, ‘Y’])
6996 |> (snd o EQ_IMP_RULE)
6997 |> (REWRITE_RULE [GSYM ADD1])
6998 |> Q.GENL [‘p’, ‘X’, ‘Y’]
6999
7000Theorem converge_AE_const :
7001 !p c. prob_space p ==> ((\x n. c) --> (\x. c)) (almost_everywhere p)
7002Proof
7003 rw [converge_AE, EXTREAL_LIM_SEQUENTIALLY, AE_DEF, IN_NULL_SET, METRIC_SAME]
7004 >> Q.EXISTS_TAC ‘{}’
7005 >> fs [prob_space_def, NULL_SET_EMPTY]
7006QED
7007
7008Theorem converge_AE_const' :
7009 !p X m c. prob_space p /\ (!n x. m <= n /\ x IN p_space p ==> X n x = c) ==>
7010 (X --> (\x. c)) (almost_everywhere p)
7011Proof
7012 rpt STRIP_TAC
7013 >> Know ‘(X --> (\x. c)) (almost_everywhere p) <=>
7014 ((\n x. c) --> (\x. c)) (almost_everywhere p)’
7015 >- (MATCH_MP_TAC converge_AE_cong \\
7016 Q.EXISTS_TAC ‘m’ >> rw [])
7017 >> Rewr'
7018 >> MATCH_MP_TAC converge_AE_const >> art []
7019QED
7020
7021Theorem converge_PR_add_to_zero :
7022 !p X Y. prob_space p /\
7023 (!n. real_random_variable (X n) p) /\
7024 (!n. real_random_variable (Y n) p) /\
7025 (X --> (\x. 0)) (in_probability p) /\
7026 (Y --> (\x. 0)) (in_probability p) ==>
7027 ((\n x. X n x + Y n x) --> (\x. 0)) (in_probability p)
7028Proof
7029 rpt STRIP_TAC
7030 >> NTAC 2 (POP_ASSUM MP_TAC)
7031 >> ‘real_random_variable (\x. 0) p’ by PROVE_TAC [real_random_variable_zero]
7032 >> Know ‘!n. real_random_variable (\x. X n x + Y n x) p’
7033 >- (Q.X_GEN_TAC ‘n’ \\
7034 MP_TAC (Q.SPECL [‘p’, ‘X (n :num)’, ‘Y (n :num)’] real_random_variable_add) \\
7035 rw [])
7036 >> DISCH_TAC
7037 >> rw [converge_PR_def, LIM_SEQUENTIALLY, dist]
7038 >> rename1 ‘0 < (E :real)’ (* the last assumption with ‘e'’ is affected *)
7039 >> ‘e <> NegInf’ by PROVE_TAC [pos_not_neginf, lt_imp_le]
7040 >> Know `0 < e / 2`
7041 >- (GEN_REWRITE_TAC (RAND_CONV o ONCE_DEPTH_CONV) empty_rewrites
7042 [extreal_of_num_def] \\
7043 MATCH_MP_TAC lt_div >> RW_TAC real_ss [])
7044 >> DISCH_TAC
7045 >> Know ‘e / 2 <> PosInf’
7046 >- (‘?r. e = Normal r’ by METIS_TAC [extreal_cases] >> POP_ORW \\
7047 rw [extreal_of_num_def, extreal_not_infty, extreal_div_eq, GSYM ne_02])
7048 >> DISCH_TAC
7049 >> Know ‘0 < E / 2’
7050 >- (MATCH_MP_TAC REAL_LT_DIV >> rw [])
7051 >> DISCH_TAC
7052 >> NTAC 2 (Q.PAT_X_ASSUM ‘!e. 0 < e /\ e <> PosInf ==> P’ (MP_TAC o (Q.SPEC ‘e / 2’)))
7053 >> RW_TAC std_ss []
7054 >> NTAC 2 (Q.PAT_X_ASSUM ‘!e. 0 < e ==> P’ (MP_TAC o (Q.SPEC ‘E / 2’)))
7055 >> RW_TAC std_ss []
7056 >> Q.EXISTS_TAC ‘MAX N N'’
7057 >> rw [MAX_LE]
7058 >> NTAC 2 (Q.PAT_X_ASSUM ‘!n. _ <= n ==> P’ (MP_TAC o (Q.SPEC ‘n’)))
7059 >> RW_TAC std_ss []
7060 >> ‘sigma_algebra (measurable_space p)’
7061 by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA, prob_space_def]
7062 (* stage work *)
7063 >> Know `!Z b. real_random_variable Z p ==>
7064 {x | x IN p_space p /\ b < abs (Z x)} IN events p`
7065 >- (rpt GEN_TAC >> DISCH_TAC \\
7066 `{x | x IN p_space p /\ b < abs (Z x)} =
7067 p_space p DIFF {x | x IN p_space p /\ abs (Z x) <= b}`
7068 by (RW_TAC set_ss [Once EXTENSION, GSYM extreal_lt_def] \\
7069 METIS_TAC []) >> POP_ORW \\
7070 MATCH_MP_TAC EVENTS_COMPL >> art [abs_bounds] \\
7071 `{x | x IN p_space p /\ -b <= Z x /\ Z x <= b} =
7072 ({x | -b <= Z x} INTER p_space p) INTER ({x | Z x <= b} INTER p_space p)`
7073 by SET_TAC [] >> POP_ORW \\
7074 MATCH_MP_TAC EVENTS_INTER \\
7075 fs [real_random_variable, events_def, p_space_def] \\
7076 METIS_TAC [IN_MEASURABLE_BOREL_ALL_MEASURE])
7077 >> DISCH_TAC
7078 >> Q.ABBREV_TAC ‘A = {x | x IN p_space p /\ e / 2 < abs (X n x)}’
7079 >> Q.ABBREV_TAC ‘B = {x | x IN p_space p /\ e / 2 < abs (Y n x)}’
7080 (* simplify X-related assumptions *)
7081 >> Know ‘A IN events p’
7082 >- (Q.UNABBREV_TAC ‘A’ >> FIRST_X_ASSUM MATCH_MP_TAC >> art [])
7083 >> DISCH_TAC
7084 >> Know `abs (real (prob p A)) = real (prob p A)`
7085 >- (‘prob p A <> PosInf /\ prob p A <> NegInf’ by METIS_TAC [PROB_FINITE] \\
7086 ASM_SIMP_TAC std_ss [ABS_REFL, GSYM extreal_le_eq, normal_real,
7087 GSYM extreal_of_num_def] \\
7088 MATCH_MP_TAC PROB_POSITIVE >> rw [])
7089 >> DISCH_THEN (FULL_SIMP_TAC std_ss o wrap)
7090 >> `real (prob p A) < E / 2 <=> prob p A < Normal (E / 2)`
7091 by (METIS_TAC [PROB_FINITE, normal_real, extreal_lt_eq])
7092 >> POP_ASSUM (FULL_SIMP_TAC std_ss o wrap)
7093 (* simplify Y-related assumptions *)
7094 >> Know ‘B IN events p’
7095 >- (Q.UNABBREV_TAC ‘B’ >> FIRST_X_ASSUM MATCH_MP_TAC >> art [])
7096 >> DISCH_TAC
7097 >> Know `abs (real (prob p B)) = real (prob p B)`
7098 >- (‘prob p B <> PosInf /\ prob p B <> NegInf’ by METIS_TAC [PROB_FINITE] \\
7099 ASM_SIMP_TAC std_ss [ABS_REFL, GSYM extreal_le_eq, normal_real,
7100 GSYM extreal_of_num_def] \\
7101 MATCH_MP_TAC PROB_POSITIVE >> rw [])
7102 >> DISCH_THEN (FULL_SIMP_TAC std_ss o wrap)
7103 >> `real (prob p B) < E / 2 <=> prob p B < Normal (E / 2)`
7104 by (METIS_TAC [PROB_FINITE, normal_real, extreal_lt_eq])
7105 >> POP_ASSUM (FULL_SIMP_TAC std_ss o wrap)
7106 >> ‘A UNION B IN events p’ by PROVE_TAC [EVENTS_UNION]
7107 (* simplify goal *)
7108 >> Know ‘!n. real_random_variable (\x. X n x + Y n x) p’
7109 >- (Q.X_GEN_TAC ‘i’ \\
7110 MATCH_MP_TAC real_random_variable_add >> art[])
7111 >> DISCH_TAC
7112 >> Know ‘{x | x IN p_space p /\ e < abs (X n x + Y n x)} IN events p’
7113 >- (FIRST_X_ASSUM HO_MATCH_MP_TAC >> art [])
7114 >> DISCH_TAC
7115 >> Know ‘abs (real (prob p {x | x IN p_space p /\ e < abs (X n x + Y n x)})) =
7116 (real (prob p {x | x IN p_space p /\ e < abs (X n x + Y n x)}))’
7117 >- (‘prob p {x | x IN p_space p /\ e < abs (X n x + Y n x)} <> PosInf /\
7118 prob p {x | x IN p_space p /\ e < abs (X n x + Y n x)} <> NegInf’
7119 by METIS_TAC [PROB_FINITE] \\
7120 ASM_SIMP_TAC std_ss [ABS_REFL, GSYM extreal_le_eq, normal_real,
7121 GSYM extreal_of_num_def] \\
7122 MATCH_MP_TAC PROB_POSITIVE >> rw [])
7123 >> Rewr'
7124 >> ‘real (prob p {x | x IN p_space p /\ e < abs (X n x + Y n x)}) < E <=>
7125 prob p {x | x IN p_space p /\ e < abs (X n x + Y n x)} < Normal E’
7126 by (METIS_TAC [PROB_FINITE, normal_real, extreal_lt_eq])
7127 >> POP_ORW
7128 (* final stage *)
7129 >> MATCH_MP_TAC let_trans
7130 >> Q.EXISTS_TAC ‘prob p (A UNION B)’
7131 >> CONJ_TAC
7132 >- (MATCH_MP_TAC PROB_INCREASING \\
7133 rw [Abbr ‘A’, Abbr ‘B’, SUBSET_DEF] \\
7134 SPOSE_NOT_THEN (STRIP_ASSUME_TAC o (REWRITE_RULE [extreal_lt_def])) \\
7135 FULL_SIMP_TAC std_ss [real_random_variable_def] \\
7136 Know ‘abs (X n x + Y n x) <= e / 2 + e / 2’
7137 >- (MATCH_MP_TAC le_trans \\
7138 Q.EXISTS_TAC ‘abs (X n x) + abs (Y n x)’ \\
7139 CONJ_TAC >- (MATCH_MP_TAC abs_triangle >> rw []) \\
7140 MATCH_MP_TAC le_add2 >> art []) \\
7141 Suff ‘e / 2 + e / 2 = e’ >- rw [GSYM extreal_lt_def] \\
7142 REWRITE_TAC [half_double])
7143 >> MATCH_MP_TAC let_trans
7144 >> Q.EXISTS_TAC ‘prob p A + prob p B’
7145 >> CONJ_TAC
7146 >- (MATCH_MP_TAC PROB_SUBADDITIVE >> art [])
7147 >> Suff ‘Normal E = Normal (E / 2) + Normal (E / 2)’
7148 >- (Rewr' >> MATCH_MP_TAC lt_add2 >> art [])
7149 >> rw [extreal_add_def]
7150 >> REWRITE_TAC [REAL_HALF_DOUBLE]
7151QED
7152
7153Theorem converge_PR_add :
7154 !p X Y A B. prob_space p /\
7155 (!n. real_random_variable (X n) p) /\
7156 real_random_variable A p /\ (X --> A) (in_probability p) /\
7157 (!n. real_random_variable (Y n) p) /\
7158 real_random_variable B p /\ (Y --> B) (in_probability p) ==>
7159 ((\n x. X n x + Y n x) --> (\x. A x + B x)) (in_probability p)
7160Proof
7161 rpt STRIP_TAC
7162 >> Know ‘(X --> A) (in_probability p) <=>
7163 ((\n x. X n x - A x) --> (\x. 0)) (in_probability p)’
7164 >- (MATCH_MP_TAC converge_PR_to_zero >> art [])
7165 >> DISCH_THEN (FULL_SIMP_TAC std_ss o wrap)
7166 >> Know ‘(Y --> B) (in_probability p) <=>
7167 ((\n x. Y n x - B x) --> (\x. 0)) (in_probability p)’
7168 >- (MATCH_MP_TAC converge_PR_to_zero >> art [])
7169 >> DISCH_THEN (FULL_SIMP_TAC std_ss o wrap)
7170 >> Know ‘((\n x. X n x + Y n x) --> (\x. A x + B x)) (in_probability p) <=>
7171 ((\n x. X n x + Y n x - (A x + B x)) --> (\x. 0)) (in_probability p)’
7172 >- (MATCH_MP_TAC converge_PR_to_zero' >> rw [] >| (* 2 subgoals *)
7173 [ (* goal 1 (of 2) *)
7174 MATCH_MP_TAC real_random_variable_add >> art [],
7175 (* goal 2 (of 2) *)
7176 MATCH_MP_TAC real_random_variable_add >> art [] ])
7177 >> Rewr'
7178 >> Know ‘((\n x. (X n x - A x) + (Y n x - B x)) --> (\x. 0)) (in_probability p)’
7179 >- (HO_MATCH_MP_TAC converge_PR_add_to_zero >> rw [] >| (* 2 subgoals *)
7180 [ (* goal 1 (of 2) *)
7181 MATCH_MP_TAC real_random_variable_sub >> art [],
7182 (* goal 2 (of 2) *)
7183 MATCH_MP_TAC real_random_variable_sub >> art [] ])
7184 >> DISCH_TAC
7185 >> Suff ‘((\n x. X n x + Y n x - (A x + B x)) --> (\x. 0)) (in_probability p) <=>
7186 ((\n x. X n x - A x + (Y n x - B x)) --> (\x. 0)) (in_probability p)’
7187 >- DISCH_THEN (art o wrap)
7188 >> MATCH_MP_TAC converge_PR_cong
7189 >> Q.EXISTS_TAC ‘0’ >> RW_TAC arith_ss []
7190 >> FULL_SIMP_TAC std_ss [real_random_variable_def]
7191 >> ‘?a. X n x = Normal a’ by METIS_TAC [extreal_cases] >> POP_ORW
7192 >> ‘?b. Y n x = Normal b’ by METIS_TAC [extreal_cases] >> POP_ORW
7193 >> ‘?c. A x = Normal c’ by METIS_TAC [extreal_cases] >> POP_ORW
7194 >> ‘?d. B x = Normal d’ by METIS_TAC [extreal_cases] >> POP_ORW
7195 >> rw [extreal_add_def, extreal_sub_def, extreal_11]
7196 >> REAL_ARITH_TAC
7197QED
7198
7199Theorem converge_PR_ainv_to_zero :
7200 !p X. (X --> (\x. 0)) (in_probability p) ==>
7201 ((\n x. -X n x) --> (\x. 0)) (in_probability p)
7202Proof
7203 rw [converge_PR, EXTREAL_LIM_SEQUENTIALLY]
7204QED
7205
7206Theorem converge_PR_ainv :
7207 !p X Y. prob_space p /\ (!n. real_random_variable (X n) p) /\
7208 real_random_variable Y p /\
7209 (X --> Y) (in_probability p) ==>
7210 ((\n x. -X n x) --> (\x. -Y x)) (in_probability p)
7211Proof
7212 rpt STRIP_TAC
7213 >> Know ‘(X --> Y) (in_probability p) <=>
7214 ((\n x. X n x - Y x) --> (\x. 0)) (in_probability p)’
7215 >- (MATCH_MP_TAC converge_PR_to_zero >> art [])
7216 >> DISCH_THEN (FULL_SIMP_TAC std_ss o wrap)
7217 >> Know ‘((\n x. -X n x) --> (\x. -Y x)) (in_probability p) <=>
7218 ((\n x. (\n x. -X n x) n x - (\x. -Y x) x) --> (\x. 0)) (in_probability p)’
7219 >- (MATCH_MP_TAC converge_PR_to_zero >> rw [] >| (* 2 subgoals *)
7220 [ MATCH_MP_TAC real_random_variable_ainv >> art [],
7221 MATCH_MP_TAC real_random_variable_ainv >> art [] ])
7222 >> Rewr'
7223 >> BETA_TAC
7224 >> Know ‘((\n x. -X n x - -Y x) --> (\x. 0)) (in_probability p) <=>
7225 ((\n x. -(X n x - Y x)) --> (\x. 0)) (in_probability p)’
7226 >- (MATCH_MP_TAC converge_PR_cong \\
7227 Q.EXISTS_TAC ‘0’ >> RW_TAC arith_ss [] \\
7228 FULL_SIMP_TAC std_ss [real_random_variable_def] \\
7229 ‘?a. X n x = Normal a’ by METIS_TAC [extreal_cases] >> POP_ORW \\
7230 ‘?b. Y x = Normal b’ by METIS_TAC [extreal_cases] >> POP_ORW \\
7231 rw [extreal_ainv_def, extreal_sub_def] \\
7232 REAL_ARITH_TAC)
7233 >> Rewr'
7234 >> HO_MATCH_MP_TAC converge_PR_ainv_to_zero >> rw []
7235 >> MATCH_MP_TAC real_random_variable_sub >> art []
7236QED
7237
7238Theorem converge_PR_sub :
7239 !p X Y A B. prob_space p /\
7240 (!n. real_random_variable (X n) p) /\
7241 real_random_variable A p /\ (X --> A) (in_probability p) /\
7242 (!n. real_random_variable (Y n) p) /\
7243 real_random_variable B p /\ (Y --> B) (in_probability p) ==>
7244 ((\n x. X n x - Y n x) --> (\x. A x - B x)) (in_probability p)
7245Proof
7246 rpt STRIP_TAC
7247 >> MP_TAC (Q.SPECL [‘p’, ‘X’, ‘\n x. -Y n x’, ‘A’, ‘\x. -B x’] converge_PR_add)
7248 >> BETA_TAC >> art []
7249 >> Know ‘((\n x. X n x + -Y n x) --> (\x. A x + -B x)) (in_probability p) <=>
7250 ((\n x. X n x - Y n x) --> (\x. A x - B x)) (in_probability p)’
7251 >- (MATCH_MP_TAC converge_PR_cong_full \\
7252 FULL_SIMP_TAC std_ss [real_random_variable_def] \\
7253 Q.EXISTS_TAC ‘0’ >> RW_TAC arith_ss [] >| (* 2 subgoals *)
7254 [ (* goal 1 (of 2) *)
7255 ‘?a. X n x = Normal a’ by METIS_TAC [extreal_cases] >> POP_ORW \\
7256 ‘?b. Y n x = Normal b’ by METIS_TAC [extreal_cases] >> POP_ORW \\
7257 rw [extreal_ainv_def, extreal_add_def, extreal_sub_def] \\
7258 REAL_ARITH_TAC,
7259 (* goal 2 (of 2) *)
7260 ‘?c. A x = Normal c’ by METIS_TAC [extreal_cases] >> POP_ORW \\
7261 ‘?d. B x = Normal d’ by METIS_TAC [extreal_cases] >> POP_ORW \\
7262 rw [extreal_ainv_def, extreal_add_def, extreal_sub_def] \\
7263 REAL_ARITH_TAC ])
7264 >> Rewr'
7265 >> Know ‘!n. real_random_variable (\x. -Y n x) p’
7266 >- (GEN_TAC >> MATCH_MP_TAC real_random_variable_ainv >> art [])
7267 >> Know ‘real_random_variable (\x. -B x) p’
7268 >- (MATCH_MP_TAC real_random_variable_ainv >> art [])
7269 >> Know ‘((\n x. -Y n x) --> (\x. -B x)) (in_probability p)’
7270 >- (MATCH_MP_TAC converge_PR_ainv >> art [])
7271 >> RW_TAC std_ss []
7272QED
7273
7274Theorem converge_PR_to_limit :
7275 !p X M m. prob_space p /\ (!n. real_random_variable (X n) p) /\
7276 (M --> m) sequentially /\
7277 ((\n x. X n x - Normal (M n)) --> (\x. 0)) (in_probability p) ==>
7278 (X --> (\x. Normal m)) (in_probability p)
7279Proof
7280 rpt STRIP_TAC
7281 (* applying converge_PR_cong_full *)
7282 >> Know ‘(X --> (\x. Normal m)) (in_probability p) <=>
7283 ((\n x. X n x - Normal (M n) + Normal (M n)) --> (\x. 0 + Normal m))
7284 (in_probability p)’
7285 >- (MATCH_MP_TAC converge_PR_cong_full \\
7286 Q.EXISTS_TAC ‘0’ >> rw [sub_add_normal]) >> Rewr'
7287 >> HO_MATCH_MP_TAC converge_PR_add
7288 >> rw [real_random_variable_zero, real_random_variable_const]
7289 >- (HO_MATCH_MP_TAC real_random_variable_sub \\
7290 rw [real_random_variable_const] \\
7291 ‘(\x. X n x) = X n’ by METIS_TAC [] >> POP_ASSUM (art o wrap))
7292 >> Q.PAT_X_ASSUM ‘!n. real_random_variable (X n) p’ K_TAC
7293 >> POP_ASSUM K_TAC (* (X n x - M n) --> 0 *)
7294 (* stage work, now ‘X n’ disappeared, left only M and m *)
7295 >> POP_ASSUM MP_TAC
7296 >> rw [converge_PR, EXTREAL_LIM_SEQUENTIALLY, LIM_SEQUENTIALLY, dist]
7297 >> ‘e <> NegInf’ by PROVE_TAC [lt_imp_le, pos_not_neginf]
7298 >> rename1 ‘0 < (z :real)’
7299 >> ‘?E. e = Normal E /\ 0 < E’
7300 by METIS_TAC [extreal_cases, extreal_of_num_def, extreal_lt_eq]
7301 >> Q.PAT_X_ASSUM ‘!e. 0 < e ==> ?N. P’ (MP_TAC o Q.SPEC ‘E’)
7302 >> RW_TAC std_ss [extreal_sub_def, extreal_abs_def, extreal_lt_eq]
7303 >> Q.EXISTS_TAC ‘N’
7304 >> rpt STRIP_TAC
7305 >> Suff ‘{x | x IN p_space p /\ E < abs (M n - m)} = {}’
7306 >- rw [PROB_EMPTY, METRIC_SAME]
7307 >> rw [Once EXTENSION, GSYM real_lte, NOT_IN_EMPTY]
7308 >> DISJ2_TAC
7309 >> MATCH_MP_TAC REAL_LT_IMP_LE
7310 >> FIRST_X_ASSUM MATCH_MP_TAC >> art []
7311QED
7312
7313(* M and m are extreal-valued. This form is used by WLLN_IID directly. *)
7314Theorem converge_PR_to_limit' :
7315 !p X M m. prob_space p /\ (!n. real_random_variable (X n) p) /\
7316 (!n. M n <> PosInf /\ M n <> NegInf) /\ m <> PosInf /\ m <> NegInf /\
7317 ((real o M) --> real m) sequentially /\
7318 ((\n x. X n x - M n) --> (\x. 0)) (in_probability p) ==>
7319 (X --> (\x. m)) (in_probability p)
7320Proof
7321 rpt STRIP_TAC
7322 >> ‘?r. m = Normal r’ by METIS_TAC [extreal_cases] >> fs []
7323 >> MATCH_MP_TAC converge_PR_to_limit
7324 >> Q.EXISTS_TAC ‘real o M’ >> art []
7325 >> Suff ‘((\n x. X n x - Normal ((real o M) n)) --> (\x. 0)) (in_probability p) <=>
7326 ((\n x. X n x - M n) --> (\x. 0)) (in_probability p)’ >- rw []
7327 >> MATCH_MP_TAC converge_PR_cong
7328 >> Q.EXISTS_TAC ‘0’ >> rw [normal_real]
7329QED
7330
7331Theorem converge_AE_add_to_zero :
7332 !p X Y. prob_space p /\
7333 (!n. real_random_variable (X n) p) /\
7334 (!n. real_random_variable (Y n) p) /\
7335 (X --> (\x. 0)) (almost_everywhere p) /\
7336 (Y --> (\x. 0)) (almost_everywhere p) ==>
7337 ((\n x. X n x + Y n x) --> (\x. 0)) (almost_everywhere p)
7338Proof
7339 rpt STRIP_TAC
7340 >> NTAC 2 (POP_ASSUM MP_TAC)
7341 >> ‘real_random_variable (\x. 0) p’ by PROVE_TAC [real_random_variable_zero]
7342 >> Know ‘!n. real_random_variable (\x. X n x + Y n x) p’
7343 >- (Q.X_GEN_TAC ‘n’ \\
7344 MP_TAC (Q.SPECL [‘p’, ‘X (n :num)’, ‘Y (n :num)’] real_random_variable_add) \\
7345 rw [])
7346 >> DISCH_TAC
7347 >> rw [converge_AE_def, AE_DEF, LIM_SEQUENTIALLY, dist, p_space_def]
7348 >> Q.EXISTS_TAC ‘N UNION N'’
7349 >> STRONG_CONJ_TAC
7350 >- (MATCH_MP_TAC (REWRITE_RULE [IN_APP] NULL_SET_UNION) \\
7351 FULL_SIMP_TAC std_ss [prob_space_def])
7352 >> rw []
7353 >> Q.PAT_X_ASSUM ‘!x. x IN m_space p /\ x NOTIN N ==> P’ (MP_TAC o (Q.SPEC ‘x’))
7354 >> RW_TAC std_ss []
7355 >> Q.PAT_X_ASSUM ‘!x. x IN m_space p /\ x NOTIN N' ==> P’ (MP_TAC o (Q.SPEC ‘x’))
7356 >> RW_TAC std_ss []
7357 >> ‘0 < e / 2’ by rw [REAL_LT_DIV]
7358 >> Q.PAT_X_ASSUM ‘!e. 0 < e ==> P’ (MP_TAC o (Q.SPEC ‘e / 2’))
7359 >> RW_TAC std_ss []
7360 >> rename1 ‘!n. N1 <= n ==> abs (real (Y n x)) < e / 2’
7361 >> Q.PAT_X_ASSUM ‘!e. 0 < e ==> P’ (MP_TAC o (Q.SPEC ‘e / 2’))
7362 >> RW_TAC std_ss []
7363 >> rename1 ‘!n. N2 <= n ==> abs (real (X n x)) < e / 2’
7364 >> Q.EXISTS_TAC ‘MAX N1 N2’
7365 >> rw [MAX_LE]
7366 >> Q.PAT_X_ASSUM ‘!n. N1 <= n ==> P’ (MP_TAC o (Q.SPEC ‘n’))
7367 >> RW_TAC std_ss []
7368 >> Q.PAT_X_ASSUM ‘!n. N2 <= n ==> P’ (MP_TAC o (Q.SPEC ‘n’))
7369 >> RW_TAC std_ss []
7370 >> FULL_SIMP_TAC std_ss [real_random_variable_def, p_space_def]
7371 >> ‘?a. X n x = Normal a’ by METIS_TAC [extreal_cases]
7372 >> POP_ASSUM (FULL_SIMP_TAC std_ss o wrap)
7373 >> ‘?b. Y n x = Normal b’ by METIS_TAC [extreal_cases]
7374 >> POP_ASSUM (FULL_SIMP_TAC std_ss o wrap)
7375 >> FULL_SIMP_TAC std_ss [extreal_add_def, real_normal]
7376 >> MATCH_MP_TAC REAL_LET_TRANS
7377 >> Q.EXISTS_TAC ‘abs a + abs b’
7378 >> REWRITE_TAC [ABS_TRIANGLE]
7379 >> GEN_REWRITE_TAC (RAND_CONV o ONCE_DEPTH_CONV) empty_rewrites [GSYM REAL_HALF_DOUBLE]
7380 >> MATCH_MP_TAC REAL_LT_ADD2 >> art []
7381QED
7382
7383Theorem converge_AE_add :
7384 !p X Y A B. prob_space p /\
7385 (!n. real_random_variable (X n) p) /\
7386 real_random_variable A p /\ (X --> A) (almost_everywhere p) /\
7387 (!n. real_random_variable (Y n) p) /\
7388 real_random_variable B p /\ (Y --> B) (almost_everywhere p) ==>
7389 ((\n x. X n x + Y n x) --> (\x. A x + B x)) (almost_everywhere p)
7390Proof
7391 rpt STRIP_TAC
7392 >> Know ‘(X --> A) (almost_everywhere p) <=>
7393 ((\n x. X n x - A x) --> (\x. 0)) (almost_everywhere p)’
7394 >- (MATCH_MP_TAC converge_AE_to_zero >> art [])
7395 >> DISCH_THEN (FULL_SIMP_TAC std_ss o wrap)
7396 >> Know ‘(Y --> B) (almost_everywhere p) <=>
7397 ((\n x. Y n x - B x) --> (\x. 0)) (almost_everywhere p)’
7398 >- (MATCH_MP_TAC converge_AE_to_zero >> art [])
7399 >> DISCH_THEN (FULL_SIMP_TAC std_ss o wrap)
7400 >> Know ‘((\n x. X n x + Y n x) --> (\x. A x + B x)) (almost_everywhere p) <=>
7401 ((\n x. X n x + Y n x - (A x + B x)) --> (\x. 0)) (almost_everywhere p)’
7402 >- (MATCH_MP_TAC converge_AE_to_zero' >> rw [] >| (* 2 subgoals *)
7403 [ (* goal 1 (of 2) *)
7404 MATCH_MP_TAC real_random_variable_add >> art [],
7405 (* goal 2 (of 2) *)
7406 MATCH_MP_TAC real_random_variable_add >> art [] ])
7407 >> Rewr'
7408 >> Know ‘((\n x. (X n x - A x) + (Y n x - B x)) --> (\x. 0)) (almost_everywhere p)’
7409 >- (HO_MATCH_MP_TAC converge_AE_add_to_zero >> rw [] >| (* 2 subgoals *)
7410 [ (* goal 1 (of 2) *)
7411 MATCH_MP_TAC real_random_variable_sub >> art [],
7412 (* goal 2 (of 2) *)
7413 MATCH_MP_TAC real_random_variable_sub >> art [] ])
7414 >> DISCH_TAC
7415 >> Suff ‘((\n x. X n x + Y n x - (A x + B x)) --> (\x. 0)) (almost_everywhere p) <=>
7416 ((\n x. X n x - A x + (Y n x - B x)) --> (\x. 0)) (almost_everywhere p)’
7417 >- DISCH_THEN (art o wrap)
7418 >> MATCH_MP_TAC converge_AE_cong
7419 >> Q.EXISTS_TAC ‘0’ >> RW_TAC arith_ss []
7420 >> FULL_SIMP_TAC std_ss [real_random_variable_def]
7421 >> ‘?a. X n x = Normal a’ by METIS_TAC [extreal_cases] >> POP_ORW
7422 >> ‘?b. Y n x = Normal b’ by METIS_TAC [extreal_cases] >> POP_ORW
7423 >> ‘?c. A x = Normal c’ by METIS_TAC [extreal_cases] >> POP_ORW
7424 >> ‘?d. B x = Normal d’ by METIS_TAC [extreal_cases] >> POP_ORW
7425 >> rw [extreal_add_def, extreal_sub_def, extreal_11]
7426 >> REAL_ARITH_TAC
7427QED
7428
7429Theorem converge_AE_ainv_to_zero :
7430 !p X. (!n. real_random_variable (X n) p) /\
7431 (X --> (\x. 0)) (almost_everywhere p) ==>
7432 ((\n x. -X n x) --> (\x. 0)) (almost_everywhere p)
7433Proof
7434 rw [converge_AE, AE_DEF, EXTREAL_LIM_SEQUENTIALLY,
7435 real_random_variable_def, p_space_def]
7436 >> Q.EXISTS_TAC ‘N’ >> rw []
7437 >> Q.PAT_X_ASSUM ‘!x. x IN m_space p /\ x NOTIN N ==> P’ (MP_TAC o (Q.SPEC ‘x’))
7438 >> RW_TAC std_ss []
7439 >> Q.PAT_X_ASSUM ‘!e. 0 < e ==> P’ (MP_TAC o (Q.SPEC ‘e’))
7440 >> RW_TAC std_ss []
7441 >> rename1 ‘!n. M <= n ==> dist extreal_mr1 (X n x,0) < e’
7442 >> Q.EXISTS_TAC ‘M’ >> rw []
7443 >> Q.PAT_X_ASSUM ‘!n. M <= n ==> P’ (MP_TAC o (Q.SPEC ‘n’))
7444 >> RW_TAC std_ss []
7445 >> POP_ASSUM MP_TAC (* dist extreal_mr1 (X n x,0) < e *)
7446 >> ‘?r. X n x = Normal r’ by METIS_TAC [extreal_cases]
7447 >> POP_ORW
7448 >> ‘0 = Normal 0’ by rw [extreal_of_num_def]
7449 >> POP_ORW
7450 >> rw [extreal_ainv_def, extreal_mr1_normal]
7451QED
7452
7453Theorem converge_AE_ainv :
7454 !p X Y. prob_space p /\ (!n. real_random_variable (X n) p) /\
7455 real_random_variable Y p /\
7456 (X --> Y) (almost_everywhere p) ==>
7457 ((\n x. -X n x) --> (\x. -Y x)) (almost_everywhere p)
7458Proof
7459 rpt STRIP_TAC
7460 >> Know ‘(X --> Y) (almost_everywhere p) <=>
7461 ((\n x. X n x - Y x) --> (\x. 0)) (almost_everywhere p)’
7462 >- (MATCH_MP_TAC converge_AE_to_zero >> art [])
7463 >> DISCH_THEN (FULL_SIMP_TAC std_ss o wrap)
7464 >> Know ‘((\n x. -X n x) --> (\x. -Y x)) (almost_everywhere p) <=>
7465 ((\n x. (\n x. -X n x) n x - (\x. -Y x) x) --> (\x. 0)) (almost_everywhere p)’
7466 >- (MATCH_MP_TAC converge_AE_to_zero >> rw [] >| (* 2 subgoals *)
7467 [ MATCH_MP_TAC real_random_variable_ainv >> art [],
7468 MATCH_MP_TAC real_random_variable_ainv >> art [] ])
7469 >> Rewr'
7470 >> BETA_TAC
7471 >> Know ‘((\n x. -X n x - -Y x) --> (\x. 0)) (almost_everywhere p) <=>
7472 ((\n x. -(X n x - Y x)) --> (\x. 0)) (almost_everywhere p)’
7473 >- (MATCH_MP_TAC converge_AE_cong \\
7474 Q.EXISTS_TAC ‘0’ >> RW_TAC arith_ss [] \\
7475 FULL_SIMP_TAC std_ss [real_random_variable_def] \\
7476 ‘?a. X n x = Normal a’ by METIS_TAC [extreal_cases] >> POP_ORW \\
7477 ‘?b. Y x = Normal b’ by METIS_TAC [extreal_cases] >> POP_ORW \\
7478 rw [extreal_ainv_def, extreal_sub_def] \\
7479 REAL_ARITH_TAC)
7480 >> Rewr'
7481 >> HO_MATCH_MP_TAC converge_AE_ainv_to_zero >> rw []
7482 >> MATCH_MP_TAC real_random_variable_sub >> art []
7483QED
7484
7485Theorem converge_AE_sub :
7486 !p X Y A B. prob_space p /\
7487 (!n. real_random_variable (X n) p) /\
7488 real_random_variable A p /\ (X --> A) (almost_everywhere p) /\
7489 (!n. real_random_variable (Y n) p) /\
7490 real_random_variable B p /\ (Y --> B) (almost_everywhere p) ==>
7491 ((\n x. X n x - Y n x) --> (\x. A x - B x)) (almost_everywhere p)
7492Proof
7493 rpt STRIP_TAC
7494 >> MP_TAC (Q.SPECL [‘p’, ‘X’, ‘\n x. -Y n x’, ‘A’, ‘\x. -B x’] converge_AE_add)
7495 >> BETA_TAC >> art []
7496 >> Know ‘((\n x. X n x + -Y n x) --> (\x. A x + -B x)) (almost_everywhere p) <=>
7497 ((\n x. X n x - Y n x) --> (\x. A x - B x)) (almost_everywhere p)’
7498 >- (MATCH_MP_TAC converge_AE_cong_full \\
7499 FULL_SIMP_TAC std_ss [real_random_variable_def] \\
7500 Q.EXISTS_TAC ‘0’ >> RW_TAC arith_ss [] >| (* 2 subgoals *)
7501 [ (* goal 1 (of 2) *)
7502 ‘?a. X n x = Normal a’ by METIS_TAC [extreal_cases] >> POP_ORW \\
7503 ‘?b. Y n x = Normal b’ by METIS_TAC [extreal_cases] >> POP_ORW \\
7504 rw [extreal_ainv_def, extreal_add_def, extreal_sub_def] \\
7505 REAL_ARITH_TAC,
7506 (* goal 2 (of 2) *)
7507 ‘?c. A x = Normal c’ by METIS_TAC [extreal_cases] >> POP_ORW \\
7508 ‘?d. B x = Normal d’ by METIS_TAC [extreal_cases] >> POP_ORW \\
7509 rw [extreal_ainv_def, extreal_add_def, extreal_sub_def] \\
7510 REAL_ARITH_TAC ])
7511 >> Rewr'
7512 >> Know ‘!n. real_random_variable (\x. -Y n x) p’
7513 >- (GEN_TAC >> MATCH_MP_TAC real_random_variable_ainv >> art [])
7514 >> Know ‘real_random_variable (\x. -B x) p’
7515 >- (MATCH_MP_TAC real_random_variable_ainv >> art [])
7516 >> Know ‘((\n x. -Y n x) --> (\x. -B x)) (almost_everywhere p)’
7517 >- (MATCH_MP_TAC converge_AE_ainv >> art [])
7518 >> RW_TAC std_ss []
7519QED
7520
7521Theorem converge_AE_to_limit :
7522 !p X M m. prob_space p /\ (!n. real_random_variable (X n) p) /\
7523 (M --> m) sequentially /\
7524 ((\n x. X n x - Normal (M n)) --> (\x. 0)) (almost_everywhere p) ==>
7525 (X --> (\x. Normal m)) (almost_everywhere p)
7526Proof
7527 rpt STRIP_TAC
7528 (* applying converge_PR_cong_full *)
7529 >> Know ‘(X --> (\x. Normal m)) (almost_everywhere p) <=>
7530 ((\n x. X n x - Normal (M n) + Normal (M n)) --> (\x. 0 + Normal m))
7531 (almost_everywhere p)’
7532 >- (MATCH_MP_TAC converge_AE_cong_full \\
7533 Q.EXISTS_TAC ‘0’ >> rw [sub_add_normal]) >> Rewr'
7534 >> HO_MATCH_MP_TAC converge_AE_add
7535 >> rw [real_random_variable_zero, real_random_variable_const]
7536 >- (HO_MATCH_MP_TAC real_random_variable_sub \\
7537 rw [real_random_variable_const] \\
7538 ‘(\x. X n x) = X n’ by METIS_TAC [] >> POP_ASSUM (art o wrap))
7539 >> Q.PAT_X_ASSUM ‘!n. real_random_variable (X n) p’ K_TAC
7540 >> POP_ASSUM K_TAC (* (X n x - M n) --> 0 *)
7541 (* stage work, now ‘X n’ disappeared, left only M and m *)
7542 >> POP_ASSUM MP_TAC
7543 >> qabbrev_tac ‘X = \n x. Normal (M n)’
7544 >> qabbrev_tac ‘Y = \x. Normal m’
7545 >> Know ‘(!n. real_random_variable (X n) p) /\ real_random_variable Y p’
7546 >- (rw [real_random_variable, Abbr ‘X’, Abbr ‘Y’] \\
7547 MATCH_MP_TAC IN_MEASURABLE_BOREL_CONST' \\
7548 fs [prob_space_def, measure_space_def, p_space_def, events_def])
7549 >> STRIP_TAC
7550 >> rw [converge_AE_def, AE_DEF, null_set_def, LIM_SEQUENTIALLY, dist]
7551 >> Q.EXISTS_TAC ‘{}’
7552 >> FULL_SIMP_TAC std_ss [prob_space_def]
7553 >> ASM_SIMP_TAC std_ss [MEASURE_SPACE_EMPTY_MEASURABLE, MEASURE_EMPTY]
7554 >> rw [Abbr ‘X’, Abbr ‘Y’]
7555QED
7556
7557(* M and m are extreal-valued. This form is used by WLLN_IID directly. *)
7558Theorem converge_AE_to_limit' :
7559 !p X M m. prob_space p /\ (!n. real_random_variable (X n) p) /\
7560 (!n. M n <> PosInf /\ M n <> NegInf) /\ m <> PosInf /\ m <> NegInf /\
7561 ((real o M) --> real m) sequentially /\
7562 ((\n x. X n x - M n) --> (\x. 0)) (almost_everywhere p) ==>
7563 (X --> (\x. m)) (almost_everywhere p)
7564Proof
7565 rpt STRIP_TAC
7566 >> ‘?r. m = Normal r’ by METIS_TAC [extreal_cases] >> fs []
7567 >> MATCH_MP_TAC converge_AE_to_limit
7568 >> Q.EXISTS_TAC ‘real o M’ >> art []
7569 >> Suff ‘((\n x. X n x - Normal ((real o M) n)) --> (\x. 0)) (almost_everywhere p) <=>
7570 ((\n x. X n x - M n) --> (\x. 0)) (almost_everywhere p)’ >- rw []
7571 >> MATCH_MP_TAC converge_AE_cong
7572 >> Q.EXISTS_TAC ‘0’ >> rw [normal_real]
7573QED
7574
7575(* ========================================================================= *)
7576(* Advanced estimations of expectations *)
7577(* ========================================================================= *)
7578
7579Theorem PROB_ZERO_AE :
7580 !p E. prob_space p /\ E IN events p /\ (prob p E = 0) ==> AE x::p. x NOTIN E
7581Proof
7582 RW_TAC std_ss [AE_DEF, null_set_def]
7583 >> Q.EXISTS_TAC `E`
7584 >> fs [prob_space_def, events_def, prob_def]
7585QED
7586
7587Theorem PROB_ZERO_AE_EQ :
7588 !p E. prob_space p /\ E IN events p ==> (prob p E = 0 <=> AE x::p. x NOTIN E)
7589Proof
7590 rpt STRIP_TAC
7591 >> EQ_TAC >- (DISCH_TAC >> MATCH_MP_TAC PROB_ZERO_AE >> art [])
7592 >> RW_TAC std_ss [AE_DEF, null_set_def]
7593 >> fs [prob_space_def, events_def, prob_def]
7594 >> Know ‘E SUBSET N’
7595 >- (rw [SUBSET_DEF] \\
7596 ‘x IN m_space p’ by PROVE_TAC [MEASURE_SPACE_IN_MSPACE] \\
7597 METIS_TAC [])
7598 >> DISCH_TAC
7599 >> reverse (rw [GSYM le_antisym])
7600 >- (‘positive p’ by PROVE_TAC [MEASURE_SPACE_POSITIVE] \\
7601 fs [positive_def])
7602 >> Q.PAT_X_ASSUM ‘measure p N = 0’ (ONCE_REWRITE_TAC o wrap o (MATCH_MP EQ_SYM))
7603 >> MATCH_MP_TAC INCREASING >> art []
7604 >> MATCH_MP_TAC MEASURE_SPACE_INCREASING >> art []
7605QED
7606
7607Theorem PROB_ONE_AE :
7608 !p E. prob_space p /\ E IN events p /\ (prob p E = 1) ==> AE x::p. x IN E
7609Proof
7610 RW_TAC std_ss [AE_DEF, null_set_def]
7611 >> Q.EXISTS_TAC `m_space p DIFF E`
7612 >> `E SUBSET p_space p` by PROVE_TAC [PROB_SPACE_SUBSET_PSPACE]
7613 >> `p_space p DIFF (p_space p DIFF E) = E` by ASM_SET_TAC []
7614 >> Know `prob p (p_space p DIFF E) = 1 - prob p E`
7615 >- (MATCH_MP_TAC PROB_COMPL >> art [])
7616 >> DISCH_TAC
7617 >> FULL_SIMP_TAC std_ss [prob_space_def, events_def, prob_def, p_space_def,
7618 sub_refl, extreal_not_infty, extreal_of_num_def]
7619 >> MATCH_MP_TAC MEASURE_SPACE_COMPL >> art []
7620QED
7621
7622Theorem PROB_ONE_AE_EQ :
7623 !p E. prob_space p /\ E IN events p ==> (prob p E = 1 <=> AE x::p. x IN E)
7624Proof
7625 rpt STRIP_TAC
7626 >> EQ_TAC >- (DISCH_TAC >> MATCH_MP_TAC PROB_ONE_AE >> art [])
7627 >> RW_TAC std_ss [AE_DEF, null_set_def]
7628 >> fs [prob_space_def, events_def, prob_def]
7629 >> Q.ABBREV_TAC ‘E' = m_space p DIFF E’
7630 >> ‘E' IN measurable_sets p’ by METIS_TAC [MEASURE_SPACE_COMPL]
7631 >> Know ‘E = m_space p DIFF E'’
7632 >- (rw [Once EXTENSION, Abbr ‘E'’] \\
7633 EQ_TAC >> rw [] \\
7634 PROVE_TAC [MEASURE_SPACE_IN_MSPACE])
7635 >> Rewr'
7636 >> Know ‘measure p (m_space p DIFF E') = measure p (m_space p) - measure p E'’
7637 >- (MATCH_MP_TAC MEASURE_COMPL >> rw [Abbr ‘E'’] \\
7638 MATCH_MP_TAC let_trans \\
7639 Q.EXISTS_TAC ‘measure p (m_space p)’ \\
7640 reverse CONJ_TAC >- rw [lt_infty, extreal_of_num_def] \\
7641 MATCH_MP_TAC INCREASING >> rw []
7642 >- (MATCH_MP_TAC MEASURE_SPACE_INCREASING >> art []) \\
7643 MATCH_MP_TAC MEASURE_SPACE_SPACE >> art [])
7644 >> Rewr'
7645 >> Suff ‘measure p E' = 0’ >- rw []
7646 >> reverse (rw [GSYM le_antisym])
7647 >- (‘positive p’ by PROVE_TAC [MEASURE_SPACE_POSITIVE] \\
7648 fs [positive_def])
7649 >> Q.PAT_X_ASSUM ‘measure p N = 0’ (ONCE_REWRITE_TAC o wrap o (MATCH_MP EQ_SYM))
7650 >> Know ‘E' SUBSET N’
7651 >- (rw [SUBSET_DEF, Abbr ‘E'’] >> METIS_TAC [])
7652 >> DISCH_TAC
7653 >> MATCH_MP_TAC INCREASING >> art []
7654 >> MATCH_MP_TAC MEASURE_SPACE_INCREASING >> art []
7655QED
7656
7657(* Theorem 3.2.1, Part I [2, p.45] *)
7658Theorem expectation_bounds :
7659 !p X. prob_space p /\ real_random_variable X p ==>
7660 suminf (\n. prob p {x | x IN p_space p /\ &SUC n <= abs (X x)}) <=
7661 expectation p (abs o X) /\ expectation p (abs o X) <= 1 +
7662 suminf (\n. prob p {x | x IN p_space p /\ &SUC n <= abs (X x)})
7663Proof
7664 rpt GEN_TAC >> STRIP_TAC
7665 >> ‘sigma_algebra (measurable_space p)’
7666 by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA, prob_space_def]
7667 >> Q.ABBREV_TAC ‘A = \n. {x | x IN p_space p /\ &n <= abs (X x) /\ abs (X x) < &SUC n}’
7668 >> Know ‘!n. A n IN events p’
7669 >- (RW_TAC std_ss [Abbr ‘A’] \\
7670 ‘{x | x IN p_space p /\ &n <= abs (X x) /\ abs (X x) < &SUC n} =
7671 ({x | &n <= abs (X x)} INTER p_space p) INTER
7672 ({x | abs (X x) < &SUC n} INTER p_space p)’ by SET_TAC [] >> POP_ORW \\
7673 MATCH_MP_TAC EVENTS_INTER >> rw [le_abs_bounds, abs_bounds_lt] >| (* 2 subgoals *)
7674 [ (* goal 1 (of 2) *)
7675 ‘{x | X x <= -&n \/ &n <= X x} INTER p_space p =
7676 ({x | X x <= -&n} INTER p_space p) UNION
7677 ({x | &n <= X x} INTER p_space p)’ by SET_TAC [] >> POP_ORW \\
7678 MATCH_MP_TAC EVENTS_UNION \\
7679 FULL_SIMP_TAC std_ss [prob_space_def, p_space_def, events_def,
7680 real_random_variable] \\
7681 METIS_TAC [IN_MEASURABLE_BOREL_ALL_MEASURE],
7682 (* goal 2 (of 2) *)
7683 ‘{x | -&SUC n < X x /\ X x < &SUC n} INTER p_space p =
7684 ({x | -&SUC n < X x} INTER p_space p) INTER
7685 ({x | X x < &SUC n} INTER p_space p)’ by SET_TAC [] >> POP_ORW \\
7686 MATCH_MP_TAC EVENTS_INTER \\
7687 FULL_SIMP_TAC std_ss [prob_space_def, p_space_def, events_def,
7688 real_random_variable] \\
7689 METIS_TAC [IN_MEASURABLE_BOREL_ALL_MEASURE] ]) >> DISCH_TAC
7690 >> Know ‘BIGUNION (IMAGE A UNIV) = p_space p’
7691 >- (rw [Once EXTENSION, IN_BIGUNION_IMAGE, Abbr ‘A’] \\
7692 EQ_TAC >> STRIP_TAC >> fs [real_random_variable_def] \\
7693 ‘?r. X x = Normal r’ by METIS_TAC [extreal_cases] >> POP_ORW \\
7694 REWRITE_TAC [extreal_abs_def, extreal_of_num_def, extreal_lt_eq, extreal_le_eq] \\
7695 MP_TAC (Q.SPEC ‘1’ REAL_ARCH_LEAST) >> rw []) >> DISCH_TAC
7696 >> Know ‘!m n. m <> n ==> DISJOINT (A m) (A n)’
7697 >- (rw [Abbr ‘A’, DISJOINT_ALT] \\
7698 STRONG_DISJ_TAC >> REWRITE_TAC [extreal_lt_def] \\
7699 rename1 ‘&SUC n <= abs (X y)’ \\
7700 ‘m < n \/ n < m’ by RW_TAC arith_ss [] >| (* 2 subgoals *)
7701 [ (* goal 1 (of 2) *)
7702 ‘SUC m <= n’ by RW_TAC arith_ss [] \\
7703 ‘&SUC m <= (&n) :extreal’ by rw [extreal_of_num_def, extreal_le_eq] \\
7704 ‘abs (X y) < &n’ by PROVE_TAC [lte_trans] \\
7705 METIS_TAC [let_antisym],
7706 (* goal 2 (of 2) *)
7707 ‘SUC n <= m’ by RW_TAC arith_ss [] \\
7708 ‘&SUC n <= (&m) :extreal’ by rw [extreal_of_num_def, extreal_le_eq] \\
7709 METIS_TAC [le_trans] ]) >> DISCH_TAC
7710 >> Know ‘expectation p (abs o X) =
7711 suminf (\n. pos_fn_integral p (\x. abs (X x) * indicator_fn (A n) x))’
7712 >- (REWRITE_TAC [expectation_def] \\
7713 Know ‘integral p (abs o X) = pos_fn_integral p (abs o X)’
7714 >- (MATCH_MP_TAC integral_pos_fn >> fs [prob_space_def, abs_pos]) >> Rewr' \\
7715 Know ‘pos_fn_integral p (abs o X) =
7716 pos_fn_integral p (\x. (abs o X) x * indicator_fn (p_space p) x)’
7717 >- (REWRITE_TAC [p_space_def] >> MATCH_MP_TAC pos_fn_integral_mspace \\
7718 fs [prob_space_def, abs_pos]) >> Rewr' \\
7719 SIMP_TAC std_ss [o_DEF] \\
7720 Q.PAT_X_ASSUM ‘_ = p_space p’ (ONCE_REWRITE_TAC o wrap o SYM) \\
7721 Q.ABBREV_TAC ‘f = \n x. abs (X x) * indicator_fn (A n) x’ \\
7722 fs [real_random_variable_def, p_space_def] \\
7723 Know ‘pos_fn_integral p (\x. abs (X x) * indicator_fn (BIGUNION (IMAGE A UNIV)) x) =
7724 pos_fn_integral p (\x. suminf (\n. f n x))’
7725 >- (MATCH_MP_TAC pos_fn_integral_cong >> fs [prob_space_def] \\
7726 CONJ_TAC >- (rpt STRIP_TAC \\
7727 MATCH_MP_TAC le_mul >> rw [abs_pos, INDICATOR_FN_POS]) \\
7728 CONJ_TAC >- (rpt STRIP_TAC \\
7729 MATCH_MP_TAC ext_suminf_pos >> rw [Abbr ‘f’] \\
7730 MATCH_MP_TAC le_mul >> rw [abs_pos, INDICATOR_FN_POS]) \\
7731 rw [Abbr ‘f’] \\
7732 ‘?r. X x = Normal r’ by METIS_TAC [extreal_cases] >> POP_ORW \\
7733 REWRITE_TAC [extreal_abs_def] \\
7734 Know ‘suminf (\n. Normal (abs r) * indicator_fn (A n) x) =
7735 Normal (abs r) * suminf (\n. indicator_fn (A n) x)’
7736 >- (HO_MATCH_MP_TAC ext_suminf_cmul \\
7737 rw [extreal_of_num_def, extreal_le_eq, INDICATOR_FN_POS]) >> Rewr' \\
7738 Suff ‘indicator_fn (BIGUNION (IMAGE A UNIV)) x =
7739 suminf (\n. indicator_fn (A n) x)’ >- rw [] \\
7740 MATCH_MP_TAC EQ_SYM >> MATCH_MP_TAC indicator_fn_suminf >> rw []) >> Rewr' \\
7741 ‘!n x. abs (X x) * indicator_fn (A n) x = f n x’ by METIS_TAC [] >> POP_ORW \\
7742 ‘!n. (\x. f n x) = f n’ by METIS_TAC [ETA_THM] >> POP_ORW \\
7743 MATCH_MP_TAC pos_fn_integral_suminf \\
7744 fs [prob_space_def, Abbr ‘f’] \\
7745 CONJ_TAC >- (rpt STRIP_TAC \\
7746 MATCH_MP_TAC le_mul >> rw [abs_pos, INDICATOR_FN_POS]) \\
7747 Q.X_GEN_TAC ‘n’ \\
7748 HO_MATCH_MP_TAC IN_MEASURABLE_BOREL_MUL_INDICATOR \\
7749 CONJ_TAC >- FULL_SIMP_TAC std_ss [measure_space_def] \\
7750 CONJ_TAC >- (MATCH_MP_TAC IN_MEASURABLE_BOREL_ABS \\
7751 Q.EXISTS_TAC ‘X’ \\
7752 fs [random_variable_def, p_space_def, events_def, measure_space_def]) \\
7753 FULL_SIMP_TAC std_ss [subsets_def, events_def]) >> DISCH_TAC
7754 >> Know ‘suminf (\n. &n * prob p (A n)) <= expectation p (abs o X)’
7755 >- (POP_ORW \\
7756 MATCH_MP_TAC ext_suminf_mono >> rw []
7757 >- (MATCH_MP_TAC le_mul \\
7758 CONJ_TAC >- rw [extreal_of_num_def, extreal_le_eq] \\
7759 MATCH_MP_TAC PROB_POSITIVE >> art []) \\
7760 Know ‘prob p (A n) = pos_fn_integral p (indicator_fn (A n))’
7761 >- (fs [prob_space_def, prob_def, events_def, Once EQ_SYM_EQ] \\
7762 MATCH_MP_TAC pos_fn_integral_indicator >> art []) >> Rewr' \\
7763 Know ‘&n * pos_fn_integral p (indicator_fn (A n)) =
7764 pos_fn_integral p (\x. &n * indicator_fn (A n) x)’
7765 >- (fs [prob_space_def, extreal_of_num_def, events_def, Once EQ_SYM_EQ] \\
7766 MATCH_MP_TAC pos_fn_integral_cmul >> rw [INDICATOR_FN_POS]) >> Rewr' \\
7767 MATCH_MP_TAC pos_fn_integral_mono >> rw []
7768 >- (MATCH_MP_TAC le_mul >> rw [INDICATOR_FN_POS, extreal_of_num_def, extreal_le_eq]) \\
7769 reverse (Cases_on ‘x IN (A n)’)
7770 >- rw [indicator_fn_def, mul_rzero, le_refl] \\
7771 POP_ASSUM MP_TAC >> rw [Abbr ‘A’, indicator_fn_def, mul_rone]) >> DISCH_TAC
7772 >> Know ‘expectation p (abs o X) <= suminf (\n. &SUC n * prob p (A n))’
7773 >- (Q.PAT_X_ASSUM ‘expectation p (abs o X) = _’ (ONCE_REWRITE_TAC o wrap) \\
7774 MATCH_MP_TAC ext_suminf_mono >> rw []
7775 >- (MATCH_MP_TAC pos_fn_integral_pos >> fs [prob_space_def] \\
7776 rpt STRIP_TAC >> MATCH_MP_TAC le_mul \\
7777 rw [abs_pos, INDICATOR_FN_POS]) \\
7778 Know ‘prob p (A n) = pos_fn_integral p (indicator_fn (A n))’
7779 >- (fs [prob_space_def, prob_def, events_def, Once EQ_SYM_EQ] \\
7780 MATCH_MP_TAC pos_fn_integral_indicator >> art []) >> Rewr' \\
7781 Know ‘&SUC n * pos_fn_integral p (indicator_fn (A n)) =
7782 pos_fn_integral p (\x. &SUC n * indicator_fn (A n) x)’
7783 >- (fs [prob_space_def, extreal_of_num_def, events_def, Once EQ_SYM_EQ] \\
7784 MATCH_MP_TAC pos_fn_integral_cmul >> rw [INDICATOR_FN_POS]) >> Rewr' \\
7785 MATCH_MP_TAC pos_fn_integral_mono >> rw []
7786 >- (MATCH_MP_TAC le_mul >> rw [INDICATOR_FN_POS, abs_pos]) \\
7787 reverse (Cases_on ‘x IN (A n)’)
7788 >- rw [indicator_fn_def, mul_rzero, le_refl] \\
7789 POP_ASSUM MP_TAC >> rw [Abbr ‘A’, indicator_fn_def, mul_rone] \\
7790 MATCH_MP_TAC lt_imp_le >> art []) >> DISCH_TAC
7791 >> Know ‘suminf (\n. &SUC n * prob p (A n)) = 1 + suminf (\n. &n * prob p (A n))’
7792 >- (Know ‘!n. &SUC n = (1 :extreal) + &n’
7793 >- (GEN_TAC >> ‘SUC n = 1 + n’ by RW_TAC arith_ss [] \\
7794 rw [extreal_of_num_def, extreal_add_def, extreal_11]) >> Rewr' \\
7795 Know ‘!n. (1 + &n) * prob p (A n) = 1 * prob p (A n) + &n * prob p (A n)’
7796 >- (GEN_TAC >> ONCE_REWRITE_TAC [mul_comm] \\
7797 MATCH_MP_TAC add_ldistrib_pos >> REWRITE_TAC [le_01] \\
7798 rw [extreal_of_num_def, extreal_le_eq]) >> Rewr' \\
7799 REWRITE_TAC [mul_lone] \\
7800 Know ‘suminf (\n. prob p (A n) + &n * prob p (A n)) =
7801 suminf (\n. prob p (A n)) + suminf (\n. &n * prob p (A n))’
7802 >- (HO_MATCH_MP_TAC ext_suminf_add \\
7803 GEN_TAC >> STRONG_CONJ_TAC >- (MATCH_MP_TAC PROB_POSITIVE >> art []) \\
7804 DISCH_TAC >> MATCH_MP_TAC le_mul >> art [] \\
7805 rw [extreal_of_num_def, extreal_le_eq]) >> Rewr' \\
7806 Know ‘suminf (prob p o A) = prob p (BIGUNION (IMAGE A UNIV))’
7807 >- (MATCH_MP_TAC EQ_SYM \\
7808 MATCH_MP_TAC PROB_COUNTABLY_ADDITIVE >> rw [IN_FUNSET, IN_UNIV]) \\
7809 REWRITE_TAC [o_DEF] >> Rewr' \\
7810 Q.PAT_X_ASSUM ‘BIGUNION (IMAGE A UNIV) = p_space p’ (ONCE_REWRITE_TAC o wrap) \\
7811 simp [PROB_UNIV])
7812 >> Q.PAT_X_ASSUM ‘expectation p (abs o X) = _’ K_TAC
7813 >> DISCH_THEN (FULL_SIMP_TAC std_ss o wrap)
7814 >> Suff ‘suminf (\n. prob p {x | x IN p_space p /\ &SUC n <= abs (X x)}) =
7815 suminf (\n. &n * prob p (A n))’
7816 >- (Rewr' >> art [])
7817 >> ONCE_REWRITE_TAC [EQ_SYM_EQ]
7818 (* stage work *)
7819 >> Q.ABBREV_TAC ‘B = \n. {x | x IN p_space p /\ &n <= abs (X x)}’
7820 >> Know ‘!n. B n IN events p’
7821 >- (RW_TAC std_ss [Abbr ‘B’] \\
7822 fs [prob_space_def, p_space_def, events_def, real_random_variable, le_abs_bounds] \\
7823 ‘{x | x IN m_space p /\ (X x <= -&n \/ &n <= X x)} =
7824 ({x | X x <= -&n} INTER m_space p) UNION
7825 ({x | &n <= X x} INTER m_space p)’ by SET_TAC [] >> POP_ORW \\
7826 MATCH_MP_TAC MEASURE_SPACE_UNION >> art [] \\
7827 METIS_TAC [IN_MEASURABLE_BOREL_ALL_MEASURE]) >> DISCH_TAC
7828 >> Know ‘!m n. m <= n ==> B n SUBSET B m’
7829 >- (rw [Abbr ‘B’, SUBSET_DEF] \\
7830 MATCH_MP_TAC le_trans >> Q.EXISTS_TAC ‘&n’ >> art [] \\
7831 rw [extreal_of_num_def, extreal_le_eq]) >> DISCH_TAC
7832 >> Q.ABBREV_TAC ‘f = \n. prob p (B n)’
7833 >> ‘!n. prob p {x | x IN p_space p /\ &SUC n <= abs (X x)} = f (SUC n)’ by METIS_TAC []
7834 >> POP_ORW
7835 (* new goal: suminf (\n. &n * prob p (A n)) = suminf (\n. f (SUC n)) *)
7836 >> Know ‘!n. 0 <= f n’
7837 >- (rw [Abbr ‘f’] \\
7838 MATCH_MP_TAC PROB_POSITIVE >> art []) >> DISCH_TAC
7839 >> Know ‘!n. 0 <= &n * prob p (A n)’
7840 >- (GEN_TAC >> MATCH_MP_TAC le_mul \\
7841 CONJ_TAC >- rw [extreal_of_num_def, extreal_le_eq] \\
7842 MATCH_MP_TAC PROB_POSITIVE >> art []) >> DISCH_TAC
7843 >> Know ‘!n. f n <> PosInf /\ f n <> NegInf’
7844 >- (GEN_TAC >> Q.UNABBREV_TAC ‘f’ \\
7845 METIS_TAC [PROB_FINITE]) >> DISCH_TAC
7846 (* stage work *)
7847 >> Know ‘!N. 0 < N ==> (SIGMA (\n. &n * prob p (A n)) (count N) =
7848 SIGMA (\n. f (SUC n)) (count (PRE N)) - &PRE N * f N)’
7849 >- (rpt STRIP_TAC \\
7850 Know ‘!n. prob p (A n) = f n - f (SUC n)’
7851 >- (RW_TAC std_ss [Abbr ‘f’, Abbr ‘B’] \\
7852 Know ‘A n = {x | x IN p_space p /\ &n <= abs (X x)} DIFF
7853 {x | x IN p_space p /\ &SUC n <= abs (X x)}’
7854 >- (rw [Once EXTENSION, extreal_lt_def, Abbr ‘A’] >> SET_TAC []) >> Rewr' \\
7855 MATCH_MP_TAC PROB_DIFF_SUBSET >> art [] \\
7856 fs [SUBSET_DEF, GSPECIFICATION] \\
7857 rpt STRIP_TAC \\
7858 MATCH_MP_TAC le_trans >> Q.EXISTS_TAC ‘&SUC n’ >> art [] \\
7859 rw [extreal_of_num_def, extreal_le_eq]) >> Rewr' \\
7860 Know ‘!n. &n * (f n - f (SUC n)) = &n * f n - &n * f (SUC n)’
7861 >- (GEN_TAC >> MATCH_MP_TAC sub_ldistrib \\
7862 rw [extreal_of_num_def, extreal_not_infty]) >> Rewr' \\
7863 Know ‘SIGMA (\n. (\n. &n * f n) n - (\n. &n * f (SUC n)) n) (count N) =
7864 SIGMA (\n. &n * f n) (count N) - SIGMA (\n. &n * f (SUC n)) (count N)’
7865 >- (irule EXTREAL_SUM_IMAGE_SUB >> rw [FINITE_COUNT] \\
7866 DISJ1_TAC >> NTAC 2 STRIP_TAC \\
7867 simp [extreal_of_num_def] \\
7868 Suff ‘(0 :real) <= &x’ >- METIS_TAC [mul_not_infty] >> rw []) \\
7869 BETA_TAC >> Rewr' \\
7870 Know ‘SIGMA (\n. &n * f n) (count N) = 0 + SIGMA (\n. &n * f n) (count N DELETE 0)’
7871 >- (Know ‘count N = 0 INSERT (count N DELETE 0)’
7872 >- (rw [Once EXTENSION, IN_COUNT]) \\
7873 DISCH_THEN (GEN_REWRITE_TAC (RATOR_CONV o ONCE_DEPTH_CONV) empty_rewrites o wrap) \\
7874 Know ‘SIGMA (\n. &n * f n) (0 INSERT (count N DELETE 0)) =
7875 (\n. &n * f n) 0 + SIGMA (\n. &n * f n) ((count N DELETE 0) DELETE 0)’
7876 >- (irule EXTREAL_SUM_IMAGE_PROPERTY >> rw [FINITE_COUNT] \\
7877 DISJ1_TAC >> GEN_TAC >> DISCH_TAC \\
7878 simp [extreal_of_num_def] \\
7879 Suff ‘(0 :real) <= &x’ >- METIS_TAC [mul_not_infty] >> rw []) \\
7880 ‘count N DELETE 0 DELETE 0 = count N DELETE 0’ by SET_TAC [] >> POP_ORW \\
7881 Rewr' >> rw [mul_lzero]) >> Rewr' \\
7882 Know ‘count N DELETE 0 = IMAGE SUC (count (PRE N))’
7883 >- (rw [Once EXTENSION, IN_IMAGE, IN_COUNT] \\
7884 EQ_TAC >> rpt STRIP_TAC >| (* 3 subgoals *)
7885 [ (* goal 1 (of 3) *)
7886 Q.EXISTS_TAC ‘PRE x’ >> rw [] \\
7887 ‘0 < x’ by RW_TAC arith_ss [] \\
7888 METIS_TAC [INV_PRE_LESS],
7889 (* goal 2 (of 3) *)
7890 ‘0 < x’ by RW_TAC arith_ss [] \\
7891 simp [GSYM INV_PRE_LESS],
7892 (* goal 3 (of 3) *)
7893 fs [] ]) >> Rewr' \\
7894 Know ‘SIGMA (\n. &n * f n) (IMAGE SUC (count (PRE N))) =
7895 SIGMA ((\n. &n * f n) o SUC) (count (PRE N))’
7896 >- (irule EXTREAL_SUM_IMAGE_IMAGE >> RW_TAC std_ss [FINITE_COUNT] >| (* 2 subgoals *)
7897 [ (* goal 1 (of 2) *)
7898 DISJ1_TAC >> GEN_TAC >> DISCH_TAC \\
7899 simp [extreal_of_num_def] \\
7900 Suff ‘(0 :real) <= &x’ >- METIS_TAC [mul_not_infty] >> rw [],
7901 (* goal 2 (of 2) *)
7902 MATCH_MP_TAC INJ_IMAGE \\
7903 Q.EXISTS_TAC ‘count N DELETE 0’ \\
7904 rw [INJ_DEF] ]) >> Rewr' \\
7905 SIMP_TAC std_ss [o_DEF] \\
7906 ‘count N = (PRE N) INSERT (count (PRE N))’ by rw [Once EXTENSION, IN_COUNT] \\
7907 POP_ASSUM (GEN_REWRITE_TAC (RATOR_CONV o ONCE_DEPTH_CONV) empty_rewrites o wrap) \\
7908 Know ‘SIGMA (\n. &n * f (SUC n)) (PRE N INSERT count (PRE N)) =
7909 (\n. &n * f (SUC n)) (PRE N) +
7910 SIGMA (\n. &n * f (SUC n)) (count (PRE N) DELETE (PRE N))’
7911 >- (irule EXTREAL_SUM_IMAGE_PROPERTY >> RW_TAC std_ss [FINITE_COUNT] \\
7912 DISJ1_TAC >> GEN_TAC >> DISCH_TAC \\
7913 simp [extreal_of_num_def] \\
7914 Suff ‘(0 :real) <= &x’ >- METIS_TAC [mul_not_infty] >> rw []) \\
7915 BETA_TAC >> Rewr' \\
7916 ‘(count (PRE N) DELETE PRE N) = count (PRE N)’
7917 by rw [Once EXTENSION, IN_COUNT] >> POP_ORW \\
7918 ‘SUC (PRE N) = N’ by METIS_TAC [SUC_PRE] >> POP_ORW \\
7919 Know ‘0 (* a *) + SIGMA (\x. &SUC x * f (SUC x)) (count (PRE N)) (* c *) -
7920 (&PRE N * f N (* b *) + SIGMA (\n. &n * f (SUC n)) (count (PRE N)) (* d *)) =
7921 0 (* a *) - &PRE N * f N (* b *) +
7922 (SIGMA (\x. &SUC x * f (SUC x)) (count (PRE N)) (* c *) -
7923 SIGMA (\n. &n * f (SUC n)) (count (PRE N)) (* d *))’
7924 >- (MATCH_MP_TAC EQ_SYM \\
7925 MATCH_MP_TAC add2_sub2 (* a - b + (c - d) = a + c - (b + d) *) \\
7926 rw [extreal_of_num_def, extreal_not_infty] >| (* 3 subgoals *)
7927 [ (* goal 1 (of 3) *)
7928 Suff ‘(0 :real) <= &PRE N’ >- METIS_TAC [mul_not_infty] >> rw [],
7929 (* goal 2 (of 3) *)
7930 MATCH_MP_TAC EXTREAL_SUM_IMAGE_NOT_NEGINF >> rw [FINITE_COUNT] \\
7931 Suff ‘(0 :real) <= &SUC x’ >- METIS_TAC [mul_not_infty] >> rw [],
7932 (* goal 3 (of 3) *)
7933 MATCH_MP_TAC EXTREAL_SUM_IMAGE_NOT_POSINF >> rw [FINITE_COUNT] \\
7934 Suff ‘(0 :real) <= &x’ >- METIS_TAC [mul_not_infty] >> rw [] ]) >> Rewr' \\
7935 REWRITE_TAC [sub_lzero] \\
7936 Know ‘SIGMA (\x. &SUC x * f (SUC x)) (count (PRE N)) -
7937 SIGMA (\n. &n * f (SUC n)) (count (PRE N)) =
7938 SIGMA (\n. (\x. &SUC x * f (SUC x)) n - (\n. &n * f (SUC n)) n) (count (PRE N))’
7939 >- (MATCH_MP_TAC EQ_SYM \\
7940 irule EXTREAL_SUM_IMAGE_SUB >> rw [FINITE_COUNT] \\
7941 DISJ1_TAC >> GEN_TAC >> DISCH_TAC \\
7942 REWRITE_TAC [extreal_of_num_def] \\
7943 CONJ_TAC >| (* 2 subgoals *)
7944 [ Suff ‘(0 :real) <= &SUC x’ >- METIS_TAC [mul_not_infty] >> rw [],
7945 Suff ‘(0 :real) <= &x’ >- METIS_TAC [mul_not_infty] >> rw [] ]) \\
7946 BETA_TAC >> Rewr' \\
7947 Know ‘!n. &SUC n * f (SUC n) - &n * f (SUC n) = f (SUC n)’
7948 >- (GEN_TAC \\
7949 Know ‘&SUC n * f (SUC n) - &n * f (SUC n) = (&SUC n - &n) * f (SUC n)’
7950 >- (MATCH_MP_TAC EQ_SYM \\
7951 MATCH_MP_TAC sub_rdistrib >> rw [extreal_of_num_def, extreal_not_infty]) >> Rewr' \\
7952 Know ‘&SUC n - &n = 1’
7953 >- (REWRITE_TAC [extreal_of_num_def, extreal_sub_def, extreal_11] \\
7954 REWRITE_TAC [real_of_num, REAL_1] >> REAL_ARITH_TAC) >> Rewr' \\
7955 REWRITE_TAC [mul_lone]) >> Rewr' \\
7956 Know ‘-(&PRE N * f N) + SIGMA (\n. f (SUC n)) (count (PRE N)) =
7957 SIGMA (\n. f (SUC n)) (count (PRE N)) + -(&PRE N * f N)’
7958 >- (MATCH_MP_TAC add_comm >> DISJ2_TAC \\
7959 reverse CONJ_TAC
7960 >- (MATCH_MP_TAC EXTREAL_SUM_IMAGE_NOT_POSINF >> rw [FINITE_COUNT]) \\
7961 Suff ‘&PRE N * f N <> NegInf’ >- METIS_TAC [extreal_ainv_def, neg_neg] \\
7962 REWRITE_TAC [extreal_of_num_def] \\
7963 Suff ‘(0 :real) <= &PRE N’ >- METIS_TAC [mul_not_infty] >> rw []) >> Rewr' \\
7964 MATCH_MP_TAC EQ_SYM \\
7965 MATCH_MP_TAC extreal_sub_add >> DISJ2_TAC \\
7966 CONJ_TAC >- (MATCH_MP_TAC EXTREAL_SUM_IMAGE_NOT_POSINF >> rw [FINITE_COUNT]) \\
7967 REWRITE_TAC [extreal_of_num_def] \\
7968 Suff ‘(0 :real) <= &PRE N’ >- METIS_TAC [mul_not_infty] >> rw [])
7969 >> DISCH_TAC
7970 >> REWRITE_TAC [GSYM le_antisym]
7971 >> CONJ_TAC (* easy part *)
7972 >- (rw [ext_suminf_def, sup_le', le_sup'] \\
7973 Cases_on ‘n = 0’ >- (rw [EXTREAL_SUM_IMAGE_EMPTY] \\
7974 POP_ASSUM MATCH_MP_TAC \\
7975 Q.EXISTS_TAC ‘0’ >> rw [EXTREAL_SUM_IMAGE_EMPTY]) \\
7976 Know ‘SIGMA (\n. &n * prob p (A n)) (count n) =
7977 SIGMA (\n. f (SUC n)) (count (PRE n)) - &PRE n * f n’
7978 >- (FIRST_X_ASSUM MATCH_MP_TAC >> RW_TAC arith_ss []) >> Rewr' \\
7979 MATCH_MP_TAC le_trans \\
7980 Q.EXISTS_TAC ‘SIGMA (\n. f (SUC n)) (count (PRE n))’ \\
7981 reverse CONJ_TAC >- (FIRST_X_ASSUM MATCH_MP_TAC \\
7982 Q.EXISTS_TAC ‘PRE n’ >> REWRITE_TAC []) \\
7983 MATCH_MP_TAC sub_le_imp \\
7984 REWRITE_TAC [extreal_of_num_def] \\
7985 CONJ_TAC >- (Suff ‘(0 :real) <= &PRE n’ >- METIS_TAC [mul_not_infty] >> rw []) \\
7986 CONJ_TAC >- (Suff ‘(0 :real) <= &PRE n’ >- METIS_TAC [mul_not_infty] >> rw []) \\
7987 MATCH_MP_TAC le_addr_imp \\
7988 MATCH_MP_TAC le_mul >> art [] \\
7989 rw [extreal_of_num_def, extreal_le_eq])
7990 (* special case *)
7991 >> Cases_on ‘expectation p (abs o X) = PosInf’
7992 >- (Know ‘suminf (\n. &n * prob p (A n)) = PosInf’
7993 >- (CCONTR_TAC \\
7994 Know ‘suminf (\n. &n * prob p (A n)) <> NegInf’
7995 >- (MATCH_MP_TAC pos_not_neginf \\
7996 MATCH_MP_TAC ext_suminf_pos >> rw []) >> DISCH_TAC \\
7997 ‘?r. suminf (\n. &n * prob p (A n)) = Normal r’ by METIS_TAC [extreal_cases] \\
7998 FULL_SIMP_TAC std_ss [le_infty, extreal_of_num_def, extreal_not_infty, extreal_add_def]) \\
7999 Rewr' >> REWRITE_TAC [le_infty])
8000 (* hard part *)
8001 >> Q.ABBREV_TAC ‘g = \n. pos_fn_integral p (\x. abs (X x) * indicator_fn (B n) x)’
8002 >> Know ‘!m n. m <= n ==> g n <= g m’
8003 >- (rw [Abbr ‘g’] \\
8004 MATCH_MP_TAC pos_fn_integral_mono >> rw []
8005 >- (MATCH_MP_TAC le_mul >> rw [abs_pos, INDICATOR_FN_POS]) \\
8006 MATCH_MP_TAC le_lmul_imp >> REWRITE_TAC [abs_pos] \\
8007 MATCH_MP_TAC INDICATOR_FN_MONO \\
8008 FIRST_X_ASSUM MATCH_MP_TAC >> art []) >> DISCH_TAC
8009 >> Know ‘!N. 0 < N ==> &PRE N * f N <= g N’
8010 >- (RW_TAC std_ss [Abbr ‘g’, Abbr ‘B’] \\
8011 MATCH_MP_TAC le_trans >> Q.EXISTS_TAC ‘&N * f N’ \\
8012 CONJ_TAC >- (ONCE_REWRITE_TAC [mul_comm] \\
8013 MATCH_MP_TAC le_lmul_imp >> rw [extreal_of_num_def, extreal_le_eq]) \\
8014 ‘f N = prob p {x | x IN p_space p /\ &N <= abs (X x)}’ by METIS_TAC [] >> POP_ORW \\
8015 Know ‘prob p {x | x IN p_space p /\ &N <= abs (X x)} =
8016 pos_fn_integral p (indicator_fn {x | x IN p_space p /\ &N <= abs (X x)})’
8017 >- (REWRITE_TAC [Once EQ_SYM_EQ, prob_def, p_space_def] \\
8018 MATCH_MP_TAC pos_fn_integral_indicator \\
8019 fs [prob_space_def, p_space_def, events_def]) >> Rewr' \\
8020 Know ‘&N * pos_fn_integral p (indicator_fn {x | x IN p_space p /\ &N <= abs (X x)}) =
8021 pos_fn_integral p (\x. &N * (indicator_fn {x | x IN p_space p /\ &N <= abs (X x)} x))’
8022 >- (REWRITE_TAC [Once EQ_SYM_EQ, extreal_of_num_def] \\
8023 MATCH_MP_TAC pos_fn_integral_cmul >> fs [INDICATOR_FN_POS, prob_space_def]) >> Rewr' \\
8024 MATCH_MP_TAC pos_fn_integral_mono >> rw []
8025 >- (MATCH_MP_TAC le_mul >> rw [INDICATOR_FN_POS] \\
8026 rw [extreal_of_num_def, extreal_le_eq]) \\
8027 reverse (Cases_on ‘x IN {x | x IN p_space p /\ &N <= abs (X x)}’)
8028 >- (ASM_SIMP_TAC std_ss [indicator_fn_def, mul_rzero, le_refl]) \\
8029 ASM_SIMP_TAC std_ss [indicator_fn_def, mul_rone] \\
8030 fs []) >> DISCH_TAC
8031 (* hard part *)
8032 >> rw [ext_suminf_def, sup_le', le_sup']
8033 >> MATCH_MP_TAC le_epsilon (* key step *)
8034 >> rpt STRIP_TAC
8035 >> Know ‘e <> NegInf’
8036 >- (MATCH_MP_TAC pos_not_neginf \\
8037 MATCH_MP_TAC lt_imp_le >> art []) >> DISCH_TAC
8038 >> Know ‘SIGMA (\n. f (SUC n)) (count n) <= y' + e <=>
8039 SIGMA (\n. f (SUC n)) (count n) - e <= y'’
8040 >- (ONCE_REWRITE_TAC [EQ_SYM_EQ] \\
8041 MATCH_MP_TAC sub_le_eq >> art []) >> Rewr'
8042 (* applying le_inf_epsilon_set *)
8043 >> Suff ‘inf (IMAGE (\n. g n) UNIV) = 0’
8044 >- (DISCH_TAC \\
8045 MP_TAC (Q.SPECL [‘IMAGE (\n. (g :num -> extreal) n) UNIV’, ‘e’]
8046 le_inf_epsilon_set) \\
8047 Know ‘?x. x IN IMAGE (\n. g n) UNIV /\ x <> PosInf’
8048 >- (Q.EXISTS_TAC ‘g 0’ (* any value is fine here *) \\
8049 CONJ_TAC >- (rw [IN_IMAGE, IN_UNIV] \\
8050 Q.EXISTS_TAC ‘0’ >> REWRITE_TAC []) \\
8051 rw [Abbr ‘g’, lt_infty] \\
8052 MATCH_MP_TAC let_trans >> Q.EXISTS_TAC ‘expectation p (abs o X)’ \\
8053 reverse CONJ_TAC >- art [GSYM lt_infty] \\
8054 Know ‘expectation p (abs o X) = pos_fn_integral p (abs o X)’
8055 >- (REWRITE_TAC [expectation_def] \\
8056 MATCH_MP_TAC integral_pos_fn >> fs [prob_space_def, abs_pos]) >> Rewr' \\
8057 MATCH_MP_TAC pos_fn_integral_mono >> rw []
8058 >- (MATCH_MP_TAC le_mul >> rw [abs_pos, INDICATOR_FN_POS]) \\
8059 Cases_on ‘x IN B 0’ \\ (* 2 subgoals, same tactics *)
8060 rw [indicator_fn_def, mul_rone, le_refl, mul_rzero, abs_pos]) \\
8061 Know ‘inf (IMAGE (\n. g n) univ(:num)) <> NegInf’
8062 >- (MATCH_MP_TAC pos_not_neginf \\
8063 rw [le_inf', IN_IMAGE, IN_UNIV, Abbr ‘g’] \\
8064 MATCH_MP_TAC pos_fn_integral_pos \\
8065 CONJ_TAC >- FULL_SIMP_TAC std_ss [prob_space_def] \\
8066 RW_TAC std_ss [] \\
8067 MATCH_MP_TAC le_mul >> rw [abs_pos, INDICATOR_FN_POS]) \\
8068 RW_TAC std_ss [IN_IMAGE, IN_UNIV, add_lzero] \\
8069 Q.PAT_X_ASSUM ‘g _ <> PosInf’ K_TAC (* useless *) \\
8070 rename1 ‘g N <= e’ \\
8071 MATCH_MP_TAC le_trans \\
8072 Q.EXISTS_TAC ‘SIGMA (\n. &n * prob p (A n)) (count (MAX (SUC n) N))’ \\
8073 reverse CONJ_TAC
8074 >- (FIRST_X_ASSUM MATCH_MP_TAC (* !z. (?n. z = _) ==> z <= y' *) \\
8075 Q.EXISTS_TAC ‘MAX (SUC n) N’ >> REWRITE_TAC []) \\
8076 ‘0 < MAX (SUC n) N’ by RW_TAC arith_ss [] \\
8077 Know ‘SIGMA (\n. &n * prob p (A n)) (count (MAX (SUC n) N)) =
8078 SIGMA (\n. f (SUC n)) (count (PRE (MAX (SUC n) N))) -
8079 &PRE (MAX (SUC n) N) * f (MAX (SUC n) N)’
8080 >- (FIRST_X_ASSUM MATCH_MP_TAC >> art []) >> Rewr' \\
8081 Know ‘SIGMA (\n. f (SUC n)) (count n) - e <=
8082 SIGMA (\n. f (SUC n)) (count (PRE (MAX (SUC n) N))) -
8083 &PRE (MAX (SUC n) N) * f (MAX (SUC n) N) <=>
8084 SIGMA (\n. f (SUC n)) (count n) <=
8085 SIGMA (\n. f (SUC n)) (count (PRE (MAX (SUC n) N))) -
8086 &PRE (MAX (SUC n) N) * f (MAX (SUC n) N) + e’
8087 >- (MATCH_MP_TAC sub_le_eq >> art []) >> Rewr' \\
8088 MATCH_MP_TAC le_trans \\
8089 Q.EXISTS_TAC ‘SIGMA (\n. f (SUC n)) (count (PRE (MAX (SUC n) N)))’ \\
8090 CONJ_TAC >- (MATCH_MP_TAC EXTREAL_SUM_IMAGE_MONO_SET >> rw [FINITE_COUNT] \\
8091 MATCH_MP_TAC COUNT_MONO \\
8092 MATCH_MP_TAC LESS_EQ_TRANS >> Q.EXISTS_TAC ‘PRE (SUC n)’ \\
8093 reverse CONJ_TAC
8094 >- (POP_ASSUM (ONCE_REWRITE_TAC o wrap o (MATCH_MP INV_PRE_LESS_EQ)) \\
8095 RW_TAC arith_ss []) \\
8096 RW_TAC arith_ss []) \\
8097 Know ‘SIGMA (\n. f (SUC n)) (count (PRE (MAX (SUC n) N))) -
8098 &PRE (MAX (SUC n) N) * f (MAX (SUC n) N) =
8099 SIGMA (\n. f (SUC n)) (count (PRE (MAX (SUC n) N))) + -
8100 (&PRE (MAX (SUC n) N) * f (MAX (SUC n) N))’
8101 >- (MATCH_MP_TAC extreal_sub_add >> DISJ2_TAC \\
8102 CONJ_TAC >- (MATCH_MP_TAC EXTREAL_SUM_IMAGE_NOT_POSINF >> rw []) \\
8103 MATCH_MP_TAC pos_not_neginf \\
8104 MATCH_MP_TAC le_mul >> art [] \\
8105 rw [extreal_of_num_def, extreal_le_eq]) >> Rewr' \\
8106 Know ‘SIGMA (\n. f (SUC n)) (count (PRE (MAX (SUC n) N))) +
8107 -(&PRE (MAX (SUC n) N) * f (MAX (SUC n) N)) + e =
8108 SIGMA (\n. f (SUC n)) (count (PRE (MAX (SUC n) N))) +
8109 (-(&PRE (MAX (SUC n) N) * f (MAX (SUC n) N)) + e)’
8110 >- (MATCH_MP_TAC EQ_SYM \\
8111 MATCH_MP_TAC add_assoc >> DISJ1_TAC >> art [] \\
8112 CONJ_TAC >- (MATCH_MP_TAC EXTREAL_SUM_IMAGE_NOT_NEGINF >> rw []) \\
8113 ‘?r. f (MAX (SUC n) N) = Normal r’ by METIS_TAC [extreal_cases] >> POP_ORW \\
8114 rw [extreal_ainv_def, extreal_mul_def, extreal_of_num_def, extreal_not_infty]) >> Rewr' \\
8115 MATCH_MP_TAC le_addr_imp \\
8116 Know ‘-(&PRE (MAX (SUC n) N) * f (MAX (SUC n) N)) + e =
8117 e + -(&PRE (MAX (SUC n) N) * f (MAX (SUC n) N))’
8118 >- (MATCH_MP_TAC add_comm >> DISJ1_TAC >> art [] \\
8119 ‘?r. f (MAX (SUC n) N) = Normal r’ by METIS_TAC [extreal_cases] >> POP_ORW \\
8120 rw [extreal_ainv_def, extreal_mul_def, extreal_of_num_def, extreal_not_infty]) >> Rewr' \\
8121 Know ‘e + -(&PRE (MAX (SUC n) N) * f (MAX (SUC n) N)) =
8122 e - &PRE (MAX (SUC n) N) * f (MAX (SUC n) N)’
8123 >- (MATCH_MP_TAC EQ_SYM \\
8124 MATCH_MP_TAC extreal_sub_add >> DISJ1_TAC >> art [] \\
8125 ‘?r. f (MAX (SUC n) N) = Normal r’ by METIS_TAC [extreal_cases] >> POP_ORW \\
8126 rw [extreal_ainv_def, extreal_mul_def, extreal_of_num_def, extreal_not_infty]) >> Rewr' \\
8127 Know ‘0 <= e - &PRE (MAX (SUC n) N) * f (MAX (SUC n) N) <=>
8128 &PRE (MAX (SUC n) N) * f (MAX (SUC n) N) <= e’
8129 >- (MATCH_MP_TAC EQ_SYM \\
8130 MATCH_MP_TAC sub_zero_le \\
8131 ‘?r. f (MAX (SUC n) N) = Normal r’ by METIS_TAC [extreal_cases] >> POP_ORW \\
8132 rw [extreal_ainv_def, extreal_mul_def, extreal_of_num_def, extreal_not_infty]) >> Rewr' \\
8133 MATCH_MP_TAC le_trans >> Q.EXISTS_TAC ‘g (MAX (SUC n) N)’ \\
8134 CONJ_TAC >- (FIRST_X_ASSUM MATCH_MP_TAC >> art []) \\
8135 MATCH_MP_TAC le_trans >> Q.EXISTS_TAC ‘g N’ >> art [] \\
8136 FIRST_X_ASSUM MATCH_MP_TAC >> RW_TAC arith_ss [])
8137 (* final stage: inf (IMAGE (\n. g n) univ(:num)) = 0 *)
8138 >> Q.PAT_X_ASSUM ‘!N. 0 < N ==> &PRE N * f N <= g N’ K_TAC
8139 >> Q.PAT_X_ASSUM ‘!z. (?n. z = _) ==> z <= y'’ K_TAC
8140 >> Q.PAT_X_ASSUM ‘!m n. m <= n ==> g n <= g m’ K_TAC
8141 >> NTAC 3 (POP_ASSUM K_TAC) (* all about ‘e’ *)
8142 >> Q.UNABBREV_TAC ‘g’ >> FULL_SIMP_TAC std_ss []
8143 >> Q.ABBREV_TAC ‘fi = \n x. abs (X x) * indicator_fn (B n) x’
8144 >> ‘!n. (\x. abs (X x) * indicator_fn (B n) x) = fi n’ by METIS_TAC [] >> POP_ORW
8145 (* applying lebesgue_monotone_convergence_decreasing *)
8146 >> Q.ABBREV_TAC ‘h = \x. inf (IMAGE (\i. fi i x) UNIV)’
8147 >> ‘!i x. 0 <= fi i x’
8148 by (rw [Abbr ‘fi’] >> MATCH_MP_TAC le_mul >> rw [abs_pos, INDICATOR_FN_POS])
8149 >> Know ‘inf (IMAGE (\n. pos_fn_integral p (fi n)) UNIV) = pos_fn_integral p h’
8150 >- (MATCH_MP_TAC EQ_SYM \\
8151 MATCH_MP_TAC lebesgue_monotone_convergence_decreasing \\
8152 fs [prob_space_def, p_space_def, events_def] \\
8153 CONJ_TAC
8154 >- (rw [Abbr ‘fi’] \\
8155 HO_MATCH_MP_TAC IN_MEASURABLE_BOREL_MUL_INDICATOR \\
8156 fs [prob_space_def, measure_space_def, real_random_variable, p_space_def, events_def] \\
8157 MATCH_MP_TAC IN_MEASURABLE_BOREL_ABS \\
8158 Q.EXISTS_TAC ‘X’ >> rw []) \\
8159 CONJ_TAC
8160 >- (rw [Abbr ‘fi’, GSYM lt_infty] \\
8161 FULL_SIMP_TAC std_ss [real_random_variable_def, p_space_def] \\
8162 ‘?r. X x = Normal r’ by METIS_TAC [extreal_cases] >> POP_ORW \\
8163 STRIP_ASSUME_TAC (Q.SPECL [‘B (i :num)’, ‘x’] indicator_fn_normal) \\
8164 rw [extreal_abs_def, extreal_mul_def, extreal_not_infty]) \\
8165 CONJ_TAC
8166 >- (rw [Abbr ‘fi’, lt_infty] \\
8167 MATCH_MP_TAC let_trans >> Q.EXISTS_TAC ‘expectation p (abs o X)’ \\
8168 reverse CONJ_TAC >- art [GSYM lt_infty] \\
8169 Know ‘expectation p (abs o X) = pos_fn_integral p (abs o X)’
8170 >- (REWRITE_TAC [expectation_def] \\
8171 MATCH_MP_TAC integral_pos_fn >> fs [prob_space_def, abs_pos]) >> Rewr' \\
8172 MATCH_MP_TAC pos_fn_integral_mono >> rw []
8173 >- (MATCH_MP_TAC le_mul >> rw [abs_pos, INDICATOR_FN_POS]) \\
8174 Cases_on ‘x IN B 0’ \\ (* 2 subgoals, same tactics *)
8175 rw [indicator_fn_def, mul_rone, le_refl, mul_rzero, abs_pos]) \\
8176 rw [ext_mono_decreasing_def, Abbr ‘fi’] \\
8177 MATCH_MP_TAC le_lmul_imp >> REWRITE_TAC [abs_pos] \\
8178 MATCH_MP_TAC INDICATOR_FN_MONO \\
8179 FIRST_X_ASSUM MATCH_MP_TAC >> art []) >> Rewr'
8180 >> Suff ‘!x. x IN p_space p ==> h x = 0’
8181 >- (DISCH_TAC \\
8182 Know ‘pos_fn_integral p (\x. 0) = 0’
8183 >- (MATCH_MP_TAC pos_fn_integral_zero >> fs [prob_space_def]) \\
8184 DISCH_THEN (ONCE_REWRITE_TAC o wrap o SYM) \\
8185 MATCH_MP_TAC pos_fn_integral_cong \\
8186 fs [prob_space_def, p_space_def, le_refl])
8187 >> rw [Abbr ‘h’, inf_eq'] >- art []
8188 >> Q.PAT_X_ASSUM ‘!i x. 0 <= fi i x’ K_TAC
8189 >> Q.UNABBREV_TAC ‘fi’ >> fs []
8190 >> POP_ASSUM MATCH_MP_TAC
8191 >> FULL_SIMP_TAC std_ss [real_random_variable_def]
8192 >> ‘?r. X x = Normal r’ by METIS_TAC [extreal_cases]
8193 >> STRIP_ASSUME_TAC (Q.SPEC ‘abs r’ SIMP_REAL_ARCH)
8194 >> Q.EXISTS_TAC ‘SUC n’
8195 >> Suff ‘indicator_fn (B (SUC n)) x = 0’ >- rw [mul_rzero]
8196 >> rw [Abbr ‘B’, indicator_fn_def, extreal_abs_def, extreal_of_num_def, extreal_le_eq]
8197 >> ‘&n < (&SUC n) :real’ by rw []
8198 >> ‘&n < abs r’ by PROVE_TAC [REAL_LTE_TRANS]
8199 >> METIS_TAC [REAL_LET_ANTISYM]
8200QED
8201
8202(* Theorem 3.2.1, Part II [2, p.45] *)
8203Theorem expectation_converge :
8204 !p X. prob_space p /\ real_random_variable X p ==>
8205 (expectation p (abs o X) < PosInf <=>
8206 suminf (\n. prob p {x | x IN p_space p /\ &SUC n <= abs (X x)}) < PosInf)
8207Proof
8208 rpt STRIP_TAC
8209 >> Know ‘suminf (\n. prob p {x | x IN p_space p /\ &SUC n <= abs (X x)}) <=
8210 expectation p (abs o X) /\ expectation p (abs o X) <= 1 +
8211 suminf (\n. prob p {x | x IN p_space p /\ &SUC n <= abs (X x)})’
8212 >- (MATCH_MP_TAC expectation_bounds >> art [])
8213 >> STRIP_TAC
8214 >> EQ_TAC >> STRIP_TAC
8215 >- (MATCH_MP_TAC let_trans \\
8216 Q.EXISTS_TAC ‘expectation p (abs o X)’ >> art [])
8217 >> MATCH_MP_TAC let_trans
8218 >> Q.EXISTS_TAC ‘1 + suminf (\n. prob p {x | x IN p_space p /\ &SUC n <= abs (X x)})’
8219 >> FULL_SIMP_TAC std_ss [GSYM lt_infty]
8220 >> ‘sigma_algebra (measurable_space p)’
8221 by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA, prob_space_def]
8222 >> Know ‘suminf (\n. prob p {x | x IN p_space p /\ &SUC n <= abs (X x)}) <> NegInf’
8223 >- (MATCH_MP_TAC pos_not_neginf \\
8224 MATCH_MP_TAC ext_suminf_pos >> rw [] \\
8225 MATCH_MP_TAC PROB_POSITIVE >> art [] \\
8226 fs [prob_space_def, p_space_def, events_def, real_random_variable, le_abs_bounds] \\
8227 ‘{x | x IN m_space p /\ (X x <= -&SUC n \/ &SUC n <= X x)} =
8228 ({x | X x <= -&SUC n} INTER m_space p) UNION
8229 ({x | &SUC n <= X x} INTER m_space p)’ by SET_TAC [] >> POP_ORW \\
8230 MATCH_MP_TAC MEASURE_SPACE_UNION >> art [] \\
8231 METIS_TAC [IN_MEASURABLE_BOREL_ALL_MEASURE])
8232 >> DISCH_TAC
8233 >> ‘?r. suminf (\n. prob p {x | x IN p_space p /\ &SUC n <= abs (X x)}) = Normal r’
8234 by METIS_TAC [extreal_cases]
8235 >> POP_ORW
8236 >> rw [extreal_of_num_def, extreal_add_def, extreal_not_infty]
8237QED
8238
8239(* Theorem 3.2.1, Part II' *)
8240Theorem expectation_converge' :
8241 !p X. prob_space p /\ real_random_variable X p ==>
8242 (expectation p (abs o X) = PosInf <=>
8243 suminf (\n. prob p {x | x IN p_space p /\ &SUC n <= abs (X x)}) = PosInf)
8244Proof
8245 METIS_TAC [expectation_converge, lt_infty]
8246QED
8247
8248(* Theorem 3.2.2 [2, p.47], probability-specific version of integral_distr *)
8249Theorem expectation_distribution :
8250 !p X f. prob_space p /\ random_variable X p Borel /\ f IN measurable Borel Borel ==>
8251 (expectation p (f o X) =
8252 integral (space Borel,subsets Borel,distribution p X) f) /\
8253 (integrable p (f o X) <=>
8254 integrable (space Borel,subsets Borel,distribution p X) f)
8255Proof
8256 rpt GEN_TAC
8257 >> simp [prob_space_def, random_variable_def, expectation_def, p_space_def, events_def,
8258 distribution_distr]
8259 >> STRIP_TAC
8260 >> MP_TAC (Q.SPECL [‘p’, ‘Borel’, ‘X’, ‘f’] (INST_TYPE [beta |-> “:extreal”] integral_distr))
8261 >> rw [SIGMA_ALGEBRA_BOREL]
8262QED
8263
8264Theorem identical_distribution_alt_prob :
8265 !p X E J i j s. identical_distribution p X E J /\
8266 s IN subsets E /\ i IN J /\ j IN J ==>
8267 (prob p {x | x IN p_space p /\ X i x IN s} =
8268 prob p {x | x IN p_space p /\ X j x IN s})
8269Proof
8270 RW_TAC std_ss [identical_distribution_def, distribution_def, PREIMAGE_def]
8271 >> ‘!i. {x | x IN p_space p /\ X i x IN s} =
8272 {x | X i x IN s} INTER p_space p’ by SET_TAC []
8273 >> POP_ORW
8274 >> FIRST_X_ASSUM MATCH_MP_TAC >> art []
8275QED
8276
8277(* alternative definition of identical distribution, see [3, p.62, Definition 5.4.1] *)
8278Theorem identical_distribution_alt :
8279 !p X (J :'index set). prob_space p /\
8280 (!n. n IN J ==> random_variable (X n) p Borel) ==>
8281 (identical_distribution p X Borel J <=>
8282 (!f. f IN measurable Borel Borel ==>
8283 ?c. !n. n IN J ==> expectation p (f o (X n)) = c))
8284Proof
8285 RW_TAC std_ss [identical_distribution_def]
8286 >> EQ_TAC >> rpt STRIP_TAC
8287 >- (Cases_on ‘J = {}’ >- (Q.EXISTS_TAC ‘ARB’ >> rw []) \\
8288 Q.ABBREV_TAC ‘j = CHOICE J’ \\
8289 ‘j IN J’ by METIS_TAC [CHOICE_DEF] \\
8290 Q.EXISTS_TAC ‘expectation p (f o X j)’ \\
8291 Q.X_GEN_TAC ‘i’ >> STRIP_TAC \\
8292 Know ‘!n. n IN J ==>
8293 expectation p (f o X n) =
8294 integral (space Borel,subsets Borel,distribution p (X n)) f’
8295 >- (METIS_TAC [expectation_distribution]) >> rw [] \\
8296 MATCH_MP_TAC integral_cong_measure' >> simp [measure_space_eq_def] \\
8297 Suff ‘!n. n IN J ==> measure_space (space Borel,subsets Borel,distribution p (X n))’
8298 >- rw [] \\
8299 Q.X_GEN_TAC ‘n’ >> STRIP_TAC \\
8300 FULL_SIMP_TAC std_ss [distribution_distr, prob_space_def, random_variable_def,
8301 p_space_def, events_def] \\
8302 MATCH_MP_TAC measure_space_distr \\
8303 rw [SIGMA_ALGEBRA_BOREL])
8304 >> Know ‘!n f. n IN J /\ f IN Borel_measurable Borel ==>
8305 expectation p (f o X n) =
8306 integral (space Borel,subsets Borel,distribution p (X n)) f’
8307 >- (rpt STRIP_TAC \\
8308 METIS_TAC [expectation_distribution])
8309 >> DISCH_TAC
8310 >> Know ‘indicator_fn s IN measurable Borel Borel’
8311 >- (MATCH_MP_TAC IN_MEASURABLE_BOREL_INDICATOR \\
8312 Q.EXISTS_TAC ‘s’ >> rw [SIGMA_ALGEBRA_BOREL])
8313 >> DISCH_TAC
8314 >> Know ‘!n. n IN J ==>
8315 expectation p ((indicator_fn s) o (X n)) =
8316 expectation p ((indicator_fn s) o (X j))’
8317 >- (rpt STRIP_TAC >> METIS_TAC [])
8318 >> simp []
8319 >> Know ‘!n. n IN J ==>
8320 integral (space Borel,subsets Borel,distribution p (X n)) (indicator_fn s) =
8321 distribution p (X n) s’
8322 >- (rpt STRIP_TAC \\
8323 MATCH_MP_TAC (REWRITE_RULE [measure_def, measurable_sets_def]
8324 (Q.SPECL [‘(space Borel,subsets Borel,
8325 distribution (p :'a m_space) (X (n :'index)))’, ‘s’]
8326 (INST_TYPE [“:'a” |-> “:extreal”] integral_indicator))) \\
8327 simp [distribution_distr] \\
8328 MATCH_MP_TAC measure_space_distr \\
8329 fs [prob_space_def, random_variable_def, p_space_def, events_def, SIGMA_ALGEBRA_BOREL])
8330 >> rw []
8331QED
8332
8333Theorem identical_distribution_alt' :
8334 !p (X :num -> 'a -> extreal).
8335 prob_space p /\ (!n. random_variable (X n) p Borel) ==>
8336 (identical_distribution p X Borel univ(:num) <=>
8337 (!f n. f IN measurable Borel Borel ==>
8338 expectation p (f o (X n)) = expectation p (f o (X 0))))
8339Proof
8340 RW_TAC std_ss [identical_distribution_alt, IN_UNIV]
8341 >> EQ_TAC >> rw []
8342 >> METIS_TAC []
8343QED
8344
8345(* Theorem 3.1.4 [2, p.37], slightly generalized *)
8346Theorem random_variable_comp :
8347 !p X A f. random_variable X p A /\ f IN measurable A A ==>
8348 random_variable (f o X) p A
8349Proof
8350 rw [random_variable_def]
8351 >> MATCH_MP_TAC MEASURABLE_COMP
8352 >> Q.EXISTS_TAC `A` >> art []
8353QED
8354
8355Theorem identical_distribution_cong :
8356 !p X f. prob_space p /\ (!n. random_variable (X n) p Borel) /\
8357 identical_distribution p X Borel univ(:num) /\
8358 f IN measurable Borel Borel ==>
8359 identical_distribution p (\n. f o X n) Borel univ(:num)
8360Proof
8361 rpt STRIP_TAC
8362 >> Know ‘identical_distribution p X Borel univ(:num) <=>
8363 (!f n. f IN measurable Borel Borel ==>
8364 expectation p (f o (X n)) = expectation p (f o (X 0)))’
8365 >- (MATCH_MP_TAC identical_distribution_alt' >> art [])
8366 >> DISCH_THEN (FULL_SIMP_TAC std_ss o wrap)
8367 >> Know ‘identical_distribution p (\n. f o X n) Borel univ(:num) <=>
8368 (!g n. g IN measurable Borel Borel ==>
8369 expectation p (g o ((\n. f o X n) n)) =
8370 expectation p (g o ((\n. f o X n) 0)))’
8371 >- (MATCH_MP_TAC identical_distribution_alt' >> rw [] \\
8372 MATCH_MP_TAC random_variable_comp >> art [])
8373 >> Rewr'
8374 >> RW_TAC std_ss []
8375 >> REWRITE_TAC [o_ASSOC]
8376 >> FIRST_X_ASSUM MATCH_MP_TAC
8377 >> MATCH_MP_TAC MEASURABLE_COMP
8378 >> Q.EXISTS_TAC ‘Borel’ >> art []
8379QED
8380
8381(* r.v.'s having identical distributions have the same integrability
8382
8383 NOTE: fixes after k14: changed ‘identical_distribution p X Borel UNIV’
8384 to ‘identical_distribution p X Borel J’
8385 *)
8386Theorem identical_distribution_integrable_general :
8387 !p X (J :'index set). prob_space p /\
8388 (!n. n IN J ==> random_variable (X n) p Borel) /\
8389 identical_distribution p X Borel J /\
8390 (?i. i IN J /\ integrable p (X i)) ==> !n. n IN J ==> integrable p (X n)
8391Proof
8392 RW_TAC std_ss [identical_distribution_def]
8393 >> ‘X n IN Borel_measurable (m_space p,measurable_sets p)’
8394 by fs [random_variable_def, p_space_def, events_def]
8395 >> Know ‘(\x. x) IN measurable Borel Borel’
8396 >- (rw [IN_MEASURABLE, SIGMA_ALGEBRA_BOREL, IN_FUNSET, PREIMAGE_def] \\
8397 MATCH_MP_TAC SIGMA_ALGEBRA_INTER >> rw [SIGMA_ALGEBRA_BOREL] \\
8398 MATCH_MP_TAC SIGMA_ALGEBRA_SPACE >> rw [SIGMA_ALGEBRA_BOREL])
8399 >> DISCH_TAC
8400 >> MP_TAC (Q.SPECL [‘p’, ‘X (i :'index)’, ‘\x. x’] expectation_distribution)
8401 >> RW_TAC std_ss [o_DEF]
8402 >> MP_TAC (Q.SPECL [‘p’, ‘X (n :'index)’, ‘\x. x’] expectation_distribution)
8403 >> RW_TAC std_ss [o_DEF]
8404 >> Suff ‘integrable (space Borel,subsets Borel,distribution p (X i)) (\x. x) <=>
8405 integrable (space Borel,subsets Borel,distribution p (X n)) (\x. x)’
8406 >- METIS_TAC []
8407 (* applying integral_cong_measure *)
8408 >> ‘prob_space (space Borel,subsets Borel,distribution p (X i)) /\
8409 prob_space (space Borel,subsets Borel,distribution p (X n))’
8410 by METIS_TAC [distribution_prob_space, SIGMA_ALGEBRA_BOREL]
8411 >> MATCH_MP_TAC integrable_cong_measure
8412 >> fs [prob_space_def]
8413QED
8414
8415Theorem identical_distribution_integrable :
8416 !p X. prob_space p /\ (!n. random_variable (X n) p Borel) /\
8417 identical_distribution p X Borel UNIV /\ integrable p (X 0) ==>
8418 !(n :num). integrable p (X n)
8419Proof
8420 rpt STRIP_TAC
8421 >> MP_TAC (Q.SPECL [‘p’, ‘X’, ‘UNIV’]
8422 (INST_TYPE [“:'index” |-> “:num”]
8423 identical_distribution_integrable_general))
8424 >> RW_TAC std_ss [IN_UNIV]
8425 >> POP_ASSUM MATCH_MP_TAC
8426 >> Q.EXISTS_TAC ‘0’ >> art []
8427QED
8428
8429(* r.v.'s having identical distributions have the same expectation
8430
8431 NOTE: fixes after k14: changed ‘identical_distribution p X Borel UNIV’
8432 to ‘identical_distribution p X Borel J’
8433
8434 also removed unnecessary ‘J <> {}’ from antecedents.
8435 *)
8436Theorem identical_distribution_expectation_general :
8437 !p X (J :'index set). prob_space p /\
8438 (!n. n IN J ==> random_variable (X n) p Borel) /\
8439 identical_distribution p X Borel J ==>
8440 ?e. !n. n IN J ==> expectation p (X n) = e
8441Proof
8442 RW_TAC std_ss [identical_distribution_def]
8443 >> Know ‘(\x. x) IN measurable Borel Borel’
8444 >- (rw [IN_MEASURABLE, SIGMA_ALGEBRA_BOREL, IN_FUNSET, PREIMAGE_def] \\
8445 MATCH_MP_TAC SIGMA_ALGEBRA_INTER >> rw [SIGMA_ALGEBRA_BOREL] \\
8446 MATCH_MP_TAC SIGMA_ALGEBRA_SPACE >> rw [SIGMA_ALGEBRA_BOREL])
8447 >> DISCH_TAC
8448 >> Cases_on ‘J = {}’ >- (Q.EXISTS_TAC ‘ARB’ >> rw [])
8449 >> Q.ABBREV_TAC ‘i = CHOICE J’
8450 >> ‘i IN J’ by METIS_TAC [CHOICE_DEF]
8451 >> MP_TAC (Q.SPECL [‘p’, ‘X (i :'index)’, ‘\x. x’] expectation_distribution)
8452 >> RW_TAC std_ss [o_DEF]
8453 >> Q.EXISTS_TAC ‘expectation p (X i)’
8454 >> rpt STRIP_TAC
8455 >> MP_TAC (Q.SPECL [‘p’, ‘X (n :'index)’, ‘\x. x’] expectation_distribution)
8456 >> RW_TAC std_ss [o_DEF]
8457 >> ‘!n. X n = (\x. X n x)’ by METIS_TAC [ETA_THM] >> POP_ORW
8458 >> Suff ‘integral (space Borel,subsets Borel,distribution p (X i)) (\x. x) =
8459 integral (space Borel,subsets Borel,distribution p (X n)) (\x. x)’
8460 >- rw []
8461 (* applying integral_cong_measure *)
8462 >> ‘prob_space (space Borel,subsets Borel,distribution p (X i)) /\
8463 prob_space (space Borel,subsets Borel,distribution p (X n))’
8464 by METIS_TAC [distribution_prob_space, SIGMA_ALGEBRA_BOREL]
8465 >> MATCH_MP_TAC integral_cong_measure
8466 >> fs [prob_space_def]
8467QED
8468
8469Theorem identical_distribution_expectation :
8470 !p X. prob_space p /\ (!n. random_variable (X n) p Borel) /\
8471 identical_distribution p X Borel UNIV ==>
8472 !(n :num). expectation p (X n) = expectation p (X 0)
8473Proof
8474 rpt STRIP_TAC
8475 >> MP_TAC (Q.SPECL [‘p’, ‘X’, ‘UNIV’]
8476 (INST_TYPE [“:'index” |-> “:num”]
8477 identical_distribution_expectation_general))
8478 >> RW_TAC std_ss [IN_UNIV] >> art []
8479QED
8480
8481(* Theorem 3.1.5 [2, p.38] *)
8482Theorem fundamental_theorem_of_random_vectors :
8483 !p X Y f. prob_space p /\
8484 random_variable X p Borel /\ random_variable Y p Borel /\
8485 f IN measurable (Borel CROSS Borel) Borel ==>
8486 random_variable (\x. f (X x,Y x)) p Borel
8487Proof
8488 RW_TAC std_ss [random_variable_def, prob_space_def, p_space_def, events_def]
8489 >> MATCH_MP_TAC IN_MEASURABLE_BOREL_2D_FUNCTION
8490 >> fs [measure_space_def]
8491QED
8492
8493Theorem indep_vars_comm : (* was: INDEP_RV_SYM *)
8494 !p X Y s t. indep_rv p X Y s t ==> indep_rv p Y X t s
8495Proof
8496 RW_TAC std_ss [indep_rv_def]
8497 >> MATCH_MP_TAC INDEP_SYM
8498 >> FIRST_X_ASSUM MATCH_MP_TAC >> art []
8499QED
8500
8501(* Theorem 3.3.1 [2, p.54], slightly generalized to arbitrary index set *)
8502Theorem indep_vars_cong :
8503 !p X B (J :'index set) f.
8504 indep_vars p (X :'index -> 'a -> 'b) B (J :'index set) /\
8505 (!n. n IN J ==> random_variable (X n) p (B n)) /\
8506 (!n. n IN J ==> f n IN measurable (B n) (B n)) ==>
8507 indep_vars p (\n. (f n) o (X n)) B (J :'index set)
8508Proof
8509 rw [indep_vars_def, indep_events_def, o_DEF]
8510 >> Q.ABBREV_TAC ‘E' = \i. PREIMAGE (f i) (E i) INTER space (B i)’
8511 >> Know ‘BIGINTER (IMAGE (\n. PREIMAGE (\x. f n (X n x)) (E n) INTER p_space p) N) =
8512 BIGINTER (IMAGE (\n. PREIMAGE (X n) (E' n) INTER p_space p) N)’
8513 >- (rw [Abbr ‘E'’, Once EXTENSION, IN_BIGINTER_IMAGE] \\
8514 EQ_TAC >> rw []
8515 >- (‘n IN J’ by METIS_TAC [SUBSET_DEF] \\
8516 Q.PAT_X_ASSUM ‘!n. n IN J ==> random_variable (X n) p (B n)’
8517 (STRIP_ASSUME_TAC o
8518 (SIMP_RULE (srw_ss()) [random_variable_def, IN_MEASURABLE, IN_FUNSET])) \\
8519 METIS_TAC [])
8520 >- (METIS_TAC [])
8521 >- (METIS_TAC []))
8522 >> Rewr'
8523 (* applying EXTREAL_PROD_IMAGE_EQ *)
8524 >> Know ‘PI (\n. prob p (PREIMAGE (\x. f n (X n x)) (E n) INTER p_space p)) N =
8525 PI (\n. prob p (PREIMAGE (X n) (E' n) INTER p_space p)) N’
8526 >- (irule EXTREAL_PROD_IMAGE_EQ >> art [] \\
8527 Q.X_GEN_TAC ‘n’ >> rw [] \\
8528 Suff ‘PREIMAGE (\x. f n (X n x)) (E n) INTER p_space p =
8529 PREIMAGE (X n) (E' n) INTER p_space p’ >- rw [] \\
8530 rw [Abbr ‘E'’, PREIMAGE_def, Once EXTENSION] >> EQ_TAC >> rw [] \\
8531 ‘n IN J’ by METIS_TAC [SUBSET_DEF] \\
8532 Q.PAT_X_ASSUM ‘!n. n IN J ==> random_variable (X n) p (B n)’
8533 (STRIP_ASSUME_TAC o
8534 (SIMP_RULE (srw_ss()) [random_variable_def, IN_MEASURABLE, IN_FUNSET])) \\
8535 PROVE_TAC [])
8536 >> Rewr'
8537 >> FIRST_X_ASSUM MATCH_MP_TAC
8538 >> fs [Abbr ‘E'’, PREIMAGE_def, IN_DFUNSET, IN_MEASURABLE]
8539 >> rw []
8540 >> Q.PAT_X_ASSUM ‘!n. n IN J ==> f n IN (space (B n) -> space (B n)) /\ _’
8541 (MP_TAC o (Q.SPEC ‘x’))
8542 >> ‘x IN J’ by PROVE_TAC [SUBSET_DEF]
8543 >> rw []
8544QED
8545
8546(* A specialized version of previous theorem for only two r.v.'s *)
8547Theorem indep_rv_cong :
8548 !p X Y A B f g. indep_rv p X Y A B /\
8549 random_variable X p A /\ random_variable Y p B /\
8550 f IN measurable A A /\ g IN measurable B B ==>
8551 indep_vars p (f o X) (g o Y) A B
8552Proof
8553 rpt STRIP_TAC
8554 >> ‘random_variable (f o X) p A /\
8555 random_variable (g o Y) p B’ by PROVE_TAC [random_variable_comp]
8556 >> fs [indep_rv_alt_indep_vars]
8557 >> MP_TAC (Q.SPECL [‘p’, ‘binary X Y’, ‘binary A B’, ‘{0; 1}’, ‘binary f g’]
8558 (INST_TYPE [“:'index” |-> “:num”] indep_vars_cong))
8559 >> Know ‘!n. n IN {0; 1} ==> random_variable (binary X Y n) p (binary A B n)’
8560 >- rw [binary_def]
8561 >> Know ‘!n. n IN {0; 1} ==>
8562 binary f g n IN measurable (binary A B n) (binary A B n)’
8563 >- rw [binary_def]
8564 >> RW_TAC std_ss []
8565 >> Suff ‘(binary (f o X) (g o Y)) = (\n. (binary f g n) o (binary X Y n))’
8566 >- rw []
8567 >> rw [FUN_EQ_THM, binary_def]
8568 >> Cases_on ‘n = 0’ >> rw []
8569QED
8570
8571(* Another version of "indep_vars_cong" for pairwise independent r.v.'s *)
8572Theorem pairwise_indep_vars_cong :
8573 !p X B (J :'index set) f.
8574 pairwise_indep_vars p (X :'index -> 'a -> 'b) B (J :'index set) /\
8575 (!n. n IN J ==> random_variable (X n) p (B n)) /\
8576 (!n. n IN J ==> f n IN measurable (B n) (B n)) ==>
8577 pairwise_indep_vars p (\n. (f n) o (X n)) B (J :'index set)
8578Proof
8579 rw [pairwise_indep_vars_def]
8580 >> rename1 ‘i <> j’
8581 >> MP_TAC (Q.SPECL [‘p’, ‘X (i :'index)’, ‘X (j :'index)’,
8582 ‘B (i :'index)’, ‘B (j :'index)’,
8583 ‘f (i :'index)’, ‘f (j :'index)’] indep_rv_cong)
8584 >> rw [o_DEF]
8585QED
8586
8587(* Theorem 3.3.2 [2, p.54] (a simple version of four r.v.'s)
8588
8589 This proof is based on repeated applications of SIGMA_PROPERTY_DYNKIN,
8590 a rare direct application of Dynkin systems in probability proofs. For
8591 a more general results which (may) imply the present theorem, see
8592 Scholium 23.4 (on independent functions) [9, p.280]. Note also that the
8593 proof doesn't work if “indep_vars” is weaken to “pairwise_indep_vars”.
8594
8595 NOTE: The textbook says "The proof of the next (the present) theorem is
8596 similar (with Theorem 3.3.1) and is left as an exercise." [2, p.54]
8597
8598 See stochastic_processTheory.indep_functions_of_vars for a more general
8599 version of two finite lists of r.v.'s.
8600 *)
8601Theorem indep_functions_of_four_vars_lemma[local] :
8602 !p. prob_space p /\
8603 random_variable A p Borel /\
8604 random_variable B p Borel /\
8605 random_variable C p Borel /\
8606 random_variable D p Borel /\
8607 indep_vars p (\i. EL i [A; B; C; D]) (\n. Borel) (count 4) ==>
8608 !a. a IN subsets (Borel CROSS Borel) ==>
8609 !b. b IN subsets (Borel CROSS Borel) ==>
8610 indep p (PREIMAGE (\x. (A x,B x)) a INTER p_space p)
8611 (PREIMAGE (\x. (C x,D x)) b INTER p_space p)
8612Proof
8613 NTAC 2 STRIP_TAC
8614 (* NOTE: P is not a sigma-algebra *)
8615 >> qabbrev_tac ‘P = \a. a IN subsets (Borel CROSS Borel) /\
8616 !b. b IN subsets (Borel CROSS Borel) ==>
8617 indep p (PREIMAGE (\x. (A x,B x)) a INTER p_space p)
8618 (PREIMAGE (\x. (C x,D x)) b INTER p_space p)’
8619 (* applying SIGMA_SUBSET (1st round) *)
8620 >> Suff ‘subsets (Borel CROSS Borel) SUBSET P’
8621 >- rw [SUBSET_DEF, IN_APP, Abbr ‘P’]
8622 >> simp [prod_sigma_def]
8623 >> qabbrev_tac ‘X = space Borel CROSS space Borel’
8624 >> qabbrev_tac ‘b = (X,P)’
8625 >> ‘P = subsets b’ by rw [Abbr ‘b’] >> POP_ORW
8626 >> ‘X = space b’ by rw [Abbr ‘b’] >> POP_ORW
8627 >> qabbrev_tac ‘sts = prod_sets (subsets Borel) (subsets Borel)’
8628 >> MATCH_MP_TAC SIGMA_PROPERTY_DYNKIN
8629 >> CONJ_TAC (* subset_class (space b) sts *)
8630 >- (rw [subset_class_def, Abbr ‘b’, Abbr ‘X’, SPACE_PROD_SIGMA, SPACE_BOREL] \\
8631 rw [SUBSET_DEF, IN_CROSS])
8632 (* sts is closed under intersection *)
8633 >> STRONG_CONJ_TAC
8634 >- (rw [Abbr ‘sts’, IN_PROD_SETS] \\
8635 rename1 ‘?x y. a1 CROSS a2 INTER a3 CROSS a4 = x CROSS y /\
8636 x IN subsets Borel /\ y IN subsets Borel’ \\
8637 simp [INTER_CROSS] \\
8638 qexistsl_tac [‘a1 INTER a3’, ‘a2 INTER a4’] >> rw [] \\
8639 MATCH_MP_TAC SIGMA_ALGEBRA_INTER >> rw [SIGMA_ALGEBRA_BOREL])
8640 >> DISCH_TAC
8641 >> fs [Abbr ‘b’]
8642 (* NOTE: ‘sigma_algebra (X,P)’ doesn't hold, but ‘dynkin_system (X,P)’ is true *)
8643 >> reverse CONJ_TAC
8644 >- (rw [dynkin_system_def] >| (* 4 subgoals *)
8645 [ (* goal 1 (of 4) *)
8646 rw [subset_class_def, SUBSET_DEF, Abbr ‘X’, SPACE_PROD_SIGMA, SPACE_BOREL],
8647 (* goal 2 (of 4) *)
8648 simp [Abbr ‘P’, Abbr ‘X’, GSYM SPACE_PROD_SIGMA] \\
8649 CONJ_TAC
8650 >- (MATCH_MP_TAC SIGMA_ALGEBRA_SPACE \\
8651 REWRITE_TAC [SIGMA_ALGEBRA_BOREL_2D]) \\
8652 rw [SPACE_BOREL_2D] \\
8653 MATCH_MP_TAC INDEP_SPACE >> art [] \\
8654 MP_TAC (Q.SPEC ‘(p_space p,events p)’
8655 (REWRITE_RULE [IN_MEASURABLE]
8656 IN_MEASURABLE_BOREL_2D_VECTOR)) \\
8657 rw [SPACE_BOREL, IN_FUNSET, EVENTS_SIGMA_ALGEBRA] \\
8658 POP_ASSUM (MP_TAC o Q.SPECL [‘C’, ‘D’]) \\
8659 fs [random_variable_def, IN_MEASURABLE],
8660 (* goal 3 (of 4) *)
8661 simp [Abbr ‘P’] \\
8662 POP_ASSUM (MP_TAC o BETA_RULE o ONCE_REWRITE_RULE [IN_APP]) \\
8663 STRIP_TAC \\
8664 CONJ_TAC
8665 >- (‘X = space (Borel CROSS Borel)’ by rw [Abbr ‘X’, SPACE_PROD_SIGMA] \\
8666 POP_ORW \\
8667 MATCH_MP_TAC SIGMA_ALGEBRA_COMPL >> art [] \\
8668 REWRITE_TAC [SIGMA_ALGEBRA_BOREL_2D]) \\
8669 rw [PREIMAGE_DIFF] \\
8670 qabbrev_tac ‘e = PREIMAGE (\x. (A x,B x)) s’ \\
8671 qabbrev_tac ‘sp = PREIMAGE (\x. (A x,B x)) X’ \\
8672 ‘(sp DIFF e) INTER p_space p =
8673 (sp INTER p_space p) DIFF (e INTER p_space p)’ by SET_TAC [] >> POP_ORW \\
8674 Know ‘sp INTER p_space p = p_space p’
8675 >- (Suff ‘p_space p SUBSET sp’ >- SET_TAC [] \\
8676 rw [Abbr ‘sp’, SUBSET_DEF, IN_PREIMAGE] \\
8677 simp [Abbr ‘X’, SPACE_PROD_SIGMA, SPACE_BOREL]) >> Rewr' \\
8678 MATCH_MP_TAC INDEP_COMPL' >> art [] \\
8679 FIRST_X_ASSUM MATCH_MP_TAC >> art [],
8680 (* goal 4 (of 4) *)
8681 simp [Abbr ‘P’] \\
8682 fs [IN_FUNSET] \\
8683 STRONG_CONJ_TAC
8684 >- (MATCH_MP_TAC SIGMA_ALGEBRA_COUNTABLE_UNION \\
8685 rw [SIGMA_ALGEBRA_BOREL_2D, SUBSET_DEF] \\
8686 simp []) >> DISCH_TAC \\
8687 rw [PREIMAGE_BIGUNION, IMAGE_IMAGE, o_DEF, BIGUNION_OVER_INTER_L] \\
8688 MATCH_MP_TAC INDEP_COUNTABLE_DUNION' >> simp [] \\
8689 CONJ_TAC
8690 >- (MP_TAC (Q.SPEC ‘(p_space p,events p)’
8691 (REWRITE_RULE [IN_MEASURABLE]
8692 IN_MEASURABLE_BOREL_2D_VECTOR)) \\
8693 rw [SPACE_BOREL, IN_FUNSET, EVENTS_SIGMA_ALGEBRA] \\
8694 POP_ASSUM (MP_TAC o Q.SPECL [‘C’, ‘D’]) \\
8695 fs [random_variable_def, IN_MEASURABLE]) \\
8696 rw [disjoint_family_def] \\
8697 MATCH_MP_TAC DISJOINT_RESTRICT_L \\
8698 MATCH_MP_TAC PREIMAGE_DISJOINT \\
8699 FIRST_X_ASSUM MATCH_MP_TAC >> art [] ])
8700 (* stage work *)
8701 >> simp [SUBSET_DEF, Abbr ‘sts’, Abbr ‘P’, Abbr ‘X’]
8702 >> NTAC 2 STRIP_TAC
8703 >> Q.PAT_X_ASSUM ‘x = t CROSS u’ (REWRITE_TAC o wrap)
8704 >> CONJ_TAC
8705 >- (simp [prod_sigma_def] \\
8706 MATCH_MP_TAC IN_SIGMA >> rw [IN_PROD_SETS] \\
8707 qexistsl_tac [‘t’, ‘u’] >> art [])
8708 (* stage work *)
8709 >> qabbrev_tac ‘P = \b. b IN subsets (Borel CROSS Borel) /\
8710 indep p
8711 (PREIMAGE (\x. (A x,B x)) (t CROSS u) INTER p_space p)
8712 (PREIMAGE (\x. (C x,D x)) b INTER p_space p)’
8713 >> Suff ‘subsets (Borel CROSS Borel) SUBSET P’
8714 >- rw [SUBSET_DEF, IN_APP, Abbr ‘P’]
8715 >> REWRITE_TAC [prod_sigma_def]
8716 >> qabbrev_tac ‘X = space Borel CROSS space Borel’
8717 >> qabbrev_tac ‘b = (X,P)’
8718 >> ‘P = subsets b’ by rw [Abbr ‘b’] >> POP_ORW
8719 >> ‘X = space b’ by rw [Abbr ‘b’] >> POP_ORW
8720 >> qabbrev_tac ‘sts = prod_sets (subsets Borel) (subsets Borel)’
8721 >> MATCH_MP_TAC SIGMA_PROPERTY_DYNKIN >> art []
8722 >> CONJ_TAC (* subset_class (space b) sts *)
8723 >- (rw [subset_class_def, Abbr ‘b’, Abbr ‘X’, SPACE_PROD_SIGMA, SPACE_BOREL] \\
8724 rw [SUBSET_DEF, IN_CROSS])
8725 >> fs [Abbr ‘b’]
8726 (* another proof of “dynkin_system (X,P)” *)
8727 >> reverse CONJ_TAC
8728 >- (rw [dynkin_system_def] >| (* 4 subgoals *)
8729 [ (* goal 1 (of 4) *)
8730 rw [subset_class_def, SUBSET_DEF, Abbr ‘X’, SPACE_PROD_SIGMA, SPACE_BOREL],
8731 (* goal 2 (of 4) *)
8732 simp [Abbr ‘P’, Abbr ‘X’, GSYM SPACE_PROD_SIGMA] \\
8733 CONJ_TAC
8734 >- (MATCH_MP_TAC SIGMA_ALGEBRA_SPACE \\
8735 REWRITE_TAC [SIGMA_ALGEBRA_BOREL_2D]) \\
8736 rw [SPACE_BOREL_2D] \\
8737 MATCH_MP_TAC INDEP_SPACE' >> art [] \\
8738 MP_TAC (Q.SPEC ‘(p_space p,events p)’
8739 (REWRITE_RULE [IN_MEASURABLE]
8740 IN_MEASURABLE_BOREL_2D_VECTOR)) \\
8741 rw [SPACE_BOREL, IN_FUNSET, EVENTS_SIGMA_ALGEBRA] \\
8742 POP_ASSUM (MP_TAC o Q.SPECL [‘A’, ‘B’]) \\
8743 fs [random_variable_def, IN_MEASURABLE, SPACE_BOREL_2D] \\
8744 DISCH_THEN MATCH_MP_TAC \\
8745 simp [prod_sigma_def] \\
8746 MATCH_MP_TAC IN_SIGMA >> rw [IN_PROD_SETS, Abbr ‘sts’] \\
8747 qexistsl_tac [‘t’, ‘u’] >> art [],
8748 (* goal 3 (of 4) *)
8749 simp [Abbr ‘P’] \\
8750 POP_ASSUM (MP_TAC o BETA_RULE o ONCE_REWRITE_RULE [IN_APP]) \\
8751 STRIP_TAC \\
8752 CONJ_TAC
8753 >- (‘X = space (Borel CROSS Borel)’ by rw [Abbr ‘X’, SPACE_PROD_SIGMA] \\
8754 POP_ORW \\
8755 MATCH_MP_TAC SIGMA_ALGEBRA_COMPL >> art [] \\
8756 REWRITE_TAC [SIGMA_ALGEBRA_BOREL_2D]) \\
8757 rw [PREIMAGE_DIFF] \\
8758 qabbrev_tac ‘e = PREIMAGE (\x. (C x,D x)) s’ \\
8759 qabbrev_tac ‘sp = PREIMAGE (\x. (C x,D x)) X’ \\
8760 ‘(sp DIFF e) INTER p_space p =
8761 (sp INTER p_space p) DIFF (e INTER p_space p)’ by SET_TAC [] >> POP_ORW \\
8762 Know ‘sp INTER p_space p = p_space p’
8763 >- (Suff ‘p_space p SUBSET sp’ >- SET_TAC [] \\
8764 rw [Abbr ‘sp’, SUBSET_DEF, IN_PREIMAGE] \\
8765 simp [Abbr ‘X’, SPACE_PROD_SIGMA, SPACE_BOREL]) >> Rewr' \\
8766 MATCH_MP_TAC INDEP_COMPL >> art [],
8767 (* goal 4 (of 4) *)
8768 simp [Abbr ‘P’] \\
8769 fs [IN_FUNSET] \\
8770 STRONG_CONJ_TAC
8771 >- (MATCH_MP_TAC SIGMA_ALGEBRA_COUNTABLE_UNION \\
8772 rw [SIGMA_ALGEBRA_BOREL_2D, SUBSET_DEF] \\
8773 simp []) >> DISCH_TAC \\
8774 rw [PREIMAGE_BIGUNION, IMAGE_IMAGE, o_DEF, BIGUNION_OVER_INTER_L] \\
8775 MATCH_MP_TAC INDEP_COUNTABLE_DUNION >> simp [] \\
8776 CONJ_TAC
8777 >- (MP_TAC (Q.SPEC ‘(p_space p,events p)’
8778 (REWRITE_RULE [IN_MEASURABLE]
8779 IN_MEASURABLE_BOREL_2D_VECTOR)) \\
8780 rw [SPACE_BOREL, IN_FUNSET, EVENTS_SIGMA_ALGEBRA] \\
8781 POP_ASSUM (MP_TAC o Q.SPECL [‘A’, ‘B’]) \\
8782 fs [random_variable_def, IN_MEASURABLE, SPACE_BOREL_2D] \\
8783 DISCH_THEN MATCH_MP_TAC \\
8784 simp [prod_sigma_def] \\
8785 MATCH_MP_TAC IN_SIGMA >> rw [IN_PROD_SETS, Abbr ‘sts’] \\
8786 qexistsl_tac [‘t’, ‘u’] >> art []) \\
8787 rw [disjoint_family_def] \\
8788 MATCH_MP_TAC DISJOINT_RESTRICT_L \\
8789 MATCH_MP_TAC PREIMAGE_DISJOINT \\
8790 FIRST_X_ASSUM MATCH_MP_TAC >> art [] ])
8791 (* stage work *)
8792 >> rw [SUBSET_DEF, Abbr ‘sts’, Abbr ‘P’, Abbr ‘X’]
8793 >- (rename1 ‘c CROSS d IN subsets (Borel CROSS Borel)’ \\
8794 simp [prod_sigma_def] \\
8795 MATCH_MP_TAC IN_SIGMA >> rw [IN_PROD_SETS] \\
8796 qexistsl_tac [‘c’, ‘d’] >> art [])
8797 >> rename1 ‘indep p (PREIMAGE (\x. (A x,B x)) (a CROSS b) INTER p_space p)
8798 (PREIMAGE (\x. (C x,D x)) (c CROSS d) INTER p_space p)’
8799 >> simp [PREIMAGE_CROSS, o_DEF]
8800 >> ‘PREIMAGE (\x. A x) a INTER PREIMAGE (\x. B x) b INTER p_space p =
8801 (PREIMAGE A a INTER p_space p) INTER
8802 (PREIMAGE B b INTER p_space p)’ by SET_TAC [ETA_AX]
8803 >> POP_ORW
8804 >> ‘PREIMAGE (\x. C x) c INTER PREIMAGE (\x. D x) d INTER p_space p =
8805 (PREIMAGE C c INTER p_space p) INTER
8806 (PREIMAGE D d INTER p_space p)’ by SET_TAC [ETA_AX]
8807 >> POP_ORW
8808 >> qabbrev_tac ‘e1 = PREIMAGE A a INTER p_space p’
8809 >> qabbrev_tac ‘e2 = PREIMAGE B b INTER p_space p’
8810 >> qabbrev_tac ‘e3 = PREIMAGE C c INTER p_space p’
8811 >> qabbrev_tac ‘e4 = PREIMAGE D d INTER p_space p’
8812 >> Know ‘e1 IN events p’
8813 >- (Q.PAT_X_ASSUM ‘random_variable A p Borel’ MP_TAC \\
8814 rw [Abbr ‘e1’, random_variable_def, IN_MEASURABLE])
8815 >> DISCH_TAC
8816 >> Know ‘e2 IN events p’
8817 >- (Q.PAT_X_ASSUM ‘random_variable B p Borel’ MP_TAC \\
8818 rw [Abbr ‘e2’, random_variable_def, IN_MEASURABLE])
8819 >> DISCH_TAC
8820 >> Know ‘e3 IN events p’
8821 >- (Q.PAT_X_ASSUM ‘random_variable C p Borel’ MP_TAC \\
8822 rw [Abbr ‘e3’, random_variable_def, IN_MEASURABLE])
8823 >> DISCH_TAC
8824 >> Know ‘e4 IN events p’
8825 >- (Q.PAT_X_ASSUM ‘random_variable D p Borel’ MP_TAC \\
8826 rw [Abbr ‘e4’, random_variable_def, IN_MEASURABLE])
8827 >> DISCH_TAC
8828 >> rw [indep_def]
8829 >- (MATCH_MP_TAC EVENTS_INTER >> art [])
8830 >- (MATCH_MP_TAC EVENTS_INTER >> art [])
8831 >> qabbrev_tac ‘X = \i. EL i [A; B; C; D]’
8832 >> Know ‘pairwise_indep_vars p X (\n. Borel) (count 4)’
8833 >- (MATCH_MP_TAC total_imp_pairwise_indep_vars \\
8834 rw [SIGMA_ALGEBRA_BOREL] \\
8835 POP_ASSUM MP_TAC \\
8836 qid_spec_tac ‘i’ \\
8837 simp [Abbr ‘X’] \\
8838 rpt (CONV_TAC (BOUNDED_FORALL_CONV (SIMP_CONV (srw_ss()) [])) >> art []))
8839 >> rw [pairwise_indep_vars_def]
8840 >> Know ‘prob p (e1 INTER e2) = prob p e1 * prob p e2’
8841 >- (Suff ‘indep p e1 e2’ >- rw [indep_def] \\
8842 POP_ASSUM (MP_TAC o Q.SPECL [‘0’, ‘1’]) >> rw [Abbr ‘X’, indep_rv_def] \\
8843 rw [Abbr ‘e1’, Abbr ‘e2’])
8844 >> Rewr'
8845 >> Know ‘prob p (e3 INTER e4) = prob p e3 * prob p e4’
8846 >- (Suff ‘indep p e3 e4’ >- rw [indep_def] \\
8847 POP_ASSUM (MP_TAC o Q.SPECL [‘2’, ‘3’]) >> rw [Abbr ‘X’, indep_rv_def] \\
8848 rw [Abbr ‘e3’, Abbr ‘e4’])
8849 >> Rewr'
8850 >> POP_ASSUM K_TAC (* useless now *)
8851 >> REWRITE_TAC [mul_assoc, INTER_ASSOC]
8852 >> Q.PAT_X_ASSUM ‘indep_vars p X (\n. Borel) (count 4)’ MP_TAC
8853 >> rw [indep_vars_def]
8854 >> POP_ASSUM (MP_TAC o Q.SPECL [‘\i. EL i [a; b; c; d]’, ‘count 4’])
8855 >> simp []
8856 >> impl_tac
8857 >- (simp [IN_COUNT, o_DEF, IN_DFUNSET] \\
8858 rpt (CONV_TAC (BOUNDED_FORALL_CONV (SIMP_CONV (srw_ss()) [])) >> art []))
8859 >> Know ‘BIGINTER (IMAGE (\n. PREIMAGE (X n) (EL n [a; b; c; d]) INTER p_space p)
8860 (count 4)) = e1 INTER e2 INTER e3 INTER e4’
8861 >- (rw [Once EXTENSION, IN_BIGINTER_IMAGE] \\
8862 reverse EQ_TAC
8863 >- (STRIP_TAC \\
8864 simp [Abbr ‘X’] \\
8865 rpt (CONV_TAC (BOUNDED_FORALL_CONV (SIMP_CONV (srw_ss()) [])) \\
8866 CONJ_TAC
8867 >- fs [Abbr ‘e1’, Abbr ‘e2’, Abbr ‘e3’, Abbr ‘e4’, IN_PREIMAGE]) \\
8868 simp []) \\
8869 DISCH_TAC \\
8870 rpt CONJ_TAC >| (* 4 subgoals *)
8871 [ (* goal 1 (of 4) *)
8872 rw [Abbr ‘e1’, IN_PREIMAGE] \\
8873 POP_ASSUM (MP_TAC o Q.SPEC ‘0’) >> simp [Abbr ‘X’],
8874 (* goal 2 (of 4) *)
8875 rw [Abbr ‘e2’, IN_PREIMAGE] \\
8876 POP_ASSUM (MP_TAC o Q.SPEC ‘1’) >> simp [Abbr ‘X’],
8877 (* goal 3 (of 4) *)
8878 rw [Abbr ‘e3’, IN_PREIMAGE] \\
8879 POP_ASSUM (MP_TAC o Q.SPEC ‘2’) >> simp [Abbr ‘X’],
8880 (* goal 4 (of 4) *)
8881 rw [Abbr ‘e4’, IN_PREIMAGE] \\
8882 POP_ASSUM (MP_TAC o Q.SPEC ‘3’) >> simp [Abbr ‘X’] ])
8883 >> Rewr'
8884 >> Rewr'
8885 >> simp [EXTREAL_PROD_IMAGE_COUNT, Abbr ‘X’]
8886QED
8887
8888(* NOTE: This is a test before the general version.
8889
8890 Note also that ‘indep_vars’ in concl. is overload of ‘indep_rv’.
8891 *)
8892Theorem indep_functions_of_four_vars :
8893 !p f g A B C D.
8894 prob_space p /\
8895 random_variable A p Borel /\
8896 random_variable B p Borel /\
8897 random_variable C p Borel /\
8898 random_variable D p Borel /\
8899 f IN measurable (Borel CROSS Borel) Borel /\
8900 g IN measurable (Borel CROSS Borel) Borel /\
8901 indep_vars p (\i. EL i [A; B; C; D]) (\n. Borel) (count 4) ==>
8902 indep_vars p (\x. f (A x,B x)) (\x. g (C x,D x)) Borel Borel
8903Proof
8904 rw [indep_rv_def, IN_MEASURABLE, IN_FUNSET, SPACE_BOREL_2D, SPACE_BOREL]
8905 >> Know ‘(\x. f (A x,B x)) = f o (\x. (A x,B x))’
8906 >- rw [o_DEF]
8907 >> Rewr
8908 >> Know ‘(\x. g (C x,D x)) = g o (\x. (C x,D x))’
8909 >- rw [o_DEF]
8910 >> Rewr
8911 >> simp [PREIMAGE_o, GSYM PREIMAGE_ALT]
8912 >> qabbrev_tac ‘c = PREIMAGE f a’
8913 >> qabbrev_tac ‘d = PREIMAGE g b’
8914 >> ‘c IN subsets (Borel CROSS Borel) /\
8915 d IN subsets (Borel CROSS Borel)’ by METIS_TAC []
8916 >> NTAC 2 (Q.PAT_X_ASSUM ‘!s. s IN subsets Borel ==> _’ K_TAC)
8917 >> NTAC 2 (Q.PAT_X_ASSUM ‘_ IN subsets Borel’ K_TAC)
8918 (* now f and g are irrelevant *)
8919 >> irule indep_functions_of_four_vars_lemma >> art []
8920QED
8921
8922(* Theorem 3.3.3 [2, p.54], depending on Fubini and UNIQUENESS_OF_PROD_MEASURE
8923
8924 This is the last theorem in Isabelle's Independent_Family.thy but in extreals.
8925 *)
8926Theorem indep_vars_expectation :
8927 !p X Y. prob_space p /\ real_random_variable X p /\ real_random_variable Y p /\
8928 indep_rv p X Y Borel Borel /\ integrable p X /\ integrable p Y ==>
8929 expectation p (\x. X x * Y x) = expectation p X * expectation p Y
8930Proof
8931 rw [indep_rv_def, real_random_variable_def, prob_space_def, p_space_def,
8932 events_def, real_random_variable_def, random_variable_def, expectation_def]
8933 >> Q.ABBREV_TAC ‘f = \x. (X x,Y x)’
8934 >> Q.ABBREV_TAC ‘u = \(x,y). x * (y :extreal)’
8935 >> ‘(\x. X x * Y x) = u o f’ by rw [Abbr ‘u’, Abbr ‘f’, o_DEF] >> POP_ORW
8936 >> ‘sigma_algebra (measurable_space p)’
8937 by PROVE_TAC [MEASURE_SPACE_SIGMA_ALGEBRA, prob_space_def]
8938 (* applying MEASURABLE_PROD_SIGMA' *)
8939 >> Know ‘f IN measurable (m_space p,measurable_sets p) (Borel CROSS Borel)’
8940 >- (MATCH_MP_TAC MEASURABLE_PROD_SIGMA' \\
8941 simp [Abbr ‘f’, o_DEF, ETA_AX] \\
8942 MP_TAC SIGMA_ALGEBRA_BOREL >> rw [sigma_algebra_def, algebra_def])
8943 >> DISCH_TAC
8944 >> Know ‘u IN measurable (Borel CROSS Borel) Borel’
8945 >- (Q.UNABBREV_TAC ‘u’ \\
8946 REWRITE_TAC [IN_MEASURABLE_BOREL_2D_MUL])
8947 >> DISCH_TAC
8948 (* applying integral_distr and SIGMA_ALGEBRA_BOREL_2D *)
8949 >> Know ‘integral p (u o f) =
8950 integral (space (Borel CROSS Borel),
8951 subsets (Borel CROSS Borel),distr p f) u’
8952 >- (MP_TAC (ISPECL [“p :'a m_space”,
8953 “Borel CROSS Borel”,
8954 “f :'a -> extreal # extreal”,
8955 “u :extreal # extreal -> extreal”] integral_distr) \\
8956 RW_TAC std_ss [SIGMA_ALGEBRA_BOREL_2D]) >> Rewr'
8957 >> Q.ABBREV_TAC ‘m1 = (space Borel,subsets Borel,distr p X)’
8958 >> Q.ABBREV_TAC ‘m2 = (space Borel,subsets Borel,distr p Y)’
8959 >> ‘measure_space m1 /\ measure_space m2’
8960 by METIS_TAC [measure_space_distr, SIGMA_ALGEBRA_BOREL]
8961 (* sigma_finiteness of m1 and m2 *)
8962 >> Know ‘sigma_finite_measure_space m1 /\ sigma_finite_measure_space m2’
8963 >- (rw [sigma_finite_measure_space_def] >| (* 2 subgoals *)
8964 [ (* goal 1 (of 2) *)
8965 MATCH_MP_TAC FINITE_IMP_SIGMA_FINITE >> art [lt_infty] \\
8966 ‘m_space m1 = UNIV’ by METIS_TAC [m_space_def, SPACE_BOREL] >> POP_ORW \\
8967 ‘measure m1 = distr p X’ by METIS_TAC [measure_def] >> POP_ORW \\
8968 rw [distr_def],
8969 (* goal 2 (of 2) *)
8970 MATCH_MP_TAC FINITE_IMP_SIGMA_FINITE >> art [lt_infty] \\
8971 ‘m_space m2 = UNIV’ by METIS_TAC [m_space_def, SPACE_BOREL] >> POP_ORW \\
8972 ‘measure m2 = distr p Y’ by METIS_TAC [measure_def] >> POP_ORW \\
8973 rw [distr_def] ])
8974 >> STRIP_TAC
8975 >> ‘measure_space (m1 CROSS m2)’ by PROVE_TAC [measure_space_prod_measure]
8976 (* applying UNIQUENESS_OF_PROD_MEASURE *)
8977 >> Know ‘integral (space (Borel CROSS Borel),subsets (Borel CROSS Borel),distr p f) u =
8978 integral (m1 CROSS m2) u’
8979 >- (MATCH_MP_TAC integral_cong_measure' >> simp [measure_space_eq_def] \\
8980 CONJ_TAC >- (MATCH_MP_TAC measure_space_distr >> rw [SIGMA_ALGEBRA_BOREL_2D]) \\
8981 CONJ_TAC >- rw [SPACE_PROD_SIGMA, prod_measure_space_alt, Abbr ‘m1’, Abbr ‘m2’] \\
8982 CONJ_TAC >- rw [prod_measure_space_alt, Abbr ‘m1’, Abbr ‘m2’] \\
8983 MATCH_MP_TAC UNIQUENESS_OF_PROD_MEASURE \\
8984 qexistsl_tac [‘space Borel’, ‘space Borel’] \\
8985 qexistsl_tac [‘subsets Borel’, ‘subsets Borel’] \\
8986 qexistsl_tac [‘distr p X’, ‘distr p Y’] \\
8987 Know ‘subset_class (space Borel) (subsets Borel)’
8988 >- (rw [subset_class_def, SPACE_BOREL]) >> Rewr \\
8989 Know ‘sigma (space Borel) (subsets Borel) = Borel’
8990 >- (MATCH_MP_TAC SIGMA_STABLE \\
8991 REWRITE_TAC [SIGMA_ALGEBRA_BOREL]) >> Rewr \\
8992 CONJ_TAC >- fs [Abbr ‘m1’, sigma_finite_measure_space_def] \\
8993 CONJ_TAC >- fs [Abbr ‘m2’, sigma_finite_measure_space_def] \\
8994 Know ‘!s t. s IN subsets Borel /\ t IN subsets Borel ==>
8995 s INTER t IN subsets Borel’
8996 >- (rpt STRIP_TAC \\
8997 MATCH_MP_TAC SIGMA_ALGEBRA_INTER >> art [SIGMA_ALGEBRA_BOREL]) >> Rewr \\
8998 CONJ_TAC >- fs [Abbr ‘m1’, sigma_finite_measure_space_def] \\
8999 CONJ_TAC >- fs [Abbr ‘m2’, sigma_finite_measure_space_def] \\
9000 Know ‘space Borel CROSS space Borel = space (Borel CROSS Borel)’
9001 >- (rw [prod_sigma_def, SPACE_SIGMA]) >> Rewr' \\
9002 CONJ_TAC >- (MATCH_MP_TAC measure_space_distr >> art [SIGMA_ALGEBRA_BOREL_2D]) \\
9003 CONJ_TAC
9004 >- (Know ‘space (Borel CROSS Borel) = m_space (m1 CROSS m2)’
9005 >- (rw [Abbr ‘m1’, Abbr ‘m2’, SPACE_PROD_SIGMA, prod_measure_space_alt]) >> Rewr' \\
9006 Know ‘subsets (Borel CROSS Borel) = measurable_sets (m1 CROSS m2)’
9007 >- (rw [Abbr ‘m1’, Abbr ‘m2’, prod_sigma_def, prod_measure_space_alt]) >> Rewr' \\
9008 art [MEASURE_SPACE_REDUCE]) \\
9009 CONJ_TAC
9010 >- (rw [distr_def, PREIMAGE_CROSS, Abbr ‘f’, o_DEF, ETA_AX] \\
9011 ‘PREIMAGE X s INTER PREIMAGE Y t INTER m_space p =
9012 (PREIMAGE X s INTER m_space p) INTER (PREIMAGE Y t INTER m_space p)’
9013 by SET_TAC [] >> POP_ORW \\
9014 METIS_TAC [indep_def, prob_def]) \\ (* independence is used here!!! *)
9015 rw [prod_measure_space_alt, INDICATOR_FN_CROSS] \\
9016 ONCE_REWRITE_TAC [mul_comm] \\
9017 Know ‘!y. pos_fn_integral m1 (\x. indicator_fn t y * indicator_fn s x) =
9018 indicator_fn t y * pos_fn_integral m1 (indicator_fn s)’
9019 >- (GEN_TAC \\
9020 ‘?r. 0 <= r /\ (indicator_fn t y = Normal r)’ by METIS_TAC [indicator_fn_normal] \\
9021 POP_ORW \\
9022 MATCH_MP_TAC pos_fn_integral_cmul >> rw [INDICATOR_FN_POS]) >> Rewr' \\
9023 Know ‘pos_fn_integral m1 (indicator_fn s) = measure m1 s’
9024 >- (MATCH_MP_TAC pos_fn_integral_indicator >> rw [Abbr ‘m1’]) >> Rewr' \\
9025 ONCE_REWRITE_TAC [mul_comm] \\
9026 Know ‘?r. 0 <= r /\ (measure m1 s = Normal r)’
9027 >- (rw [Abbr ‘m1’, distr_def] \\
9028 Know ‘measure p (PREIMAGE X s INTER m_space p) <= measure p (m_space p)’
9029 >- (MATCH_MP_TAC INCREASING \\
9030 CONJ_TAC >- (MATCH_MP_TAC MEASURE_SPACE_INCREASING >> art []) \\
9031 CONJ_TAC >- REWRITE_TAC [INTER_SUBSET] \\
9032 reverse CONJ_TAC >- (MATCH_MP_TAC MEASURE_SPACE_MSPACE_MEASURABLE >> art []) \\
9033 fs [IN_MEASURABLE]) >> art [] \\
9034 DISCH_TAC \\
9035 Know ‘0 <= measure p (PREIMAGE X s INTER m_space p)’
9036 >- (‘positive p’ by PROVE_TAC [MEASURE_SPACE_POSITIVE] \\
9037 fs [positive_def] >> POP_ASSUM MATCH_MP_TAC \\
9038 fs [IN_MEASURABLE]) >> DISCH_TAC \\
9039 ‘measure p (PREIMAGE X s INTER m_space p) <> NegInf’ by PROVE_TAC [pos_not_neginf] \\
9040 Know ‘measure p (PREIMAGE X s INTER m_space p) <> PosInf’
9041 >- (REWRITE_TAC [lt_infty] \\
9042 MATCH_MP_TAC let_trans >> Q.EXISTS_TAC ‘1’ \\
9043 rw [GSYM lt_infty, extreal_of_num_def, extreal_not_infty]) \\
9044 DISCH_TAC \\
9045 ‘?r. measure p (PREIMAGE X s INTER m_space p) = Normal r’ by METIS_TAC [extreal_cases] \\
9046 fs [extreal_of_num_def, extreal_le_eq]) \\
9047 STRIP_TAC \\
9048 Know ‘pos_fn_integral m2 (\y. measure m1 s * indicator_fn t y) =
9049 measure m1 s * pos_fn_integral m2 (indicator_fn t)’
9050 >- (POP_ORW >> MATCH_MP_TAC pos_fn_integral_cmul >> art [INDICATOR_FN_POS]) >> Rewr' \\
9051 Know ‘pos_fn_integral m2 (indicator_fn t) = measure m2 t’
9052 >- (MATCH_MP_TAC pos_fn_integral_indicator >> rw [Abbr ‘m2’]) >> Rewr' \\
9053 POP_ASSUM K_TAC \\
9054 rw [Abbr ‘m1’, Abbr ‘m2’])
9055 >> Rewr'
9056 (* clean up ‘f’ *)
9057 >> Q.PAT_X_ASSUM ‘f IN measurable (m_space p,measurable_sets p) (Borel CROSS Borel)’ K_TAC
9058 >> Q.UNABBREV_TAC ‘f’
9059 (* applying Fubini; finiteness / integrability is needed here. *)
9060 >> Know ‘integral (m1 CROSS m2) u = integral m2 (\y. integral m1 (\x. u (x,y)))’
9061 >- (MP_TAC (ISPECL [“m1 :extreal m_space”, “m2 :extreal m_space”,
9062 “u :extreal # extreal -> extreal”] Fubini) \\
9063 Know ‘((m_space m1,measurable_sets m1) CROSS
9064 (m_space m2,measurable_sets m2)) = Borel CROSS Borel’
9065 >- rw [Abbr ‘m1’, Abbr ‘m2’, SPACE] >> Rewr' \\
9066 ASM_SIMP_TAC std_ss [o_DEF] \\
9067 Suff ‘pos_fn_integral m2 (\y. pos_fn_integral m1 (\x. abs (u (x,y)))) <> PosInf’
9068 >- METIS_TAC [] \\
9069 rw [Abbr ‘u’, abs_mul] \\
9070 Know ‘pos_fn_integral m2 (\y. pos_fn_integral m1 (\x. abs x * abs y)) =
9071 pos_fn_integral m2 (\y. abs y * pos_fn_integral m1 (\x. abs x))’
9072 >- (MATCH_MP_TAC pos_fn_integral_cong_AE >> rw [] >| (* 3 subgoals *)
9073 [ (* goal 1 (of 3) *)
9074 MATCH_MP_TAC pos_fn_integral_pos >> art [] \\
9075 Q.X_GEN_TAC ‘y’ >> rw [] \\
9076 MATCH_MP_TAC le_mul >> REWRITE_TAC [abs_pos],
9077 (* goal 2 (of 3) *)
9078 MATCH_MP_TAC le_mul >> REWRITE_TAC [abs_pos] \\
9079 MATCH_MP_TAC pos_fn_integral_pos >> rw [abs_pos],
9080 (* goal 3 (of 3) *)
9081 rw [AE_DEF] \\
9082 Q.EXISTS_TAC ‘{PosInf; NegInf}’ \\
9083 reverse CONJ_TAC
9084 >- (rw [] >> ‘?r. x = Normal r’ by METIS_TAC [extreal_cases] >> POP_ORW \\
9085 REWRITE_TAC [extreal_abs_def, ETA_AX] \\
9086 GEN_REWRITE_TAC (RATOR_CONV o ONCE_DEPTH_CONV) empty_rewrites [mul_comm] \\
9087 MATCH_MP_TAC pos_fn_integral_cmul >> rw [abs_pos]) \\
9088 rw [null_set_def, Abbr ‘m2’, distr_def]
9089 >- (MATCH_MP_TAC BOREL_MEASURABLE_SETS_FINITE \\
9090 REWRITE_TAC [FINITE_TWO]) \\
9091 Know ‘PREIMAGE Y {PosInf; NegInf} INTER m_space p = {}’
9092 >- (rw [PREIMAGE_def, Once EXTENSION] \\
9093 METIS_TAC []) >> Rewr' \\
9094 ‘positive p’ by PROVE_TAC [MEASURE_SPACE_POSITIVE] \\
9095 fs [positive_def] ]) >> Rewr' \\
9096 ONCE_REWRITE_TAC [mul_comm] \\
9097 Know ‘pos_fn_integral m1 (\x. abs x) <> PosInf’
9098 >- (rw [Abbr ‘m1’, ETA_AX] \\
9099 Know ‘pos_fn_integral (space Borel,subsets Borel,distr p X) abs =
9100 pos_fn_integral p (abs o X)’
9101 >- (MATCH_MP_TAC pos_fn_integral_distr \\
9102 rw [SIGMA_ALGEBRA_BOREL, IN_MEASURABLE_BOREL_BOREL_ABS, abs_pos]) >> Rewr' \\
9103 Know ‘integrable p (abs o X)’ >- PROVE_TAC [integrable_abs] \\
9104 rw [integrable_def, FN_PLUS_ABS_SELF]) >> DISCH_TAC \\
9105 Know ‘0 <= pos_fn_integral m1 (\x. abs x)’
9106 >- (MATCH_MP_TAC pos_fn_integral_pos >> rw [abs_pos]) >> DISCH_TAC \\
9107 ‘pos_fn_integral m1 (\x. abs x) <> NegInf’ by PROVE_TAC [pos_not_neginf] \\
9108 ‘?r. 0 <= r /\ pos_fn_integral m1 (\x. abs x) = Normal r’
9109 by METIS_TAC [extreal_cases, extreal_of_num_def, extreal_le_eq] >> POP_ORW \\
9110 Know ‘pos_fn_integral m2 (\y. Normal r * abs y) =
9111 Normal r * pos_fn_integral m2 abs’
9112 >- (MATCH_MP_TAC pos_fn_integral_cmul >> rw [abs_pos]) >> Rewr' \\
9113 Know ‘pos_fn_integral m2 abs <> PosInf’
9114 >- (rw [Abbr ‘m2’] \\
9115 Know ‘pos_fn_integral (space Borel,subsets Borel,distr p Y) abs =
9116 pos_fn_integral p (abs o Y)’
9117 >- (MATCH_MP_TAC pos_fn_integral_distr \\
9118 rw [SIGMA_ALGEBRA_BOREL, IN_MEASURABLE_BOREL_BOREL_ABS, abs_pos]) >> Rewr' \\
9119 Know ‘integrable p (abs o Y)’ >- PROVE_TAC [integrable_abs] \\
9120 rw [integrable_def, FN_PLUS_ABS_SELF]) >> DISCH_TAC \\
9121 Know ‘pos_fn_integral m2 abs <> NegInf’
9122 >- (MATCH_MP_TAC pos_not_neginf \\
9123 MATCH_MP_TAC pos_fn_integral_pos >> rw [abs_pos]) >> DISCH_TAC \\
9124 ‘?z. pos_fn_integral m2 abs = Normal z’ by METIS_TAC [extreal_cases] >> POP_ORW \\
9125 REWRITE_TAC [extreal_mul_def, extreal_not_infty])
9126 >> Rewr'
9127 (* clean up ‘u’, now all pairs disappeared *)
9128 >> Q.UNABBREV_TAC ‘u’ >> simp []
9129 (* applying integral_cong_AE and integral_cmul, twice *)
9130 >> Know ‘integral m2 (\y. integral m1 (\x. x * y)) =
9131 integral m2 (\y. y * integral m1 (\x. x))’
9132 >- (GEN_REWRITE_TAC (RATOR_CONV o ONCE_DEPTH_CONV) empty_rewrites [mul_comm] \\
9133 MATCH_MP_TAC integral_cong_AE >> rw [AE_DEF] \\
9134 Q.EXISTS_TAC ‘{PosInf; NegInf}’ \\
9135 CONJ_TAC
9136 >- (rw [null_set_def, Abbr ‘m2’, distr_def]
9137 >- (MATCH_MP_TAC BOREL_MEASURABLE_SETS_FINITE \\
9138 REWRITE_TAC [FINITE_TWO]) \\
9139 Know ‘PREIMAGE Y {PosInf; NegInf} INTER m_space p = {}’
9140 >- (rw [PREIMAGE_def, Once EXTENSION] \\
9141 METIS_TAC []) >> Rewr' \\
9142 ‘positive p’ by PROVE_TAC [MEASURE_SPACE_POSITIVE] \\
9143 fs [positive_def]) \\
9144 rw [] >> ‘?r. x = Normal r’ by METIS_TAC [extreal_cases] >> POP_ORW \\
9145 HO_MATCH_MP_TAC integral_cmul >> art [] \\
9146 rw [integrable_def, Abbr ‘m1’, IN_MEASURABLE_BOREL_BOREL_I] >| (* 2 subgoals *)
9147 [ (* goal 1 (of 2) *)
9148 Know ‘pos_fn_integral (space Borel,subsets Borel,distr p X) (fn_plus (\x. x)) =
9149 pos_fn_integral p (fn_plus (\x. x) o X)’
9150 >- (MATCH_MP_TAC pos_fn_integral_distr \\
9151 rw [FN_PLUS_POS, SIGMA_ALGEBRA_BOREL] \\
9152 MATCH_MP_TAC IN_MEASURABLE_BOREL_FN_PLUS \\
9153 REWRITE_TAC [IN_MEASURABLE_BOREL_BOREL_I, SIGMA_ALGEBRA_BOREL]) >> Rewr' \\
9154 ‘(fn_plus (\x. x) o X) = fn_plus X’ by rw [fn_plus_def, o_DEF] >> POP_ORW \\
9155 fs [integrable_def],
9156 (* goal 2 (of 2) *)
9157 Know ‘pos_fn_integral (space Borel,subsets Borel,distr p X) (fn_minus (\x. x)) =
9158 pos_fn_integral p (fn_minus (\x. x) o X)’
9159 >- (MATCH_MP_TAC pos_fn_integral_distr \\
9160 rw [FN_MINUS_POS, SIGMA_ALGEBRA_BOREL] \\
9161 MATCH_MP_TAC IN_MEASURABLE_BOREL_FN_MINUS \\
9162 REWRITE_TAC [IN_MEASURABLE_BOREL_BOREL_I, SIGMA_ALGEBRA_BOREL]) >> Rewr' \\
9163 ‘(fn_minus (\x. x) o X) = fn_minus X’ by rw [fn_minus_def, o_DEF] >> POP_ORW \\
9164 fs [integrable_def] ])
9165 >> Rewr'
9166 >> Know ‘integrable m1 (\x. x)’
9167 >- (rw [Abbr ‘m1’] \\
9168 MP_TAC (Q.SPECL [‘p’, ‘Borel’, ‘X’, ‘\x. x’]
9169 (INST_TYPE [“:'b” |-> “:extreal”] integral_distr)) \\
9170 rw [IN_MEASURABLE_BOREL_BOREL_I, SIGMA_ALGEBRA_BOREL, o_DEF, ETA_AX])
9171 >> DISCH_TAC
9172 >> Know ‘integrable m2 (\x. x)’
9173 >- (rw [Abbr ‘m2’] \\
9174 MP_TAC (Q.SPECL [‘p’, ‘Borel’, ‘Y’, ‘\x. x’]
9175 (INST_TYPE [“:'b” |-> “:extreal”] integral_distr)) \\
9176 rw [IN_MEASURABLE_BOREL_BOREL_I, SIGMA_ALGEBRA_BOREL, o_DEF, ETA_AX])
9177 >> DISCH_TAC
9178 >> Know ‘integral m2 (\y. y * integral m1 (\x. x)) =
9179 integral m1 (\x. x) * integral m2 (\y. y)’
9180 >- (GEN_REWRITE_TAC (RATOR_CONV o ONCE_DEPTH_CONV) empty_rewrites [mul_comm] \\
9181 ‘?r. integral m1 (\x. x) = Normal r’ by PROVE_TAC [integrable_normal_integral] \\
9182 POP_ORW \\
9183 HO_MATCH_MP_TAC integral_cmul >> art [])
9184 >> Rewr'
9185 >> Know ‘(\x. x) IN measurable Borel Borel’
9186 >- (rw [IN_MEASURABLE, SIGMA_ALGEBRA_BOREL, IN_FUNSET, PREIMAGE_def] \\
9187 MATCH_MP_TAC SIGMA_ALGEBRA_INTER >> rw [SIGMA_ALGEBRA_BOREL] \\
9188 MATCH_MP_TAC SIGMA_ALGEBRA_SPACE >> rw [SIGMA_ALGEBRA_BOREL])
9189 >> DISCH_TAC
9190(* applying integral_distr, twice *)
9191 >> Know ‘integral p X = integral m1 (\x. x)’
9192 >- (MP_TAC (ISPECL [“p :'a m_space”, “Borel”, “X :'a -> extreal”,
9193 “(\x. x) :extreal -> extreal”] integral_distr) \\
9194 RW_TAC std_ss [Abbr ‘m1’, SIGMA_ALGEBRA_BOREL, o_DEF, ETA_AX])
9195 >> Rewr'
9196 >> Know ‘integral p Y = integral m2 (\y. y)’
9197 >- (MP_TAC (ISPECL [“p :'a m_space”, “Borel”, “Y :'a -> extreal”,
9198 “(\x. x) :extreal -> extreal”] integral_distr) \\
9199 RW_TAC std_ss [Abbr ‘m2’, SIGMA_ALGEBRA_BOREL, o_DEF, ETA_AX])
9200 >> Rewr
9201QED
9202
9203(* An easy corollary of Theorem 3.3.3 *)
9204Theorem indep_vars_imp_uncorrelated :
9205 !p X Y. prob_space p /\ real_random_variable X p /\ real_random_variable Y p /\
9206 finite_second_moments p X /\ finite_second_moments p Y /\
9207 indep_rv p X Y Borel Borel ==> uncorrelated p X Y
9208Proof
9209 RW_TAC std_ss [uncorrelated_def]
9210 >> MATCH_MP_TAC indep_vars_expectation >> art []
9211 >> CONJ_TAC (* 2 subgoals, same tactics *)
9212 >> MATCH_MP_TAC finite_second_moments_imp_integrable >> art []
9213QED
9214
9215Theorem pairwise_indep_vars_imp_uncorrelated :
9216 !p X A (J :'index set). prob_space p /\
9217 (!i. i IN J ==> real_random_variable (X i) p) /\
9218 (!i. i IN J ==> finite_second_moments p (X i)) /\
9219 pairwise_indep_vars p X (\n. Borel) J ==>
9220 uncorrelated_vars p X J
9221Proof
9222 RW_TAC std_ss [pairwise_indep_vars_def, uncorrelated_vars_def]
9223 >> MATCH_MP_TAC indep_vars_imp_uncorrelated
9224 >> ASM_SIMP_TAC std_ss []
9225QED
9226
9227(* another version of variance_sum for pairwise independent r.v.'s *)
9228Theorem variance_sum' :
9229 !p X (J :'index set).
9230 prob_space p /\ FINITE J /\ pairwise_indep_vars p X (\n. Borel) J /\
9231 (!i. i IN J ==> real_random_variable (X i) p) /\
9232 (!i. i IN J ==> finite_second_moments p (X i)) ==>
9233 (variance p (\x. SIGMA (\n. X n x) J) = SIGMA (\n. variance p (X n)) J)
9234Proof
9235 rpt STRIP_TAC
9236 >> Know ‘uncorrelated_vars p X J’
9237 >- (rw [uncorrelated_vars_def] \\
9238 MATCH_MP_TAC indep_vars_imp_uncorrelated >> rw [] \\
9239 fs [pairwise_indep_vars_def])
9240 >> DISCH_TAC
9241 >> MATCH_MP_TAC variance_sum >> art []
9242QED
9243
9244(* ========================================================================= *)
9245(* Condition Probability Library *)
9246(* ========================================================================= *)
9247
9248Theorem COND_PROB_ZERO :
9249 !p A B. prob_space p /\ A IN events p /\ B IN events p /\
9250 (prob p A = 0) /\ prob p B <> 0 ==> (cond_prob p A B = 0)
9251Proof
9252 RW_TAC std_ss [cond_prob_def, PROB_ZERO_INTER, zero_div]
9253QED
9254
9255Theorem COND_PROB_ZERO_INTER :
9256 !p A B. prob_space p /\ A IN events p /\ B IN events p /\
9257 (prob p (A INTER B) = 0) /\ prob p B <> 0 ==> (cond_prob p A B = 0)
9258Proof
9259 RW_TAC std_ss [cond_prob_def, zero_div]
9260QED
9261
9262Theorem COND_PROB_INCREASING :
9263 !p A B C. prob_space p /\ A IN events p /\ B IN events p /\ C IN events p /\
9264 prob p C <> 0 ==> cond_prob p (A INTER B) C <= cond_prob p A C
9265Proof
9266 RW_TAC std_ss [cond_prob_def, real_div]
9267 >> `(A INTER B INTER C) SUBSET (A INTER C)` by SET_TAC []
9268 >> `A INTER C IN events p` by METIS_TAC [EVENTS_INTER]
9269 >> `A INTER B INTER C IN events p` by METIS_TAC [EVENTS_INTER]
9270 >> `0 < prob p C` by METIS_TAC [le_lt, PROB_POSITIVE]
9271 >> MATCH_MP_TAC ldiv_le_imp
9272 >> ASM_SIMP_TAC std_ss [PROB_FINITE]
9273 >> MATCH_MP_TAC PROB_INCREASING >> art []
9274QED
9275
9276Theorem COND_PROB_POS_IMP_PROB_NZ : (* was: POS_COND_PROB_IMP_POS_PROB *)
9277 !A B p. prob_space p /\ A IN events p /\ B IN events p /\
9278 0 < cond_prob p A B /\ prob p B <> 0 ==> prob p (A INTER B) <> 0
9279Proof
9280 RW_TAC std_ss []
9281 >> `0 < prob p B` by METIS_TAC [lt_le, PROB_POSITIVE]
9282 >> FULL_SIMP_TAC std_ss [cond_prob_def]
9283 >> CCONTR_TAC >> fs []
9284 >> `0 / prob p B = 0` by METIS_TAC [zero_div]
9285 >> METIS_TAC [lt_refl]
9286QED
9287
9288Theorem COND_PROB_BOUNDS :
9289 !p A B. prob_space p /\ A IN events p /\ B IN events p /\
9290 prob p B <> 0 ==> 0 <= cond_prob p A B /\ cond_prob p A B <= 1
9291Proof
9292 rpt GEN_TAC >> STRIP_TAC
9293 >> `0 < prob p B` by METIS_TAC [lt_le, PROB_POSITIVE]
9294 >> `prob p B <> 0` by METIS_TAC [lt_le]
9295 >> `prob p B <> PosInf /\ prob p B <> NegInf` by METIS_TAC [PROB_FINITE]
9296 >> `?r. prob p B = Normal r` by METIS_TAC [extreal_cases]
9297 >> `0 < r` by METIS_TAC [extreal_of_num_def, extreal_lt_eq]
9298 >> `A INTER B IN events p` by METIS_TAC [EVENTS_INTER]
9299 >> `0 <= prob p (A INTER B)` by METIS_TAC [PROB_POSITIVE]
9300 >> REWRITE_TAC [cond_prob_def]
9301 >> CONJ_TAC
9302 >- (`(prob p (A INTER B) = 0) \/ 0 < prob p (A INTER B)` by METIS_TAC [le_lt]
9303 >- (POP_ORW >> Suff `0 / prob p B = 0` >- rw [le_refl] \\
9304 MATCH_MP_TAC zero_div >> art []) \\
9305 MATCH_MP_TAC lt_imp_le >> art [] \\
9306 MATCH_MP_TAC lt_div >> art [])
9307 >> ASM_SIMP_TAC std_ss [GSYM le_ldiv, mul_lone]
9308 >> Q.PAT_X_ASSUM `prob p B = Normal r` (ONCE_REWRITE_TAC o wrap o SYM)
9309 >> MATCH_MP_TAC PROB_INCREASING
9310 >> ASM_SIMP_TAC std_ss [INTER_SUBSET]
9311QED
9312
9313Theorem COND_PROB_FINITE : (* new *)
9314 !p A B. prob_space p /\ A IN events p /\ B IN events p /\
9315 prob p B <> 0 ==> cond_prob p A B <> PosInf /\ cond_prob p A B <> NegInf
9316Proof
9317 rpt GEN_TAC >> STRIP_TAC
9318 >> `0 <= cond_prob p A B /\ cond_prob p A B <= 1` by METIS_TAC [COND_PROB_BOUNDS]
9319 >> reverse CONJ_TAC
9320 >- (MATCH_MP_TAC pos_not_neginf >> art [])
9321 >> REWRITE_TAC [lt_infty]
9322 >> MATCH_MP_TAC let_trans
9323 >> Q.EXISTS_TAC `1` >> art [num_not_infty, GSYM lt_infty]
9324QED
9325
9326Theorem COND_PROB_ITSELF :
9327 !p B. prob_space p /\ B IN events p /\ prob p B <> 0 ==> (cond_prob p B B = 1)
9328Proof
9329 RW_TAC real_ss [cond_prob_def, INTER_IDEMPOT]
9330 >> `0 < prob p B` by METIS_TAC [le_lt, PROB_POSITIVE]
9331 >> MATCH_MP_TAC div_refl
9332 >> METIS_TAC [PROB_FINITE]
9333QED
9334
9335Theorem prob_div_mul_refl :
9336 !p A x. prob_space p /\ A IN events p /\ prob p A <> 0 ==>
9337 x / prob p A * prob p A = x
9338Proof
9339 rpt STRIP_TAC
9340 >> `prob p A <> PosInf /\ prob p A <> NegInf` by METIS_TAC [PROB_FINITE]
9341 >> `?a. prob p A = Normal a` by METIS_TAC [extreal_cases]
9342 >> ‘a <> 0’ by METIS_TAC [extreal_of_num_def, extreal_11]
9343 >> Q.PAT_X_ASSUM ‘prob p A = Normal a’ (ONCE_REWRITE_TAC o wrap)
9344 >> ONCE_REWRITE_TAC [EQ_SYM_EQ]
9345 >> MATCH_MP_TAC div_mul_refl >> art []
9346QED
9347
9348Theorem COND_PROB_COMPL :
9349 !p A B. prob_space p /\ A IN events p /\ COMPL A IN events p /\
9350 B IN events p /\ prob p B <> 0 ==>
9351 (cond_prob p (COMPL A) B = 1 - cond_prob p A B)
9352Proof
9353 RW_TAC std_ss [cond_prob_def]
9354 >> `prob p B <> PosInf /\ prob p B <> NegInf` by METIS_TAC [PROB_FINITE]
9355 >> `prob p B < PosInf` by METIS_TAC [lt_infty]
9356 >> `0 < prob p B` by METIS_TAC [le_lt, PROB_POSITIVE]
9357 >> ASM_SIMP_TAC std_ss [ldiv_eq]
9358 >> `A INTER B IN events p` by METIS_TAC [EVENTS_INTER]
9359 >> `prob p (A INTER B) <> PosInf /\
9360 prob p (A INTER B) <> NegInf` by METIS_TAC [PROB_FINITE]
9361 >> Know `prob p (A INTER B) / prob p B <> PosInf /\
9362 prob p (A INTER B) / prob p B <> NegInf`
9363 >- (`?a. prob p (A INTER B) = Normal a` by METIS_TAC [extreal_cases] \\
9364 `?b. prob p B = Normal b` by METIS_TAC [extreal_cases] \\
9365 `b <> 0` by METIS_TAC [extreal_of_num_def, extreal_11] \\
9366 ASM_SIMP_TAC std_ss [extreal_div_eq, extreal_not_infty])
9367 >> STRIP_TAC
9368 >> ASM_SIMP_TAC std_ss [sub_rdistrib, num_not_infty, mul_lone]
9369 >> Know `prob p (A INTER B) / prob p B * prob p B = prob p (A INTER B)`
9370 >- simp[prob_div_mul_refl]
9371 >> ASM_SIMP_TAC std_ss [eq_sub_ladd]
9372 >> `prob p ((COMPL A) INTER B) + prob p (A INTER B) =
9373 prob p (((COMPL A) INTER B) UNION (A INTER B))`
9374 by (ONCE_REWRITE_TAC [EQ_SYM_EQ] >> MATCH_MP_TAC PROB_ADDITIVE
9375 >> RW_TAC std_ss [EVENTS_INTER, DISJOINT_DEF, EXTENSION]
9376 >> RW_TAC std_ss [NOT_IN_EMPTY, IN_COMPL, IN_INTER] >> METIS_TAC []) >> POP_ORW
9377 >> `(COMPL A INTER B UNION A INTER B) = B`
9378 by (SET_TAC [EXTENSION, IN_INTER, IN_UNION, IN_COMPL] >> METIS_TAC [])
9379 >> RW_TAC std_ss []
9380QED
9381
9382Theorem COND_PROB_DIFF :
9383 !p A1 A2 B. prob_space p /\ A1 IN events p /\ A2 IN events p /\
9384 B IN events p /\ prob p B <> 0 ==>
9385 (cond_prob p (A1 DIFF A2) B =
9386 cond_prob p A1 B - cond_prob p (A1 INTER A2) B)
9387Proof
9388 RW_TAC std_ss [cond_prob_def]
9389 >> `(A1 DIFF A2) INTER B IN events p` by METIS_TAC [EVENTS_INTER, EVENTS_DIFF]
9390 >> `A1 INTER B IN events p` by METIS_TAC [EVENTS_INTER]
9391 >> `A1 INTER A2 INTER B IN events p` by METIS_TAC [EVENTS_INTER]
9392 >> `prob p B <> PosInf /\ prob p B <> NegInf` by METIS_TAC [PROB_FINITE]
9393 >> `prob p B < PosInf` by METIS_TAC [lt_infty]
9394 >> `0 < prob p B` by METIS_TAC [le_lt, PROB_POSITIVE]
9395 >> ASM_SIMP_TAC std_ss [ldiv_eq]
9396 >> `prob p (A1 INTER B) <> PosInf /\
9397 prob p (A1 INTER B) <> NegInf` by METIS_TAC [PROB_FINITE]
9398 >> `prob p (A1 INTER A2 INTER B) <> PosInf /\
9399 prob p (A1 INTER A2 INTER B) <> NegInf` by METIS_TAC [PROB_FINITE]
9400 >> Know `prob p (A1 INTER B) / prob p B <> PosInf /\
9401 prob p (A1 INTER B) / prob p B <> NegInf`
9402 >- (`?a. prob p (A1 INTER B) = Normal a` by METIS_TAC [extreal_cases] \\
9403 POP_ORW >> METIS_TAC [div_not_infty]) >> STRIP_TAC
9404 >> Know `prob p (A1 INTER A2 INTER B) / prob p B <> PosInf /\
9405 prob p (A1 INTER A2 INTER B) / prob p B <> NegInf`
9406 >- (`?a. prob p (A1 INTER A2 INTER B) = Normal a`
9407 by METIS_TAC [extreal_cases] >> POP_ORW \\
9408 METIS_TAC [div_not_infty]) >> STRIP_TAC
9409 >> ASM_SIMP_TAC std_ss [sub_rdistrib]
9410 >> Know `prob p (A1 INTER B) / prob p B * prob p B = prob p (A1 INTER B)`
9411 >- simp[prob_div_mul_refl]
9412 >> Know `prob p (A1 INTER A2 INTER B) / prob p B * prob p B =
9413 prob p (A1 INTER A2 INTER B)`
9414 >- simp[prob_div_mul_refl]
9415 >> ASM_SIMP_TAC std_ss [eq_sub_ladd]
9416 >> `prob p ((A1 DIFF A2) INTER B) + prob p (A1 INTER A2 INTER B) =
9417 prob p (((A1 DIFF A2) INTER B) UNION (A1 INTER A2 INTER B))`
9418 by (ONCE_REWRITE_TAC [EQ_SYM_EQ] >> MATCH_MP_TAC PROB_ADDITIVE
9419 >> RW_TAC std_ss [EVENTS_INTER, EVENTS_DIFF, DISJOINT_DEF, EXTENSION]
9420 >> RW_TAC std_ss [IN_DIFF, IN_INTER, NOT_IN_EMPTY] >> PROVE_TAC [])
9421 >> `((A1 DIFF A2) INTER B UNION A1 INTER A2 INTER B) = (A1 INTER B)`
9422 by (RW_TAC std_ss [EXTENSION, IN_INTER, IN_DIFF, IN_UNION] THEN PROVE_TAC [])
9423 >> RW_TAC std_ss []
9424QED
9425
9426Theorem COND_PROB_MUL_RULE :
9427 !p A B. prob_space p /\ A IN events p /\ B IN events p /\ prob p B <> 0 ==>
9428 (prob p (A INTER B) = (prob p B) * (cond_prob p A B))
9429Proof
9430 RW_TAC std_ss []
9431 >> `prob p B <> PosInf /\ prob p B <> NegInf` by METIS_TAC [PROB_FINITE]
9432 >> `prob p B < PosInf` by METIS_TAC [lt_infty]
9433 >> `0 < prob p B` by METIS_TAC [le_lt, PROB_POSITIVE]
9434 >> ASM_SIMP_TAC std_ss [cond_prob_def, ldiv_eq, Once mul_comm]
9435 >> `?b. prob p B = Normal b` by METIS_TAC [extreal_cases]
9436 >> `b <> 0` by METIS_TAC [extreal_of_num_def, extreal_11] >> art []
9437 >> MATCH_MP_TAC div_mul_refl >> art []
9438QED
9439
9440Theorem COND_PROB_MUL_EQ :
9441 !p A B. prob_space p /\ A IN events p /\ B IN events p /\
9442 prob p A <> 0 /\ prob p B <> 0 ==>
9443 (cond_prob p A B * prob p B = cond_prob p B A * prob p A)
9444Proof
9445 RW_TAC std_ss [cond_prob_def, Once INTER_COMM]
9446 >> `prob p A <> PosInf /\ prob p A <> NegInf` by METIS_TAC [PROB_FINITE]
9447 >> `prob p A < PosInf` by METIS_TAC [lt_infty]
9448 >> `0 < prob p A` by METIS_TAC [le_lt, PROB_POSITIVE]
9449 >> `prob p B <> PosInf /\ prob p B <> NegInf` by METIS_TAC [PROB_FINITE]
9450 >> `prob p B < PosInf` by METIS_TAC [lt_infty]
9451 >> `0 < prob p B` by METIS_TAC [le_lt, PROB_POSITIVE]
9452 >> Know `prob p (B INTER A) / prob p A * prob p A = prob p (B INTER A)`
9453 >- simp[prob_div_mul_refl]
9454 >> Know `prob p (B INTER A) / prob p B * prob p B = prob p (B INTER A)`
9455 >- simp[prob_div_mul_refl] >> rw[]
9456QED
9457
9458Theorem COND_PROB_UNION :
9459 !p A1 A2 B.
9460 prob_space p /\ A1 IN events p /\ A2 IN events p /\ B IN events p /\
9461 prob p B <> 0 ==>
9462 (cond_prob p (A1 UNION A2) B =
9463 (cond_prob p A1 B) + (cond_prob p A2 B) - (cond_prob p (A1 INTER A2) B))
9464Proof
9465 RW_TAC std_ss []
9466 >> `cond_prob p A1 B <> PosInf /\ cond_prob p A1 B <> NegInf /\
9467 cond_prob p A2 B <> PosInf /\ cond_prob p A2 B <> NegInf`
9468 by METIS_TAC [COND_PROB_FINITE]
9469 >> ASM_SIMP_TAC std_ss [Once add_comm]
9470 >> `A1 INTER A2 IN events p` by METIS_TAC [EVENTS_INTER]
9471 >> `cond_prob p (A1 INTER A2) B <> PosInf /\
9472 cond_prob p (A1 INTER A2) B <> NegInf` by METIS_TAC [COND_PROB_FINITE]
9473 >> Know `cond_prob p A2 B + cond_prob p A1 B - cond_prob p (A1 INTER A2) B =
9474 cond_prob p A2 B + (cond_prob p A1 B - cond_prob p (A1 INTER A2) B)`
9475 >- (`?a. cond_prob p A2 B = Normal a` by METIS_TAC [extreal_cases] >> POP_ORW \\
9476 `?b. cond_prob p A1 B = Normal b` by METIS_TAC [extreal_cases] >> POP_ORW \\
9477 `?c. cond_prob p (A1 INTER A2) B = Normal c` by METIS_TAC [extreal_cases] \\
9478 POP_ORW >> SIMP_TAC real_ss [extreal_add_def, extreal_sub_def, extreal_11] \\
9479 REAL_ARITH_TAC) >> Rewr'
9480 >> `cond_prob p A1 B - cond_prob p (A1 INTER A2) B = cond_prob p (A1 DIFF A2) B`
9481 by PROVE_TAC [COND_PROB_DIFF] >> POP_ORW
9482 >> `prob p B <> PosInf /\ prob p B <> NegInf` by METIS_TAC [PROB_FINITE]
9483 >> `prob p B < PosInf` by METIS_TAC [lt_infty]
9484 >> `0 < prob p B` by METIS_TAC [le_lt, PROB_POSITIVE]
9485 >> ASM_SIMP_TAC std_ss [cond_prob_def, ldiv_eq]
9486 >> Know `(prob p (A2 INTER B) / prob p B +
9487 prob p ((A1 DIFF A2) INTER B) / prob p B) * prob p B =
9488 prob p (A2 INTER B) / prob p B * prob p B +
9489 prob p ((A1 DIFF A2) INTER B) / prob p B * prob p B`
9490 >- (`?r. prob p B = Normal r` by METIS_TAC [extreal_cases] >> art [] \\
9491 MATCH_MP_TAC add_rdistrib_normal >> DISJ1_TAC \\
9492 POP_ASSUM (ONCE_REWRITE_TAC o wrap o SYM) \\
9493 REWRITE_TAC [GSYM cond_prob_def] >> art [] \\
9494 `A1 DIFF A2 IN events p` by METIS_TAC [EVENTS_DIFF] \\
9495 METIS_TAC [COND_PROB_FINITE]) >> Rewr'
9496 >> Know `prob p (A2 INTER B) / prob p B * prob p B = prob p (A2 INTER B)`
9497 >- simp[prob_div_mul_refl]
9498 >> Know `prob p ((A1 DIFF A2) INTER B) / prob p B * prob p B =
9499 prob p ((A1 DIFF A2) INTER B)`
9500 >- simp[prob_div_mul_refl]
9501 >> `(A1 UNION A2) INTER B IN events p` by METIS_TAC [EVENTS_UNION, EVENTS_INTER]
9502 >> `A2 INTER B IN events p` by METIS_TAC [EVENTS_INTER]
9503 >> `(A1 DIFF A2) INTER B IN events p` by METIS_TAC [EVENTS_INTER, EVENTS_DIFF]
9504 >> `prob p (A2 INTER B) + prob p ((A1 DIFF A2) INTER B) =
9505 prob p ((A2 INTER B) UNION ((A1 DIFF A2) INTER B))`
9506 by (ONCE_REWRITE_TAC [EQ_SYM_EQ] >> MATCH_MP_TAC PROB_ADDITIVE
9507 >> RW_TAC std_ss [EVENTS_INTER, EVENTS_DIFF, DISJOINT_DEF, EXTENSION]
9508 >> RW_TAC std_ss [IN_INTER, IN_DIFF, NOT_IN_EMPTY] >> PROVE_TAC [])
9509 >> `(A2 INTER B UNION (A1 DIFF A2) INTER B) = ((A1 UNION A2) INTER B)`
9510 by (RW_TAC std_ss [EXTENSION, IN_INTER, IN_DIFF, IN_UNION] THEN PROVE_TAC [])
9511 >> RW_TAC std_ss []
9512QED
9513
9514Theorem COND_PROB_FINITE_ADDITIVE :
9515 !p A B n s. prob_space p /\ B IN events p /\ A IN ((count n) -> events p) /\
9516 (s = BIGUNION (IMAGE A (count n))) /\ prob p B <> 0 /\
9517 (!a b. a <> b ==> DISJOINT (A a) (A b)) ==>
9518 (cond_prob p s B = SIGMA (\i. cond_prob p (A i) B) (count n))
9519Proof
9520 RW_TAC std_ss [IN_FUNSET, IN_COUNT]
9521 >> `0 <= prob p (B:'a -> bool)` by RW_TAC std_ss [PROB_POSITIVE]
9522 >> `BIGUNION (IMAGE A (count n)) IN events p` by METIS_TAC [EVENTS_BIGUNION, IN_FUNSET, IN_COUNT]
9523 >> `prob p B <> PosInf /\ prob p B <> NegInf` by METIS_TAC [PROB_FINITE]
9524 >> `prob p B < PosInf` by METIS_TAC [lt_infty]
9525 >> `0 < prob p B` by METIS_TAC [le_lt, PROB_POSITIVE]
9526 >> GEN_REWRITE_TAC (RATOR_CONV o ONCE_DEPTH_CONV) empty_rewrites [cond_prob_def]
9527 >> ASM_SIMP_TAC std_ss [ldiv_eq, Once mul_comm]
9528 >> Know `prob p B * SIGMA (\i. cond_prob p (A i) B) (count n) =
9529 SIGMA (\i. prob p B * (\i. cond_prob p (A i) B) i) (count n)`
9530 >- (`?r. prob p B = Normal r` by METIS_TAC [extreal_cases] >> POP_ORW \\
9531 MATCH_MP_TAC EQ_SYM >> irule EXTREAL_SUM_IMAGE_CMUL \\
9532 REWRITE_TAC [FINITE_COUNT] >> DISJ1_TAC \\
9533 RW_TAC std_ss [IN_COUNT] >> METIS_TAC [COND_PROB_FINITE])
9534 >> BETA_TAC >> Rewr'
9535 >> REWRITE_TAC [cond_prob_def, Once mul_comm]
9536 >> Know `!i. prob p (A i INTER B) / prob p B * prob p B = prob p (A i INTER B)`
9537 >- simp[prob_div_mul_refl] >> Rewr'
9538 >> `SIGMA (\i. prob p (A i INTER B)) (count n) = SIGMA (prob p o (\i. A i INTER B)) (count n)`
9539 by METIS_TAC [] >> POP_ORW
9540 >> Know `BIGUNION (IMAGE A (count n)) INTER B = BIGUNION (IMAGE (\i. A i INTER B) (count n))`
9541 >- (RW_TAC set_ss [INTER_COMM, INTER_BIGUNION, Once EXTENSION, IN_IMAGE] \\
9542 EQ_TAC >> rpt STRIP_TAC >| (* 3 subgoals *)
9543 [ (* goal 1 (of 3) *)
9544 rename1 `s = A i` >> Q.EXISTS_TAC `B INTER (A i)` \\
9545 reverse CONJ_TAC >- (Q.EXISTS_TAC `i` >> art []) \\
9546 METIS_TAC [IN_INTER],
9547 (* goal 2 (of 3) *)
9548 fs [IN_INTER] >> Q.EXISTS_TAC `A i` >> art [] \\
9549 Q.EXISTS_TAC `i` >> art [],
9550 (* goal 3 (of 3) *)
9551 fs [IN_INTER] ]) >> Rewr'
9552 >> MATCH_MP_TAC PROB_FINITE_ADDITIVE
9553 >> RW_TAC std_ss [IN_FUNSET, IN_COUNT, FINITE_COUNT]
9554 >- METIS_TAC [EVENTS_INTER]
9555 >> MATCH_MP_TAC DISJOINT_RESTRICT_L
9556 >> PROVE_TAC []
9557QED
9558
9559Theorem BAYES_RULE :
9560 !p A B. prob_space p /\ A IN events p /\ B IN events p /\
9561 prob p A <> 0 ==>
9562 (cond_prob p B A = (cond_prob p A B) * (prob p B) / (prob p A))
9563Proof
9564 RW_TAC std_ss []
9565 >> Cases_on ‘prob p B = 0’
9566 >- gvs[zero_div, cond_prob_def, PROB_ZERO_INTER]
9567 >> `prob p A <> PosInf /\ prob p A <> NegInf` by METIS_TAC [PROB_FINITE]
9568 >> `prob p A < PosInf` by METIS_TAC [lt_infty]
9569 >> `0 < prob p A` by METIS_TAC [le_lt, PROB_POSITIVE]
9570 >> `prob p B <> PosInf /\ prob p B <> NegInf` by METIS_TAC [PROB_FINITE]
9571 >> `prob p B < PosInf` by METIS_TAC [lt_infty]
9572 >> `0 < prob p B` by METIS_TAC [le_lt, PROB_POSITIVE]
9573 >> GEN_REWRITE_TAC (RATOR_CONV o ONCE_DEPTH_CONV) empty_rewrites [cond_prob_def]
9574 >> ASM_SIMP_TAC bool_ss [ldiv_eq]
9575 >> Know `cond_prob p A B * prob p B / prob p A * prob p A =
9576 cond_prob p A B * prob p B`
9577 >- simp[ prob_div_mul_refl]
9578 >> Rewr'
9579 >> REWRITE_TAC [cond_prob_def]
9580 >> Know `prob p (A INTER B) / prob p B * prob p B = prob p (A INTER B)`
9581 >- simp[prob_div_mul_refl] >> Rewr'
9582 >> REWRITE_TAC [Once INTER_COMM]
9583QED
9584
9585Theorem TOTAL_PROB_SIGMA :
9586 !p A B s. prob_space p /\ A IN events p /\ FINITE s /\
9587 (!x. x IN s ==> B x IN events p /\ prob p (B x) <> 0) /\
9588 (!a b. a IN s /\ b IN s /\ ~(a = b) ==> DISJOINT (B a) (B b)) /\
9589 (BIGUNION (IMAGE B s) = p_space p) ==>
9590 (prob p A = SIGMA (\i. (prob p (B i)) * (cond_prob p A (B i))) s)
9591Proof
9592 RW_TAC std_ss []
9593 >> `!x. x IN s ==> prob p (B x) <> PosInf /\
9594 prob p (B x) <> NegInf` by METIS_TAC [PROB_FINITE]
9595 >> `!x. x IN s ==> prob p (B x) < PosInf` by METIS_TAC [lt_infty]
9596 >> `!x. x IN s ==> 0 < prob p (B x)` by METIS_TAC [le_lt, PROB_POSITIVE]
9597 >> Know `SIGMA (\i. prob p (B i) * cond_prob p A (B i)) (s:'b -> bool) =
9598 SIGMA (\i. prob p (A INTER (B i))) s`
9599 >- (irule EXTREAL_SUM_IMAGE_EQ \\
9600 STRONG_CONJ_TAC
9601 >- (RW_TAC std_ss [cond_prob_def, Once mul_comm] \\
9602 MATCH_MP_TAC EQ_SYM \\
9603 `?b. prob p (B x) = Normal b` by METIS_TAC [extreal_cases] \\
9604 `b <> 0` by METIS_TAC [extreal_of_num_def, extreal_11] >> art [] \\
9605 MATCH_MP_TAC div_mul_refl >> art []) \\
9606 RW_TAC std_ss [] >> DISJ1_TAC >> GEN_TAC >> DISCH_TAC \\
9607 `A INTER B x IN events p` by METIS_TAC [EVENTS_INTER] \\
9608 METIS_TAC [PROB_FINITE]) >> Rewr'
9609 >> MATCH_MP_TAC PROB_EXTREAL_SUM_IMAGE_FN
9610 >> RW_TAC std_ss [EVENTS_INTER, INTER_IDEMPOT]
9611QED
9612
9613Theorem BAYES_RULE_GENERAL_SIGMA :
9614 !p A B s k. prob_space p /\ A IN events p /\ prob p A <> 0 /\ FINITE s /\
9615 (!x . x IN s ==> B x IN events p /\ prob p (B x) <> 0) /\
9616 k IN s /\ (!a b. a IN s /\ b IN s /\ ~(a = b) ==> DISJOINT (B a) (B b)) /\
9617 (BIGUNION (IMAGE B s) = p_space p) ==>
9618 (cond_prob p (B k) A = ((cond_prob p A (B k)) * prob p (B k)) /
9619 (SIGMA (\i. (prob p (B i)) * (cond_prob p A (B i)))) s)
9620Proof
9621 RW_TAC std_ss [GSYM TOTAL_PROB_SIGMA]
9622 >> MATCH_MP_TAC BAYES_RULE
9623 >> RW_TAC std_ss []
9624QED
9625
9626Theorem COND_PROB_ADDITIVE :
9627 !p A B s. prob_space p /\ FINITE s /\ B IN events p /\
9628 (!x. x IN s ==> A x IN events p) /\ prob p B <> 0 /\
9629 (!x y. x IN s /\ y IN s /\ x <> y ==> DISJOINT (A x) (A y)) /\
9630 (BIGUNION (IMAGE A s) = p_space p) ==>
9631 (SIGMA (\i. cond_prob p (A i) B) s = 1)
9632Proof
9633 RW_TAC std_ss []
9634 >> `prob p B <> PosInf /\ prob p B <> NegInf` by METIS_TAC [PROB_FINITE]
9635 >> `prob p B < PosInf` by METIS_TAC [lt_infty]
9636 >> `0 < prob p B` by METIS_TAC [le_lt, PROB_POSITIVE]
9637 >> `(SIGMA (\i. cond_prob p (A i) B) (s:'b -> bool) = 1) <=>
9638 (prob p B * SIGMA (\i. cond_prob p (A i) B) s = prob p B * 1)`
9639 by METIS_TAC [mul_lcancel] >> POP_ORW
9640 >> Know `prob p B * SIGMA (\i. cond_prob p (A i) B) (s:'b -> bool) =
9641 SIGMA (\i. prob p B * (\i. cond_prob p (A i) B) i) s`
9642 >- (`?r. prob p B = Normal r` by METIS_TAC [extreal_cases] >> POP_ORW \\
9643 MATCH_MP_TAC EQ_SYM >> irule EXTREAL_SUM_IMAGE_CMUL \\
9644 RW_TAC std_ss [COND_PROB_FINITE]) >> BETA_TAC >> Rewr'
9645 >> RW_TAC std_ss [cond_prob_def, Once mul_comm]
9646 >> Know `!i. prob p (A i INTER B) / prob p B * prob p B = prob p (A i INTER B)`
9647 >- (GEN_TAC >> simp[prob_div_mul_refl]) >> Rewr'
9648 >> REWRITE_TAC [mul_rone, Once EQ_SYM_EQ, Once INTER_COMM]
9649 >> MATCH_MP_TAC PROB_EXTREAL_SUM_IMAGE_FN
9650 >> RW_TAC std_ss [INTER_IDEMPOT, EVENTS_INTER]
9651QED
9652
9653Theorem COND_PROB_SWAP :
9654 !p A B C.
9655 prob_space p /\ A IN events p /\ B IN events p /\ C IN events p /\
9656 prob p (B INTER C) <> 0 /\ prob p (A INTER C) <> 0 ==>
9657 (cond_prob p A (B INTER C) * cond_prob p B C =
9658 cond_prob p B (A INTER C) * cond_prob p A C)
9659Proof
9660 RW_TAC std_ss []
9661 >> `B INTER C IN events p` by METIS_TAC [EVENTS_INTER]
9662 >> `A INTER B IN events p` by METIS_TAC [EVENTS_INTER]
9663 >> `A INTER C IN events p` by METIS_TAC [EVENTS_INTER]
9664 >> Know `prob p C <> 0`
9665 >- (CCONTR_TAC >> fs [] \\
9666 `0 < prob p (B INTER C)` by METIS_TAC [PROB_POSITIVE, le_lt] \\
9667 Know `prob p (B INTER C) <= prob p C`
9668 >- (MATCH_MP_TAC PROB_INCREASING >> ASM_SET_TAC [EVENTS_INTER]) \\
9669 DISCH_TAC >> METIS_TAC [lte_trans, lt_refl]) >> DISCH_TAC
9670 >> RW_TAC std_ss [cond_prob_def]
9671 >> `A INTER (B INTER C) = B INTER (A INTER C)`
9672 by METIS_TAC [GSYM INTER_ASSOC, INTER_COMM] >> POP_ORW
9673 >> `B INTER (A INTER C) IN events p` by METIS_TAC [EVENTS_INTER]
9674 >> `?a. prob p (B INTER (A INTER C)) = Normal a` by METIS_TAC [PROB_FINITE, extreal_cases]
9675 >> `?b. prob p (B INTER C) = Normal b` by METIS_TAC [PROB_FINITE, extreal_cases]
9676 >> `?c. prob p (A INTER C) = Normal c` by METIS_TAC [PROB_FINITE, extreal_cases]
9677 >> `?d. prob p C = Normal d` by METIS_TAC [PROB_FINITE, extreal_cases]
9678 >> `b <> 0 /\ c <> 0 /\ d <> 0` by METIS_TAC [extreal_of_num_def, extreal_11]
9679 >> ASM_SIMP_TAC std_ss [extreal_mul_def, extreal_div_eq, extreal_11]
9680 >> `!(a:real) b c d. a * b * (c * d) = a * (b * c) * d` by METIS_TAC [REAL_MUL_ASSOC]
9681 >> RW_TAC std_ss [real_div, REAL_MUL_LINV, REAL_MUL_LID, REAL_MUL_RID]
9682QED
9683
9684Theorem PROB_INTER_SPLIT :
9685 !p A B C.
9686 prob_space p /\ A IN events p /\ B IN events p /\ C IN events p /\
9687 prob p (B INTER C) <> 0 ==>
9688 (prob p (A INTER B INTER C) =
9689 cond_prob p A (B INTER C) * cond_prob p B C * prob p C)
9690Proof
9691 RW_TAC std_ss []
9692 >> `B INTER C IN events p` by METIS_TAC [EVENTS_INTER]
9693 >> `A INTER B IN events p` by METIS_TAC [EVENTS_INTER]
9694 >> Know `prob p C <> 0`
9695 >- (CCONTR_TAC >> fs [] \\
9696 `0 < prob p (B INTER C)` by METIS_TAC [PROB_POSITIVE, le_lt] \\
9697 Know `prob p (B INTER C) <= prob p C`
9698 >- (MATCH_MP_TAC PROB_INCREASING >> ASM_SET_TAC [EVENTS_INTER]) \\
9699 DISCH_TAC >> METIS_TAC [lte_trans, lt_refl]) >> DISCH_TAC
9700 >> RW_TAC std_ss [cond_prob_def]
9701 >> `A INTER (B INTER C) = A INTER B INTER C` by SET_TAC [] >> POP_ORW
9702 >> `A INTER B INTER C IN events p` by METIS_TAC [EVENTS_INTER]
9703 >> `?a. prob p (A INTER B INTER C) = Normal a` by METIS_TAC [PROB_FINITE, extreal_cases]
9704 >> `?b. prob p (B INTER C) = Normal b` by METIS_TAC [PROB_FINITE, extreal_cases]
9705 >> `?c. prob p C = Normal c` by METIS_TAC [PROB_FINITE, extreal_cases]
9706 >> `b <> 0 /\ c <> 0` by METIS_TAC [extreal_of_num_def, extreal_11]
9707 >> ASM_SIMP_TAC std_ss [extreal_mul_def, extreal_div_eq, extreal_11]
9708 >> `!(a:real) b c d e. a * b * (c * d) * e = a * (b * c) * (d * e)` by METIS_TAC [REAL_MUL_ASSOC]
9709 >> RW_TAC std_ss [real_div, REAL_MUL_LINV, REAL_MUL_LID, REAL_MUL_RID]
9710QED
9711
9712Theorem COND_PROB_INTER_SPLIT :
9713 !p A B C.
9714 prob_space p /\ A IN events p /\ B IN events p /\ C IN events p /\
9715 prob p (B INTER C) <> 0 ==>
9716 (cond_prob p (A INTER B) C = cond_prob p A (B INTER C) * cond_prob p B C)
9717Proof
9718 RW_TAC std_ss []
9719 >> `B INTER C IN events p` by METIS_TAC [EVENTS_INTER]
9720 >> Know `prob p C <> 0`
9721 >- (CCONTR_TAC >> fs [] \\
9722 `0 < prob p (B INTER C)` by METIS_TAC [PROB_POSITIVE, le_lt] \\
9723 Know `prob p (B INTER C) <= prob p C`
9724 >- (MATCH_MP_TAC PROB_INCREASING >> ASM_SET_TAC [EVENTS_INTER]) \\
9725 DISCH_TAC >> METIS_TAC [lte_trans, lt_refl]) >> DISCH_TAC
9726 >> RW_TAC std_ss [cond_prob_def]
9727 >> `A INTER (B INTER C) = A INTER B INTER C` by SET_TAC [] >> POP_ORW
9728 >> `A INTER B INTER C IN events p` by METIS_TAC [EVENTS_INTER]
9729 >> `?a. prob p (A INTER B INTER C) = Normal a` by METIS_TAC [PROB_FINITE, extreal_cases]
9730 >> `?b. prob p (B INTER C) = Normal b` by METIS_TAC [PROB_FINITE, extreal_cases]
9731 >> `?c. prob p C = Normal c` by METIS_TAC [PROB_FINITE, extreal_cases]
9732 >> `b <> 0 /\ c <> 0` by METIS_TAC [extreal_of_num_def, extreal_11]
9733 >> ASM_SIMP_TAC std_ss [extreal_mul_def, extreal_div_eq, extreal_11]
9734 >> `!(x:real) y z w. x * y * (z * w) = x * (y * z) * w`
9735 by METIS_TAC [REAL_MUL_ASSOC, REAL_MUL_COMM]
9736 >> RW_TAC std_ss [real_div, REAL_MUL_LINV, REAL_MUL_RID]
9737QED
9738
9739(* ========================================================================= *)
9740(* Additional theorems of conditional probabilities on independent events *)
9741(* ========================================================================= *)
9742
9743Theorem indep_alt_cond_prob :
9744 !p A B. prob_space p /\ A IN events p /\ B IN events p /\ prob p B <> 0 ==>
9745 (indep p A B <=> cond_prob p A B = prob p A)
9746Proof
9747 rw [indep_def]
9748 >> rw [COND_PROB_MUL_RULE, Once mul_comm]
9749 >> Suff ‘cond_prob p A B * prob p B = prob p A * prob p B <=>
9750 prob p B = 0 \/ cond_prob p A B = prob p A’ >- rw []
9751 >> MATCH_MP_TAC mul_rcancel >> rw [PROB_FINITE]
9752QED
9753
9754(* ========================================================================= *)
9755(* Probability Density Function (PDF) *)
9756(* (see examples/probability/distributionScript.sml for ‘lborel’ version) *)
9757(* ========================================================================= *)
9758
9759(* This is the recommmended ext_lborel version (was: pdf) *)
9760Definition prob_density_function_def :
9761 prob_density_function p X = RN_deriv (distribution p X) ext_lborel
9762End
9763Overload pdf[local] = “prob_density_function”
9764
9765(* local backward compatibility *)
9766Theorem pdf_def[local] = prob_density_function_def
9767
9768Theorem pdf_le_pos :
9769 !p X x. prob_space p /\ random_variable X p Borel /\
9770 distribution p X << ext_lborel ==> 0 <= pdf p X x
9771Proof
9772 rpt STRIP_TAC
9773 >> `measure_space (space Borel, subsets Borel, distribution p X)`
9774 by PROVE_TAC [distribution_prob_space, prob_space_def, SIGMA_ALGEBRA_BOREL]
9775 >> ASSUME_TAC sigma_finite_ext_lborel
9776 >> ASSUME_TAC measure_space_ext_lborel
9777 >> MP_TAC (ISPECL [(* m *) ``ext_lborel``,
9778 (* v *) ``distribution (p :'a m_space) (X :'a -> extreal)``]
9779 Radon_Nikodym')
9780 >> rw [ext_lborel_def]
9781 >> fs [pdf_def, RN_deriv_def, ext_lborel_def, SPACE]
9782 >> SELECT_ELIM_TAC
9783 >> METIS_TAC [SPACE_BOREL, IN_UNIV]
9784QED
9785
9786Theorem expectation_pdf[local] :
9787 !p X. prob_space p /\ random_variable X p Borel /\
9788 distribution p X << ext_lborel ==>
9789 pdf p X IN Borel_measurable Borel /\
9790 expectation ext_lborel (pdf p X) = 1
9791Proof
9792 rpt GEN_TAC >> STRIP_TAC
9793 >> `prob_space (space Borel, subsets Borel, distribution p X)`
9794 by PROVE_TAC [distribution_prob_space, SIGMA_ALGEBRA_BOREL]
9795 >> NTAC 2 (POP_ASSUM MP_TAC) >> KILL_TAC
9796 >> simp [prob_space_def, p_space_def, m_space_def, measure_def, expectation_def]
9797 >> NTAC 2 STRIP_TAC
9798 >> ASSUME_TAC sigma_finite_ext_lborel
9799 >> ASSUME_TAC measure_space_ext_lborel
9800 >> MP_TAC (ISPECL [(* m *) ``ext_lborel``,
9801 (* v *) ``distribution (p :'a m_space) (X :'a -> extreal)``]
9802 Radon_Nikodym')
9803 >> fs [pdf_def, RN_deriv_def, SPACE, ext_lborel_def]
9804 >> STRIP_TAC
9805 >> SELECT_ELIM_TAC
9806 >> CONJ_TAC >- METIS_TAC []
9807 >> Q.X_GEN_TAC `g`
9808 >> STRIP_TAC
9809 >> fs [density_measure_def]
9810 >> POP_ASSUM (MP_TAC o Q.SPEC `space Borel`)
9811 >> Know `space Borel IN subsets Borel`
9812 >- (MATCH_MP_TAC SIGMA_ALGEBRA_SPACE \\
9813 REWRITE_TAC [SIGMA_ALGEBRA_BOREL])
9814 >> RW_TAC std_ss []
9815 >> fs [GSYM ext_lborel_def]
9816 >> Know `integral ext_lborel g = pos_fn_integral ext_lborel g`
9817 >- (MATCH_MP_TAC integral_pos_fn >> art [] \\
9818 rw [ext_lborel_def]) >> Rewr'
9819 >> Know `pos_fn_integral ext_lborel g =
9820 pos_fn_integral ext_lborel (\x. g x * indicator_fn (space Borel) x)`
9821 >- (MATCH_MP_TAC pos_fn_integral_cong \\
9822 rw [indicator_fn_def, mul_rone, mul_rzero, le_refl, SPACE_BOREL])
9823 >> DISCH_THEN (art o wrap)
9824QED
9825
9826(* |- !p X.
9827 prob_space p /\ random_variable X p Borel /\
9828 distribution p X << ext_lborel ==>
9829 expectation ext_lborel (pdf p X) = 1
9830 *)
9831Theorem expectation_pdf_1 = cj 2 expectation_pdf
9832
9833(* |- !p X.
9834 prob_space p /\ random_variable X p Borel /\
9835 distribution p X << ext_lborel ==>
9836 pdf p X IN Borel_measurable Borel
9837 *)
9838Theorem pdf_in_measurable_borel = cj 1 expectation_pdf
9839
9840(* ========================================================================= *)
9841(* Two canonical probability spaces *)
9842(* ========================================================================= *)
9843
9844Theorem prob_space_lborel_01 :
9845 prob_space (restrict_space lborel (interval [0,1]))
9846Proof
9847 rw [prob_space_def]
9848 >- (MATCH_MP_TAC measure_space_restrict_space \\
9849 rw [lborel_def, sets_lborel] \\
9850 rw [borel_measurable_sets, CLOSED_interval])
9851 >> simp [space_restrict_space]
9852 >> rw [restrict_space, measure_def, m_space_def, space_lborel,
9853 lambda_closed_interval]
9854QED
9855
9856Theorem prob_space_lborel_01' :
9857 prob_space (restrict_space lborel (interval (0,1)))
9858Proof
9859 rw [prob_space_def]
9860 >- (MATCH_MP_TAC measure_space_restrict_space \\
9861 rw [lborel_def, sets_lborel] \\
9862 rw [borel_measurable_sets, OPEN_interval])
9863 >> simp [space_restrict_space]
9864 >> rw [restrict_space, measure_def, m_space_def, space_lborel,
9865 lambda_open_interval]
9866QED
9867
9868Theorem prob_space_ext_lborel_01 :
9869 prob_space (restrict_space ext_lborel {x | 0 <= x /\ x <= 1})
9870Proof
9871 rw [prob_space_def]
9872 >- (MATCH_MP_TAC measure_space_restrict_space \\
9873 rw [measure_space_ext_lborel] \\
9874 rw [ext_lborel_def, measurable_sets_def] \\
9875 rw [BOREL_MEASURABLE_SETS])
9876 >> simp [space_restrict_space]
9877 >> rw [restrict_space, measure_def, ext_lborel_def, m_space_def, SPACE_BOREL]
9878 >> Suff ‘real_set {x | 0 <= x /\ x <= 1} = interval [0,1]’
9879 >- rw [lambda_closed_interval]
9880 >> rw [Once EXTENSION, real_set_def, CLOSED_interval]
9881 >> EQ_TAC >> rw []
9882 >| [ (* goal 1 (of 3) *)
9883 rename1 ‘z <= 1’ \\
9884 ‘?r. 0 <= r /\ r <= 1 /\ z = Normal r’
9885 by METIS_TAC [extreal_cases, extreal_of_num_def, extreal_le_eq] \\
9886 rw [real_def],
9887 (* goal 2 (of 3) *)
9888 rename1 ‘0 <= z’ \\
9889 ‘?r. 0 <= r /\ r <= 1 /\ z = Normal r’
9890 by METIS_TAC [extreal_cases, extreal_of_num_def, extreal_le_eq] \\
9891 rw [real_def],
9892 (* goal 3 (of 3) *)
9893 Q.EXISTS_TAC ‘Normal x’ >> rw [] ]
9894QED
9895
9896Theorem prob_space_ext_lborel_01' :
9897 prob_space (restrict_space ext_lborel {x | 0 < x /\ x < 1})
9898Proof
9899 rw [prob_space_def]
9900 >- (MATCH_MP_TAC measure_space_restrict_space \\
9901 rw [measure_space_ext_lborel] \\
9902 rw [ext_lborel_def, measurable_sets_def] \\
9903 rw [BOREL_MEASURABLE_SETS])
9904 >> simp [space_restrict_space]
9905 >> rw [restrict_space, measure_def, ext_lborel_def, m_space_def, SPACE_BOREL]
9906 >> Suff ‘real_set {x | 0 < x /\ x < 1} = interval (0,1)’
9907 >- rw [lambda_open_interval]
9908 >> rw [Once EXTENSION, real_set_def, OPEN_interval]
9909 >> EQ_TAC >> rw []
9910 >| [ (* goal 1 (of 3) *)
9911 rename1 ‘z < 1’ \\
9912 ‘?r. 0 < r /\ r < 1 /\ z = Normal r’
9913 by METIS_TAC [extreal_cases, extreal_of_num_def, extreal_lt_eq] \\
9914 rw [real_def],
9915 (* goal 2 (of 3) *)
9916 rename1 ‘0 < z’ \\
9917 ‘?r. 0 < r /\ r < 1 /\ z = Normal r’
9918 by METIS_TAC [extreal_cases, extreal_of_num_def, extreal_lt_eq] \\
9919 rw [real_def],
9920 (* goal 3 (of 3) *)
9921 Q.EXISTS_TAC ‘Normal x’ >> rw [] ]
9922QED
9923
9924Theorem existence_of_prod_prob_space :
9925 !p1 p2. prob_space p1 /\ prob_space p2 ==>
9926 ?p. p = p1 CROSS p2 /\ prob_space p /\
9927 !e1 e2. e1 IN events p1 /\ e2 IN events p2 ==>
9928 e1 CROSS e2 IN events p /\
9929 prob p (e1 CROSS e2) = prob p1 e1 * prob p2 e2
9930Proof
9931 rpt STRIP_TAC
9932 >> ‘sigma_finite_measure_space p1 /\
9933 sigma_finite_measure_space p2’
9934 by PROVE_TAC [prob_space_def, PROB_SPACE_SIGMA_FINITE,
9935 sigma_finite_measure_space_def]
9936 >> Q.EXISTS_TAC ‘p1 CROSS p2’ >> simp []
9937 >> reverse CONJ_TAC
9938 >- (rw [prod_measure_space_def, prob_def, events_def]
9939 >- (rw [prod_sigma_def] \\
9940 MATCH_MP_TAC IN_SIGMA \\
9941 rw [prod_sets_def] \\
9942 qexistsl_tac [‘e1’, ‘e2’] >> art []) \\
9943 MATCH_MP_TAC PROD_MEASURE_CROSS \\
9944 fs [prob_space_def])
9945 >> rw [prob_space_def]
9946 >- (MATCH_MP_TAC measure_space_prod_measure >> art [])
9947 >> rw [prod_measure_space_def]
9948 >> Know ‘prod_measure p1 p2 (m_space p1 CROSS m_space p2) =
9949 measure p1 (m_space p1) * measure p2 (m_space p2)’
9950 >- (MATCH_MP_TAC PROD_MEASURE_CROSS \\
9951 fs [prob_space_def] \\
9952 rw [MEASURE_SPACE_MSPACE_MEASURABLE])
9953 >> Rewr'
9954 >> simp [GSYM prob_def, GSYM p_space_def, PROB_UNIV]
9955QED
9956
9957Theorem prob_space_eq :
9958 !p1 p2. prob_space p1 /\ p_space p2 = p_space p1 /\ events p2 = events p1 /\
9959 (!s. s IN events p2 ==> prob p2 s = prob p1 s) ==> prob_space p2
9960Proof
9961 rpt GEN_TAC
9962 >> simp [prob_space_def, p_space_def, events_def, prob_def]
9963 >> STRIP_TAC
9964 >> CONJ_ASM1_TAC
9965 >- (MATCH_MP_TAC measure_space_eq \\
9966 Q.EXISTS_TAC ‘p1’ >> rw [])
9967 >> Suff ‘measure p2 (m_space p1) = measure p1 (m_space p1)’ >- rw []
9968 >> FIRST_X_ASSUM MATCH_MP_TAC
9969 >> Q.PAT_X_ASSUM ‘_ = m_space p1’ (REWRITE_TAC o wrap o SYM)
9970 >> MATCH_MP_TAC MEASURE_SPACE_SPACE >> art []
9971QED
9972
9973Theorem prob_space_cong :
9974 !sp sts u v. (!s. s IN sts ==> u s = v s) ==>
9975 (prob_space (sp,sts,u) <=> prob_space (sp,sts,v))
9976Proof
9977 rw [prob_space_def, p_space_def, events_def, prob_def]
9978 >> Know ‘measure_space (sp,sts,u) <=> measure_space (sp,sts,v)’
9979 >- (MATCH_MP_TAC measure_space_cong >> art [])
9980 >> Rewr'
9981 >> Cases_on ‘measure_space (sp,sts,v)’ >> simp []
9982 >> Suff ‘u sp = v sp’ >- rw []
9983 >> FIRST_X_ASSUM MATCH_MP_TAC
9984 >> qabbrev_tac ‘m = (sp,sts,v)’
9985 >> ‘sp = m_space m /\ sts = measurable_sets m’ by simp [Abbr ‘m’]
9986 >> simp [MEASURE_SPACE_SPACE]
9987QED
9988
9989Theorem converge_in_dist_cong_full:
9990 ∀p X Y A B m.
9991 prob_space p ∧
9992 (∀n x. m ≤ n ∧ x ∈ p_space p ⇒ X n x = Y n x) ∧
9993 (∀x. x ∈ p_space p ⇒ A x = B x) ⇒
9994 ((X ⟶ A) (in_distribution p) ⇔ (Y ⟶ B) (in_distribution p))
9995Proof
9996 rw [converge_in_dist_def, EXTREAL_LIM_SEQUENTIALLY]
9997 >> EQ_TAC >> rw []
9998 >> Q.PAT_X_ASSUM ‘∀f. f ∈ C_b ext_euclidean ⇒ _’ (STRIP_ASSUME_TAC o Q.SPEC ‘f’)
9999 >> gvs []
10000 >> POP_ASSUM (MP_TAC o (Q.SPEC ‘e’)) >> rw []
10001 >> Q.EXISTS_TAC ‘MAX N m’ >> rw [MAX_LE]
10002 >> Q.PAT_X_ASSUM ‘∀n. N ≤ n ⇒ _’(MP_TAC o (Q.SPEC ‘n’)) >> rw []
10003 >> ‘expectation p (Normal ∘ f ∘ Y n) = expectation p (Normal ∘ f ∘ X n)’
10004 by (irule expectation_cong >> METIS_TAC[o_DEF, extreal_11])
10005 >> ‘expectation p (Normal ∘ f ∘ B) = expectation p (Normal ∘ f ∘ A)’
10006 by (irule expectation_cong >> METIS_TAC[o_DEF, extreal_11])
10007 >> fs []
10008QED
10009
10010Theorem converge_in_dist_cong:
10011 ∀p X Y Z m.
10012 prob_space p ∧
10013 (∀n x. m ≤ n ∧ x ∈ p_space p ⇒ X n x = Y n x) ⇒
10014 ((X ⟶ Z) (in_distribution p) ⇔ (Y ⟶ Z) (in_distribution p))
10015Proof
10016 rpt STRIP_TAC
10017 >> MATCH_MP_TAC converge_in_dist_cong_full
10018 >> Q.EXISTS_TAC ‘m’ >> rw []
10019QED
10020
10021(* tidy up theory exports, learnt from Magnus Myreen *)
10022val _ = List.app Theory.delete_binding
10023 ["convergence_mode_TY_DEF",
10024 "convergence_mode_case_def",
10025 "convergence_mode_size_def",
10026 "convergence_mode_11",
10027 "convergence_mode_Axiom",
10028 "convergence_mode_case_cong",
10029 "convergence_mode_case_eq",
10030 "convergence_mode_distinct",
10031 "convergence_mode_induction",
10032 "convergence_mode_nchotomy",
10033 "datatype_convergence_mode",
10034 "converge_def"];
10035
10036(* References:
10037
10038 [1] Kolmogorov, A.N.: Foundations of the Theory of Probability (Grundbegriffe der
10039 Wahrscheinlichkeitsrechnung). Chelsea Publishing Company, New York. (1950).
10040 [2] Chung, K.L.: A Course in Probability Theory, Third Edition.
10041 Academic Press (2001).
10042 [3] Rosenthal, J.S.: A First Look at Rigorous Probability Theory (Second Edition).
10043 World Scientific Publishing Company (2006).
10044 [4] Shiryaev, A.N.: Probability-1. Springer-Verlag New York (2016).
10045 [5] Shiryaev, A.N.: Probability-2. Springer-Verlag New York (2019).
10046 [6] Billingsley, P.: Probability and Measure (Third Edition).
10047 Wiley-Interscience (1995).
10048 [7] Hurd, J.: Formal verification of probabilistic algorithms.
10049 University of Cambridge (2003). UCAM-CL-TR-566
10050 [8] Coble, A.R.: Anonymity, information, and machine-assisted proof.
10051 University of Cambridge (2010). UCAM-CL-TR-785
10052 [9] Schilling, R.L.: Measures, Integrals and Martingales (Second Edition).
10053 Cambridge University Press (2017).
10054 [10] Mhamdi, T., Hasan, O., Tahar, S.: Formalization of Measure Theory and Lebesgue
10055 Integration for Probabilistic Analysis in HOL.
10056 ACM Trans. Embedded Comput. Syst. 12, 1-23 (2013). DOI:10.1145/2406336.2406349
10057 [11] Qasim, M.: Formalization of Normal Random Variables,
10058 Concordia University (2016).
10059 *)