Module Type MAP.
Parameter elt: Type.
Parameter elt_eq: forall (a b: elt), {a = b} + {a <> b}.
Parameter t: Type -> Type.
Parameter init: forall (A: Type), A -> t A.
Parameter get: forall (A: Type), elt -> t A -> A.
Parameter set: forall (A: Type), elt -> A -> t A -> t A.
Parameter map: forall (A B: Type), (A -> B) -> t A -> t B.

Axiom gmap:
forall (A B: Type) (f: A -> B) (i: elt) (m: t A),
get i (map f m) = f(get i m).