## 1 Introduction  
The Coloured Petri Net (CPN) is an object-oriented graphical language, which is used to construct system models and to analyze their properties and entities [1, 2, 3]. It enhances the basic capabilities of the traditional Petri net formalism by adding high-level programming language features. These features include the definition of data types, objects and classes of objects, methods for describing object behavior, rules for setting the timing of events that incur within a system, and tools for data manipulation. As a result, the CPN formalism can be used for a wide variety of systems and, in fact, it is a general purpose modeling system. Application examples include communication networks, distributed systems, business processes, manufacturing systems, and workflow systems. The main structuring elements of the basic Petri net (PN) formalism are the places, the tokens, and the transitions. The _places_ are represented by circles and they define a state (or condition) at which a system may be. A set of \(N\) places defines \(N\) different states that may exist within the system. The places are the containers of _tokens_. A token is a dynamic element that can model an object or a set of objects. Tokens are transferred among places. The presence of one or more tokens in one place indicates that the condition which this place defines is true. Apparently, the absence of tokens in one place means that the corresponding condition is false. A _transition_ represents an event that, whenever triggered, may change the system's state, that is, the system may transition from one state to another. Transitions are represented by black rectangles. Generally, we use the verb \"fire\" to indicate that an event has occurred. In order for a transition to fire, all its conditions must be satisfied. In this case, we say that the transition is \"enabled\". The CPN formalism has the same structuring elements as the PN formalism, so it is defined in much the same way. However, the basic structuring elements include some extensions, which are discussed in the beginning of Section 4. The CPN formalism has been developed to resolve three very important issues of PN, which are described separately below [1,3]:  
1. In a typical PN, all the tokens have the same meaning:  
The typical PN formalism does not distinguish between the tokens. Instead, all the tokens are the same and they are simply used to represent a system's state. In other words, simple Petri nets use the tokens as black boxes and their existence in a place simply shows if the system has reached a specific state, which is described by the place. When a token reaches a terminal place (a place that can trigger no further events), it simply vanishes or is kept in this place, without holding any important information regarding the events of the system. The only thing that we know is that, at some moment in time, this token enabled the firing of certain transitions. However, in almost every system, its entities have attributes with different values (these values are referred to as _colors_ in CPNs). These values are crucial for a researcher to study the entire system. For a researcher who is interested in exploring the attribute values of an entity (for example, the utilization of system resources described by the percentage of time they are used), the typical PN formalism is improper. In the CPN formalism, each token carries a value. Such values may include names, service times, resource types, job ids, job priorities, speed, delay values, and other information which can be useful to study the entire system at any time. 2. The typical PN formalism is not concerned with the actual timing of the events that can change the system's state, but only for their sequence. The majority of the real-world systems are described by events which occur at a certain time. In a CPN, the transitions are not timeless (as in a PN) but timed. The provision of time gives the modeler the opportunity to describe precisely the temporal details of a system.