<!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>Algebraic Techniques in Software Verification : Challenges and Opportunities</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Martin Brain</string-name>
          <email>martin.brain@cs.ox.ac.uk</email>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Daniel Kroening</string-name>
          <email>daniel.kroening@cs.ox.ac.uk</email>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Ryan McCleeary</string-name>
          <email>ryan-mccleeary@uiowa.edu</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>University of Iowa</institution>
          ,
          <country country="US">USA</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>University of Oxford</institution>
        </aff>
      </contrib-group>
      <abstract>
        <p>-One of the main application areas and driving forces behind the development of Satisfiability Modulo Theory (SMT) solvers is software verification. The requirements of software verification are somewhat different to other applications of automated reasoning, posing a number of challenges but also providing some interesting opportunities. This paper brings together and summarises the algebras and structures of interest, along with some of the problems that are characteristic of software verification. It is hoped that this will allow computer algebra researchers to assess the applicability of their techniques to this challenging, but rewarding domain. Software verification is the prototypical application domain for Satisfiability Modulo Theory (SMT) solvers. There are many aspects of the two research fields that show a significant degree of co-evolution. For example, the central role of theories (and the theories that are available - for example bit-vectors and arrays) can be seen as a formalisation of the domain specific decision procedures that were used in early verification systems [1]. Universal quantification is challenging for most SMT solver algorithms, leading to poor performance and thus many software verification systems avoid generating quantifiers. Likewise the importance of model generation1 is in part driven but the utility of these models for providing execution or error traces in verification systems. The coevolution can also be seen in the SMT-LIB benchmarks which feature many benchmark collections generated by verification tools. This paper aims to highlight some of the requirements and 'evolutionary pressures' that software verification places on SMT solver development. It is hoped that this context will help computer algebra researchers to identify, develop and refine algorithms so that they can demonstrate impact on commercial-scale software verification problems. The topics raised are a mix between challenges that have to be overcome and opportunities in under-explored / critical areas.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>I. FORMULA SHAPE</title>
      <p>Challenge: Tolerate irrelevant formulae. The formulae
generated by verification tools tend to be very different from those
generated by human modelling of problems. One of the real
challenges of mathematical modelling is reducing the problem
to a minimal core which captures the key challenge. This is a
process which requires considerable intuition and experience
and it is not clear whether automating it is even possible.
Consequentally, compared to directly human generated formulae,
the formulae generated by verification tools are much larger
and contain a significant amount of ‘simple’ and ‘irrelevant’
parts.</p>
      <p>
        Opportunity: Exploit disequalities and if-then-else. Software
verification problems tend to produce formulae with some
Boolean structure, particularly from the use of if-then-else
expression to model different paths of execution. One of the
advantages of the DPLL(T)[
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] algorithm is that theory solvers
do not need to handle the Boolean structure of the formula.
The SAT solver will provide a partial assignment to the
theory literals and the theory solver must determine if they are
consistent. Unlike traditional algebra problems, this includes
equalities that are assigned to false and if-then-else operations.
Exploiting this additional information is likely to improve
performance but may require (or enable) new approaches to
some problems.
      </p>
      <p>Challenge: Handle inequalities. Another feature common in
software verification problems that is not classically algebraic
is the use of inequalities. Although there are some
applications, such as equivalence checking, that are possible without
inequalities, the frequency of ordering comparisons in most
real software means these are a critical requirement.</p>
      <p>II. ALGEBRAS AND STRUCTURES OF INTEREST
As well as having formula structure unlike conventional,
human generated algebraic problems, software verification
problems also tend to use unconventional algebras and
relational structures. A minority of software verification systems
use integers2 and reals to model variables, particularly those
focused on algorithm rather than program verification.
However this approach seems to becoming less common as these
do not capture the full behaviour of real systems (overflow,
rounding, etc.) and also increase the complexity of the decision
procedure.</p>
      <p>
        Core to the performance of SMT solvers on software
verification problems is their handling of the theory of fixed
width bit-vector[
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. Variables in this theory are interpreted as
bit-vectors of a given size, operations are a mix of (modular)
1Generating a model or witness is often regard as part of a satisfiability
check, particularly for Boolean satisfiability but is not formally required.
2Sometimes referred to as “mathematical integers” to distinguish them from
the integer types in programming languages.
arithmetic (plus, multiply, divide, etc.), logical operations (and,
xor, shift, etc.) and structural (extract, concatinate, etc.) with
predicates for signed and unsigned comparisons. Although
there have been some interesting alternatives proposed[
        <xref ref-type="bibr" rid="ref4">4</xref>
        ], [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ],
most solvers still use “bit-blasting”; converting the expressions
to a Boolean circuit and using a SAT solver. Optimal circuits
are known for some operations[
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] but others such as
multiplication, division and variable shifts introduce additional
difficulty which can, in some cases, cause the solver to
time-out for even “simple” queries. Given this fundamental
limitation of current solvers and the significance of bit-vectors
to application performance, better handling of these formula
would be of major benefit.
      </p>
      <p>Opportunity: Sub-algebras. The range of operations in the
theory of bit-vectors makes it hard to find decision procedures
that work well for arbitrary formulae. However for many
applications, groups of variables will only ever use a handful
of operations. For example, variables used as counters will
only assign constants, increment and check against bounds,
variables that are used as bitmaps are rarely used in
multiplications and the bitwise operations form a Boolean algebra,
many modern cryptographic algorithms only use add, roll and
xor (ARX) and floating-point operations make heavy use of a
max-plus algebra with signed comparison. Thus finding useful
sub-signatures of the theory of bit-vectors, identifying their
algebraic structure and then building decision procedures that
exploit this structure seems like a promising research direction.</p>
      <sec id="sec-1-1">
        <title>B. Floating-Point</title>
        <p>Many software verification applications concern control
systems which must use sensor data to control a real-world
system (aircraft, train, industrial robots, UAVs, autonomous
cars, “cyber-physical systems”, etc.). Pure integer and
fixedpoint control systems are becoming a rarity with most control
systems using floating-point. Thus there is a significant
commercial drive for verification systems to handle floating-point
numbers efficiently and effectively.</p>
        <p>The so-called “standard model” converts floating-point
expressions to real expressions. For example, if f and g are
floating-point variables and r denotes floating-point addition
with rounding mode r:
f
r g
;
(f + g)(1 + )
j j 6
where is a small, format dependent constant. Although
this model is simple, it has a number of limitations. An
extensive set of side condition are required to correctly model
actual hardware (no overflows, no subnormal numbers, etc.)
and often these are the precise conditions we are trying to
identify. If these are used then the standard model is an
overapproximation of the behaviour of hardware, meaning that
spurious SAT results can be given. Worse from an application
point of view is that it is difficult to generate the bit-exact
traces needed to assess, diagnose and fix real systems.</p>
        <p>
          As a consequence, a theory of floating-point numbers[
          <xref ref-type="bibr" rid="ref7">7</xref>
          ]
has been developed and added to the SMT-LIB standard. Its
formalisation makes use of sets Fe;s of floating-point numbers
with e exponent and s significand bits, plus R an extension
of R with infinities and not-a-number. A family of
orderpreserving functions vFe;s : Fe;s ! R give the real value of
a floating-point number and round picks between the adjoints
of v and applies one, to map back into Fe;s, thus:
f
r g
;
round(r; v(f) + v(g)):
This approach allows bit-exact specification of floating-point
numbers with a minimal number of edge-cases and a maximal
amount of algebraic structure.
        </p>
        <p>
          Opportunity: Algebraic techniques on R . vFe;s has
relatively little algebraic structure – floating-point addition and
multiplication are famously non-associative. As not-a-number
is absorbing for all operations, R is not a field but it is
an additive and multiplicative commutative monoid with the
associativity property [
          <xref ref-type="bibr" rid="ref8">8</xref>
          ] and so semi-ring decision procedures
may be applicable.
        </p>
        <p>Opportunity: Mixed real and float. If v and round can be
handled then this may not only be able to handle floating-point
problems but also mixed float and real problems which are of
considerable commercial interest.</p>
      </sec>
      <sec id="sec-1-2">
        <title>C. Differential Theories</title>
        <p>Another interest driven by control systems is that of
reasoning about differential equations. Most control systems are
developed with respect to a model of the environment with
which they are interacting. This is normally formalised as a
system of differential equations. However due to limitations
of the solver technology this is not directly used in the
verification, instead a computational model is built. If solvers
could handle differential equations of some form, it could
significantly increase the ability of tools to verify these
cyberphysical systems.</p>
        <p>
          Opportunity: Symbolic algorithms for differential systems.
dReal [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ] has made some impressive progress using numerical
methods for handling differential equations. Using symbolic
algorithms has yet to be explored but may have great potential.
        </p>
      </sec>
    </sec>
    <sec id="sec-2">
      <title>III. BEYOND SATISFIABILITY</title>
      <p>Determining formula satisfiability is the core role of SMT
solvers. However there are a number of similar and related
symbolic reasoning tasks, both inside and outside the solver,
that have significant practical impact and present interesting
opportunities for applying algebraic techniques.</p>
      <sec id="sec-2-1">
        <title>A. Expression Simplification</title>
        <p>Expression simplification is a vital component in most
SMT solvers and program verification systems. It is used for
performing constant folding ((x + 1) + 1 ; x + 2),
simplifications (x &lt;= x ; true) and normalisation
(!(x &gt;= y) ; x &lt; y). Although the rewriting steps are
generally simple, their effects can be drastic. For example,
given unsigned integers x, y and z of more than 16 bit:
assert((x * y) * z == x * (y * z));
will cause most bit-vector decision procedures to time out but
can be trivially resolved by a distributivity aware simplifier.</p>
        <p>
          Opportunity: Improved simplification For such a key
component of solvers, there is relatively little in the conventional
published literature. There are papers that mention the number
of simplification rules used [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ] or discuss their importance
to particular applications [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ]. However there seems to be
little discussion of whether these sets are complete, whether
the popular architecture (stateless / context-free rewrites
implemented as ad-hoc tree-walks) is best, whether they could
or should be used during the solve process rather than just
before. Given the similarity to rule-based differentiation and
integration algorithms, there might be techniques, best
practices and ideas from the computer algebra community that
could revolutionise the role of expression simplification in
SMT solver.
        </p>
      </sec>
      <sec id="sec-2-2">
        <title>B. Fixed-Points and Approximation</title>
        <p>Current algorithms and verification systems are often built
“on top of” SMT solvers. The solver (or solvers) are the lowest
level component in the algorithm and satisfiability queries are
used as a way of checking inclusion or intersection between
sets (represented symbolically, using equations). This
architecture has proven flexible and effective. However if the reasoning
system can perform more than just satisfiability queries it can
be used at a higher level within verification algorithms. This
section presents verification algorithms ‘from the top down’,
highlighting the other kinds of symbolic reasoning task that
arise.</p>
        <p>1) The Verification Question: We present a simple model
of software verification using the transition systems view.
This is perhaps idiomatic of the model checking community,
especially hardware model checking but it nicely illustrates
some of the key challenges.</p>
        <p>Let x be a set of variables and v a set of values. A map
s : x ! v that assigns value to variables is referred to as a
state (in the context of transition systems) or a valuation (in
the context of logical formulae). Let statesx;v denote x ! v,
the space of all such maps. Critical to symbolic verification
is the idea that we can use a formula (over x) to represent a
set of states. To make the distinction between sets represented
by formulae and sets described by other means, we will use
JF (x)K to denote the set of all valuations (states) that satisfy
formula F (x).</p>
        <p>A symbolic representation of a transition system requires a
formula for the initial states, I(x) and a formula that describes
the transition relation between sets T (x; x0). As our interest
will be in the sets of states which are reachable from a given
set of states, we define forwards and backwards reachability
steps:</p>
        <sec id="sec-2-2-1">
          <title>F RStep(S)</title>
        </sec>
        <sec id="sec-2-2-2">
          <title>BRStep(S)</title>
          <p>=
=</p>
          <p>F RStep : 2statesx;v ! 2statesx;v
S [ ft 2 2statesx;v jT (s; t) ^ s 2 Sg
BRStep : 2statesx;v ! 2statesx;v</p>
          <p>
            S [ ft 2 2statesx;v jT (t; s) ^ s 2 Sg
Both of these are monotonic and increasing on 2statesx;v , a
complete lattice, so by the Knaster-Tarski theorem they have
fixed-points which form a complete lattice [
            <xref ref-type="bibr" rid="ref12">12</xref>
            ]. We use lf p
to denote the least fixed-point of a function and define LF P
to give the least fixed-point above a given set (S):
LF P : M ono(2statesx;v ! 2statesx;v )
2statesx;v ! 2statesx;v
LF P (f )(S)
          </p>
          <p>= lf p( X:f (X [ S))</p>
          <p>For simplicity we will consider safety properties; those
which are false if there is an execution trace from an initial
state to an unsafe state. P (x) is a formula describing the set
of safe states and thus:</p>
        </sec>
        <sec id="sec-2-2-3">
          <title>F Reach</title>
          <p>BReach
system safe
system safe
=
=
,</p>
          <p>LF P (F RStep; JI(x)K)
LF P (BRStep; J:P (x)K)
F Reach JP (x)K</p>
          <p>BReach \ JI(x)K = ;</p>
          <p>If a formula describing F Reach or BReach can be found,
then showing system safety reduces to a single satisfiability
check. However there are no guarantees that the fixed-point
can be described by a formulae and even when they can,
there are few algorithms that can compute them. For example,
consider the following two loops, with variables in N, one
has a simple, computable fix-point, the other remains an open
question:
while (i &lt; n) {</p>
          <p>a[i] = n;
}
}
while (i != 1) {
if (i % 2 == 0) i = i/2;
else i = 3*1 + 1;</p>
          <p>Opportunity: Finding exact fixed-points. There are many
interesting questions related to exact descriptions of
fixedpoints; both theoretical (When does an expression over
language L have a fixed-point representable in L’? Is finding it
computable?) and practical (What are algorithms to compute
them? Are there subsets of expressions for which fixed-point
formula can be easily found?).</p>
          <p>2) Approximate Approachs to Verification: When faced
with a intractable or computationally expensive problem, a
common approach in software verification is to approximate.
If:</p>
          <p>U</p>
        </sec>
        <sec id="sec-2-2-4">
          <title>F Reach</title>
          <p>O ^ O
F Reach ^ :(U</p>
          <p>JP (x)K )
JP (x)K )
system safe
:system safe</p>
          <p>Thus we have reduced the problem from computing
fixedpoints to finding (formulae that describe) sets of states that
approximate the fix-points. From the definition of F Reach
we have necessary and sufficient conditions for over and under
approximations:
JI(x)K</p>
        </sec>
        <sec id="sec-2-2-5">
          <title>LF P (F RStepo; Inito)</title>
          <p>Inito ^ F RStep 6 F RStepo
U</p>
        </sec>
        <sec id="sec-2-2-6">
          <title>LF P (F RStepu; Initu)</title>
          <p>(1)</p>
          <p>Initu JI(x)K ^ F RStepu 6 F RStep (2)
Different approaches to verification can be seen as different
ways of finding solutions to equations (1) or (2). Some of
these are known as property directed and make of P (x) so
they produce an approximation that allows the safety of the
system to be determined. For example, the Hoare logic system
uses inductive invariants; formula Inv(x) such that:
I(x) ) Inv(x)</p>
          <p>Inv(x) ^ T (x; x0) =) Inv(x0):
This is a sufficient condition for (1) and has the advantage that
it is stated purely in terms of formulae, reducing the problem to
existential second-order logic. Bounded model checking aims
using a sequence of solutions of (2), first I(x), then
I(x) _ (I(x ) ^ T (x ; x));</p>
          <p>next
I(x) _ (I(x ) ^ T (x ; x)) _ (I(x ) ^ T (x ; x ) ^ T (x ; x));
and so on. These do not have fixed-points or second-order
variables and thus can be solved with simple satisfiability
calls. Abstract interpretation can be seen as picking F RStepo
(abstract transformer) and Inito (initial abstract state) in
such a way that LF P (F RStepo; Inito) is computable in the
abstract domain.</p>
          <p>Opportunity: Finding fixed-point approximations. As with
computing exact fixed-points, there are both theoretical and
practical challenges. Finding new sufficient solutions to (1)
and (2), especially those without fixed-points or, ideally,
second-order quantification would likely yield new algorithms.
A classification theorem of what solutions exist or necessary
conditions would also be of great interest. Practically,
algorithms that compute over or under approximations, either using
one of the sufficient conditions (such as finding invariants) or
directly (as abstract interpretation does) are of great interest.</p>
          <p>3) Pre-Image, Post-Image and Merging: One approach to
computing solutions to (1) and (2) is to perform stepwise
approximations. This requires approximating the pre or post
image of the transition relation and being able to merge two
or more approximations. Pre and post image approximations
can be described as finding the strongest (setwise smallest)
O(x) or the weakest (setwise largest) U (x) that satisfies the
appropriate formulae (given either P re or P ost):
Forwards Over : P re(x) ^ T (x; x0) ) O(x0)
Forwards Under : U (x0) ) P re(x) ^ T (x; x0)
Backwards Over : P ost(x0) ^ T (x; x0) ) O(x)</p>
          <p>Backwards Under : U (x) ) P ost(x0) ^ T (x; x0)
Although these involve second-order quantification (we are
searching for formula), they do not involve fixed-points and
are significantly more practical.</p>
          <p>Merging of approximations is needed when multiple control
flow paths converge, for example after an if statement or after
a loop. It is sufficient to take the disjunction of the two formula
but this tends to lead to unacceptable growth in formula size.
Thus it is useful to be able to find the smallest O(x) or largest
U (x) such that:</p>
          <p>O1(x) _ O2(x) ) O(x)</p>
          <p>U (x) ) U1(x) _ U2(x)</p>
          <p>
            Opportunity: Step-wise Approximations. Computing abstract
pre and post-images can clearly be seen in algebraic terms.
Quantifier elimination, either via CAD [
            <xref ref-type="bibr" rid="ref13">13</xref>
            ] or virtual term
substitution [
            <xref ref-type="bibr" rid="ref14">14</xref>
            ], can give exact results for these, is it possible
to modify them to give faster under or over approximate
answers? Computing a convex hull (or the dual, ‘convex
interior’) is a way of merging, as is formula simplification.
Out of all of the opportunities high-lighted this seems to be
the one the is most directly accessible and closest to existing
work in computer algebra.
          </p>
          <p>
            4) Reducing Second-Order Quantification: The preceding
sections have reduced computing system correctness to finding
formulae with the required properties; effectively solving
existential second-order logic. Templates are a commonly used (for
example [
            <xref ref-type="bibr" rid="ref15">15</xref>
            ]) technique to reduce second-order quantification
to first-order quantification. For example, using a template of
l 6 x ^ x 6 u, computing a (property directed) invariant can
be reduced to finding (vectors of) constants l and K such that:
          </p>
          <p>
            I(x)
l 6 x ^ x 6 u ^ T (x; x0)
l 6 x ^ x 6 u
)
)
)
l 6 x ^ x 6 u
l 6 x0 ^ x0 6 u
P (x)
which requires a solver that can handle quantification
alternation but is purely first-order logic. In abstract interpretation
terms the template can be seen as characterising an abstract
domain [
            <xref ref-type="bibr" rid="ref15">15</xref>
            ]; the one given in the example is an interval
abstraction.
          </p>
          <p>Opportunity: Template algorithms. Algorithms for working
with specific templates are of great utility as evidenced by the
range of abstract domains that are currently in use. Algorithms
that can work with arbitrary templates or templates that
are monotonic with respect to the constants have received
some initial investigation but there are likely to be significant
theoretical and practical gains to be made. Efficient
implementations of such algorithms allow user specified templates but
also allow templates to be chosen automatically, effectively
refining the abstraction.</p>
        </sec>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>IV. CONCLUSION</title>
      <p>Modern software verification techniques are heavily
dependent on efficient SMT solvers. Correspondingly SMT solver
development is often motivated, inspired and justified by
software verification applications. It is hoped that this paper
acts as a guide for computer algebra researchers to understand
this synergy, and appreciate some of the places algebraic
approaches could be fruitfully deployed and to get involved!</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>D.</given-names>
            <surname>Detlefs</surname>
          </string-name>
          , G. Nelson, and
          <string-name>
            <given-names>J. B.</given-names>
            <surname>Saxe</surname>
          </string-name>
          , “
          <article-title>Simplify: A theorem prover for program checking</article-title>
          ,
          <source>” J. ACM</source>
          , vol.
          <volume>52</volume>
          , no.
          <issue>3</issue>
          , pp.
          <fpage>365</fpage>
          -
          <lpage>473</lpage>
          , May
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>H.</given-names>
            <surname>Ganzinger</surname>
          </string-name>
          , G. Hagen,
          <string-name>
            <given-names>R.</given-names>
            <surname>Nieuwenhuis</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Oliveras</surname>
          </string-name>
          , and
          <string-name>
            <given-names>C.</given-names>
            <surname>Tinelli</surname>
          </string-name>
          , “
          <string-name>
            <surname>DPLL</surname>
          </string-name>
          (T):
          <article-title>Fast decision procedures,” ser</article-title>
          . LNCS,
          <string-name>
            <given-names>R.</given-names>
            <surname>Alur</surname>
          </string-name>
          and
          <string-name>
            <given-names>D. A.</given-names>
            <surname>Peled</surname>
          </string-name>
          , Eds., vol.
          <volume>3114</volume>
          . Heidelberg, Germany: Springer-Verlag,
          <year>July 2004</year>
          , pp.
          <fpage>175</fpage>
          -
          <lpage>188</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>C.</given-names>
            <surname>Barrett</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Fontaine</surname>
          </string-name>
          , and
          <string-name>
            <given-names>C.</given-names>
            <surname>Tinelli</surname>
          </string-name>
          , “
          <article-title>The SMT-LIB standard: Version 2</article-title>
          .5.” [Online]. Available: http://smt-lib.org
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>L.</given-names>
            <surname>Hadarean</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Bansal</surname>
          </string-name>
          , D. Jovanovic´,
          <string-name>
            <given-names>C.</given-names>
            <surname>Barrett</surname>
          </string-name>
          , and
          <string-name>
            <given-names>C.</given-names>
            <surname>Tinelli</surname>
          </string-name>
          ,
          <article-title>A Tale of Two Solvers: Eager and Lazy Approaches to Bit-Vectors</article-title>
          . Cham: Springer International Publishing,
          <year>2014</year>
          , pp.
          <fpage>680</fpage>
          -
          <lpage>695</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>A.</given-names>
            <surname>Zeljic´</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C. M.</given-names>
            <surname>Wintersteiger</surname>
          </string-name>
          , and
          <string-name>
            <given-names>P.</given-names>
            <surname>Ru</surname>
          </string-name>
          <article-title>¨ mmer, Deciding Bit-Vector Formulas with mcSAT</article-title>
          .
          <source>Cham</source>
          : Springer International Publishing,
          <year>2016</year>
          , pp.
          <fpage>249</fpage>
          -
          <lpage>266</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>M.</given-names>
            <surname>Brain</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Hadarean</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Kroening</surname>
          </string-name>
          , and
          <string-name>
            <given-names>R.</given-names>
            <surname>Martins</surname>
          </string-name>
          , “
          <article-title>Automatic generation of propagation complete sat encodings,” in Verification, Model Checking, and Abstract Interpretation, ser</article-title>
          . Lecture Notes in Computer Science,
          <string-name>
            <given-names>B.</given-names>
            <surname>Jobstmann and M. K. R. Leino</surname>
          </string-name>
          , Eds., vol.
          <volume>9583</volume>
          . Heidelberg, Germany: Springer-Verlag,
          <year>January 2016</year>
          , pp.
          <fpage>536</fpage>
          -
          <lpage>556</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>M.</given-names>
            <surname>Brain</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Tinelli</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Ruemmer</surname>
          </string-name>
          , and T. Wahl, “
          <article-title>An automatable formal semantics for ieee-754 floating-point arithmetic,” SMT-LIB, Tech</article-title>
          . Rep.,
          <year>2014</year>
          . [Online]. Available: http://smt-lib.org/papers/BTRW14.pdf
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8] --, “
          <article-title>An automatable formal semantics for ieee-754 floating-point arithmetic,”</article-title>
          <source>in IEEE Symposium on Computer Arithmetic</source>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>S.</given-names>
            <surname>Gao</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Kong</surname>
          </string-name>
          , and
          <string-name>
            <given-names>E. M.</given-names>
            <surname>Clarke</surname>
          </string-name>
          ,
          <article-title>dReal: An SMT Solver for Nonlinear Theories over the Reals</article-title>
          . Berlin, Heidelberg: Springer Berlin Heidelberg,
          <year>2013</year>
          , pp.
          <fpage>208</fpage>
          -
          <lpage>214</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>A.</given-names>
            <surname>Cimatti</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Griggio</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B. J.</given-names>
            <surname>Schaafsma</surname>
          </string-name>
          , and
          <string-name>
            <given-names>R.</given-names>
            <surname>Sebastiani</surname>
          </string-name>
          ,
          <article-title>The MathSAT5 SMT Solver</article-title>
          . Berlin, Heidelberg: Springer Berlin Heidelberg,
          <year>2013</year>
          , pp.
          <fpage>93</fpage>
          -
          <lpage>107</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>V.</given-names>
            <surname>Ganesh</surname>
          </string-name>
          and
          <string-name>
            <given-names>D. L.</given-names>
            <surname>Dill</surname>
          </string-name>
          , “
          <article-title>A decision procedure for bit-vectors and arrays,” ser</article-title>
          . Lecture Notes in Computer Science, W. Damm and H. Hermanns, Eds., vol.
          <volume>4590</volume>
          . Heidelberg, Germany: Springer-Verlag,
          <year>July 2007</year>
          , pp.
          <fpage>519</fpage>
          -
          <lpage>531</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>A.</given-names>
            <surname>Tarski</surname>
          </string-name>
          , “
          <article-title>A lattice-theoretical fixpoint theorem and its applications</article-title>
          .” Pacific J. Math., vol.
          <volume>5</volume>
          , no.
          <issue>2</issue>
          , pp.
          <fpage>285</fpage>
          -
          <lpage>309</lpage>
          ,
          <year>1955</year>
          . [Online]. Available: http://projecteuclid.org/euclid.pjm/1103044538
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>J.</given-names>
            <surname>Davenport</surname>
          </string-name>
          and
          <string-name>
            <given-names>M.</given-names>
            <surname>England</surname>
          </string-name>
          , “
          <source>Recent Advances in Real Geometric Reasoning,” in Proceedings ADG</source>
          <year>2014</year>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Botana</surname>
          </string-name>
          and P. Quaresma, Eds.,
          <year>2015</year>
          , pp.
          <fpage>37</fpage>
          -
          <lpage>52</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>M.</given-names>
            <surname>Kosta</surname>
          </string-name>
          and
          <string-name>
            <given-names>T.</given-names>
            <surname>Sturm</surname>
          </string-name>
          , “
          <article-title>A Generalized Framework for Virtual Substitution</article-title>
          ,” http://arxiv.org/abs/1501.05826,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>M.</given-names>
            <surname>Brain</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Joshi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Kroening</surname>
          </string-name>
          , and
          <string-name>
            <given-names>P.</given-names>
            <surname>Schrammel</surname>
          </string-name>
          , “
          <article-title>Safety verification and refutation by k-invariants and k-induction ,” in Static Analysis, ser</article-title>
          . Lecture Notes in Computer Science, S. Blazy and T. Jensen, Eds.,
          <source>no. 9291</source>
          . Heidelberg, Germany: Springer-Verlag,
          <year>September 2015</year>
          , pp.
          <fpage>145</fpage>
          -
          <lpage>161</lpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>