src/HOL/IMP/VC.thy
changeset 4897 be11be0b6ea1
parent 3842 b55686a7b22c
child 5183 89f162de39cf
equal deleted inserted replaced
4896:4727272f3db6 4897:be11be0b6ea1
    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