End MAP.
Unset Implicit Arguments.
Module Type UNIONFIND.
Parameter elt: Type.
Parameter elt_eq: forall (x y: elt), {x=y} + {x<>y}.
Parameter t: Type.
Parameter repr: t -> elt -> elt.

(* Specifications: *)
Axiom repr_canonical: forall uf a, repr uf (repr uf a) = repr uf a.
Definition sameclass (uf: t) (a b: elt) : Prop := repr uf a = repr uf b.
Axiom sameclass_refl:
forall uf a, sameclass uf a a.
Axiom sameclass_sym:
forall uf a b, sameclass uf a b -> sameclass uf b a.
Axiom sameclass_trans:
forall uf a b c,
sameclass uf a b -> sameclass uf b c -> sameclass uf a c.
Axiom sameclass_repr:
forall uf a, sameclass uf a (repr uf a).
Axiom repr_canonical: forall uf a, repr uf (repr uf a) = repr uf a.
Definition sameclass (uf: t) (a b: elt) : Prop := repr uf a = repr uf b.
Axiom sameclass_refl:
forall uf a, sameclass uf a a.
Axiom sameclass_sym:
forall uf a b, sameclass uf a b -> sameclass uf b a.
Axiom sameclass_trans:
forall uf a b c,
sameclass uf a b -> sameclass uf b c -> sameclass uf a c.
Axiom sameclass_repr:
forall uf a, sameclass uf a (repr uf a).