Definition of_list_length (A : Set)(m : nat)(ls : list A)(pf : length ls = m) : Vector.t A m :=
  match pf with
    | eq_refl => Vector.of_list ls
  end.Definition of_sig_list (A : Set)(m : nat)(l : {ls : list A | length ls = m}) : Vector.t A m :=
  match l with
    | exist _ ls pf => (of_list_length ls pf)
  end.

(* Specifications: *)
Lemma vector_hd_cons_eq : forall(A : Set)(v : Vector.t A 1), v = Vector.cons _ (Vector.hd v) _ (Vector.nil A).
Lemma shiftOut_0 : forall (s : Blist), shiftOut s 0 = Some ([], s).
Theorem shiftOut_S_None : forall (n : nat)(s s1 : Blist)(v1 : Bvector 1), shiftOut s 1 = Some (v1, s1) -> shiftOut s1 n = None -> shiftOut s (S n) = None.
Theorem shiftOut_1_None : forall (n1 n2 : nat)(s : Blist), shiftOut s n1 = None -> n2 >= n1 -> shiftOut s n2 = None.
Theorem shiftOut_S : forall (n : nat)(s s1 s2 : Blist)(v1 : Bvector 1)(v2 : Bvector n), shiftOut s 1 = Some (v1, s1) -> shiftOut s1 n = Some (v2, s2) -> shiftOut s (S n) = Some (Vector.cons _ (Vector.hd v1) _ v2, s2).