Module Type KNOT_PROP.
Declare Module TF:TY_FUNCTOR_PROP.
Parameter knot : Type.
Parameter ag_knot : ageable knot.
Existing Instance ag_knot.
Existing Instance ag_prod.
Definition predicate := (knot * other) -> Prop.
Parameter squash : (nat * F predicate) -> knot.
Parameter unsquash : knot -> (nat * F predicate).
Definition approx (n:nat) (p:predicate) : predicate :=
fun w => level w < n /\ p w.

Axiom knot_age1 : forall k:knot,
age1 k =
match unsquash k with
| (O,_) => None
| (S n,x) => Some (squash (n,x))
end.