Module S := MSetList.Make PositiveOrderedTypeBits.(*
We choose to use lists as it is as fast as AVLs for a limited number of points but they are easier to debug.
Module S := MSetAVL.Make PositiveOrderedTypeBits.
*)

Module SWP := WPropertiesOn PositiveOrderedTypeBits S.Definition t := S.t.Definition eq := S.Equal.Definition eqb := S.equal.Definition eqb_eq := S.equal_spec.Definition lt := S.lt.Instance lt_compat : Proper (eq==>eq==>iff) lt.Instance lt_strorder : StrictOrder lt.Definition compare := S.compare.Definition compare_spec := S.compare_spec.Module SS := MSetList.Make SetOfSetsOfPositiveOrderedType.(*
Module SS := MSetAVL.Make SetOfSetsOfPositiveOrderedType.
*)

Definition fstpp (pair : (positive * positive)) :=
  match pair with
    |(a,b) => Pos.min a b
  end.Definition sndpp (pair : (positive * positive)) :=
  match pair with
    |(a,b) => Pos.max a b
  end.Definition t:= (positive * positive).Definition eq (t1 t2 : t) :=
    Pos.eq (fstpp(t1)) (fstpp(t2)) /\ Pos.eq (sndpp(t1)) (sndpp(t2)).Definition eqb (t1 t2 : t) :=
    Pos.eqb (fstpp(t1)) (fstpp(t2)) && Pos.eqb (sndpp(t1)) (sndpp(t2)).

Lemma eqb_eq : forall t1 t2, eqb t1 t2 = true <-> eq t1 t2.