(* 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'.

(* Specifications: *)
Axiom expandM_spec : forall k k' o o',
expandM (k,o) (k',o') = (knot_rel k k' /\ ORel o o').
Axiom expandM_refl : reflexive _ expandM.
Axiom expandM_trans : transitive _ expandM.
Hint Resolve expandM_refl expandM_trans.
(* Definitions of the "ageable" operations *)
Axiom knot_level : forall (k:knot),
level k = fst (unsquash k).
Axiom knot_age1 : forall (k:knot),
age1 k =
match unsquash k with
| (O,_) => None
| (S n,x) => Some (squash (n,x))
end.