(**************************************************)
(* miscellanous                                   *)
(**************************************************)

(* Specifications: *)
Lemma assoc_unique_key :
forall (l : assoc) (k : K) (v v' : V),
assoc_hasmem l k v -> assoc_hasmem l k v' -> v' = v.
Lemma assoc_add_find_effect :
forall (l0 l1 : assoc) (k k' : K) (v v' : V),
none V = assoc_find l0 k ->
some V v = assoc_find l1 k -> l1 = assoc_add l0 k' v' -> k' = k /\ v' = v.
Lemma assoc_add_mem_effect :
forall (l0 l1 : assoc) (k k' : K) (v : V),
~ assoc_mem l0 k -> assoc_mem l1 k -> l1 = assoc_add l0 k' v -> k' = k.
Lemma assoc_add_hasmem_effect :
forall (l0 l1 : assoc) (k k' : K) (v v' : V),
~ assoc_hasmem l0 k v ->
assoc_hasmem l1 k v -> l1 = assoc_add l0 k' v' -> k' = k /\ v' = v.
Lemma assoc_del_mem_effect :
forall (l : assoc) (k k' : K),
assoc_mem l k -> ~ assoc_mem (assoc_delete l k') k -> k' = k.
Lemma assoc_del_hasmem_effect :
forall (l : assoc) (k k' : K) (v v' : V),
assoc_hasmem l k v -> ~ assoc_hasmem (assoc_delete l k') k v -> k' = k.