Definition elt := X.t.Definition elt_eq := X.eq.Definition t : Type -> Type := PMap.t.Definition init (A: Type) (x: A) := PMap.init x.Definition get (A: Type) (i: X.t) (m: t A) := PMap.get (X.index i) m.Definition set (A: Type) (i: X.t) (v: A) (m: t A) := PMap.set (X.index i) v m.Definition map (A B: Type) (f: A -> B) (m: t A) : t B := PMap.map f m.

Lemma gsspec: forall (A: Type) (i j: X.t) (x: A) (m: t A), get i (set j x m) = if X.eq i j then x else get i m.