Module Knot_Lemmas (K : KNOT).
Arguments unsquash_inj [k1 k2] _.
Arguments unsquash_approx [k n Fp] _.

(* Lemma unsquash_not_surj : (exists rbot : rhs, rbot <> rhs_top) -> (exists Fp : F predicate, True) -> forall n, exists Fp, forall k, unsquash k <> (n, Fp).  Lemma unsquash_inj : forall k1 k2, unsquash k1 = unsquash k2 -> k1 = k2. Arguments unsquash_inj [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 F (approx n) Fp. Arguments unsquash_approx [k n Fp] _.  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.  (* These are provided since sometimes it is tedious to break things out; they are not interesting except as engineering artifacts. *)
Lemma unsquash_squash_unfolded : forall nf,
unsquash (squash nf) = (fst nf, fmap F (approx (fst nf)) (snd nf)).