destruct n.
intros.
auto with algebra.
induction  n as [| n Hrecn].
intros.
unfold omit in |- *.
unfold nat_rect in |- *.
auto with algebra.
intros v v' i.
case i.
intros x l i'.
case i'.
intros.
apply Trans with (omit v' (Build_finiteT l)).
unfold omit in |- *.
unfold nat_rect in |- *.
generalize l H0; clear H0 l.
destruct x as [| n0].
intros.
change (Seqtl v =' Seqtl v' in _) in |- *.
apply Seqtl_comp; auto with algebra.
intros.
simpl in |- *.
apply cons_comp; auto with algebra.
unfold omit in Hrecn.
unfold nat_rect in Hrecn.
apply Hrecn.
change (Seqtl v =' Seqtl v' in _) in |- *.
apply Seqtl_comp; auto with algebra.
auto with algebra.
unfold omit in |- *.
unfold nat_rect in |- *.
generalize l H0; clear H0 l.
destruct x as [| n0].
destruct index as [| n0].
intros; auto with algebra.
intros.
simpl in H0.
inversion H0.
intros.
generalize l H0; clear H0 l.
destruct index as [| n1].
intros.
simpl in H0.
inversion H0.
intros.
simpl in |- *.
apply cons_comp; auto with algebra.
unfold omit in Hrecn.
unfold nat_rect in Hrecn.
apply Hrecn; auto with algebra.
Qed.
Hint Resolve omit_comp: algebra.
(** - The following are actually definitions. omit_removes does the following: suppose v:(seq n A) and i:(fin n). Define w:=(omit v i). Then given j, (w j) = (v j') for some j'. Omit_removes returns this j' and a proof of this fact (packed together in a sigma-type). *)

Lemma omit_removes :
forall (n : Nat) (A : Setoid) (v : seq n A) (i : fin n) (j : fin (pred n)),
sigT (fun i' => v i' =' omit v i j in _).