Theory errorLogMonad

Parents

Contents

Type operators

(none)

Constants

Definitions

bind_defchoice_deferror_deflog_defreturn_defsilently_def

Theorems

M_CASESbind_EQ_successbind_IDLbind_IDRchoice_return

Definitions

⊢ ∀M f.
    bind M f =
    case M of
      (emret u,ms1) => (I ## $++ ms1) (f u)
    | (error e,ms1) => (error e,ms1)
⊢ ∀M1 M2.
    choice M1 M2 =
    case M1 of
      (emret v,ms1) => (emret v,ms1)
    | (error e,ms1) => (I ## $++ ms1) M2
⊢ ∀e. error e = (error e,[])
⊢ ∀m. log m = (emret (),[m])
⊢ ∀v. return v = (emret v,[])
⊢ ∀M. silently M = (I ## K []) M

Theorems

⊢ ∀M. (∃v ms. M = (emret v,ms)) ∨ ∃e ms. M = (error e,ms)
⊢ bind M f = (emret v,ms) ⇔
  ∃u ms0 ms1. M = (emret u,ms0) ∧ f u = (emret v,ms1) ∧ ms = ms0 ⧺ ms1
⊢ bind (return v) f = f v
⊢ bind M return = M
⊢ choice (return v) M = return v