(** Subtyping for prod *)
Variable A B : Type.
Definition sigT_of_prod (p : A * B) := (fst p; snd p).
Definition prod_of_sigT (s : { _ : A & B }) := (s.1, s.2).

(* Specifications: *)
Lemma sigT_prod_sigT p : sigT_of_prod (prod_of_sigT p) = p.
Definition eq_sigT {A : Type} {P : A -> Type} (u v : { a : A & P a })
(p : u.1 = v.1) (q : rew p in u.2 = v.2)
: u = v
:= eq_sigT_uncurried u v (existT _ p q).