Skip to content

Commit 4f84b7c

Browse files
oskgostrub
authored andcommitted
get rid of axiomatized by in favor of [opaque] with trivial lemma
1 parent 096ff0d commit 4f84b7c

File tree

11 files changed

+124
-84
lines changed

11 files changed

+124
-84
lines changed

examples/MEE-CBC/FunctionalSpec.ec

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,7 @@ clone import BitWord as Octet with
1212
op n <- 8
1313
rename "word" as "octet"
1414
rename "Word" as "Octet"
15-
proof *.
16-
realize gt0_n by trivial.
17-
realize getE by rewrite /"_.[_]".
18-
realize setE by rewrite /"_.[_<-_]".
15+
proof * by trivial.
1916

2017
op o2int (o : octet) : int = bs2int (ofoctet o).
2118
op int2o (i : int) : octet = mkoctet (int2bs 8 i).
@@ -41,8 +38,6 @@ rename "Word" as "Block"
4138
proof *.
4239
realize Alphabet.enum_spec by exact/Octet.enum_spec.
4340
realize ge0_n by trivial.
44-
realize getE by rewrite /"_.[_]".
45-
realize setE by rewrite /"_.[_<-_]".
4641

4742
abbrev dblock = DBlock.dunifin.
4843

@@ -136,8 +131,6 @@ rename "Word" as "Tag"
136131
proof *.
137132
realize Alphabet.enum_spec by exact/Octet.enum_spec.
138133
realize ge0_n by trivial.
139-
realize getE by rewrite /"_.[_]".
140-
realize setE by rewrite /"_.[_<-_]".
141134

142135
(** Messages are just octet lists **)
143136
type msg = octet list.

theories/algebra/Group.ec

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -456,11 +456,11 @@ type exp = ZModE.exp.
456456
import ZModE.
457457

458458
(* -------------------------------------------------------------------- *)
459-
op (^) (x : group) (k : exp) = x ^ (asint k)
460-
axiomatized by expE.
459+
op [opaque] (^) (x : group) (k : exp) = x ^ (asint k).
460+
lemma expE x (k: exp): (^) x k = x ^ (asint k) by rewrite /(^).
461461

462-
op loge (x : group) : exp = inzmod (log x)
463-
axiomatized by logE.
462+
op [opaque] loge (x : group) : exp = inzmod (log x).
463+
lemma logE (x: group) : loge x = inzmod (log x) by rewrite /loge.
464464

465465
(* -------------------------------------------------------------------- *)
466466
abbrev root (k : exp) (x : group) = x ^ (inv k).

theories/algebra/IntDiv.ec

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,26 @@ op euclidef (m d : int) (qr : int * int) =
1818
m = qr.`1 * d + qr.`2
1919
/\ (d <> 0 => 0 <= qr.`2 < `|d|).
2020

21-
op edivn (m d : int) =
21+
op [opaque] edivn (m d : int) =
2222
if (d < 0 \/ m < 0) then (0, 0) else
23-
if d = 0 then (0, m) else choiceb (euclidef m d) (0, 0)
24-
axiomatized by edivn_def.
23+
if d = 0 then (0, m) else choiceb (euclidef m d) (0, 0).
24+
lemma edivn_def (m d: int): edivn m d =
25+
if (d < 0 \/ m < 0) then (0, 0) else
26+
if d = 0 then (0, m) else choiceb (euclidef m d) (0, 0).
27+
proof. by rewrite /edivn. qed.
2528

26-
op edivz (m d : int) =
29+
op [opaque] edivz (m d : int) =
30+
let (q, r) =
31+
if 0 <= m then edivn m `|d| else
32+
let (q, r) = edivn (-(m+1)) `|d| in
33+
(- (q + 1), `|d| - 1 - r)
34+
in (signz d * q, r).
35+
lemma edivz_def (m d: int): edivz m d =
2736
let (q, r) =
2837
if 0 <= m then edivn m `|d| else
2938
let (q, r) = edivn (-(m+1)) `|d| in
3039
(- (q + 1), `|d| - 1 - r)
31-
in (signz d * q, r)
32-
axiomatized by edivz_def.
40+
in (signz d * q, r) by rewrite/edivz.
3341

3442
abbrev (%/) (m d : int) = (edivz m d).`1.
3543
abbrev (%%) (m d : int) = (edivz m d).`2.

theories/crypto/assumptions/DHIES.ec

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ pragma -implicits.
99
pragma +oldip.
1010

1111
(* an "eval safe" version of [dlet] *)
12-
op dlet_locked ['a, 'b] = dlet<:'a, 'b> axiomatized by dlet_lockedE.
12+
op [opaque] dlet_locked ['a, 'b] = dlet<:'a, 'b>.
13+
lemma dlet_lockedE: dlet_locked<:'a, 'b> = dlet<:'a, 'b>.
14+
proof. by rewrite/dlet_locked. qed.
1315

1416
theory DHIES.
1517

theories/datatypes/Array.ec

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,19 @@ lemma ofarray_inj: injective ofarray<:'a>.
2222
proof. by apply/(can_inj _ _ mkarrayK). qed.
2323

2424
(* -------------------------------------------------------------------- *)
25-
op size (arr : 'a array) = size (ofarray arr)
26-
axiomatized by sizeE.
27-
28-
op "_.[_]" (arr : 'a array) (i : int) = nth witness (ofarray arr) i
29-
axiomatized by getE.
30-
31-
op "_.[_<-_]" (arr : 'a array) (i : int) (x : 'a) =
32-
mkarray (mkseq (fun k => if i = k then x else arr.[k]) (size arr))
33-
axiomatized by setE.
25+
op [opaque] size (arr : 'a array) = size (ofarray arr).
26+
lemma sizeE (arr: 'a array): size arr = size (ofarray arr).
27+
proof. by rewrite/size. qed.
28+
29+
op [opaque] "_.[_]" (arr : 'a array) i = nth witness (ofarray arr) i.
30+
lemma getE (arr: 'a array) i: arr.[i] = nth witness (ofarray arr) i.
31+
proof. by rewrite/"_.[_]". qed.
32+
33+
op [opaque] "_.[_<-_]" (arr : 'a array) (i : int) (x : 'a) =
34+
mkarray (mkseq (fun k => if i = k then x else arr.[k]) (size arr)).
35+
lemma setE (arr : 'a array) (i : int) (x : 'a): arr.[i<-x] =
36+
mkarray (mkseq (fun k => if i = k then x else arr.[k]) (size arr)).
37+
proof. by rewrite /"_.[_<-_]". qed.
3438

3539
(* -------------------------------------------------------------------- *)
3640
lemma size_ge0 (arr : 'a array): 0 <= size arr.

theories/datatypes/FMap.ec

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ proof. by []. qed.
2525
abbrev (\in) ['a 'b] x (m : ('a, 'b) fmap) = (dom m x).
2626
abbrev (\notin) ['a 'b] x (m : ('a, 'b) fmap) = ! (dom m x).
2727

28-
op rng ['a 'b] (m : ('a, 'b) fmap) =
29-
fun y => exists x, m.[x] = Some y
30-
axiomatized by rngE.
28+
op [opaque] rng ['a 'b] (m : ('a, 'b) fmap) = fun y => exists x, m.[x] = Some y.
29+
lemma rngE (m : ('a, 'b) fmap):
30+
rng m = fun y => exists x, m.[x] = Some y by rewrite /rng.
3131

3232
lemma get_none (m : ('a, 'b) fmap, x : 'a) :
3333
x \notin m => m.[x] = None.
@@ -458,8 +458,9 @@ case: (y = x) => [->|] /=; case: (p x b) => /=.
458458
qed.
459459

460460
(* ==================================================================== *)
461-
op fdom ['a 'b] (m : ('a, 'b) fmap) =
462-
oflist (to_seq (dom m)) axiomatized by fdomE.
461+
op [opaque] fdom ['a 'b] (m : ('a, 'b) fmap) = oflist (to_seq (dom m)).
462+
lemma fdomE (m : ('a, 'b) fmap): fdom m = oflist (to_seq (dom m)).
463+
proof. by rewrite/fdom. qed.
463464

464465
(* -------------------------------------------------------------------- *)
465466
lemma mem_fdom ['a 'b] (m : ('a, 'b) fmap) (x : 'a) :
@@ -512,8 +513,9 @@ lemma mem_fdom_rem ['a 'b] (m : ('a, 'b) fmap) x y :
512513
proof. by rewrite fdom_rem in_fsetD1. qed.
513514

514515
(* ==================================================================== *)
515-
op frng ['a 'b] (m : ('a, 'b) fmap) =
516-
oflist (to_seq (rng m)) axiomatized by frngE.
516+
op [opaque] frng ['a 'b] (m : ('a, 'b) fmap) = oflist (to_seq (rng m)).
517+
lemma frngE (m : ('a, 'b) fmap): frng m = oflist (to_seq (rng m)).
518+
proof. by rewrite/frng. qed.
517519

518520
(* -------------------------------------------------------------------- *)
519521
lemma mem_frng ['a 'b] (m : ('a, 'b) fmap) (y : 'b) :
@@ -590,9 +592,10 @@ by apply/fsetP=> x; rewrite mem_fdom mem_join in_fsetU !mem_fdom.
590592
qed.
591593
592594
(* -------------------------------------------------------------------- *)
593-
op has (P : 'a -> 'b -> bool) (m : ('a, 'b) fmap) =
594-
has (fun x=> P x (oget m.[x])) (elems (fdom m))
595-
axiomatized by hasE.
595+
op [opaque] has (P : 'a -> 'b -> bool) (m : ('a, 'b) fmap) =
596+
has (fun x=> P x (oget m.[x])) (elems (fdom m)).
597+
lemma hasE (P : 'a -> 'b -> bool) m:
598+
has P m = has (fun x=>P x (oget m.[x])) (elems (fdom m)) by rewrite/has.
596599
597600
(* -------------------------------------------------------------------- *)
598601
lemma hasP (P : 'a -> 'b -> bool) (m : ('a, 'b) fmap):
@@ -604,9 +607,11 @@ by split=> [Pxy|/>]; exists y.
604607
qed.
605608
606609
(* -------------------------------------------------------------------- *)
607-
op find (P : 'a -> 'b -> bool) (m : ('a, 'b) fmap) =
608-
onth (elems (fdom m)) (find (fun x=> P x (oget m.[x])) (elems (fdom m)))
609-
axiomatized by findE.
610+
op [opaque] find (P : 'a -> 'b -> bool) (m : ('a, 'b) fmap) =
611+
onth (elems (fdom m)) (find (fun x=> P x (oget m.[x])) (elems (fdom m))).
612+
lemma findE (P : 'a -> 'b -> bool) m: find P m =
613+
onth (elems (fdom m)) (find (fun x=> P x (oget m.[x])) (elems (fdom m))).
614+
proof. by rewrite/find. qed.
610615
611616
(* -------------------------------------------------------------------- *)
612617

theories/datatypes/FSet.ec

Lines changed: 39 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,12 @@ lemma perm_eq_oflistP (s1 s2 : 'a list):
6060
proof. by split; [apply perm_eq_oflist | apply oflist_perm_eq_undup]. qed.
6161

6262
(* -------------------------------------------------------------------- *)
63-
op card ['a] (s : 'a fset) = size (elems s) axiomatized by cardE.
63+
op [opaque] card ['a] (s : 'a fset) = size (elems s).
64+
lemma cardE (s : 'a fset): card s = size (elems s) by rewrite/card.
6465

6566
(* -------------------------------------------------------------------- *)
66-
op mem ['a] (s : 'a fset) (x : 'a) = mem (elems s) x
67-
axiomatized by memE.
67+
op [opaque] mem ['a] (s : 'a fset) (x : 'a) = mem (elems s) x.
68+
lemma memE (s : 's fset) x: mem s x = mem (elems s) x by rewrite /mem.
6869
6970
abbrev (\in) (z : 'a) (s : 'a fset) = mem s z.
7071
abbrev (\notin) (z : 'a) (s : 'a fset) = !mem s z.
@@ -84,17 +85,25 @@ by move=> x; rewrite -!memE h.
8485
qed.
8586
8687
(* -------------------------------------------------------------------- *)
87-
op fset0 ['a] = oflist [<:'a>] axiomatized by set0E.
88-
op fset1 ['a] (z : 'a) = oflist [z] axiomatized by set1E.
88+
op [opaque] fset0 ['a] = oflist [<:'a>].
89+
lemma set0E: fset0<:'a> = oflist [<:'a>] by rewrite/fset0.
8990
90-
op (`|`) ['a] (s1 s2 : 'a fset) = oflist (elems s1 ++ elems s2)
91-
axiomatized by setUE.
91+
op [opaque] fset1 ['a] (z : 'a) = oflist [z].
92+
lemma set1E (z : 'a): fset1 z = oflist [z] by rewrite/fset1.
9293

93-
op (`&`) ['a] (s1 s2 : 'a fset) = oflist (filter (mem s2) (elems s1))
94-
axiomatized by setIE.
94+
op [opaque] (`|`) ['a] (s1 s2 : 'a fset) = oflist (elems s1 ++ elems s2).
95+
lemma setUE (s1 s2 : 'a fset): s1 `|` s2 = oflist (elems s1 ++ elems s2).
96+
proof. by rewrite/(`|`). qed.
9597

96-
op (`\`) ['a] (s1 s2 : 'a fset) = oflist (filter (predC (mem s2)) (elems s1))
97-
axiomatized by setDE.
98+
op [opaque] (`&`) ['a] (s1 s2 : 'a fset) =
99+
oflist (filter (mem s2) (elems s1)).
100+
lemma setIE (s1 s2 : 'a fset):
101+
s1 `&` s2 = oflist (filter (mem s2) (elems s1)) by rewrite/(`&`).
102+
103+
op [opaque] (`\`) ['a] (s1 s2 : 'a fset) =
104+
oflist (filter (predC (mem s2)) (elems s1)).
105+
lemma setDE (s1 s2 : 'a fset):
106+
s1 `\` s2 = oflist (filter (predC (mem s2)) (elems s1)) by rewrite/(`\`).
98107

99108
(* -------------------------------------------------------------------- *)
100109
lemma in_fset0: forall x, mem fset0<:'a> x <=> false.
@@ -201,8 +210,8 @@ right; by rewrite all_xs_not_in_ys.
201210
qed.
202211
203212
(* -------------------------------------------------------------------- *)
204-
op pick ['a] (A : 'a fset) = head witness (elems A)
205-
axiomatized by pickE.
213+
op [opaque] pick ['a] (A : 'a fset) = head witness (elems A).
214+
lemma pickE (A : 'a fset): pick A = head witness (elems A) by rewrite/pick.
206215

207216
lemma pick0: pick<:'a> fset0 = witness.
208217
proof. by rewrite pickE elems_fset0. qed.
@@ -214,9 +223,10 @@ by move=> /(mem_head_behead witness) <-.
214223
qed.
215224
216225
(* -------------------------------------------------------------------- *)
217-
op filter ['a] (p : 'a -> bool) (s : 'a fset) =
218-
oflist (filter p (elems s))
219-
axiomatized by filterE.
226+
op [opaque] filter ['a] (p : 'a -> bool) (s : 'a fset) =
227+
oflist (filter p (elems s)).
228+
lemma filterE (p: 'a -> bool) s: filter p s = oflist (filter p (elems s)).
229+
proof. by rewrite/filter. qed.
220230
221231
(* -------------------------------------------------------------------- *)
222232
lemma in_filter (p : 'a -> bool) (s : 'a fset):
@@ -612,8 +622,10 @@ by apply: contraL o_cA => ->; rewrite fcards0.
612622
qed.
613623
614624
(* -------------------------------------------------------------------- *)
615-
op image (f: 'a -> 'b) (A : 'a fset): 'b fset = oflist (map f (elems A))
616-
axiomatized by imageE.
625+
op [opaque] image (f: 'a -> 'b) (A : 'a fset): 'b fset =
626+
oflist (map f (elems A)).
627+
lemma imageE (f: 'a -> 'b) A: image f A = oflist (map f (elems A)).
628+
proof. by rewrite/image. qed.
617629

618630
lemma imageP (f : 'a -> 'b) (A : 'a fset) (b : 'b):
619631
mem (image f A) b <=> (exists a, mem A a /\ f a = b).
@@ -686,9 +698,11 @@ by rewrite /image /card -(perm_eq_size _ _ uniq_f) size_map.
686698
qed.
687699

688700
(* -------------------------------------------------------------------- *)
689-
op product (A : 'a fset) (B : 'b fset): ('a * 'b) fset =
690-
oflist (allpairs (fun x y => (x,y)) (elems A) (elems B))
691-
axiomatized by productE.
701+
op [opaque] product (A : 'a fset) (B : 'b fset): ('a * 'b) fset =
702+
oflist (allpairs (fun x y => (x,y)) (elems A) (elems B)).
703+
lemma productE (A : 'a fset) (B : 'b fset):
704+
product A B = oflist (allpairs (fun x y => (x,y)) (elems A) (elems B)).
705+
proof. by rewrite/product. qed.
692706

693707
lemma productP (A : 'a fset) (B : 'b fset) (a : 'a) (b : 'b):
694708
(a, b) \in product A B <=> (a \in A) /\ (b \in B).
@@ -704,9 +718,10 @@ apply allpairs_uniq; smt(uniq_elems).
704718
qed.
705719
706720
(* -------------------------------------------------------------------- *)
707-
op fold (f : 'a -> 'b -> 'b) (z : 'b) (A : 'a fset) : 'b =
708-
foldr f z (elems A)
709-
axiomatized by foldE.
721+
op [opaque] fold (f : 'a -> 'b -> 'b) (z : 'b) (A : 'a fset) : 'b =
722+
foldr f z (elems A).
723+
lemma foldE (f : 'a -> 'b -> 'b) z A: fold f z A = foldr f z (elems A).
724+
proof. by rewrite/fold. qed.
710725
711726
lemma fold0 (f : 'a -> 'b -> 'b) (z : 'b): fold f z fset0 = z.
712727
proof. by rewrite foldE elems_fset0. qed.

theories/datatypes/Word.eca

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,17 @@ by rewrite -(@ofwordK s1) // -(@ofwordK s2) // eq_mkword.
6464
qed.
6565

6666
(* -------------------------------------------------------------------- *)
67-
op "_.[_]" (w : word) (i : int): t =
68-
if 0 <= i < n then nth witness (ofword w) i else dchar
69-
axiomatized by getE.
70-
71-
op "_.[_<-_]" (w : word) (i : int) (x : t) : word =
72-
mkword (mkseq (fun k => if i = k then x else w.[k]) n)
73-
axiomatized by setE.
67+
op [opaque] "_.[_]" (w : word) (i : int): t =
68+
if 0 <= i < n then nth witness (ofword w) i else dchar.
69+
lemma getE w i:
70+
w.[i] = if 0 <= i < n then nth witness (ofword w) i else dchar.
71+
proof. by rewrite/"_.[_]". qed.
72+
73+
op [opaque] "_.[_<-_]" (w : word) (i : int) (x : t) : word =
74+
mkword (mkseq (fun k => if i = k then x else w.[k]) n).
75+
lemma setE w i x:
76+
w.[i<-x] = mkword (mkseq (fun k => if i = k then x else w.[k]) n).
77+
proof. by rewrite/"_.[_<-_]". qed.
7478

7579
(* -------------------------------------------------------------------- *)
7680
lemma wordP (w1 w2 : word):

theories/distributions/DList.ec

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22
require import AllCore List FSet Distr DProd StdOrder StdBigop.
33
(*---*) import Bigreal Bigreal.BRM MUnit.
44

5-
op dlist (d : 'a distr) (n : int): 'a list distr =
6-
fold (fun d' => dapply (fun (xy : 'a * 'a list) => xy.`1 :: xy.`2) (d `*` d')) (dunit []) n
7-
axiomatized by dlist_def.
5+
op [opaque] dlist (d : 'a distr) (n : int): 'a list distr =
6+
fold (fun d' => dapply (fun (xy : 'a * 'a list) => xy.`1 :: xy.`2) (d `*` d')) (dunit []) n.
7+
lemma dlist_def (d : 'a distr) n: dlist d n = fold
8+
(fun d' => dapply (fun (xy : 'a * 'a list) => xy.`1 :: xy.`2) (d `*` d'))
9+
(dunit []) n by rewrite/dlist.
810
911
lemma dlist0 (d : 'a distr) n: n <= 0 => dlist d n = dunit [].
1012
proof. by move=> ge0_n; rewrite dlist_def foldle0. qed.

theories/distributions/Distr.ec

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1738,9 +1738,10 @@ pose s' := undup _; apply/(@ler_trans (big predT (fun x => ma x) s')).
17381738
by apply/le1_sum_isdistr/undup_uniq.
17391739
qed.
17401740

1741-
op (`*`) (da : 'a distr) (db : 'b distr) =
1742-
mk (mprod (mu1 da) (mu1 db))
1743-
axiomatized by dprod_def.
1741+
op [opaque] (`*`) (da : 'a distr) (db : 'b distr) =
1742+
mk (mprod (mu1 da) (mu1 db)).
1743+
lemma dprod_def (da : 'a distr) (db : 'b distr):
1744+
da `*` db = mk (mprod (mu1 da) (mu1 db)) by rewrite/(`*`).
17441745

17451746
lemma dprod1E (da : 'a distr) (db : 'b distr) a b:
17461747
mu1 (da `*` db) (a,b) = mu1 da a * mu1 db b.
@@ -2019,11 +2020,13 @@ have := dprod_dmap_cross da db dc dd idfun idfun F1 idfun idfun F2 _.
20192020
qed.
20202021
20212022
(* -------------------------------------------------------------------- *)
2022-
op djoin (ds : 'a distr list) : 'a list distr =
2023+
op [opaque] djoin (ds : 'a distr list) : 'a list distr =
20232024
foldr
20242025
(fun d1 dl => dapply (fun xy : _ * _ => xy.`1 :: xy.`2) (d1 `*` dl))
2025-
(dunit []) ds
2026-
axiomatized by djoin_axE.
2026+
(dunit []) ds.
2027+
lemma djoin_axE (ds : 'a distr list): djoin ds = foldr
2028+
(fun d1 dl => dapply (fun xy : _ * _ => xy.`1 :: xy.`2) (d1 `*` dl))
2029+
(dunit []) ds by rewrite/djoin.
20272030
20282031
abbrev djoinmap ['a 'b] (d : 'a -> 'b distr) xs = djoin (map d xs).
20292032

0 commit comments

Comments
 (0)