src/HOL/IMP/Hoare.ML
changeset 3842 b55686a7b22c
parent 3737 3ea2f3b5e705
child 3919 c036caebfc75
equal deleted inserted replaced
3841:22bbc1676768 3842:b55686a7b22c
    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));