Definition state_lift' {S} {X} (Pre : S -> Prop)(Post : S -> Prop) (P : X -> Prop) : state S X -> Prop :=
      fun f => forall s, Pre s -> P (fst(runState f s)) /\ Post (snd (runState f s)).

(* Specifications: *)
Lemma bind_lift_lemma' {S} {X Y} (Pre: S -> Prop)(Mid : S -> Prop) (Post : S -> Prop) (P : X -> Prop) (Q : Y -> Prop) (sx : state S X) (f : X -> state S Y) : state_lift' Pre Mid P sx -> (forall x, P x -> state_lift' Mid Post Q (f x)) -> state_lift' Pre Post Q (bind sx f).
Lemma twoAccesses2_correct blockId data {Pre}{Mid : st_rand -> Prop} {Post} : state_lift' Pre Post(eq data) (twoAccesses2 blockId data).
Lemma bind_lift_lemma' {S} {X Y} (Pre: S -> Prop)(Mid : S -> Prop) (Post : S -> Prop) (P : X -> Prop) (Q : Y -> Prop) (sx : state S X) (f : X -> state S Y) : state_lift' Pre Mid P sx -> (forall x, P x -> state_lift' Mid Post Q (f x)) -> state_lift' Pre Post Q (bind sx f).
Lemma twoAccesses2_correct blockId data {Pre}{Mid : st_rand -> Prop} {Post} : state_lift' Pre Post(eq data) (twoAccesses2 blockId data).