Proof with intuition; auto.
induction l.
intros.
inversion_clear H0. inversion_clear H1...
intros.
inversion_clear H0.
inversion_clear H1.
rewrite (H a) with b b0...
rewrite IHl with l' l'0...
apply H with x...
Qed.
Definition triple0 A B C (t: A * B * C): A := fst (fst t).
Definition triple1 A B C (t: A * B * C): B := snd (fst t).
Definition triple2 A B C (t: A * B * C): C := snd t.
Fixpoint rsplits T (l: list T): list (list T * T * list T) :=
match l with
| nil => nil
| h :: t => (nil, h, t) :: map (fun p => (h :: triple0 p, triple1 p, triple2 p)) (rsplits t)
end.

(* Specifications: *)
Lemma splits_rsplits (T: Set) (l: list T): splits l = map (fun p => (triple1 p, triple0 p ++ triple2 p)) (rsplits l).
Proof with auto.