@@ -17,6 +17,10 @@ declare module A <: RewEx1Ex2.
17
17
declare axiom A_run_ll : islossless A.ex1.
18
18
19
19
20
+
21
+ local lemma unit_rule x : x = tt.
22
+ elim x. auto . qed.
23
+
20
24
local lemma prob_refl_app &m p :
21
25
exists (D1 : at1 -> (glob A) -> (unit * (glob A)) distr)
22
26
(D2 : at2 -> unit * (glob A) -> (glob A) distr),
@@ -55,7 +59,8 @@ have : Pr[RCR(A).main(i1, i2) @ &m : true ] = 0%r.
55
59
rewrite - (H1 &m predT).
56
60
rewrite dlet_mu_main.
57
61
apply sum0_eq. progress.
58
- have -> : x = (tt, x.`2 ). smt().
62
+ have -> : x = (tt, x.`2 ).
63
+ rewrite - (unit_rule x.`1 ). smt().
59
64
rewrite - q22. smt(). smt(@Distr).
60
65
elim q2. move => g gp.
61
66
have : mu (dlet (D1 i1 (glob A){m}) (D2 i2)) M <= p.
@@ -76,7 +81,9 @@ have -> : sum
76
81
apply fun_ext. move => x.
77
82
case (pred1 (tt, g) x). simplify. progress.
78
83
rewrite H4.
79
- have -> : mu1 (duniform [(tt, g)]) (tt, g) = 1%r. smt(@Distr). smt().
84
+ have -> : mu1 (duniform [(tt, g)]) (tt, g) = 1%r. rewrite - H4.
85
+ smt(duniform1E_uniq).
86
+ smt().
80
87
smt().
81
88
rewrite sumZ.
82
89
rewrite - muE. progress.
@@ -90,11 +97,12 @@ have zzz : sum
90
97
else 0%r).
91
98
apply ler_sum. progress.
92
99
case (pred1 (tt, g) x). simplify. auto. simplify. progress.
93
- have ->: x = (tt,x.`2 ). smt().
100
+ have ->: x = (tt,x.`2 ).
101
+ rewrite - (unit_rule x.`1 ). smt().
94
102
case (mu1 (D1 i1 (glob A){m}) (tt, x.`2 ) = 0%r).
95
103
smt().
96
104
progress.
97
- have jk : forall (a b c : real), a >= 0%r => b <= c => a * b <= a * c. smt(@Real ).
105
+ have jk : forall (a b c : real), a >= 0%r => b <= c => a * b <= a * c. smt().
98
106
apply jk. smt(@Distr). apply q. smt(@Distr).
99
107
have ->: (fun (x : unit * (glob A)) =>
100
108
if ! pred1 (tt, g) x then mu1 (D1 i1 (glob A){m}) x * mu (D2 i2 x) M
@@ -153,9 +161,10 @@ have ->: (fun (x : unit * (glob A)) => mu1 (D1 i1 (glob A){m}) x)
153
161
= (fun (x : unit * (glob A)) => if predT x then mu1 (D1 i1 (glob A){m}) x else 0%r).
154
162
smt().
155
163
rewrite - muE.
156
- smt(@Distr).
157
- smt().
158
- rewrite H1. smt().
164
+ have : 0%r <= weight (D1 i1 (glob A){m}) <= 1%r. smt(@Distr).
165
+ pose w := weight (D1 i1 (glob A){m}) .
166
+ progress. clear zzz gp g q G g0 H1 H0 H. smt().
167
+ smt(). rewrite H1. smt().
159
168
qed.
160
169
161
170
@@ -168,7 +177,10 @@ elim (H2 M i1 i2 _ _);auto. progress.
168
177
have f1 : Pr[A.ex1(i1) @ &m : glob A = g] > 0%r.
169
178
have f2 : mu (D1 i1 (glob A){m}) (fun x => snd x = g) = Pr[A.ex1(i1) @ &m : (glob A) = g].
170
179
rewrite (H &m). auto. rewrite - f2.
171
- have ->: (fun (x : unit * (glob A)) => x.`2 = g) = pred1 (tt,g). apply fun_ext. smt(). apply H5.
180
+ have ->: (fun (x : unit * (glob A)) => x.`2 = g) = pred1 (tt,g). apply fun_ext.
181
+ move => x. simplify.
182
+ rewrite - (unit_rule x.`1 ).
183
+ smt(). apply H5.
172
184
have f3: exists &n, g = (glob A){n}.
173
185
have f31: Pr[A.ex1(i1) @ &m : (glob A) = g /\ (exists &n, (glob A) = (glob A){n}) ] = Pr[A.ex1(i1) @ &m : (glob A) = g].
174
186
have <- : Pr[A.ex1(i1) @ &m : (glob A) = g] = Pr[A.ex1(i1) @ &m : (glob A) = g /\ exists &n, (glob A) = (glob A){n}].
@@ -185,6 +197,9 @@ smt(). auto.
185
197
<= Pr[A.ex1(i1) @ &m : (glob A) = g]. rewrite Pr[mu_sub]. auto. auto.
186
198
case (exists &n, g = (glob A){n}).
187
199
rewrite - (H &m predT i1). smt(@Distr).
200
+ move => ne. rewrite Pr[mu_false]. simplify.
201
+ have c1 : Pr[A.ex1(i1) @ &m : (glob A) = g] = 0%r. rewrite - f32.
202
+ rewrite ne. simplify. rewrite Pr[mu_false]. simplify. auto.
188
203
smt().
189
204
clear f32 f31 f1 H2 H1 H0 H.
190
205
case (exists &n, g = (glob A){n}). auto.
0 commit comments