Skip to content

Commit aaef121

Browse files
Jared Yeagermn200
authored andcommitted
Measurable function results to canonise.
1 parent 6508633 commit aaef121

File tree

3 files changed

+288
-0
lines changed

3 files changed

+288
-0
lines changed

src/probability/borelScript.sml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8934,6 +8934,19 @@ Proof
89348934
MATCH_MP_TAC borel_measurable_real_set >> art [] ]
89358935
QED
89368936

8937+
(* A different version of this also exists in Martingale,
8938+
but it can proved here, and this form is more consistent with other results.
8939+
- Jared
8940+
*)
8941+
8942+
Theorem IN_MEASURABLE_BOREL_FROM_PROD_SIGMA':
8943+
∀a b f. sigma_algebra a ∧ sigma_algebra b ∧ f ∈ Borel_measurable (a × b) ⇒
8944+
(∀y. y ∈ space b ⇒ (λx. f (x,y)) ∈ Borel_measurable a) ∧
8945+
(∀x. x ∈ space a ⇒ (λy. f (x,y)) ∈ Borel_measurable b)
8946+
Proof
8947+
rpt gen_tac >> DISCH_TAC >> irule IN_MEASURABLE_FROM_PROD_SIGMA >> simp[SIGMA_ALGEBRA_BOREL]
8948+
QED
8949+
89378950
(* References:
89388951
89398952
[1] Schilling, R.L.: Measures, Integrals and Martingales (Second Edition).

src/probability/real_borelScript.sml

Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3997,6 +3997,165 @@ Proof
39973997
MATCH_MP_TAC hyperbola_lemma4 >> art [] ] ]
39983998
QED
39993999

4000+
(* ------------------------------------------------------------------------- *)
4001+
(* More Measurability Results *)
4002+
(* ------------------------------------------------------------------------- *)
4003+
4004+
(*
4005+
These are the results from my own accumulated library for borel measurable functions
4006+
that I believe stand on their own as something useful for future users.
4007+
- Jared Yeager
4008+
*)
4009+
4010+
(* This first batch of results has to do with sets derived from borel measurable
4011+
functions being measurable sets
4012+
*)
4013+
4014+
Theorem in_borel_measurable_ge_imp:
4015+
∀a f. sigma_algebra a ∧ f ∈ borel_measurable a ⇒
4016+
∀c. {x | c ≤ f x} ∩ space a ∈ subsets a
4017+
Proof
4018+
rw[] >> drule_all_then mp_tac $ cj 2 $ SRULE [AND_IMP_INTRO] $ iffLR in_borel_measurable_ge >>
4019+
rw[INTER_DEF] >> pop_assum $ qspec_then ‘c’ mp_tac >>
4020+
qmatch_goalsub_abbrev_tac ‘s ∈ _ ⇒ t ∈ _’ >> ‘s = t’ suffices_by simp[] >>
4021+
simp[EXTENSION,Abbr ‘s’,Abbr ‘t’] >> metis_tac[]
4022+
QED
4023+
4024+
Theorem in_borel_measurable_gt_imp:
4025+
∀a f. sigma_algebra a ∧ f ∈ borel_measurable a ⇒
4026+
∀c. {x | c < f x} ∩ space a ∈ subsets a
4027+
Proof
4028+
rw[] >> drule_all_then mp_tac $ cj 2 $ SRULE [AND_IMP_INTRO] $ iffLR in_borel_measurable_gr >>
4029+
rw[INTER_DEF] >> pop_assum $ qspec_then ‘c’ mp_tac >>
4030+
qmatch_goalsub_abbrev_tac ‘s ∈ _ ⇒ t ∈ _’ >> ‘s = t’ suffices_by simp[] >>
4031+
simp[EXTENSION,Abbr ‘s’,Abbr ‘t’] >> metis_tac[]
4032+
QED
4033+
4034+
Theorem in_borel_measurable_le_imp:
4035+
∀a f. sigma_algebra a ∧ f ∈ borel_measurable a ⇒
4036+
∀c. {x | f x ≤ c} ∩ space a ∈ subsets a
4037+
Proof
4038+
rw[] >> drule_all_then mp_tac $ cj 2 $ SRULE [AND_IMP_INTRO] $ iffLR in_borel_measurable_le >>
4039+
rw[INTER_DEF] >> pop_assum $ qspec_then ‘c’ mp_tac >>
4040+
qmatch_goalsub_abbrev_tac ‘s ∈ _ ⇒ t ∈ _’ >> ‘s = t’ suffices_by simp[] >>
4041+
simp[EXTENSION,Abbr ‘s’,Abbr ‘t’] >> metis_tac[]
4042+
QED
4043+
4044+
Theorem in_borel_measurable_lt_imp:
4045+
∀a f. sigma_algebra a ∧ f ∈ borel_measurable a ⇒
4046+
∀c. {x | f x < c} ∩ space a ∈ subsets a
4047+
Proof
4048+
rw[] >> drule_all_then mp_tac $ cj 2 $ SRULE [AND_IMP_INTRO] $ iffLR in_borel_measurable_less >>
4049+
rw[INTER_DEF] >> pop_assum $ qspec_then ‘c’ mp_tac >>
4050+
qmatch_goalsub_abbrev_tac ‘s ∈ _ ⇒ t ∈ _’ >> ‘s = t’ suffices_by simp[] >>
4051+
simp[EXTENSION,Abbr ‘s’,Abbr ‘t’] >> metis_tac[]
4052+
QED
4053+
4054+
Theorem in_borel_measurable_le2_imp:
4055+
∀a f g. sigma_algebra a ∧ f ∈ borel_measurable a ∧ g ∈ borel_measurable a ⇒
4056+
{x | f x ≤ g x} ∩ space a ∈ subsets a
4057+
Proof
4058+
rw[] >> qspecl_then [‘a’,‘f’,‘g’] mp_tac in_borel_measurable_le2 >> simp[INTER_DEF] >>
4059+
qmatch_goalsub_abbrev_tac ‘s ∈ _ ⇒ t ∈ _’ >> ‘s = t’ suffices_by simp[] >>
4060+
simp[EXTENSION,Abbr ‘s’,Abbr ‘t’] >> metis_tac[]
4061+
QED
4062+
4063+
Theorem in_borel_measurable_lt2_imp:
4064+
∀a f g. sigma_algebra a ∧ f ∈ borel_measurable a ∧ g ∈ borel_measurable a ⇒
4065+
{x | f x < g x} ∩ space a ∈ subsets a
4066+
Proof
4067+
rw[] >> qspecl_then [‘a’,‘f’,‘g’] mp_tac in_borel_measurable_lt2 >> simp[INTER_DEF] >>
4068+
qmatch_goalsub_abbrev_tac ‘s ∈ _ ⇒ t ∈ _’ >> ‘s = t’ suffices_by simp[] >>
4069+
simp[EXTENSION,Abbr ‘s’,Abbr ‘t’] >> metis_tac[]
4070+
QED
4071+
4072+
(* This second batch of results has to do with functions being borel measurable *)
4073+
4074+
(* name conflict *)
4075+
Theorem in_borel_measurable_ainv':
4076+
∀a f g. sigma_algebra a ∧ f ∈ borel_measurable a ∧
4077+
(∀x. x ∈ space a ⇒ g x = -f x) ⇒ g ∈ borel_measurable a
4078+
Proof
4079+
rw[] >> irule $ INST_TYPE [“:β”|->“:γ”] IN_MEASURABLE_COMP >>
4080+
qexistsl [‘borel’,‘f’,‘λx. -x’] >> simp[] >>
4081+
irule in_borel_measurable_mul >> simp[sigma_algebra_borel,space_borel] >>
4082+
qexistsl [‘λx. -1r’,‘I’] >>
4083+
simp[sigma_algebra_borel,MEASURABLE_I,borel_measurable_sets,borel_measurable_const]
4084+
QED
4085+
4086+
Theorem in_borel_measurable_abs:
4087+
∀a f g. sigma_algebra a ∧ f ∈ borel_measurable a ∧
4088+
(∀x. x ∈ space a ⇒ g x = abs (f x)) ⇒ g ∈ borel_measurable a
4089+
Proof
4090+
rw[] >> irule $ INST_TYPE [“:β”|->“:γ”] IN_MEASURABLE_COMP >>
4091+
qexistsl [‘borel’,‘f’,‘abs’] >> simp[] >>
4092+
‘abs = λr:real. max (I r) ((λrr. -rr) r)’ by (
4093+
simp[FUN_EQ_THM,abs,max_def] >> strip_tac >> Cases_on ‘0 ≤ r’ >> simp[]
4094+
>- (Cases_on ‘r = 0’ >> simp[] >> ‘0 < r’ by simp[REAL_LT_LE] >>
4095+
‘¬(r ≤ -r)’ suffices_by simp[] >> simp[REAL_NOT_LE])
4096+
>- (‘r ≤ -r’ suffices_by simp[] >> gs[REAL_NOT_LE])) >>
4097+
pop_assum SUBST1_TAC >> irule in_borel_measurable_max >>
4098+
simp[sigma_algebra_borel,MEASURABLE_I] >>
4099+
irule in_borel_measurable_ainv' >> simp[sigma_algebra_borel] >>
4100+
qexists ‘I’ >> simp[sigma_algebra_borel,MEASURABLE_I]
4101+
QED
4102+
4103+
Theorem in_borel_measurable_sum:
4104+
∀a f g s. FINITE s ∧ sigma_algebra a ∧ (∀i. i ∈ s ⇒ f i ∈ borel_measurable a) ∧
4105+
(∀x. x ∈ space a ⇒ g x = REAL_SUM_IMAGE (λi. f i x) s) ⇒ g ∈ borel_measurable a
4106+
Proof
4107+
simp[Once $ GSYM AND_IMP_INTRO] >> rpt gen_tac >> map_every qid_spec_tac [‘f’,‘g’] >>
4108+
simp[RIGHT_FORALL_IMP_THM] >> Induct_on ‘s’ >> rw[]
4109+
>- (irule in_borel_measurable_const >> simp[] >> qexists ‘0’ >> simp[]) >>
4110+
gs[REAL_SUM_IMAGE_THM] >> irule in_borel_measurable_add >> simp[] >>
4111+
qexistsl [‘f e’,‘λx. REAL_SUM_IMAGE (λi. f i x) (s DELETE e)’] >> simp[] >>
4112+
last_x_assum irule >> qexists ‘f’ >> simp[DELETE_NON_ELEMENT_RWT]
4113+
QED
4114+
4115+
Theorem in_borel_measurable_inv:
4116+
∀a f g. sigma_algebra a ∧ f ∈ borel_measurable a ∧
4117+
(∀x. x ∈ space a ⇒ g x = (f x)⁻¹) ⇒ g ∈ borel_measurable a
4118+
Proof
4119+
rw[] >> irule $ INST_TYPE [“:β”|->“:γ”] IN_MEASURABLE_COMP >>
4120+
qexistsl [‘borel’,‘f’,‘λx. x⁻¹’] >> simp[] >>
4121+
simp[sigma_algebra_borel,in_borel_measurable_le,FUNSET,space_borel] >>
4122+
qx_gen_tac ‘c’ >> Cases_on ‘c < 0
4123+
>- (‘{x | x⁻¹ ≤ c} = {x | c⁻¹ ≤ x ∧ x < 0}’ suffices_by
4124+
simp[borel_measurable_sets,Excl "RMUL_LEQNORM"] >>
4125+
rw[EXTENSION] >> Cases_on ‘x < 0’ >> simp[REAL_NEG_NZ,nonzerop_EQ1_I] >>
4126+
gs[REAL_NOT_LT,REAL_NOT_LE] >> irule REAL_LTE_TRANS >>
4127+
qexists ‘0’ >> simp[]) >>
4128+
reverse $ gs[REAL_NOT_LT,Once REAL_LE_LT]
4129+
>- (‘{x | x⁻¹ ≤ 0r} = {x | x ≤ 0}’ suffices_by simp[borel_measurable_sets] >>
4130+
rw[EXTENSION,REAL_LE_LT]) >>
4131+
‘{x | x⁻¹ ≤ c} = {x | x ≤ 0} ∪ {x | c⁻¹ ≤ x}’ suffices_by (
4132+
disch_then SUBST1_TAC >> irule SIGMA_ALGEBRA_UNION >>
4133+
simp[sigma_algebra_borel,borel_measurable_sets,Excl "RMUL_LEQNORM"]) >>
4134+
rw[EXTENSION] >> Cases_on ‘x ≤ 0’ >> simp[]
4135+
>- (irule REAL_LE_TRANS >> qexists ‘0’ >> gs[REAL_LE_LT]) >>
4136+
gs[REAL_NOT_LE] >> simp[REAL_POS_NZ,nonzerop_EQ1_I]
4137+
QED
4138+
4139+
Theorem in_borel_measurable_div:
4140+
∀a f g h. sigma_algebra a ∧ f ∈ borel_measurable a ∧ g ∈ borel_measurable a ∧
4141+
(∀x. x ∈ space a ⇒ h x = f x / g x) ⇒ h ∈ borel_measurable a
4142+
Proof
4143+
rw[] >> irule in_borel_measurable_mul >> simp[real_div] >>
4144+
qexistsl [‘f’,‘λx. (g x)⁻¹’] >> simp[] >>
4145+
irule in_borel_measurable_inv >> simp[] >> qexists ‘g’ >> simp[]
4146+
QED
4147+
4148+
Theorem in_borel_measurable_pow:
4149+
∀a n f g.
4150+
sigma_algebra a ∧ f ∈ borel_measurable a ∧
4151+
(∀x. x ∈ space a ⇒ g x = (f x) pow n) ⇒
4152+
g ∈ borel_measurable a
4153+
Proof
4154+
Induct_on ‘n’ >> rw[pow] >- (metis_tac[in_borel_measurable_const]) >>
4155+
irule in_borel_measurable_mul >> simp[] >> qexistsl [‘f’,‘λx. f x pow n’] >>
4156+
simp[] >> last_x_assum $ irule_at Any >> simp[] >> qexists ‘f’ >> simp[]
4157+
QED
4158+
40004159
(* References:
40014160
40024161
[1] Schilling, R.L.: Measures, Integrals and Martingales (Second Edition).

src/probability/sigma_algebraScript.sml

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6117,6 +6117,122 @@ Proof
61176117
dxrule_then (qspec_then `sp` mp_tac) DYNKIN_MONOTONE >> dxrule DYNKIN_STABLE >> simp[]
61186118
QED
61196119

6120+
(* ------------------------------------------------------------------------- *)
6121+
(* More Measurability Results *)
6122+
(* ------------------------------------------------------------------------- *)
6123+
6124+
(*
6125+
These are the results from my own accumulated library for general measurable functions
6126+
that I believe stand on their own as something useful for future users.
6127+
- Jared Yeager
6128+
*)
6129+
6130+
(* We have constant functions are measurable for borel/Borel later,
6131+
but not for generic spaces. *)
6132+
Theorem MEASURABLE_CONST:
6133+
∀a b c. sigma_algebra a ∧ c ∈ space b ⇒ (λx. c) ∈ measurable a b
6134+
Proof
6135+
rw[measurable_def,FUNSET] >> Cases_on ‘c ∈ s’ >>
6136+
simp[PREIMAGE_def,SIGMA_ALGEBRA_SPACE,SIGMA_ALGEBRA_EMPTY]
6137+
QED
6138+
6139+
Theorem IN_MEASURABLE_CONST:
6140+
∀a b c f. sigma_algebra a ∧ c ∈ space b ∧ (∀x. x ∈ space a ⇒ f x = c) ⇒ f ∈ measurable a b
6141+
Proof
6142+
rw[] >> irule IN_MEASURABLE_EQ >> irule_at Any MEASURABLE_CONST >>
6143+
simp[] >> last_x_assum $ irule_at Any >> simp[]
6144+
QED
6145+
6146+
(* Helper lemmas for the next result *)
6147+
6148+
Theorem SUBSETS_PROD_SIGMA:
6149+
∀a b. subsets (a × b) =
6150+
BIGINTER {s | prod_sets (subsets a) (subsets b) ⊆ s ∧ sigma_algebra (space a × space b,s)}
6151+
Proof
6152+
simp[prod_sigma_def,sigma_def]
6153+
QED
6154+
6155+
Theorem SIGMA_ALGEBRA_SUBSET_CLASS:
6156+
∀a. sigma_algebra a ⇒ subset_class (space a) (subsets a)
6157+
Proof
6158+
simp[SIGMA_ALGEBRA]
6159+
QED
6160+
6161+
Theorem PROD_SIGMA_X_SLICE:
6162+
∀a b s y. sigma_algebra a ∧ subset_class (space b) (subsets b) ∧
6163+
s ∈ subsets (a × b) ⇒ {x | (x,y) ∈ s} ∈ subsets a
6164+
Proof
6165+
rw[] >> `sigma_algebra (a × b)` by (irule SIGMA_ALGEBRA_PROD_SIGMA >> simp[SIGMA_ALGEBRA_SUBSET_CLASS]) >>
6166+
REVERSE $ Cases_on `y ∈ space b`
6167+
>- (dxrule_all_then mp_tac SIGMA_ALGEBRA_SUBSET_SPACE >> simp[SUBSET_DEF,SPACE_PROD_SIGMA] >> strip_tac >>
6168+
`{x | (x,y) ∈ s} = ∅` suffices_by simp[SIGMA_ALGEBRA_EMPTY] >> simp[EXTENSION] >> qx_gen_tac `x` >>
6169+
CCONTR_TAC >> fs[] >> first_x_assum $ dxrule_then mp_tac >> simp[]) >>
6170+
fs[SUBSETS_PROD_SIGMA] >>
6171+
first_x_assum $ qspec_then `subsets (a × b) ∩ {t | {x | (x,y) ∈ t} ∈ subsets a}` $
6172+
irule o cj 2 o SIMP_RULE (srw_ss ()) [] >>
6173+
simp[SIGMA_ALGEBRA_ALT_SPACE] >> rpt CONJ_TAC
6174+
>- (dxrule_then mp_tac SIGMA_ALGEBRA_SUBSET_CLASS >> simp[subset_class_def,SPACE_PROD_SIGMA])
6175+
>- (dxrule_then mp_tac SIGMA_ALGEBRA_SPACE >> simp[SPACE_PROD_SIGMA])
6176+
>- (simp[SIGMA_ALGEBRA_SPACE])
6177+
>- (NTAC 2 strip_tac >> NTAC 2 $ dxrule_all_then mp_tac SIGMA_ALGEBRA_COMPL >>
6178+
simp[SPACE_PROD_SIGMA,DIFF_DEF])
6179+
>- (simp[FUNSET_INTER] >> NTAC 2 strip_tac >> simp[SIGMA_ALGEBRA_ENUM] >>
6180+
qspecl_then [`a`,`λn. {x | (x,y) ∈ f n}`] mp_tac SIGMA_ALGEBRA_ENUM >> fs[FUNSET] >>
6181+
qmatch_abbrev_tac `s ∈ _ ⇒ t ∈ _` >> `s = t` suffices_by simp[] >> UNABBREV_ALL_TAC >>
6182+
simp[EXTENSION,IN_BIGUNION_IMAGE] >> qx_gen_tac `x` >> metis_tac[])
6183+
>- (simp[prod_sets_def,SUBSET_DEF] >> rw[] >> rename [`s × t`] >> Cases_on `y ∈ t`
6184+
>- (`{x | (x,y) ∈ s × t} = s` suffices_by simp[] >> simp[EXTENSION])
6185+
>- (`{x | (x,y) ∈ s × t} = ∅` suffices_by simp[SIGMA_ALGEBRA_EMPTY] >> simp[EXTENSION]))
6186+
>- (simp[prod_sigma_def,SIGMA_SUBSET_SUBSETS])
6187+
QED
6188+
6189+
Theorem PROD_SIGMA_Y_SLICE:
6190+
∀a b s x. subset_class (space a) (subsets a) ∧ sigma_algebra b ∧
6191+
s ∈ subsets (a × b) ⇒ {y | (x,y) ∈ s} ∈ subsets b
6192+
Proof
6193+
rw[] >> `sigma_algebra (a × b)` by (irule SIGMA_ALGEBRA_PROD_SIGMA >> simp[SIGMA_ALGEBRA_SUBSET_CLASS]) >>
6194+
REVERSE $ Cases_on `x ∈ space a`
6195+
>- (dxrule_all_then mp_tac SIGMA_ALGEBRA_SUBSET_SPACE >> simp[SUBSET_DEF,SPACE_PROD_SIGMA] >> strip_tac >>
6196+
`{y | (x,y) ∈ s} = ∅` suffices_by simp[SIGMA_ALGEBRA_EMPTY] >> simp[EXTENSION] >> qx_gen_tac `y` >>
6197+
CCONTR_TAC >> fs[] >> first_x_assum $ dxrule_then mp_tac >> simp[]) >>
6198+
fs[SUBSETS_PROD_SIGMA] >>
6199+
first_x_assum $ qspec_then `subsets (a × b) ∩ {t | {y | (x,y) ∈ t} ∈ subsets b}` $
6200+
irule o cj 2 o SIMP_RULE (srw_ss ()) [] >>
6201+
simp[SIGMA_ALGEBRA_ALT_SPACE] >> rpt CONJ_TAC
6202+
>- (dxrule_then mp_tac SIGMA_ALGEBRA_SUBSET_CLASS >> simp[subset_class_def,SPACE_PROD_SIGMA])
6203+
>- (dxrule_then mp_tac SIGMA_ALGEBRA_SPACE >> simp[SPACE_PROD_SIGMA])
6204+
>- (simp[SIGMA_ALGEBRA_SPACE])
6205+
>- (NTAC 2 strip_tac >> NTAC 2 $ dxrule_all_then mp_tac SIGMA_ALGEBRA_COMPL >>
6206+
simp[SPACE_PROD_SIGMA,DIFF_DEF])
6207+
>- (simp[FUNSET_INTER] >> NTAC 2 strip_tac >> simp[SIGMA_ALGEBRA_ENUM] >>
6208+
qspecl_then [`b`,`λn. {y | (x,y) ∈ f n}`] mp_tac SIGMA_ALGEBRA_ENUM >> fs[FUNSET] >>
6209+
qmatch_abbrev_tac `s ∈ _ ⇒ t ∈ _` >> `s = t` suffices_by simp[] >> UNABBREV_ALL_TAC >>
6210+
simp[EXTENSION,IN_BIGUNION_IMAGE] >> qx_gen_tac `y` >> metis_tac[])
6211+
>- (simp[prod_sets_def,SUBSET_DEF] >> rw[] >> rename [`s × t`] >> Cases_on `x ∈ s`
6212+
>- (`{y | (x,y) ∈ s × t} = t` suffices_by simp[] >> simp[EXTENSION])
6213+
>- (`{y | (x,y) ∈ s × t} = ∅` suffices_by simp[SIGMA_ALGEBRA_EMPTY] >> simp[EXTENSION]))
6214+
>- (simp[prod_sigma_def,SIGMA_SUBSET_SUBSETS])
6215+
QED
6216+
6217+
(* IN_MEASURABLE_PROD_SIGMA tells us that pairing measurable functions gives a measurable
6218+
function.
6219+
This gives us that fixing a variable in a measurable function gives a measurable function.
6220+
As before, there is a IN_MEASURABLE_BOREL_FROM_PROD_SIGMA later, but this is more general.
6221+
*)
6222+
Theorem IN_MEASURABLE_FROM_PROD_SIGMA:
6223+
∀a b c f. sigma_algebra a ∧ sigma_algebra b ∧ sigma_algebra c ∧ f ∈ measurable (a × b) c ⇒
6224+
(∀y. y ∈ space b ⇒ (λx. f (x,y)) ∈ measurable a c) ∧
6225+
(∀x. x ∈ space a ⇒ (λy. f (x,y)) ∈ measurable b c)
6226+
Proof
6227+
rw[measurable_def,FUNSET,FORALL_PROD,IN_SPACE_PROD_SIGMA] >>
6228+
first_x_assum $ dxrule_then assume_tac
6229+
>| [dxrule_at_then Any (qspec_then ‘y’ mp_tac) PROD_SIGMA_X_SLICE,
6230+
dxrule_at_then Any (qspec_then ‘x’ mp_tac) PROD_SIGMA_Y_SLICE] >>
6231+
simp[SIGMA_ALGEBRA_SUBSET_CLASS] >>
6232+
qmatch_goalsub_abbrev_tac ‘t ∈ _ ⇒ r ∈ _’ >> ‘t = r’ suffices_by simp[] >>
6233+
simp[Abbr ‘t’,Abbr ‘r’,EXTENSION,IN_SPACE_PROD_SIGMA]
6234+
QED
6235+
61206236
(* References:
61216237
61226238
[1] Hurd, J.: Formal verification of probabilistic algorithms. University of

0 commit comments

Comments
 (0)