(*========================================================
             PATHS IN FACES OF QHMAPS
========================================================*)

(* Existence of a REFLEXIVE path from a dart to another 
in a direct hmap face: *)

Fixpoint expf(m:fmap)(x y:dart){struct m}:Prop:=
 match m with
     V => False
  |  I m0 x0 => expf m0 x y \/ x=x0 /\ y=x0
  |  L m0 di0 x0 y0 =>
       expf m0 x y
     \/ let x_1 := A_1 m0 di1 x0 in
        x_1<>nil /\ expf m0 x y0 /\ expf m0 x_1 y
  |  L m0 di1 x0 y0 =>
       expf m0 x y
     \/ let y1 := A m0 di0 y0 in
        y1<>nil /\ expf m0 x y1 /\ expf m0 x0 y
 end.

Lemma diff2_expf : forall(m:fmap)(x y z:dart), inv_qhmap m -> expf m x y -> expf m z y -> (expf m x z \/ expf m z x).