Definition xkeys (A: Type) (m: t A) (i: positive) :=
    List.map (@fst positive A) (xelements m i nil).Remark xkeys_leaf:
    forall A i, xkeys (@Leaf A) i = nil.Remark xkeys_node:
    forall A (m1: t A) o (m2: t A) i,
    xkeys (Node m1 o m2) i =
       xkeys m1 (xO i)
    ++ match o with None => nil | Some v => prev i :: nil end
    ++ xkeys m2 (xI i).

(* Specifications: *)
Lemma in_xkeys: forall (A: Type) (m: t A) (i k: positive), In k (xkeys m i) -> (exists j, k = prev (prev_append j i)).
Lemma xelements_keys_norepet: forall (A: Type) (m: t A) (i: positive), list_norepet (xkeys m i).
Theorem elements_keys_norepet: forall (A: Type) (m: t A), list_norepet (List.map (@fst elt A) (elements m)).
Lemma in_xkeys: forall (A: Type) (m: t A) (i k: positive), In k (xkeys m i) -> (exists j, k = prev (prev_append j i)).
Lemma xelements_keys_norepet: forall (A: Type) (m: t A) (i: positive), list_norepet (xkeys m i).
Theorem elements_keys_norepet: forall (A: Type) (m: t A), list_norepet (List.map (@fst elt A) (elements m)).