End ISOMORPHIC_KNOTS.
Module Unique_Knot (TF' : TY_FUNCTOR)
(K1' : KNOT with Module TF := TF')
(K2' : KNOT with Module TF := TF') :
ISOMORPHIC_KNOTS
with Module TF := TF'
with Module K1 := K1'
with Module K2 := K2'.
Module TF := TF'.
Module K1 := K1'.
Module K2 := K2'.
Module K1L := Knot_Lemmas K1.
Module K2L := Knot_Lemmas K2.
Section Common.
Variable f : K1.knot -> K2.knot.
Variable g : K2.knot -> K1.knot.
Definition f_pred' (p1 : K1.predicate) : K2.predicate :=
p1 oo map_pair g (@id other).
Definition g_pred' (p2 : K2.predicate) : K1.predicate :=
p2 oo map_pair f (@id other).
Variable f_level : forall k, level k = level (f k).
Variable g_level : forall k, level k = level (g k).

(* Specifications: *)
Lemma f_pred'_approx: forall n,
f_pred' oo K1.approx n = K2.approx n oo f_pred'.
Lemma g_pred'_approx : forall n,
g_pred' oo K2.approx n = K1.approx n oo g_pred'.