Section Path.
Variables (x0_cycle : T) (e : rel T).
Fixpoint path x (p : seq T) :=
if p is y :: p' then e x y && path y p' else true.
Definition cycle p := if p is x :: p' then path x (rcons p' x) else true.

Lemma rev_cycle p : cycle e (rev p) = cycle (fun z => e^~ z) p.