src/HOL/TLA/Memory/RPC.thy
author wenzelm
Wed, 19 Mar 2008 22:50:42 +0100
changeset 26342 0f65fa163304
parent 21624 6f79647cf536
child 39159 0dec18004e75
permissions -rw-r--r--
more antiquotations;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     1
(*
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     2
    File:        RPC.thy
17309
c43ed29bd197 converted to Isar theory format;
wenzelm
parents: 11703
diff changeset
     3
    ID:          $Id$
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     4
    Author:      Stephan Merz
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     5
    Copyright:   1997 University of Munich
21624
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
     6
*)
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     7
21624
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
     8
header {* RPC-Memory example: RPC specification *}
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     9
17309
c43ed29bd197 converted to Isar theory format;
wenzelm
parents: 11703
diff changeset
    10
theory RPC
c43ed29bd197 converted to Isar theory format;
wenzelm
parents: 11703
diff changeset
    11
imports RPCParameters ProcedureInterface Memory
c43ed29bd197 converted to Isar theory format;
wenzelm
parents: 11703
diff changeset
    12
begin
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    13
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    14
types
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    15
  rpcSndChType  = "(rpcOp,Vals) channel"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    16
  rpcRcvChType  = "memChType"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    17
  rpcStType     = "(PrIds => rpcState) stfun"
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    18
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    19
consts
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    20
  (* state predicates *)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    21
  RPCInit      :: "rpcRcvChType => rpcStType => PrIds => stpred"
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    22
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    23
  (* actions *)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    24
  RPCFwd     :: "rpcSndChType => rpcRcvChType => rpcStType => PrIds => action"
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    25
  RPCReject  :: "rpcSndChType => rpcRcvChType => rpcStType => PrIds => action"
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    26
  RPCFail    :: "rpcSndChType => rpcRcvChType => rpcStType => PrIds => action"
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    27
  RPCReply   :: "rpcSndChType => rpcRcvChType => rpcStType => PrIds => action"
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    28
  RPCNext    :: "rpcSndChType => rpcRcvChType => rpcStType => PrIds => action"
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    29
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    30
  (* temporal *)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    31
  RPCIPSpec   :: "rpcSndChType => rpcRcvChType => rpcStType => PrIds => temporal"
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    32
  RPCISpec   :: "rpcSndChType => rpcRcvChType => rpcStType => temporal"
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    33
17309
c43ed29bd197 converted to Isar theory format;
wenzelm
parents: 11703
diff changeset
    34
defs
c43ed29bd197 converted to Isar theory format;
wenzelm
parents: 11703
diff changeset
    35
  RPCInit_def:       "RPCInit rcv rst p == PRED ((rst!p = #rpcA) & ~Calling rcv p)"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    36
17309
c43ed29bd197 converted to Isar theory format;
wenzelm
parents: 11703
diff changeset
    37
  RPCFwd_def:        "RPCFwd send rcv rst p == ACT
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    38
                         $(Calling send p)
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    39
                         & $(rst!p) = # rpcA
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    40
                         & IsLegalRcvArg<arg<$(send!p)>>
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    41
                         & Call rcv p RPCRelayArg<arg<send!p>>
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    42
                         & (rst!p)$ = # rpcB
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    43
                         & unchanged (rtrner send!p)"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    44
17309
c43ed29bd197 converted to Isar theory format;
wenzelm
parents: 11703
diff changeset
    45
  RPCReject_def:     "RPCReject send rcv rst p == ACT
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    46
                           $(rst!p) = # rpcA
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    47
                         & ~IsLegalRcvArg<arg<$(send!p)>>
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    48
                         & Return send p #BadCall
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    49
                         & unchanged ((rst!p), (caller rcv!p))"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    50
17309
c43ed29bd197 converted to Isar theory format;
wenzelm
parents: 11703
diff changeset
    51
  RPCFail_def:       "RPCFail send rcv rst p == ACT
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    52
                           ~$(Calling rcv p)
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    53
                         & Return send p #RPCFailure
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    54
                         & (rst!p)$ = #rpcA
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    55
                         & unchanged (caller rcv!p)"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    56
17309
c43ed29bd197 converted to Isar theory format;
wenzelm
parents: 11703
diff changeset
    57
  RPCReply_def:      "RPCReply send rcv rst p == ACT
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    58
                           ~$(Calling rcv p)
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    59
                         & $(rst!p) = #rpcB
17309
c43ed29bd197 converted to Isar theory format;
wenzelm
parents: 11703
diff changeset
    60
                         & Return send p res<rcv!p>
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    61
                         & (rst!p)$ = #rpcA
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    62
                         & unchanged (caller rcv!p)"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    63
17309
c43ed29bd197 converted to Isar theory format;
wenzelm
parents: 11703
diff changeset
    64
  RPCNext_def:       "RPCNext send rcv rst p == ACT
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    65
                        (  RPCFwd send rcv rst p
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    66
                         | RPCReject send rcv rst p
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    67
                         | RPCFail send rcv rst p
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    68
                         | RPCReply send rcv rst p)"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    69
17309
c43ed29bd197 converted to Isar theory format;
wenzelm
parents: 11703
diff changeset
    70
  RPCIPSpec_def:     "RPCIPSpec send rcv rst p == TEMP
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    71
                           Init RPCInit rcv rst p
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    72
                         & [][ RPCNext send rcv rst p ]_(rst!p, rtrner send!p, caller rcv!p)
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    73
                         & WF(RPCNext send rcv rst p)_(rst!p, rtrner send!p, caller rcv!p)"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    74
17309
c43ed29bd197 converted to Isar theory format;
wenzelm
parents: 11703
diff changeset
    75
  RPCISpec_def:      "RPCISpec send rcv rst == TEMP (ALL p. RPCIPSpec send rcv rst p)"
c43ed29bd197 converted to Isar theory format;
wenzelm
parents: 11703
diff changeset
    76
21624
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    77
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    78
lemmas RPC_action_defs =
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    79
  RPCInit_def RPCFwd_def RPCReject_def RPCFail_def RPCReply_def RPCNext_def
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    80
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    81
lemmas RPC_temp_defs = RPCIPSpec_def RPCISpec_def
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    82
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    83
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    84
(* The RPC component engages in an action for process p only if there is an outstanding,
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    85
   unanswered call for that process.
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    86
*)
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    87
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    88
lemma RPCidle: "|- ~$(Calling send p) --> ~RPCNext send rcv rst p"
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    89
  by (auto simp: Return_def RPC_action_defs)
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    90
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    91
lemma RPCbusy: "|- $(Calling rcv p) & $(rst!p) = #rpcB --> ~RPCNext send rcv rst p"
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    92
  by (auto simp: RPC_action_defs)
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    93
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    94
(* RPC failure actions are visible. *)
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    95
lemma RPCFail_vis: "|- RPCFail send rcv rst p -->  
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    96
    <RPCNext send rcv rst p>_(rst!p, rtrner send!p, caller rcv!p)"
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    97
  by (auto dest!: Return_changed [temp_use] simp: angle_def RPCNext_def RPCFail_def)
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    98
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    99
lemma RPCFail_Next_enabled: "|- Enabled (RPCFail send rcv rst p) -->  
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
   100
    Enabled (<RPCNext send rcv rst p>_(rst!p, rtrner send!p, caller rcv!p))"
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
   101
  by (force elim!: enabled_mono [temp_use] RPCFail_vis [temp_use])
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
   102
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
   103
(* Enabledness of some actions *)
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
   104
lemma RPCFail_enabled: "!!p. basevars (rtrner send!p, caller rcv!p, rst!p) ==>  
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
   105
    |- ~Calling rcv p & Calling send p --> Enabled (RPCFail send rcv rst p)"
26342
0f65fa163304 more antiquotations;
wenzelm
parents: 21624
diff changeset
   106
  by (tactic {* action_simp_tac (@{simpset} addsimps [thm "RPCFail_def",
21624
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
   107
    thm "Return_def", thm "caller_def", thm "rtrner_def"]) [exI]
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
   108
    [thm "base_enabled", thm "Pair_inject"] 1 *})
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
   109
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
   110
lemma RPCReply_enabled: "!!p. basevars (rtrner send!p, caller rcv!p, rst!p) ==>  
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
   111
      |- ~Calling rcv p & Calling send p & rst!p = #rpcB  
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
   112
         --> Enabled (RPCReply send rcv rst p)"
26342
0f65fa163304 more antiquotations;
wenzelm
parents: 21624
diff changeset
   113
  by (tactic {* action_simp_tac (@{simpset} addsimps [thm "RPCReply_def",
21624
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
   114
    thm "Return_def", thm "caller_def", thm "rtrner_def"]) [exI]
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
   115
    [thm "base_enabled", thm "Pair_inject"] 1 *})
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   116
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   117
end