Definition squash_unsquash := K.squash_unsquash.Definition unsquash_squash := K.unsquash_squash.Definition knot_age1 := K.knot_age1.Definition knot_level := K.knot_level.

(* Specifications: *)
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 = fmap KI.F (approx n) Fp.
Lemma pred_ext : forall (p1 p2: pred (knot * other)), (forall x, p1 x = p2 x) -> p1 = p2.
Lemma approx_spec': forall n p ko, (approx n p) ko = if (le_gt_dec n (level (fst ko))) then False else proj1_sig p ko.
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 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 = fmap KI.F (approx n) Fp.
Lemma pred_ext : forall (p1 p2: pred knot), (forall x, p1 x = p2 x) -> p1 = p2.
Lemma pred_ext': forall (p1 p2: pred knot), (forall x: knot * unit, ((fun (p: knot -> Prop) ko => p (fst ko)) oo app_pred) p1 x = ((fun (p: knot -> Prop) ko => p (fst ko)) oo app_pred) p2 x) -> p1 = p2.
Lemma approx_spec': forall n p k, ((fun (p: knot -> Prop) ko => p (@fst _ unit ko)) oo app_pred) (approx n p) k = if (le_gt_dec n (level (fst k))) then False else ((fun (p: knot -> Prop) ko => p (@fst _ unit ko)) oo app_pred) p k.
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.