Definition knot_age1 := Knot_G.knot_age1.
End KnotProp.
(* Coercion *)
Module KnotProp2Knot (TF' : TY_FUNCTOR_PROP)
(K : KNOT_PROP with Module TF := TF') <:
KNOT.
Module TF := TyFunctorProp2TyFunctor(K.TF).
Definition knot : Type := K.knot.
Definition predicate := (knot * other) -> T.
Definition ag_knot : ageable knot :=
K.ag_knot.
Existing Instance ag_knot.
Existing Instance ag_prod.
Definition squash : (nat * F predicate) -> knot :=
K.squash.
Definition unsquash : knot -> (nat * F predicate) :=
K.unsquash.
Definition approx (n:nat) (p:predicate) : predicate :=
fun w => if le_gt_dec n (level w) then T_bot else p w.

(* Specifications: *)
Lemma squash_unsquash : forall x, squash (unsquash x) = x.
Lemma unsquash_squash : forall n x', unsquash (squash (n,x')) = (n,fmap F (approx n) x').
Definition knot_level := K.knot_level.