Module Type KNOT__COVARIANT_HERED_PROP_OTH_REL.
Declare Module KI : KNOT_INPUT__COVARIANT_HERED_PROP_OTH_REL.
Parameter knot : Type.
Parameter ageable_knot : ageable knot.
Existing Instance ageable_knot.
Definition ag_knot_other := ag_prod knot other ageable_knot.
Existing Instance ag_knot_other.
Parameter expandM : @modality (knot * other) ag_knot_other.
Definition assert := { p:pred (knot * other) | boxy expandM p }.
Parameter squash : (nat * F assert) -> knot.
Parameter unsquash : knot -> (nat * F assert).
Parameter approx : nat -> assert -> assert.
(* Definition of the expandM modality *)
Definition knot_rel (k1 k2:knot) :=
let (n,f) := unsquash k1 in
let (n',f') := unsquash k2 in
n = n' /\ Rel assert f f'.
Hint Resolve expandM_refl expandM_trans : core.

(* Definitions of the "ageable" operations *)
Axiom knot_level : forall (k:knot),
level k = fst (unsquash k).