Instance Cross_prod : forall A B saA saB,
@Cross_alg A saA ->
@Cross_alg B saB ->
@Cross_alg (A * B) (Join_prod _ saA _ saB).

(* Specifications: *)
Lemma sa_distributive_bij : forall A B JA bij,
@sa_distributive A JA ->
@sa_distributive B (Join_bij A JA B bij).
Lemma Cross_bij : forall A B JA bij,
@Cross_alg A  JA ->
@Cross_alg B (Join_bij A JA B bij).
Lemma constructive_join_sub_smash {A} {JA: Join A}{PA: Perm_alg A}{SA: Sep_alg A}{CA: Disj_alg A}:
(forall x:A, {identity x}+{~identity x}) ->
forall a c : lifted JA,
constructive_join_sub (proj1_sig a) (proj1_sig c) ->
@constructive_join_sub (option (lifted JA)) _ (Some a) (Some c).
Lemma sa_distributive_smash : forall A JA {PA: Perm_alg A}{SA: Sep_alg A}{CA: Disj_alg A},
(forall x:A, {identity x}+{~identity x}) ->
@sa_distributive A JA ->
sa_distributive (option (lifted JA)).
Lemma Cross_smash : forall A (JA: Join A) {PA: Perm_alg A}{SA: Sep_alg A}{CA: Disj_alg A},
(forall x:A, {identity x}+{~identity x}) ->
Cross_alg A ->
Cross_alg (option (lifted JA)).
Lemma cross_split_fpm : forall A B
(JB: Join B) (PB: Perm_alg B)(SB : Sep_alg B)(CB: Disj_alg B)
(Bdec: forall x:B, {identity x}+{~identity x}) ,
Cross_alg B  ->
Cross_alg (fpm A (lifted JB)) .
Lemma Cross_fpm (A B: Type){JB: Join B} {PB: Perm_alg B}{PosB : Pos_alg B}
{CrB: Cross_alg B}:   Cross_alg (fpm A B) .