Fixpoint before {A: Type} (x : A) y l : Prop :=
  match l with
    | [] => False
    | a :: l' =>
      a = x \/
      (a <> y /\ before x y l')
  end.

Lemma before_2_3_reduce : forall xs ys zs x y a b, before(A:=A) a b (xs ++ x :: ys ++ y :: zs) -> a <> x -> a <> y -> before a b (xs ++ ys ++ zs).