equal
deleted
inserted
replaced
21 vcawp :: "acom => assn => assn * assn" |
21 vcawp :: "acom => assn => assn * assn" |
22 astrip :: acom => com |
22 astrip :: acom => com |
23 |
23 |
24 primrec awp acom |
24 primrec awp acom |
25 "awp Askip Q = Q" |
25 "awp Askip Q = Q" |
26 "awp (Aass x a) Q = (%s. Q(s[a s/x]))" |
26 "awp (Aass x a) Q = (%s. Q(s[x:=a s]))" |
27 "awp (Asemi c d) Q = awp c (awp d Q)" |
27 "awp (Asemi c d) Q = awp c (awp d Q)" |
28 "awp (Aif b c d) Q = (%s. (b s-->awp c Q s) & (~b s-->awp d Q s))" |
28 "awp (Aif b c d) Q = (%s. (b s-->awp c Q s) & (~b s-->awp d Q s))" |
29 "awp (Awhile b I c) Q = I" |
29 "awp (Awhile b I c) Q = I" |
30 |
30 |
31 primrec vc acom |
31 primrec vc acom |
44 "astrip (Awhile b I c) = (WHILE b DO astrip c)" |
44 "astrip (Awhile b I c) = (WHILE b DO astrip c)" |
45 |
45 |
46 (* simultaneous computation of vc and awp: *) |
46 (* simultaneous computation of vc and awp: *) |
47 primrec vcawp acom |
47 primrec vcawp acom |
48 "vcawp Askip Q = (%s. True, Q)" |
48 "vcawp Askip Q = (%s. True, Q)" |
49 "vcawp (Aass x a) Q = (%s. True, %s. Q(s[a s/x]))" |
49 "vcawp (Aass x a) Q = (%s. True, %s. Q(s[x:=a s]))" |
50 "vcawp (Asemi c d) Q = (let (vcd,wpd) = vcawp d Q; |
50 "vcawp (Asemi c d) Q = (let (vcd,wpd) = vcawp d Q; |
51 (vcc,wpc) = vcawp c wpd |
51 (vcc,wpc) = vcawp c wpd |
52 in (%s. vcc s & vcd s, wpc))" |
52 in (%s. vcc s & vcd s, wpc))" |
53 "vcawp (Aif b c d) Q = (let (vcd,wpd) = vcawp d Q; |
53 "vcawp (Aif b c d) Q = (let (vcd,wpd) = vcawp d Q; |
54 (vcc,wpc) = vcawp c Q |
54 (vcc,wpc) = vcawp c Q |