Module Data := D.Module Import MapS := IntMake(I)(X).Module Import MD := OrderedTypeFacts(D).Module LO := FMapList.Make_ord(X)(D).Definition t := MapS.t D.t.Definition cmp e e' :=
   match D.compare e e' with EQ _ => true | _ => false end.Definition elements (m:t) :=
    LO.MapS.Build_slist (Raw.Proofs.elements_sort (is_bst m)).(** * As comparison function, we propose here a non-structural
    version faithful to the code of Ocaml's Map library, instead of
    the structural version of FMapAVL *)

  Fixpoint cardinal_e (e:Raw.enumeration D.t) :=
    match e with
     | Raw.End _ => 0%nat
     | Raw.More _ _ r e => S (Raw.cardinal r + cardinal_e e)
    end.

Lemma cons_cardinal_e : forall m e, cardinal_e (Raw.cons m e) = (Raw.cardinal m + cardinal_e e)%nat.