Module Type ISOMORPHIC_KNOTS.
Declare Module TF : TY_FUNCTOR.
Declare Module K1 : KNOT with Module TF := TF.
Declare Module K2 : KNOT with Module TF := TF.
Parameter f : K1.knot -> K2.knot.
Parameter g : K2.knot -> K1.knot.
Definition fF : F K1.predicate -> F K2.predicate :=
fmap F (fun p : K1.knot * other -> K1.TF.T => p oo map_pair g (@id other)).
Definition gF : F K2.predicate -> F K1.predicate :=
fmap F (fun p : K2.knot * other -> K2.TF.T => p oo map_pair f (@id other)).

Axiom iso1 : f oo g = id K2.knot.
Axiom iso2 : g oo f = id K1.knot.