author | urbanc |
Tue, 13 Dec 2005 18:11:21 +0100 | |
changeset 18396 | b3e7da94b51f |
parent 17309 | c43ed29bd197 |
permissions | -rw-r--r-- |
17309 | 1 |
(* |
3807 | 2 |
File: RPC.ML |
17309 | 3 |
ID: $Id$ |
3807 | 4 |
Author: Stephan Merz |
5 |
Copyright: 1997 University of Munich |
|
6 |
||
6255 | 7 |
RPC-Memory example: RPC specification (theorems and proofs) |
3807 | 8 |
*) |
9 |
||
17309 | 10 |
val RPC_action_defs = [RPCInit_def, RPCFwd_def, RPCReject_def, RPCFail_def, |
6255 | 11 |
RPCReply_def, RPCNext_def]; |
3807 | 12 |
|
13 |
val RPC_temp_defs = [RPCIPSpec_def, RPCISpec_def]; |
|
14 |
||
6255 | 15 |
val mem_css = (claset(), simpset()); |
16 |
||
3807 | 17 |
(* The RPC component engages in an action for process p only if there is an outstanding, |
18 |
unanswered call for that process. |
|
19 |
*) |
|
20 |
||
9517
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents:
7881
diff
changeset
|
21 |
Goal "|- ~$(Calling send p) --> ~RPCNext send rcv rst p"; |
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents:
7881
diff
changeset
|
22 |
by (auto_tac (mem_css addsimps2 (Return_def::RPC_action_defs))); |
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents:
7881
diff
changeset
|
23 |
qed "RPCidle"; |
3807 | 24 |
|
9517
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents:
7881
diff
changeset
|
25 |
Goal "|- $(Calling rcv p) & $(rst!p) = #rpcB --> ~RPCNext send rcv rst p"; |
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents:
7881
diff
changeset
|
26 |
by (auto_tac (mem_css addsimps2 RPC_action_defs)); |
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents:
7881
diff
changeset
|
27 |
qed "RPCbusy"; |
3807 | 28 |
|
29 |
(* RPC failure actions are visible. *) |
|
9517
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents:
7881
diff
changeset
|
30 |
Goal "|- RPCFail send rcv rst p --> \ |
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents:
7881
diff
changeset
|
31 |
\ <RPCNext send rcv rst p>_(rst!p, rtrner send!p, caller rcv!p)"; |
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents:
7881
diff
changeset
|
32 |
by (auto_tac (claset() addSDs [Return_changed], |
17309 | 33 |
simpset() addsimps [angle_def,RPCNext_def,RPCFail_def])); |
9517
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents:
7881
diff
changeset
|
34 |
qed "RPCFail_vis"; |
3807 | 35 |
|
9517
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents:
7881
diff
changeset
|
36 |
Goal "|- Enabled (RPCFail send rcv rst p) --> \ |
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents:
7881
diff
changeset
|
37 |
\ Enabled (<RPCNext send rcv rst p>_(rst!p, rtrner send!p, caller rcv!p))"; |
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents:
7881
diff
changeset
|
38 |
by (force_tac (mem_css addSEs2 [enabled_mono,RPCFail_vis]) 1); |
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents:
7881
diff
changeset
|
39 |
qed "RPCFail_Next_enabled"; |
3807 | 40 |
|
41 |
(* Enabledness of some actions *) |
|
9517
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents:
7881
diff
changeset
|
42 |
Goal "!!p. basevars (rtrner send!p, caller rcv!p, rst!p) ==> \ |
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents:
7881
diff
changeset
|
43 |
\ |- ~Calling rcv p & Calling send p --> Enabled (RPCFail send rcv rst p)"; |
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents:
7881
diff
changeset
|
44 |
by (action_simp_tac (simpset() addsimps [RPCFail_def,Return_def,caller_def,rtrner_def]) |
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents:
7881
diff
changeset
|
45 |
[exI] [base_enabled,Pair_inject] 1); |
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents:
7881
diff
changeset
|
46 |
qed "RPCFail_enabled"; |
3807 | 47 |
|
9517
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents:
7881
diff
changeset
|
48 |
Goal "!!p. basevars (rtrner send!p, caller rcv!p, rst!p) ==> \ |
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents:
7881
diff
changeset
|
49 |
\ |- ~Calling rcv p & Calling send p & rst!p = #rpcB \ |
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents:
7881
diff
changeset
|
50 |
\ --> Enabled (RPCReply send rcv rst p)"; |
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents:
7881
diff
changeset
|
51 |
by (action_simp_tac (simpset() addsimps [RPCReply_def,Return_def,caller_def,rtrner_def]) |
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents:
7881
diff
changeset
|
52 |
[exI] [base_enabled,Pair_inject] 1); |
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents:
7881
diff
changeset
|
53 |
qed "RPCReply_enabled"; |