Ltac list_simpl := (repeat (progress (cbn; autorewrite with list))); cbn.
Definition concat_map A B (f : A -> list B) x := concat (map f x).

(* Specifications: *)
Lemma L_ind_inv x (A : pcp _) :
L_ind P x A ->
exists M, (M = Start \/ M = #) /\ x = embed_string (concat_map fst A) ++ [M] ++ embed_string (concat_map (@rev _ ∘ snd) (rev A)).
Lemma L_ind_palindrome x A :
L_ind P x A ->
x = rev x <-> solution A.
Theorem PCP_CFG :
PCP P <-> PALIN (f P).