induction n.
intros.
unfold concat in |- *.
unfold nat_rect in |- *.
apply Ap_comp; auto with algebra.
intros.
apply Trans with ((hdtl v ++ w) (Build_finiteT Hi')); auto with algebra.
unfold hdtl in |- *.
apply Trans with ((head v;; Seqtl v ++ w) (Build_finiteT Hi'));
auto with algebra.
cut (S (c + i) < S (c + m)).
intro.
apply Trans with ((Seqtl v ++ w) (Build_finiteT (lt_S_n _ _ H)));
auto with algebra.
apply Trans with ((head v;; Seqtl v ++ w) (Build_finiteT H));
auto with algebra.
replace (S (c + i)) with (S c + i).
assumption.
auto.
Qed.
Hint Resolve concat_second_part: algebra.

(* Specifications: *)
Lemma concat_prop_per_part :
forall P : Predicate A,
(forall (i : Nat) (Hi : i < n), Pred_fun P (v (Build_finiteT Hi))) ->
(forall (j : nat) (Hj : j < m), Pred_fun P (w (Build_finiteT Hj))) ->
forall (k : nat) (Hk : k < n + m), Pred_fun P ((v ++ w) (Build_finiteT Hk)).