Definition monad_map {M} `{Monad M} {X Y} (f : X -> Y) (m : M X) : M Y :=
  x <- m;;
  mreturn (f x).

(* Specifications: *)
Lemma plift_map : forall {M} `{PredLift M} {X Y} (f : X -> Y) (m : M X) (P : Y -> Prop), plift (fun x => P (f x)) m -> plift P (monad_map f m).
Lemma plift_map : forall {M} `{PredLift M} {X Y} (f : X -> Y) (m : M X) (P : Y -> Prop), plift (fun x => P (f x)) m -> plift P (monad_map f m).