<!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>Portfolio Management in Explicit Model Checking</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Karsten Wolf</string-name>
          <email>karsten.wolf@uni.rostock.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Universitat Rostock Institut fur Informatik</institution>
        </aff>
      </contrib-group>
      <fpage>10</fpage>
      <lpage>28</lpage>
      <abstract>
        <p>Thanks to a rich Petri net theory, there exists a broad range of veri cation techniques for Petri nets. Most of them have a performance that highly depends on the particular combination of net and property. That is why several veri cation tools for Petri nets use portfolio approaches where various veri cation algorithms are run concurrently. In this note, we sketch the architecture of a portfolio manager, using the tool LoLA 2.0 as a running example. The portfolio of a veri cation problem is organized as a task tree. The leafs of the task tree are actual veri cation algorithms while the inner nodes represent the logical structure of the portfolio. The portfolio manager schedules veri cation algorithms and assigns resources to them (processor cores, memory, and time). Moreover, it evaluates the consequences of returned results with regard to the original veri cation problem.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>Karsten Wolf</p>
    </sec>
    <sec id="sec-2">
      <title>Introduction</title>
      <p>
        There exist several approaches for veri cation, ranging from explicit model
checking [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] via BDD based model checking [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] to SAT based model checking [
        <xref ref-type="bibr" rid="ref23">23</xref>
        ]. For
Petri nets, the variety of methods is larger than elsewhere since we can also use
unfoldings [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] and the whole bandwidth of Petri net structure theory.
      </p>
      <p>
        The veri cation methods have in common that their performance on a
particular model is almost unpredictable. Most methods have an unpleasant
worstcase complexity ranging somewhere between NP-completeness and
EXPSPACEcompleteness [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ]. Reduction techniques such as the stubborn set method [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ]
and the symmetry method [
        <xref ref-type="bibr" rid="ref14 ref8">8, 14</xref>
        ] try to alleviate that complexity but their
success again depends on the shape of the model and the property. For end users
with limited expertise in Petri net theory, it is di cult to choose the most
promising methods for their particular problem instance.
      </p>
      <p>
        That is why several contemporary tools such as Tapaal [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ], ITS-Tools [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ],
or LoLA [
        <xref ref-type="bibr" rid="ref26">26</xref>
        ] use portfolio approaches. That is, several promising algorithms are
launched (sequentially or concurrently) until one of them delivers an answer to
the original veri cation problem.
      </p>
      <p>Copyright c 2020 for this paper by its authors. Use permitted under Creative
Commons License Attribution 4.0 International (CC BY 4.0).</p>
      <p>In this paper, we shall discuss the architecture of a portfolio manager, the
component of a Petri net veri cation tool that takes care of organizing a portfolio
of veri cation algorithms. We use the portfolio manager of LoLA as a reference.
However, we expect the central statements of the paper to be universal.</p>
      <p>A portfolio manager has two main duties. First, it has to record the results
of the launched veri cation algorithms and to trigger consequences for the
remaining algorithms. Second, it has to schedule the resources (available processor
cores and memory as well as available run time) to the running algorithms.</p>
      <p>We shall rst discuss typical ingredients of a portfolio (Section 2). We then
encapsulate veri cation algorithms in tasks, the main object to be treated by
the portfolio manager (Section 3). Section 4 reveals the lifecycle of a task.
Subsequently, we introduce task trees for representing the logical dependencies
between the portfolio members (Section 5). Finally, we discuss the scheduling of
tasks (Sections 6 and 7).
2</p>
    </sec>
    <sec id="sec-3">
      <title>Constituents of a Portfolio</title>
      <p>In this section, we give examples of veri cation algorithms that may serve as
constituents of a veri cation portfolio.</p>
      <p>
        Search algorithms Most veri cation problems can be solved by a traversal of the
state space or the product of the state space and an automaton representing
the veri cation problem. For reachability queries, a simple depth- rst traversal
of the state space is su cient. For model checking CTL formulas [
        <xref ref-type="bibr" rid="ref22 ref4">4, 22</xref>
        ] or LTL
formulas [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ], search needs to be combined with a detection of strongly connected
components [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ].
      </p>
      <p>
        In all cases, search is subject to the state explosion problem. For concurrent
systems, the main application domain of Petri nets, stubborn set methods are
among the most important state space reduction methods. Stubborn set is a
whole family of approaches (see [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ] for a recent overview). The particular
approach to be used depends on the property under veri cation. However, even for
one and the same property, more than one stubborn set method may be
available. In [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ], several stubborn set methods for reachability and home properties
are discussed. One of the reachability preserving methods performs particularly
well if the given state predicate is indeed reachable. In this case, it tends to nd
a very short path to a target state. As soon as a target state is reached, search
may be stopped. That is, when searching for reachable states, we typically
produce only a tiny portion of the state space (a phenomenon that is referred to as
on-the- y veri cation). If that stubborn set, however, is applied to a state
predicate that is unreachable, the whole reduced state space needs to be explored
and is typically much larger than the reduced state space obtained using an
alternative stubborn set method proposed in [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ]. This asymmetric behavior with
respect to the prospective outcome of veri cation can be observed in virtually
all veri cation problems used in the yearly model checking contests (MCC, [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]).
Needless to mention that it is not possible to select the right method in advance
unless the answer to the problem is known anyway.
      </p>
      <p>Consequently, a portfolio for reachability may already include two di erent
search algorithms, one speculating on reachability of the predicate, the other
speculating on unreachability of the predicate.</p>
      <p>Similar pairs of stubborn set methods exist for other classes of properties as
well.</p>
      <p>
        Symbolic methods Symbolic methods include BDD based model checkers [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] or
similar approaches [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ], SAT based methods [
        <xref ref-type="bibr" rid="ref23">23</xref>
        ], and unfolding approaches [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ].
As we have no particular experience with these methods, we cannot elaborate
much on details of these methods.
      </p>
      <p>
        Petri net structure theory In [
        <xref ref-type="bibr" rid="ref24">24</xref>
        ], a method for verifying reachability queries has
been presented that is based on the Petri net state equation. It can give
negative answers (state equation has no solution) as well as positive answers (state
equation has a solution that can be turned into a reable transition sequence). If
the state equation has a solution that cannot be arranged to a reable transition
sequence, it searches for alternative solutions of the state equation. The method
is not guaranteed to terminate. However, since solving a linear system of
equations and inequations is \only" NP-complete and hence requires only polynomial
space, memory consumption of the state equation approach is rather moderate.
      </p>
      <p>
        Another purely structural approach is the invocation of the
siphon/trapproperty [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]. It establishes a su cient criterion for non-reachability of a deadlock.
The property can be veri ed as a SAT problem [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]. Hence, it requires only
polynomial space but has a rather unpredictable (NP-complete) runtime. If the
siphon/trap property does not hold, deadlocks may or may not be reachable.
Underapproximation In some application domains (including biochemical
reaction networks), Petri net models may have initial markings with a large number
of tokens on some places. An extreme example is the GPPP benchmark [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] that
is used in the MCC and has places with initially more than 232 tokens.
Consequently, moving these tokens just to the next place may include 232 transition
occurrences and induce more than 232 states, too much for explicit model
checking.
      </p>
      <p>If a veri cation problem asks for the presence of just a few tokens on an
initially empty place, it is unlikely that all of the 232 tokens of an initially
marked place are needed. Therefore, a portfolio for reachability and selected
other problems may include a special search routine where most tokens on places
with a large initial marking are \frozen". We obtain an underapproximation of
the original state space which means that the property is indeed reachable in
the original state space if it is reachable in the underapproximation while it may
or may not be reachable in the original state space if it is unreachable in the
underapproximation.</p>
      <p>The dual approach, overapproximations, do not make sense in explicit
verication since they require more space that the actual state space. For symbolic
model checking, however, overapproximations are a valid tool for reducing the
size of BDDs.
Skeleton net If the given net is a high-level net, we may consider the skeleton
(the P/T net just obtained by ignoring colors). There is a net morphism between
the high-level net and its skeleton, so some properties including reachability
are preserved: if a marking is reachable in a high-level net, the corresponding
marking is also reachable in the skeleton (the reverse is not true). Since it is very
easy to obtain the skeleton from a high-level net, the approach may yield results
for high-level nets that are too large to be unfolded to equivalent P/T nets. The
MCC contains some high-level nets of this kind. For verifying the skeleton, we
may again employ several algorithms such as search or the state equation.</p>
      <p>If the original net is a P/T net, we may fold that into a high-level net for
obtaining a skeleton, so the approach is applicable for both high-level and
lowlevel input.</p>
      <p>Strength reduction For some property , there may be a simpler property that
implies or is implied by . Adding a veri cation algorithm for the simpler
property may thus help for verifying . For instance, satisfaction of the CTL
property EF is necessary for satisfaction of E( U ) while AG is su cient
for EG . The pure reachability problems EF and AG are indeed simpler
since they enable the use of additional veri cation algorithms such as the state
equation approach mentioned above.</p>
      <p>Random walks For properties where the witness or counterexample is just a
single nite path, one can simply launch random walks through the state space.
If such a walk hits a witness (counterexample), the property holds (does not
holds) while otherwise the method does not terminate. The method is extremely
memory-e cient since we do not need to store visited states. At the same time,
it can re transitions at an extremely high rate as we do not need to search
nor store markings. Consequently, random walks are a poor veri cation method
when applied standalone, but a very useful member of a portfolio. The likelihood
of hitting a witness or counterexample path can be increased by applying suitable
stubborn set methods in the selection of the next transition to be red.
Boolean combinations If a formula to be veri ed is a Boolean combination,
subformulas can be veri ed separately. That is, the veri cation algorithms for the
individual sub-formulas establish separate portfolio members.</p>
      <p>Conclusion Portfolios may be large (with more than 10 constituents) and diverse.
We have complete and incomplete methods (incomplete in the sense that they
do not always terminate, or may terminate without a de nite answer to the
problem). Methods may answer to the original problem or only to a sub-problem.
Methods have a broad range of expected memory and runtime consumption. It is
therefore necessary to establish a structured approach to portfolios, the portfolio
manager.</p>
    </sec>
    <sec id="sec-4">
      <title>Tasks of a Portfolio</title>
      <p>With the concept of a task, we design an object that encapsulates a particular
veri cation algorithm and augments it with all necessary information to execute
it as a portfolio member. These data include the necessary inputs, the status
of the task in its lifecycle (see Section 4), results and statistics (for completed
tasks), assigned resources (discussed in Section 7), and data that are relevant
for execution and scheduling (also discussed there).</p>
      <p>
        Input Currently, LoLA is called with a single Petri net and a list of veri cation
problems, given as CTL* formulas. This standard is established by the setup of
the MCC. However, a veri cation tool needs to internally deal with more than
one net and more than one formula, independent of the original input. Multiple
formulas come into play since we may want to separately verify sub-formulas
if the veri cation problem is a disjunction or conjunction. In addition, we may
add distinct formulas using the strength reduction explained in Section 2. If we
apply the skeleton approach explained in the same section, we have two distinct
nets for every given veri cation problem. In addition, we may want to apply
net reduction [
        <xref ref-type="bibr" rid="ref1 ref15">1, 15</xref>
        ] to the net before running an actual veri cation algorithm.
Since the applicability of reduction rules depends on the veri cation problem,
we may end up with several di erent nets. We conclude that we need to assign
an individual net and an individual formula to every veri cation task.
Results and Statistics Since many portfolio members are only necessary or only
su cient, or do not terminate in all cases, it is reasonable to introduce a value
unknown to the usual values true and false. In addition, we propose a fourth
value void that is used if the veri cation algorithm has not yet run. The di erence
between unknown and void is that unknown may be propagated as nal value
to the original veri cation problem if no task in the portfolio delivers a true or
false. In contrast, void is not propagated since a de nite result may be found
subsequently.
      </p>
      <p>Beyond the plain yes/no answer to the veri cation problem approached by
a task, results may include additional diagnostic information such as witness
or counterexample paths as well as witness or counterexample states. If search
algorithms use storage methods based on Bloom ltering, diagnostic information
may include a likelihood of hash con icts that may be used for judging about
the risk that the state space is actually incomplete.</p>
      <p>Statistical information includes the number of visited states, red transitions,
run time, consumed memory and other information that is useful for evaluating
the performance of the algorithm or the di culty of the problem instance with
respect to the veri cation algorithm.
4</p>
    </sec>
    <sec id="sec-5">
      <title>Lifecycle of a Task</title>
      <p>
        IDLE This is the initial state of the lifecycle. The task is created as a result of the
planning phase of the veri cation tool. The planning phase of a veri cation tool
is run subsequent to parsing the net(s) and veri cation problem(s). For temporal
logic formulas, rewriting is applied [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] since that may simplify the veri cation
problem, or may identify it as tautology or contradiction. After rewriting, the
formula is categorized. The planning phase then puts together the portfolio,
based on the category of the problem and, if given, command line options of the
veri cation tool. In state IDLE, the task is not ready for execution. In particular,
the net assigned to the task may require preprocessing such as net reduction or
the calculation of auxiliary data. For the latter, an interesting example is a
precalculated set of con icting transitions (the set ( t) for a given transition t).
This information is needed in every marking of a search algorithm, especially
for stubborn set calculations. Since a typical search visits hundreds of millions
of markings, a pre-computed list of con icting transitions saves a substantial
amount of runtime. Its calculation may consume several seconds or even minutes.
Although a task is not ready for execution in state IDLE, it is bene cial for the
portfolio manager to know idle tasks since this information enables the portfolio
manager to plan resources for their future execution.
      </p>
      <p>ACTIVE An active task is ready for execution, This means that all preprocessing
of inputs is completed. The task is just lacking the assignment of resources for
execution by the scheduler that is part of the portfolio manager.
RUNNING A running task is executing the actual veri cation algorithm. During
this phase, there are two kinds of interaction between the algorithm and the
portfolio manager. First, the portfolio manager controls the use of resources
assigned to the task. We discuss this issue in Section 6. Second, the portfolio
manager collects status data of the algorithm (e.g. number of markings visited
so far, number of red transitions, etc.). Such status information is quite useful
to give the user the impression that the tool is running properly. The status
information needs to be aggregated for all running tasks in order to create a
readable display.</p>
      <p>Figure 2 shows an example of an aggregated status report in LoLA. The rst
block reports all veri cation problems (referred to by an identi er) which have
already been solved, their category, their value, and the portfolio member that
delivered the result for that particular problem. The second block displays, for
every other formula, the number of portfolio members that are available for that
problem, and the status of these tasks. The third block displays the running
tasks with the type of underlying algorithm (in the example: three times state
equation and one depth- rst search), their assigned resources, and the
algorithmdependent status information collected by the portfolio manager.
FINISHED A nished task has completed the execution of its veri cation
algorithm and delivered its result.</p>
      <p>OBSOLETE A task is obsolete if its result is not needed anymore to determine
the answer to an original veri cation problem. If, for instance, a veri cation
problem is a disjunction of two subproblems, and one of the subproblems is
found to be true, all tasks supporting the other subproblem become obsolete. The
main factual di erence between a nished and an obsolete task is that statistical
information and results such as counterexamples or witnesses are present and
meaningful only for nished, but not for obsolete tasks.</p>
      <p>CANCELED/T, CANCELED/M Tasks are canceled as soon as they exceed
their assigned resources. We distinguish cancelation by exceeding the time limit
from cancelation by exceeding the memory limit. This way, we may consider
rescheduling the task if, later on, additional resources become available.
SUSPENDED A task is suspended if assigned resources are not available.
Consider, for example, memory resources. A task, for instance a search algorithm,
does not need all its memory resources immediately. So we may optimistically
assign more memory resources than actually available at a certain point in time,
speculating that another task will meanwhile release its resources. Suspending a
task permits a seamless continuation of an already running task as soon as
required resources are indeed available. The di erence between a suspended task
and a canceled task is that a canceled task releases all assigned resources while
a suspended task keeps its resources and may resume execution. Resuming a
canceled task amounts to re-execution from the beginning.
4.2</p>
      <sec id="sec-5-1">
        <title>Transitions of the Lifecycle</title>
        <p>preprocess (IDLE to ACTIVE) This transition is triggered by the completion
of the preprocessing routines for the inputs to the task. In the LoLA
implementation, we use the pthread condition mechanism to announce the completion of
preprocessing routines.</p>
        <p>The amount of necessary preprocessing depends on the veri cation algorithm.
While search algorithms require intensive preprocessing (as already explained),
the state equation approach just needs a simple net structure for deriving the
incidence matrix. When skeleton nets are involved, we may skip net reduction
since the resulting nets are already quite small. An individual transition from
idle to active permits an early start of the actual veri cation. We may run tasks
that require little preprocessing while other tasks are still in the preprocessing
phase. If such early tasks deliver their result quickly, we may be able to skip
some of the preprocessing thus saving resources for other veri cation problems.
launch (ACTIVE to RUNNING) We launch a task by spawning a new thread
for the actual veri cation algorithm of the task. The transition is triggered by
the scheduler which is discussed in Section 7.
report (RUNNING to FINISHED) When a veri cation algorithm terminates,
it triggers the report activity. The results of the algorithm (value, witnesses or
counterexamples, statistics) are recorded in the portfolio manager. Resources
assigned to the task are released and a signal is sent to the portfolio manager
that triggers the next scheduling activity (for launching another task).
timeout (RUNNING to CANCELED/T), memory exhausted (RUNNING to
CANCELED/M) These activities are triggered by the resource management of the
portfolio manager. We discuss this issue separately in Section 6.
suspend (RUNNING to SUSPENDED) This activity is triggered by the resource
management of the portfolio manager. Suspension happens if a task is acquiring
a granted resource tat is not immediately available. The thread executing the
veri cation algorithm is frozen until the request can be satis ed.
resume (SUSPENDED to RUNNING) When some task releases its resources
(through cancelation or termination), the resource manager may trigger the
resume transition and grant fresh resources to a suspended task.
reschedule (CANCELED/T to RUNNING) The actual runtime of a veri cation
algorithm is virtually unpredictable. It may this happen that a task needs much
less runtime than originally scheduled. This way, additional runtime may become
available. If, after having executed all tasks once, more runtime is available than
originally scheduled for some canceled task, we may reschedule that task. Giving
more runtime to it, we gain some opportunity to nish it successfully this time.
obsolesce (any to OBSOLETE) A task becomes obsolete if some other task
for the same veri cation problem has answered the given problem. As soon as
any task executes its report transition, all other tasks for the same veri cation
problem are checked whether they can still contribute to the original problem.
If not, they become obsolete. In case they are currently running or suspended,
execution is stopped and resources are released. Obsolete tasks are detected by
the evaluation of task trees to be introduced in Section 5.</p>
        <p>Conclusion Tasks have a complex life cycle. The transitions of the lifecycle are
triggered by various components of the veri cation tool. Consequently, portfolio
management requires a clean assignment of responsibilities to the various
components. We have been experimenting with the portfolio manager of LoLA for
several months before the structure of the lifecycle converged to the one just
reported.
5</p>
      </sec>
    </sec>
    <sec id="sec-6">
      <title>Task Trees</title>
      <p>The leafs of the task tree are the tasks as discussed so far. Whenever tasks
complete, the result value is propagated bottom-up in the tree. Whenever an
inner node gets a nal truth value, the remaining branches The inner nodes
re ect the logical dependencies between the portfolio members. We identi ed
several useful types of inner nodes and discuss them one by one.
Conjunction This binary (or n-ary) node re ects the fact that the original
problem is a conjunction of subproblems. The children of a conjunction node are
the roots of the portfolios of the subproblems. The following table re ects the
propagation of values of a conjunction node.</p>
      <p>true false unknown void
true true false unknown void
false false false false false
unknown unknown false unknown void
void void false void void
Disjunction This binary (or n-ary) node re ects the fact that the original
problem is a disjunction of subproblems. The following table re ects the propagation
of values.</p>
      <p>true false unknown void
true true true true true
false true false unknown void
unknown true unknown unknown void</p>
      <p>void true void void void
Aggregation This binary (or n-ary) node represents a portfolio where two (or
more) algorithms are available for exactly the same (sub-)problem. It
propagation behavior can be re ected in the following table.</p>
      <p>true false unknown void
true true (error) true true
false (error) false false false
unknown true false unknown void</p>
      <p>void true false void void</p>
      <p>There are two entries marked with error. If any of these situations would ever
occur, one of the involved veri cation algorithms is wrong, or has an incorrect
implementation.</p>
      <p>Dual This is a unary node in the task tree. It maps a veri cation problem to the
corresponding dual problem. Using the dual node, we may have algorithms for
reachability in a portfolio of an invariance problem, to name just one example.
Whenever a dual node occurs, the veri cation problem of the child node refers to
the negation of the veri cation problem for the current node. In the mentioned
example, if we want to verify AG , the child node is attached to formula EF : .
The behavior of this node is de ned by the following table.</p>
      <p>true false unknown void
false true unknown void
Su cient This unary node is used if the result of the child node only establishes
a su cient condition for the original veri cation problem. If, for instance, the
original problem is EG , a portfolio for AG can be wrapped with this node
to re ect that, if the answer to AG is false, this does not means that EG
is false, while a true answer to AG means that EG is indeed true. The
following table can be used.</p>
      <p>true false unknown void
true unknown unknown void
Necessary This unary node is the dual counterpart of a Su cient node for
necessary conditions (such as EF for E( U )). Its table looks as follows.</p>
      <p>true false unknown void
unknown false unknown void</p>
      <p>The original problem is the CTL formula EF ^ AG EF , for any state
predicates and . This original problem forms the root of the task tree. The
conjunction node signals that the two sub-formulas are veri ed separately. The
rst sub-formula, the reachability problem EF , can be approached using the
original net or the corresponding skeleton net (obtained by folding if N is a
P/T net). These alternatives are modeled as an aggregate node. Reachability in
the skeleton is only a necessary condition for reachability in the original net,
so the results of the left branch are ltered by a necessary node. This way,
despite possible true and false answers of the underlying algorithms, only a false
result is propagated towards the root. The aggregate node below the necessary
node re ects the fact that reachability in the skeleton can be investigated by
two algorithms: evaluation of the state equation or depth- rst search. For the
original net, the task tree o ers three alternative approaches: state equation,
depth- rst search, and an underapproximation that tries to freeze tokens in the
initial marking. Reachability in the underapproximation is a su cient condition
for actual reachability. However, we do not need a su cient node here since the
algorithm itself would only answer yes or unknown.</p>
      <p>For the sub-formula AGEF , the task tree o ers three alternative approaches.
The one displayed in the middle is conventional depth- rst search that, through
investigation of strongly connected components, is able to answer the task. This
search is anked by a su cient and a necessary condition that both have been
obtained by strength reduction. Indeed, a net satisfying AG also satis es
AG EF , and a net satisfying AG EF must also satisfy EF . The
verication of AG is traced back to the veri cation EF : using the tautology
AG () :EF : . This way, actual veri cation algorithms only need to
care about reachability and not about invariance. The dual node in the task tree
is responsible for negating the result of the underlying algorithm. For
checking the necessary criterion EF , we employ the state equation and depth- rst
search in the skeleton.</p>
      <p>The example shows the potential complexity of a portfolio and demonstrates
the necessity of a systematic approach.
6</p>
    </sec>
    <sec id="sec-7">
      <title>Controlling Resources</title>
      <p>Cores, memory, and runtime are the critical resources when running a portfolio.
If the number of algorithms executed in parallel exceeds the number of available
cores, the operating system is forced into frequent context switches, with negative
impact on overall runtime and on caches. Since depth- rst search is extremely
space-consuming, we have to take care that algorithms running in parallel have a
well-designed way of competing for memory. Last but not least, we need to make
sure that all portfolio members get a fair portion of available runtime, if that
is limited. The actual scheduling of resources is discussed in the next section.
We can schedule resources only if we can control the access of tasks to these
resources. That is why we included this section.</p>
      <p>For controlling access to cores, we believe that it is su cient to take care
that we launch at most as many parallel threads (i.e. concurrent veri cation
algorithms) as there are cores in the underlying machine. In case of LoLA, the
user speci es that number using a command-line option. Runtime is controlled
by an additional timer thread that is running as long as the portfolio manager
is active. It is executing an in nite loop where, after sleeping for ve seconds, it
checks for tasks that have exceeded their time limit and, at the same time,
collects status information from running tasks and displays them. According to our
experience, the granularity of ve seconds seems to be su cient for controlling
time limits of tasks. By sleeping a long time between activities, the timer thread
does not severely interfere with the threads that execute the actual veri cation
algorithms.</p>
      <p>The most interesting resource with respect to resource control is memory.
As a preliminary step, we discuss access to memory in general. Based on this
discussion, we can then propose a strategy for controlling the amount of memory
assigned to a task.</p>
      <p>Depth rst search, the main method for explicit veri cation, is an extremely
memory-consuming task. Pro ling with LoLA revealed that, during depth- rst
search, about 90% of the runtime is spent for checking whether or not the
currently visited marking has been visited before, and to insert it into the data
structure if it has not visited yet. To our own surprise, about 40% of that time
is spent in malloc, the C routine for allocating memory on the heap of the main
memory (including calls to the corresponding new operator in C++). The
explanation of that large percentage has two aspects. First, it shows that the remaining
parts of a depth- rst search algorithm indeed have an extremely lightweight
implementation. Second, it shows that allocating memory on the heap is a rather
involved task. First, malloc needs to nd a suitable portion of memory in the list
of free memory segments, and to launch a call to the operating system if there is
none. Second, it needs to take precautions for the eventual return of the memory
to be allocated. And nally, malloc must be thread-safe, i.e. it must provide a
mechanism for mutual exclusion between concurrent calls to the routine.</p>
      <p>Based on this analysis, we conclude that depth- rst search should include a
tailored memory management. In LoLA, we allocate memory in large pages of,
say, 100 Megabytes. Then, our own memory manager allocates portions of such
a page to individual requests of the search algorithm. We obtain the following
runtime bene ts:
{ Since every concurrent depth rst search uses its own memory management,
we do not need to provide any mechanism for mutual exclusion during
memory management;
{ Since memory allocated for depth- rst search is never returned before that
search as such is nished, we do not need to provide any mechanism for
returning memory to the list of free portions;
{ Since memory is never returned, we have no fragmentation issues and
memory management is mostly trivial;
{ When depth- rst search terminates, or is canceled, we only need to return
the allocated pages instead of freeing hundreds of millions of individual data
objects.</p>
      <p>The rst three items cause a speedup of 20% for our own memory allocation
requests, compared to traditional calls to malloc. The last item reduces the time
for terminating a depth- rst search from several minutes to a fraction of a second.
Hence, the page mechanism is a prerequisite for running nontrivial portfolios.</p>
      <p>Once we have a page based memory management for depth- rst search, we
can gain complete control of the memory usage. We simply need to count (and
limit) the number of pages that the memory manager of a depth- rst search is
allowed to allocate. A task is suspended by simply not answering to its request
for memory. A task can be canceled by not answering to its memory request while
releasing its resources (otherwise, canceling a pthread is a nontrivial endeavor).</p>
      <p>Other veri cation algorithms involve depth- rst search as well, like our
underapproximation approach, or require only marginal memory resources, like
random walks. For two classes of algorithms, we do not provide any control of
their memory usage in LoLA: state equation and siphon/trap property. Here, we
use o -the-shelf libraries for solving linear problems resp. SAT problems and so
far we did not dare to intervene in their memory management. However, both
problems are in NP and thus in PSPACE, so we hope that their memory
requirements are less severe than that of depth- rst search. With this sloppy way
of controlling memory resources, we at least managed to stay within the harsh
memory limit of 16 Gigabytes in recent issues of the MCC.
7</p>
    </sec>
    <sec id="sec-8">
      <title>Scheduling Tasks</title>
      <p>Scheduling refers to two kinds of decisions to be repeatedly taken in a running
portfolio manager. First, we need to select the order in which we execute tasks.
Second, we need to decide how many resources we assign to the selected tasks.
As long as we do not have a strict limit for runtime, the order of executing tasks
is less important. That is why we discuss this issue under the assumption that
there is in fact a time limit. Using such a strategy in a scenario without time
limit, helps us to reduce the overall run time in many cases but has no severe
impact if it fails.</p>
      <p>
        So, assuming a strict time limit, our duty is to get as many as possible rm
results (true or false) for the given veri cation problems. In [
        <xref ref-type="bibr" rid="ref25">25</xref>
        ], we observed that
problems can be divided into simple, challenging, and impossible. Simple means
that virtually all methods are able to solve the problem in little time. Impossible
means that all known methods fail. Only for the challenging problems, selection
and con guration of veri cation algorithms matter. Most problems in the MCC
are either simple or impossible. This is, of course, an a posteriori classi cation.
However, the size and shape of the net and the structure of a temporal logic
formula may give us valuable a priori hints for guessing the category a problem.
      </p>
      <p>Concerning the net, large nets tend to be more challenging than small nets.
Nets with large con ict clusters tend to be more challenging than nets with small
con ict clusters (more concurrency means better applicability of stubborn sets).</p>
      <p>
        Regarding a temporal logic formula, the number of occurring temporal
operators seems to be a good basis for judging its di culty. The simplest case
are without doubt formulas without temporal operators. They correspond to
constants true or false, or to a state predicate that can be evaluated by just
inspecting the initial marking. Such formulas frequently appear in the MCC as
the result of linear programming approaches to the atomic propositions and
application of temporal logic tautologies [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]. Of course, a portfolio manager will
launch tasks for such formulas with highest priority since they do not require
any measurable resources.
      </p>
      <p>
        Of the remaining formulas, the ones with one or two temporal operators are
the simplest. Most of these formulas are supported by specialized algorithms
[
        <xref ref-type="bibr" rid="ref11">11</xref>
        ]. Their presence increases the success rate. In addition, also pointed out in
[
        <xref ref-type="bibr" rid="ref11">11</xref>
        ], they occur more frequently than other formulas. For di erentiating between
formulas with one or two temporal operators, we employ the past issues of the
MCC. Based on these data, we can calculate the success rate of LoLA for the
various types of formulas. This success rate is an excellent measure for di culty.
      </p>
      <p>
        Formulas with more than two temporal operators occur less frequently in
practice. That is why the number of occurring operators appears to be a su
cient criterion for judging their complexity. Alternatively, LTL formulas could be
judged according to the number of states of the Buchi automata that represent
the formulas and which are used in LTL model checking [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ].
      </p>
      <p>For formulas with the same temporal structure, the number of places
mentioned in the formula is another criterion for di erentiating the di culty. A large
number of mentioned places leads to a large number of visible transitions.</p>
      <p>The overall di culty of a problem would be some Pareto style aggregation of
the di culty of the formula and the di culty of the net. In LoLA, we currently
consider only the di culty of the formula.</p>
      <p>For search algorithms, we schedule the easiest problems rst. If any of the
problems is solvable then the easiest ones have the greatest likelihood to do
so. For algorithms that require only few resources, such as random walks, we
schedule the most di cult problems rst. If a problem is indeed di cult, it
appears to be easier to land a lucky punch with an unusual algorithm than
with a state space exploration. In any case, we schedule tasks in a way that, if
possible, tasks running in parallel concern di erent problems. In the case where
some problems indeed turn out to be simple, we solve them without running too
many algorithms in parallel on them, so more time remains for the challenging
problems.
7.2</p>
      <sec id="sec-8-1">
        <title>Assigning Resources</title>
        <p>Cores For sequential algorithms, a single core is assigned. This is the case for the
whole LoLA portfolio manager. For parallel algorithms, it could be reasonable
to assign more than one core. Here we have a con ict between assigning cores to
that algorithm versus assigning cores to other portfolio members. To date, most
parallel algorithms have a saturating behavior with respect to the number of
cores. That is, there is a number of cores where additional cores do not lead to an
improvement of runtime. If that number is known (by experimental evidence), it
would be reasonable to assign not more than that number of cores to the parallel
algorithm, and cores might be left for other portfolio members.</p>
        <p>Memory The memory-critical tasks are those that execute depth- rst search.
We pointed out above that, depending on the stubborn sets used, they are
optimized for true (e.g. reachable) or false (e.g. unreachable) cases. One of the cases
(reachable) bene ts from the on-the- y e ect while in the other case the whole
reduced state space needs to be computed. For memory assignment, we may
derive two conclusions. First, if the task is set up for the case where we bene t
from the on-the- y e ect, the task either delivers its result after having
consumed only few memory pages, or it is unlikely to deliver a result at all. Second,
if the task is setup for the case where the whole reduced state space needs to be
computed, we either assign su cient resources for nishing the search, or any
assigned resource is wasted. In consequence, taking reachability as an example,
we assign only few pages for tasks where search is optimized for reachability
and we assign a lot of memory to tasks that are designed for unreachability. In
the portfolio manager, we distinguish search (optimized for reachability) from
exclusive memory (optimized for unreachability) tasks. The scheduler takes care
that, at all times, only one exclusive memory task is running. All the other tasks
get a xed small number of memory pages assigned, and the single exclusive
memory task basically is permitted to use all remaining memory.
Runtime For runtime, we identi ed two major scenarios: limited versus
unlimited availability. For the use of veri cation in practice, we expect that an
unlimited amount of runtime is available. For search tasks, the monotonic request for
memory establishes some bound for runtime anyway. For constant-memory tasks
such as random walks, a scenario with unlimited runtime should implement some
criterion for interrupting the method (number of tries or an algorithm-speci c
local time limit). Otherwise, we can schedule tasks as soon as cores and memory
are available.</p>
        <p>Use cases with a strict time limit include the MCC conditions as well as
practical situations where we have a rm deadline for reporting results. Taking
into consideration that we can schedule at most one exclusive memory task at a
time, we propose the following strategy. First we separately schedule all
remaining exclusive memory tasks. We compute the available time as the di erence of
deadline and current time. If an exclusive memory task is currently running, we
replace the current time with the start time of the running task. This amount
of time is divided by the number of remaining (and running) exclusive memory
tasks. Every task is given that amount of time. The end time of the running task
is replaced accordingly.</p>
        <p>For all other tasks, we can use all available cores if no exclusive memory
task is present, and we can use all but one core if there are remaining exclusive
memory tasks. Depending on that number of tasks, we compute the largest
number n of seconds such that all nonexclusive tasks can be scheduled for n
seconds before the deadline expires. This is a bit tricky since we need to take
care about already running tasks, and we need to re ect the fact that the runtime
for a single algorithm cannot be parallelized. That is why the calculation requires
more e orts than just dividing the available time by the number of remaining
tasks.</p>
        <p>We compute the remaining time per core which is the di erence between
the deadline and the start time of an already running task (there should be as
many such tasks as we have available cores). If less tasks are running, we use
the current time instead. Let k be the number of available cores, and n be the
number of remaining nonexclusive tasks. Then we schedule n div k tasks for
every core. The remaining n mod k tasks are schedule for the cores with largest
remaining time. Then we can compute, for every core, the remaining time on
that core and distribute it equally for the tasks planned for this core. That is,
tasks do not necessarily get exactly the same time, but processing resources are
used exhaustively.</p>
        <p>We repeat the scheduling procedure every time a new task is checked in, or
a running task nishes. This way, we continuously adapt our scheduling to the
current situation.</p>
        <p>Example. Suppose that we have four cores, and initially two exclusive memory
tasks and ten other tasks. Let 1000 seconds be available. Then we would launch
one exclusive memory task with a time limit of 500 seconds. For the remaining
cores, we would assume a distribution of four versus three versus three tasks, so
we would launch one task with 250 seconds, and two tasks with 333 seconds time
limit. If, after 100 seconds, a non-exclusive task returns a result, we have nine
remaining tasks (including the running tasks). Two cores have an available
runtime of 1000 seconds (since the two running tasks have been launched initially)
and the third core has 900 seconds remaining time. We have a distribution three
versus three versus three, so we would launch a new task with a time limit of 300
seconds. If, after 200 seconds (counted from beginning), the exclusive memory
task returns, we launch the remaining exclusive memory task with a time limit
of 800 seconds. If it returns after 250 seconds (again counted from beginning)
an additional core becomes available for the non-exclusive tasks. The individual
available time is 1000 versus 1000 versus 900 versus 750 seconds and there are
nine remaining tasks. So we would distribute them by the pattern three versus
two versus two versus two. In e ect, one of the running tasks would keep its
time limit of 333 (= 1000 / 3) seconds. The second task that was started in the
very beginning would get a new time limit of 500 (= 1000 / 2) seconds. The task
started after 100 seconds would get a new time limit of 450 (= 900 / 2) seconds,
and we would launch a fresh task with a time limit of 375 (= 750 / 2) seconds.</p>
        <p>Using this scheduling policy, we bene t from low hanging fruits earned early
in the scheduling sequence. If tasks nish early, remaining tasks immediately get
more run-time assigned.</p>
        <p>Sometimes it may happen that remaining tasks do not exhaust the scheduled
time. In this case we check whether we have tasks that were canceled before due
to lack of time. If they consumed less time than still available in the end, we
reschedule such a task with a more generous time limit.
8</p>
      </sec>
    </sec>
    <sec id="sec-9">
      <title>Conclusion</title>
      <p>We have discussed the main design decisions to be made for the
implementation of a portfolio manager for Petri net based veri cation. Due to the size and
diversity of veri cation portfolios, a systematic approach is necessary. We also
discussed possible deviations from the decision that we made in the LoLA tool.
Since the rst implementation of the task manager, we added several new
veri cation algorithms to the portfolio and found that the design of the portfolio
manager was robust with respect to the changes. This way, the integration of
the new methods validated our major design decisions.</p>
      <p>Our next step for improving the manager will be a prognostic feature for
memory consumption. We observed that search algorithms request new memory
at a roughly constant rate. We can use the past rate of memory requests for
estimating the future memory requirement of an exclusive memory task. This
way, we may be able to assign additional memory to nonexclusive tasks.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <given-names>G.</given-names>
            <surname>Berthelot</surname>
          </string-name>
          .
          <article-title>Transformations and decompositions of nets</article-title>
          .
          <source>In Advances in Petri Nets, LNCS 254</source>
          , pages
          <fpage>359</fpage>
          {
          <fpage>376</fpage>
          ,
          <year>1986</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>F.</surname>
          </string-name>
          <article-title>B nneland</article-title>
          , J. Dyhr,
          <string-name>
            <given-names>P. G.</given-names>
            <surname>Jensen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Johannsen</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J.</given-names>
            <surname>Srba</surname>
          </string-name>
          .
          <article-title>Simpli cation of CTL formulae for e cient model checking of petri nets</article-title>
          .
          <source>In Processings Application and Theory of Petri Nets and Concurrency, LNCS 10877</source>
          , pages
          <fpage>143</fpage>
          {
          <fpage>163</fpage>
          ,
          <year>2018</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <given-names>J.R.</given-names>
            <surname>Burch</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.M.</given-names>
            <surname>Clarke</surname>
          </string-name>
          ,
          <string-name>
            <surname>K.L. McMillan</surname>
            ,
            <given-names>D.L.</given-names>
          </string-name>
          <string-name>
            <surname>Dill</surname>
            , and
            <given-names>L.J.</given-names>
          </string-name>
          <string-name>
            <surname>Hwang</surname>
          </string-name>
          . Symbolic model checking:
          <volume>10</volume>
          ^
          <article-title>20 states and beyond</article-title>
          .
          <source>Inf. Comput.</source>
          ,
          <volume>98</volume>
          (
          <issue>2</issue>
          ):
          <volume>142</volume>
          {
          <fpage>170</fpage>
          ,
          <year>1992</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <given-names>E.M.</given-names>
            <surname>Clarke</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.A.</given-names>
            <surname>Emerson</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A. Prasad</given-names>
            <surname>Sistla</surname>
          </string-name>
          .
          <article-title>Automatic veri cation of nitestate concurrent systems using temporal logic speci cations</article-title>
          .
          <source>ACM Trans. Program. Lang. Syst.</source>
          ,
          <volume>8</volume>
          (
          <issue>2</issue>
          ):
          <volume>244</volume>
          {
          <fpage>263</fpage>
          ,
          <year>1986</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <given-names>A.</given-names>
            <surname>David</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Jacobsen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Jacobsen</surname>
          </string-name>
          ,
          <string-name>
            <surname>K.Y. J rgensen,</surname>
            <given-names>M.H.</given-names>
          </string-name>
          <article-title>M ller,</article-title>
          and J.
          <source>Srba. TAPAAL 2</source>
          .
          <article-title>0: Integrated development environment for timed-arc petri nets</article-title>
          .
          <source>In Proceedings Tools and Algorithms for the Construction and Analysis of Systems, LNCS 7214</source>
          , pages
          <fpage>492</fpage>
          {
          <fpage>497</fpage>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <given-names>J.</given-names>
            <surname>Esparza</surname>
          </string-name>
          and
          <string-name>
            <given-names>K.</given-names>
            <surname>Heljanko. Unfoldings - A Partial-Order Approach</surname>
          </string-name>
          to Model Checking.
          <source>Monographs in Theoretical Computer Science. An EATCS Series</source>
          . Springer,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <given-names>M.H.T.</given-names>
            <surname>Hack</surname>
          </string-name>
          .
          <article-title>Analysis of Production Schemata by Petri Nets</article-title>
          .
          <source>Master's thesis</source>
          , MIT, Dept. Electrical Engineering,, Cambridge, Mass,
          <year>1972</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <given-names>K.</given-names>
            <surname>Jensen</surname>
          </string-name>
          .
          <article-title>Condensed state spaces for symmetrical coloured petri nets</article-title>
          .
          <source>Formal Methods in System Design</source>
          ,
          <volume>9</volume>
          (
          <issue>1</issue>
          /2):7{
          <fpage>40</fpage>
          ,
          <year>1996</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <given-names>F.</given-names>
            <surname>Kordon</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Garavel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L. M.</given-names>
            <surname>Hillah</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Hulin-Hubard</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Amparore</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Beccuti</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Berthomieu</surname>
          </string-name>
          , G. Ciardo,
          <string-name>
            <given-names>S. Dal</given-names>
            <surname>Zilio</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Liebke</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Li</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Meijer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Miner</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Srba</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y.</given-names>
            <surname>Thierry-Mieg</surname>
          </string-name>
          , J. van de Pol, T. van Dirk, and
          <string-name>
            <given-names>K.</given-names>
            <surname>Wolf</surname>
          </string-name>
          .
          <article-title>Complete Results for the 2019 Edition of the Model Checking Contest</article-title>
          . http://mcc.lip6.fr/2019/results.php,
          <year>April 2019</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>L.M. Kristensen</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          <string-name>
            <surname>Schmidt</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Valmari</surname>
          </string-name>
          .
          <article-title>Question-guided stubborn set methods for state properties</article-title>
          .
          <source>Formal Methods in System Design</source>
          ,
          <volume>29</volume>
          (
          <issue>3</issue>
          ):
          <volume>215</volume>
          {
          <fpage>251</fpage>
          ,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <given-names>T.</given-names>
            <surname>Liebke</surname>
          </string-name>
          and
          <string-name>
            <given-names>K.</given-names>
            <surname>Wolf</surname>
          </string-name>
          .
          <article-title>Taking some burden o an explicit CTL model checker</article-title>
          .
          <source>In Proceedings Application and Theory of Petri Nets and Concurrency, LNCS 11522</source>
          , pages
          <fpage>321</fpage>
          {
          <fpage>341</fpage>
          ,
          <year>2019</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <given-names>R.</given-names>
            <surname>Lipton</surname>
          </string-name>
          .
          <article-title>The reachability problem requires exponential space</article-title>
          .
          <source>Technical Report 62</source>
          , Yale University,
          <year>1976</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <given-names>O.</given-names>
            <surname>Oanea</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Wimmel</surname>
          </string-name>
          , and
          <string-name>
            <given-names>K.</given-names>
            <surname>Wolf</surname>
          </string-name>
          .
          <article-title>New algorithms for deciding the siphon-trap property</article-title>
          .
          <source>In Proceedings Applications and Theory of Petri Nets, LNCS 6128</source>
          , pages
          <fpage>267</fpage>
          {
          <fpage>286</fpage>
          ,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <given-names>K.</given-names>
            <surname>Schmidt</surname>
          </string-name>
          .
          <article-title>How to calculate symmetries of petri nets</article-title>
          .
          <source>Acta Inf.</source>
          ,
          <volume>36</volume>
          (
          <issue>7</issue>
          ):
          <volume>545</volume>
          {
          <fpage>590</fpage>
          ,
          <year>2000</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <given-names>S.M.</given-names>
            <surname>Shatz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Tu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Murata</surname>
          </string-name>
          , and
          <string-name>
            <given-names>S.</given-names>
            <surname>Duri</surname>
          </string-name>
          .
          <article-title>An application of petri net reduction for ada tasking deadlock analysis</article-title>
          .
          <source>IEEE Trans. Parallel Distrib. Syst.</source>
          ,
          <volume>7</volume>
          (
          <issue>12</issue>
          ):
          <volume>1307</volume>
          {
          <fpage>1322</fpage>
          ,
          <year>1996</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <given-names>R.E.</given-names>
            <surname>Tarjan</surname>
          </string-name>
          .
          <article-title>Depth- rst search and linear graph algorithms</article-title>
          .
          <source>SIAM J. Comput.</source>
          ,
          <volume>1</volume>
          (
          <issue>2</issue>
          ):
          <volume>146</volume>
          {
          <fpage>160</fpage>
          ,
          <year>1972</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <given-names>Y.</given-names>
            <surname>Thierry-Mieg</surname>
          </string-name>
          .
          <article-title>Symbolic model-checking using its-tools</article-title>
          .
          <source>In Proceedings Tools and Algorithms for the Construction and Analysis of Systems, LNCS 9035</source>
          , pages
          <fpage>231</fpage>
          {
          <fpage>237</fpage>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <given-names>A.A.</given-names>
            <surname>Tovchigrechko</surname>
          </string-name>
          .
          <article-title>E cient symbolic analysis of bounded Petri nets using interval decision diagrams</article-title>
          .
          <source>PhD thesis</source>
          , Brandenburg University of Technology, Cottbus - Senftenberg, Germany,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19.
          <string-name>
            <given-names>A.</given-names>
            <surname>Valmari</surname>
          </string-name>
          .
          <article-title>Stubborn sets for reduced state space generation</article-title>
          .
          <source>In Proc. International Conference on Applications and Theory of Petri Nets, LNCS 483</source>
          , pages
          <fpage>491</fpage>
          {
          <fpage>515</fpage>
          ,
          <year>1989</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          20.
          <string-name>
            <given-names>A.</given-names>
            <surname>Valmari</surname>
          </string-name>
          and
          <string-name>
            <given-names>H.</given-names>
            <surname>Hansen</surname>
          </string-name>
          .
          <article-title>Stubborn set intuition explained</article-title>
          .
          <source>Trans. Petri Nets and Other Models of Concurrency, LNCS</source>
          <volume>10470</volume>
          ,
          <issue>12</issue>
          :
          <fpage>140</fpage>
          {
          <fpage>165</fpage>
          ,
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          21.
          <string-name>
            <surname>M.Y. Vardi</surname>
            and
            <given-names>P.</given-names>
          </string-name>
          <string-name>
            <surname>Wolper</surname>
          </string-name>
          .
          <article-title>An automata-theoretic approach to automatic program veri cation (preliminary report)</article-title>
          .
          <source>In Proceedings of the Symposium on Logic in Computer Science (LICS, IEEE</source>
          , pages
          <volume>332</volume>
          {
          <fpage>344</fpage>
          ,
          <year>1986</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          22.
          <string-name>
            <given-names>B.</given-names>
            <surname>Vergauwen</surname>
          </string-name>
          and
          <string-name>
            <given-names>J.</given-names>
            <surname>Lewi</surname>
          </string-name>
          .
          <article-title>A linear local model checking algorithm for CTL</article-title>
          .
          <source>In Proceedings International Conference on Concurrency Theory, LNCS</source>
          <volume>715</volume>
          , pages
          <fpage>447</fpage>
          {
          <fpage>461</fpage>
          ,
          <year>1993</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          23.
          <string-name>
            <given-names>P.F.</given-names>
            <surname>Williams</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Biere</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.M.</given-names>
            <surname>Clarke</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Gupta</surname>
          </string-name>
          .
          <article-title>Combining decision diagrams and SAT procedures for e cient symbolic model checking</article-title>
          .
          <source>In Proc. Computer</source>
          Aided Veri cation,
          <source>LNCS</source>
          <year>1855</year>
          , pages
          <fpage>124</fpage>
          {
          <fpage>138</fpage>
          ,
          <year>2000</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          24.
          <string-name>
            <given-names>H.</given-names>
            <surname>Wimmel</surname>
          </string-name>
          and
          <string-name>
            <given-names>K.</given-names>
            <surname>Wolf</surname>
          </string-name>
          .
          <article-title>Applying CEGAR to the petri net state equation</article-title>
          .
          <source>Logical Methods in Computer Science</source>
          ,
          <volume>8</volume>
          (
          <issue>3</issue>
          ),
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          25.
          <string-name>
            <given-names>K.</given-names>
            <surname>Wolf</surname>
          </string-name>
          .
          <article-title>Running lola 2.0 in a model checking competition</article-title>
          .
          <source>Trans. Petri Nets and Other Models of Concurrency, LNCS</source>
          <volume>9930</volume>
          ,
          <issue>11</issue>
          :
          <fpage>274</fpage>
          {
          <fpage>285</fpage>
          ,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          26.
          <string-name>
            <given-names>K.</given-names>
            <surname>Wolf</surname>
          </string-name>
          .
          <article-title>Petri net model checking with lola 2</article-title>
          .
          <source>In Proceedings Application and Theory of Petri Nets and Concurrency, LNCS 10877</source>
          , pages
          <fpage>351</fpage>
          {
          <fpage>362</fpage>
          ,
          <year>2018</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>