src/HOL/TLA/Memory/RPCParameters.thy
author wenzelm
Thu, 03 Aug 2000 19:29:03 +0200
changeset 9517 f58863b1406a
parent 6255 db63752140c7
child 11703 6e5de8d4290a
permissions -rw-r--r--
tuned version by Stephan Merz (unbatchified etc.);

(*
    File:        RPCParameters.thy
    Author:      Stephan Merz
    Copyright:   1997 University of Munich

    Theory Name: RPCParameters
    Logic Image: TLA

    RPC-Memory example: RPC parameters
    For simplicity, specify the instance of RPC that is used in the
    memory implementation.
*)

RPCParameters = MemoryParameters +

datatype  rpcOp = memcall memOp | othercall Vals
datatype  rpcState = rpcA | rpcB

consts
  (* some particular return values *)
  RPCFailure     :: Vals
  BadCall        :: Vals
  
  (* Translate an rpc call to a memory call and test if the current argument
     is legal for the receiver (i.e., the memory). This can now be a little
     simpler than for the generic RPC component. RelayArg returns an arbitrary
     memory call for illegal arguments. *)
  IsLegalRcvArg  :: rpcOp => bool
  RPCRelayArg    :: rpcOp => memOp

rules
  (* RPCFailure is different from MemVals and exceptions *)
  RFNoMemVal        "RPCFailure ~: MemVal"
  NotAResultNotRF   "NotAResult ~= RPCFailure"
  OKNotRF           "OK ~= RPCFailure"
  BANotRF           "BadArg ~= RPCFailure"

defs
  IsLegalRcvArg_def "IsLegalRcvArg ra ==
		         case ra of (memcall m) => True
		                  | (othercall v) => False"
  RPCRelayArg_def   "RPCRelayArg ra ==
		         case ra of (memcall m) => m
		                  | (othercall v) => arbitrary"
end