Skip to content

Commit 4347ebd

Browse files
committed
cleaning/rebase
1 parent ab8a622 commit 4347ebd

File tree

8 files changed

+137
-185
lines changed

8 files changed

+137
-185
lines changed

coq-mathcomp-analysis.opam

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ depends: [
2323
"coq-mathcomp-solvable" { (>= "2.0.0") | (= "dev") }
2424
"coq-mathcomp-field"
2525
"coq-mathcomp-bigenough" { (>= "1.0.0") }
26-
"coq-mathcomp-algebra-tactics" { (>= "1.2.0") }
27-
"coq-mathcomp-zify" { (>= "1.4.0") }
26+
"coq-mathcomp-algebra-tactics" { (>= "1.2.3") }
27+
"coq-mathcomp-zify" { (>= "1.5.0") }
2828
]
2929

3030
tags: [

theories/kernel.v

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -765,8 +765,6 @@ HB.instance Definition _ (P : probability Y R):=
765765

766766
End knormalize.
767767

768-
<<<<<<< HEAD
769-
(* TODO: useful? *)
770768
Lemma measurable_fun_mnormalize d d' (X : measurableType d)
771769
(Y : measurableType d') (R : realType) (k : R.-ker X ~> Y) :
772770
measurable_fun [set: X] (fun x =>
@@ -797,8 +795,6 @@ apply: measurable_fun_if => //.
797795
+ by apply: measurableT_comp => //; exact/measurable_funS/measurable_kernel.
798796
Qed.
799797

800-
=======
801-
>>>>>>> ea7f1064 (rm duplicate, more uniform naming)
802798
Section kcomp_def.
803799
Context d1 d2 d3 (X : measurableType d1) (Y : measurableType d2)
804800
(Z : measurableType d3) (R : realType).

theories/lang_syntax.v

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -168,10 +168,10 @@ rewrite /ubeta_nat_pdf /=; apply: measurable_fun_if => //=; last first.
168168
by rewrite setTI; apply: measurable_funTS; exact: measurable_fun_expn_onem.
169169
apply: measurable_and => /=.
170170
apply: (measurable_fun_bool true).
171-
rewrite [X in measurable X](_ : _ = `[0, +oo[%classic)//.
171+
rewrite setTI [X in measurable X](_ : _ = `[0, +oo[%classic)//.
172172
by rewrite set_interval.set_itv_c_infty.
173173
apply: (measurable_fun_bool true).
174-
by rewrite [X in measurable X](_ : _ = `]-oo, 1]%classic)//.
174+
by rewrite setTI [X in measurable X](_ : _ = `]-oo, 1]%classic)//.
175175
Qed.
176176

177177
Local Notation mu := lebesgue_measure.
@@ -696,21 +696,20 @@ move=> /andP[x0 x1]; rewrite ler_norml; apply/andP; split.
696696
by rewrite lerBlDr lerDl.
697697
Qed.
698698

699-
Lemma beta_nat_bernE a' b' U : (a > 0)%N -> (b > 0)%N ->
699+
Lemma beta_nat_bernoulliE a' b' U : (a > 0)%N -> (b > 0)%N ->
700700
beta_nat_bernoulli a' b' U = bernoulli (div_beta_nat_norm a' b') U.
701701
Proof.
702702
move=> a0 b0.
703703
rewrite /beta_nat_bernoulli.
704704
under eq_integral => x.
705705
rewrite inE/= in_itv/= => x01.
706-
rewrite bernoulliE_ext/= ?ubeta_nat_pdf_ge0 ?ubeta_nat_pdf_le1//.
706+
rewrite bernoulliE/= ?ubeta_nat_pdf_ge0 ?ubeta_nat_pdf_le1//.
707707
over.
708708
rewrite /=.
709-
rewrite [in RHS]bernoulliE_ext/= ?div_beta_nat_norm_ge0 ?div_beta_nat_norm_le1//=.
709+
rewrite [in RHS]bernoulliE/= ?div_beta_nat_norm_ge0 ?div_beta_nat_norm_le1//=.
710710
under eq_integral => x x01.
711-
rewrite /ubeta_nat_pdf.
712711
rewrite inE /=in_itv/= in x01.
713-
rewrite x01.
712+
rewrite /ubeta_nat_pdf x01.
714713
over.
715714
rewrite /=.
716715
rewrite integralD//=; last 2 first.
@@ -785,7 +784,8 @@ rewrite integralZl//=; last first.
785784
by rewrite mulr_ile1// ?exprn_ge0 ?exprn_ile1// ?onem_ge0 ?onem_le1//; case/andP: t01.
786785
- exact: integrableS (integrable_ubeta_nat_pdf _ _).
787786
transitivity (((beta_nat_norm a b)^-1)%:E *
788-
\int[mu]_(x in `[0%R, 1%R]) ((ubeta_nat_pdf a b x)%:E - (ubeta_nat_pdf (a+a') (b+b') x)%:E) : \bar R)%E.
787+
\int[mu]_(x in `[0%R, 1%R]) ((ubeta_nat_pdf a b x)%:E -
788+
(ubeta_nat_pdf (a + a') (b + b') x)%:E) : \bar R)%E.
789789
congr (_ * _)%E.
790790
apply: eq_integral => x x01.
791791
rewrite /onem -EFinM mulrBl mul1r EFinB.
@@ -1280,7 +1280,7 @@ Inductive evalD : forall g t, exp D g t ->
12801280

12811281
| eval_binomial g n e r mr :
12821282
e -D> r ; mr -> (exp_binomial n e : exp D g _) -D> binomial_prob n \o r ;
1283-
measurableT_comp (measurable_binomial_probT n) mr
1283+
measurableT_comp (measurable_binomial_prob n) mr
12841284

12851285
| eval_uniform g (a b : R) (ab : (a < b)%R) :
12861286
(exp_uniform a b ab : exp D g _) -D> cst (uniform_prob ab) ;
@@ -1858,7 +1858,7 @@ Proof. exact/execD_evalD/eval_bernoulli/evalD_execD. Qed.
18581858
Lemma execD_binomial g n e :
18591859
@execD g _ (exp_binomial n e) =
18601860
existT _ ((binomial_prob n : R -> pprobability nat R) \o projT1 (execD e))
1861-
(measurableT_comp (measurable_binomial_probT n) (projT2 (execD e))).
1861+
(measurableT_comp (measurable_binomial_prob n) (projT2 (execD e))).
18621862
Proof. exact/execD_evalD/eval_binomial/evalD_execD. Qed.
18631863

18641864
Lemma execD_uniform g a b ab0 :
@@ -1926,10 +1926,13 @@ Lemma congr_letinl {R : realType} g t1 t2 str (e1 e2 : @exp _ _ g t1)
19261926
@execP R g t2 [let str := e2 in e] x U.
19271927
Proof. by move=> + mU; move/eq_sfkernel => He; rewrite !execP_letin He. Qed.
19281928

1929-
Lemma congr_letinr {R : realType} g t1 t2 str (e : @exp _ _ _ t1) (e1 e2 : @exp _ _ (_ :: g) t2) x U :
1929+
Lemma congr_letinr {R : realType} g t1 t2 str (e : @exp _ _ _ t1)
1930+
(e1 e2 : @exp _ _ (_ :: g) t2) x U :
19301931
(forall y V, execP e1 (y, x) V = execP e2 (y, x) V) ->
19311932
@execP R g t2 [let str := e in e1] x U = @execP R g t2 [let str := e in e2] x U.
1932-
Proof. by move=> He; rewrite !execP_letin !letin'E; apply: eq_integral => ? _; exact: He. Qed.
1933+
Proof.
1934+
by move=> He; rewrite !execP_letin !letin'E; apply: eq_integral => ? _; exact: He.
1935+
Qed.
19331936

19341937
Lemma congr_normalize {R : realType} g t (e1 e2 : @exp R _ g t) :
19351938
(forall x U, execP e1 x U = execP e2 x U) ->

theories/lang_syntax_examples.v

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ Local Close Scope lang_scope.
6969
Module bidi_tests.
7070
Local Open Scope lang_scope.
7171
Import Notations.
72+
Section bidi_tests.
7273
Context (R : realType).
7374

7475
Definition bidi_test1 x : @exp R P [::] _ := [
@@ -106,6 +107,7 @@ Definition bidi_test4 (a b c d : string)
106107
return {exp_poisson O [#c(*{exp_var c erefl}*)]}].
107108

108109
End bidi_tests.
110+
End bidi_tests.
109111

110112
Section trivial_example.
111113
Local Open Scope lang_scope.
@@ -277,7 +279,7 @@ rewrite ger0_norm//.
277279
rewrite !integral_dirac//= !diracT !mul1e ger0_norm//.
278280
rewrite exp_var'E (execD_var_erefl "x")/=.
279281
rewrite !indicT/= !mulr1.
280-
rewrite bernoulliE_ext//=; last lra.
282+
rewrite bernoulliE//=; last lra.
281283
by rewrite muleDl//; congr (_ + _)%E;
282284
rewrite -!EFinM; congr (_%:E);
283285
rewrite !indicE /onem /=; case: (_ \in _); field.
@@ -317,7 +319,7 @@ rewrite !ge0_integral_mscale//=.
317319
rewrite ger0_norm//.
318320
rewrite !integral_dirac//= !diracT !mul1e ger0_norm//.
319321
rewrite exp_var'E (execD_var_erefl "x")/=.
320-
rewrite bernoulliE_ext//=; last lra.
322+
rewrite bernoulliE//=; last lra.
321323
rewrite !mul1r.
322324
rewrite muleDl//; congr (_ + _)%E;
323325
rewrite -!EFinM;
@@ -361,7 +363,7 @@ rewrite !letin'E/= !iteE/=.
361363
rewrite !ge0_integral_mscale//=.
362364
rewrite ger0_norm//.
363365
rewrite !integral_dirac//= !diracT !mul1e ger0_norm//.
364-
rewrite bernoulliE_ext//=; last lra.
366+
rewrite bernoulliE//=; last lra.
365367
rewrite muleDl//; congr (_ + _)%E;
366368
rewrite -!EFinM;
367369
congr (_%:E);
@@ -648,7 +650,7 @@ transitivity (beta_nat_bernoulli 6 4 1 0 U : \bar R).
648650
by rewrite expr0 expr1 mulr1.
649651
rewrite !mul0r !mule0.
650652
by case: ifPn.
651-
rewrite beta_nat_bernE// !bernoulliE_ext//=; last 2 first.
653+
rewrite beta_nat_bernoulliE// !bernoulliE//=; last 2 first.
652654
lra.
653655
by rewrite div_beta_nat_norm_ge0 div_beta_nat_norm_le1.
654656
congr (_ * _ + _ * _)%:E.

theories/lang_syntax_table_game.v

Lines changed: 15 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ Require Import prob_lang lang_syntax_util lang_syntax lang_syntax_examples.
99
From mathcomp Require Import ring lra.
1010

1111
(**md**************************************************************************)
12-
(* # Edd's table game example *)
12+
(* # Eddy's table game example *)
1313
(* *)
1414
(* ref: *)
1515
(* - Chung-chieh Shan, Equational reasoning for probabilistic programming, *)
@@ -185,7 +185,7 @@ apply: (@le_lt_trans _ _ (\int[lebesgue_measure]_(x in `[0%R, 1%R]) (beta_nat_pd
185185
by apply/EFin_measurable_fun; exact: measurable_beta_nat_pdf.
186186
- move=> x _ /=; rewrite patchE; case: ifPn => // _.
187187
by rewrite lee_fin beta_nat_pdf_ge0.
188-
- apply: (measurable_restrict (E := setT) _ _ _ _).1 => //.
188+
- apply/(measurable_restrict _ _ _) => //.
189189
apply/measurable_funTS/measurableT_comp => //.
190190
exact: measurable_beta_nat_pdf.
191191
- move=> x _.
@@ -276,7 +276,7 @@ rewrite (@execD_bin _ _ binop_minus) !execD_real/= !execD_nat.
276276
rewrite !exp_var'E !(execD_var_erefl "p") !(execD_var_erefl "a2")/=.
277277
rewrite !letin'E/=.
278278
move: r01 => /andP[r0 r1].
279-
by apply/integral_binomial_bernoulli/andP.
279+
by apply/integral_binomial_prob/andP.
280280
Qed.
281281

282282
Lemma casino12 : execD casino1 = execD casino2.
@@ -443,7 +443,7 @@ transitivity (\int[beta_nat 6 4]_(y in `[0%R, 1%R]%classic : set R)
443443
rewrite patchE; case: ifPn => //.
444444
rewrite /beta_nat_pdf /ubeta_nat_pdf notin_setE/= in_itv/= => /negP/negbTE ->.
445445
by rewrite mul0r mule0.
446-
have := (@beta_nat_bernE R 6 4 0 3 U) isT isT.
446+
have := (@beta_nat_bernoulliE R 6 4 0 3 U) isT isT.
447447
rewrite /beta_nat_bernoulli /ubeta_nat_pdf /=.
448448
under eq_integral.
449449
move=> x.
@@ -468,7 +468,7 @@ have f1 x : x \in (`[0%R, 1%R]%classic : set R) -> (f x <= 1)%R.
468468
by move => /f01/andP[].
469469
under eq_integral => x.
470470
move=> x01.
471-
rewrite bernoulliE_ext//=; last first.
471+
rewrite bernoulliE//=; last first.
472472
by rewrite subr_ge0 f1//= lerBlDr addrC -lerBlDr subrr f0.
473473
over.
474474
rewrite /=.
@@ -501,8 +501,7 @@ rewrite [X in _ + X = _]ge0_integralZr//=; last 2 first.
501501
by apply/EFin_measurable_fun; exact: measurable_beta_nat_pdf.
502502
by move=> x x01; rewrite mule_ge0// lee_fin// ?f0// ?inE// beta_nat_pdf_ge0.
503503
under [in RHS]eq_integral => x x01.
504-
rewrite bernoulliE_ext//=; last first.
505-
by rewrite f0//= f1.
504+
rewrite bernoulliE//=; last by rewrite f0//= f1.
506505
rewrite muleDl//.
507506
over.
508507
rewrite /= ge0_integralD//=; last 4 first.
@@ -653,7 +652,7 @@ rewrite (@execD_bin _ _ binop_minus) execD_pow/= (@execD_bin _ _ binop_minus).
653652
rewrite !execD_real/= exp_var'E (execD_var_erefl "p")/=.
654653
transitivity (\int[beta_nat 6 4]_y bernoulli (1 - (1 - y) ^+ 3) U : \bar R)%E.
655654
by rewrite /beta_nat_bernoulli !letin'E/= /onem.
656-
rewrite bernoulliE_ext//=; last lra.
655+
rewrite bernoulliE//=; last lra.
657656
rewrite integral_beta_nat//; last first.
658657
by have := @integral_beta_bernoulli_onem_lty R _ _ _ U.
659658
apply: (measurableT_comp (measurable_bernoulli2 _)) => //.
@@ -678,28 +677,17 @@ rewrite (@integral_bernoulli_beta_nat_pdf (fun x => (1 - x) ^+ 3)%R U (1 / 11))/
678677
rewrite [RHS]integral_beta_nat//; last 2 first.
679678
apply: (measurableT_comp (measurable_bernoulli2 _)) => //.
680679
apply: measurable_fun_if => //.
681-
apply: measurable_and => //.
682-
apply: (measurable_fun_bool true) => //=.
683-
rewrite (_ : _ @^-1` _ = `[0%R, +oo[%classic)//.
684-
by apply/seteqP; split => [z|z] /=; rewrite in_itv/= andbT.
685-
apply: (measurable_fun_bool true) => //=.
686-
by rewrite (_ : _ @^-1` _ = `]-oo, 1%R]%classic).
680+
by apply: measurable_and => //; exact: measurable_fun_ler.
687681
apply: measurable_funTS; apply: measurable_funM => //.
688-
apply: measurable_fun_pow => //.
689-
by apply: measurable_funB => //.
682+
by apply: measurable_fun_pow => //; exact: measurable_funB.
690683
rewrite (le_lt_trans _ (integral_beta_bernoulli_expn_lty 3 6 4 U))//.
691684
rewrite integral_mkcond /=; apply: ge0_le_integral => //=.
692685
by move=> z _; rewrite patchE expr0 mul1r; case: ifPn.
693-
apply: (measurable_restrict _ _ _ _).1 => //.
686+
apply/(measurable_restrict _ _ _) => //.
694687
apply: measurable_funTS; apply: measurableT_comp => //=.
695688
apply: (measurableT_comp (measurable_bernoulli2 _)) => //=.
696689
apply: measurable_fun_if => //=.
697-
apply: measurable_and => //.
698-
apply: (measurable_fun_bool true) => //=.
699-
rewrite (_ : _ @^-1` _ = `[0%R, +oo[%classic)//.
700-
by apply/seteqP; split => [z|z] /=; rewrite in_itv/= andbT.
701-
apply: (measurable_fun_bool true) => //=.
702-
by rewrite (_ : _ @^-1` _ = `]-oo, 1%R]%classic).
690+
by apply: measurable_and => //; exact: measurable_fun_ler.
703691
apply: measurable_funTS; apply: measurable_funM => //.
704692
by apply: measurable_fun_pow => //; exact: measurable_funB.
705693
by apply/measurableT_comp => //; exact: measurable_bernoulli_expn.
@@ -709,7 +697,7 @@ rewrite (@integral_bernoulli_beta_nat_pdf (fun x => (1 - x) ^+ 3)%R U (1 / 11))/
709697
apply: eq_integral => z z01.
710698
rewrite inE/= in_itv/= in z01.
711699
by rewrite z01 expr0 mul1r.
712-
rewrite beta_nat_bernE//= bernoulliE_ext//=; last first.
700+
rewrite beta_nat_bernoulliE//= bernoulliE//=; last first.
713701
by rewrite div_beta_nat_norm_ge0// div_beta_nat_norm_le1.
714702
rewrite probability_setT.
715703
by congr (_ * _ + _ * _)%:E; rewrite /onem;
@@ -730,20 +718,20 @@ rewrite !execP_sample !execD_bernoulli !execD_real/=.
730718
apply: funext=> x.
731719
apply: eq_probability=> /= y.
732720
rewrite !normalizeE/=.
733-
rewrite !bernoulliE_ext//=; [|lra..].
721+
rewrite !bernoulliE//=; [|lra..].
734722
rewrite !diracT !mule1 -EFinD add_onemK onee_eq0/=.
735723
rewrite !letin'E.
736724
under eq_integral.
737725
move=> x0 _ /=.
738-
rewrite !bernoulliE_ext//=; [|lra..].
726+
rewrite !bernoulliE//=; [|lra..].
739727
rewrite !diracT !mule1 -EFinD add_onemK.
740728
over.
741729
rewrite !ge0_integral_mscale//= (ger0_norm (ltW p0))//.
742730
rewrite integral_dirac// !diracT !indicT /= !mule1.
743731
rewrite gt_eqF ?lte_fin//=.
744732
rewrite integral_dirac//= diracT !mul1e !mulr1.
745733
rewrite addrCA subrr addr0 invr1 mule1.
746-
rewrite !bernoulliE_ext//=; [|lra..].
734+
rewrite !bernoulliE//=; [|lra..].
747735
by rewrite muleAC -EFinM divff// ?gt_eqF// mul1r EFinD.
748736
Qed.
749737

theories/lebesgue_measure.v

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1728,7 +1728,7 @@ Lemma measurable_fun_pow D f n : measurable_fun D f ->
17281728
measurable_fun D (fun x => f x ^+ n).
17291729
Proof.
17301730
move=> mf.
1731-
apply: (@measurable_comp _ _ _ _ _ _ setT (fun x : R => x ^+ n) _ f) => //.
1731+
exact: (@measurable_comp _ _ _ _ _ _ setT (fun x : R => x ^+ n) _ f).
17321732
Qed.
17331733

17341734
Lemma measurable_fun_ltr D f g : measurable_fun D f -> measurable_fun D g ->
@@ -1747,20 +1747,6 @@ under eq_fun do rewrite -subr_ge0.
17471747
by rewrite preimage_true -preimage_itv_c_infty; exact: measurable_funB.
17481748
Qed.
17491749

1750-
Lemma measurable_fun_ler D f g : measurable_fun D f -> measurable_fun D g ->
1751-
measurable_fun D (fun x => f x <= g x).
1752-
Proof.
1753-
move=> mf mg mD Y mY; have [| | |] := set_bool Y => /eqP ->.
1754-
- under eq_fun do rewrite -subr_ge0.
1755-
rewrite preimage_true -preimage_itv_c_infty.
1756-
by apply: (measurable_funB mg mf) => //; exact: measurable_itv.
1757-
- under eq_fun do rewrite leNgt -subr_gt0.
1758-
rewrite preimage_false set_predC setCK -preimage_itv_o_infty.
1759-
by apply: (measurable_funB mf mg) => //; exact: measurable_itv.
1760-
- by rewrite preimage_set0 setI0.
1761-
- by rewrite preimage_setT setIT.
1762-
Qed.
1763-
17641750
(* setT should be D? (derived from measurable_and) *)
17651751
Lemma measurable_fun_eqr D f g : measurable_fun D f -> measurable_fun D g ->
17661752
measurable_fun D (fun x => f x == g x).
@@ -1876,7 +1862,7 @@ have [Y0|Y0] := boolP (0%E \in Y).
18761862
rewrite [X in _ -> X](_ : _ = Y (\d_r U)) //.
18771863
rewrite diracE.
18781864
move/mem_set.
1879-
case (_ \in _) => //= _.
1865+
case: (_ \in _) => //= _.
18801866
by rewrite inE in Y1.
18811867
+ rewrite [X in measurable X](_ : _ = set0).
18821868
exact: measurable0.
@@ -1922,13 +1908,6 @@ under eq_fun do rewrite -mulr_natr.
19221908
by do 2 apply: measurable_funM => //.
19231909
Qed.
19241910

1925-
Lemma measurable_fun_pow {R : realType} D (f : R -> R) n : measurable_fun D f ->
1926-
measurable_fun D (fun x => f x ^+ n).
1927-
Proof.
1928-
move=> mf.
1929-
exact: (@measurable_comp _ _ _ _ _ _ setT (fun x : R => x ^+ n) _ f).
1930-
Qed.
1931-
19321911
Lemma measurable_powR (R : realType) p :
19331912
measurable_fun [set: R] (@powR R ^~ p).
19341913
Proof.

theories/measure.v

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1682,6 +1682,21 @@ rewrite [X in measurable X](_ : _ = D `&` f @^-1` [set true] `&`
16821682
by apply: measurableI; [exact: mf|exact: mg].
16831683
Qed.
16841684

1685+
Lemma measurable_or D (f : T1 -> bool) (g : T1 -> bool) :
1686+
measurable_fun D f -> measurable_fun D g ->
1687+
measurable_fun D (fun x => f x || g x).
1688+
Proof.
1689+
move=> mf mg mD; apply: (measurable_fun_bool true) => //.
1690+
rewrite [X in measurable X](_ : _ = D `&` f @^-1` [set true] `|`
1691+
(D `&` g @^-1` [set true])); last first.
1692+
apply/seteqP; split=> [x [Dx/= /orP[]->]|x [|]/=].
1693+
by left.
1694+
by right.
1695+
by move=> [Dx ->]; split.
1696+
by move=> [Dx ->]; split => //; apply/orP; right.
1697+
by apply: measurableU; [exact: mf|exact: mg].
1698+
Qed.
1699+
16851700
End measurable_fun_measurableType.
16861701
#[global] Hint Extern 0 (measurable_fun _ (fun=> _)) =>
16871702
solve [apply: measurable_cst] : core.

0 commit comments

Comments
 (0)