Notation "x ≤ y ≤ z" := (x ≤ y ∧ y ≤ z) (at level 70, y at next level).Notation "x < y ≤ z" := (x < y ∧ y ≤ z) (at level 70, y at next level).Notation "x ≤ y < z" := (x ≤ y ∧ y < z) (at level 70, y at next level).Definition state := nat.Definition monad (A:Type) := state → state * A.Definition Meval {A:Type} (m:monad A) st := m st.Definition Meq {A:Type} (m:monad A) := ∀ st, st = fst (Meval m st).Definition Mlt {A:Type} (m:monad A) := ∀ st, st < fst (Meval m st).Definition Mle {A:Type} (m:monad A) := ∀ st, st ≤ fst (Meval m st).

(* Specifications: *)
Lemma Mlt_Mle_incl {A:Type} (m:monad A): Mlt m → Mle m.
Lemma Meq_Mle_incl {A:Type} (m:monad A): Meq m → Mle m.