End KNOT_BASIC_LEMMAS.
Module Type KNOT_FULL_SA.
Declare Module KI: KNOT_FULL_BASIC_INPUT.
Declare Module KSAI: KNOT_FULL_SA_INPUT with Module KI := KI.
Declare Module K: KNOT_BASIC with Module KI := KI.
Declare Module KL: KNOT_BASIC_LEMMAS with Module K := K.
Parameter Join_knot: Join knot.  Existing Instance Join_knot.
Parameter Perm_knot : Perm_alg knot.  Existing Instance Perm_knot.
Parameter Sep_knot : Sep_alg knot.  Existing Instance Sep_knot.
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: *)
Axiom join_unsquash : forall x1 x2 x3 : knot,
join x1 x2 x3 = join (unsquash x1) (unsquash x2) (unsquash x3).
Axiom core_unsquash : forall x, core x = squash (core (unsquash x)).
Axiom asa_knot : Age_alg knot.
End KNOT_FULL_SA.