Definition elt := positive.Definition elt_eq := peq.Definition t (A : Type) : Type := (A * PTree.t A)%type.Definition init (A : Type) (x : A) :=
    (x, PTree.empty A).Definition get (A : Type) (i : positive) (m : t A) :=
    match PTree.get i (snd m) with
    | Some x => x
    | None => fst m
    end.Definition set (A : Type) (i : positive) (x : A) (m : t A) :=
    (fst m, PTree.set i x (snd m)).

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