Section list_injective.
Variable X : Type.
Definition list_injective (ll : list X) :=  forall l a m b r, ll = l ++ a :: m ++ b :: r -> a <> b.
Fact in_list_injective_0 : list_injective nil.
Fact list_injective_inv x ll : list_injective (x::ll) -> ~ In x ll /\ list_injective ll.
Variable P : list X -> Type.
Hypothesis (HP0 : P nil).
Hypothesis (HP1 : forall x l, ~ In x l -> P l -> P (x::l)).

Theorem list_injective_rect l : list_injective l -> P l.