1 (* Title: HOL/UNITY/Guar.thy |
1 (* Title: HOL/UNITY/Guar.thy |
2 ID: $Id$ |
|
3 Author: Lawrence C Paulson, Cambridge University Computer Laboratory |
2 Author: Lawrence C Paulson, Cambridge University Computer Laboratory |
4 Copyright 1999 University of Cambridge |
3 Author: Sidi Ehmety |
5 |
4 |
6 From Chandy and Sanders, "Reasoning About Program Composition", |
5 From Chandy and Sanders, "Reasoning About Program Composition", |
7 Technical Report 2000-003, University of Florida, 2000. |
6 Technical Report 2000-003, University of Florida, 2000. |
8 |
7 |
9 Revised by Sidi Ehmety on January 2001 |
8 Compatibility, weakest guarantees, etc. and Weakest existential |
10 |
9 property, from Charpentier and Chandy "Theorems about Composition", |
11 Added: Compatibility, weakest guarantees, etc. |
|
12 |
|
13 and Weakest existential property, |
|
14 from Charpentier and Chandy "Theorems about Composition", |
|
15 Fifth International Conference on Mathematics of Program, 2000. |
10 Fifth International Conference on Mathematics of Program, 2000. |
16 |
|
17 *) |
11 *) |
18 |
12 |
19 header{*Guarantees Specifications*} |
13 header{*Guarantees Specifications*} |
20 |
14 |
21 theory Guar |
15 theory Guar |
64 (*Ill-defined programs can arise through "Join"*) |
58 (*Ill-defined programs can arise through "Join"*) |
65 welldef :: "'a program set" |
59 welldef :: "'a program set" |
66 "welldef == {F. Init F \<noteq> {}}" |
60 "welldef == {F. Init F \<noteq> {}}" |
67 |
61 |
68 refines :: "['a program, 'a program, 'a program set] => bool" |
62 refines :: "['a program, 'a program, 'a program set] => bool" |
69 ("(3_ refines _ wrt _)" [10,10,10] 10) |
63 ("(3_ refines _ wrt _)" [10,10,10] 10) |
70 "G refines F wrt X == |
64 "G refines F wrt X == |
71 \<forall>H. (F ok H & G ok H & F\<squnion>H \<in> welldef \<inter> X) --> |
65 \<forall>H. (F ok H & G ok H & F\<squnion>H \<in> welldef \<inter> X) --> |
72 (G\<squnion>H \<in> welldef \<inter> X)" |
66 (G\<squnion>H \<in> welldef \<inter> X)" |
73 |
67 |
74 iso_refines :: "['a program, 'a program, 'a program set] => bool" |
68 iso_refines :: "['a program, 'a program, 'a program set] => bool" |