intros.
simpl in |- *.
red in |- *.
simpl in |- *.
auto with algebra.
Qed.
(** - ...and vice versa: if [x:(inject_subsets C)] then [(uninject_subsets x):C]  %\label{uninjectsubsetsify}% *)
Definition uninject_subsetsify :
forall (A : Setoid) (B : part_set A) (C : part_set B),
inject_subsets C -> C.
intros.
simpl in |- *.
destruct X.
generalize dependent subtype_elt.
intros a Ha.
simpl in Ha.
assert (in_part a B).
inversion_clear Ha.
apply in_part_comp_l with (subtype_elt (subtype_elt x)); auto with algebra.
red in H.
exists (Build_subtype H).
change (in_part (Build_subtype H:B) C) in |- *.
inversion_clear Ha.
apply in_part_comp_l with (subtype_elt x); auto with algebra.
Defined.

(* Specifications: *)
Lemma uninject_subsetsify_comp :
forall (A : Setoid) (B : part_set A) (C : part_set B),
fun_compatible (uninject_subsetsify (A:=A) (B:=B) (C:=C)).