Section pcp_induction.
Implicit Type (l m : list X).
(* Notice that we could downgrade strict_suffix to Prop because a and b could be computed from the knowledge of there existence *)
Definition strict_suffix x y l m := { a : _ & { b | (a <> nil \/ b <> nil) /\ l = a++x /\ m = b++y } }.
Variable (P : list X -> list X -> Type)
(IHP : forall l m, (forall l' m', strict_suffix l' m' l m -> P l' m') -> P l m).

Theorem pcp_induction l m : P l m.