Theory: semantics

Parents


Type constants


Term constants


Axioms


Definitions

MK_SKIP
|- !s s'. MK_SKIP (s,s') = s = s'
MK_ABORT
|- !s s'. MK_ABORT (s,s') = F
MK_IF1
|- !p c s s'. MK_IF1 (p,c) (s,s') = ((p s) => (c (s,s')) | (s = s'))
MK_IF2
|- !p c c' s s'. MK_IF2 (p,c,c') (s,s') = ((p s) => (c (s,s')) | (c' (s,s')))
MK_SEQ
|- !c c' s s'. MK_SEQ (c,c') (s,s') = (?s''. c (s,s'') /\ c' (s'',s'))
MK_SEQL
|- (MK_SEQL [] = (\(s,s'). s = s')) /\
   (!cl c. MK_SEQL (CONS c cl) = MK_SEQ (c,MK_SEQL cl))
MK_FINITE_WHILE
|- (MK_FINITE_WHILE 0 = (\(p,c) (s,s'). F)) /\
   (!n.
     MK_FINITE_WHILE (SUC n) =
     (\(p,c). MK_IF1 (p,MK_SEQ (c,MK_FINITE_WHILE n (p,c)))))
MK_WHILE
|- !p c s s'. MK_WHILE (p,c) (s,s') = (?n. MK_FINITE_WHILE n (p,c) (s,s'))
MK_SPEC
|- !p c q. MK_SPEC (p,c,q) = (!s s'. p s /\ c (s,s') ==> q s')
MK_ASSERT
|- !p s s'. MK_ASSERT p (s,s') = p s /\ (s = s')
MK_INVARIANT
|- !p s s'. MK_INVARIANT p (s,s') = p s /\ (s = s')
MK_VARIANT
|- !p s s'. MK_VARIANT p (s,s') = p s > p s' /\ (s = s')
BND
|- !x n s. BND x n s = (\z. (z = x) => n | (s z))
MK_ASSIGN
|- !x e s s'. MK_ASSIGN (x,e) (s,s') = s' = BND x (e s) s

Theorems

BND_THM1
|- !n x s. BND x n s x = n
BND_THM2
|- !n x s y. ~(y = x) ==> (BND x n s y = s y)
MK_FINITE_WHILE_CLAUSES
|- (MK_FINITE_WHILE 0 (p,c) (s,s') = F) /\
   (MK_FINITE_WHILE (SUC n) (p,c) (s,s') =
    MK_IF1 (p,MK_SEQ (c,MK_FINITE_WHILE n (p,c))) (s,s'))