Module Dict := D.Definition key := D.key.Definition data := D.data.Definition dict := D.dict.Definition add := D.add.Definition empty := D.empty.Fixpoint addlist (l : list (key * data)) : dict -> dict :=
   fun d : dict =>
   match l with
   | nil => d
   | p :: l' => match p with
                | (k, v) => addlist l' (add k v d)
                end
   end.Definition build (l : list (key * data)) := addlist l empty.Definition A := list K.A.Definition eqdec : forall a b : A, {a = b} + {a <> b}.Definition A := Z.Definition eqdec := Z_eq_dec.Module LZKey := LKey ZKey.Definition A := (K1.A * K2.A)%type.Definition eqdec : forall a b : A, {a = b} + {a <> b}.Definition A := D.A.Definition le := D.le.Definition lt := D.lt.

(* Specifications: *)
Theorem le_trans : transitive A le.
Theorem le_refl : reflexive A le.
Theorem le_antisym : antisymmetric A le.
Theorem lt_intro : forall a b : A, le a b -> a <> b -> lt a b.
Theorem lt_irreflexive : forall a : A, ~ lt a a.
Theorem lt_not_le : forall a b : A, lt a b -> ~ le b a.
Theorem le_not_lt : forall a b : A, le a b -> ~ lt b a.
Theorem lt_trans : transitive A lt.