- 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