<!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>A Sequent Calculus for Integer Arithmetic with Counterexample Generation</article-title>
      </title-group>
      <contrib-group>
        <aff id="aff0">
          <label>0</label>
          <institution>Department of Computer Science and Engineering, Chalmers University of Technology and G ̈oteborg University</institution>
          ,
          <country country="SE">Sweden</country>
        </aff>
      </contrib-group>
      <fpage>179</fpage>
      <lpage>194</lpage>
      <abstract>
        <p>We introduce a calculus for handling integer arithmetic in first-order logic. The method is tailored to Java program verification and meant to be used both as a supporting procedure and simplifier during interactive verification and as an automated tool for discharging (ground) proof obligations. There are four main components: a complete procedure for linear equations, a complete procedure for linear inequalities, an incomplete procedure for nonlinear (polynomial) equations, and an incomplete procedure for nonlinear inequalities. The calculus is complete for the generation of counterexamples for invalid ground formula in integer arithmetic. All parts described here have been implemented as part of the KeY verification system.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>Introduction
– Simplification of arithmetic expressions or formulas with the goal to keep
everything small and readable. A calculus for this purpose should always
terminate and should not cause proof splitting; completeness is a secondary.
– Transparency and the ability to create human-readable proofs and sequences
of simplification steps, otherwise it is difficult for a user to resume
interactive proving after a number of automated proof steps. The fastest way to
understand a proof goal is often to look at the history that led to the goal.
– Handling of nonlinear arithmetic guided by the user, which is necessary for
programs that happen to contain multiplication or division operations. The
cost of interactive software verification should be justified by the ability to
also handle more complex programs than automatic tools.
– Generation of counterexamples for invalid formulas, which is useful during
specification and when proving with induction and invariants.
– Handling of the actual modular Java integers, which in our system is modelled
by a mapping to the mathematical integers [1, Chapter 12]. Reasoning in
this setting requires good support for simplifying expressions, for instance by
(implicitly) proving the absence of overflows. The methods that we developed
to this end are beyond the scope of the paper, but are based on the presented
calculus.
– Most importantly: it should be easy to use!</p>
      <p>
        Only some of these points can be solved using external procedures and
theorem provers (which are, nevertheless, extremely useful for dealing with simpler
proof obligations). As a complementary approach, we have developed a novel
calculus for integer arithmetic that is directly implemented in our theorem prover
KeY [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] in form of derived (i.e., verified) proof rules. The rules are deliberately
kept as elementary as possible and are here presented in sequent calculus
notation. The calculus is driven by a proof strategy that controls the rule application
and realises the following components: (i) a simplification procedure that works
on single terms and formulas and is responsible for normalisation of
polynomials (Sect. 2), (ii) a complete procedure for systems of linear equations, based
on Gaussian elimination and the Euclidian algorithm (Sect. 3), (iii) a complete
procedure for systems of linear inequalities, based on Fourier-Motzkin variable
elimination (Sect. 4), (iv) an incomplete procedure for nonlinear (polynomial)
equations, based on Gr¨obner bases (Sect. 5), (v) an incomplete procedure for
nonlinear inequalities using cross-multiplication of inequalities and systematic
case analysis (Sect. 6).
      </p>
      <p>
        The development of the method was mostly an engineering process with the
goal of handling cases that practically occur in Java program verification. It was
successful in the sense that many proofs that before only were possible with the
help of external provers can now be handled by KeY alone (e.g., the case study
[
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]), and that many proofs that before were impossible have become feasible.
      </p>
      <p>
        We do not consider quantifiers or uninterpreted functions in this paper. The
calculus is proof confluent (cf. [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]) and can basically be used in two different
modes: (i) for simplification, which disables the handling of nonlinear
inequalities, prevents case splits and guarantees termination (Procedure 4 in Sect. 5),
and (ii) for proving and countermodel construction, which enables all parts
(Procedure 5 in Sect. 6).
      </p>
      <p>Introductory example. We start with an example and show how the following
statement can be proven within our calculus (in the “full” mode):1</p>
      <p>
        11a + 7b =. 1 ⊢ h b=a*c-1; if (c&gt;=a) a=a/b; i true (1)
In Java dynamic logic, this sequent expresses that the program in angle
brackets terminates normally, i.e., in particular does not raise exceptions, given the
.
assumption 11a + 7b = 1. A proof is conducted by rewriting the program
following the symbolic execution paradigm [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ], whereby the calculus presented in this
1 On an Intel Pentium M processor with 1.6 GHz, the KeY implementation of the procedure needs
about 460 inference steps and 2 seconds to find this proof.
.
paper is permanently applied on the path condition (in (1), 11a + 7b = 1) and
the symbolic variable assignment (in (1), the identity).
      </p>
      <p>
        The complete proof is shown in Fig. 1. As first step, all formulas are
normalised: we choose an arbitrary well-ordering &lt;r on the variables in the problem
(a &lt;r b &lt;r c) and move big variables to the left and small variables to the right
. . .
of the relations =, ≤, ≥, resulting in (2). We then concentrate on the equation
in (2), in order to (eventually) turn the leading coefficient 7 into a 1, by means of
the extended Euclidian algorithm (cf. [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]). A basis transformation is performed
that replaces b with a fresh variable d (such that a &lt;r b &lt;r c &lt;r d). One can
min.
imise the coefficient of 11a by choosing b = −2a + d and replace the occurrence
of b in the original equation with −2a + d (afterwards, the equation is again
normalised, sequent (3)). Because the leading coefficient of the first equation is
still not 1, a second basis transformation a → 2d + e is performed (with d &lt;r e).
This turns the leading coefficients of all equations into 1 (sequent (4)).
      </p>
      <p>.</p>
      <p>We can now leave out the equation d = 3e + 1, because d does not occur in
the sequent anymore. No further inferences are possible in the path condition
and the first statement of the program is executed, updating the variable
assignment accordingly (for simplicity, we assume that no overflows are possible).
The assignment b := 7ce + 2c − 1 is written in front of the program in (5) and
is rewritten and simplified using the equations in (.6). The next program.
statement causes the proof to split on the condition c ≥ a. One branch (c &lt; a) can
immediately be closed because the program contains .no further statements. On
the other branch (7), we obtain a new assumption c ≥ a that can be simplified.</p>
      <p>The execution of the last assignment yields a new proof obligation (8) in
order to prevent division by zero. We prove by contradiction and normalise the
new equation in (9) (and also leave out the first two equations, which are no
longer needed for the proof). Because all other possibilities fail in the resulting
situation, a case split on the sign of one of the “independent” variables c or e
. .
is .performed. Here, we will choose c and consider the cases c ≤ −1, c = 0, and
c ≥ 1. The case c = 0 contradicts 7ce =. −2c + 1, and the other two cases can be
.
handled in essentially the same way, so we show only the first one in (10). .</p>
      <p>By transitivity, from the two inequalities in (10) the inequality 7e + 2 ≤ −1</p>
      <p>.
can be derived, which is rounded to e ≤ −1 in (11). No further linear inference
steps are possible, but we can at this .point deduce properties of product ce
.
by cross-multiplying the inequalities e ≤ −1 and c ≤ −1, which yields the new
.
inequality 0 ≤ (−c − 1) · (−e − 1) in (12). After multiplying this inequality with
7, it can in (13) be rewritten using the equation 7ce =. −2c + 1 and turned into
.
−2c + 1 ≥ 7 · (−c − e − 1).</p>
      <p>Now, a. contradiction ca.n be derived by rea.soning about linear inequaliti.es.</p>
      <p>From 5c ≥ −7e − 8 and c. ≤ −1 we derive 7e ≥ −3, which is rounded to e ≥ 0
and a contradiction to e ≤ −1.
2</p>
      <p>Normalisation of Arithmetic Expressions
Before starting a derivation and permanently during a proof, our calculus
normalises (atomic) formulas. This was already demonstrated in the introductory
example, and in a proof tree we denote such simplification steps with simp.
We always fully expand polynomial expressions and represent them as a sum
of monomials α1 · m1 + · · · + αn · mn, in which α1, . . . , αn are non-zero integer
literals and m1, . . . , mn are pairwise distinct products of variables (possibly 1
as the empty product, and possibly 0 as the empty sum). Full expansion is in
general obviously a bad idea, but we found that it is a reasonable approach in
interactive Java program verification that in the vast majority of cases improves
the readability of formulas.</p>
      <p>
        Sorting Terms. We put polynomial expressions into a canonical form by ordering
the factors in a monomial and the monomials in a polynomial. The ordering &lt;r
that is used in both cases is a strict monomial ordering [
        <xref ref-type="bibr" rid="ref6 ref7">6, 7</xref>
        ]:
– We assume that a graded monomial ordering &lt;r [
        <xref ref-type="bibr" rid="ref6 ref7">6, 7</xref>
        ] on products of
variables is given, i.e., a well-ordering (a total, well-founded ordering) with the
properties: (i) deg m &lt; deg m′ implies m &lt;r m′, and (ii) m &lt;r m′ implies
x · m &lt;r x · m′ for all variables x. In practice, we define &lt;r as a graded
lexicographic ordering: we assume that a well-ordering &lt;r on variables2 is
given and then define c1 · · · cn &lt;r d1 · · · dk if and only if n &lt; k or n = k and
{{c1, . . . , cn}} &lt;r {{d1, . . . , dk}} (in the multiset extension of &lt;r, cf. [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]).
2 In reality, instead of variables we have to deal with arbitrary terms whose head-symbol is not +
or ·, which are compared with a lexicographic path ordering [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ].
– We extend &lt;r by constructing a well-ordering on integer literals: 0 &lt;r 1 &lt;r
−1 &lt;r 2 &lt;r −2 &lt;r 3 &lt;r · · · .
– We extend &lt;r on monomials by α · m &lt;r α′ · m′ if and only if m &lt;r m′ or
′ ′
m = m (modulo associativity and commutativity of ·) and α &lt;r α .
– We extend &lt;r on polynomials by α1m1 + · · · + αnmn &lt;r α1′m′1 + · · · + αk′m′k
if and only if {{α1m1, . . . , αnmn}} &lt;r {{α1′m′1, . . . , αn′m′n}} (again using the
multiset extension of &lt;r).
      </p>
      <p>For sake of brevity, we will also compare arbitrary terms with &lt;r and
implicitly assume that the terms are first normalised.</p>
      <p>Normalisation of .Fo.rm.ulas. Atomic formulas are always .written in t.he form
αs ∗ t with ∗ ∈ {≤, =, ≥}, employing equivalences like s &lt; t ⇔ s + 1 ≤ t, and
transformed so that the left-hand side αs is the &lt;r-greatest monomial of the
polynomial αs − t and α &gt; 0. Furthermore, all inequalities are moved to the
antecedent, and in case αs − t is a constant polynomial an equation or inequality
is directly replaced with true or false.</p>
      <p>We always demand that the coefficients of non-constant terms in an equation
or inequality are coprime (do not have non-trivial factors in common), and
otherwise divide all coefficients by the greatest common divisor. This also detects
.
that equations like 2y = 1 − 6c are unsolvable and equivalent to fa.lse, and that
.
an inequality like 2y ≤ 1 − 6c can be simplified and rounded to y ≤ −3c thanks
to the discreteness of the integers.</p>
      <p>Finally, we add a simple subsumption check for inequalities that eliminates</p>
      <p>.
an. inequality s ≤ t from the antecedent i n. case there is a second inequality
s ≤ t − β with β ≥ 0 (correspondingly for ≥).
3</p>
      <p>
        Equation Handling: Gaussian Variable Elimination
In contrast to many decision procedures or SMT provers, equation and inequality
handling for integers are kept separate in our system. The initial reason for this
was that we believe that a reduction of equations to inequalities is not an option
for interactive proving. Much later we became aware that we also can design
more efficient, elegant and practical calculi for linear integer equations than for
inequalities, which afterwards justifies the decision. We believe that this is also
an important insight when working with the modular Java arithmetic, where
the handling of such equations is essential. The sequent calculus described in
this section is based on Gaussian elimination and the Euclidian algorithm.3 It
is complete, does not involve proof splitting, and is fast for all problems and
benchmarks that we so far have looked at.
3 The calculus is in parts inspired by [5, Chapter 4.5.2], but in contrast to [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] we perform both row
and column operations.
Row Operations. The primary rule of the calculus reduces an expression with
the help of an equation in the antecedent. The application of the rule is only
allowed if s′ is not a subterm of s =. t (u is an arbitrary term):4
      </p>
      <p>.
Γ, s = t ⊢ φ[s′ + u · (s − t)], Δ</p>
      <p>Γ, s =. t ⊢ φ[s′], Δ red if s′ + u · (s − t) &lt;r s′
Example 1. We show how the rules red and simp are used to solve a system of
linear equations (with the ordering x &lt;r y):</p>
      <p>∗
x =. −5, y =. −1 ⊢ x =. −5</p>
      <p>. red, simp
3y = x + 2, y =. −1 ⊢ x =. −5
. . simp
3y = x + 2, 5y − (3y − x − 2) = x ⊢ x =. −5</p>
      <p>. . red
3y = x + 2, 5y = x ⊢ x =. −5
Column Operations. It is well-known that this kind of reduction alone does
not yield a complete calculus for integer equations. An example is the formula
.
11a + 7b = 1 in the introductory example, for which no reduction steps are
possible. To obtain a complete calculus, we also perform column operations—referring
to the usual matrix representation of the Gaussian elimination method.
Assuming that no more applications of red are possible in a sequent, and given an
.
equation αx = s of the antecedent, we introduce a fresh unknown x′ and perform
′
a basis transformation x → u + x :
Γ, α · (u + x′) =. s, x = u + x′ ⊢ Δ</p>
      <p>.</p>
      <p>. col-red
Γ, αx = s ⊢ Δ
if: x a variable, α &gt; 1, (s − αu) = min&lt;r {s − αu′ | u′ a term},</p>
      <p>′
x a fresh variable, &lt;r-smaller than all previous symbols
The term u is chosen such that the difference s − αu becomes &lt;r-minimal. One
′ .
subsequent application of simp will thus turn the new equation α(u + x ) = s
.
into a formula βy = t with β &lt;r α. Likewise, βy is &lt;r-smaller than the left-hand
sides of other equations β′y = t′, because red was applied exhaustively prior to
col-red. This ensures the overall termination of the procedure (Lem. 1 below)
and allows to continue with reduction steps as long as linear equations are present
whose left-hand side has a non-unit-coefficient.</p>
      <p>We do not apply the rule col-red to nonlinear equations, due to the
experience that the basis transformations performed by col-red cause more harm
than good in the nonlinear setting. This is because the usage of a good monomial
ordering &lt;r becomes far more important than in the linear setting (col-red
effectively alters the ordering by introducing a new smallest variable, possibly
in a harmful way). We further discuss this issue in Sect. 5.
4 In the rule, we write φ[s′] in the succedent to denote that the term s′ can occur in an arbitrary
position in the sequent, in particular also in the antecedent.
Procedure 1. Apply simp with the highest priority, red with second-highest
priority, and col-red with the lowest priority.</p>
      <p>Lemma 1. Procedure 1 terminates (for sequents containing arbitrary equations
and inequalities). For sequents that only contain linear equations, it is complete
and proof confluent.</p>
      <p>Example 2. If a proof branch does not get closed by this procedure, the
remaining equations are an explicit description of all solutions (counterexamples) of
the equations:
The equations that define x′0 and x′3 can be removed afterwards, because these
symbols do not occur in the original problem and have no impact on its
validity. A concrete counterexample is obtained by assigning arbitrary values to the
variables that only occur in the right-hand sides of equations (x′3′).
4</p>
      <p>Handling of Linear Inequalities:</p>
      <p>
        Fourier-Motzkin Variable Elimination and Case Splits
Although Fourier-Motzkin variable elimination (cf. [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ]) generally has a high
complexity, it is one of the most popular methods to handle linear inequalities
and used in proof assistants like PVS [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ], Coq [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] or ACL2 [
        <xref ref-type="bibr" rid="ref13 ref14">13, 14</xref>
        ]. We found
Fourier-Motzkin to be a suitable base method both for linear and nonlinear
inequality handling: most reasoning during verification is rather shallow and most
inequalities only share symbols with a small number of other inequalities (sparse
constraints), which is a situation where Fourier-Motzkin works well. At the same
time, the Fourier-Motzkin elimination rule is suited for interactive proving due
to its simplicity and the fact that it directly works on integers, in contrast to
more efficient linear programming techniques. The full procedure given in this
section is complete over the integers, but it involves proof splitting and does
usually not terminate for invalid sequents, which means that it cannot (directly) be
used as a simplifier for interactive proving. We therefore also identify a subset
of the method that does not cause splitting and always terminates, but which
is no longer complete (which hardly ever matters in practice). An example for
a program that can be verified using the incomplete procedure (together with
axioms for division, modulo and Java arithmetic) is shown in Fig. 2.
The Incomplete Procedure. As equations have already been handled in the
previous section, we can implement Fourier-Motzkin with a single rule for “cancelling”
two inequalities:
Γ, αs ≥ t, βs ≤. t′, βt ≤ αt′ ⊢ Δ
. .
      </p>
      <p>. fm-elim
Γ, αs ≥ t, βs ≤. t′ ⊢ Δ if α &gt; 0, β &gt; 0</p>
      <p>.</p>
      <p>The resulting inequality βt ≤ αt′ does no longer contain the monomial s and is
therefore &lt;r-smaller than both previous inequalities (after a subsequent
application of simp). To ensure termination, the rule must never be applied twice on
a proof branch to the same pair of inequalities.</p>
      <p>The performance of Fourier-Motzkin can be improved by adding a rule that
turns two inequalities into an equation, based on the law of anti-symmetry:</p>
      <p>.
Γ, s = t ⊢ Δ</p>
      <p>. . anti-symm
Γ, s ≤ t, s ≥ t ⊢ Δ
Procedure 2. Apply Procedure 1 (linear equations) with the highest priority,
the rule anti-symm with second highest priority and the rule fm-elim with
lowest priority.</p>
      <p>Lemma 2. The procedure obtained in this way terminates when applied to a
sequent containing arbitrary equations and inequalities.</p>
      <p>The Complete Procedure. Fourier-Motzkin is complete for rationals, but
incomplete for integers. Our calculus is already more complete than pure
FourierMotzkin due to the normalisation from Sect. 2 (rounding of inequalities) and the
different equation handling of Procedure 1, which are enough to. handle m. any
cases that occur in practice (e.g., to show the inconsistency of 4x ≥ 5 ∧ 4x ≤ 7).
Making the calculus actually complete has therefore not been of great
importance for us. The following approach to this end is rather simplistic, but it has
a counterexample generation property that is practically more relevant.</p>
      <p>
        Our calculus becomes complete by performing a systematic case analysis,
i.e., by doing proof splitting, in a way similar to Gomory’s cutting-planes (cf.
[
        <xref ref-type="bibr" rid="ref10">10</xref>
        ]). This is realised by the following rule for investigating the borderline case
of an inequality:
Γ, s &lt;. t ⊢ Δ Γ, s =. t ⊢ Δ
      </p>
      <p>. strengthen
Γ, s ≤ t ⊢ Δ</p>
      <p>.</p>
      <p>There is a corresponding rule for ≥. The application of these rules does obviously
not terminate in general, but it does for valid sequents (of linear inequalities),
provided that a fair application strategy5 is used and the rule is combined with
5 In the presence of subsumption checks (Sect. 2), we consider a strategy as fair if strengthen is
eventually applied to each inequality or to any subsuming inequality.
normal_behavior @
ensures @ intPart * Decimal.PRECISION + decPart ==
requires @ -Decimal.PRECISION &lt; f &amp;&amp; f &lt; Decimal.PRECISION
requires @ -Decimal.PRECISION &lt; decPart &amp;&amp; decPart &lt; Decimal.PRECISION;
ensures @ -Decimal.PRECISION &lt; decPart &amp;&amp; decPart &lt; Decimal.PRECISION;
modifiable @ intPart, decPart;
@ &amp;&amp; e + intPart &lt; 32767 &amp;&amp; -32768 &lt; e + intPart;
@ (\old(intPart) + e) * Decimal.PRECISION + \old(decPart) + f;
@*/
publi void short add(short e, f) {
if ( intPart &gt; 0 &amp;&amp; decPart &lt; 0 ) {
else if } ( intPart &lt; 0 &amp;&amp; decPart &gt; 0 ) {
if ( intPart &gt; 0 &amp;&amp; decPart &lt; 0 ) {
else if } ( intPart &lt; 0 &amp;&amp; decPart &gt; 0 ) {
intPart += e;
intPart--; decPart = (short)( decPart + PRECISION );
intPart++; decPart = (short)( decPart - PRECISION ); }
decPart += f;
intPart--; decPart = (short)( decPart + PRECISION );
intPart++; decPart = (short)( decPart - PRECISION );
if ( decPart &lt; 0 ) {
else } {
short short retenue = 0; signe = 1;</p>
      <p>signe = -1; decPart = (short)( -decPart ); }
retenue = (short)( decPart / PRECISION );
decPart = (short)( decPart % PRECISION );
retenue *= signe; decPart *= signe; intPart += retenue;
} }
Procedure 2. For an invalid sequent, a fair strategy eventually produces goals in
which all inequalities have been replaced with equations and where Procedure 1
can take over and produce a counterexample.</p>
      <p>Case distinctions are also necessary to handle equations in the succedent:</p>
      <p>. .
Γ ⊢ s ≤ t, Δ Γ ⊢ s ≥ t, Δ</p>
      <p>. split-eq
Γ ⊢ s = t, Δ
Procedure 3. Apply Procedure 2 (the incomplete method) with the highest
priority, the rule split-eq with second highest priority, and the rule strengthen
with lowest priority and in a fair manner.</p>
      <p>Lemma 3. This procedure is complete and proof confluent, and it eventually
produces a counterexample for an invalid sequent.</p>
      <p>∗
. . .
y ≥ 1, y ≤ 0, x = 1 ⊢
.
.</p>
      <p>.</p>
      <p>. . . .
4y ≥ x + 1, 4y ≤ x + 2, x = 1 ⊢
fm-elim
.
.
.
.</p>
      <p>. .
y = 1, x = 2 ⊢
. . .
y ≥ 1, y ≤ 1, x = 2 ⊢
.
.</p>
      <p>.</p>
      <p>
        . . . .
4y ≥ x + 1, 4y ≤ x + 2, x = 2 ⊢
anti-symm
Example 3. Consider the following example taken from [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ]: Because
Proce.
dure 2 is not able to derive a contraction, we apply strengthen to x ≤ 2
. .
and obtain two cases x = 1, x = 2 (thanks to anti-symm), the second of which
leads to a counterexample:
      </p>
      <p>. . . .
4y ≥ x + 1, 4y ≤ x + 2, x ≤ 2, x ≥ 1 ⊢
strengthen
5</p>
      <p>Handling of Nonlinear Polynomial Equations:</p>
      <p>
        Pseudo-Reduction and Gr¨obner Bases
The validity of equations or inequalities over arbitrary (possibly nonlinear)
polynomials over the integers is known to be undecidable [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ]. This means that all
rules and procedures that we give from now on can never be complete and have
been employed or developed with the aim of handling the common cases: when
verifying programs, a large amount of the occurring nonlinear proof obligations
can and should be taken care of automatically by incomplete calculi. The most
important step to this end is to normalise nonlinear expressions (Sect. 2). We
describe a comparatively cheap extension—that does not cause any proof
splitting and is suited for interactive proving—of Procedure 1 to deal with nonlinear
equation.
      </p>
      <p>
        Pseudo-Reduction. As in Sect. 3, the primary rule for rewriting with
(nonlinear) equations is red. Because we do not apply the rule col-red to
non.
linear equations, however, there are cases where equations αs = t with α &gt; 1
rxe m≥.a1i,n yin≥t1h,e2azn2t=e.ceyde⊢ntxzth2a≤t. xcyan,nfoort ibnestasinmcep,linfioednefuorfththeer. rIunlesthseo sfeaqruceannt
.
be applied. In order to handle such cases, we introduce a further reduction rule
that is based on pseudo-division and works by first multiplying the target
ex.
pression with a constant (cf. [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]). The rule must only be applied if αs = t and
u · t =. αt′ are different equations:
Γ, αs = t ⊢ φ[u · t =. αt′], Δ
      </p>
      <p>.</p>
      <p>
        Γ, αs =. t ⊢ φ[s′ =. t′], Δ pseudo-red if deg s &gt; 1, α &gt; 1, s′ = u · s
There are similar rules for inequalities s′ ≤. t′, s′ ≥. t′. We apply pseudo-red
.
only if the left-hand side of the equation αs = t is nonlinear and α &gt; 1.
Otherwise, the normal reduction rule red can be used, possibly after turning α into
1 with help of col-red.
Gr¨obner Bases. Rewriting with nonlinear equations using the rules red and
pseudo-red is not confluent and is not able to decide ideal membership in a ring
of polynomials. Ideal membership is an approximation of semantic entailment
of (nonlinear) equations that we can practically decide: we complete the set of
antecedent equations by computing a Gr¨obner basis [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ].
      </p>
      <p>
        The simplest way to generate a Gr¨obner basis is to saturate the antecedent
with “S-polynomial”-equations by considering all critical pairs of existing integer
equations—the Buchberger algorithm [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]. Our calculus produces a non-reduced
Gr¨obner basis over the field of rational numbers that only consists of
polynomial equations with integer coefficients, which are easier to compute and almost
as useful for reduction as actual Gr¨obner bases over the integers. Given two
equations with overlapping left-hand sides, S-polynomials are added as follows:
Γ, s = t, s′ =. t′, s′r · t = sr · t′ ⊢ Δ
. .
      </p>
      <p>Γ, s = t, s′ =. t′ ⊢ Δ
.</p>
      <p>s-poly
s = gcd(s, s′) · sr,
s′ = gcd(s, s′) · s′r,
0 &lt; deg sr &lt; deg s,
0 &lt; deg s′r &lt; deg s′
Similarly to the Fourier-Motzkin elimination rule, this rule must not be applied
repeatedly for the same pair of equations to ensure termination. The performance
of this naive implementation of Buchberger’s algorithm is not comparable with
more advanced methods, of course. We have yet to find, however, a verification
problem where this would be a problem.</p>
      <p>Procedure 4. Apply Procedure 1 (linear equations) with highest priority, the
rule pseudo-red with second highest priority, the rule s-poly with third highest
priority, and Procedure 2 (linear inequalities) with lowest priority.</p>
      <p>Lemma 4. Procedure 4 terminates when applied to a sequent containing
arbitrary equations and inequalities.
6</p>
      <p>Handling of Nonlinear Polynomial Inequalities:</p>
      <p>
        Cross-Multiplication and Case Splits
The handling of nonlinear polynomial inequalities is realised as an extension of
the linear inequality handling (Sect. 4). In order to apply linear reasoning to
nonlinear arithmetic, we generate linear approximations of products and
incrementally strengthen the precision of the approximations through case distinctions.
Likewise, case splits are used to ensure the existence of linear approximations.
Our method has been developed as a heuristic, and we do not have an exact
description of the fragment of nonlinear arithmetic that it can handle. The main
application areas where the method has proven to be extremely useful are
correctness proofs for lemma rules that can be loaded by the prover KeY [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ], and
the verification of programs with the actual modular integer semantics of Java.
      </p>
      <p>
        Similarly to the approach in ACL2 [
        <xref ref-type="bibr" rid="ref14 ref19">14, 19</xref>
        ] (and using their terminology), the
primary rule to handle nonlinear inequalities is cross-multiplication:
Γ, s ≤ t, s′ ≤. t′, 0 ≤ (t − s) · (t′ − s′) ⊢ Δ
. .
      </p>
      <p>Γ, s ≤ t, s′ ≤. t′ ⊢ Δ
.</p>
      <p>cross-mult
.</p>
      <p>There are corresponding rules for ≥ and for mixed pairs of inequalities. As usual
in order to ensure termination, cross-mult must not be applied repeatedly to
the same pair of inequalities.</p>
      <p>We can give. a geo m.etric interpretation of cross-multiplication: for two linear
inequalities x ≤ α, y ≤ β, cross-multiplication introduces a linear approximation
of the product (the bilinear term) xy. In this particular case, the right-hand side
.
of the new inequality xy ≥ βx + αy − αβ is the grea. test pl.ane that bounds the
expression xy from below (under the assumptions x ≤ α, y ≤ β). More generally,
the result of cross-multiplication is a bound on the value of a monomial in
terms of &lt;r-smaller monomials. Deriving such bounds is, in practical cases,
often sufficient to prove statements in nonlinear arithmetic.</p>
      <p>Restricting Cross-Multiplication. An unrestricted application of the rule
crossmult can produce arbitrarily many inequalities and does not terminate. As a
heuristic, we only use cross-mult if the product s · s′ already occurs as a factor
within a left-hand side of an equation or inequality (ignoring the coefficient of
s · s′). Although this is not strong enough to ensure termination, it guarantees
that the total degree of occurring monomials is bounded. We found this heuristic
to work reasonably well for most cases (a counterexample is Ex. 5 below).</p>
      <p>Case Splits. For two reasons, it is crucial to combine cross-multiplication with
case distinctions: (i) nonlinear monomials over the complete set of integers do
in general not have linear bounds (observe, for instance, that the term xy is not
bounded from above or below by any linear expression in x and y). (ii) case
distinctions are in general the only way to strengthen linear bounds (again,
. .
consider the term xy under the assumptions x ≤ α, y ≤ β, for which no more
precise linear lower bound exists than βx + αy − αβ).</p>
      <p>To account for (i), we introduce a rule that splits over the sign of the value
of a term. We apply this rule for variables x that occur in the left-hand side of
equations or inequalities:</p>
      <p>.
Γ, x &lt; 0 ⊢ Δ</p>
      <p>.
Γ, x = 0 ⊢ Δ
Γ ⊢ Δ</p>
      <p>.
Γ, x &gt; 0 ⊢ Δ
sign-cases
.</p>
      <p>Ternary splits are motivated by the observation that the case x = 0 usually
is easy to handle (significantly easier than the original problem), while at the
.
same time a strict inequality x &gt; 0 appears to be of much greater use in
cross. .
multiplication than x ≥ 0 (and correspondingly for x &lt; 0). In our experience,
the rule sign-cases outperforms binary cuts.</p>
      <p>Point (ii) is accommodated by using the rule strengthen from Sect. 4,
which we apply to linear inequalities in order to incrementally restrict the dom.ain
of a v.ariable. For the example above, after strengthening the inequality x ≤ α
to x ≤ α − 1, we can also derive a better bound βx + (α − 1)y − αβ + β for the
value of xy.</p>
      <p>Procedure 5. Apply Procedure 4 (equations handling and the incomplete
procedure for linear inequalities) with the highest priority, the rule split-eq with
second highest priority, and the rules cross-mult, sign-cases and strengthen
with the lowest priority and in a fair manner.</p>
      <p>
        Example 4. We give three further examples that can be proven using
Procedure 5 (the last two ones are taken from [
        <xref ref-type="bibr" rid="ref14 ref19">14, 19</xref>
        ]). In practice, it can often be
observed that Procedure 5 is able to solve nonlinear equational problems that
cannot be proven using Procedure 4 (only using Gr¨obner bases).
      </p>
      <p>. . .
xy = 0 ⊢ x = 0, y = 0
x2 =. 2 ⊢</p>
      <p>. . . .</p>
      <p>0 &lt; ab, 0 &lt; cd, 0 &lt; ac ⊢ 0 &lt; bd
Example 5. A valid sequent that. is not provab.le due. to the .restriction on the
application of cross-mult is ac ≤ bd − 1, de ≤ a, c ≥. 1, ce = b ⊢ . The
prob.
lem can be solved by cross-multiplying de ≤ a and c ≥ 1.</p>
      <p>Lemma 5. When applied to an invalid sequent (containing arbitrary equations
and inequalities), Procedure 5 will eventually produce a counterexample.
7</p>
      <p>
        Related Work
Most similar to our approach is the arithmetic handling in ACL2 [
        <xref ref-type="bibr" rid="ref13 ref14">13, 14</xref>
        ], which
also employs Fourier-Motzkin for linear and cross-multiplication for nonlinear
arithmetic. Concerning differences, ACL2 runs arithmetic handling as a purely
automated procedure, supports also rationals, does not have separate procedures
for equations and does not seem to perform a systematic case analysis.
      </p>
      <p>
        An method for handling linear equations and inequalities similar to our
approach (but lacking counterexample generation) is described in [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ] and
implemented in the Tecton tool. Related is also [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ] about the extension of linear
reasoning to nonlinear reasoning.
      </p>
      <p>
        Higher-order proof assistants usually support integer arithmetic and are so
general that arbitrary procedures can be implemented on top of them, often
targeting mathematical proofs. In comparison, we tried to develop a simple
calculus/procedure specifically for Java verification that works “out of the box”
and requires little expertise. The PVS proof assistant [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] can handle linear
integer arithmetic and can simplify nonlinear expressions (involving
multiplication and division) to some degree, but does (apparently) not go as far as our
approach or ACL2. The Coq system [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] implements an incomplete version of
the Omega method for deciding Presburger arithmetic (linear integer arithmetic
with quantifiers) that essentially boils down to Fourier-Motzkin. Coq can also
simplify ring expressions like polynomials. For HOL light [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ], a number of
tactics and decision procedures for arithmetic have been implemented, including
Cooper’s method for deciding Presburger arithmetic, handling of congruences
and simplification of polynomial expressions.
      </p>
      <p>
        Linear arithmetic is one of the most important theories supported by SMT
solvers (which generally provide incomparably better performance for linear
arithmetic than our implementation based on a general theorem prover
framework), see [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ] for a list. To the best of our knowledge, no SMT solver offers
support for nonlinear arithmetic similar to our approach or ACL2. SMT solvers
typically use linear programming techniques like Simplex, combined with
methods like branch-and-bound or Gomory’s cutting planes to realise completeness
on the integers.
8
      </p>
      <p>Conclusions and Future Work
We have presented the main components of a proof procedure for linear and
nonlinear integer arithmetic, represented as sequent calculus rules together with
application strategies. The procedure is completely implemented, and the
soundness of the implementation is verified in the prover KeY itself. In addition to
the calculus shown here, KeY also supports division and modulo operations and
provides further methods like polynomial division. Based on this, we have
formalised the Java semantics of integer operations.</p>
      <p>
        For the future, we are considering a more efficient stand-alone
implementation of the calculus, possibly based on the DPLL(T) framework. As a more
conceptual extension, we plan to combine the calculus with free-variable
reasoning for handling quantifiers. The general approach for this is described in
[
        <xref ref-type="bibr" rid="ref23">23</xref>
        ], but needs to be investigated more carefully. Finally, we would like to add
support for bit-wise operations (as they can be found in Java).
      </p>
      <p>Acknowledgements. I want to thank Wolfgang Ahrendt and Richard Bubel for
many inspiring discussions and comments on this paper. Thanks are also due to
the anonymous referees for helpful comments.</p>
      <p>Proofs (-Sketches)
Proof. (Lem. 1) Termination: the termination of simp and red is immediate.</p>
      <p>.</p>
      <p>We call the left-hand sides x of equations x = s (x a variable) in the antecedent
N well-founded ordering on the set of multisets over ∪ {∞} by lexicographic
“defined variables,” and all other variables “independent variables.” When
applying red exhaustively, each defined variable will eventually occur in exactly
one place in the sequent (namely, in the defining equation).</p>
      <p>For proving termination when col-red is added, we show that the leading</p>
      <p>.
coefficients α &gt; 1 of equations αx = s constantly get smaller. We introduce a
comparison: for a1 ≤ · · · ≤ an, b1 ≤ · · · ≤ bm, we define:
N gcd(α1, . . . , αn) ∈ ∪ {∞}, where α1, . . . , αn are all coefficients of equations
For a sequent and an independent variable x, we then consider the divisors
.
αix = si in the antecedent (we define gcd() = ∞). The multiset of such gcds for
all independent variables gets &lt;m-smaller for each application of col-red, and
it gets &lt;m-smaller or stays the same when red is applied (each time potentially
followed by an application of simp). This proves termination.</p>
      <p>Completeness and proof confluence: assume that no further rules can be
applied, but the proof branch at hand is not closed. This implies that the coefficient
of the left-hand side of all equations is 1 (otherwise, simp or col-red can be
applied), and that no left-hand side term occurs in two places in the sequent
(otherwise, red can be applied). Due to the fact that 0 is the only polynomial whose
value is constantly 0 (and correspondingly for tuples of polynomials), there is a
countermodel for the equations in the succedent (a valuation of the independent
variables). We extend this valuation on the defined variables according to the
equations in the antecedent. When investigating red and col-red, it can be
seen that this countermodel also is a countermodel of the original sequent.</p>
      <p>{{a1, . . . , an}} &lt;m {{b1, . . . , bm}} iff</p>
      <p>n &lt; m or (n = m and (a1, . . . , an) &lt;lex (b1, . . . , bm))
Proof. (Lem. 2) To see that the application of fm-elim terminates, consider
the multiset of pairs of inequalities in the antecedent to which fm-elim can but
has not yet been applied. Pairs of inequalities can be compared lexicographically
using &lt;r, and multisets of pairs can be compared using the multiset extension
of this ordering. As the multiset gets smaller in this well-founded ordering each
time fm-elim is applied, termination is guaranteed.</p>
      <p>The rule anti-symm can introduce new equations. Such a new equation is
either trivially true and is eliminated, or it is a contradiction and the proof
branch is closed, or it reduces the number of independent variables by one. In
the last case, Fourier-Motzkin basically has to start over once Procedure 1 has
done its job, but this can only happen a finite number of times.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Beckert</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          , H¨ahnle, R.,
          <string-name>
            <surname>Schmitt</surname>
          </string-name>
          , P.H., eds.:
          <article-title>Verification of Object-Oriented Software: The KeY Approach</article-title>
          .
          <source>LNCS 4334</source>
          . Springer-Verlag (
          <year>2007</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Mostowski</surname>
          </string-name>
          , W.:
          <article-title>Fully verified JavaCard API reference implementation</article-title>
          .
          <source>In: 4th International Verification Workshop</source>
          . (
          <year>2007</year>
          ) To appear.
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Fitting</surname>
            ,
            <given-names>M.C.</given-names>
          </string-name>
          :
          <string-name>
            <surname>First-Order Logic</surname>
          </string-name>
          and
          <source>Automated Theorem Proving. 2nd edn</source>
          . Springer-Verlag, New York (
          <year>1996</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>King</surname>
            ,
            <given-names>J.C.</given-names>
          </string-name>
          :
          <article-title>Symbolic execution and program testing</article-title>
          .
          <source>Communications of the ACM</source>
          <volume>19</volume>
          (
          <year>1976</year>
          )
          <fpage>385</fpage>
          -
          <lpage>394</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Knuth</surname>
            ,
            <given-names>D.E.</given-names>
          </string-name>
          :
          <article-title>The Art of Computer Programming: Seminumerical Algorithms</article-title>
          . Addison-Wesley (
          <year>1997</year>
          )
          <article-title>Third edition</article-title>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Buchberger</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          :
          <article-title>An algorithmical criterion for the solvability of algebraic systems</article-title>
          .
          <source>Aequationes Mathematicae</source>
          <volume>4</volume>
          (
          <year>1970</year>
          )
          <fpage>374</fpage>
          -
          <lpage>383</lpage>
          (German).
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Buchberger</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          :
          <article-title>A critical-pair/completion algorithm for finitely generated ideals in rings</article-title>
          .
          <source>In: Proceedings of the Symposium ”Rekursive Kombinatorik” on Logic and Machines: Decision Problems and Complexity</source>
          , London, UK, Springer-Verlag (
          <year>1984</year>
          )
          <fpage>137</fpage>
          -
          <lpage>161</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Dershowitz</surname>
          </string-name>
          , N.:
          <article-title>Termination of rewriting</article-title>
          .
          <source>J. Symb. Comput</source>
          .
          <volume>3</volume>
          (
          <year>1987</year>
          )
          <fpage>69</fpage>
          -
          <lpage>116</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Dershowitz</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Manna</surname>
            ,
            <given-names>Z.</given-names>
          </string-name>
          :
          <article-title>Proving termination with multiset orderings</article-title>
          .
          <source>Commun. ACM</source>
          <volume>22</volume>
          (
          <year>1979</year>
          )
          <fpage>465</fpage>
          -
          <lpage>476</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Schrijver</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Theory of Linear and Integer Programming</article-title>
          . Wiley (
          <year>1986</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Owre</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Rajan</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Rushby</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Shankar</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Srivas</surname>
            ,
            <given-names>M.:</given-names>
          </string-name>
          <article-title>PVS: Combining specification, proof checking, and model checking</article-title>
          . In Alur, R.,
          <string-name>
            <surname>Henzinger</surname>
          </string-name>
          , T.A., eds.
          <source>: Proceedings, CAV. Volume 1102 of LNCS</source>
          ., Springer (
          <year>1996</year>
          )
          <fpage>411</fpage>
          -
          <lpage>414</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Dowek</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Felty</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Herbelin</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Huet</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Murthy</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Parent</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Paulin-Mohring</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Werner</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          :
          <article-title>The Coq proof assistant user's guide</article-title>
          .
          <source>Rapport Techniques 154</source>
          ,
          <string-name>
            <surname>INRIA</surname>
          </string-name>
          , Rocquencourt, France (
          <year>1993</year>
          )
          <article-title>Version 5</article-title>
          .8.
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Kaufmann</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Moore</surname>
            ,
            <given-names>J.S.:</given-names>
          </string-name>
          <article-title>ACL2: An industrial strength version of nqthm</article-title>
          .
          <source>In: Compass'96: Eleventh Annual Conference on Computer Assurance</source>
          , Gaithersburg, Maryland, National Institute of Standards and Technology (
          <year>1996</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Warren</surname>
            <given-names>A.</given-names>
          </string-name>
          <string-name>
            <surname>Hunt</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Krug</surname>
            ,
            <given-names>R.B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Moore</surname>
            ,
            <given-names>J.S.</given-names>
          </string-name>
          :
          <article-title>Linear and nonlinear arithmetic in ACL2</article-title>
          . In Geist, D.,
          <string-name>
            <surname>Tronci</surname>
          </string-name>
          , E., eds.
          <source>: CHARME</source>
          . Volume
          <volume>2860</volume>
          of Lecture Notes in Computer Science., Springer (
          <year>2003</year>
          )
          <fpage>319</fpage>
          -
          <lpage>333</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>Breunesse</surname>
            ,
            <given-names>C.B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Jacobs</surname>
          </string-name>
          , B., van den Berg, J.:
          <article-title>Specifying and verifying a decimal representation in java for smart cards</article-title>
          .
          <source>In: Proceedings of the 9th International Conference on Algebraic Methodology and Software Technology</source>
          , London, UK, Springer-Verlag (
          <year>2002</year>
          )
          <fpage>304</fpage>
          -
          <lpage>318</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16. :
          <article-title>Gemplus purse applet</article-title>
          . (http://www.gemplus.com/smart/r d/publications/case-study/)
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <surname>Kapur</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Nie</surname>
            ,
            <given-names>X.</given-names>
          </string-name>
          :
          <article-title>Reasoning about numbers in tecton</article-title>
          .
          <source>In: International Symposium on Methodologies for Intelligent Systems</source>
          , Charlotte, North Carolina. (
          <year>1994</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <surname>Matijasevic</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          :
          <article-title>Enumerable sets are diophantine (Russian)</article-title>
          .
          <source>Dokl. Akad. Nauk SSSR</source>
          <volume>191</volume>
          (
          <year>1970</year>
          )
          <fpage>279</fpage>
          -
          <lpage>282</lpage>
          Translation in Soviet Math Doklady, Vol
          <volume>11</volume>
          ,
          <year>1970</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19.
          <string-name>
            <surname>Warren</surname>
            <given-names>A.</given-names>
          </string-name>
          <string-name>
            <surname>Hunt</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Krug</surname>
            ,
            <given-names>R.B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Moore</surname>
            ,
            <given-names>J.S.:</given-names>
          </string-name>
          <article-title>Integrating nonlinear arithmetic into into ACL2</article-title>
          .
          <source>In: Fifth International Workshop on the ACL2 Theorem Prover and Its Applications</source>
          <volume>(</volume>
          <fpage>ACL2</fpage>
          -
          <year>2004</year>
          ).
          <article-title>(</article-title>
          <year>2004</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          20.
          <string-name>
            <surname>Kapur</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Cyrluk</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          :
          <article-title>Reasoning about nonlinear inequality constraints: a multi-level approach</article-title>
          .
          <source>In: Proceedings of a workshop on Image understanding workshop</source>
          , San Francisco, CA, USA, Morgan Kaufmann Publishers Inc. (
          <year>1989</year>
          )
          <fpage>904</fpage>
          -
          <lpage>915</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          21.
          <string-name>
            <surname>Harrison</surname>
          </string-name>
          , J.:
          <source>The HOL light manual (1.1)</source>
          (
          <year>2000</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          22.
          <string-name>
            <surname>Ranise</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Tinelli</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          :
          <article-title>The Satisfiability Modulo Theories Library (SMT-LIB). www.SMT-LIB.org (</article-title>
          <year>2006</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          23. Ru¨mmer,
          <string-name>
            <given-names>P.</given-names>
            ,
            <surname>Shah</surname>
          </string-name>
          ,
          <string-name>
            <surname>M.A.</surname>
          </string-name>
          :
          <article-title>Proving programs incorrect using a sequent calculus for Java Dynamic Logic</article-title>
          . In: International Conference on Tests And
          <string-name>
            <surname>Proofs (TAP).</surname>
            <given-names>LNCS</given-names>
          </string-name>
          , Springer (
          <year>2007</year>
          ) To appear.
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>