(* 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).