Definition elt := X.t.Definition elt_eq := X.eq.Definition t : Type -> Type := PTree.t.Definition empty (A: Type): t A := PTree.empty A.Definition get (A: Type) (k: elt) (m: t A): option A := PTree.get (X.index k) m.Definition set (A: Type) (k: elt) (v: A) (m: t A): t A := PTree.set (X.index k) v m.Definition remove (A: Type) (k: elt) (m: t A): t A := PTree.remove (X.index k) m.

Theorem gsspec: forall (A: Type) (i j: elt) (x: A) (m: t A), get i (set j x m) = if elt_eq i j then Some x else get i m.