src/HOL/TLA/Memory/RPCParameters.thy
author wenzelm
Tue, 24 Aug 1999 11:50:58 +0200
changeset 7333 6cb15c6f1d9f
parent 6255 db63752140c7
child 9517 f58863b1406a
permissions -rw-r--r--
isar: no_pos flag;
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:        RPCParameters.thy
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     3
    Author:      Stephan Merz
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     4
    Copyright:   1997 University of Munich
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     5
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     6
    Theory Name: RPCParameters
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     7
    Logic Image: TLA
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     8
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     9
    RPC-Memory example: RPC parameters
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    10
    For simplicity, specify the instance of RPC that is used in the
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    11
    memory implementation.
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    12
*)
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
RPCParameters = MemoryParameters +
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    15
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    16
datatype  rpcOp = memcall memOp | othercall Vals
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    17
datatype  rpcState = rpcA | rpcB
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    18
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    19
(***
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    20
types
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    21
  (* type of RPC arguments other than memory calls *)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    22
  noMemArgType
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    23
  (* legal arguments for (our instance of) the RPC component *)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    24
  rpcArgType = "(rpcOps * memArgType) + (rpcOps * noMemArgType)"
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    25
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    26
arities
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    27
  noMemArgType :: term
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    28
***)
3807
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
consts
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    31
  (* some particular return values *)
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    32
  RPCFailure     :: Vals
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    33
  BadCall        :: Vals
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    34
  
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    35
  (* Translate an rpc call to a memory call and test if the current argument
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    36
     is legal for the receiver (i.e., the memory). This can now be a little
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    37
     simpler than for the generic RPC component. RelayArg returns an arbitrary
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    38
     memory call for illegal arguments. *)
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    39
(***
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    40
  IsLegalRcvArg  :: rpcArgType => bool
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    41
  RPCRelayArg    :: rpcArgType => memArgType
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    42
***)
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    43
  IsLegalRcvArg  :: rpcOp => bool
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    44
  RPCRelayArg    :: rpcOp => memOp
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    45
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    46
rules
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    47
  (* RPCFailure is different from MemVals and exceptions *)
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    48
  RFNoMemVal        "RPCFailure ~: MemVal"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    49
  NotAResultNotRF   "NotAResult ~= RPCFailure"
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    50
  OKNotRF           "OK ~= RPCFailure"
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    51
  BANotRF           "BadArg ~= RPCFailure"
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    52
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    53
(***
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    54
  IsLegalRcvArg_def "IsLegalRcvArg ra == EX marg. ra = Inl (remoteCall,marg)"
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    55
  RPCRelayArg_def   "RPCRelayArg ra == 
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    56
                         case ra of Inl (rm) => (snd rm)
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    57
                                  | Inr (rn) => (read, @ l. True)"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    58
***)
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    59
defs
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    60
  IsLegalRcvArg_def "IsLegalRcvArg ra ==
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    61
		         case ra of (memcall m) => True
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    62
		                  | (othercall v) => False"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    63
  RPCRelayArg_def   "RPCRelayArg ra ==
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    64
		         case ra of (memcall m) => m
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 3807
diff changeset
    65
		                  | (othercall v) => arbitrary"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    66
end
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    67
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    68