Skip to content

Commit 0f265c8

Browse files
committed
Merge remote-tracking branch 'origin/main' into deploy-tc
2 parents ec5d57a + b0c4c72 commit 0f265c8

17 files changed

Lines changed: 652 additions & 479 deletions

examples/MEE-CBC/CBC.eca

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -502,23 +502,24 @@ section Reduce.
502502
/\ Compute.qs{2} = (DoubleQuery.qs `|` (fset1 (s + nth witness p i))){1}).
503503
wp; rnd (fun x => x + pi{2}); auto=> /> &1 &2 ge0_iP _ _ lt_i_szp.
504504
case: (mem DoubleQuery.qs{1} _)=> //=.
505-
split=> [|_]; 1:smt (addbA addbK add0b). (* TODO: instantiate ring structure *)
505+
split=> [sR _|_]; 1:smt(addbA addbK addbC add0b). (* TODO: instantiate ring structure *)
506506
split=> [|_ r _]; 1:smt (dBlock_uffu).
507507
split=> [|_]; 1:smt (dBlock_uffu).
508-
split=> [|_]; 1:smt (addbA addbK add0b). (* TODO: instantiate ring structure *)
509-
by split=> [|/#]; 1:smt (addbA addbK add0b). (* TODO: instantiate ring structure *)
510-
split=> [|_]; 1:smt (addbA addbK add0b). (* TODO: instantiate ring structure *)
508+
split=> [|_]; 1:smt (addbA addbK addbC add0b). (* TODO: instantiate ring structure *)
509+
by split=> [|/#];
510+
split; [congr; congr; smt(addbA addbK addbC add0b) | smt()]. (* TODO: instantiate ring structure *)
511+
split=> [sR _ |_]; 1:smt (addbA addbK addbC add0b). (* TODO: instantiate ring structure *)
511512
split=> [|_ r _]; 1:smt (dBlock_uffu).
512513
split=> [|_]; 1:smt (dBlock_uffu).
513-
split=> [|_]; 1:smt (addbA addbK add0b). (* TODO: instantiate ring structure *)
514+
split=> [|_]; 1:smt (addbA addbK addbC add0b). (* TODO: instantiate ring structure *)
514515
split.
515516
by move=> h; rewrite -addbA Block.subrr Block.addr0 /= /#.
516517
by move=> h; rewrite -addbA Block.subrr Block.addr0 /= /#.
517518
wp; rnd (fun x => x + pi{2}).
518-
auto=> /> &2 szp_neq_0; split=> [|_]; 1:smt (addbA addbK add0b). (* TODO: instantiate ring structure *)
519+
auto=> /> &2 szp_neq_0; split=> [|_]; 1:smt (addbA addbK addbC add0b). (* TODO: instantiate ring structure *)
519520
split=> [|_ s _]; 1:smt (dBlock_uffu).
520521
split=> [|_]; 1:smt (dBlock_uffu).
521-
split=> [|_]; 1:smt (addbA addbK add0b). (* TODO: instantiate ring structure *)
522+
split=> [|_]; 1:smt (addbA addbK addbC add0b). (* TODO: instantiate ring structure *)
522523
smt (size_ge0).
523524
qed.
524525

examples/global-hybrid/GlobalHybridExamp1.ec

Lines changed: 45 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@
1313
require import AllCore Real Distr StdOrder StdBigop GlobalHybrid.
1414
import RealOrder Bigreal BRA.
1515

16+
clone include GlobalHybrid with
17+
type input <- unit (* no additional input *)
18+
proof *.
19+
1620
op n : {int | 1 <= n} as ge1_n.
1721

1822
type t. (* we want t to have 2 ^ n elements, including def *)
@@ -24,13 +28,13 @@ op [lossless] dt : t distr.
2428
axiom mu1_dt (x : t) : mu1 dt x = 1%r / (2 ^ n)%r.
2529

2630
lemma dt_uni : is_uniform dt.
27-
proof. move => x y _ _; by rewrite !mu1_dt. qed.
31+
proof. by move => x y _ _; by rewrite !mu1_dt. qed.
2832

2933
lemma dt_fu : is_full dt.
3034
proof.
3135
rewrite funi_ll_full.
32-
move => x y; by rewrite !mu1_dt.
33-
rewrite dt_ll.
36+
+ by move => x y; by rewrite !mu1_dt.
37+
by rewrite dt_ll.
3438
qed.
3539

3640
op m : {int | 1 <= m} as ge1_m.
@@ -65,7 +69,7 @@ lemma GReal_GIdeal &m :
6569
*)
6670

6771
module Hybrid : HYBRID = {
68-
proc main(i : int) : bool = {
72+
proc main(y : unit, i : int) : bool = {
6973
var b <- true;
7074
var x : t;
7175
(* start from i: *)
@@ -81,18 +85,18 @@ module Hybrid : HYBRID = {
8185
}.
8286

8387
lemma GReal_Hybrid_1 &m :
84-
Pr[GReal.main() @ &m : res] = Pr[Hybrid.main(1) @ &m : res].
88+
Pr[GReal.main() @ &m : res] = Pr[Hybrid.main((), 1) @ &m : res].
8589
proof.
8690
byequiv => //; proc.
8791
seq 2 1 : (={b, i} /\ i{1} = 1); first auto.
88-
sim.
92+
by sim.
8993
qed.
9094

9195
lemma Hybrid_m &m :
92-
Pr[Hybrid.main(m) @ &m : res] = Pr[GIdeal.main() @ &m : res].
96+
Pr[Hybrid.main((), m) @ &m : res] = Pr[GIdeal.main() @ &m : res].
9397
proof.
9498
byequiv => //; proc; sp 1 0.
95-
rcondf{1} 1; auto.
99+
by rcondf{1} 1; auto.
96100
qed.
97101

98102
(* we use upto bad reasoning *)
@@ -147,53 +151,57 @@ module GBad2 = {
147151

148152
lemma Hybrid_step (i' : int) &m :
149153
1 <= i' < m =>
150-
`|Pr[Hybrid.main(i') @ &m : res] - Pr[Hybrid.main(i' + 1) @ &m : res]| <=
154+
`|Pr[Hybrid.main((), i') @ &m : res] -
155+
Pr[Hybrid.main((), i' + 1) @ &m : res]| <=
151156
1%r / (2 ^ n)%r.
152157
proof.
153-
move => [ge1_i' lt_i'_m].
154-
have -> : Pr[Hybrid.main(i') @ &m : res] = Pr[GBad1.main(i') @ &m : res].
155-
byequiv => //; proc; sp 1 2.
158+
move => [ge1_i' lt_i'_m].
159+
have -> :
160+
Pr[Hybrid.main((), i') @ &m : res] = Pr[GBad1.main(i') @ &m : res].
161+
+ byequiv => //; proc; sp 1 2.
156162
rcondt{1} 1; first auto.
157-
sim.
158-
have -> : Pr[Hybrid.main(i' + 1) @ &m : res] = Pr[GBad2.main(i') @ &m : res].
159-
byequiv => //; proc; sp 1 2.
163+
by sim.
164+
have -> :
165+
Pr[Hybrid.main((), i' + 1) @ &m : res] =
166+
Pr[GBad2.main(i') @ &m : res].
167+
+ byequiv => //; proc; sp 1 2.
160168
seq 0 3 : (={i, b}); first auto.
161-
sim.
169+
by sim.
162170
rewrite (ler_trans Pr[GBad2.main(i') @ &m : GBad2.bad]).
163-
byequiv
164-
(_ :
165-
={i} ==> GBad1.bad{1} = GBad2.bad{2} /\ (! GBad2.bad{2} => ={res})) :
166-
GBad1.bad => //.
167-
proc.
168-
seq 5 5 :
169-
(GBad1.bad{1} = GBad2.bad{2} /\ ={i} /\
170-
(!GBad2.bad{2} => ={b})); first auto.
171-
case (GBad1.bad{1}).
172-
while (={i}); auto.
173-
while (={i, b}); auto; smt().
174-
smt().
171+
+ byequiv
172+
(:
173+
={i} ==> GBad1.bad{1} = GBad2.bad{2} /\ (! GBad2.bad{2} => ={res})) :
174+
GBad1.bad => //.
175+
+ proc.
176+
seq 5 5 :
177+
(GBad1.bad{1} = GBad2.bad{2} /\ ={i} /\
178+
(!GBad2.bad{2} => ={b})); first auto.
179+
case (GBad1.bad{1}).
180+
+ by while (={i}); auto.
181+
by while (={i, b}); auto; smt().
182+
by smt().
175183
byphoare => //; proc; sp.
176184
seq 3 :
177185
GBad2.bad
178186
(1%r / (2 ^ n)%r)
179187
1%r
180188
(1%r - (1%r / (2 ^ n)%r))
181189
0%r.
182-
auto.
183-
wp; rnd (pred1 def); auto; smt(mu1_dt).
184-
conseq (_ : _ ==> _ : = 1%r).
185-
while (true) (m - i) => [z |].
186-
auto; smt(dt_ll).
187-
auto; smt().
188-
hoare; while (true); auto.
189-
trivial.
190+
+ by auto.
191+
+ by wp; rnd (pred1 def); auto; smt(mu1_dt).
192+
+ conseq (: _ ==> _ : = 1%r).
193+
while (true) (m - i) => [z |].
194+
+ by auto; smt(dt_ll).
195+
by auto; smt().
196+
+ by hoare; while (true); auto.
197+
done.
190198
qed.
191199

192200
lemma GReal_GIdeal &m :
193201
`|Pr[GReal.main() @ &m : res] - Pr[GIdeal.main() @ &m : res]| <=
194202
(m - 1)%r * (1%r / (2 ^ n)%r).
195203
proof.
196204
rewrite (GReal_Hybrid_1 &m) -(Hybrid_m &m).
197-
rewrite (hybrid_simp _ _ Hybrid) 1:ge1_m => i ge1_i_lt_m.
205+
rewrite (hybrid_simp _ _ _ Hybrid) 1:ge1_m => i ge1_i_lt_m.
198206
by rewrite Hybrid_step.
199207
qed.

0 commit comments

Comments
 (0)