(* Path order and merge *)
Definition path_ord (uf: t) : elt -> elt -> Prop := order uf.(m).

(* Specifications: *)
Lemma path_ord_wellfounded:
forall uf, well_founded (path_ord uf).
Lemma path_ord_canonical:
forall uf x y, repr uf x = x -> ~path_ord uf y x.
Lemma path_ord_merge_1:
forall uf a b x y,
path_ord uf x y -> path_ord (merge uf a b) x y.
Lemma path_ord_merge_2:
forall uf a b,
repr uf a <> repr uf b -> path_ord (merge uf a b) b (repr uf a).
Lemma path_ord_wellfounded:
forall uf, well_founded (path_ord uf).
Lemma path_ord_canonical:
forall uf x y, repr uf x = x -> ~path_ord uf y x.
Lemma path_ord_merge_1:
forall uf a b x y,
path_ord uf x y -> path_ord (merge uf a b) x y.
Lemma path_ord_merge_2:
forall uf a b,
repr uf a <> repr uf b -> path_ord (merge uf a b) b (repr uf a).