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) .