(**************************************************)
(* some invariant properties about add and delete *)
(**************************************************)

(* Specifications: *)
(* add/mem ******************************)
Lemma assoc_add_mem_invar :
forall (l l' : assoc) (k k' : K) (v : V),
l' = assoc_add l k' v -> k' <> k -> assoc_mem l k -> assoc_mem l' k.
Lemma assoc_add_mem_invar_contrap :
forall (l l' : assoc) (k k' : K) (v : V),
l' = assoc_add l k' v -> k' <> k -> assoc_mem l' k -> assoc_mem l k.
Lemma assoc_add_not_mem_invar :
forall (l l' : assoc) (k k' : K) (v' : V),
l' = assoc_add l k' v' -> k' <> k -> ~ assoc_mem l k -> ~ assoc_mem l' k.
Lemma assoc_add_not_mem_invar_contrap :
forall (l l' : assoc) (k k' : K) (v' : V),
l' = assoc_add l k' v' -> k' <> k -> ~ assoc_mem l' k -> ~ assoc_mem l k.