Definition lt_eq_lt_dec : forall a b : A, {lt a b} + {a = b} + {lt b a}.Definition key := Key.A.Definition data := Val.data.Definition dict := key -> option data.Definition empty (k : key) := None (A:=data).Definition find (k : key) (d : dict) := d k.Definition add (k : key) (v : data) (d : dict) : dict :=
   fun k' : key =>
   match Key.eqdec k' k with
   | left _ => Some v
   | right _ => d k'
   end.

(* Specifications: *)
Theorem empty_def : forall k : key, find k empty = None.
Theorem success : forall (d : dict) (k : key) (v : data), find k (add k v d) = Some v.
Theorem diff_key : forall (d : dict) (k k' : key) (v : data), k <> k' -> find k (add k' v d) = find k d.