(* Specifications: *)
Lemma Vector_map_id n a (f : a -> a) (v : Vector.t a n) : (forall x, f x = x) -> (Vector.map f v) = v.
Lemma Vector_map_compose n a b c (g : b -> c) (f : a -> b) (h : a -> c) (v : Vector.t a n) : (forall x, g (f x) = h x) -> Vector.map g (Vector.map f v) = Vector.map h v.
Lemma Vector_map_append n m a b (f : a -> b) (v1 : Vector.t a n) (v2 : Vector.t a m) : Vector.map f (Vector.append v1 v2) = Vector.append (Vector.map f v1) (Vector.map f v2).
Lemma append_inj a n m (v1 v1' : Vector.t a n) (v2 v2' : Vector.t a m) : Vector.append v1 v2 = Vector.append v1' v2' -> v1 = v1' /\ v2 = v2'.
Lemma append_assoc a n m p (v1 : Vector.t a n) (v2 : Vector.t a m) (v3 : Vector.t a p) (e : n + (m + p) = n + m + p) : eq_rect _ _ (Vector.append v1 (Vector.append v2 v3)) _ e = Vector.append (Vector.append v1 v2) v3.
Lemma to_list_eq A n m (e: n = m) : forall (v1 : Vector.t A n) (v2 : Vector.t A m), Vector.to_list v1 = Vector.to_list v2 -> eq_rect _ (Vector.t A) v1 _ e = v2.