Module KL := KnotHered_Lemmas(K).
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 predicate _ (Perm_equiv _)).
Instance Sep_nat_F (Sep_F: forall A, Sep_alg (F A)): Sep_alg (nat * F predicate) :=
@Sep_prod nat _ _ _ (Sep_equiv _) (Sep_F predicate).
Instance Canc_nat_F (Canc_F: forall A, Canc_alg (F A)): Canc_alg (nat * F predicate) :=
@Canc_prod nat _ _ _ (Canc_equiv _) (Canc_F predicate).
Instance Disj_nat_F (Disj_F: forall A, Disj_alg (F A)): Disj_alg (nat * F predicate) :=
@Disj_prod nat _ _ _ (Disj_equiv _) (Disj_F predicate).
Instance Join_knot : Join knot :=
Join_preimage knot (nat * F predicate) Join_nat_F unsquash.
Instance Perm_knot : Perm_alg knot :=
Perm_preimage _ _ _ _ unsquash squash squash_unsquash unsquash_squash_join_hom.
Instance Sep_knot(Sep_F: forall A, Sep_alg (F A)) : Sep_alg knot :=
Sep_preimage _ _ _  unsquash squash squash_unsquash unsquash_squash_join_hom.
Instance Canc_knot(Canc_F: forall A, Canc_alg (F A)) : Canc_alg knot.
Instance Disj_knot(Disj_F: forall A, Disj_alg (F A)) : Disj_alg knot.

Theorem asa_knot : @Age_alg knot _ K.ag_knot.