<!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>Walking through the Forest: Fast EUF Proof-Checking Algorithms</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Frederic Besson</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Pierre-Emmanuel Cornilleau</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Ronan Saillard</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Bretagne Atlantique</institution>
          ,
          <country country="FR">France</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Inria Rennes</institution>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2012</year>
      </pub-date>
      <fpage>58</fpage>
      <lpage>64</lpage>
      <abstract>
        <p>The quanti er-free logic of Equality with Uninterpreted Function symbols (EUF) is at the core of Satis ability Modulo Theory (SMT) solvers. There exist several competing proof formats for EUF proofs. We propose original proof formats obtained from proof forests that are the artifacts proposed by Nieuwenhuis and Oliveras to extract e ciently EUF unsatis able cores. Our proof formats can be generated by SMT solvers for almost free. Moreover, our preliminary experiments show that our novel veri ers outperform other existing EUF veri ers and that our proof formats appear to be more concise than existing EUF proofs.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>the running time of all the veri ers is negligible w.r.t. the type-checking of the EUF proofs.
Another result of our experiments is that proof forests veri ers are very fast and that (trimmed
down) proof forests appear to be more concise than existing EUF proofs. Another advantage
is that proof forests can be generated for almost free by SMT solvers based on proof forests.</p>
      <p>The rest of the paper is organised as follows. Section 2 provides basic de nitions and known
facts about the EUF logic. Section 3 recalls the nature of proof forests and explains the workings
of our novel EUF proof veri ers. Section 4 is devoted to experiments. Section 5 concludes.
2</p>
    </sec>
    <sec id="sec-2">
      <title>Background</title>
      <p>We write T ( ; V) the smallest set of terms built upon a set of variables V and a ranked alphabet
of uninterpreted function symbols. For EUF, an atomic formula is of the form t = t0 for t,
t0 2 T ( ; ;) and a literal is an atomic formula or its negation. Equality (=) is re exive,
symmetric, transitive and closed under congruence:
x = x
x = y
y = x
x = y; y = z
x = z</p>
      <p>x1 = y1; : : : ; xn = yn
f (x1; : : : ; xn) = f (y1; : : : ; yn)</p>
      <p>
        Ackermann has proved using a reduction approach that the EUF logic is decidable [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. The
reduction consists in introducing for each term f (~x) a boolean variable f~x and encoding the
congruence rule by adding the boolean formula x1 = y1 ^ : : : ^ xn = yn ) f~x = fy~ for each
pair of terms f (~x), f (~y). This encoding is responsible for a quadratic blow up of the formula.
Nelson has proposed an e cient decision procedure for deciding the satis ability of a set of EUF
literals using a congruence closure algorithm [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ]. Nieuwenhuis and Oliveras have shown how to
e ciently generate unsatis able cores by instrumenting the congruence closure algorithm with a
proof forest [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ] gathering all the necessary information for generating proofs (see Section 3.1).
3
      </p>
    </sec>
    <sec id="sec-3">
      <title>Walking through the proof forest</title>
      <p>In the following, we assume w.l.o.g. that EUF terms are at and curried [20, Section 3.1] i.e.,
are of the form a or f (a1; a2) where f represents an explicit application symbol and a, a1 and a2
are constants. In the rest, we drop the f and write a1(a2) for f (a1; a2). These transformations
can be performed in linear time and simplify the decision procedure.
3.1</p>
      <sec id="sec-3-1">
        <title>Proof forest</title>
        <p>
          Nieuwenhuis and Oliveras have proposed a proof-producing congruence closure algorithm for
deciding EUF [
          <xref ref-type="bibr" rid="ref20">20</xref>
          ]. Their main contribution is an e cient Explain operation that outputs a
(small) set of input equations E needed to deduce an equality, say a = b. If a 6= b is also
part of the input, E [ a 6= b is a (small) unsatis able core that is used by the SMT solver for
backtracking. As a result, SMT solvers using congruence closure run a variant of the Explain
algorithm { whether or not they are proof producing.
        </p>
        <p>The Explain algorithm is based on a speci c data structure: the proof forest. A proof forest
is a collection of trees and each edge a ! b in the proof forest is labelled by a reason justifying
why the equality a = b holds. A reason is either an input equation a = b or a pair of input
equations a1(a2) = a and b1(b2) = b. For the second case, there must be justi cations in the
forest for a1 = b1 and a2 = b2.</p>
        <p>We give in Figure 1 a modi ed version of the original Explain algorithm. The NearestAncestor
and Parent functions return (if it exists) respectively the nearest common ancestor of two nodes
l e t E x p l a i n A l o n g P a t h ( a , c ) :=
a := H i g h e s t N o d e ( a ) ;
c := H i g h e s t N o d e ( c ) ;
i f a = c t h e n r e t u r n
e l s e
b:= P a r e n t ( a ) ;
i f e d g e h a s form a a=!b b
t h e n Output ( a = b )
e l s e f / e d g e h a s form a b1(b2)=!b b /</p>
        <p>a1(a2)=a
Output a1 ( a2)=a and b1 ( b2)=b ;</p>
        <p>E x p l a i n ( a1 , b1 ) ; E x p l a i n ( a2 , b2 ) g ;
Union ( a , b ) ; E x p l a i n A l o n g P a t h ( b , c )
(a) ExplainAlongPath
l e t E x p l a i n ( a , b ) :=
c := N e a r e s t A n c e s t o r ( a , b ) ;
E x p l a i n A l o n g P a t h ( a , c ) ;
E x p l a i n A l o n g P a t h ( b , c )</p>
        <p>
          (b) Explain
in the proof forest and the parent of a node in the proof forest. A union- nd data structure [
          <xref ref-type="bibr" rid="ref23">23</xref>
          ]
is also used: Union(a,b) merges the equivalence classes of a and b and Find(a) returns the
current representive of the class of a. The HighestNode(c) operation returns the highest node
(i.e., the node with minimal depth in the proof forest) belonging to the equivalence class of c.
        </p>
        <p>Contrary to the original version, our algorithm is recursive. The Union operation has also
been moved. As a consequence output equations are ordered di erently. This will ease our
futur proof production. Another di erence is that the original algorithm always terminates but
does not detect certain ill-formed proof forests e.g., a b=f(b!) b. In this case, the recursive
a=f(a)
algorithm does not terminate (this issue is dealt with in section 4.1).
3.2</p>
      </sec>
      <sec id="sec-3-2">
        <title>Proof forest veri er</title>
        <p>The Explain algorithm of Figure 1 can be turned into a EUF proof veri er. The veri er is a
version of Explain augmented with additional checks to ensure that the edges obtained from the
SMT solver correspond to a well-formed proof forest. For instance, the veri er checks that edges
are only labelled by input equations. Moreover, for edges of the form a b1(b2)=!b b, the recursive
a1(a2)=a
calls to Explain ensure that a1 = b1 and a2 = b2 have proofs in the proof forest i.e., a1 (resp.
a2) is connected with b1 (resp. b2) by some valid path in the proof forest. For e ciency and
simplicity, the least common ancestors are not computed by the veri er but used as untrusted
hints. The soundness of the veri er does not depend on the validity of this information as the
proposed least common ancestor is just used to guide the proof. If the return node is not a
common ancestor, the veri er will simply fail.</p>
        <p>For the veri er, a EUF proof is a pruned proof forest corresponding to the edges walked
through during a preliminary run of Explain. As the SMT solver needs to traverse the proof
forest to extract unsatis able core, we argue that the proof forest is a EUF proof that requires
no extra-work from the SMT solver.
l e t UFchecker i n p u t e d g e s ( x , y ) :=
f o r ( a = b ) 2 i n p u t do Union ( a , b ) done
f o r a b1(b2)=!b b i n e d g e s do</p>
        <p>a1(a2)=a
i f ( a1 ( a2)=a ) 2 i n p u t &amp; ( b1 ( b2)=b ) 2 i n p u t</p>
        <p>&amp; i s E q u a l ( a1 , b1 ) &amp; i s E q u a l ( a2 , b2 )
t h e n Union ( a , b ) e l s e f a i l
done
r e t u r n i s E q u a l ( x , y )
To avoid traversing the same edge several times, the Explain algorithm and its veri er are
using a union- nd data structure. Therefore, the Explain veri er implicitly embeds a decision
procedure for the theory of equality. Our optimised veri er fully exploits this observation and
starts by feeding all the input equalities of the form a = b into its union- nd. For the decision
procedure, new equalities are obtained by applying the congruence rule and e ciency crucially
depends on a clever indexing of the equations. The veri er does not require this costly machinery
and takes as argument a trimmed down proof forest reduced to the list of edges of the forest
of form a b1(b2)=!b b. The edge labels indicate the equations that need to be paired to derive
a1(a2)=a
a = b by the congruence rule. The algorithm of the veri er is given in Figure 2 where the
predicate isEqual(a,b) checks whether a and b have the same representative in the union- nd
i.e., Find(a) = Find(b). Once again, a preliminary run of Explain is su cient to generate a
proof for this optimised veri er.
4
4.1</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Implementation and experiments</title>
      <sec id="sec-4-1">
        <title>EUF veri ers in Coq</title>
        <p>
          Our veri ers are implemented using the native version of Coq [
          <xref ref-type="bibr" rid="ref8">8</xref>
          ] which features persistent
arrays [
          <xref ref-type="bibr" rid="ref13">13</xref>
          ]. Persistent arrays are purely functional data-structures that ensure constant time
accesses and updates of the array as soon as it is used in a monadic way. For maximum
e ciency, all the veri ers make a pervasive use of those arrays that allow for an e cient
unionnd implementation: union and nd have their logarithmic asymptotic complexity.
        </p>
        <p>Compared to other languages, a constraint imposed by Coq is that all programs must be
terminating. The UFchecker (see Section 3.3) is trivially terminating. Termination of the
proof-forest veri er is more intricate because the Explain algorithm (see Figure 3.2) does not
terminate if the proof forest is ill-formed e.g., has cycles. However, if the proof forest is
wellformed, an edge is only traversed once. As a result, at each recursive call, our veri er decrements
an integer initialised to the size of the proof forest. In Coq, the veri er fails after exhausting
the maximum number of allowed recursive calls.</p>
        <p>For the sake of comparison, we have also implemented the EUF proof format of Z3. Z3
refutations are also generated using Explain [14, Section 3.4.2]. Unlike our veri ers, Z3 proofs
use explicit boolean reasoning and modus ponens. As a consequence formulae do not have
90 VeriT
80 Proof Forest</p>
        <p>Z3</p>
        <p>
          UFchecker
70
.)60
c
(se50
e
m
itc40
q
o
c30
a constant size. As already noticed by others [
          <xref ref-type="bibr" rid="ref2 ref9">9, 2</xref>
          ], e cient veri ers require a careful
handling of sharing. Our terms and formulae are hash-consed ; sharing is therefore maximum and
comparison of terms or formulae is a constant-time operation.
4.2
        </p>
      </sec>
      <sec id="sec-4-2">
        <title>Benchmarks</title>
        <p>
          We have assessed the e ciency of our EUF veri ers on several families of handcrafted
conjunctive EUF benchmarks. The benchmarks are large and all the literals are necessary to prove
unsatis ability. The formulae are not representative of con ict clauses obtained from
SMTLIB [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ] benchmarks which are usually very small [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ] and would not stress the scalability of
the veri ers. For all our benchmarks the running time of the veri ers is negligible especially
compared to the time spent type-checking the EUF proofs and the proof size is linear in the
size of the formulae.
        </p>
        <p>00 10000 20000 30000 40000 50000 60000
benchmark size (number of vari7a0b0le0s0) 80000 90000 100000
00 10000 20000 30000 40000 50000 60000
benchmark size (number of var7ia0b0l0e0s) 80000 90000 100000
(a) Total running time
(b) Size of proofs
100
10
.)
(scee 1
m
it
g
n
ikce 0.1
h
c
x0 = x1 x0 6= x(j+1) j
f (xi j; xi j) = xi j+1 = ::: = xi j+j for i 2 f0 : : : jg
The benchmarks are indexed by the number of EUF variables and the results are obtained
using a Linux laptop with a processor Intel Core 2 Duo T9600 (2.80GHz) and 4GB of Ram.
Figure 3a shows the time needed to construct and compile Coq proof terms. Figure 3b shows
the size of the compiled proof terms. Figure 3c is focusing on the running time of the veri ers
excluding the time needed to construct and dump proof terms.</p>
        <p>
          For all our benchmarks, the UFchecker shows a noticeable advantage over the other veri ers.
We can also remark that its behaviour is more predicable. The veriT veri er [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ] is using proofs
almost as small as proof forests but the traces generated by veriT are sometimes two orders of
magnitude bigger. In the timings, the pre-processing needed to perform this impressive proof
reduction is accounted for and might explain why the veriT veri er gets slower as the benchmark
size grows. Remark also that for the biggest benchmarks, veriT fails to generate proofs.
        </p>
        <p>Our Z3 veri er scales well despite being slightly but constantly outrun by the veri ers based
on proof-forests. The running time of the di erent veri ers is given Figure 3c using a logarithmic
scale. This emphases the fact that, except for the veriT veri er, the running time of the all
the veri ers is below the second and is therefore not the limiting factor of the veri cation. Not
surprisingly, the UFchecker requires smaller proofs and therefore its global checking time is also
smaller. For big benchmarks, its running time also tends to be smaller than the running time
of other veri ers.
5</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Conclusion</title>
      <p>
        Proof generating SMT solvers such as Z3 [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ], CVC3 [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] or veriT [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] routinely generate EUF
proofs in various formats. Those formats have in common that proof-checking is essentially
linear in the size of the proof. In theory, our EUF proofs cannot be checked in linear time
and the veri ers need to embed a union- nd algorithm. In practice, our experiments conclude
that our UFchecker veri er outperforms existing veri ers for EUF proofs and that succinct
EUF proofs are the key for scalability. Embedding union- nd in EUF proofs was previously
proposed by Conchon et al., [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ]. However, in their approach, union- nd computations are
interleaved with logic inferences that are responsible for an overhead that is absent from our
veri ers. The importance of succinct proofs has been recognised by Stump [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ] and its Logical
Framework with Side Conditions (LFSC). Unlike LFSC proofs, our proofs are less exible but
purely computational and use the principle of proof by re ection [5, Chapter 16]. As future
work, we intend to integrate the UFchecker into the SMT proof veri er developed by several of
the current authors [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] and extend its scope to the logic of constructors.
      </p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>W.</given-names>
            <surname>Ackermann</surname>
          </string-name>
          .
          <article-title>Solvable Cases of the Decision Problem. Studies in Logic and the Foundations of Mathematics</article-title>
          . North-Holland, Amsterdam,
          <year>1954</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>M.</given-names>
            <surname>Armand</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G.</given-names>
            <surname>Faure</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Gregoire</surname>
          </string-name>
          , C. Keller, L. Thery, and
          <string-name>
            <given-names>B.</given-names>
            <surname>Werner</surname>
          </string-name>
          .
          <article-title>A Modular Integration of SAT/SMT Solvers to Coq through Proof Witnesses</article-title>
          .
          <source>In CPP</source>
          , volume
          <volume>7086</volume>
          <source>of LNCS</source>
          , pages
          <volume>135</volume>
          {
          <fpage>150</fpage>
          . Springer,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>C.</given-names>
            <surname>Barret</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Stump</surname>
          </string-name>
          , and
          <string-name>
            <given-names>C.</given-names>
            <surname>Tinelli</surname>
          </string-name>
          .
          <source>The SMT-LIB standard: Version 2.0</source>
          ,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <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>
          . CVC3.
          <source>In Proc. of CAV</source>
          <year>2007</year>
          , volume
          <volume>4590</volume>
          <source>of LNCS</source>
          , pages
          <volume>298</volume>
          {
          <fpage>302</fpage>
          . Springer,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>Y.</given-names>
            <surname>Bertot</surname>
          </string-name>
          and
          <string-name>
            <given-names>P.</given-names>
            <surname>Casteran</surname>
          </string-name>
          .
          <article-title>Interactive Theorem Proving</article-title>
          and
          <string-name>
            <given-names>Program</given-names>
            <surname>Development</surname>
          </string-name>
          .
          <source>Coq'Art: The Calculus of Inductive Constructions. Texts in Theoretical Computer Science</source>
          . Springer,
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>F.</given-names>
            <surname>Besson</surname>
          </string-name>
          ,
          <string-name>
            <surname>P-E. Cornilleau</surname>
            , and
            <given-names>D.</given-names>
          </string-name>
          <string-name>
            <surname>Pichardie</surname>
          </string-name>
          .
          <article-title>Modular SMT Proofs for Fast Re exive Checking Inside Coq</article-title>
          .
          <source>In CPP</source>
          , volume
          <volume>7086</volume>
          <source>of LNCS</source>
          , pages
          <volume>151</volume>
          {
          <fpage>166</fpage>
          . Springer,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>F.</given-names>
            <surname>Besson</surname>
          </string-name>
          ,
          <string-name>
            <surname>P-E. Cornilleau</surname>
            , and
            <given-names>D.</given-names>
          </string-name>
          <string-name>
            <surname>Pichardie</surname>
          </string-name>
          .
          <article-title>A nelson-oppen based proof system using theory speci c proof systems</article-title>
          .
          <source>In PxTP</source>
          <year>2011</year>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>M.</given-names>
            <surname>Boesp ug</surname>
          </string-name>
          , M. Denes, and
          <string-name>
            <given-names>B.</given-names>
            <surname>Gregoire</surname>
          </string-name>
          . Full Reduction at Full Throttle.
          <source>In CPP</source>
          , volume
          <volume>7086</volume>
          <source>of LNCS</source>
          , pages
          <volume>362</volume>
          {
          <fpage>377</fpage>
          . Springer,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>S.</given-names>
            <surname>Bo</surname>
          </string-name>
          <article-title>hme and</article-title>
          <string-name>
            <given-names>T.</given-names>
            <surname>Weber</surname>
          </string-name>
          .
          <article-title>Fast LCF-style Proof Reconstruction for Z3</article-title>
          .
          <source>In Proc. of ITP</source>
          <year>2010</year>
          , volume
          <volume>6172</volume>
          <source>of LNCS</source>
          , pages
          <volume>179</volume>
          {
          <fpage>194</fpage>
          . Springer,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>T.</given-names>
            <surname>Bouton</surname>
          </string-name>
          ,
          <string-name>
            <surname>D. C. B. de Oliveira</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          <string-name>
            <surname>Deharbe</surname>
            , and
            <given-names>P.</given-names>
          </string-name>
          <string-name>
            <surname>Fontaine</surname>
          </string-name>
          .
          <article-title>veriT: an open, trustable and e cient SMT-solver</article-title>
          .
          <source>In Proc. of CADE</source>
          <year>2009</year>
          , LNCS. Springer,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>E.</given-names>
            <surname>Cohen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Dahlweid</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. A.</given-names>
            <surname>Hillebrand</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Leinenbach</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Moskal</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Santen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>W.</given-names>
            <surname>Schulte</surname>
          </string-name>
          , and
          <string-name>
            <surname>S. Tobies.</surname>
          </string-name>
          <article-title>VCC: A Practical System for Verifying Concurrent C</article-title>
          . In TPHOLs, volume
          <volume>5674</volume>
          <source>of LNCS</source>
          , pages
          <volume>23</volume>
          {
          <fpage>42</fpage>
          . Springer,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>S.</given-names>
            <surname>Conchon</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Contejean</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Kanig</surname>
          </string-name>
          , and
          <string-name>
            <given-names>S.</given-names>
            <surname>Lescuyer</surname>
          </string-name>
          .
          <article-title>Lightweight integration of the ergo theorem prover inside a proof assistant</article-title>
          .
          <source>In Proceedings of the second workshop on Automated formal methods, AFM '07</source>
          , pages
          <fpage>55</fpage>
          {
          <fpage>59</fpage>
          . ACM,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>S.</given-names>
            <surname>Conchon</surname>
          </string-name>
          and
          <string-name>
            <surname>J-C.</surname>
          </string-name>
          <article-title>Fillia^tre. Semi-persistent Data Structures</article-title>
          .
          <source>In ESOP</source>
          , volume
          <volume>4960</volume>
          <source>of LNCS</source>
          , pages
          <volume>322</volume>
          {
          <fpage>336</fpage>
          . Springer,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <surname>L. M. de Moura</surname>
            and
            <given-names>N.</given-names>
          </string-name>
          <article-title>Bj rner. Proofs and Refutations, and Z3</article-title>
          .
          <source>In Proc. of the LPAR 2008 Workshops, Knowledge Exchange: Automated Provers and Proof Assistants</source>
          , volume
          <volume>418</volume>
          . CEURWS.org,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <surname>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>
          <year>2008</year>
          , volume
          <volume>4963</volume>
          <source>of LNCS</source>
          , pages
          <volume>337</volume>
          {
          <fpage>340</fpage>
          . Springer,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>B.</given-names>
            <surname>Dutertre</surname>
          </string-name>
          and L. de Moura.
          <article-title>The Yices SMT solver</article-title>
          . Tool paper at http://yices.csl.sri.com/toolpaper.pdf,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <surname>J-C.</surname>
          </string-name>
          <article-title>Fillia^tre and C. Marche. The Why/Krakatoa/Caduceus Platform for Deductive Program Veri cation</article-title>
          .
          <source>In CAV</source>
          , volume
          <volume>4590</volume>
          <source>of LNCS</source>
          , pages
          <volume>173</volume>
          {
          <fpage>177</fpage>
          ,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <surname>K. R. M. Leino</surname>
          </string-name>
          .
          <article-title>Dafny: An Automatic Program Veri er for Functional Correctness</article-title>
          .
          <source>In LPAR-16</source>
          , volume
          <volume>6355</volume>
          <source>of LNCS</source>
          , pages
          <volume>348</volume>
          {
          <fpage>370</fpage>
          . Springer,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>G.</given-names>
            <surname>Nelson</surname>
          </string-name>
          and
          <string-name>
            <given-names>D. C.</given-names>
            <surname>Oppen</surname>
          </string-name>
          .
          <article-title>Fast decision procedures based on congruence closure</article-title>
          .
          <source>J. ACM</source>
          ,
          <volume>27</volume>
          (
          <issue>2</issue>
          ):
          <volume>356</volume>
          {
          <fpage>364</fpage>
          ,
          <string-name>
            <surname>April</surname>
          </string-name>
          <year>1980</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>R.</given-names>
            <surname>Nieuwenhuis</surname>
          </string-name>
          and
          <string-name>
            <given-names>A.</given-names>
            <surname>Oliveras</surname>
          </string-name>
          .
          <article-title>Proof-Producing Congruence Closure</article-title>
          .
          <source>In Proc. of RTA</source>
          <year>2005</year>
          , volume
          <volume>3467</volume>
          <source>of LNCS</source>
          , pages
          <volume>453</volume>
          {
          <fpage>468</fpage>
          . Springer,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <given-names>R.</given-names>
            <surname>Saillard</surname>
          </string-name>
          . EUF Veri ers in Coq. http://www.irisa.fr/celtique/ext/euf.
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <given-names>A.</given-names>
            <surname>Stump</surname>
          </string-name>
          .
          <article-title>Proof checking technology for satis ability modulo theories</article-title>
          .
          <source>Electron. Notes Theor. Comput. Sci.</source>
          ,
          <volume>228</volume>
          :
          <fpage>121</fpage>
          {
          <fpage>133</fpage>
          ,
          <year>January 2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          [23]
          <string-name>
            <given-names>R. E.</given-names>
            <surname>Tarjan</surname>
          </string-name>
          .
          <article-title>E ciency of a good but not linear set union algorithm</article-title>
          .
          <source>J. ACM</source>
          ,
          <volume>22</volume>
          (
          <issue>2</issue>
          ):
          <volume>215</volume>
          {
          <fpage>225</fpage>
          ,
          <string-name>
            <surname>April</surname>
          </string-name>
          <year>1975</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>