<!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>VolCE: An E cient Tool for Solving #SMT(LA) Problems</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Cunjing Ge</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Feifei Ma</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Jian Zhang</string-name>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Laboratory of Parallel Software and Computational Science, Institute of Software, Chinese Academy of Sciences</institution>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>State Key Laboratory of Computer Science Institute of Software, Chinese Academy of Sciences</institution>
        </aff>
        <aff id="aff2">
          <label>2</label>
          <institution>University of Chinese Academy of Sciences</institution>
        </aff>
      </contrib-group>
      <abstract>
        <p>We present VolCE, a tool for computing and estimating the size of the solution space of SMT(LA) constraints. VolCE supports the SMT-LIB format. It integrates SMT solving with volume computation/estimation and integer solution counting for convex polytopes. Several e ective techniques are adopted, which enable the tool to deal with high-dimensional problem instances e ciently.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>
        In recent years, there have been a lot of works on solving the Satis ability
Modulo Theories (SMT) problem. Quite e cient SMT solvers have been developed,
such as CVC3, Z3 and Yices [
        <xref ref-type="bibr" rid="ref1 ref5 ref7">1, 5, 7</xref>
        ]. In [
        <xref ref-type="bibr" rid="ref10 ref17">17, 10</xref>
        ], we studied the counting version
of SMT solving, and presented some techniques for computing the size of the
solution space e ciently. This problem can be regarded as an extension to SMT
solving, and also an extension to model counting in the propositional logic.
Its interesting applications in several elds include program analysis [
        <xref ref-type="bibr" rid="ref11 ref12 ref15">15, 11, 12</xref>
        ],
probabilistic inference [
        <xref ref-type="bibr" rid="ref18 ref4">18, 4</xref>
        ], planning [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] and privacy/con dentiality veri
cation [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ].
      </p>
      <p>This paper presents the tool VolCE4 for the counting version of SMT(LA)5.
The input of the tool is an SMT(LA) formula. The output of the tool is the
\volume" of the solution space, or the number of solutions in case that the domains
(of variables) are all discrete. VolCE supports the SMT-LIB (v2.0) format which
is a common language to describe SMT formulas. It is an integration of SMT
solving and polytope subroutines, such as, volume computation, volume
estimation and integer point counting for convex polytopes. Moreover, VolCE adopts
bunch and cache strategy to reduce the number of calls of polytope subroutines,
and employs several more techniques to reduce the di culty of polytope
subroutines. As a result, the tool is enabled to deal with high-dimensional problem
instances e ciently.
4 Our tool VolCE is available at http://www.github.com/bearben/volce
5 Here LA stands for linear arithmetic. So LIA and LRA stands for linear integer
arithmetic and linear real arithmetic respectively.</p>
    </sec>
    <sec id="sec-2">
      <title>Background</title>
      <p>This section provides brief overviews of SMT(LA) formulas and convex polytopes
as far as is needed to make this paper self-contained.</p>
      <p>An SMT formula over linear inequalities, i.e., an SMT(LA) formula, can
be represented as a Boolean formula P S (b1; : : : ; bn) together with de nitions
in the form: bi ci. Here cis are linear inequalities. P S is the propositional
skeleton of the formula .</p>
      <p>Let us consider two speci c types of numeric variables, the integers and reals.
There are SMT(LIA) formulas and SMT(LRA) formulas. For an SMT(LIA)
formula, we count the number of solutions. For an SMT(LRA) formula, we
compute the volume of the solution space instead. The assignment of the
propositional skeleton of the SMT(LA) formula corresponds to a conjunction of linear
inequalities which can be regarded as a convex polytope.</p>
      <p>
        Tools for Polytope Subroutines. To describe VolCE, we introduce the following
three tools, which are also called polytope subroutines:
{ PolyVest. In [
        <xref ref-type="bibr" rid="ref10 ref9">9, 10</xref>
        ], we introduced a probabilistic algorithm for volume
estimation on convex polytopes. A tool called PolyVest was implemented which
can give results with ( ; )-bound, i.e., for a given polytope P , PolyVest
returns an estimation that lies in the interval [(1 + ) 1#P; (1 + )#P ] with
probability at least 1 , where #F is the exact volume of P . It can e ciently
handle polytopes with dozens of dimensions.
{ Vinci. Before PolyVest, there was already a tool available called Vinci [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]
which can compute the volume of a convex polytope. It gives the exact
volume instead of an estimation. The input of Vinci should be a set of LRA
constraints.
{ LattE. LattE [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] is a tool dedicated to the counting of lattice points inside
convex polytopes. It requires the input polytopes in the integer matrix A
and vector b.
3
      </p>
    </sec>
    <sec id="sec-3">
      <title>Architecture</title>
      <p>VolCE has the following three functions:
{ Estimate volume for SMT(LRA) formulas;
{ Compute volume for SMT(LRA) formulas;
{ Count the number of lattice points for SMT(LIA) formulas.</p>
      <p>The basic idea of VolCE is to enumerate feasible assignments by solving
the SMT(LA) formula and accumulate the volumes of these assignments.
Polytope volume computation/estimation (or lattice counting) serves as a subroutine
which produces the volume (or solution count) of each feasible assignment. A
schematic overview is shown in Fig. 1. A regular run of VolCE has three stages:
parsing and rewriting, feasible assignments enumeration and polytope
subroutines.</p>
      <p>SMT-LIB Input
Volume or #Solutions
Parser
Inequality
Extractor
Parsing and
rewritting</p>
      <p>Bunch</p>
      <p>Generation
SMT(LA) Solver,
e.g. Z3</p>
      <p>Feasible
assignements
enumeration
1-dim</p>
      <p>Problem</p>
      <p>Interval
Computation
Compute &amp; Update</p>
      <p>Polytope Preprocessing</p>
      <p>Search</p>
      <p>Two-round</p>
      <p>Strategy
Cache</p>
      <p>PolyVest
Vinci</p>
      <p>LattE
Polytope subroutines: volume estimation, volume</p>
      <p>computation, lattice counting
The parser reads the input and recursively builds an abstract syntax DAG
(directed acyclic graph). Like most SMT solvers, basic rewriting rules are applied
to simplify the DAG during the parsing process.</p>
      <p>Inequality Extraction. VolCE is essentially a divide-and-conquer algorithm. It
partitions the solution space of an SMT(LA) formula into polytopes and
calls polytope subroutines to handle each polytope. Recall that polytope
subroutines only take linear inequalities as inputs, so VolCE has to extract inequalities
from SMT(LA) formulas. The inequality extractor is a component to rewrite the
SMT(LA) expression into a combination of Boolean skeletons and normalized
linear inequalities. Parser calls extractor whenever it has parsed a comparison
operator (=; &lt;; ; &gt;; , distinct) which is the root of a DAG of inequalities.
Note that such a DAG may consist of more than one inequality if it
contains ite operators. For a DAG with ites, the extractor recursively traverses the
DAG, records the conditions of each ite and then reconstructs a syntax tree
with Boolean variables which represents those extracted inequalities. Each time
an inequality is extracted, VolCE creates a Boolean variable to substitute this
inequality in the DAG and adds a constraint to link the variable with the
inequality.</p>
      <p>Inequality Normalization. The extraction procedure also normalizes inequalities.
With Boolean operations, one can represent &lt;; ; &gt; and simply by , e.g.,
x + y &lt; 0 , not (x + y 0) , not ( x y 0). Thus a normalized inequality
is of the form a0 + a1x1 + : : : + anxn = ( ) 0, where ais are constants, xis are
variables, and a0 0.
3.2</p>
      <sec id="sec-3-1">
        <title>Feasible Assignments Enumeration</title>
        <p>In the second stage, VolCE tries to enumerate all feasible assignments. It calls
the SMT solver to obtain a feasible assignment, then adds a constraint to rule
out the assignment just found, and so forth. VolCE currently uses Z3, as the
SMT(LA) solver, through APIs. Note that it is easy to employ other modern
SMT solvers since VolCE sees SMT solving as a black box.</p>
        <p>
          Bunch Strategy [
          <xref ref-type="bibr" rid="ref17">17</xref>
          ]. To reduce the number of calls of polytope subroutines, we
proposed a strategy in [
          <xref ref-type="bibr" rid="ref17">17</xref>
          ] that combines the feasible assignments into
\bunches". Each time a feasible assignment is obtained, we search the neighbourhood of
this assignment by negating its literals. We can combine the original assignment
with one of its feasible neighbour assignments. Then we obtain a partial
assignment that still propositionally satis es the formula. The resulting assignment
may cover a bunch of feasible assignments, hence is called a \bunch". The
polytope subroutine is called for the polytope corresponding to each bunch rather
than each feasible assignment, so that the number of calls is reduced.
3.3
        </p>
      </sec>
      <sec id="sec-3-2">
        <title>Polytope Subroutines</title>
        <p>In the third stage, VolCE calls polytope subroutines for each bunch to obtain the
volume or the solution count, and then sums up. Recall that VolCE has three
functions, so there are three polytope subroutines: (i) polytope volume
estimation with tool PolyVest, (ii) polytope volume computation with tool Vinci, and
(iii) polytope lattice couting with tool LattE. Recall that PolyVest produces
estimation with ( ; )-bound. Since VolCE simply sums up the estimations from
PolyVest, the volume estimation presented by VolCE also satis es ( ; )-bound.
As a result, VolCE has two command-line parameters -epsilon and -delta to
control the accuracy of the volume estimation.</p>
        <p>
          Polytope subroutines are time-consuming and usually the bottleneck of the
whole program. VolCE employs a new cache strategy to reuse the results of
polytope subroutines. VolCE also integrates techniques proposed in [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ] to detect and
solve cases which frequently occur in #SMT problems but ine ciently handled
by polytope subroutines.
        </p>
        <p>
          Reusing with Cache. VolCE stores the results of calls of polytope subroutines
in a cache, so that it can retrieve the result of a problem which has already
been solved from the cache. Each call of a polytope subroutine corresponds to a
polytope. Because VolCE has extracted and stored all inequalities, the polytope
passed to a polytope subroutine is essentially an assignment of inequalities. So we
set the assignment of inequalities to be the key and bind it to the results returned
by the polytope subroutine. For SMT(LA) formulas without free Boolean
variables, the conjunctions of inequalities under di erent feasible assignments should
be disjoint with each other. However, it is common that an SMT(LA) formula
contains free Boolean variables. In this case, di erent feasible assignments may
correspond to the same polytope. Besides, polytope partition techniques could
partition di erent polytopes into the same sub-dimensional polytope.
Polytope Preprocessing [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ]. The number of variables is a key factor about the
di culty of a polytope subroutine. VolCE employs polytope preprocessing
techniques for dimension reduction. VolCE rst partitions the set of linear
inequalities, which corresponds to a given bunch, into mutually independent groups of
inequalities, then applies the polytope subroutine to obtain the size of solution
space of each group of inequalities, and nally returns the multiplications. VolCE
also tries to check and reduce irrelevant variables whenever it calls polytope
subroutine.
        </p>
        <p>
          Two-round Strategy [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ]. As the number of random points increases, the
accuracy of estimation improves, and the estimation process also takes more time. It
is important to balance the accuracy and the running time since the estimation
subroutine is usually called many times. Therefore, VolCE employs a two-round
strategy [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ] that can dynamically determine a proper weight for each feasible
(partial) assignment.
4
        </p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Experimental Results</title>
      <p>
        In this section, we report experimental results about the performance of VolCE.
VolCE provides a command-line parameter -w to quickly set bounds to numeric
variables. Speci cally, with such word-length parameter w, VolCE bounds each
variable in the domain [ 2w 1; 2w 1 1]. We set w = 8, = 0:5 and =
0:1 for experiments on SMT(LRA) formulas. The settings of w on SMT(LIA)
formulas are listed with experimental results. The experiments are conducted
on a workstation with 3.40GHz Intel Core i7-2600 CPU and 8GB memory. The
test cases 6 (more than 300) include:
{ Random instances lra b n l: which have b Boolean variables, n real variables
and l inequalities. They are generated by randomly choosing coe cients of
inequalities and literals of clauses.
{ Random instances lia b n l: which are similar to lra b n l but are SMT(LIA)
formulas.
{ Instances generated from static program analysis. We analyzed the following
programs: (i) abs: a function which calculates absolute values; (ii) findmiddle:
a function which nds the middle number among 3 numbers; (iii) Space manage:
a program related to space technology; (iv) tritype: a program which
determines the type of a triangle; (v) calDate: a function which converts the
special date into a Julian date; (vi) tcas: a program about the tra c
collision avoidance system; (vii) FINDpath: a selection program FIND [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]; (viii)
getopPath: a program function called getop() [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ].
      </p>
      <p>In the following tables, \||" means that the instance takes more than one
hour to solve (or the tool runs out of memory).</p>
      <p>Table 1 presents the performance results of volume estimation and
computation functions of VolCE on SMT(LRA) formulas. For lack of space, only a part
6 The set of benchmarks is available at http://www.github.com/bearben/volce
of results are listed here. In Table 1, column 1 gives the instance name, column
2 the number of feasible assignments and column 3 the number of bunches
enumerated by VolCE. Column 4 to 8 give the results of volume estimation function
which correspond to the number of polytopes which are partitioned, the number
of calls of estimation subroutine, the average number of dimensions of problems
handled by polytope estimation subroutine, the outputs and the running times,
respectively. Column 9 to 14 give the results of volume computation function.
Note that column 11 presents the number of solutions reused.</p>
      <p>The results in Table 1 show that VolCE can solve random instances with
over 20-dimensions in reasonable time. Compared with the volume estimation
function, the volume computation is more e cient on small instances. We observe
that for all the benchmarks, VolCE gives estimations within the tolerance .</p>
      <p>In addition, we nd that the bunch strategy works well. The feasible
assignments are reduced by half on most of instances. Table 1 also shows that the
solution reuse technique works on some instances and sometimes very e ective,
e.g., \lra 20 20 10" and \lra 15 15 7". Note that the reuse technique is
currently not available to the volume estimation function. Besides, the results show
that polytope partition technique is useful on both functions. Due to the
tworound strategy, the number of polytopes partitioned during volume estimation
is sometimes more than the number of bunches.</p>
      <p>
        To evaluate the performance of VolCE for solution counting, we compare
it with SMTApproxMC [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] which is a state-of-the-art hashing-based approximate
counter for SMT(BV) formulas. For comparison, we transformed SMT(LIA)
formulas into SMT(BV) formulas manually by replacing integer variables with
xed-length variables, bit-vector constants and bit operations. We experimented
SMTApproxMC with parameters = 0:8 and = 0:2. It guarantees the output
lying in interval [1:8 1RF ; 1:8RF ] with probability at least 80%, where RF is
the real count of a given formula F .
large class of benchmarks. We observe that the running time of SMTApproxMC
is closely related to the number of the solutions rather than the number of
variables, i.e., the larger number of solutions, the more di cult for SMTApproxMC
to handle. Besides, the results on industry instances demonstrate that our tool
is potentially useful in program analysis.
5
      </p>
    </sec>
    <sec id="sec-5">
      <title>Concluding Remarks</title>
      <p>VolCE is a tool for computing and estimating the volume of the solution
space (or counting the number of solutions), given a formula/constraint which
is a Boolean combination of linear arithmetic inequalities. For medium sized
SMT(LA) formulas, it can provide exact volume computation results or
exact number of solutions. For larger SMT(LRA) formulas, it can perform volume
estimation with high accuracy, due to the use of e ective heuristics. We believe
that the tool will be useful in a number of domains, such as program analysis
and probabilistic veri cation.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <given-names>C.</given-names>
            <surname>Barrett</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C. L.</given-names>
            <surname>Conway</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Deters</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Hadarean</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Jovanovic</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>King</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Reynolds</surname>
          </string-name>
          , and
          <string-name>
            <given-names>C.</given-names>
            <surname>Tinelli</surname>
          </string-name>
          . CVC4.
          <source>In Proc. of CAV</source>
          , pages
          <volume>171</volume>
          {
          <fpage>177</fpage>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <given-names>B.</given-names>
            <surname>Bu</surname>
          </string-name>
          eler,
          <string-name>
            <given-names>A.</given-names>
            <surname>Enge</surname>
          </string-name>
          , and
          <string-name>
            <given-names>K.</given-names>
            <surname>Fukuda</surname>
          </string-name>
          .
          <article-title>Exact Volume Computation for Polytopes: A Practical Study</article-title>
          , pages
          <volume>131</volume>
          {
          <fpage>154</fpage>
          . Birkhauser Basel,
          <year>2000</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <given-names>S.</given-names>
            <surname>Chakraborty</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K. S.</given-names>
            <surname>Meel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Mistry</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M. Y.</given-names>
            <surname>Vardi</surname>
          </string-name>
          .
          <article-title>Approximate probabilistic inference via word-level counting</article-title>
          .
          <source>In Proc. of AAAI</source>
          , pages
          <volume>3218</volume>
          {
          <fpage>3224</fpage>
          ,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <given-names>M.</given-names>
            <surname>Chavira</surname>
          </string-name>
          and
          <string-name>
            <given-names>A.</given-names>
            <surname>Darwiche</surname>
          </string-name>
          .
          <article-title>On probabilistic inference by weighted model counting</article-title>
          .
          <source>Artif</source>
          . Intell.,
          <volume>172</volume>
          (
          <issue>6-7</issue>
          ):
          <volume>772</volume>
          {
          <fpage>799</fpage>
          ,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          <string-name>
            <surname>5. L. M. de Moura</surname>
            and
            <given-names>N.</given-names>
          </string-name>
          <article-title>Bj rner. Z3: an e cient SMT solver</article-title>
          .
          <source>In Proc. of TACAS</source>
          , pages
          <volume>337</volume>
          {
          <fpage>340</fpage>
          ,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <given-names>C.</given-names>
            <surname>Domshlak</surname>
          </string-name>
          and
          <string-name>
            <surname>J.</surname>
          </string-name>
          <article-title>Ho mann. Probabilistic planning via heuristic forward search and weighted model counting</article-title>
          .
          <source>J. Artif. Intell. Res. (JAIR)</source>
          ,
          <volume>30</volume>
          :
          <fpage>565</fpage>
          {
          <fpage>620</fpage>
          ,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <given-names>B.</given-names>
            <surname>Dutertre</surname>
          </string-name>
          .
          <article-title>Yices 2.2</article-title>
          .
          <source>In Proc. of CAV</source>
          , pages
          <volume>737</volume>
          {
          <fpage>744</fpage>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <given-names>M.</given-names>
            <surname>Fredrikson</surname>
          </string-name>
          and
          <string-name>
            <given-names>S.</given-names>
            <surname>Jha</surname>
          </string-name>
          .
          <article-title>Satis ability modulo counting: a new approach for analyzing privacy properties</article-title>
          .
          <source>In Proc. of CSL-LICS</source>
          , pages
          <volume>42</volume>
          :1{
          <fpage>42</fpage>
          :
          <fpage>10</fpage>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <given-names>C.</given-names>
            <surname>Ge</surname>
          </string-name>
          and
          <string-name>
            <given-names>F.</given-names>
            <surname>Ma</surname>
          </string-name>
          .
          <article-title>A fast and practical method to estimate volumes of convex polytopes</article-title>
          .
          <source>In Proc. of FAW</source>
          , pages
          <volume>52</volume>
          {
          <fpage>65</fpage>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>C. Ge</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          <string-name>
            <surname>Ma</surname>
            , P. Zhang, and
            <given-names>J. Zhang.</given-names>
          </string-name>
          <article-title>Computing and estimating the volume of the solution space of SMT(LA) constraints</article-title>
          . Accepted to appear in TCS, http://dx.doi.org/10.1016/j.tcs.
          <year>2016</year>
          .
          <volume>10</volume>
          .019.
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>J. Geldenhuys</surname>
            ,
            <given-names>M. B.</given-names>
          </string-name>
          <string-name>
            <surname>Dwyer</surname>
            , and
            <given-names>W.</given-names>
          </string-name>
          <string-name>
            <surname>Visser</surname>
          </string-name>
          .
          <article-title>Probabilistic symbolic execution</article-title>
          .
          <source>In Proc. of ISSTA</source>
          , pages
          <volume>166</volume>
          {
          <fpage>176</fpage>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <given-names>K.</given-names>
            <surname>Gleissenthall</surname>
          </string-name>
          ,
          <string-name>
            <surname>B.</surname>
          </string-name>
          <article-title>Kopf, and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Rybalchenko</surname>
          </string-name>
          .
          <article-title>Symbolic polytopes for quantitative interpolation and veri cation</article-title>
          .
          <source>In Proc. of CAV</source>
          , pages
          <volume>178</volume>
          {
          <fpage>194</fpage>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <given-names>C. A. R.</given-names>
            <surname>Hoare</surname>
          </string-name>
          .
          <article-title>Proof of a program: FIND. Commun</article-title>
          . ACM,
          <volume>14</volume>
          (
          <issue>1</issue>
          ):
          <volume>39</volume>
          {
          <fpage>45</fpage>
          ,
          <year>1971</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <given-names>B. W.</given-names>
            <surname>Kernighan. The C Programming</surname>
          </string-name>
          <article-title>Language</article-title>
          .
          <source>Prentice Hall Professional Technical Reference, 2nd edition</source>
          ,
          <year>1988</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15. S. Liu and
          <string-name>
            <surname>J. Zhang.</surname>
          </string-name>
          <article-title>Program analysis: from qualitative analysis to quantitative analysis</article-title>
          .
          <source>In Proc. of ICSE</source>
          , pages
          <volume>956</volume>
          {
          <fpage>959</fpage>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <surname>J. A. De Loera</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          <string-name>
            <surname>Hemmecke</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          <string-name>
            <surname>Tauzer</surname>
            , and
            <given-names>R.</given-names>
          </string-name>
          <string-name>
            <surname>Yoshida</surname>
          </string-name>
          .
          <article-title>E ective lattice point counting in rational convex polytopes</article-title>
          .
          <source>J. Symb. Comput.</source>
          ,
          <volume>38</volume>
          (
          <issue>4</issue>
          ):
          <volume>1273</volume>
          {
          <fpage>1302</fpage>
          ,
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <given-names>F.</given-names>
            <surname>Ma</surname>
          </string-name>
          , S. Liu, and
          <string-name>
            <surname>J. Zhang.</surname>
          </string-name>
          <article-title>Volume computation for boolean combination of linear arithmetic constraints</article-title>
          .
          <source>In Proc. of CADE</source>
          , pages
          <volume>453</volume>
          {
          <fpage>468</fpage>
          ,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <given-names>D.</given-names>
            <surname>Roth</surname>
          </string-name>
          .
          <article-title>On the hardness of approximate reasoning</article-title>
          . Artif. Intell.,
          <volume>82</volume>
          (
          <issue>1-2</issue>
          ):
          <volume>273</volume>
          {
          <fpage>302</fpage>
          ,
          <year>1996</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>