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'.