Definition lastCP {T:Type} {n:nat} (cp : cartesianPower T (S n)) : T.
Definition tailCPbis {T:Type} {n:nat} m1 m2 (cp : cartesianPower T m1) :
(S (S n)) = m1 -> (S n) = m2 -> (cartesianPower T m2).
Definition consTailCP {T:Type} {n:nat} (cp : cartesianPower T n) (t : T) : (cartesianPower T (S n)).
Definition CPToList {T:Type} {n:nat} (cp : cartesianPower T n) : list T.
Definition nthCP {T:Type} {m:nat} (n : nat) (cp : cartesianPower T m) (Default : T) := nth (n-1) (CPToList cp) Default.

Lemma nthEqOK {T:Type} {m:nat} :
forall (cp1 cp2 : cartesianPower T (S m)) (Default : T),
(forall n, nthCP n cp1 Default = nthCP n cp2 Default) -> cp1 = cp2.