+ (********** from here on, only use the smart constructors *************)
+
+ let zero_bit k m = (k land m) == 0
+
+ let singleton k = leaf k
+
+ let is_singleton n =
+ match HNode.node n with Leaf _ -> true
+ | _ -> false
+
+ let mem (k:elt) n =
+ let kid = H.uid k in
+ let rec loop n = match HNode.node n with
+ | Empty -> false
+ | Leaf j -> H.equal k j
+ | Branch (p, _, l, r) -> if kid <= p then loop l else loop r
+ in loop n
+
+ let rec min_elt n = match HNode.node n with
+ | Empty -> raise Not_found
+ | Leaf k -> k
+ | Branch (_,_,s,_) -> min_elt s
+
+ let rec max_elt n = match HNode.node n with