Definition CPPair {T : Type} :
  forall (cp : cartesianPower T 2),
  cp = (fst cp, snd cp).Definition tailCPbis {T:Type} {n:nat} m1 m2 (cp : cartesianPower T m1) :
  (S (S n)) = m1 -> (S n) = m2 -> (cartesianPower T m2).Definition consHeadCP {T:Type} {n:nat} (t : T) (cp : cartesianPower T n) : (cartesianPower T (S n)).

(* Specifications: *)
Lemma consHeadCPHd {T:Type} {n:nat} : forall (cp : cartesianPower T n) t, headCP (consHeadCP t cp) = t.
Lemma consHeadCPTl {T:Type} {n:nat} : forall (cp : cartesianPower T (S n)) t, tailCP (consHeadCP t cp) = cp.
Lemma consHeadCPOK {T:Type} {n:nat} : forall (cp : cartesianPower T (S (S n))), cp = consHeadCP (headCP cp) (tailCP cp).