src/HOL/TLA/Memory/RPC.thy
author wenzelm
Mon, 11 Jan 2016 22:23:03 +0100
changeset 62146 324bc1ffba12
parent 62145 5b946c81dfbf
child 69597 ff784d5a5bfb
permissions -rw-r--r--
eliminated old defs;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
41589
bbd861837ebc tuned headers;
wenzelm
parents: 39159
diff changeset
     1
(*  Title:      HOL/TLA/Memory/RPC.thy
bbd861837ebc tuned headers;
wenzelm
parents: 39159
diff changeset
     2
    Author:     Stephan Merz, University of Munich
21624
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
     3
*)
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     4
60592
c9bd1d902f04 isabelle update_cartouches;
wenzelm
parents: 60591
diff changeset
     5
section \<open>RPC-Memory example: RPC specification\<close>
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     6
17309
c43ed29bd197 converted to Isar theory format;
wenzelm
parents: 11703
diff changeset
     7
theory RPC
c43ed29bd197 converted to Isar theory format;
wenzelm
parents: 11703
diff changeset
     8
imports RPCParameters ProcedureInterface Memory
c43ed29bd197 converted to Isar theory format;
wenzelm
parents: 11703
diff changeset
     9
begin
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    10
42018
878f33040280 modernized specifications;
wenzelm
parents: 41589
diff changeset
    11
type_synonym rpcSndChType = "(rpcOp,Vals) channel"
878f33040280 modernized specifications;
wenzelm
parents: 41589
diff changeset
    12
type_synonym rpcRcvChType = "memChType"
60588
750c533459b1 more symbols;
wenzelm
parents: 60587
diff changeset
    13
type_synonym rpcStType = "(PrIds \<Rightarrow> rpcState) stfun"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    14
62145
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    15
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    16
(* state predicates *)
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    17
62145
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    18
definition RPCInit :: "rpcRcvChType \<Rightarrow> rpcStType \<Rightarrow> PrIds \<Rightarrow> stpred"
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    19
  where "RPCInit rcv rst p == PRED ((rst!p = #rpcA) \<and> \<not>Calling rcv p)"
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    20
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    21
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    22
(* actions *)
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    23
62145
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    24
definition RPCFwd :: "rpcSndChType \<Rightarrow> rpcRcvChType \<Rightarrow> rpcStType \<Rightarrow> PrIds \<Rightarrow> action"
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    25
  where "RPCFwd send rcv rst p == ACT
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    26
      $(Calling send p)
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    27
    \<and> $(rst!p) = # rpcA
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    28
    \<and> IsLegalRcvArg<arg<$(send!p)>>
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    29
    \<and> Call rcv p RPCRelayArg<arg<send!p>>
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    30
    \<and> (rst!p)$ = # rpcB
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    31
    \<and> unchanged (rtrner send!p)"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    32
62145
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    33
definition RPCReject :: "rpcSndChType \<Rightarrow> rpcRcvChType \<Rightarrow> rpcStType \<Rightarrow> PrIds \<Rightarrow> action"
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    34
  where "RPCReject send rcv rst p == ACT
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    35
      $(rst!p) = # rpcA
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    36
    \<and> \<not>IsLegalRcvArg<arg<$(send!p)>>
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    37
    \<and> Return send p #BadCall
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    38
    \<and> unchanged ((rst!p), (caller rcv!p))"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    39
62145
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    40
definition RPCFail :: "rpcSndChType \<Rightarrow> rpcRcvChType \<Rightarrow> rpcStType \<Rightarrow> PrIds \<Rightarrow> action"
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    41
  where "RPCFail send rcv rst p == ACT
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    42
      \<not>$(Calling rcv p)
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    43
    \<and> Return send p #RPCFailure
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    44
    \<and> (rst!p)$ = #rpcA
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    45
    \<and> unchanged (caller rcv!p)"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    46
62145
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    47
definition RPCReply :: "rpcSndChType \<Rightarrow> rpcRcvChType \<Rightarrow> rpcStType \<Rightarrow> PrIds \<Rightarrow> action"
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    48
  where "RPCReply send rcv rst p == ACT
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    49
      \<not>$(Calling rcv p)
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    50
    \<and> $(rst!p) = #rpcB
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    51
    \<and> Return send p res<rcv!p>
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    52
    \<and> (rst!p)$ = #rpcA
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    53
    \<and> unchanged (caller rcv!p)"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    54
62145
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    55
definition RPCNext :: "rpcSndChType \<Rightarrow> rpcRcvChType \<Rightarrow> rpcStType \<Rightarrow> PrIds \<Rightarrow> action"
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    56
  where "RPCNext send rcv rst p == ACT
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    57
    (  RPCFwd send rcv rst p
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    58
     \<or> RPCReject send rcv rst p
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    59
     \<or> RPCFail send rcv rst p
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    60
     \<or> RPCReply send rcv rst p)"
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    61
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    62
62145
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    63
(* temporal *)
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    64
62145
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    65
definition RPCIPSpec :: "rpcSndChType \<Rightarrow> rpcRcvChType \<Rightarrow> rpcStType \<Rightarrow> PrIds \<Rightarrow> temporal"
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    66
  where "RPCIPSpec send rcv rst p == TEMP
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    67
     Init RPCInit rcv rst p
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    68
   \<and> \<box>[ RPCNext send rcv rst p ]_(rst!p, rtrner send!p, caller rcv!p)
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    69
   \<and> 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
    70
62145
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    71
definition RPCISpec :: "rpcSndChType \<Rightarrow> rpcRcvChType \<Rightarrow> rpcStType \<Rightarrow> temporal"
5b946c81dfbf eliminated old defs;
wenzelm
parents: 60592
diff changeset
    72
  where "RPCISpec send rcv rst == TEMP (\<forall>p. RPCIPSpec send rcv rst p)"
17309
c43ed29bd197 converted to Isar theory format;
wenzelm
parents: 11703
diff changeset
    73
21624
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    74
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    75
lemmas RPC_action_defs =
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    76
  RPCInit_def RPCFwd_def RPCReject_def RPCFail_def RPCReply_def RPCNext_def
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_temp_defs = RPCIPSpec_def RPCISpec_def
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    79
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    80
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    81
(* 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
    82
   unanswered call for that process.
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    83
*)
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    84
60588
750c533459b1 more symbols;
wenzelm
parents: 60587
diff changeset
    85
lemma RPCidle: "\<turnstile> \<not>$(Calling send p) \<longrightarrow> \<not>RPCNext send rcv rst p"
62146
324bc1ffba12 eliminated old defs;
wenzelm
parents: 62145
diff changeset
    86
  by (auto simp: AReturn_def RPC_action_defs)
21624
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    87
60591
e0b77517f9a9 more symbols;
wenzelm
parents: 60588
diff changeset
    88
lemma RPCbusy: "\<turnstile> $(Calling rcv p) \<and> $(rst!p) = #rpcB \<longrightarrow> \<not>RPCNext send rcv rst p"
21624
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    89
  by (auto simp: 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
(* RPC failure actions are visible. *)
60588
750c533459b1 more symbols;
wenzelm
parents: 60587
diff changeset
    92
lemma RPCFail_vis: "\<turnstile> RPCFail send rcv rst p \<longrightarrow>  
21624
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    93
    <RPCNext send rcv rst p>_(rst!p, rtrner send!p, caller rcv!p)"
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    94
  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
    95
60588
750c533459b1 more symbols;
wenzelm
parents: 60587
diff changeset
    96
lemma RPCFail_Next_enabled: "\<turnstile> Enabled (RPCFail send rcv rst p) \<longrightarrow>  
21624
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    97
    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
    98
  by (force elim!: enabled_mono [temp_use] RPCFail_vis [temp_use])
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
    99
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
   100
(* Enabledness of some actions *)
60588
750c533459b1 more symbols;
wenzelm
parents: 60587
diff changeset
   101
lemma RPCFail_enabled: "\<And>p. basevars (rtrner send!p, caller rcv!p, rst!p) \<Longrightarrow>  
60591
e0b77517f9a9 more symbols;
wenzelm
parents: 60588
diff changeset
   102
    \<turnstile> \<not>Calling rcv p \<and> Calling send p \<longrightarrow> Enabled (RPCFail send rcv rst p)"
60592
c9bd1d902f04 isabelle update_cartouches;
wenzelm
parents: 60591
diff changeset
   103
  by (tactic \<open>action_simp_tac (@{context} addsimps [@{thm RPCFail_def},
62146
324bc1ffba12 eliminated old defs;
wenzelm
parents: 62145
diff changeset
   104
    @{thm AReturn_def}, @{thm caller_def}, @{thm rtrner_def}]) [exI]
60592
c9bd1d902f04 isabelle update_cartouches;
wenzelm
parents: 60591
diff changeset
   105
    [@{thm base_enabled}, @{thm Pair_inject}] 1\<close>)
21624
6f79647cf536 TLA: converted legacy ML scripts;
wenzelm
parents: 17309
diff changeset
   106
60588
750c533459b1 more symbols;
wenzelm
parents: 60587
diff changeset
   107
lemma RPCReply_enabled: "\<And>p. basevars (rtrner send!p, caller rcv!p, rst!p) \<Longrightarrow>  
60591
e0b77517f9a9 more symbols;
wenzelm
parents: 60588
diff changeset
   108
      \<turnstile> \<not>Calling rcv p \<and> Calling send p \<and> rst!p = #rpcB  
60588
750c533459b1 more symbols;
wenzelm
parents: 60587
diff changeset
   109
         \<longrightarrow> Enabled (RPCReply send rcv rst p)"
60592
c9bd1d902f04 isabelle update_cartouches;
wenzelm
parents: 60591
diff changeset
   110
  by (tactic \<open>action_simp_tac (@{context} addsimps [@{thm RPCReply_def},
62146
324bc1ffba12 eliminated old defs;
wenzelm
parents: 62145
diff changeset
   111
    @{thm AReturn_def}, @{thm caller_def}, @{thm rtrner_def}]) [exI]
60592
c9bd1d902f04 isabelle update_cartouches;
wenzelm
parents: 60591
diff changeset
   112
    [@{thm base_enabled}, @{thm Pair_inject}] 1\<close>)
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   113
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   114
end