induction v.
simpl...
simpl.
intros.
destruct (XleDec x h).
apply sorted_more...
destruct n.
rewrite (eq_nil v).
simpl.
apply sorted_more...
cset (IHv (sorted_tail H)). clear IHv.
cset (eq_cons v).
revert H1.
generalize (head v).
generalize (tail v).
intros.
subst.
simpl in *.
destruct (XleDec x x1).
apply sorted_more...
apply sorted_more...
apply (sorted_cons_inv H).
Qed.
Fixpoint insertion_sort n: Vector.t X n -> Vector.t X n :=
match n return Vector.t X n -> Vector.t X n with
| 0 => fun _ => Vector.nil
| S n' => fun v => insert_ordered (head v) (insertion_sort (tail v))
end.

Lemma insertion_sort_sorts n (l: Vector.t X n): sorted (insertion_sort l).
Proof with auto.