End EvalDoR.
(* ret lemmas need no reflection, as they operate on any heap; still *)
(* rename them for uniformity *)
Definition val_retR := val_ret.
Definition try_retR := try_ret.
Definition bnd_retR := bnd_ret.
Section EvalReadR.
Variables (A B : Type).

Lemma bnd_ghR (r : cont B) :
let: s := (fun i => exists x, i \In p x,
fun y i m => forall x, i \In p x -> q x y i m) in
(forall x m, q t (Val x) i m -> verify (s1 x) (f m) r) ->
(forall e m, q t (Exn e) i m -> def (f m) -> r (Exn e) (f m)) ->
i \In p t ->
verify (bind_s s s1) (f i) r.