@@ -4,6 +4,8 @@ From Perennial.base_logic Require Import ghost_map mono_nat saved_prop.
4
4
From Perennial.program_proof Require Import grove_prelude.
5
5
From Perennial.Helpers Require finite.
6
6
7
+ Local Ltac Zify.zify_post_hook ::= Z.div_mod_to_equations.
8
+
7
9
Definition dbkey := string.
8
10
Definition dbval := option string.
9
11
Definition dbhist := list dbval.
@@ -46,7 +48,7 @@ Definition txnst_to_u64 (s : txnst) :=
46
48
Definition gids_all : gset u64 := list_to_set (fmap W64 (seqZ 0 2)).
47
49
48
50
Lemma size_gids_all :
49
- size gids_all < 2 ^ 64 - 1.
51
+ 0 < size gids_all < 2 ^ 64 - 1.
50
52
Proof .
51
53
rewrite /gids_all size_list_to_set; last first.
52
54
{ apply seq_U64_NoDup; lia. }
160
162
Definition dblog := list ccommand.
161
163
162
164
(** Converting keys to group IDs. *)
163
- Definition key_to_group (key : dbkey) : u64.
164
- Admitted .
165
+ Definition key_to_group (key : dbkey) : u64 :=
166
+ String.length key `mod` size gids_all .
165
167
166
168
(** Participant groups. *)
167
169
Definition ptgroups (keys : gset dbkey) : gset u64 :=
@@ -185,7 +187,14 @@ Definition valid_pwrs (gid : u64) (pwrs : dbmap) :=
185
187
186
188
Lemma elem_of_key_to_group key :
187
189
key_to_group key ∈ gids_all.
188
- Admitted .
190
+ Proof .
191
+ rewrite /key_to_group /gids_all.
192
+ rewrite size_list_to_set; last first.
193
+ { apply seq_U64_NoDup; lia. }
194
+ rewrite length_fmap length_seqZ.
195
+ apply elem_of_list_to_set, elem_of_list_fmap_1, elem_of_seqZ.
196
+ lia.
197
+ Qed .
189
198
190
199
Lemma elem_of_key_to_group_ptgroups key keys :
191
200
key ∈ keys ->
@@ -284,6 +293,16 @@ Definition valid_wrs (wrs : dbmap) := dom wrs ⊆ keys_all.
284
293
285
294
Definition valid_key (key : dbkey) := key ∈ keys_all.
286
295
296
+ Lemma valid_key_length key :
297
+ valid_key key ->
298
+ String.length key < 2 ^ 64.
299
+ Proof .
300
+ intros Hvk.
301
+ rewrite /valid_key /keys_all in Hvk.
302
+ apply elem_of_list_to_set, elem_of_list_fmap_2 in Hvk.
303
+ by destruct Hvk as ([k Hk] & -> & _).
304
+ Qed .
305
+
287
306
Definition valid_ccommand gid (c : ccommand) :=
288
307
match c with
289
308
| CmdCommit ts pwrs => valid_ts ts ∧ valid_pwrs gid pwrs
0 commit comments