<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>The Petri Net API</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Niels Lohmann</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Stephan Mennicke</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Christian Sura</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Universitat Rostock, Institut fur Informatik</institution>
          ,
          <addr-line>18051 Rostock</addr-line>
          ,
          <country country="DE">Germany</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>This paper introduces the Petri Net API, a C++ library of Petri net-related functions. The Petri Net API is currently used in more than a dozen Petri net tools, ranging from compilers to veri cation tools.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>
        Algorithms to reason about the correctness of distributed systems usually have
devastating worst-case complexities. Nevertheless, experiences in the eld of
model checking show that the feared state space explosion can be alleviated by
state space reduction techniques or symbolic representations [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]. Therefore, novel
techniques to verify correctness often require a proof-of-concept implementation
to conduct experiments or to demonstrate feasibility on realistic input data.
We recently investigated the academic software development process [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] and
claimed that single purpose tools have the right granularity to be implemented
using rapid prototyping techniques. A prerequisite for this is the encapsulation of
frequently recurring functionality into reusable libraries to avoid an unnecessary
\reinvention of the wheel" and to minimize the amount of untested ad-hoc code.
      </p>
      <p>
        This paper introduces with the Petri Net API such a reusable library. It was
originally derived from the back-end of the compiler BPEL2oWFN [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] and o ered
simple net management functionality and the le output in several formats. In
the last years, the functions of the Petri Net API have been revised and collected
into a consistent C++ library. The main focus of the API is to organize Petri nets,
rather than to implement veri cation algorithms (i.e., to build and analyze state
spaces) or to provide a graphical front-end. We claim that these tasks should be
part of a dedicated tool rather than a library that is designed to be shared by
several tools. As of September 2010, the Petri Net API is used by 14 tools, see
http://service-technology.org/tools for an overview.
      </p>
      <p>The rest of this paper is organized as follows. The next section presents the
features that are implemented by the Petri Net API. Then Sect. 3 shows how
the Petri Net API can be used in novel tools, discusses its availability, and the
integration in third-party tools. Section 4 presents a small case study in which
the Petri Net API is used to perform some structural modi cations to check a
correctness notion for work ow nets. Section 5 brie y compares the Petri Net API
to existing frameworks, before Sect. 6 concludes the paper.</p>
    </sec>
    <sec id="sec-2">
      <title>Features</title>
      <p>
        The Petri Net API implements the following features to organize Petri nets.
{ Petri net creation and manipulation (creation, modi cation, deletion, copying,
and search of nodes and arcs),
{ le import and export of Petri nets in various le formats (PNML [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], LoLA [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ]
le format, Fiona [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ] open net format, Wo an [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ] work ow nets),
{ generation of graphical representation using Graphviz dot,
{ e cient application of structural reduction rules [
        <xref ref-type="bibr" rid="ref17 ref18 ref19">17,19,18</xref>
        ],
{ structural checks (e.g., work ow net structure, free-choice property),
{ import from automata (using the region theory tools Petrify [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] or Genet [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]),
{ export to automata,
{ support for open nets [
        <xref ref-type="bibr" rid="ref23">23</xref>
        ] (ports, net composition)
{ organization of nal markings, and
{ support for role annotations.
      </p>
      <p>The Petri Net API can be easily extended to new features. As of now, we only
moved features from a tool into the Petri Net API when this feature is used by
at least one other tool. This avoids a cluttered API full of too speci c functions.
At the same time, it ensures a high test case coverage of the features.
3</p>
    </sec>
    <sec id="sec-3">
      <title>Usage</title>
      <p>
        Integration as C++ library. The API itself is written in C++ and can be
integrated into other tools with no more e ort than including a header le.
Listing 1.1 shows example code to read a le in PNML format, structurally reduce
it using the Murata rules [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ], and output a graphical representation.
      </p>
      <p>Listing 1.1. Example using the Petri Net API as C++ library.
# include &lt; pnapi / pnapi .h &gt;
using namespace pnapi ;
int main () {
// read PNML net from file
std :: istream in (" file . pnml " , std :: ios_base :: in );
in &gt;&gt; io :: pnml &gt;&gt; net ;
// apply reduction rules
net . reduce ( PetriNet :: SET_MURATA );
// output the Petri net in Graphviz dot format
std :: cout &lt;&lt; io :: dot &lt;&lt; net ;
}
return 0;</p>
      <p>The Petri Net API complies with the 1998 ANSI/ISO C++ standard and
can be compiled on many platforms, including Microsoft Windows, Sun Solaris,
GNU/Linux, Mac OS X, and other UNIX-based operating systems.
Command-line tool. Beside the direct integration, we implemented a
commandline tool petri (part of the Petri Net API distribution) for the most common
operations. The call</p>
      <p>petri *. pnml --input = pnml --reduce = murata --output =png
performs a similar transformation as the code in Listing 1.1, but is also able to
read multiple les and to directly create graphics les. This front-end tool is very
useful in shell scripts to process large libraries of nets.</p>
      <p>
        Integration into third-party tools. The Petri Net API is currently indirectly
(as front-end tool or library) integrated into the business process modeling tool
Oryx [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], the process mining toolkit ProM [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ], and the YAWL work ow editor [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ].
In all tools, the Petri Net API organizes the exchange of Petri Net models in
PNML format.
3.1
      </p>
      <p>Availability
The Petri Net API is free open source software, licensed under the GNU LGPL 3.1
The most recent version together with its manual can be downloaded at
http://service-technology.org/pnapi.
4</p>
    </sec>
    <sec id="sec-4">
      <title>Case study: Checking relaxed soundness</title>
      <p>
        To demonstrate the usage of the Petri net API in a realistic setting, we discuss a
small case study in this section. We show how relaxed soundness [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ], a correctness
property of work ow nets [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ], can be translated into a series of reachability
problems that can be checked by LoLA [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ].
      </p>
      <p>
        Relaxed soundness requires for every transition of the work ow net to occur
in at least one successful ring sequence from the initial marking [i] to the nal
marking [o]. Dehnert and Aalst [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] provided a veri cation algorithm for this
property in which builds the state space of the work ow net and then analyzes
its runs. This algorithm is implemented in the tool Wo an [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ]. It is, however,
not clear whether state space reduction techniques are applicable.
      </p>
      <p>Alternatively, we can reformulate the above requirement in a reachability
problem as follows. Given a work ow net N and a transition t of N , we can
construct a Petri net Nt which only reaches a nal marking i N reaches a nal
marking by a transition sequence which includes t. We create Nt by adding to
N a transition t0 and two places p1 and p2. Figure 1 illustrates the construction.
Thereby, p1 is marked as long t has not yet red, and p2 is marked after t has
red at least once. We then can check wether the marking [o; p2] is reachable
from the initial marking [i; p1]. If this check succeeds for all nets Nt, we can
conclude relaxed soundness of N .
1 GNU Lesser General Public License, http://www.gnu.org/licenses/lgpl.html
t
p1
p2
t
t
(a) subnet of N</p>
      <p>(b) subnet of Nt
# include &lt; pnapi / pnapi .h &gt;
using namespace pnapi ;
void constructAnalysisNets ( PetriNet &amp;N) {
// iterate transitions
PNAPI_FOREACH ( trans , N. getTransitions () ) {
// create copy of the net
PetriNet Nt (N);
// create analysis subnet for current transition ( see Fig . 1)
Place &amp; p1 = Nt . createPlace () ;
Place &amp; p2 = Nt . createPlace () ;
Transition *t = Nt . findTransition ((* trans ) -&gt; getName () );
Transition &amp; tprime = Nt . createTransition () ;
// connect analysis subnet
PNAPI_FOREACH (p , t -&gt; getPreset () ) {</p>
      <p>Nt . createArc (**p , tprime );
}
PNAPI_FOREACH (p , t -&gt; getPostset () ) {</p>
      <p>Nt . createArc ( tprime , ** p);
}
p1 . setTokenCount (1) ;
Nt . createArc (p1 , *t);
Nt . createArc (*t , p2 );
Nt . createArc (p2 , tprime );</p>
      <p>Nt . createArc ( tprime , p2 );
}
}
// write nets into LoLA files
std :: ofstream o;
o. open (" N_ " + (* trans ) -&gt; getName () + ". lola " , std :: ios_base :: trunc );
o &lt;&lt; pnapi :: io :: lola &lt;&lt; Nt &lt;&lt; std :: endl ;
o &lt;&lt; " FORMULA (" &lt;&lt; pnapi :: io :: lola &lt;&lt; Nt . getFinalCondition ()</p>
      <p>&lt;&lt; " AND " &lt;&lt; p2 . getName () &lt;&lt; " = 1 )" &lt;&lt; std :: endl ;</p>
      <p>Listing 1.2 shows a function implementing this construction. It assumes a
Petri net N is given and writes, for each transition t of N , a Petri net Nt in
LoLA le format together with a formula expressing the nal marking to disk.</p>
      <p>
        The implementation is straightforward and is | due the encapsulation of the
Petri net functions | nearly on a pseudocode level. The Petri net model checker
LoLA can read these generated les and check whether the included formula can
be satis ed by a reachable marking. The described transformation and check is
implemented as service-oriented extension of the business process editor Oryx [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ].
5
      </p>
    </sec>
    <sec id="sec-5">
      <title>Related work</title>
      <p>
        The idea to collect Petri net-related functions in a library or toolbox is not
new (see [
        <xref ref-type="bibr" rid="ref16 ref4">16,4</xref>
        ] and the Petri Net World Website2 listing hundreds of tools). We
discuss two prominent examples.
      </p>
      <p>
        The Petri Net Kernel [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] was designed as a modular kernel that is designed
to integrate Petri net algorithms. Petri net types are not xed, but can be
freely de ned and extended. Similarly, the PNML framework [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] is a reference
implementation of the PNML standard. It is designed to facilitate import and
export of PNML standard compliant les and provides a complex meta model to
support di erent kinds of Petri nets. Again, its focus lies on exibility.
      </p>
      <p>In contrast, the Petri net API has a xed feature set and new features are only
added when they are also used by other tools. Furthermore, it was not originally
designed as a generic Petri net framework, but was created by \outsourcing"
Petri net-related code from actual tools. Finally, it is implemented in C++ due to
performance considerations.
6</p>
    </sec>
    <sec id="sec-6">
      <title>Conclusion</title>
      <p>
        This paper introduced the Petri Net API, a library of Petri net-related functions.
We observed that the Petri Net API greatly simpli ed rapid prototyping. The
encapsulation of Petri net-related functions lead to smaller tools which could
focus on their main functionality; see [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] for a discussion. After four years of
development and a consolidated feature set, we claim that this API is useful to
other researchers in the Petri net community. The main advantage of the Petri
Net API is that its implemented functions are heavily used for several years and
thus has a well-tested and justi ed feature set.
      </p>
      <p>Acknowledgments. The authors thank Christian Gierds, Dennis Reinert, Georg
Straube, Robert Waltemath, and Martin Znamirowski for their work on earlier
versions of the Petri Net API.
2 http://www.informatik.uni-hamburg.de/TGI/PetriNets/tools/</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Aalst</surname>
            ,
            <given-names>W.M.P.</given-names>
          </string-name>
          v.d.:
          <article-title>The application of Petri nets to work ow management</article-title>
          .
          <source>Journal of Circuits, Systems and Computers</source>
          <volume>8</volume>
          (
          <issue>1</issue>
          ),
          <volume>21</volume>
          {
          <fpage>66</fpage>
          (
          <year>1998</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Aalst</surname>
            ,
            <given-names>W.M.P.</given-names>
          </string-name>
          v.d.,
          <string-name>
            <surname>Hofstede</surname>
            ,
            <given-names>A.H.M.</given-names>
          </string-name>
          <year>t</year>
          .:
          <article-title>YAWL: yet another work ow language</article-title>
          .
          <source>Inf. Syst</source>
          .
          <volume>30</volume>
          (
          <issue>4</issue>
          ),
          <volume>245</volume>
          {
          <fpage>275</fpage>
          (
          <year>2005</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Carmona</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Cortadella</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kishinevsky</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Genet: a tool for the synthesis and mining of Petri nets</article-title>
          .
          <source>In: ACSD 2009</source>
          . pp.
          <volume>181</volume>
          {
          <fpage>185</fpage>
          .
          <string-name>
            <surname>IEEE</surname>
          </string-name>
          (
          <year>2009</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Chouikha</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Fay</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Schnieder</surname>
          </string-name>
          , E.:
          <article-title>Konzept eines Frame- works fur PetrinetzEditoren</article-title>
          .
          <source>In: AWPN 1998</source>
          . pp.
          <volume>32</volume>
          {
          <fpage>37</fpage>
          . No. 694 in Research Reports, Universitat Dortmund, Fachbereich
          <string-name>
            <surname>Informatik</surname>
          </string-name>
          (
          <year>1998</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Clarke</surname>
            ,
            <given-names>E.M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Grumberg</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Peled</surname>
            ,
            <given-names>D.A.</given-names>
          </string-name>
          :
          <article-title>Model Checking</article-title>
          . MIT Press (
          <year>1999</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Cortadella</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kishinevsky</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kondratyev</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lavagno</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Yakovlev</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Petrify: A tool for manipulating concurrent speci cations and synthesis of asynchronous controllers</article-title>
          .
          <source>Trans. Inf. and Syst. E80-D(3)</source>
          ,
          <volume>315</volume>
          {
          <fpage>325</fpage>
          (
          <year>1997</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Decker</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Overdick</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Weske</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Oryx - an open modeling platform for the bpm community</article-title>
          .
          <source>In: BPM 2008</source>
          . pp.
          <volume>382</volume>
          {
          <fpage>385</fpage>
          . LNCS 5240, Springer (
          <year>2008</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Dehnert</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Aalst</surname>
            ,
            <given-names>W.M.P.</given-names>
          </string-name>
          v.d.:
          <article-title>Bridging the gap between business models and work ow speci cations</article-title>
          .
          <source>Int. J. Cooperative Inf. Syst</source>
          .
          <volume>13</volume>
          (
          <issue>3</issue>
          ),
          <volume>289</volume>
          {
          <fpage>332</fpage>
          (
          <year>2004</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Hillah</surname>
            ,
            <given-names>L.M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kindler</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kordon</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Petrucci</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Treves</surname>
          </string-name>
          , N.:
          <article-title>A primer on the Petri Net Markup Language and ISO/IEC 15909-2</article-title>
          .
          <source>Petri Net Newsletter</source>
          <volume>76</volume>
          ,
          <issue>9</issue>
          {
          <fpage>28</fpage>
          (
          <year>2009</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Hillah</surname>
            ,
            <given-names>L.M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kordon</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Petrucci</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Treves</surname>
          </string-name>
          , N.:
          <article-title>PNML framework: An extendable reference implementation of the Petri Net Markup Language</article-title>
          .
          <source>In: PETRI NETS</source>
          <year>2010</year>
          . pp.
          <volume>318</volume>
          {
          <fpage>327</fpage>
          . LNCS 6128, Springer (
          <year>2010</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Kindler</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Weber</surname>
            ,
            <given-names>M.:</given-names>
          </string-name>
          <article-title>The Petri Net Kernel - an infrastructure for building Petri net tools</article-title>
          .
          <source>STTT</source>
          <volume>3</volume>
          (
          <issue>4</issue>
          ),
          <volume>486</volume>
          {
          <fpage>497</fpage>
          (
          <year>2001</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Lohmann</surname>
          </string-name>
          , N.:
          <article-title>A feature-complete Petri net semantics for WS-BPEL 2.0 and its compiler BPEL2oWFN</article-title>
          .
          <source>Informatik-Berichte</source>
          <volume>212</volume>
          , Humboldt-Universitat zu Berlin, Berlin, Germany (
          <year>2007</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Lohmann</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Weinberg</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          :
          <article-title>Wendy: A tool to synthesize partners for services</article-title>
          .
          <source>In: PETRI NETS</source>
          <year>2010</year>
          . pp.
          <volume>297</volume>
          {
          <fpage>307</fpage>
          . LNCS 6128, Springer (
          <year>2010</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Lohmann</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wolf</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          :
          <article-title>How to implement a theory of correctness in the area of business processes and services</article-title>
          .
          <source>In: BPM 2010</source>
          . pp.
          <volume>61</volume>
          {
          <fpage>77</fpage>
          . LNCS 6336, Springer (
          <year>2010</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>Massuthe</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Weinberg</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          :
          <article-title>Fiona: A tool to analyze interacting open nets</article-title>
          .
          <source>In: AWPN 2008</source>
          . pp.
          <volume>99</volume>
          {
          <fpage>104</fpage>
          . CEUR Workshop Proceedings Vol.
          <volume>380</volume>
          ,
          <string-name>
            <surname>CEUR-WS.org</surname>
          </string-name>
          (
          <year>2008</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <surname>Menzel</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          :
          <article-title>Entwurf und Implementierung eines objektorientierten Frameworks zur Petrinetzbasierten Modellierung</article-title>
          .
          <source>In: AWPN 1997</source>
          . pp.
          <volume>25</volume>
          {
          <fpage>30</fpage>
          . No. 85 in InformatikBerichte, Humboldt-Universitat zu Berlin, Institut fur Informatik (
          <year>1997</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <surname>Murata</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          :
          <article-title>Petri nets: Properties, analysis and applications</article-title>
          .
          <source>Proceedings of the IEEE</source>
          <volume>77</volume>
          (
          <issue>4</issue>
          ),
          <volume>541</volume>
          {
          <fpage>580</fpage>
          (
          <year>1989</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <surname>Pillat</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          :
          <article-title>Gegenuberstellung struktureller Reduktionstechniken fur Petrinetze</article-title>
          . Diplomarbeit, Humboldt-Universitat zu Berlin (
          <year>2008</year>
          ), (in German)
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19.
          <string-name>
            <surname>Starke</surname>
            ,
            <given-names>P.H.</given-names>
          </string-name>
          :
          <article-title>Analyse von Petri-Netz-Modellen</article-title>
          . Teubner Verlag (
          <year>1990</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          20.
          <string-name>
            <surname>Verbeek</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Buijs</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Dongen</surname>
            ,
            <given-names>B.v.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Aalst</surname>
            ,
            <given-names>W.M.P.</given-names>
          </string-name>
          v.d.:
          <article-title>Prom 6: The process mining toolkit</article-title>
          .
          <source>In: BPM 2010 Demos. CEUR Workshop</source>
          Proceedings Vol.
          <volume>615</volume>
          ,
          <string-name>
            <surname>CEUR-WS.org</surname>
          </string-name>
          (
          <year>2010</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          21.
          <string-name>
            <surname>Verbeek</surname>
            ,
            <given-names>H.M.W.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Basten</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Aalst</surname>
            ,
            <given-names>W.M.P.</given-names>
          </string-name>
          v.d.:
          <article-title>Diagnosing work ow processes using Wo an</article-title>
          .
          <source>Comput. J</source>
          .
          <volume>44</volume>
          (
          <issue>4</issue>
          ),
          <volume>246</volume>
          {
          <fpage>279</fpage>
          (
          <year>2001</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          22.
          <string-name>
            <surname>Wolf</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          :
          <article-title>Generating Petri net state spaces</article-title>
          .
          <source>In: ICATPN 2007</source>
          . pp.
          <volume>29</volume>
          {
          <fpage>42</fpage>
          . LNCS 4546, Springer (
          <year>2007</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          23.
          <string-name>
            <surname>Wolf</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          :
          <article-title>Does my service have partners?</article-title>
          <source>LNCS T. Petri Nets and Other Models of Concurrency</source>
          <volume>5460</volume>
          (
          <issue>2</issue>
          ),
          <volume>152</volume>
          {
          <fpage>171</fpage>
          (
          <year>2009</year>
          )
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>