Structure errorStateMonadTheory


Source File Identifier index Theory binding index

signature errorStateMonadTheory =
sig
  type thm = Thm.thm
  
  (*  Definitions  *)
    val BIND_DEF : thm
    val ES_APPLY_DEF : thm
    val ES_CHOICE_DEF : thm
    val ES_FAIL_DEF : thm
    val ES_GUARD_DEF : thm
    val ES_LIFT2_DEF : thm
    val EXT_DEF : thm
    val FOREACH_primitive_def : thm
    val FOR_primitive_def : thm
    val IGNORE_BIND_DEF : thm
    val JOIN_DEF : thm
    val MCOMP_DEF : thm
    val MMAP_DEF : thm
    val MWHILE_DEF : thm
    val MWHILE_UNIT_DEF : thm
    val NARROW_def : thm
    val READ_def : thm
    val UNIT_DEF : thm
    val WIDEN_def : thm
    val WRITE_def : thm
    val mapM_def : thm
    val mwhile_step_def : thm
    val mwhile_unit_step_def : thm
    val sequence_def : thm
  
  (*  Theorems  *)
    val APPLY_UNIT : thm
    val APPLY_UNIT_UNIT : thm
    val BIND_ASSOC : thm
    val BIND_ESGUARD : thm
    val BIND_FAIL_L : thm
    val BIND_LEFT_UNIT : thm
    val BIND_RIGHT_UNIT : thm
    val ES_CHOICE_ASSOC : thm
    val ES_CHOICE_FAIL_LID : thm
    val ES_CHOICE_FAIL_RID : thm
    val FOREACH_def : thm
    val FOREACH_ind : thm
    val FOR_def : thm
    val FOR_ind : thm
    val IGNORE_BIND_ESGUARD : thm
    val IGNORE_BIND_FAIL : thm
    val JOIN_MAP : thm
    val JOIN_MAP_JOIN : thm
    val JOIN_MMAP_UNIT : thm
    val JOIN_UNIT : thm
    val MCOMP_ASSOC : thm
    val MCOMP_ID : thm
    val MCOMP_THM : thm
    val MMAP_COMP : thm
    val MMAP_ID : thm
    val MMAP_JOIN : thm
    val MMAP_UNIT : thm
    val UNIT_CURRY : thm
    val mapM_cons : thm
    val mapM_nil : thm
    val mwhile_step_compute : thm
    val mwhile_unit_step_compute : thm
    val sequence_nil : thm
  
  val errorStateMonad_grammars : type_grammar.grammar * term_grammar.grammar
(*
   [indexedLists] Parent theory of "errorStateMonad"
   
   [patternMatches] Parent theory of "errorStateMonad"
   
   [BIND_DEF]  Definition
      
      ⊢ ∀g f s0.
          BIND g f s0 = case g s0 of NONE => NONE | SOME (b,s) => f b s
   
   [ES_APPLY_DEF]  Definition
      
      ⊢ ∀fM xM. fM <*> xM = BIND fM (λf. BIND xM (λx. UNIT (f x)))
   
   [ES_CHOICE_DEF]  Definition
      
      ⊢ ∀xM yM s.
          ES_CHOICE xM yM s =
          case xM s of NONE => yM s | SOME v1 => SOME v1
   
   [ES_FAIL_DEF]  Definition
      
      ⊢ ∀s. ES_FAIL s = NONE
   
   [ES_GUARD_DEF]  Definition
      
      ⊢ ∀b. ES_GUARD b = if b then UNIT () else ES_FAIL
   
   [ES_LIFT2_DEF]  Definition
      
      ⊢ ∀f xM yM. ES_LIFT2 f xM yM = MMAP f xM <*> yM
   
   [EXT_DEF]  Definition
      
      ⊢ ∀g m. EXT g m = BIND m g
   
   [FOREACH_primitive_def]  Definition
      
      ⊢ FOREACH =
        WFREC (@R. WF R ∧ ∀h a t. R (t,a) (h::t,a))
          (λFOREACH a'.
               case a' of
                 ([],a) => I (UNIT ())
               | (h::t,a) => I (BIND (a h) (λu. FOREACH (t,a))))
   
   [FOR_primitive_def]  Definition
      
      ⊢ FOR =
        WFREC
          (@R. WF R ∧
               ∀a j i.
                 i ≠ j ⇒ R (if i < j then i + 1 else i − 1,j,a) (i,j,a))
          (λFOR a'.
               case a' of
                 (i,j,a) =>
                   I
                     (if i = j then a i
                      else
                        BIND (a i)
                          (λu. FOR (if i < j then i + 1 else i − 1,j,a))))
   
   [IGNORE_BIND_DEF]  Definition
      
      ⊢ ∀f g. IGNORE_BIND f g = BIND f (λx. g)
   
   [JOIN_DEF]  Definition
      
      ⊢ ∀z. JOIN z = BIND z I
   
   [MCOMP_DEF]  Definition
      
      ⊢ ∀g f. MCOMP g f = CURRY (OPTION_MCOMP (UNCURRY g) (UNCURRY f))
   
   [MMAP_DEF]  Definition
      
      ⊢ ∀f m. MMAP f m = BIND m (UNIT ∘ f)
   
   [MWHILE_DEF]  Definition
      
      ⊢ ∀P g x s.
          MWHILE P g x s =
          BIND (P x) (λb. if b then BIND (g x) (MWHILE P g) else UNIT x) s
   
   [MWHILE_UNIT_DEF]  Definition
      
      ⊢ ∀P g s.
          MWHILE_UNIT P g s =
          BIND P
            (λb. if b then IGNORE_BIND g (MWHILE_UNIT P g) else UNIT ()) s
   
   [NARROW_def]  Definition
      
      ⊢ ∀v f.
          NARROW v f =
          (λs.
               case f (v,s) of
                 NONE => NONE
               | SOME (r,s1) => SOME (r,SND s1))
   
   [READ_def]  Definition
      
      ⊢ ∀f. READ f = (λs. SOME (f s,s))
   
   [UNIT_DEF]  Definition
      
      ⊢ ∀x. UNIT x = (λs. SOME (x,s))
   
   [WIDEN_def]  Definition
      
      ⊢ ∀f. WIDEN f =
            (λ(s1,s2).
                 case f s2 of NONE => NONE | SOME (r,s3) => SOME (r,s1,s3))
   
   [WRITE_def]  Definition
      
      ⊢ ∀f. WRITE f = (λs. SOME ((),f s))
   
   [mapM_def]  Definition
      
      ⊢ ∀f. mapM f = sequence ∘ MAP f
   
   [mwhile_step_def]  Definition
      
      ⊢ (∀P g x s. mwhile_step P g x 0 s = BIND (P x) (λb. UNIT (b,x)) s) ∧
        ∀P g x n s.
          mwhile_step P g x (SUC n) s =
          BIND (P x)
            (λb.
                 if b then BIND (g x) (λgx. mwhile_step P g gx n)
                 else UNIT (b,x)) s
   
   [mwhile_unit_step_def]  Definition
      
      ⊢ (∀P g s. mwhile_unit_step P g 0 s = P s) ∧
        ∀P g n s.
          mwhile_unit_step P g (SUC n) s =
          BIND P
            (λb.
                 if b then IGNORE_BIND g (mwhile_unit_step P g n)
                 else UNIT b) s
   
   [sequence_def]  Definition
      
      ⊢ sequence =
        FOLDR (λm ms. BIND m (λx. BIND ms (λxs. UNIT (x::xs)))) (UNIT [])
   
   [APPLY_UNIT]  Theorem
      
      ⊢ UNIT f <*> xM = MMAP f xM
   
   [APPLY_UNIT_UNIT]  Theorem
      
      ⊢ UNIT f <*> UNIT x = UNIT (f x)
   
   [BIND_ASSOC]  Theorem
      
      ⊢ ∀k m n. BIND k (λa. BIND (m a) n) = BIND (BIND k m) n
   
   [BIND_ESGUARD]  Theorem
      
      ⊢ BIND (ES_GUARD F) fM = ES_FAIL ∧ BIND (ES_GUARD T) fM = fM ()
   
   [BIND_FAIL_L]  Theorem
      
      ⊢ BIND ES_FAIL fM = ES_FAIL
   
   [BIND_LEFT_UNIT]  Theorem
      
      ⊢ ∀k x. BIND (UNIT x) k = k x
   
   [BIND_RIGHT_UNIT]  Theorem
      
      ⊢ ∀k. BIND k UNIT = k
   
   [ES_CHOICE_ASSOC]  Theorem
      
      ⊢ ES_CHOICE xM (ES_CHOICE yM zM) = ES_CHOICE (ES_CHOICE xM yM) zM
   
   [ES_CHOICE_FAIL_LID]  Theorem
      
      ⊢ ES_CHOICE ES_FAIL xM = xM
   
   [ES_CHOICE_FAIL_RID]  Theorem
      
      ⊢ ES_CHOICE xM ES_FAIL = xM
   
   [FOREACH_def]  Theorem
      
      ⊢ (∀a. FOREACH ([],a) = UNIT ()) ∧
        ∀t h a. FOREACH (h::t,a) = BIND (a h) (λu. FOREACH (t,a))
   
   [FOREACH_ind]  Theorem
      
      ⊢ ∀P. (∀a. P ([],a)) ∧ (∀h t a. P (t,a) ⇒ P (h::t,a)) ⇒
            ∀v v1. P (v,v1)
   
   [FOR_def]  Theorem
      
      ⊢ ∀j i a.
          FOR (i,j,a) =
          if i = j then a i
          else BIND (a i) (λu. FOR (if i < j then i + 1 else i − 1,j,a))
   
   [FOR_ind]  Theorem
      
      ⊢ ∀P. (∀i j a.
               (i ≠ j ⇒ P (if i < j then i + 1 else i − 1,j,a)) ⇒ P (i,j,a)) ⇒
            ∀v v1 v2. P (v,v1,v2)
   
   [IGNORE_BIND_ESGUARD]  Theorem
      
      ⊢ IGNORE_BIND (ES_GUARD F) xM = ES_FAIL ∧
        IGNORE_BIND (ES_GUARD T) xM = xM
   
   [IGNORE_BIND_FAIL]  Theorem
      
      ⊢ IGNORE_BIND ES_FAIL xM = ES_FAIL ∧ IGNORE_BIND xM ES_FAIL = ES_FAIL
   
   [JOIN_MAP]  Theorem
      
      ⊢ ∀k m. BIND k m = JOIN (MMAP m k)
   
   [JOIN_MAP_JOIN]  Theorem
      
      ⊢ JOIN ∘ MMAP JOIN = JOIN ∘ JOIN
   
   [JOIN_MMAP_UNIT]  Theorem
      
      ⊢ JOIN ∘ MMAP UNIT = I
   
   [JOIN_UNIT]  Theorem
      
      ⊢ JOIN ∘ UNIT = I
   
   [MCOMP_ASSOC]  Theorem
      
      ⊢ MCOMP f (MCOMP g h) = MCOMP (MCOMP f g) h
   
   [MCOMP_ID]  Theorem
      
      ⊢ MCOMP g UNIT = g ∧ MCOMP UNIT f = f
   
   [MCOMP_THM]  Theorem
      
      ⊢ MCOMP g f = EXT g ∘ f
   
   [MMAP_COMP]  Theorem
      
      ⊢ ∀f g. MMAP (f ∘ g) = MMAP f ∘ MMAP g
   
   [MMAP_ID]  Theorem
      
      ⊢ MMAP I = I
   
   [MMAP_JOIN]  Theorem
      
      ⊢ ∀f. MMAP f ∘ JOIN = JOIN ∘ MMAP (MMAP f)
   
   [MMAP_UNIT]  Theorem
      
      ⊢ ∀f. MMAP f ∘ UNIT = UNIT ∘ f
   
   [UNIT_CURRY]  Theorem
      
      ⊢ UNIT = CURRY SOME
   
   [mapM_cons]  Theorem
      
      ⊢ mapM f (x::xs) =
        BIND (f x) (λy. BIND (mapM f xs) (λys. UNIT (y::ys)))
   
   [mapM_nil]  Theorem
      
      ⊢ mapM f [] = UNIT []
   
   [mwhile_step_compute]  Theorem
      
      ⊢ (∀P g x s. mwhile_step P g x 0 s = BIND (P x) (λb. UNIT (b,x)) s) ∧
        (∀P g x n s.
           mwhile_step P g x (NUMERAL (BIT1 n)) s =
           BIND (P x)
             (λb.
                  if b then
                    BIND (g x)
                      (λgx. mwhile_step P g gx (NUMERAL (BIT1 n) − 1))
                  else UNIT (b,x)) s) ∧
        ∀P g x n s.
          mwhile_step P g x (NUMERAL (BIT2 n)) s =
          BIND (P x)
            (λb.
                 if b then
                   BIND (g x) (λgx. mwhile_step P g gx (NUMERAL (BIT1 n)))
                 else UNIT (b,x)) s
   
   [mwhile_unit_step_compute]  Theorem
      
      ⊢ (∀P g s. mwhile_unit_step P g 0 s = P s) ∧
        (∀P g n s.
           mwhile_unit_step P g (NUMERAL (BIT1 n)) s =
           BIND P
             (λb.
                  if b then
                    IGNORE_BIND g
                      (mwhile_unit_step P g (NUMERAL (BIT1 n) − 1))
                  else UNIT b) s) ∧
        ∀P g n s.
          mwhile_unit_step P g (NUMERAL (BIT2 n)) s =
          BIND P
            (λb.
                 if b then
                   IGNORE_BIND g (mwhile_unit_step P g (NUMERAL (BIT1 n)))
                 else UNIT b) s
   
   [sequence_nil]  Theorem
      
      ⊢ sequence [] = UNIT []
   
   
*)
end


Source File Identifier index Theory binding index

HOL 4, Kananaskis-14