Definition projP1 (H : sig P) := let (x, h) := H in x.Definition projP2 (H : sig P) :=
   let (x, h) as H return (P (projP1 H)) := H in h.

Lemma Zsimpl_plus_l_dep : forall x y m n : Z, (x + m)%Z = (y + n)%Z -> x = y -> m = n.