Definition ageable_knot : ageable knot :=
    mkAgeable knot knot_level_def knot_age1_def ag_knot_facts.Definition knot_rel (k1 k2:knot) :=
    let (n,f) := unsquash k1 in
    let (n',f') := unsquash k2 in
    n = n' /\ Rel predicate predicate f f'.

(* Specifications: *)
Lemma hered_spec : forall p, hered p = (forall k k' k'' o o', clos_refl_trans _ age k k' -> knot_rel k' k'' -> ORel o o' -> T_rel (p (k,o)) (p (k'',o'))).
Lemma knot_age1 : forall k:knot, age1 k = match unsquash k with | (O,_) => None | (S n,x) => Some (squash (n,x)) end.
Lemma knot_level : forall k:knot, level k = fst (unsquash k).
Lemma unsquash_inj : forall k1 k2, unsquash k1 = unsquash k2 -> k1 = k2.
Lemma squash_surj : forall k, exists n, exists Fp, squash (n, Fp) = k.
Lemma unsquash_approx : forall k n Fp, unsquash k = (n, Fp) -> Fp = bimap (approx n) (approx n) Fp.
Lemma pred_ext : forall (p1 p2:predicate), (forall x, proj1_sig p1 x = proj1_sig p2 x) -> p1 = p2.
Lemma approx_approx1 : forall m n, approx n = approx n oo approx (m+n).
Lemma approx_approx2 : forall m n, approx n = approx (m+n) oo approx n.
Lemma bimap_bimap : forall A B C X Y Z (s:X->Y) (t:Y->Z) (f:B->C) (g:A->B) x, bimap s f (bimap t g x) = bimap (t oo s) (f oo g) x.