1476
|
1 |
(* Title: HOL/IMP/Hoare.thy
|
938
|
2 |
ID: $Id$
|
1476
|
3 |
Author: Tobias Nipkow
|
936
|
4 |
Copyright 1995 TUM
|
|
5 |
|
1447
|
6 |
Inductive definition of Hoare logic
|
936
|
7 |
*)
|
|
8 |
|
|
9 |
Hoare = Denotation +
|
1447
|
10 |
|
|
11 |
types assn = state => bool
|
|
12 |
|
936
|
13 |
consts
|
1447
|
14 |
hoare :: "(assn * com * assn) set"
|
1481
|
15 |
hoare_valid :: [assn,com,assn] => bool ("|= {{_}}_{{_}}")
|
936
|
16 |
defs
|
1481
|
17 |
hoare_valid_def "|= {{P}}c{{Q}} == !s t. (s,t) : C(c) --> P s --> Q t"
|
939
|
18 |
|
1447
|
19 |
syntax "@hoare" :: [bool,com,bool] => bool ("{{(1_)}}/ (_)/ {{(1_)}}" 10)
|
|
20 |
translations "{{P}}c{{Q}}" == "(P,c,Q) : hoare"
|
939
|
21 |
|
1447
|
22 |
inductive "hoare"
|
|
23 |
intrs
|
1481
|
24 |
skip "{{P}}Skip{{P}}"
|
|
25 |
ass "{{%s.P(s[A a s/x])}} x:=a {{P}}"
|
|
26 |
semi "[| {{P}}c{{Q}}; {{Q}}d{{R}} |] ==> {{P}} c;d {{R}}"
|
|
27 |
If "[| {{%s. P s & B b s}}c{{Q}}; {{%s. P s & ~B b s}}d{{Q}} |] ==>
|
|
28 |
{{P}} IF b THEN c ELSE d {{Q}}"
|
|
29 |
While "[| {{%s. P s & B b s}} c {{P}} |] ==>
|
|
30 |
{{P}} WHILE b DO c {{%s. P s & ~B b s}}"
|
|
31 |
conseq "[| !s. P' s --> P s; {{P}}c{{Q}}; !s. Q s --> Q' s |] ==>
|
|
32 |
{{P'}}c{{Q'}}"
|
|
33 |
|
|
34 |
consts swp :: com => assn => assn
|
|
35 |
defs swp_def "swp c Q == (%s. !t. (s,t) : C(c) --> Q t)"
|
939
|
36 |
|
|
37 |
end
|