Module Type DICT.
Parameter key : Set.
Parameter data : Set. (* data associated with keys *)
Parameter dict : Set. (* the type associated with dictionaries *)
Parameter empty : dict. (* dictionary without any entry *)
Parameter add : key -> data -> dict -> dict. (* add an entry to a dictionary *)
Parameter find : key -> dict -> option data. (* get the value from the key  *)
(* relationships between find, add and empty *)

Axiom empty_def : forall k : key, find k empty = None.