Context {COP : Coinc_predicates AR}.
Definition ss_ok (ss : SS.t) (interp: positive -> COINCpoint) :=
forall s, SS.mem s ss = true ->
forall cp, memCP cp s = true ->
app coinc (interp_CP cp interp).

(* Specifications: *)
Lemma consHdInterpOK : forall (cp : cartesianPower positive 1) (x : tST) interp,
consHeadCP (interp_CP cp interp) (interp_CP x interp) = interp_CP (consHeadCP cp x) interp.
Lemma ss_ok_inter_ok1 : forall ss interp s1 s2 x (p : cartesianPower positive 1),
ss_ok ss interp ->
SS.In s1 ss ->
pick_variety_aux (S.inter s1 s2) x = true ->
S.mem p s1 = true ->
app_1_n coinc (interp_CP p interp) (interp_CP x interp).
Lemma ss_ok_inter_ok2 : forall ss interp s1 s2 x (p : cartesianPower positive 1),
ss_ok ss interp ->
SS.In s2 ss ->
pick_variety_aux (S.inter s1 s2) x = true ->
S.mem p s2 = true ->
app_1_n coinc (interp_CP p interp) (interp_CP x interp).
Lemma mca_pick_variety_aux_pca : forall m cp s1 s2 ss x interp,
ss_ok ss interp ->
SS.In s1 ss ->
SS.In s2 ss ->
memCPAux (S m) cp (S.union s1 s2) = true ->
pick_variety_aux (S.inter s1 s2) x = true ->
pred_conj_aux coinc (S (S m)) (interp_CP cp interp) (interp_CP x interp).