(**************************************************)
(*  some decidability properties                  *)
(**************************************************)

(* Specifications: *)
Lemma assoc_mem_dec :
forall (l : assoc) (k : K), {assoc_mem l k} + {~ assoc_mem l k}.
Lemma assoc_hasmem_dec :
forall (Veq_dec : forall x y : V, {x = y} + {x <> y})
(l : assoc) (k : K) (v : V), {assoc_hasmem l k v} + {~ assoc_hasmem l k v}.
Lemma assoc_hasmem_ex_dec :
forall (Veq_dec : forall x y : V, {x = y} + {x <> y})
(l : assoc) (k : K) (v : V),
{(exists v : V, assoc_hasmem l k v)} +
{~ (exists v : V, assoc_hasmem l k v)}.
Lemma assoc_add_mem_choice :
forall (b0 b : assoc) (k k0 : K) (v0 : V),
b = assoc_add b0 k0 v0 -> assoc_mem b k -> assoc_mem b0 k \/ k = k0.
Lemma assoc_add_hasmem_choice :
forall (b0 b : assoc) (k k0 : K) (v v0 : V),
b = assoc_add b0 k0 v0 ->
assoc_hasmem b k v -> assoc_hasmem b0 k v \/ k = k0 /\ v = v0.