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.

Theorem le_trans : transitive A le.