Module KnotFullSa
(KSAI': KNOT_FULL_SA_INPUT)
(K': KNOT_BASIC with Module KI:=KSAI'.KI)
(KL': KNOT_BASIC_LEMMAS with Module K:=K'):
KNOT_FULL_SA with Module KI := KSAI'.KI
with Module KSAI := KSAI'
with Module K:=K'
with Module KL := KL'.
Module KI := KSAI'.KI.
Module KSAI := KSAI'.
Module K := K'.
Module KL := KL'.
Instance Join_nat_F: Join (nat * F predicate) :=
Join_prod nat  (Join_equiv nat) (F predicate) _.
Instance Perm_nat_F : Perm_alg (nat * F predicate) :=
@Perm_prod nat _ _ _ (Perm_equiv _) (Perm_F _).
Instance Sep_nat_F: Sep_alg (nat * F predicate) :=
@Sep_prod nat _ _ _ (Sep_equiv _) (Sep_F predicate).

(* Specifications: *)
Lemma unsquash_squash_join_hom : join_hom (unsquash oo squash).
Instance Join_knot : Join knot :=
Join_preimage knot (nat * F predicate) Join_nat_F unsquash.
Lemma join_unsquash : forall x1 x2 x3,
join x1 x2 x3 =
join (unsquash x1) (unsquash x2) (unsquash x3).