simpl in |- *.
red in |- *.
split; intros.
rename x into a.
simpl in |- *.
simpl in H.
inversion_clear H.
destruct x.
rename subtype_elt into b.
rename subtype_prf into Hb.
simpl in Hb.
inversion_clear Hb.
rename x into i.
exists i.
red in H.
simpl in H0.
apply Trans with (subtype_elt b); auto with algebra.
simpl in |- *.
rename x into a.
assert (in_part a B).
simpl in H.
inversion_clear H.
apply in_part_comp_l with (subtype_elt (v x)); auto with algebra.
red in H0.
set (b := Build_subtype H0:B) in *.
assert (in_part b (seq_set v)).
simpl in |- *.
simpl in H.
inversion_clear H.
rename x into i.
exists i.
red in |- *.
apply Trans with a; auto with algebra.
red in H1.
exists (Build_subtype H1).
simpl in |- *.
auto with algebra.
Qed.
Section concat_const_seq.
Variable A : Setoid.
Let eqa : forall a : A, Predicate A.
intro; apply Build_Predicate with (fun a' => a' =' a in _).
red in |- *; simpl in |- *.
intros; apply Trans with x; auto with algebra.
Defined.

(* Specifications: *)
Lemma concat_const_seq :
forall (n m : Nat) (a a' a'' : A),
a =' a' in _ ->
a' =' a'' in _ ->
const_seq n a ++ const_seq m a' =' const_seq (n + m) a'' in _.