| author | mengj | 
| Fri, 07 Apr 2006 05:14:54 +0200 | |
| changeset 19356 | 794802e95d35 | 
| 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: 
7881diff
changeset | 21 | Goal "|- ~$(Calling send p) --> ~RPCNext send rcv rst p"; | 
| 
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
 wenzelm parents: 
7881diff
changeset | 22 | by (auto_tac (mem_css addsimps2 (Return_def::RPC_action_defs))); | 
| 
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
 wenzelm parents: 
7881diff
changeset | 23 | qed "RPCidle"; | 
| 3807 | 24 | |
| 9517 
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
 wenzelm parents: 
7881diff
changeset | 25 | Goal "|- $(Calling rcv p) & $(rst!p) = #rpcB --> ~RPCNext send rcv rst p"; | 
| 
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
 wenzelm parents: 
7881diff
changeset | 26 | by (auto_tac (mem_css addsimps2 RPC_action_defs)); | 
| 
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
 wenzelm parents: 
7881diff
changeset | 27 | qed "RPCbusy"; | 
| 3807 | 28 | |
| 29 | (* RPC failure actions are visible. *) | |
| 9517 
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
 wenzelm parents: 
7881diff
changeset | 30 | Goal "|- RPCFail send rcv rst p --> \ | 
| 
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
 wenzelm parents: 
7881diff
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: 
7881diff
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: 
7881diff
changeset | 34 | qed "RPCFail_vis"; | 
| 3807 | 35 | |
| 9517 
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
 wenzelm parents: 
7881diff
changeset | 36 | Goal "|- Enabled (RPCFail send rcv rst p) --> \ | 
| 
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
 wenzelm parents: 
7881diff
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: 
7881diff
changeset | 38 | by (force_tac (mem_css addSEs2 [enabled_mono,RPCFail_vis]) 1); | 
| 
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
 wenzelm parents: 
7881diff
changeset | 39 | qed "RPCFail_Next_enabled"; | 
| 3807 | 40 | |
| 41 | (* Enabledness of some actions *) | |
| 9517 
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
 wenzelm parents: 
7881diff
changeset | 42 | Goal "!!p. basevars (rtrner send!p, caller rcv!p, rst!p) ==> \ | 
| 
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
 wenzelm parents: 
7881diff
changeset | 43 | \ |- ~Calling rcv p & Calling send p --> Enabled (RPCFail send rcv rst p)"; | 
| 
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
 wenzelm parents: 
7881diff
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: 
7881diff
changeset | 45 | [exI] [base_enabled,Pair_inject] 1); | 
| 
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
 wenzelm parents: 
7881diff
changeset | 46 | qed "RPCFail_enabled"; | 
| 3807 | 47 | |
| 9517 
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
 wenzelm parents: 
7881diff
changeset | 48 | Goal "!!p. basevars (rtrner send!p, caller rcv!p, rst!p) ==> \ | 
| 
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
 wenzelm parents: 
7881diff
changeset | 49 | \ |- ~Calling rcv p & Calling send p & rst!p = #rpcB \ | 
| 
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
 wenzelm parents: 
7881diff
changeset | 50 | \ --> Enabled (RPCReply send rcv rst p)"; | 
| 
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
 wenzelm parents: 
7881diff
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: 
7881diff
changeset | 52 | [exI] [base_enabled,Pair_inject] 1); | 
| 
f58863b1406a
tuned version by Stephan Merz (unbatchified etc.);
 wenzelm parents: 
7881diff
changeset | 53 | qed "RPCReply_enabled"; |