Module Type MAP.
Parameter elt: Type.
Parameter elt_eq: forall (x y: elt), {x=y} + {x<>y}.
Parameter t: Type -> Type.
Parameter empty: forall (A: Type), t A.
Parameter get: forall (A: Type), elt -> t A -> option A.
Parameter set: forall (A: Type), elt -> A -> t A -> t A.

Axiom gempty: forall (A: Type) (x: elt), get x (empty A) = None.
Axiom gsspec: forall (A: Type) (x y: elt) (v: A) (m: t A),
get x (set y v m) = if elt_eq x y then Some v else get x m.