Academia.eduAcademia.edu

Object-based abstract state machines

1998

When designing and implementing complex computer sys tems powerful description techniques are needed that allow the repre sentation of hardware and software components at various abstraction levels and support re nement during the development process These techniques should be formal in order to support mathematical reason ing about systems properties while at the same time they should be operational so as to facilitate comprehension and implementation of the system In this paper we propose Object based Abstract State Machines ObASM an extension of Abstract State Machines ASM ASM are an operational formalism that has been successfully applied to the description of hard ware and software systems ObASM are adding a notion of locality of state and the concept of communication between loosely coupled agents These extensions are designed to be minimal additions to the traditional ASM formulation preserving their simplicity while at the same time signi cantly enhancing their modeling powe...

Research Collection Working Paper Object-based abstract state machines Author(s): Janneck, Jörn Wilhelm; Kutter, Philipp W. Publication Date: 1998 Permanent Link: https://doi.org/10.3929/ethz-a-004289119 Rights / License: In Copyright - Non-Commercial Use Permitted This page was generated automatically upon download from the ETH Zurich Research Collection. For more information please consult the Terms of use. ETH Library TIK-Report Nr. 47 Object-based Abstract State Machines Jorn W. Janneck and Philipp W. Kutter Computer Engineering and Networks Laboratory (TIK) Swiss Federal Institute of Technology Zurich CH-8092 Zurich, Switzerland E-mail: fjanneck,[email protected] Abstract. When designing and implementing complex computer sys- tems, powerful description techniques are needed that allow the representation of hardware and software components at various abstraction levels and support re nement during the development process. These techniques should be formal in order to support mathematical reasoning about systems properties while at the same time they should be operational so as to facilitate comprehension and implementation of the system. In this paper we propose Object-based Abstract State Machines (ObASM), an extension of Abstract State Machines (ASM). ASM are an operational formalism that has been successfully applied to the description of hardware and software systems. ObASM are adding a notion of locality of state and the concept of communication between loosely coupled agents. These extensions are designed to be minimal additions to the traditional ASM formulation, preserving their simplicity while at the same time signi cantly enhancing their modeling power. We give a formal semantics for ObASMs and discuss the properties of the extended formalism. 1 Introduction Today's software and hardware systems are characterized by a composition of complex subsystems and complex interactions between them. An abstract specication of the whole system is needed to understand the behavior before expensive implementation is started. Research proposed many formalisms that are well suited for analysis or even verication. Unfortunately it turned out, that such descriptions are not always simple enough to be used in industrial system development, and even where the methods have been successfully applied 19], it was often not possible to rene the descriptions down to the implementation 18]. Gurevich's Abstract State Machines (ASMs) 13]14] are an operational formalism that can be used to model algorithms on dierent abstraction levels, from an abstract view down to the implementation details. ASMs have proven their applicability and usefulness to system specication and design through numerous extensive case studies in major domains as diverse as semantics and implementation of languages (C, C++, OCCAM, Oberon, Java, VHDL, SDL), hardware and software architectures (APE 100, ARM, pipelining in RISC architectures, PVM, Transputer), and embedded control systems (steam boiler control, production cell) 5]20]. Although ASMs are easily used to describe complex hard- and software systems, they lack support for combining the specied systems. One of the obstacle is, that the global state is always present, and side-eects of one subsystem may inuence another subsystem in an uncontrolled way. Another problem is, that in each of the mentioned case studies, the composition of simple systems to more complex ones is done in an ad hoc way. Distributed ASMs 17]12] have addressed the problem of composing subsystems by introducing a number of independently running agents, that communicate via shared memory. There is a priori no locality of states and message passing can be simulated 16], but is not a primitive concept. Montages 24]2] provide a generic version of the composition mechanisms used in the above mentioned case studies in programming languages semantics. The method concentrates on a visual formalism for initializing control data ow links among the components. Locality is used but due to the underlying ASMs not guaranteed, and message passing is coded as control pointers that move along the links. In this paper, we propose a variant of ASMs accounting for locality and communication. The main idea is to make the object oriented avor of ASMs more explicit, having both state and behavior attached to objects, that communicate by message passing only. The resulting Object based ASMs (ObASMs) guarantee compositionality in the sense, that algorithms based on the local state of an object cannot be disturbed by other system-components, since only local updates of the state are allowed. On the other hand, ObASMs are general allowing to model the full range from tightly coupled to loosely coupled, distributed systems. The appropriateness of the object based message passing paradigm to the former is evidenced by the growing body of distributed software component models (at least partly) based on this approach, like e.g. CORBA, DCOM, or JavaBeans, while its suitability for the latter is shown in, for instance 8]. In the next section we give an introduction to ASMs, and the denition and semantics of ObASMs. Our denition allows to see the system both operationally using ASMs and denotationally as x-points of general transition-systems evaluated non-deterministically along a partial ordering following only the causality of messages. The latter, large grain view of our system allows the use of other formal methods. As example we give two class denitions modeling the distributed behavior of places and transitions in Petri-nets. ObASMs are thought to be integrated with existing hardware and software systems and used not only for specication and analysis but the entire system engineering process including prototyping and testing. The requirements for this integration are given in section 5. 2 Abstract State Machines The fundamental concept in ASMs is the object, which we consider an atomic entity. We call the set of all objects the universe U 1 . The state  of the system is given as the mapping of a number of function symbols, the signature  , to actual functions. For short we write f for the function interpreting the symbol f in state . We write S( ) for the set of all  {states. A state transition changes these functions pointwise, by so-called updates. An update is a triple (f (o1  : : :  on ) o0 ) where f is an n-ary function symbol in  , and o0  : : :  on 2 U. Intuitively, ring this update at a state  changes the function associated with f in  at the point (o1  : : :  on ) to the value o0 , leaving the rest of the function unchanged. In other words, given an update set  and a state , ring  at  results in the successor state  = (). We then have the following relation between f and the new functions f : 0 0 f (o1  : : :  on ) 7;! 0 ( o0 if (f (o1  : : :  on ) o0 ) 2  f (o1  : : :  on ) otherwise 0 (1) The update set for a given state is computed by the transition function. This function is the denotation of a rule, which is basically a syntactical object describing the updates to be performed in a given state. For instance, the rule f (2 x) := y would result in the update (f (2 6) 1) if x and y would be function symbols of arity 0 evaluating to the objects 6 and 1, respectively. The syntactical constructions allowed in rules and their denotations in terms of transition functions is given in the appendix. 3 Object-based Abstract State Machines An Object-based ASM (ObASM) describes the behavior of a system of objects that can be considered to have concurrent processing threads associated with them. Individual threads communicate via message passing. Computation is always initiated by an incoming message. 3.1 Terms and evaluation Each object x 2 U has an associated class  (x) from the set C of all classes in an ObASM. The class c of an object determines its behavior, given by transition functions, and its signature c. 1 In traditional ASM literature this set is called super-universe and sets are called universes. The vocabulary of the entire system is given as =  c (2) c C 2 Further an object x has associated with it its own local state (x) 2 S(c ). The global state is given as a function  mapping each object to its local state:  : U ;!  S(c) c C such that (x) 2 S( (x) ) (3) 2 In ObASM computation is always understood as processing of a message. A message consists of three parts, all of which are objects in U: its sender and receiver, and its content. These three objects are accessible with the constants snd, rcv , and cnt, respectively. Term evaluation is dened with respect to rcv , such that normal function applications are evaluated in the local state of rcv. In order to make the local state of other objects readable, the result x of a function application f (t1  : : :  tn ) may be used to evaluate a term g(t1  : : :  tm ) with respect to x in a so-called qualied term: 0 0 f (t1  : : :  tn ):g (t1  : : :  tm ) 0 0 This construction allows to access the local state associated with x in a readonly fashion. We will denote the evaluation of a term t w.r.t. the local state of an object x in state  by evalx . Then the evaluation of this term w.r.t. the object x is dened as follows, writing f(x) to denote the interpretation of function f in the f (t1  : : :  tn ) then local state of x. If T = evalx (T ) = fx (evalrcv (t1 ) : : :  evalrcv (tn )) In other words, evaluation with respect to an object x applies x's interpretation of f to the evaluation of the arguments w.t.r. rcv. Now we can dene the evaluation of a qualied term by evaluating the second term w.r.t. the result of the rst: t1 :t2 then If T = evalx (T ) = (let y = evalx (t1 ) in evaly (t2 )) While the rule computing the updates to be performed may depend on the global state2 , it may only alter the assignment (rcv), i.e. the local state of the object. In other words, terms can be evaluated with respect to other objects, but 2 In fact, at any given moment, it can depend only on a part of , viz. those objects and their state which are reachable from x in a xed number of steps given statically by the nesting of the terms in its rules. only functions in the signature of rcv may be updated. Thus updates can only have the form f (t1  : : :  tn ) := g1 (: : : ): : : : :gm(: : : ) In such a context, the equation (1) relates (rcv) with the local successor  (rcv) whereas the rest of the state remains unaltered. 0 As far as the rules are concerned, computing their denotation (i.e. the transition function the dene) is identical to the ASM case, except that we replace eval with evalrcv . If an object has to eect a state change in another object, the only way to do this is by passing it a message. A rule may produce an arbitrary number of messages, by using the send rule. The update-denotation of the send construct is the empty update set (cf. the appendix for a formal denition). 3.2 State transition Each class c has three transition functions associated with it: { The initialization function Ic describes the initialization behavior when an instance of the class is newly created, { The initial transition function Rc0 that denes the rst step in reaction of incoming messages. { The iterated transition function Rc that denes the subsequent iteration behavior3 In ObASMs, these transition functions, when applied to a state, do not only result in an update set, but they also produce a number of events that were sent. Correspondingly, rules do not only have an update-denotation (as in ASMs), but also a message-denotation. The formal denition of the message-denotation for the rules in our ObASM language is given in the appendix. In the system state at any given time, any number of messages may be pending, i.e. they have been sent but not yet received and acted upon. However, these messages do not form an unstructured set, because messages sent by the same object in consecutive steps are guaranteed to be processed in the order they were sent, i.e. the pending messages form a partial order (M <) (or M for short), where m1 < m2 i m1 has been sent by the same object strictly before m2 . Given such a system state S = ( M ), we compute a successor state as follows: If M is empty, there is no event to be processed, and the system terminates. Otherwise, M contains an m such that there is no earlier m , i.e. m < m. Of course, there may be several such elements, in which case one is chosen 0 3 0 Of course, there will be many primitive classes with no behavior attached to them (empty rules/transition functions), i.e. integers, booleans, etc. This may have farreaching consequences, both in terms of the theoretical analysis of such systems as well as their implementations. nondeterministically. Given m, let us call the sender, the receiver and the content sndm , rcvm , and cntm , respectively. Now the computation of the successor state S is computed iteratively, and the iteration is initialized by applying the initial transition function R0 (rcvm) to the current global state, resulting in a rst update set  and some new events M : 0 0 0 R0 (rcvm) () = (  M ) 0 0 and then ( x 6= rcvm 0 : x 7;! (x)  ((x)) x = rcvm M0 = M  M 0 0 The update set is applied to the local state of rcvm (the rest of the global state remains unchanged), while the new events are appended to the existing events M M M M in M . The result (M <)  (M  < ) is a new event structure (M  M  < ) such that for all m m 2 M  M we have 0 0 0 0 M M M 0  0 0 M 0 m < m () (m < m ) _ (m < m ) _ (m 2 M ^ m 2 M ^ sndm = sndm )  0 0 0 0 0 0 i.e. events that were ordered in either M or M remain ordered, and additionally events originating from the same object at dierent times are ordered accordingly.4 Now assume that for each iteration step, R (rcvm) (i ) = (i  Mi ). Then we dene 0 0 ( x 6= rcvm i+1 : x 7;! (x) i (i (x)) x = rcvm Mi+1 = Mi  Mi (4) (5) 0 This process is repeated until a xed point is reached, i.e. we have a k such that k+1 = k and Mk+1 = Mk . Then the successor state S of S can be written as follows, removing the event just processed from the event structure: 0 S = ( k  Mk n fmg) 0 (6) Of course, if such a xed point is not reached, the computation does not terminate. 4 ) sndm Note that the resulting order is transitive, because by construction of the event structures, m<m 0 = sndm 0. 4 An Example: Petri Nets In the following we will describe a formal distributed ObASM specication for loop-free Petri nets. Petri nets are a very general formal model, dierent avors of which have been successfully applied to the modeling and analysis of a broad range of distributed and concurrent systems 3, 7, 22, 23, 25, 27]. They can be given an operational semantics, but writing interpreters for them can be cumbersome, in particular when these interpreters should execute them in a distributed fashion 11, 10, 21, 28, 29]. The distributed execution suggested in the following example parallels the transition ring protocol in 29]. Basically, each transition and each place have a process associated with them, and they communicate with each other about the availability of tokens and their movement. w1 pre1 w1 0 . . . . . . pre wn n Fig. 1. post1 wm 0 post m A transition with pre- and postplaces The presented model consists of two classes, one for places (PLACE) and one for transitions (TRANSITION). In Fig. 4 a place is visualized as a circle and a transition as a bar. The places 1 n form the preset of the depicted transition, and the places 1 m form the postset. Pre- and postset are modeled by their characteristic functions, e.g. unary functions in the signature of TRANSITION, being set to true for each member. Members of the preset are called preplaces and member of the postset are called postplaces. Another unary function in the signature of TRANSITION denotes the weight of the arrow between the transition and its preplaces ( 1 n in Fig. 4) and postplaces ( 1 m in Fig. 4). This three functions and the instances of PLACE and TRANSITION form the static part of our ObASM model. The state of a Petri-net is given by the number of tokens at each place, here modeled by a variable (0-ary function) marking in the signature of PLACE. Given a marking a transition can re if all preplaces have at least as many tokens as the weight of their arrows. If the transition res, it subtracts ( ) tokens from each preplace , and it adds ( ) tokens to each postplace . Each transition tries to re, whenever its pre- and postset have enough tokens. Two transitions might compete for the same tokens (hold by a common preplace) and a kind of hand-shaking is thus needed. The unary dynamic function reserved pre  : : : pre pre  : : : pre w :::w 0 w :::w 0 weight pre pre post weight post is used to keep track how many tokens are reserved by a transition. The following three kinds of messages can be sent by a transition t to a place p: Request(n) requests n tokens from p. If there are more then n tokens, p answers with a Provide message and reserves the requested tokens, otherwise it answers with a Reject message. Release releases the tokens that have been reserved by t. Put(n) sends n tokens to p. In response to that message, p adds n to the number of tokens marking. The complete rule for PLACE is: class PLACE is Put(n): marking := marking + n Request(n): Release: if marking n then marking := marking ; n reserved(snd ) := n Provide ! snd else Reject ! snd endif marking := marking + reserved(snd ) To keep track of the hand{shaking a transition uses a unary relation (function with co-domain Boolean) asked to remember those preplaces from which it requested tokens, and it uses a unary relation providing to remember those preplaces that provide the requested tokens. The transition is ready to re again, if none of its preplaces is asked: ready , 8p : preset(p) : :asked(i) We assume to start in a state where all functions are initialized and where the event structure contains one Fire message sent to each transition. If a transition receives a Fire message, it checks whether it is ready and whether the preplaces have currently enough tokens. If not, it resends the Fire message to itself. Otherwise, it sends to all preplaces a Request message, and it sets asked to true for all preplaces. The variable state is set to trying. class TRANSITION is Fire: if (ready ^ 8p : preset(p) : marking(p) weight(p)) then do forall p : preset(p) asked(p) := true Request(weight(p)) ! p enddo trying := true else Fire ! rcv endif Once the system is in state trying, it waits for a Provide or Reject message from each preplace. The function providing is set to true for each preplace that sent a Provide message. If providing is true for all preplaces, the ring was successful, a Put message is sent to all postplaces, providing is reset, and the transition sends a Fire message to itself. In the case a Reject message arrives, the state is set to failed, and a Release message is sent to all providing preplaces. Please note, that at this stage the transition might not yet be ready. In the failed-state, incoming Rejects and Provides are answered by setting asked to false, incoming Provides are additionally answered by sending a Release message. If non of the preplaces is asked anymore, the transition is ready to re again. The rules are as follows: Provide: if state = trying then p : preset(p) : p = snd do forall p : postset(p) Put(weight(p)) p 8 if ! enddo _ providing(p) then p : preset(p) providing (p) := f alse asked(p) := f alse do forall Fire ! rcv enddo else providing (snd ) := true endif state = f ailed then asked(snd ) := f alse elseif Release ! snd endif Reject: if state = trying then state := f ailed do forall p : providing (p) providing (p) := f alse asked(p) := f alse Release p ! Fire ! rcv enddo else asked(snd ) := f alse endif 5 Integration in System Engineering As mentioned in the introduction ASMs have been used to model both hardware and software systems. The case studies show, that ASMs are an implementation independent formalism, that can account for the peculiarities of both hard and software. In 9] it is shown how to analyze such mixed systems and we believe that ASMs are well suited for hardware/software codesign. ObASMs support the design process by allowing to compose the heterogeneous components horizontally. Due to the locality of the components, veried vertical renements from abstract ASMs to more concrete ones can still be applied 5 . Having a formalism suited to specify complex systems on dierent abstraction levels, the integration in system engineering poses the following additional requirements 1. It must be very easy to generate prototypes, both for abstract and more concrete models. 2. The ObASM components must run together with existing, non specied hardware and software components. Prototyping a single object can be done by compiling to executable code 1], or rening to an ASM that corresponds to a simple hardware model, as for instance the RT-formalization in 26], corresponding essentially to a simple form of ASMs. For the communication with other components only the message passing mechanism and the read access must be implemented. The implementation must support all dierent kinds of subsystem-prototypes and the surrounding existing system components. One scenario that we implemented in a prototype is the integration of ObASMs in a component software system, in our case JavaBeans, where subsystems can be written in a traditional programming language (Java), rather then specied with ASMs. In our prototype each ObASM class is translated into a Java class, making components specied as ObASMs and directly implemented software components completely interchangeable. Based on this integration, sophisticated test scenarios are possible, that can be applied whenever verication or model checking fail. One possibility is to have for critical software components both the ObASM specication and an implementation. The reliable, but slow formal model, could be run in parallel with the implementation until one has gained condence in the implementation. 6 Future Work In Aslan 1] the long present concept of hierarchical ASMs is implemented and used to structure single ASMs. Hierarchical ASMs allow to call other ASMs, which corresponds to synchronous message passing, in contrast to asynchronous message passing in ObASMs. Although synchronous message passing can be simulated with asynchronous, and vice versa, an integration of both may be useful. Another point is the introduction of object orientedness in ASMs. While Aslan proposes a simple, pure syntactical method mapping everything to the 5 See 4] for veri ed re nements from Occam code to Transputer code, and 6] for veri ed hardware re nements of RISC architectures. global state, the use of ObASMs may lead to a more natural model, accounting for distributed loading and linking of classes as well as for garbage collection. We mentioned Montages 24]2], a framework allowing to give semantics to a program by generating its control-/data-ow graph and giving the dynamic semantics of the single nodes by ASM-rules. As in ObASM, the nodes have a type, e.g. the syntactical category, a local state and a behavior. To use ObASM to formalize control ow in Montages might be convenient and fruitful, especially in the case of languages with distributed control ow. On the other hand, Montages might be useful to dene control-/data-ow structures for ObASMs in a generic way. Acknowledgments We would like to thank Matthias Anlau, Yuri Gurevich, and last but not least Alfonso Pierantonio for the long and insightful discussions about ASMs, Montages, and Aslan. Appendix: Denotational Semantics Semantics of ASM rules The formal semantics of a rule R in a state  is given by a deterministic denotation Upd(R, ) being a set of updates 15]. The interpretation of f in the successor state  is dened as follows: Update sets are dened by transition rules. The basic update denotes one update of a function at some point. The new values and the point are given by terms over the signature. Rules can be composed in a parallel fashion, such that all updates are executed at once. Conditional execution of a rule res only in certain cases. The do-forall rule allows to re the same rule for all objects satisfying some condition. Finally the extend-rule allows to introduce reserveobjects, that have not been used before. The last rule is typically used to create new objects of some class. Formally, a transition rule R is built up recursively by the following constructions. The corresponding denotations are given. Let eval be the usual term evaluation over the state . f (t1  : : :  tn ) := t0 (Upd 1: basic update) if R = where t0  : : :  tn are terms over  , then Upd (R ) = f(f (eval (t1 ) : : :  eval (tn )) eval (t0 ))g 0 (Upd 2: parallel composition) if R = S Upd (R ) = i 1::: m Upd (Ri  ) then 2f (Upd 3: conditional rules) if R = then R 1 : : : Rm Upd (R ) = ( g if t then Rtrue else Rfalse endif Upd (Rtrue  ) if eval (t) = true Upd (Rfalse  ) otherwise (Upd 4: do forall) if R = then do forall e : t R 0 enddo Upd (R ) = So:eval e7!o (t) Upd (R   e 7! o) ( ) extend E with e (Upd 5: extend) if R = R 0 endextend then Upd (R ) = Upd (R   e 7! o), where o is a completely new allocated element 6 . Additional Semantics for ObASM ObASMs dene another atomic rule that sends a message to an object. This rule results in no updates: !t Upd (R ) = fg (Upd 0: send) if R = t1 then 2 The other denitions of Upd remain the same, except that for each x evalx must be replaced with evalxrcv and that in Upd 4 and 5 the extension   e 7! o on the right-hand-side must be replaced by e o , (rcv )=((rcv ) 7!  e 7! o)] The message denotation Mes (R ) denes a set of message triples (sender, receiver, content) as follows: ! tnewrcv Mes (R ) = f(rcv evalrcv (tnewrcv ) evalrcv (tnewcnt))g (Mes 0: send) if R = then tnewcnt (Mes 1: basic update) if R = f (t1  : : :  tn ) := t0 Mes (R ) = fg then (Mes 2: parallel composition) if R = then (Mes 3: conditional rules) if R = then 6 ( Mes (R ) = Si R 1 : : : Rm 1::: mg 2f Mes (Ri  ) if t then Rtrue else Rfalse endif (Rtrue  ) Mes (R ) = Mes Mes (Rfalse  ) See 15] for a formalization of \completely new" if evalrcv (t) = true otherwise (Mes 4: do forall) if R = then (Mes 5: extend) Mes(R ) = if R = S do forall e:t R o:evale7!o rcv (t) extend E with e R 0 enddo Mes (R e o) 7! 0 endextend then Mes(R ) = Mes (R e o ), where o is a completely new allocated element, whose type is set to the class E. Using Upd and Mes, the denotation Den(R) of any rule R can be seen as a mapping from global states to pairs of update sets and message structures: 7! Den(R) :  7! (Upd (R)() Mes (R)()) References 1. M. Anlau. Aslan - programming in abstract state machines. A small stand{alone ASM interpreter written in C, ftp://ftp. rst.gmd.de/pub/gemmex/Aslan. 2. M. Anlau, P.W. Kutter, and A. Pierantonio. The montages project web page, 1998. http://www.tik.ee.ethz.ch/montages. 3. Bernard Berthomieu and Michel Diaz. Modeling and veri cation of time dependent systems using time Petri nets. IEEE Transactions on Software Engineering, 17(3):259{273, March 1991. 4. E. Borger and I. Durdanovic. Correctness of compiling Occam to Transputer code. Computer Journal, 39(1):52{92, 1996. 5. E. Borger and J. Huggins. Abstract state machines 1988 { 1998: Commented asm bibliography. In H. Ehrig, editor, EATCS Bulletin, Formal Specication Column, number 64, pages 105 { 127. EATCS, February 1998. 6. W. Borger and S. Mazzanti. A practical method for rigorously controllable hardware design. In J.P. Bowen, M.G. Hinchey, and D. Till, editors, ZUM'97: The Z Formal Speication Notation, number 1212 in LNCS, 1997. 7. Giacomo Bucci and Enrico Vicario. Compositional validation of time-critical systems using communicating time Petri nets. IEEE Transactions on Software Engineering, 21(12):969{992, December 1995. 8. R.S. Chin and S.T. Chanson. Distributed object based programming systems. ACM Computing Surveys, 23(1):91 { 124, March 1991. 9. G. Del Castillo and Wolfram Hardt. Fast dynamic analysis of complex hw/swsystems based on abstract state machine models. In Sixth International Workshop on Hardware/Software Codesign. IEEE, 1998. 10. Alois Ferscha. Concurrent execution of timed Petri nets. In Proceedings of the 1994 Winter Simulation Conference, pages 229{236, 1994. 11. Alois Ferscha and G. Haring. Forschungsauftrag: ACPC - Parallele PetrinetzSimulation (Endbericht). Technical report, University of Vienna, 1992. (text in English). 12. P. Glavan and D. Rosenzweig. Communicating evolving algebras. In Selected papers from CSL'92 (Computer Science Logic), number 702 in LNCS, pages 182 { 215. Springer, 1993. 13. Y. Gurevich. Logic and the chanllenge of computer science. In E. Borger, editor, Thrends in Theoretical Computer Science, pages 1 { 57. Computer Science Press, 1988. 14. Y. Gurevich. Evolving algebras 1993: Lipari guide. In E. Borger, editor, Specication and Validation Methods, pages 9 { 36. Oxford University Press, 1995. 15. Y. Gurevich. May 1997 draft of the asm guide. Technical Report CSE-TR-336-97, University of Michigan EECS Department Technical Report, 1997. 16. Y. Gurevich and R. Mani. Group membership protocol: Speci cation and veri cation. In E. Borger, editor, Specication and Validation Methods, pages 295 { 328. Oxford University Press, 1995. 17. Y. Gurevich and L.S. Moss. Algebraic operational semantics and occam. In CSL'89, 3rd Workshop on Computer Science Logic, number 440 in LNCS, pages 176 { 192. Springer, 1990. 18. A. Hall. Taking z seriously. In J.P. Bowen, M.G. Hinchey, and D. Till, editors, ZUM'97: The Z Formal Speication Notation, number 1212 in LNCS, 1997. 19. M. Hinchey and J. Bowen. Applications of Formal Methods. Prentice-Hall, 1995. 20. J. Huggins. Abstract State Machines Web Page. 21. Jorn W. Janneck. Behavioral prediction of time Petri nets with applications to distributed simulation. In Proceedings of the HPC '98, 1998. 22. Jorn W. Janneck and Martin Naedele. Modeling a die bonder with petri nets: A case study. IEEE Transactions on Semiconductor Manufacturing, August 1998. 23. Kurt Jensen. Coloured Petri Nets: Basic Concepts, Analysis Methods and Practical Use, volume 1: Basic Concepts, of EATCS Monographs in Computer Science. Springer-Verlag, 1992. 24. P.W. Kutter and A. Pierantonio. Montages: Speci cations of realistic programming languages. JUCS, 3(5):416 { 442, 1997. 25. Charles A. Lakos. From coloured Petri nets to object Petri nets. In Proceedings of the 15th International Conference on Applications and Theory of Petri Nets, Lecture Notes of Computer Science, 1995. 26. R. Leupers. Retargetable Code Generation for Digital Signal Processors. Kluwer Academic Publishers, 1997. 27. Tadao Murata. Petri nets: Properties, analysis, and applications. Proceedings of the IEEE, 77(4):541{580, April 1989. 28. David M. Nicol and S. Roy. Parallel simulation of timed Petri nets. In Proceeding of the 1991 Winter Simulation Conference, pages 574{583, December 1991. 29. Gregory Scott Thomas. Parallel simulation of Petri nets. Master's thesis, University of Washington, 1991.