11479
|
1 |
(* Title: ZF/UNITY/Union.thy
|
|
2 |
ID: $Id$
|
|
3 |
Author: Sidi O Ehmety, Computer Laboratory
|
|
4 |
Copyright 2001 University of Cambridge
|
|
5 |
|
|
6 |
Unions of programs
|
|
7 |
|
|
8 |
Partly from Misra's Chapter 5: Asynchronous Compositions of Programs
|
|
9 |
|
|
10 |
Theory ported form HOL..
|
|
11 |
|
|
12 |
*)
|
|
13 |
|
|
14 |
Union = SubstAx + FP +
|
|
15 |
|
|
16 |
constdefs
|
|
17 |
|
|
18 |
(*FIXME: conjoin Init(F) Int Init(G) ~= 0 *)
|
|
19 |
ok :: [i, i] => o (infixl 65)
|
|
20 |
"F ok G == Acts(F) <= AllowedActs(G) &
|
|
21 |
Acts(G) <= AllowedActs(F)"
|
|
22 |
|
|
23 |
(*FIXME: conjoin (INT i:I. Init(F(i))) ~= 0 *)
|
|
24 |
OK :: [i, i=>i] => o
|
|
25 |
"OK(I,F) == (ALL i:I. ALL j: I-{i}. Acts(F(i)) <= AllowedActs(F(j)))"
|
|
26 |
|
|
27 |
JOIN :: [i, i=>i] => i
|
|
28 |
"JOIN(I,F) == if I = 0 then SKIP else
|
|
29 |
mk_program(INT i:I. Init(F(i)), UN i:I. Acts(F(i)),
|
|
30 |
INT i:I. AllowedActs(F(i)))"
|
|
31 |
|
|
32 |
Join :: [i, i] => i (infixl 65)
|
|
33 |
"F Join G == mk_program (Init(F) Int Init(G), Acts(F) Un Acts(G),
|
|
34 |
AllowedActs(F) Int AllowedActs(G))"
|
|
35 |
(*Characterizes safety properties. Used with specifying AllowedActs*)
|
|
36 |
safety_prop :: "i => o"
|
12195
|
37 |
"safety_prop(X) == X<=program &
|
|
38 |
SKIP:X & (ALL G:program. Acts(G) <= (UN F:X. Acts(F)) --> G:X)"
|
11479
|
39 |
|
|
40 |
syntax
|
|
41 |
"@JOIN1" :: [pttrns, i] => i ("(3JN _./ _)" 10)
|
|
42 |
"@JOIN" :: [pttrn, i, i] => i ("(3JN _:_./ _)" 10)
|
|
43 |
|
|
44 |
translations
|
|
45 |
"JN x:A. B" == "JOIN(A, (%x. B))"
|
|
46 |
"JN x y. B" == "JN x. JN y. B"
|
|
47 |
"JN x. B" == "JOIN(state,(%x. B))"
|
|
48 |
|
12195
|
49 |
syntax (symbols)
|
11479
|
50 |
SKIP :: i ("\\<bottom>")
|
|
51 |
"op Join" :: [i, i] => i (infixl "\\<squnion>" 65)
|
|
52 |
"@JOIN1" :: [pttrns, i] => i ("(3\\<Squnion> _./ _)" 10)
|
|
53 |
"@JOIN" :: [pttrn, i, i] => i ("(3\\<Squnion> _:_./ _)" 10)
|
|
54 |
|
|
55 |
end
|