src/HOL/UNITY/Comp.thy
 author paulson Mon Oct 05 10:27:04 1998 +0200 (1998-10-05) changeset 5612 e981ca6f7332 parent 5597 a12b25c53df1 child 6012 1894bfc4aee9 permissions -rw-r--r--
Finished proofs to end of section 5.1 of Chandy and Sanders
```     1 (*  Title:      HOL/UNITY/Comp.thy
```
```     2     ID:         \$Id\$
```
```     3     Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
```
```     4     Copyright   1998  University of Cambridge
```
```     5
```
```     6 Composition
```
```     7
```
```     8 From Chandy and Sanders, "Reasoning About Program Composition"
```
```     9 *)
```
```    10
```
```    11 Comp = Union +
```
```    12
```
```    13 constdefs
```
```    14
```
```    15   (*Existential and Universal properties.  I formalize the two-program
```
```    16     case, proving equivalence with Chandy and Sanders's n-ary definitions*)
```
```    17
```
```    18   ex_prop  :: 'a program set => bool
```
```    19    "ex_prop X == ALL F G. F:X | G: X --> (F Join G) : X"
```
```    20
```
```    21   strict_ex_prop  :: 'a program set => bool
```
```    22    "strict_ex_prop X == ALL F G. (F:X | G: X) = (F Join G : X)"
```
```    23
```
```    24   uv_prop  :: 'a program set => bool
```
```    25    "uv_prop X == SKIP: X & (ALL F G. F:X & G: X --> (F Join G) : X)"
```
```    26
```
```    27   strict_uv_prop  :: 'a program set => bool
```
```    28    "strict_uv_prop X == SKIP: X & (ALL F G. (F:X & G: X) = (F Join G : X))"
```
```    29
```
```    30   (*Ill-defined programs can arise through "Join"*)
```
```    31   welldef :: 'a program set
```
```    32    "welldef == {F. Init F ~= {}}"
```
```    33
```
```    34   component :: ['a program, 'a program] => bool
```
```    35    "component F H == EX G. F Join G = H"
```
```    36
```
```    37   guarantees :: ['a program set, 'a program set] => 'a program set (infixl 65)
```
```    38    "X guarantees Y == {F. ALL H. component F H --> H:X --> H:Y}"
```
```    39
```
```    40   refines :: ['a program, 'a program, 'a program set] => bool
```
```    41 			("(3_ refines _ wrt _)" [10,10,10] 10)
```
```    42    "G refines F wrt X ==
```
```    43       ALL H. (F Join H) : welldef Int X --> G Join H : welldef Int X"
```
```    44
```
```    45   iso_refines :: ['a program, 'a program, 'a program set] => bool
```
```    46 			("(3_ iso'_refines _ wrt _)" [10,10,10] 10)
```
```    47    "G iso_refines F wrt X ==
```
```    48       F : welldef Int X --> G : welldef Int X"
```
```    49
```
```    50 end
```