Structure state_transformerTheory


Source File Identifier index Theory binding index

signature state_transformerTheory =
sig
  type thm = Thm.thm
  
  (*  Definitions  *)
    val BIND_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 NARROW_def : thm
    val READ_def : thm
    val UNIT_DEF : thm
    val WIDEN_def : thm
    val WRITE_def : thm
    val mapM_def : thm
    val sequence_def : thm
  
  (*  Theorems  *)
    val BIND_ASSOC : thm
    val BIND_EXT : thm
    val BIND_LEFT_UNIT : thm
    val BIND_RIGHT_UNIT : thm
    val EXT_JM : thm
    val EXT_MCOMP : thm
    val EXT_UNIT : thm
    val EXT_o_JOIN : thm
    val EXT_o_UNIT : thm
    val FOREACH_def : thm
    val FOREACH_ind : thm
    val FOR_def : thm
    val FOR_ind : thm
    val FST_o_MMAP : thm
    val FST_o_UNIT : thm
    val JOIN_EXT : thm
    val JOIN_MAP : thm
    val JOIN_MAP_JOIN : thm
    val JOIN_MMAP_UNIT : thm
    val JOIN_UNIT : thm
    val MCOMP_ALT : thm
    val MCOMP_ASSOC : thm
    val MCOMP_ID : thm
    val MMAP_COMP : thm
    val MMAP_EXT : thm
    val MMAP_ID : thm
    val MMAP_JOIN : thm
    val MMAP_UNIT : thm
    val SND_o_UNIT : thm
    val UNIT_CURRY : thm
    val UNIT_UNCURRY : thm
    val UNIT_o_MCOMP : thm
    val mapM_cons : thm
    val mapM_nil : thm
    val sequence_nil : thm
  
  val state_transformer_grammars : type_grammar.grammar * term_grammar.grammar
(*
   [list] Parent theory of "state_transformer"
   
   [BIND_DEF]  Definition
      
      ⊢ ∀g f. monad_bind g f = UNCURRY f ∘ g
   
   [EXT_DEF]  Definition
      
      ⊢ ∀f m. EXT f m = UNCURRY f ∘ m
   
   [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 do u <- a h; FOREACH (t,a) od)
   
   [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
                        do
                          u <- a i;
                          FOR (if i < j then i + 1 else i − 1,j,a)
                        od))
   
   [IGNORE_BIND_DEF]  Definition
      
      ⊢ ∀f g. do f; g od = do x <- f; g od
   
   [JOIN_DEF]  Definition
      
      ⊢ ∀z. JOIN z = monad_bind z I
   
   [MCOMP_DEF]  Definition
      
      ⊢ ∀g f. MCOMP g f = EXT g ∘ f
   
   [MMAP_DEF]  Definition
      
      ⊢ ∀f m. MMAP f m = monad_bind m (UNIT ∘ f)
   
   [MWHILE_DEF]  Definition
      
      ⊢ ∀g b.
            MWHILE g b =
            do gv <- g; if gv then do b; MWHILE g b od else UNIT () od
   
   [NARROW_def]  Definition
      
      ⊢ ∀v f. NARROW v f = (λs. (let (r,s1) = f (v,s) in (r,SND s1)))
   
   [READ_def]  Definition
      
      ⊢ ∀f. READ f = (λs. (f s,s))
   
   [UNIT_DEF]  Definition
      
      ⊢ ∀x. UNIT x = (λs. (x,s))
   
   [WIDEN_def]  Definition
      
      ⊢ ∀f. WIDEN f = (λ(s1,s2). (let (r,s3) = f s2 in (r,s1,s3)))
   
   [WRITE_def]  Definition
      
      ⊢ ∀f. WRITE f = (λs. ((),f s))
   
   [mapM_def]  Definition
      
      ⊢ ∀f. mapM f = sequence ∘ MAP f
   
   [sequence_def]  Definition
      
      ⊢ sequence =
        FOLDR (λm ms. do x <- m; xs <- ms; UNIT (x::xs) od) (UNIT [])
   
   [BIND_ASSOC]  Theorem
      
      ⊢ ∀k m n.
            do a <- k; monad_bind (m a) n od =
            monad_bind (monad_bind k m) n
   
   [BIND_EXT]  Theorem
      
      ⊢ monad_bind m f = EXT f m
   
   [BIND_LEFT_UNIT]  Theorem
      
      ⊢ ∀k x. monad_bind (UNIT x) k = k x
   
   [BIND_RIGHT_UNIT]  Theorem
      
      ⊢ ∀k. monad_bind k UNIT = k
   
   [EXT_JM]  Theorem
      
      ⊢ EXT f = JOIN ∘ MMAP f
   
   [EXT_MCOMP]  Theorem
      
      ⊢ EXT (MCOMP g f) = EXT g ∘ EXT f
   
   [EXT_UNIT]  Theorem
      
      ⊢ EXT UNIT = I
   
   [EXT_o_JOIN]  Theorem
      
      ⊢ ∀f. EXT f ∘ JOIN = EXT (EXT f)
   
   [EXT_o_UNIT]  Theorem
      
      ⊢ EXT f ∘ UNIT = f
   
   [FOREACH_def]  Theorem
      
      ⊢ (∀a. FOREACH ([],a) = UNIT ()) ∧
        ∀t h a. FOREACH (h::t,a) = do u <- a h; FOREACH (t,a) od
   
   [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 do u <- a i; FOR (if i < j then i + 1 else i − 1,j,a) od
   
   [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)
   
   [FST_o_MMAP]  Theorem
      
      ⊢ ∀f g. FST ∘ MMAP f g = f ∘ FST ∘ g
   
   [FST_o_UNIT]  Theorem
      
      ⊢ ∀x. FST ∘ UNIT x = K x
   
   [JOIN_EXT]  Theorem
      
      ⊢ JOIN = EXT I
   
   [JOIN_MAP]  Theorem
      
      ⊢ ∀k m. monad_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_ALT]  Theorem
      
      ⊢ MCOMP g f = CURRY (UNCURRY g ∘ UNCURRY f)
   
   [MCOMP_ASSOC]  Theorem
      
      ⊢ MCOMP f (MCOMP g h) = MCOMP (MCOMP f g) h
   
   [MCOMP_ID]  Theorem
      
      ⊢ MCOMP g UNIT = g ∧ MCOMP UNIT f = f
   
   [MMAP_COMP]  Theorem
      
      ⊢ ∀f g. MMAP (f ∘ g) = MMAP f ∘ MMAP g
   
   [MMAP_EXT]  Theorem
      
      ⊢ MMAP f = EXT (UNIT ∘ f)
   
   [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
   
   [SND_o_UNIT]  Theorem
      
      ⊢ ∀x. SND ∘ UNIT x = I
   
   [UNIT_CURRY]  Theorem
      
      ⊢ UNIT = CURRY I
   
   [UNIT_UNCURRY]  Theorem
      
      ⊢ ∀s. UNCURRY UNIT s = s
   
   [UNIT_o_MCOMP]  Theorem
      
      ⊢ MCOMP (UNIT ∘ g) (UNIT ∘ f) = UNIT ∘ g ∘ f
   
   [mapM_cons]  Theorem
      
      ⊢ mapM f (x::xs) = do y <- f x; ys <- mapM f xs; UNIT (y::ys) od
   
   [mapM_nil]  Theorem
      
      ⊢ mapM f [] = UNIT []
   
   [sequence_nil]  Theorem
      
      ⊢ sequence [] = UNIT []
   
   
*)
end


Source File Identifier index Theory binding index

HOL 4, Kananaskis-13