Fixpoint getAllBlists(n : nat) : (list Blist) :=
  match n with
    | 0 => nil :: nil
    | S n' => (map (cons true) (getAllBlists n')) ++
      (map (cons false) (getAllBlists n'))
  end.Fixpoint getAllBlists_app(n : nat) : list Blist :=
  match n with
    | 0 => nil :: nil
    | S n' => (map (fun ls => ls ++ (true :: nil)) (getAllBlists_app n')) ++
      (map (fun ls => ls ++ (false :: nil)) (getAllBlists_app n'))
  end.Fixpoint getAllBvectors(n : nat) : (list (Bvector n)) :=
  match n with
    | 0 => (Vector.nil bool) :: nil
    | S n' => (map (Vector.cons _ true _) (getAllBvectors n')) ++
      (map (Vector.cons _ false _) (getAllBvectors n'))
  end.

(* Specifications: *)
Lemma getAllBvectors_length : forall n, length (getAllBvectors n) = (expnat 2 n).
Lemma getAllBvectors_length_nz : forall n, length (getAllBvectors n) > 0.
Theorem in_getAllBvectors : forall (n : nat)(v : Bvector n), In v (getAllBvectors n).
Lemma vector_tl_eq : forall (A : Set)(n : nat)(v1 v2 : Vector.t A (S n)), v1 = v2 -> Vector.tl v1 = Vector.tl v2.
Lemma vector_cons_eq : forall (A : Set)(n : nat)(v1 v2 : Vector.t A n)(a1 a2 : A), Vector.cons A a1 n v1 = Vector.cons A a2 n v2 -> v1 = v2.
Lemma vector_cons_ne : forall (A : Set)(n : nat)(a1 a2 : Vector.t A n)(a : A), a1 <> a2 -> Vector.cons A a n a1 <> Vector.cons A a n a2.
Lemma map_NoDup : forall (A B : Set)(ls : list A)(f : A -> B), NoDup ls -> (forall a1 a2, a1 <> a2 -> (f a1) <> (f a2)) -> NoDup ((map f) ls).
Lemma getAllBvectors_NoDup : forall (n : nat), NoDup (getAllBvectors n).
Lemma getAllBlists_NoDup : forall n, NoDup (getAllBlists n).
Lemma getAllBlists_app_NoDup : forall n, NoDup (getAllBlists_app n).
Lemma ls_last_exists : forall (A : Type)(ls : list A) n, length ls = (S n) -> exists a ls', (length ls' = n /\ ls = ls' ++ (a :: nil)).
Lemma getAllBlists_app_rel_map : forall n, rel_map (fun ls1 ls2 => ls1 = (rev ls2)) (getAllBlists_app n) (getAllBlists n).
Lemma getAllBlists_rel_map : forall n, rel_map (fun ls1 ls2 => ls1 = (rev ls2)) (getAllBlists n) (getAllBlists_app n).
Lemma getAllBlists_app_In_length : forall n ls, In ls (getAllBlists_app n) -> length ls = n.
Lemma getAllBlists_app_length_In : forall n ls, length ls = n -> In ls (getAllBlists_app n).
Lemma getAllBlists_In_length : forall n ls, In ls (getAllBlists n) -> length ls = n.
Lemma getAllBlists_length_In : forall n ls, length ls = n -> In ls (getAllBlists n).
Lemma getAllBlists_perm : forall n, Permutation (getAllBlists n) (getAllBlists_app n).
Theorem getAllBlists_length : forall n, length (getAllBlists n) = (expnat 2 n).