Arguments unsquash_approx [k n Fp] _.

(* Specifications: *)
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 pred_ext : forall (p1 p2: assert),
(forall x, proj1_sig p1 x = proj1_sig p2 x) ->
p1 = p2.
Lemma approx_spec': forall n p ko,
proj1_sig (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 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 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.
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.
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)).
Lemma unsquash_approx_unfolded : forall k,
unsquash k = (fst (unsquash k), fmap F (approx (fst (unsquash k))) (snd (unsquash k))).
(* 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)).
Lemma unsquash_approx_unfolded : forall k,
unsquash k = (fst (unsquash k), fmap F (approx (fst (unsquash k))) (snd (unsquash k))).
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.
Axiom approx_approx1 : forall m n,
approx n = approx n oo approx (m+n).
Axiom approx_approx2 : forall m n,
approx n = approx (m+n) oo approx n.
Lemma pred_ext : forall (p1 p2:predicate),
(forall x, proj1_sig (bij_f _ _ KO.pkp p1) x =
proj1_sig (bij_f _ _ KO.pkp 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 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.
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)).
Lemma unsquash_approx_unfolded : forall k,
unsquash k = (fst (unsquash k), fmap F (approx (fst (unsquash k))) (snd (unsquash k))).
Axiom approx_approx1 : forall m n,
approx n = approx n oo approx (m+n).
Axiom approx_approx2 : forall m n,
approx n = approx (m+n) oo approx n.