Inductive Derive_P_A_2 : Conf -> Conf -> Prop :=
  | Derive_X :
      forall (w u : Word) (x : Elt),
      dans x X -> Derive_P_A_2 (cons x w, cons x u) (w, u)
  | Derive_V :
      forall (v w u : Word) (x : Elt),
      dans (couple x (word u)) R ->
      Derive_P_A_2 (cons x w, v) (Append u w, v).Inductive Derive_P_A_2 : Conf -> Conf -> Prop :=
  | Derive_X :
      forall (w u : Word) (x : Elt),
      dans x X -> Derive_P_A_2 (cons x w, cons x u) (w, u)
  | Derive_V :
      forall (v w u : Word) (x : Elt),
      dans (couple x (word u)) R ->
      Derive_P_A_2 (cons x w, v) (Append u w, v).Inductive Derive_P_A_2 : Conf -> Conf -> Prop :=
  | Derive_X :
      forall (w u : Word) (x : Elt),
      dans x X -> Derive_P_A_2 (cons x w, cons x u) (w, u)
  | Derive_V :
      forall (v w u : Word) (x : Elt),
      dans (couple x (word u)) R ->
      Derive_P_A_2 (cons x w, v) (Append u w, v).Definition Derive_P_A_2_nind (x y : Conf) :=
  ex2 (fun a : Elt => dans a X)
    (fun a : Elt => fst x = cons a (fst y) /\ snd x = cons a (snd y)) \/
  (exists a : Elt,
     ex2 (fun w : Word => cons a w = fst x)
       (fun w : Word =>
        ex2 (fun u : Word => dans (couple a (word u)) R)
          (fun u : Word => Append u w = fst y))).

(* Specifications: *)
Lemma Derive_P_A_2_inv : forall x y : Conf, Derive_P_A_2 x y -> Derive_P_A_2_nind x y.