(* eliminators/inversion *)

Definition head A n (v: Vector.t A (S n)): A :=
  match v with
  | Vector.nil => I | Vector.cons h _ _ => h
  end.Definition tail n A (v: Vector.t A (S n)): Vector.t A n :=
  match v with
  | Vector.nil => I | Vector.cons _ _ t => t
  end.

(* Specifications: *)
Lemma eq_nil A (v: Vector.t A 0): v = Vector.nil.
Lemma eq_cons A n (v: Vector.t A (S n)): v = Vector.cons (head v) (tail v).
Lemma Vcons_eq A (h h': A) n (t t': Vector.t A n): h = h' -> t = t' -> Vector.cons h t = Vector.cons h' t'.
Lemma Vcons_eq_inv A (h h': A) n (t t': Vector.t A n): Vector.cons h t = Vector.cons h' t' -> h = h' /\ t = t'.