src/HOL/UNITY/Comp.thy
 author paulson Thu Oct 01 18:28:47 1998 +0200 (1998-10-01) changeset 5597 a12b25c53df1 child 5612 e981ca6f7332 permissions -rw-r--r--
composition theory
```     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 --> (Join F G) : X"
```
```    20
```
```    21   strict_ex_prop  :: 'a program set => bool
```
```    22    "strict_ex_prop X == ALL F G. (F:X | G: X) = (Join F G : X)"
```
```    23
```
```    24   uv_prop  :: 'a program set => bool
```
```    25    "uv_prop X == SKIP: X & (ALL F G. F:X & G: X --> (Join F 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) = (Join F G : X))"
```
```    29
```
```    30   compatible :: ['a program, 'a program] => bool
```
```    31    "compatible F G == Init F Int Init G ~= {}"
```
```    32
```
```    33   component :: ['a program, 'a program] => bool
```
```    34    "component F H == EX G. Join F G = H"
```
```    35
```
```    36   guarantees :: ['a program set, 'a program set] => 'a program set (infixl 65)
```
```    37    "X guarantees Y == {F. ALL H. component F H --> H:X --> H:Y}"
```
```    38
```
```    39 end
```