(* * Trakhtenbrot's Theorem *)
(* ** Bounded boolean strings *)
Derive Signature for le.
Local Notation "| s |" := (length s) (at level 100).
Definition bstring n :=
{ s : string bool | | s | <= n}.
Definition bnil n :
bstring n.
Definition bstring_step n (L : list (bstring n)) :=
[bnil (S n)] ++ map (bcons true) L ++ map (bcons false) L.
Definition bcast n s (H : |s| <= n) : bstring n :=
exist _ _ H.

Lemma listable_bstring n :
listable (bstring n).