Inductive Bar (A : Set) (P : list A -> Set) : list A -> Set :=
  | Base : forall l : list A, P l -> Bar A P l
  | Ind : forall l : list A, (forall a : A, Bar A P (a :: l)) -> Bar A P l.Inductive Bar (A : Set) (P : list A -> Set) : list A -> Set :=
  | Base : forall l : list A, P l -> Bar A P l
  | Ind : forall l : list A, (forall a : A, Bar A P (a :: l)) -> Bar A P l.Inductive Bar (A : Set) (P : list A -> Set) : list A -> Set :=
  | Base : forall l : list A, P l -> Bar A P l
  | Ind : forall l : list A, (forall a : A, Bar A P (a :: l)) -> Bar A P l.Definition GRBar (A : Set) (R : Rel A) := Bar A (GoodR A R).Definition WR (A : Set) (R : Rel A) := GRBar A R nil.

Lemma monGRBarAux : forall (A : Set) (R : Rel A) (l : list A), GRBar A R l -> forall xs bs cs : list A, l = xs ++ cs -> GRBar A R (xs ++ bs ++ cs).