(* here's a different characterization based on sequences of states *)

(* Specifications: *)
Lemma path_take {T: finType} (e: rel T) (x y: T) (p: seq T) (n: nat) :
path e x p -> path e x (take n p).
Lemma last_take {T: finType} (e: rel T) (x y: T) (p p1 p2: seq T) :
x \in p -> last y (take ((index x p).+1) p) = x.
Lemma subpath_prop {T: finType} (e: rel T) (x y: T) (p: seq T) :
path e x p -> y \in p ->
exists p', path e x p' /\ last x p' = y.