Inductive list_order {A : Type} (R : A -> A -> Prop) : list A -> list A -> Prop :=
| lo_cons:  forall l1 l2 h, Forall (fun x => R x h) l1 -> list_order R (l1 ++ l2) (h :: l2).Inductive list_order {A : Type} (R : A -> A -> Prop) : list A -> list A -> Prop :=
| lo_cons:  forall l1 l2 h, Forall (fun x => R x h) l1 -> list_order R (l1 ++ l2) (h :: l2).Definition W {A : Type} (R : A -> A -> Prop) (l : list A) : Prop :=
  Acc (list_order R) l.

Lemma deuxpointun (A : Type) (R : A -> A -> Prop) (l : list A) (a : A) : (forall b, R b a -> forall l', W R l' -> W R (b :: l')) -> W R l (* /\ (forall l', list_order R l' l -> W R (a :: l')) *) -> W R (a :: l).