Definition CPToSS {m:nat} (cp : cartesianPower positive m) : SS.elt.

(* Specifications: *)
Lemma CPToSSHdTl {m:nat} : forall (cp : cartesianPower positive (S (S m))), CPToSS cp = S.add (headCP cp) (CPToSS (tailCP cp)).
Lemma memCPToSSOK {m : nat} : forall e (cp : cartesianPower positive (S m)), S.mem e (CPToSS cp) = true -> InCP e cp.
Lemma CPToSSOKAux {m m' : nat} : forall (cp : cartesianPower positive (S (S m))) (cp' : cartesianPower positive (S (S m'))) e s, S.Equal (CPToSS cp) s -> memCPAux m' cp' s = true -> InCP e cp' -> InCP e cp.
Lemma CPToSSOK : forall (cp cp' : cartesianPower positive (S (S (S n)))) s, S.Equal (CPToSS cp) s -> memCP cp' s = true -> incl (CPToList cp') (CPToList cp).
Lemma CoappDupPerm {m : nat} : forall (cp : cartesianPower positive m), ~ List.NoDup (CPToList cp) -> exists e, exists l, Permutation.Permutation (CPToList (ListToCP (e :: e :: l) e)) (CPToList cp).
Lemma CoappDupAux {m : nat} : forall (cp : cartesianPower positive (S (S (S m)))), ~ List.NoDup (CPToList cp) -> exists e, exists (l : list positive), exists m', exists (cp' : cartesianPower positive (S (S (S m')))), Permutation.Permutation (CPToList cp') (CPToList cp) /\ headCP cp' = e /\ headCP (tailCP cp') = e.
Lemma CoappDup : forall cp interp, ~ List.NoDup (CPToList cp) -> app coinc (interp_CP cp interp).
Lemma collect_coincs : forall cp ss interp, app coinc (interp_CP cp interp) -> ss_ok ss interp -> ss_ok (SS.add (CPToSS cp) ss) interp.
Lemma collect_wds : forall cp st interp, app wd (interp_CP cp interp) -> st_ok st interp -> st_ok (STadd cp st) interp.