(* ** PCP reduces to BPCP *)
(* natural numbers n to bitstrings of the form 1^n *)
Definition to_bitstring (n : nat) : string bool := Nat.iter n (cons true) [].
(* strings of natural numbers to bitstrings, [ n1, ... n2 ] |-> 1^n1 0 ... 1^n2 0 *)
Fixpoint f_s (x : string nat) : string bool :=
match x with
| nil => nil
| a :: x => to_bitstring a ++ [false] ++ f_s x
end.

Lemma f_s_app x y : f_s (x ++ y) = f_s x ++ f_s y.