Theory RPCParameters

Up to index of Isabelle/HOL/TLA/Memory

theory RPCParameters
imports MemoryParameters

(*
File: RPCParameters.thy
ID: $Id$
Author: Stephan Merz
Copyright: 1997 University of Munich
*)


header {* RPC-Memory example: RPC parameters *}

theory RPCParameters
imports MemoryParameters
begin


(*
For simplicity, specify the instance of RPC that is used in the
memory implementation.
*)


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"


axioms
(* 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) => undefined"


lemmas [simp] = RFNoMemVal NotAResultNotRF OKNotRF BANotRF
NotAResultNotRF [symmetric] OKNotRF [symmetric] BANotRF [symmetric]


end