Arguments hash : simpl never.

(* Specifications: *)
Lemma upd_entries : forall T lgk lgv i k lv v, value_of lv v -> (k = 0 -> v = 0) ->
(v = 0 -> forall j v', lv j = Some v' -> v' = 0) -> Zlength T = size -> 0 <= i < size ->
map (hashtable_entry (upd_Znth i T (k, lv)) lgk lgv) (upto (Z.to_nat size)) =
upd_Znth i (map (hashtable_entry T lgk lgv) (upto (Z.to_nat size)))
(ghost_master gsh1 k (Znth i lgk) * @ghost_master _ _ fmap_order gsh1 lv (Znth i lgv)).
Lemma value_of_inj : forall m v v', value_of m v -> value_of m v' -> v = v'.
Lemma upd_entries_A : forall T lgk lgv entries pk pv i k lv v, Znth i entries = (pk, pv) ->
Zlength T = size -> 0 <= i < size -> value_of lv v -> (k = 0 -> v = 0) ->
(v = 0 -> forall j v' : Z, lv j = Some v' -> v' = 0) ->
map (hashtable_entry_A (upd_Znth i T (k, lv)) lgk lgv entries) (upto (Z.to_nat size)) =
upd_Znth i (map (hashtable_entry_A T lgk lgv entries) (upto (Z.to_nat size))) (k_state i lgk pk k * v_state i lgv pv lv).
Lemma sepcon_hoist_if : forall {A} {A_eq : EqDec A} (b c : A) P1 P2 Q,
(if eq_dec b c then P1 * Q else P2 * Q) = Q * if eq_dec b c then P1 else P2.
Lemma failed_entries : forall k i i1 keys lg T entries (Hk : k <> 0) (Hi : 0 <= i < size)
(Hi1 : (i + hash k) mod size = i1 mod size) (HT : Zlength T = size) (Hlg : Zlength lg = size)
(Hkeys: Zlength keys = size)
(Hfail : Forall (fun z => z <> 0 /\ z <> k) (sublist 0 i (rebase keys (hash k)))),
fold_right sepcon emp (upd_Znth (i1 mod size) (map (hashtable_entry T lg entries) (upto (Z.to_nat size))) emp) *
fold_right sepcon emp (map (fun i => ghost_snap (Znth ((i + hash k) mod size) keys)
(Znth ((i + hash k) mod size) lg)) (upto (Z.to_nat i)))
|-- !! Forall (fun x => fst x <> 0 /\ fst x <> k) (sublist 0 i (rebase T (hash k))).
Corollary entries_lookup : forall k i i1 keys lg T entries (Hk : k <> 0) (Hi : 0 <= i < size)
(Hi1 : (i + hash k) mod size = i1 mod size) (HT : Zlength T = size) (Hlg : Zlength lg = size)
(Hkeys: Zlength keys = size)
(Hfail : Forall (fun z => z <> 0 /\ z <> k) (sublist 0 i (rebase keys (hash k))))
(Hhit : fst (Znth (i1 mod size) T) = k \/ fst (Znth (i1 mod size) T) = 0),
fold_right sepcon emp (upd_Znth (i1 mod size) (map (hashtable_entry T lg entries) (upto (Z.to_nat size))) emp) *
fold_right sepcon emp (map (fun i => ghost_snap (Znth ((i + hash k) mod size) keys)
(Znth ((i + hash k) mod size) lg)) (upto (Z.to_nat i)))
|-- !! (lookup T k = Some (i1 mod size)).
Lemma wf_table_upd : forall T k v i (Hwf : wf_table T) (HT : Zlength T = size) (Hi : lookup T k = Some i)
(Hk : k <> 0), wf_table (upd_Znth i T (k, v)).
Corollary wf_table_upd_same : forall T k v i (Hwf : wf_table T) (HT : Zlength T = size)
(Hi : fst (Znth i T) = k) (Hk : k <> 0), wf_table (upd_Znth i T (k, v)).
Lemma snaps_dealloc : forall {A} (l : list A) f g, fold_right sepcon emp (map (fun i => ghost_snap (f i) (g i)) l) |-- |==> emp.
Lemma body_set_item : semax_body Vprog Gprog f_set_item set_item_spec.
Lemma body_get_item : semax_body Vprog Gprog f_get_item get_item_spec.
Lemma body_add_item : semax_body Vprog Gprog f_add_item add_item_spec.
Opaque Znth.
Lemma body_init_table : semax_body Vprog Gprog f_init_table init_table_spec.
Lemma lock_struct_array : forall sh z (v : list val) p,
data_at sh (tarray (tptr (Tstruct _lock_t noattr)) z) v p =
data_at sh (tarray (tptr tlock) z) v p.
Lemma f_pred_exclusive : forall tsh sh gsh (entries : list (val * val)) gh p t locksp lockt resultsp res,
readable_share sh ->
exclusive_mpred (f_lock_pred tsh sh gsh entries gh p t locksp lockt resultsp res).