src/HOL/UNITY/Comp.thy
 author paulson Mon Mar 01 18:38:43 1999 +0100 (1999-03-01) changeset 6295 351b3c2b0d83 parent 6138 b7e6e607bb4d child 6646 3ea726909fff permissions -rw-r--r--
removed the infernal States, eqStates, compatible, etc.
```     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
```