intros.
red in H.
inversion_clear H.
rename x into cseq.
inversion_clear H0.
red in |- *.
exists (comp_map_map (Build_Map (inject_subsetsify_comp (C:=C))) cseq).
split.
simpl in |- *.
red in |- *.
intro c; split; intros.
simpl in |- *.
unfold subtype_image_equal in |- *.
simpl in |- *.
simpl in H; red in H; simpl in H.
destruct c.
rename subtype_elt into c''.
rename subtype_prf into Hc''.
simpl in Hc''.
elim Hc''.
intros c' Hc'.
elim (H c').
intros.
generalize (H2 I); clear H2 H3; intros.
inversion_clear H2.
rename x into i.
exists i.
simpl in |- *; red in H3.
apply Trans with (subtype_elt (subtype_elt c')); auto with algebra.
simpl in |- *.
auto.
simpl in |- *.
unfold subtype_image_equal in |- *.
simpl in |- *.
red in |- *; intros; intro.
red in H1; (apply (H1 i j); auto with algebra).
Qed.

Lemma inject_subsets_respects_has_n_elements :
forall (A : Setoid) (B : part_set A) (C : part_set B) (n : Nat),
has_n_elements n (inject_subsets C) -> has_n_elements n C.