<!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>Visualizing SMT-Based Parallel Constraint Solving</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Jelena Budakovic</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Matteo Marescotti</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Antti E. J. Hyvarinen</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Natasha Sharygina</string-name>
        </contrib>
      </contrib-group>
      <abstract>
        <p>Problem instances arising from a multitude of applications can be naturally reduced to the search for a solution satisfying a set of constraints. Characteristically such applications, that include model checking and the satis ability of propositional formulas (SAT) and SAT modulo theories, are notorious for the computational complexity of the underlying decision problem. A central approach for tackling the hardness of these problems is through the use of parallel computing, with methods such as divide-and-conquer, algorithm portfolios, and their combinations. However, such algorithms are often complicated and it is di cult to assess whether their executions have anomalies. This paper presents a user-friendly interface to analyze the partitioning tree parallelization approach that generalizes both divide-and-conquer and algorithm portfolios. We use the interface to analyze parallel executions of both the IC3/PDR algorithm and an SMT solver, demonstrating its usefulness in visualizing the otherwise complicated executions of diverse algorithms in a parallel environment. Based on the initial results we believe that the visualization of these executions will further encourage the adoption of parallel computing techniques in these domains.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>Representing practical computational questions as instances of decision problems over a set
of constraints is increasingly important as solving methodologies such as Satis ability Modulo
Theories (SMT) and propositional satis ability (SAT) are being adopted by domain specialists
in particular in model checking and veri cation. Problems emerging from these application
domains can be extremely challenging and therefore there is a constant pressure for developing
techniques for applying parallel computing to automatically speed up their solving. Parallel
constraint solving is, however, often a very complicated process, and in particular identifying
and locating problems related to correctness and performance can be an overwhelming task.</p>
      <p>
        Di erent approaches for constraint solving share two basic features that are useful in
obtaining speed-up in parallel computing. First, solving approaches perform often vastly di erently in
seemingly similar instances, motivating the use of algorithm portfolios; and second, the
structure of the instances allows an automatic and often e cient divide-and-conquer approach to
be used. In our experience visualizing these features can help in understanding parallel
executions of a wide range of algorithms. This paper presents a web-service-based visualization
interface for analyzing the parallel executions of constraint-solving algorithms that base on
algorithm portfolios and divide-and-conquer. The goal of the tool is to provide a uniform, clear
understanding of the execution of an algorithm either on-line while the algorithm is running,
or o -line once the algorithm has already terminated. As the underlying abstraction of the
parallel algorithms we use the rich framework of algorithms provided by parallelization trees [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]
supporting arbitrary combinations of divide-and-conquer and algorithm portfolios.
      </p>
      <p>The interface assumes that the execution of a parallelization tree algorithm is stored in a
database, and is therefore made independent of the details of the algorithm. The information is
used for visualizing a snapshot of the parallelization tree in a given time as a schematic picture,
together with descriptions of the running processes. In particular the database describes how
the divide-and-conquer approach is being used to partition a given instance, and what kind of
portfolios are being run on each of the instance or to construct the partitions.</p>
      <p>
        We use the interface to analyze executions of a parallel implementation of the IC3/PDR
algorithm for model-checking safety properties [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] as well as executions of a general-purpose
SMT solver OpenSMT2 [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]. Based on our experience in applying the tool to both SMT solving
and model checking with the IC3/PDR algorithm, we feel con dent that the tool is versatile
and the feedback that it provides from an execution can be used to help understanding and
locating performance problems in parallel algorithms based on parallelization trees.
      </p>
      <p>This paper provides an overview of the problem for both SMT and PDR solving, describes
our solution to the visualization of the executions, and gives a description of the API we use
for communicating with the visualizer. In addition we provide a short tutorial to the visualizer,
and give some implementation-level details.</p>
      <p>
        Related work. Some work exists in visualizing the structure of constraint problems and
the executions of related, sequential search algorithms for propositional satis ability [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] and
ASP [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]. In both of these approaches the information is visualized by rendering a graph that
shows the relationship of variables and constraints where they appear, thereby providing insights
into the structure of an instances. We believe that our approach is the rst made for visualizing
the execution of parallel algorithms and integrates the time component into the system.
      </p>
      <p>
        A veri cation oriented web service allowing users to browse runs of a large number of
veri cation instances is presented in [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. We follow the same ease of use approach by providing
a web service, but, rather than visualizing the results of veri cation runs, we visualize the
execution of one veri cation or constraint solving run.
      </p>
      <p>
        Visualization of parallel executions of constraint logic programs is studied in [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. Similar to
us, the tool allows inspecting the execution at di erent time points and provides a tree view
of the execution. However, the tool is not directly applicable to our setting which uses the
parallelization tree approach.
2
      </p>
    </sec>
    <sec id="sec-2">
      <title>Background</title>
      <p>Due to the di culty of the problems underlying many constraint problems, such as propositional
satis ability, satis ability modulo theories, or symbolic model checking, the constraint solvers
use heuristics to guide their search for a solution. Often these heuristics are very fragile in
the sense that small changes in the heuristic can result in signi cant and often unpredictable
di erences in run times.</p>
      <p>Algorithm portfolios take advantage of this seemingly random behaviour by executing in
parallel several solvers, each initialized with a di erent heuristic. This approach navely
increases search-space covering having each execution taking di erent path, therefore increasing
the probability of guessing a good heuristic. However, in particular for unsatis able problems
there often exists a theoretical or experimental minimum number of steps that the algorithm
needs to take to prove the absence of models, and the use of a portfolio cannot therefore help
in over-passing such a limitation. One way of to overcome the limitation is by applying a
divide-and-conquer approach where the problem is partitioned into several independently
solvable sub-problems, and the solution to the original problem can be obtained by solving the
sub-problems. However, as a result of the partitioning, the solver now has to solve several
problem instances instead of a single one, and the e ciency of the approach depends on the
ability to construct sub-problems that are easier than the original problem.
Algorithm Portfolios and Divide-and-Conquer for SMT and PDR. In this work we
study two di erent approaches for solving constraint problems.</p>
      <p>The Satis ability Modulo Theories (SMT) solvers accept as input formulas in propositional
logic, where some of the Boolean variables are interpreted as equalities in rst-order theories.
The task of the solver is then to nd an assignment to the propositional variables so that the
corresponding equalities and inequalities are consistent in the rst-order theories, or prove the
absence of such assignments.</p>
      <p>The Property-Driven Reachability (IC3/PDR) solvers take as input a transition system and
a safety property, describing respectively a program and a correctness condition. The task of
the solver is then to nd for the transition system an inductive invariant that is valid with
respect to the safety property. This is done by maintaining a sequence of formulas F1; : : : ; Fn
over-approximating the states reachable by the transition system from the initial state in i
steps, and either nding a concrete execution that ends in a state breaking the safety property,
or nding two consecutive formulas Fi; Fi+1 that are equal.</p>
      <p>The former acts as a counterexample for the correctness of the program and the latter as
the safe inductive invariant. For simplicity of the discussion we call the input formula of a PDR
solver satis able if the program is incorrect and unsatis able if the program is correct.</p>
      <p>Both in SMT and PDR we can apply algorithm portfolios and divide-and-conquer. In SMT
we implement the portfolios by randomization, that is, by allowing the branching function
used during the search to occasionally make random choices that go against the heuristic.
In PDR we use, in addition to randomization, di erent methods for constructing the
overapproximations Fi.</p>
      <p>
        Our earlier work in applying divide-and-conquer in SAT [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] and SMT [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] is based on
partitioning the original instance into sub-problems that share no model and, when disjointed, the
resulting formula is equisatis able with the original instance. A similar idea can be applied in
PDR, by applying the transition function backwards from unsafe states, and asking the PDR
solvers to nd solutions to such states.
      </p>
      <p>
        Parallelization Trees. Both algorithm portfolios and divide-and-conquer have their
downsides and interestingly one seems to perform well exactly when the other performs badly [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ].
Therefore it is natural to ask if there is an approach that can performs well in both cases.
The Parallelization Trees are a concept used to formalize the combination of portfolio and
partitioning. The parallelization trees were initially introduced in [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], but for self-containedness
we proved here a short description.
      </p>
      <p>The idea is to describe in a uniform way algorithms where an instance can not only be at
the same time solved by several solvers as in algorithm portfolios, and partitioned into several
sub-problems as in divide-and-conquer, but also partitioned simultaneously in di erent ways to
sub-problems.</p>
      <p>A parallelization tree contains two types of nodes: and-nodes and or-nodes, alternating at
each level. The root of a parallelization tree is an and-node representing the input instance.
Each and-node is associated with a constraint problem and one or more constraint solvers.
The input instance is satis able if the at least one of the instances in the and-nodes is shown
satis able. A subtree rooted at an and-node (including the full tree rooted at the input instance)
is unsatis able if one of its children is unsatis able or at least one of the constraint solvers
working on the instance on the and-node has shown the instance unsatis able. Finally, a tree
rooted at an or-node is unsatis able if every tree rooted at its children is unsatis able.</p>
      <p>
        We refer the reader to [
        <xref ref-type="bibr" rid="ref10 ref7">10, 7</xref>
        ] for further detail about the parallelization tree.
The SMTService Framework. SMTService is a framework and tool for parallel and
distributed constraint solving available at https://scm.ti-edu.ch/projects/smts. While
the visualization tool discussed in his paper is independent from SMTService, we provide
here a short description to help understanding the further discussion.
      </p>
      <p>
        SMTService is used in [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] for distributed SMT solving based on the SMT solver
OpenSMT2 [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ], and we have recent updated the system to also support parallel execution
of the PDR algorithm using the model checker Spacer [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. SMTService supports the
parallelization tree approach for SMT and to some extent PDR, and in addition supports clause
sharing for SMT and lemma sharing (i.e., sharing the formulas Fi) for PDR. The SMTService
framework is meant to be easily integrable with di erent solvers in order to make the study of
parallel techniques more a ordable.
      </p>
      <p>Figure 1 o ers an overview of SMTService. The solving server acts as the central point of
contact for the visualization tool. It contains the control socket, which is the default interface
for interacting with the solving server. In the current implementation a user may provide the
solving server with instances through the terminal access to the control socket. In addition an
external tool requesting the solving of constraint problems may connect to the solving server
for this purpose through the API provided by the control socket. The parallelization algorithm
is provided to the solving server as a partitioning tree described in the con guration.</p>
      <p>The solvers connect directly to the solving server using a persistent TCP/IP connection.
Solvers' failures and connections of new solvers are handled in a gracefully way by the solving
server. The solving server asks each solver to solve a partition following the partitioning tree
provided in the con guration le. The scheduler keeps track of and arranges all solvers'
commitments based on the parallelization tree. In addition the solvers may share lemmas using a
push and pull mechanism provided by the lemma database.</p>
      <p>The process is completely transparent to the solvers, making the system more easy to adapt
for other solver implementations. SMTService provides a set of APIs, and new solvers can
be supported with little e ort by implementing these APIs. This has the added bene t that
di erent solvers can be dynamically added during solving in a transparent way.</p>
      <p>Finally, the events database (Events DB) acts as a bridge between SMTService and
SMTViewer. This database is constantly updated during execution by the Solving Server
with information regarding the solving task performed by the solvers in the cluster. The
information stored in the database are retrieved by SMTViewer in order to provide a visual
analysis of the execution to the solver.
3</p>
    </sec>
    <sec id="sec-3">
      <title>SMTViewer Architecture</title>
      <p>In this section we present SMTViewer, a graphical user interface for analyzing executions
of parallel algorithms based on the parallelization tree. An overview of how SMTViewer
interacts with SMTService is given in Figure 1. We identify the entities involved in this a
architecture as the user, the client web app and the web server. The graphical user interface
o ered by the client web app aims at helping the user to analyze a parallel solving execution
done either with SMTService or any other tool.</p>
      <p>Due to the implementation of the communication through a database containing the events,
the user has the possibility to analyze the parallel solving of SMTService either in real time
or over past executions logs.</p>
      <p>Real time analysis mode enables a live interaction with the internal solving server's
components by interfacing with the control socket. Analyzing past executions may be very helpful
for debugging and identifying performance bottlenecks. For this reason, the user is able to</p>
      <p>Configuration
Solving Server</p>
      <p>Scheduler
Control Socket</p>
      <p>Events DB
Web Server</p>
      <p>Translator
Live task handler</p>
      <p>Solver
Solver</p>
      <p>...</p>
      <p>Solver
Partition / Parameters
Result / Statistics</p>
      <sec id="sec-3-1">
        <title>Cluster</title>
      </sec>
      <sec id="sec-3-2">
        <title>Server</title>
        <p>Events
Requests</p>
        <p>Lemma DB</p>
        <p>User
Web Browser
Client Web App
construct the tree representing each problem as it was at any given moment in the past. The
analysis of the past executions allows visualizing parallel solving information retrieved from
any other tool. This feature is exploitable by providing SMTViewer with a suitable events
database containing the parallel solving information gathered from any external tool execution.
The web server is responsible for retrieving and translating the events, while the client web app
provides the graphical interface for such events to the user.</p>
        <p>In the following we provide details of SMTViewer components. In particular Section 3.1
focuses on SMTViewer API, Sections 4 and 4.1 give details about the web server and the
client web app respectively, while Section 5 provides implementation details.
3.1</p>
        <sec id="sec-3-2-1">
          <title>The SMTViewer API</title>
          <p>This section presents in brief the API of the visualization component, serving as a guide for
implementing the analysis of parallelization-tree-based algorithms.</p>
          <p>The input of SMTViewer is a path to an SQLite3 database containing solving events and
acting as an API for SMTViewer. The database must contain a table called SolvingHistory,
where each record represents an event involving a solver and a node of the parallelization tree
of the instance being solved.</p>
          <p>Table 1 shows the required format. Each row of the table represents an event described by
a unique identi er, its Unix timestamp, the solver working on a node of parallelization tree of
the given instance, the event type, and nally a generic data eld. The data eld has di erent
meaning accordingly to the event type and the solver. A list of all event types with the expected
content of the data eld is given below.</p>
          <p>+ : solver is assigned to work on node
- : solver working on node is requested to stop.</p>
          <p>OR : an OR node is created. The data eld contains partitioning heuristic details.
AND : an AND node (i.e. a sub-problem) is created. The data eld represents the
constraints of this partition and must contain a node entry with the path of the new node.
STATUS : the solver proved the satis ability or unsatis ability of the node it was working
on. The data eld contains all the statistics of the entire solving task done by the solver.
SOLVED : the satis ability of the root was determined, and therefore the instance name is
solved. The data eld provides statistics about the entire parallel solving.
4</p>
        </sec>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>The Tool Usage</title>
      <p>This section serves as a usage manual for the visualization tool. When the user analyses a
past execution the client web app asks the web server for the content of the database and
arranges its views according to the user request. Instead, when SMTViewer is con gured for
real-time analysis, the client web app constantly asks the web server for new events available in
the database and re-arranges its views accordingly. In this way the graphical user interface is
always updated providing a real-time overview of the solving tasks going on inside the cluster.</p>
      <p>The terminal access to the control socket provides a wide range of functionalities for
interfacing with the internal behaviour of the solving server, involved only in real-time analysis.
The client web app provides a restricted set of the functionalities o ered by the control socket.
Currently three kinds of requests are supported: uploading a new instance for the solving
server to be solved; setting a di erent timeout for a solver; and stopping the solving of the
current instance. Once the user sends one of these requests through the client web app, the
live task handler is responsible for creating the proper request to the control socket and thus
for interacting with the solving server.</p>
      <p>The translator component of the web server is responsible for translating database events
to the form needed by the client web app. This modular approach prevents a propagation of
code maintenance otherwise needed in case the events database format is changed.</p>
      <p>In the case of real time analysis, the events database is periodically checked for changes on
a prede ned time interval. In this way, a user monitoring the execution in real-time using the
client web app is immediately updated with new informations.
4.1</p>
      <sec id="sec-4-1">
        <title>Client Web App</title>
        <p>All the necessary information required to build the graphical interface is gathered by the web
server and sent to the client web app. The mechanisms involved in the construction of the tree
view and the management of the data are done at the client side by the web browser while
executing the client web app.</p>
        <p>The data received from the web server is displayed throughout six di erent views. In this
way the user can interactively analyze the execution of SMTService, retrieving statistics,
parameters and past events according to his needs. We provide a brief explanation for each
interface view. Figure 2 shows SMT Viewer client web app with its six views.
Instance view. A list of all problems belonging to the current execution is shown here. The
user may select a particular instance from this view for the analysis.</p>
        <p>Events view. The view is composed of two interactive components: a table showing all the
events related to the selected instance, and a time-line displaying how this events are distributed
over time. When the user selects an event or a point in the time-line, all the other views are
updated accordingly to the ongoing status at that time. This allows the user to \rewind" the
solving execution and better analyze every event involved during solving. Browsing the past
is the typical way for nding performance problems and other anomalies, and we found the
interactiveness to be useful in this task.</p>
        <p>Tree view. The parallelization tree is represented here as an interactive tree. Each node is
associated with an integer indicating the number of solvers working on the related instance.
Clicking on the node results in all the node-speci c information being updated in data view. The
colour of the nodes changes accordingly to the type (and- or or-nodes) and status (satis able,
unsatis able or unknown)
Solvers view. This view shows each solver together with its assigned node at the time of the
selected event in the events view. The user can then analyze how many solvers were present
and to which node they were assigned at each phase of the solving process. When a node in
the tree is selected, the solvers working on it at that time are highlighted in this view in order
to be easily discovered.</p>
        <p>Data view. This view is for visualizing the data eld related to the selected event. All the
data related to the tree nodes, the solvers, and the events are displayed here when each of them
is clicked.</p>
        <p>Control view. This view changes accordingly to the selected mode. On real time analysis
mode, the view allows the live interaction with the solving server through the SMTService
control socket. We examining past executions, the user can upload di erent databases to be
analyzed.</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Implementation Details</title>
      <p>In order to have an easily maintainable and modern style implementation we use several recent
frameworks and tools available for web development, in addition to some very well established
techniques.</p>
      <p>The web server is built using NodeJS and Express frameworks. The SQLite3 module
for NodeJS is used for opening and reading the events database. The web server translator
uses pure Javascript for JSON event formatting. The live task handler uses a TCP socket
to communicate with the SMTService control socket.</p>
      <p>The web browser is required to support HTML5, Javascript and CSS3. We use the
frameworks AngularJS for user events handling and W3.CSS for page layout.</p>
      <p>The Typescript language is used for the entire class hierarchy necessary for event handling
and arrangement. The graphic library D3 is responsible for visualizing the events in a tree view.
The time-line present in event view is constructed using HTML5 features.
6</p>
    </sec>
    <sec id="sec-6">
      <title>Conclusion</title>
      <p>The increasing popularity of constraint solvers ensures a steady ow of increasingly complex
problem instances for such solvers. This phenomenon is visible in particular in domains such
as SMT solving and model checking. Although parallelization is known to speed up the solving
of such problems, many researchers remain skeptical of the technique due to its complicated
nature and di culties in implementation.</p>
      <p>The tool presented in this paper aims at simplifying the study of parallel techniques by
providing a user-friendly graphical interface. In particular we focus on helping users to understand
and analyze the partitioning tree parallelization approach. The user is able to analyze the
solving process by retrieving all the necessary information at any time of an execution. We believe
that this new service will help users to be more con dent with parallel computing techniques,
encouraging the community to develop new e cient decision procedures for constraint solving.
Acknowledgements. This work is supported by the Swiss National Science Foundation
(SNSF) grants 153402 and 166288.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>D.</given-names>
            <surname>Beyer</surname>
          </string-name>
          and
          <string-name>
            <given-names>M.</given-names>
            <surname>Dangl</surname>
          </string-name>
          .
          <article-title>Veri cation-aided debugging: An interactive web-service for exploring error witnesses</article-title>
          .
          <source>In Proc. CAV</source>
          <year>2016</year>
          , volume
          <volume>9780</volume>
          <source>of LNCS</source>
          , pages
          <volume>502</volume>
          {
          <fpage>509</fpage>
          . Springer,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>A. R.</given-names>
            <surname>Bradley</surname>
          </string-name>
          .
          <article-title>SAT-based model checking without unrolling</article-title>
          .
          <source>In Veri cation, Model Checking, and Abstract Interpretation - 12th International Conference, VMCAI</source>
          <year>2011</year>
          , Austin, TX, USA, January
          <volume>23</volume>
          -
          <issue>25</issue>
          ,
          <year>2011</year>
          . Proceedings, pages
          <volume>70</volume>
          {
          <fpage>87</fpage>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>M.</given-names>
            <surname>Carro</surname>
          </string-name>
          and
          <string-name>
            <given-names>M. V.</given-names>
            <surname>Hermenegildo</surname>
          </string-name>
          .
          <article-title>Tools for search-tree visualisation: The APT tool</article-title>
          . In P. Deransart,
          <string-name>
            <given-names>M. V.</given-names>
            <surname>Hermenegildo</surname>
          </string-name>
          , and J. Maluszynski, editors,
          <article-title>Analysis and Visualization Tools for Constraint Programming, Constrain Debugging (DiSCiPl project)</article-title>
          , volume
          <volume>1870</volume>
          <source>of LNCS</source>
          , pages
          <volume>237</volume>
          {
          <fpage>252</fpage>
          . Springer,
          <year>2000</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>A. E. J.</given-names>
            <surname>Hyva</surname>
          </string-name>
          rinen, T. Junttila,
          <string-name>
            <surname>and I.</surname>
          </string-name>
          <article-title>Niemela. A distribution method for solving SAT in grids</article-title>
          .
          <source>In Proc. SAT</source>
          <year>2006</year>
          , volume
          <volume>4121</volume>
          <source>of LNCS</source>
          , pages
          <volume>430</volume>
          {
          <fpage>435</fpage>
          . Springer,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>A. E. J.</given-names>
            <surname>Hyva</surname>
          </string-name>
          rinen, T. A.
          <string-name>
            <surname>Junttila</surname>
            ,
            <given-names>and I.</given-names>
          </string-name>
          <article-title>Niemela. Partitioning search spaces of a randomized search</article-title>
          .
          <source>Fundamenta Informaticae</source>
          ,
          <volume>107</volume>
          (
          <issue>2-3</issue>
          ):
          <volume>289</volume>
          {
          <fpage>311</fpage>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>A. E. J.</given-names>
            <surname>Hyva</surname>
          </string-name>
          rinen,
          <string-name>
            <given-names>M.</given-names>
            <surname>Marescotti</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Alt</surname>
          </string-name>
          , and
          <string-name>
            <surname>N. Sharygina.</surname>
          </string-name>
          <article-title>OpenSMT2: An SMT solver for multi-core and cloud computing</article-title>
          .
          <source>In Proc. SAT</source>
          <year>2016</year>
          ,
          <article-title>number</article-title>
          9710 in LNCS, pages
          <volume>547</volume>
          {
          <fpage>553</fpage>
          . Springer,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>A. E. J.</given-names>
            <surname>Hyva</surname>
          </string-name>
          <article-title>rinen, M. Marescotti, and</article-title>
          <string-name>
            <given-names>N.</given-names>
            <surname>Sharygina</surname>
          </string-name>
          .
          <article-title>Search-space partitioning for parallelizing SMT solvers</article-title>
          .
          <source>In Proc. SAT</source>
          <year>2015</year>
          , volume
          <volume>9340</volume>
          <source>of LNCS</source>
          , pages
          <volume>369</volume>
          {
          <fpage>386</fpage>
          . Springer,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>A.</given-names>
            <surname>Komuravelli</surname>
          </string-name>
          ,
          <string-name>
            <surname>A.</surname>
          </string-name>
          <article-title>Gur nkel, and</article-title>
          <string-name>
            <given-names>S.</given-names>
            <surname>Chaki</surname>
          </string-name>
          .
          <article-title>SMT-based model checking for recursive programs</article-title>
          .
          <source>Formal Methods in System Design</source>
          ,
          <volume>48</volume>
          (
          <issue>3</issue>
          ):
          <volume>175</volume>
          {
          <fpage>205</fpage>
          ,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>A.</given-names>
            <surname>Ko</surname>
          </string-name>
          <article-title>nig and</article-title>
          <string-name>
            <given-names>T.</given-names>
            <surname>Schaub</surname>
          </string-name>
          .
          <article-title>Monitoring and visualizing answer set solving</article-title>
          .
          <source>TPLP</source>
          ,
          <volume>13</volume>
          (
          <issue>4</issue>
          -5-OnlineSupplement),
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>M.</given-names>
            <surname>Marescotti</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A. E. J.</given-names>
            <surname>Hyva</surname>
          </string-name>
          <article-title>rinen, and</article-title>
          <string-name>
            <given-names>N.</given-names>
            <surname>Sharygina</surname>
          </string-name>
          .
          <article-title>Clause sharing and partitioning for cloudbased SMT solving</article-title>
          .
          <source>In Automated Technology for Veri cation and Analysis - 14th International Symposium, ATVA</source>
          <year>2016</year>
          , Chiba, Japan,
          <source>October 17-20</source>
          ,
          <year>2016</year>
          , Proceedings, pages
          <volume>428</volume>
          {
          <fpage>443</fpage>
          ,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>C.</given-names>
            <surname>Sinz</surname>
          </string-name>
          .
          <article-title>Visualizing SAT instances and runs of the DPLL algorithm</article-title>
          .
          <source>J. Autom. Reasoning</source>
          ,
          <volume>39</volume>
          (
          <issue>2</issue>
          ):
          <volume>219</volume>
          {
          <fpage>243</fpage>
          ,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>