equal
deleted
inserted
replaced
25 |
25 |
26 goalw Hoare.thy [wp_def] "wp SKIP Q = Q"; |
26 goalw Hoare.thy [wp_def] "wp SKIP Q = Q"; |
27 by (Simp_tac 1); |
27 by (Simp_tac 1); |
28 qed "wp_SKIP"; |
28 qed "wp_SKIP"; |
29 |
29 |
30 goalw Hoare.thy [wp_def] "wp (x:=a) Q = (%s.Q(s[a s/x]))"; |
30 goalw Hoare.thy [wp_def] "wp (x:=a) Q = (%s. Q(s[a s/x]))"; |
31 by (Simp_tac 1); |
31 by (Simp_tac 1); |
32 qed "wp_Ass"; |
32 qed "wp_Ass"; |
33 |
33 |
34 goalw Hoare.thy [wp_def] "wp (c;d) Q = wp c (wp d Q)"; |
34 goalw Hoare.thy [wp_def] "wp (c;d) Q = wp c (wp d Q)"; |
35 by (Simp_tac 1); |
35 by (Simp_tac 1); |
64 by (simp_tac (!simpset setloop split_tac [expand_if]) 1); |
64 by (simp_tac (!simpset setloop split_tac [expand_if]) 1); |
65 qed "wp_While_if"; |
65 qed "wp_While_if"; |
66 |
66 |
67 goal thy |
67 goal thy |
68 "wp (WHILE b DO c) Q s = \ |
68 "wp (WHILE b DO c) Q s = \ |
69 \ (s : gfp(%S.{s.if b s then wp c (%s.s:S) s else Q s}))"; |
69 \ (s : gfp(%S.{s. if b s then wp c (%s. s:S) s else Q s}))"; |
70 by (simp_tac (!simpset setloop(split_tac[expand_if])) 1); |
70 by (simp_tac (!simpset setloop(split_tac[expand_if])) 1); |
71 by (rtac iffI 1); |
71 by (rtac iffI 1); |
72 by (rtac weak_coinduct 1); |
72 by (rtac weak_coinduct 1); |
73 by (etac CollectI 1); |
73 by (etac CollectI 1); |
74 by (safe_tac (!claset)); |
74 by (safe_tac (!claset)); |