Definition all_assertions_computable  :=
forall (Espec: OracleKind) psi tx vx (Q: assert),
exists k,  assert_safe Espec psi tx vx k = Q.
(* This is not generally true, but could be made true by adding an "assert" operator to the programming language *)

(* Specifications: *)
Lemma ewand_TT_emp {A} {JA: Join A}{PA: Perm_alg A}{SA: Sep_alg A}{CA: Canc_alg A}:
ewand TT emp = emp.
Lemma subp_derives' {A}{agA: ageable A}:
forall P Q: pred A, (forall n, (P >=> Q) n) -> P |-- Q.
Lemma guard_environ_sub:
forall {Delta Delta' f rho},
tycontext_sub Delta Delta' ->
guard_environ Delta' f rho ->
guard_environ Delta f rho.
Lemma guard_environ_eqv:
forall Delta Delta' f rho,
tycontext_eqv Delta Delta' ->
guard_environ Delta f rho -> guard_environ Delta' f rho.
Lemma proj_frame_ret_assert:
forall (R: ret_assert) (F: assert) ek vl,
proj_ret_assert (frame_ret_assert R F) ek vl =
seplog.sepcon (proj_ret_assert R ek vl) F.
Lemma semax_extensionality0 {CS: compspecs} {Espec: OracleKind}:
TT |--
ALL Delta:tycontext, ALL Delta':tycontext,
ALL P:assert, ALL P':assert,
ALL c: statement, ALL R:ret_assert, ALL R':ret_assert,
((!! tycontext_sub Delta Delta'
&&  (ALL ek: exitkind, ALL  vl : option val, ALL rho: environ,
(proj_ret_assert R ek vl rho >=> proj_ret_assert R' ek vl rho))
&& (ALL rho:environ, P' rho >=> P rho)  && semax' Espec Delta P c R) >=> semax' Espec Delta' P' c R').
Lemma semax_extensionality1 {CS: compspecs} {Espec: OracleKind}:
forall Delta Delta' (P P': assert) c (R R': ret_assert) ,
tycontext_sub Delta Delta' ->
((ALL ek: exitkind, ALL  vl : option val, ALL rho: environ,
(proj_ret_assert R ek vl rho >=> proj_ret_assert R' ek vl rho))
&& (ALL rho:environ, P' rho >=> P rho)  && (semax' Espec Delta P c R) |-- semax' Espec Delta' P' c R').
Lemma semax_frame {CS: compspecs} {Espec: OracleKind}:  forall Delta P s R F,
closed_wrt_modvars s F ->
semax Espec Delta P s R ->
semax Espec Delta (fun rho => P rho * F rho) s (frame_ret_assert R F).
Lemma assert_safe_last:
forall {Espec: OracleKind} ge ve te st rho w,
(forall w', age w w' -> assert_safe Espec ge ve te st rho w) ->
assert_safe Espec ge ve te st rho w.
Lemma pred_sub_later' {A} `{H: ageable A}:
forall (P Q: pred A),
(|> P >=> |> Q)  |--  (|> (P >=> Q)).
Lemma later_strengthen_safe1:
forall {Espec: OracleKind} (P: pred rmap) ge ve te k rho,
((|> P) >=> assert_safe Espec ge ve te k rho) |--   |>  (P >=> assert_safe Espec ge ve te k rho).