Definition triv2 {X Y} : X -> Y -> Prop :=
  fun _ _ => True.Definition pforall {I X} (P : I -> X -> Prop) : X -> Prop :=
  fun x => forall i, P i x.

(* Specifications: *)
Lemma plift_conj {X} (P Q : X -> Prop) (m : dist X) : plift P m -> plift Q m -> plift (pand P Q) m.
Lemma plift_forall {I X} (P : I -> X -> Prop) (m : dist X) : (forall i, plift (P i) m) -> plift (pforall P) m.
Lemma poram_lift2_forall {I X Y} Pre (Post : I -> state -> state -> Prop) (P : X -> Y -> Prop) (m : Poram X) (m' : Poram Y) : I -> (forall i, poram_lift2 Pre (Post i) P m m') -> poram_lift2 Pre (fun x y => forall i, Post i x y) P m m'.
Lemma blk_in_state_functional : forall s, well_formed s -> forall k v v', blk_in_state k v s -> blk_in_state k v' s -> v = v'.
Lemma kv_rel_functional : forall s, well_formed s -> forall k v v', kv_rel k v s -> kv_rel k v' s -> v = v'.
Lemma impl_dist {X} (m : dist X) (P : Prop) (Q : X -> Prop) : (P -> plift Q m) -> plift (fun x => P -> Q x) m.
Lemma plift_triv {X} (m : dist X) (P : X -> Prop) : (forall x, P x) -> plift P m.
Lemma state_plift2_ret_l {S X} (x : X) (m : StateT S dist X) Pre Post P : (forall s, state_plift (Pre s) (Post s) (P x) m) -> state_plift2 Pre Post P (mreturn x) m.
Lemma poram_lift2_ret_l {X} (x : X) (m : Poram X) Pre Post P : (forall s, poram_lift (Pre s) (Post s) (P x) m) -> poram_lift2 Pre Post P (mreturn x) m.
Lemma split_post_and_pred {S X Y} (m : StateT S dist X) (m' : StateT S dist Y) Pre Post P : state_plift2 Pre triv2 P m m' -> state_plift2 Pre Post triv2 m m' -> state_plift2 Pre Post P m m'.
Lemma poram_split_post_and_pred {X} (m : Poram X) Pre Post P : poram_lift Pre triv P m -> poram_lift Pre Post triv m -> poram_lift Pre Post P m.
Lemma poram2_split_post_and_pred {X Y} (m : Poram X) (m' : Poram Y) Pre Post P : poram_lift2 Pre triv2 P m m' -> poram_lift2 Pre Post triv2 m m' -> poram_lift2 Pre Post P m m'.
Lemma plift_conj {X} (P Q : X -> Prop) (m : dist X) : plift P m -> plift Q m -> plift (pand P Q) m.
Lemma plift_forall {I X} (P : I -> X -> Prop) (m : dist X) : (forall i, plift (P i) m) -> plift (pforall P) m.
Lemma poram_lift2_forall {I X Y} Pre (Post : I -> state -> state -> Prop) (P : X -> Y -> Prop) (m : Poram X) (m' : Poram Y) : I -> (forall i, poram_lift2 Pre (Post i) P m m') -> poram_lift2 Pre (fun x y => forall i, Post i x y) P m m'.
Lemma blk_in_state_functional : forall s, well_formed s -> forall k v v', blk_in_state k v s -> blk_in_state k v' s -> v = v'.
Lemma kv_rel_functional : forall s, well_formed s -> forall k v v', kv_rel k v s -> kv_rel k v' s -> v = v'.
Lemma impl_dist {X} (m : dist X) (P : Prop) (Q : X -> Prop) : (P -> plift Q m) -> plift (fun x => P -> Q x) m.
Lemma plift_triv {X} (m : dist X) (P : X -> Prop) : (forall x, P x) -> plift P m.
Lemma state_plift2_ret_l {S X} (x : X) (m : StateT S dist X) Pre Post P : (forall s, state_plift (Pre s) (Post s) (P x) m) -> state_plift2 Pre Post P (mreturn x) m.
Lemma poram_lift2_ret_l {X} (x : X) (m : Poram X) Pre Post P : (forall s, poram_lift (Pre s) (Post s) (P x) m) -> poram_lift2 Pre Post P (mreturn x) m.
Lemma split_post_and_pred {S X Y} (m : StateT S dist X) (m' : StateT S dist Y) Pre Post P : state_plift2 Pre triv2 P m m' -> state_plift2 Pre Post triv2 m m' -> state_plift2 Pre Post P m m'.
Lemma poram_split_post_and_pred {X} (m : Poram X) Pre Post P : poram_lift Pre triv P m -> poram_lift Pre Post triv m -> poram_lift Pre Post P m.
Lemma poram2_split_post_and_pred {X Y} (m : Poram X) (m' : Poram Y) Pre Post P : poram_lift2 Pre triv2 P m m' -> poram_lift2 Pre Post triv2 m m' -> poram_lift2 Pre Post P m m'.