Definition Vector_0_is_nil (T : Type) (v : Vector.t T 0) : v = Vector.nil T :=
  match v with Vector.nil => eq_refl end.

(* Specifications: *)
Lemma VectorToList_cons A n: forall (a:A) l, Vector.to_list (Vector.cons A a n l) = List.cons a (Vector.to_list l).
Lemma VectorToList_length {A}: forall n (v: Vector.t A n), length (Vector.to_list v) = n.
Lemma VectorToList_combine A n: forall (a:A) b v1 v2, combine (Vector.to_list (Vector.cons A a n v1)) (Vector.to_list (Vector.cons A b n v2)) = (a,b) :: combine (Vector.to_list v1) (Vector.to_list v2).
Theorem VectorToList_append {A}: forall (m:nat) (v2:Vector.t A m) (n : nat) (v1 : Vector.t A n), (Vector.to_list v1) ++ (Vector.to_list v2) = Vector.to_list (Vector.append v1 v2).
Lemma Forall2_map {A B} (f:A -> B): forall l m, Forall2 (fun x y => y = f x) l m -> map f l = m.
Lemma app_inv_length1 {A}: forall (l1 m1 l2 m2:list A), l1++l2 = m1++m2 -> length l1 = length m1 -> l1=m1 /\ l2=m2.
Lemma app_inv_length2 {A}: forall (l1 m1 l2 m2:list A), l1++l2 = m1++m2 -> length l2 = length m2 -> l1=m1 /\ l2=m2.
Lemma cons_inv {A}: forall (a1 a2:A) t1 t2, a1::t1 = a2::t2 -> a1=a2 /\ t1=t2.
Lemma mod_exists a b c: a mod b = c -> b<> 0 -> exists k, k*b+c=a.
Lemma app_inj1 {A} l2 m2: forall (l1 m1:list A) (H:l1++l2=m1++m2), length l1=length m1 -> l1=m1 /\ l2=m2.
Lemma max_unsigned_modulus: Int.max_unsigned + 1 = Int.modulus.
Lemma int_max_unsigned_eq: Int.max_unsigned = 4294967295.
Lemma ptrofs_max_unsigned_eq: Ptrofs.max_unsigned = 4294967295.
Lemma IntModulus32: Int.modulus = 2^32.
Lemma Intsize_monotone a b: 0 <= Int.unsigned (Int.repr a) <= Int.unsigned (Int.repr b) -> Int.size (Int.repr a) <= Int.size (Int.repr b).
Lemma list_nil {A} l (L:@length A l = 0%nat): l = nil.
Lemma nth_mapIn {A}: forall i (l:list A) d (Hi: (0 <= i < length l)%nat), exists n, nth i l d = n /\ In n l.
Lemma skipn_list_repeat: forall A k n (a: A), (k <= n)%nat -> skipn k (list_repeat n a) = list_repeat (n-k) a.
Lemma skipn_length: forall {A} n (al: list A), (length al >= n)%nat -> (length (skipn n al) = length al - n)%nat.
Lemma fold_left_cons {A B} (f: A -> B -> A) l b x: fold_left f (x :: l) b = fold_left f l (f b x).