Section Maps.
Variable A B : Setoid.
Definition Map_law (f : elem A -> elem B) :=
forall x y : elem A, equal _ x y -> equal _ (f x) (f y).
Inductive Map : Type :=
Build_Map : forall (f : elem A -> elem B) (p : Map_law f), Map.
Definition explicit_ap (m : Map) :=
match m return (elem A -> elem B) with
| Build_Map f p => f
end.
Definition ext (f g : Map) :=
forall x : elem A, equal _ (explicit_ap f x) (explicit_ap g x).

Axiom Equiv_map_eq : Equivalence Map ext.