<!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>Instantiation and Pretending to be an SMT Solver with VA M P I RE</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Giles Reger</string-name>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Martin Suda</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Andrei Voronkov</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Chalmers University of Technology</institution>
          ,
          <addr-line>Gothenburg</addr-line>
          ,
          <country country="SE">Sweden</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>TU Wien</institution>
          ,
          <addr-line>Vienna</addr-line>
          ,
          <country country="AT">Austria</country>
        </aff>
        <aff id="aff2">
          <label>2</label>
          <institution>University of Manchester</institution>
          ,
          <addr-line>Manchester</addr-line>
          ,
          <country country="UK">UK</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>This paper aims to do two things. Firstly, it discusses how the VAMPIRE automatic theorem prover both succeeds and fails at pretending to be an SMT solver. We discuss how Vampire reasons with problems containing both quantification and theories, the limitations this places on what it can do, and the advantages this provides over the standard SMT approach. Secondly, it focuses on the problem of instantiation of quantified formulas and asks whether VAMPIRE needs it (it does) and whether it can directly borrow techniques from SMT solving (maybe).</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1 Introduction</title>
      <p>
        VAMPIRE [22] is an automatic theorem prover (ATP) for first-order logic. It is successful at
establishing both theorems and non-theorems, winning related tracks in the well-known CASC competition1
[37]. For the last few years, we have been extending VAMPIRE’s theory reasoning abilities and in 2016
VAMPIRE entered SMT-COMP2 [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] and performed well in a number of divisions.
      </p>
      <p>Whilst there is a long history of extending ATPs with theory reasoning capabilities, this has only
achieved limited success and in recent years theory reasoning has been dominated by SMT solvers. To
extend satisfiability checking procedures for ground theories to handle quantifiers, the focus has been
on instantiation techniques that aim to find useful instances of quantified formulas to pass to the ground
procedures. Arguably, this may become a bottleneck when the reasoning requires many non-trivial
instances. Conversely, ATPs reason directly with universally quantified clauses and make inferences
at this level, e.g., p(x) _ q(x) resolves with :p(f (y)) to establish that all instances of q(f (y)) must
hold. This approach performs generally well for pure first-order problems, but is not traditionally suited
to reasoning with theories. We conjecture (currently without evidence) that instance-based techniques
are more suited to problems with large ground parts and small quantified parts, whilst saturation-based
techniques are more suited to problems making heavy use of quantifiers. We are currently exploring this
conjecture. The goal of recent developments in VAMPIRE has been to preserve efficient techniques for
reasoning with quantifiers whilst adding effective techniques for reasoning with theories.</p>
      <p>This paper assumes general knowledge of SMT solving and first-order logic as this paper is written
with the SMT community in mind. An introduction to these topics can be found in many of the papers
cited in this paper. We begin (Section 2) by describing how VAMPIRE is both similar and different to
an SMT solver. We then describe briefly how VAMPIRE currently reasons with quantifiers and theories
(Section 3). Finally, we consider the issue of instantiation, the primary approach for dealing with
quantified formulas in SMT solvers, and consider its relevance to reasoning in VAMPIRE (Section 4).</p>
    </sec>
    <sec id="sec-2">
      <title>Pretending to be an SMT Solver</title>
      <p>
        Here we describe the main differences between SMT solvers and an ATP such as VAMPIRE. The
following discussion is applicable to provers similar to VAMPIRE, but to save space we will take VAMPIRE
as a canonical example of provers similar to VAMPIRE and make a direct comparison between SMT
solvers and VAMPIRE. To be more precise, when we refer to SMT solvers we are generally thinking of
lazy CDCL(T ) solvers [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] that handle quantifiers such as Z3 [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] and CVC4 [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ].
2.1
      </p>
      <sec id="sec-2-1">
        <title>The Main Similarities and Differences</title>
        <p>
          The main similarity between an SMT solver and VAMPIRE is that both accept problems in first-order
logic extended with theories. VAMPIRE accepts problems in SMT-LIB syntax [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ], including recent
additions such as datatypes [21]. The only logic not supported by VAMPIRE is the theory of bitvectors,
although this is also under active development.
        </p>
        <p>
          The main difference between an SMT solver and VAMPIRE is that SMT solvers have
satisfiabilitychecking at their core, whilst VAMPIRE has unsatisfiability-checking at its core, as it is a refutational
prover. By this we mean that SMT solvers attempt to build a model satisfying the input problem,
whilst VAMPIRE attempts to find a proof that the input problem is inconsistent. If an SMT solver
succeeds it returns sat and if VAMPIRE succeeds it returns unsat. Under certain circumstances, a
failure to build a model or find a proof means that no model or proof exists. In that case, an SMT
solver would return unsat and VAMPIRE, respectively, would return sat. A third option is that the
process runs out of resources before establishing either or the process is incomplete, in which case
both would return unknown. For SMT solvers, incompleteness comes from ground theories lacking
decision procedures and from incomplete instantiation techniques. For VAMPIRE, incompleteness can
come from certain proof search heuristics (e.g. selection functions [
          <xref ref-type="bibr" rid="ref17">17</xref>
          ]) or from any theory that is
not finitely axiomatisable. This last point means that VAMPIRE can only answer sat for the theory of
uninterpreted functions, or for ground problems where all theory parts are passed to an SMT solver via
the AVATAR Modulo Theories (see Section 3.3) technology (in which case this is uninteresting).
        </p>
        <p>A key feature of SMT solvers is the ability to produce models. As explained further below, VAMPIRE
finds unsatisfiability by deriving a contradiction from the input problem through the iterative generation
of consequences of that problem. This approach is well-suited to producing proofs of unsatisfiability,
but does not in general produce models. Whilst VAMPIRE does support finite model building [30], this
is (currently) restricted to the theory of uninterpreted functions only.</p>
        <p>Another frequently used feature of SMT solvers is their ability to be used incrementally, due to
their basis in the backtracking search of CDCL. VAMPIRE does not share this quality as proof search is
inherently non-incremental and cumbersome to backtrack. We give further explanation for why below.</p>
        <p>Similar to many SMT solvers, VAMPIRE is a portfolio solver. It implements many different
techniques and when solving a problem it may use tens to hundreds of different strategies in a time-sliced
fashion. Along with the below saturation-based proof search method, VAMPIRE also implements the
InstGen calculus [19] and a finite-model building through reduction to SAT [30]. In addition, VAMPIRE
can be run in a parallel mode where strategies are distributed over a given number of cores.
2.2</p>
      </sec>
      <sec id="sec-2-2">
        <title>Saturation-Based Proof Search</title>
        <p>To illustrate the differences outlined above we will briefly describe saturation-based proof search.
Usually, VAMPIRE deals with the separate notions of axioms and conjecture,3 but SMT-LIB does not have
3 Intuitively, axioms formalise the domain of interest and the conjecture is the claim that should logically follow from the
axioms. Conjecture is, therefore, negated before we start the search for a contradiction.
these notions and we assume an input (conjunctive) set of formulas. This set of formulas is clausified
to produce a set of clauses S. This set is then saturated with respect to some inference system I
meaning that for every inference from I with premises in S the conclusion of the inference is also added
to S. If the saturated set S contains a contradiction then the initial formulas are unsatisfiable.
Otherwise, if I is a complete inference system and, importantly, the requirements for this completeness have
been preserved, then the initial formulas are satisfiable. Finite saturation may not be possible and many
heuristics are employed to make finding a contradiction more likely.</p>
        <p>The standard approach to saturation is the given-clause algorithm illustrated in Figure 1. The idea
is to have a set of active clauses with the invariant that all inferences between active clauses have been
performed and a set of passive clauses waiting to be activated. The algorithm then iteratively selects
a given clause from passive and performs all necessary inferences to add it to active. This process of
clause selection is important for good performance (and fairness) but not discussed here.</p>
        <p>
          VAMPIRE uses resolution and superposition as its inference system I [
          <xref ref-type="bibr" rid="ref1">1, 25</xref>
          ]. A key feature of
this calculus is the use of literal selection and orderings to restrict the application of inference rules,
thus restricting the growth of the clause sets. There are well-known conditions on literal selection that
preserve completeness. But VAMPIRE also uses incomplete approaches, which often turn out to be better
practically [
          <xref ref-type="bibr" rid="ref17">17</xref>
          ]. Another very important concept related to saturation is the notion of redundancy. The
idea is that some clauses in S are redundant in the sense that they can be safely removed from S without
compromising completeness. The notion of saturation then becomes saturation-up-to-redundancy [
          <xref ref-type="bibr" rid="ref1">1,
25</xref>
          ]. An important redundancy check is subsumption. A clause A subsumes B if some subclause of B
is an instance of A, in which case B can be safely removed from the search space as doing so does not
change the possible models of the search space S. Later we will see how this hinders instantiation.
        </p>
        <p>
          It is important to note that the process of going from input formulas to clauses is (i) important for
efficiency, but also (ii) typically not equivalence preserving. Whilst the generation of clauses from
formulas typically preserves models on the initial signature [31], many useful preprocessing steps remove
part of the input. For example, the removal of unused definitions [
          <xref ref-type="bibr" rid="ref16">16</xref>
          ] removes the definition of a symbol
if it is unused in the problem, or partially removes it if the symbol is used with a single polarity.
        </p>
        <p>
          Let us consider what incrementality would look like in this setting. After saturating the set of
clauses, a new set of clauses would be added, and proof search would continue. However, this new set
of clauses may break the conditions under which optimising preprocessing steps are applied, making
proof search incomplete. An easy solution would be to disable such preprocessing steps, as is done
in incremental SMT. Additionally, care should be taken if the signature is extended, as parameters to
proof search, such as term orderings, are dependent on the signature. Another important element of
incremental proof search is the ability to backtrack previously asserted formulas. This would require
the removal of clauses that may have caused the reduction of other clauses, requiring heavy machinery
for tracking and undoing such steps (as done in splitting with backtracking [
          <xref ref-type="bibr" rid="ref18">18</xref>
          ]). Whilst solutions to
        </p>
        <p>Quantifier-Free Problems. Our first set of results is for problems that VAMPIRE is unlikely to perform
well on: quantifier-free problems. Table 1 uses the results from SMT-COMP 2016 and compares these
to results from a VAMPIRE run on the same problems and platform (e.g. StarExec). We only considered
problems known to be unsatisfiable, as VAMPIRE cannot show satisfiability for problems with theories.
In general, VAMPIRE did not perform as well as most other SMT solvers, although it solved 24 problems
uniquely, mostly in non-linear real arithmetic. The conclusion is that VAMPIRE should not be selected
as the system of choice for solving quantifier-free problems. The results for QF UF show that this
conclusion is not restricted to problems involving arithmetic, although the difference here is small.
Quantifier Problems. Our previous study [27] compared VAMPIRE and three well-known SMT
solvers (CVC4, veriT, and Z3) and we refer the reader to this publication for those results. In this
evaluation, which considered problems that were unsatisfiable or whose results were unknown, VAMPIRE
solved the most problems overall (by 0.2%) and the most for the logics AUFLIRA, AUFNIRA, UFIDL,
and UFNIA. The improvement over other SMT solvers is not very large, but there were unique solutions
suggesting a complementary approach.</p>
        <p>x + (y + z) = (x + y) + z
(x + y) = ( x + y)</p>
        <p>x 0 = 0
x y = y x
x &lt; y _ y &lt; x _ x = y
:(x &lt; x)
x + 0 = x</p>
        <p>x = x
x (y z) = (x y) z
(x y) + (x z) = x (y + z)</p>
        <p>:(x &lt; y) _ :(y &lt; x + 1)
x &lt; y _ y &lt; x + 1 (for ints)
x + y = y + x
x + ( x) = 0</p>
        <p>x 1 = x
:(x &lt; y) _ :(y &lt; z) _ :(x &lt; z)</p>
        <p>:(x &lt; y) _ x + z &lt; y + z
x = 0 _ (y x)=x = y (for reals )
SMT solvers and VAMPIRE are different mainly due to their underlying proof search approach, and thus
the features available (i.e. limited model-building for VAMPIRE). They are similar as they apply to the
same problems and, for a large number of problems, perform similarly. However, results show that,
mostly likely due to this fundamental difference in approach, they are likely to complement each other.
3</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Theory Reasoning in Vampire</title>
      <p>The previous section explained how VAMPIRE is different from an SMT solver. So how does it perform
theory reasoning? This section aims at addressing this question.
3.1</p>
      <sec id="sec-3-1">
        <title>Evaluation and Theory Axioms</title>
        <p>One of the earliest practical saturation-based approaches for reasoning with theories was SPASS+T [26].
They utilised two ideas that we adopted in VAMPIRE: simplification of theory terms, and introduction
of theory axioms. This approach for theory reasoning has been implemented in VAMPIRE since 2010.
Evaluation. In VAMPIRE, this is implemented as an immediate simplification, i.e., whenever we
generate a new term we eagerly evaluate it. Currently, evaluation is restricted to arithmetic terms only (we
do not perform evaluation on arrays) and consists of three kinds of simplification:</p>
        <p>Normalisation: Literals containing inequalities are rewritten in terms of &lt; only, e.g., t1 t2
:(t1 &lt; t2). Subtraction is rewritten in terms of addition of negative numbers and some specialised
arithmetic operations, such as rounding functions coming from the TPTP language4, are rewritten
in terms of standard operators.</p>
        <p>Evaluation: Purely interpreted subterms are evaluated with respect to the standard model of
arithmetic, e.g., f (1 + 2) f (3) and f (x + 0) f (x). Purely interpreted literals are treated
similarly, e.g., 1 + 2 &lt; 4 true.</p>
        <p>Balancing: Literals containing a single uninterpreted term or a variable may be ‘balanced’ by
bringing interpreted constants to one side to allow further evaluations, e.g. 4 = 2 (x + 1)
(4 div 2) 1 = x x = 1 and 2 a &gt; 2 a &lt; 1. Care is taken to avoid division by zero
and integer division is only applied when there is no non-trivial remainder.</p>
        <p>4A standard input language for first-order theorem provers [36].</p>
        <p>Theory Axioms. In VAMPIRE, the signature of the input problem is analysed to select which theory
axioms to add. A theory axiom is a statement true in some relevant theory. The theory axioms VAMPIRE
might add for the theory of arithmetic are given in Figure 2.5 It is important to note that we only
need to consider &lt; because, as described above, VAMPIRE normalises input formulas by rewriting all
inequalities in terms of &lt;. VAMPIRE also adds a finite axiomatisation of arrays [20] if they appear in
the signature, and relevant axioms for term algebras (datatypes) [21].</p>
        <p>One issue with reasoning with theory axioms is that they can be explosive, i.e., they combine with
each other, making the search space grow quickly. Recent work in VAMPIRE has explored heuristic
techniques for restricting this effect [28]. So far, VAMPIRE has not made any separate efforts to handle
particularly harmful associativity and commutativity axioms, as has been done in other solvers [35].</p>
        <p>Lastly, the term ordering gives high precedence to uninterpreted operations and totally orders
interpreted constants. The result is that the uninterpreted parts of clauses tend to be targeted by the
superposition calculus before the interpreted part.
3.2</p>
      </sec>
      <sec id="sec-3-2">
        <title>Unification with Abstraction</title>
        <p>A recently implemented feature [32] in VAMPIRE is a specialised unification that handles interpreted
terms separately from uninterpreted terms.6 The general idea is to avoid having to perform abstraction
eagerly. Take, for example, the clauses
which cannot unify without first being abstracted to
r(14y)</p>
        <p>:r(x2 + 49) _ p(x);
r(u) _ u 6' 14y</p>
        <p>:r(v) _ v 6' x2 + 49 _ p(x)
allowing resolution to produce</p>
        <p>u 6' 14y _ u 6' x2 + 49 _ p(x):
The unification with abstraction approach will allow the first two clauses to unify directly under the
constraint 14y 6= x2 + 49. This directly captures the condition under which the terms can unify and is
something to which theory reasoning can be directly applied. We note that this rule directly resolves the
issue of losing proofs via eager evaluation, i.e. where p(1 + 3) is eagerly evaluated to p(4), missing the
chance to resolve with :p(x + 3).</p>
        <p>This feature is implemented by extending the substitution tree indexing structures used in VAMPIRE
to perform unification.
3.3</p>
      </sec>
      <sec id="sec-3-3">
        <title>AVATAR modulo Theories</title>
        <p>A key technique in VAMPIRE is the use of AVATAR to control clause splitting. A full description of
how AVATAR works is beyond the scope of this paper, but it is also not essential for this discussion and
has been given elsewhere [38, 29]. Instead, we imagine VAMPIRE with AVATAR as an SMT solver with
a saturation-based theory solver for the theory of quantified formulas, as illustrated in Figure 3.</p>
        <p>5We have ignored some less standard operators such as floor and ceiling operators. We also ignore integer division for
simplicity of exposition.</p>
        <p>6Note that the experimental results described previously do not contain this new feature.</p>
        <p>VAMPIRE with AVATAR</p>
        <p>Theory Solver
for Quantified Formulas</p>
        <p>Theory Solver
for Arithmetic</p>
        <p>Theory Solver
for BitVectors</p>
        <p>Core
CDCL SAT Solver</p>
        <p>Theory Solver
for Uninterpreted
Functions</p>
        <p>Quantifier
Instantiation</p>
        <p>
          AVATAR inside VAMPIRE. The previously described given-clause algorithm is extended by using a
SAT solver to iteratively select sub-problems of the input problem to find inconsistencies within. To do
this, the initial clause set, and all subsequent clauses, are propositionally abstracted and the propositional
abstraction is given to a SAT solver. This is similar to how the SAT solver is utilised in SMT solvers but
is applied to the full problem, not just to the ground part. However, to preserve soundness it is necessary
to only break clauses down into variable-disjoint sub-clauses. For example, the following clause
s(x) _ :r(x; z) _ :q(w)
| share {xzand z }
is|di{szjoi}nt
is split into two sub-clauses, each propositionally abstracted. If a set of sub-clauses with propositional
names a1; : : : ; an are shown to be inconsistent then the propositional clause :a1 _ : : : _ :an is learned
(passed to the SAT solver) and a new sub-problem is selected by rerunning the SAT solver.
Replacing SAT by SMT. The relevance to theory reasoning is when the SAT solver is replaced by an
SMT solver [27]. The only difference is that where previously sub-clauses were translated as
propositional symbols, now only non-ground subclauses are so translated whilst ground (necessarily unit)
sub-clauses are mapped directly as themselves. In this case, the subproblem being explored by the
first-order saturation-based proof search is guaranteed to be theory-consistent in the ground part.
VAMPIRE as a Theory Solver. Conversely, the above can be viewed as adding VAMPIRE as a theory
solver for quantified formulas which is invoked when a theory-consistent model for the abstraction is
constructed. It is still necessary to propositionally abstract the quantified clauses in the SAT solver,
otherwise the clause-splitting advantage of AVATAR would be lost. Indeed, this is one of the main
differences between this approach and the work of DPLL( ) [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ], which also aimed to combine a
superposition prover with an SMT solver. Another difference, is that DPLL( ) tightly interleaves superposition
and SMT steps, resulting in a less flexible method of changing the current sub-problem.
Towards a Tighter Integration? Whilst there appears to be a correspondence between the
architecture of an SMT solver and that of AVATAR, we have not explored this further. Indeed, within AVATAR
the SAT or SMT solver is used as a black box and, so far, there has been no effort to move towards a
tighter integration.
There are some theory reasoning approaches taken by other systems similar to VAMPIRE that are not
implemented in VAMPIRE. Perhaps the most prominent of these is Hierarchic Superposition (HS) [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ],
a generalisation of the superposition calculus for black-box style theory reasoning. This approach
separates the theory and non-theory part of the problem and introduces a conceptual hierarchy between
uninterpreted reasoning (with the calculus) and theory reasoning (delegated to a theory solver) by
making pure theory terms smaller than everything else. HS guarantees refutational completeness under
certain conditions including sufficient completeness, which essentially requires that every ground
nontheory term of theory sort should be provably equal to a pure theory term. This is rather restrictive,
for example, the clauses p(x) and :p(f (c)) cannot be resolved if the return sort of function f is a
theory sort as the required substitution is not simple [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ]. The strategy of weak abstractions introduced
by Baumgartner and Waldmann [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ] partially addresses the downsides of the original approach. One
successful implementation of this is in the Beagle [
          <xref ref-type="bibr" rid="ref8">8</xref>
          ] theorem prover.
        </p>
        <p>
          Another prominent approach is to extend the calculus with specialised inference rules. This is what
we do for reasoning with terms of boolean sort [20], datatypes [21], and the extensionality rule for
arrays [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ]. Other work has explored alternative inference rules. For example, the work of SPASS+T
[26] introduces the following integer ordering expansion rule
        </p>
        <p>C _ s = t _ s
t</p>
        <p>C _ s
1</p>
        <p>
          t
C _ s = t _ s + 1
t
aimed at encoding the above integer ordering axioms, thus avoiding their explosive combination.
Another practical work that extends the superposition calculus with additional rules is the Zipperposition
tool [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ] which adds extra inference rules to deal with integer arithmetic.
4
        </p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Instantiation: the Same but Different</title>
      <p>This section focuses on the issue of instantiation (missing from the previous section). We separate
this issue as it is the key method by which SMT solvers handle quantified formulas and we want to
understand if these ideas can help saturation-based solvers.
4.1</p>
      <sec id="sec-4-1">
        <title>Does VAMPIRE Need Instantiation?</title>
        <p>To see why VAMPIRE can benefit from instantiation, consider the first-order clause
14x 6' x2 + 49 _ p(x)
for which there is a single integer value for x that makes the first literal false with respect to the
underlying theory of arithmetic, namely x = 7. However, if we apply standard superposition rules to the
original clause and a sufficiently rich axiomatisation of arithmetic (e.g. the one we gave previously), we
will most likely end up with a very large number of logical consequences and never generate p(7), or
run out of space before generating it. Indeed, VAMPIRE cannot find a refutation of 14x 6' x2 + 49 in
reasonable time using the techniques described in the previous section.
4.2</p>
      </sec>
      <sec id="sec-4-2">
        <title>Instantiation for SMT Solvers</title>
        <p>Here we briefly overview the main instantiation techniques used in SMT solving. This is largely taken
from a recent review of the topic [33] and this text should be referenced for full details.
The Quantifier Instantiation Module. Modern SMT solvers based on the CDCL(T ) architecture
(Figure 3) separate the input into ground and non-ground parts. To handle non-ground parts they first
establish a satisfiable ground model and then ask the quantifier instantiation module to suggest instances
of the non-ground formulas. Below we outline the three main approaches to quantifier instantiation.
They all follow a similar pattern: to take 8xP (x) and find some terms t to produce an instance P (t).
E-Matching. The general idea is to use patterns to match against existing terms to produce possible
instances. Pattern selection is a complex topic [23], but a simple choice is to use sub-terms of the formula
being instantiated. For example, given the non-ground formula P (x) _ R(x) the sub-term P (x) could
be used as a pattern to match against an existing ground term P (a) to produce instance P (a) _ R(a).
This typically makes use of the congruence closure data structures (E-graph) available for the theory of
uninterpreted functions, so if this implied that a = f (b) then the instance P (f (b)) _ R(f (b)) could also
be created in the above example. A key point is that patterns are usually restricted to applications of
uninterpreted functions and instantiation is with existing terms only.</p>
        <p>
          Conflict-Based Instantiation. An issue with E-matching is that it is unguided, it is not clear whether
the created instances are helpful. In conflict-based instantiation the idea is to produce instances that are
in conflict with the current model, forcing it to change. Such instances are a special case of those found
by E-matching and the difficulty is not in checking if an instance is conflicting, but in finding
conflicting instances efficiently [34]. Finding conflicting instances in the presence of interpreted symbols is
additionally challenging due to the need to check entailment modulo the relevant theory.
Model-Based Instantiation. The above two approaches are incomplete, i.e., the failure to find a
(conflicting) instance does not imply that formula in question is satisfiable. In model-based instantiation [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ],
the general idea is to construct a candidate model I, interpreting all uninterpreted function symbols, and
to check that it is a model of the quantified formulas. To check that a model satisfies a quantified formula
' it is sufficient to check that :'I is unsatisfiable where 'I replaces all function symbols with their
interpretations in I. A model for :'I can be used to extract an instance of ' which is in conflict with
I. The challenge here is how to construct I. Whilst this approach can detect satisfiability, it is only
complete for some restricted fragments (for obvious reasons).
4.3
        </p>
      </sec>
      <sec id="sec-4-3">
        <title>What can we learn from SMT?</title>
        <p>
          We briefly examine each of the above instantiation approaches and consider whether we could borrow
the idea and use it within VAMPIRE, or a similar ATP. Firstly, we note that the focus of instantiation will,
in general, be different. In ATP systems, there is a good approach for dealing with quantified formulas
containing uninterpreted symbols and it is those containing interpreted symbols that are the challenge.
Whilst for SMT solvers instantiation seems to be focussed on the uninterpreted parts, as they typically
have reasonable methods for dealing with interpreted symbols, e.g., quantifier elimination [
          <xref ref-type="bibr" rid="ref10">10, 24</xref>
          ].
E-Matching. The idea behind this approach is to use existing terms to instantiate quantified formulas.
The Theory Instantiation inference rule from SPASS+T [26] follows this general scheme. It is given as
where L[t] _ D is not ground, t is uninterpreted and all symbols above t in L are interpreted, =
mgu(t; s), and C[s] and (L[t] _ D) are ground. Prevosto and Waldmann [26] point out that (L[t] _ D)
is typically immediately subsumed by L[t] _ D. To handle this, they pass (L[t] _ D) directly to their
SMT solver and, to allow it to participate in further instantiations, they replace the above rule by the two
rules
        </p>
        <p>C[s]
ground(s)</p>
        <p>ground(s) L[t] _ D
ground(u1) : : : ground(un) export((L[t] _ D) )
with similar restrictions to the above, but in addition s is uninterpreted and u1; : : : ; un are the
uninterpreted ground terms in (L[t] _ D) different from s. The general idea is to use the special predicate
ground to store the set of ground terms that are removed by subsumption.</p>
        <p>We would like to reiterate the above point about subsumption. Instantiating the clause x &gt; c _ x &lt; c
to produce 0 &gt; c _ 0 &lt; c is unhelpful as the new clause is immediately subsumed and deleted. However,
if one of the literals in (L[t] _ D) becomes false the subsumption no longer holds. For example,
instantiating x &gt; y _ p(x; y) with fx 7! 0; y 7! 1g produces p(0; 1), which is not subsumed.</p>
        <p>This leads us to the observation that the instances useful to saturation-based proof search are those
that remove literals, which in the limit will lead to the empty clause. In [32] we introduce a theory
instantiation rule that explicitly produces instances that remove literals. The general idea is as follows.
Given a clause C[x] _ D[x] where D[x] consists purely of interpreted symbols, a solution such that
(:D[x]) is T-valid (true in every model of the relevant theory) can be used to produce the instance
C[x] . The problem of finding such a solution is something that an SMT solver handles well.
Conflict-Based Instantiation. In typical saturation-based proof search there is no concept of a model
to be in conflict with. But, when AVATAR is being used for clause splitting, there is now a model of
the current splitting branch. If we were to take the view that VAMPIRE becomes an extra theory module
via AVATAR, then we could directly apply conflict-based instantiation to produce instances inconsistent
with the current splitting branch. Conversely, attempting to do this whilst using an SMT solver as a
black-box does not seem workable.</p>
        <p>If this approach were in place, then the new question would become whether it is better to spend
effort finding conflicting instances to refute a splitting branch, or using saturation-based reasoning. The
above combination and this question remain further research. Our conjecture is that the two approaches
would be complementary and a heuristic combination would be beneficial.</p>
        <p>Model-Based Instantiation. Currently, if VAMPIRE saturates a particular splitting branch it is not
clear if this is due to the incompleteness of its proof search or the consistency of that branch. The
model-based instantiation approach could provide a technique for (i) returning satisfiable in such a
circumstance, or (ii) otherwise refuting the current splitting branch and continuing with proof search.
Again, the question would then be whether the combination with saturation-based proof search
contributes to this general approach.
5</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Conclusion</title>
      <p>
        We have briefly compared how VAMPIRE performs theory reasoning to the standard architecture of
modern SMT solvers and discussed the topic of instantiation. It is clear that the integration of saturation
provers with SMT solvers can be further explored, especially with respect to instantiation. If we view
AVATAR as a method for adding VAMPIRE as a theory solver to an SMT solver then an important open
question remains: when should VAMPIRE be called, and when should existing quantifier instantiation
techniques be used instead. Recent work [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] has aimed to unify notions of instantiation for SMT solvers
and this work may be relevant to our efforts. Writing this brief overview has forced us to ask some
question which, we hope, will now lead to further research on this integration.
      </p>
      <p>Deduction CADE-24, vol. 7898 of Lecture Notes in Computer Science, pp. 450–464. Springer, 2013.
[19] K. Korovin. Inst-Gen – A Modular Approach to Instantiation-Based Automated Reasoning. In Programming</p>
      <p>Logics: Essays in Memory of Harald Ganzinger, pp. 239–270. Springer Berlin Heidelberg, 2013.
[20] E. Kotelnikov, L. Kova´cs, G. Reger, and A. Voronkov. The vampire and the FOOL. In Proceedings of the 5th
ACM SIGPLAN Conference on Certified Programs and Proofs, Saint Petersburg, FL, USA, January 20-22,
2016, pp. 37–48, 2016.
[21] L. Kova´cs, S. Robillard, and A. Voronkov. Coming to terms with quantified reasoning. In Proceedings of
the 44th ACM SIGPLAN Symposium on Principles of Programming Languages, POPL 2017, Paris, France,
January 18-20, 2017, pp. 260–270. ACM, 2017.
[22] L. Kova´cs and A. Voronkov. First-order theorem proving and Vampire. In CAV 2013, vol. 8044 of Lecture</p>
      <p>Notes in Computer Science, pp. 1–35, 2013.
[23] K. R. M. Leino and C. Pit-Claudel. Trigger selection strategies to stabilize program verifiers. In Computer
Aided Verification - 28th International Conference, CAV 2016, Toronto, ON, Canada, July 17-23, 2016,
Proceedings, Part I, pp. 361–381, 2016.
[24] D. Monniaux. Quantifier elimination by lazy model enumeration. In Computer Aided Verification: 22nd
International Conference, CAV 2010, Edinburgh, UK, July 15-19, 2010. Proceedings, pp. 585–599. Springer
Berlin Heidelberg, 2010.
[25] R. Nieuwenhuis and A. Rubio. Paramodulation-based theorem proving. In Handbook of Automated
Reasoning, vol. I, chapter 7, pp. 371–443. Elsevier Science, 2001.
[26] V. Prevosto and U. Waldmann. SPASS+T. In Proceedings of the FLoC’06 Workshop on Empirically Successful
Computerized Reasoning, 3rd International Joint Conference on Automated Reasoning, number 192 in CEUR
Workshop Proceedings, pp. 19–33, 2006.
[27] G. Reger, N. Bjørner, M. Suda, and A. Voronkov. AVATAR modulo theories. In GCAI 2016. 2nd Global</p>
      <p>Conference on Artificial Intelligence, vol. 41 of EPiC Series in Computing, pp. 39–52. EasyChair, 2016.
[28] G. Reger and M. Suda. Set of support for theory reasoning. In IWIL-2017, 2017. To appear.
[29] G. Reger, M. Suda, and A. Voronkov. Playing with AVATAR. In Automated Deduction - CADE-25: 25th
International Conference on Automated Deduction, Berlin, Germany, August 1-7, 2015, Proceedings, pp.
399–415. Springer International Publishing, 2015.
[30] G. Reger, M. Suda, and A. Voronkov. Finding finite models in multi-sorted first-order logic. In Theory and
Applications of Satisfiability Testing – SAT 2016: 19th International Conference, Bordeaux, France, July 5-8,
2016, Proceedings, pp. 323–341. Springer International Publishing, 2016.
[31] G. Reger, M. Suda, and A. Voronkov. New techniques in clausal form generation. In GCAI 2016. 2nd Global</p>
      <p>Conference on Artificial Intelligence, vol. 41 of EPiC Series in Computing, pp. 11–23. EasyChair, 2016.
[32] G. Reger, M. Suda, and A. Voronkov. Unification with abstraction and theory instantiation in saturation-based
reasoning. In IWIL-2017, 2017. To appear.
[33] A. Reynolds. Conflicts, models and heuristics for quantifier instantiation in SMT. In Vampire 2016.
Proceedings of the 3rd Vampire Workshop, vol. 44 of EPiC Series in Computing, pp. 1–15. EasyChair, 2017.
[34] A. Reynolds, C. Tinelli, and L. de Moura. Finding conflicting instances of quantified formulas in SMT.</p>
      <p>In Proceedings of the 14th Conference on Formal Methods in Computer-Aided Design, FMCAD ’14, pp.
31:195–31:202. FMCAD Inc, 2014.
[35] S. Schulz. System Description: E 1.8. In Proc. of the 19th LPAR, Stellenbosch, vol. 8312 of LNCS. Springer,
2013.
[36] G. Sutcliffe. The TPTP problem library and associated infrastructure. J. Autom. Reasoning, 43(4):337–362,
2009.
[37] G. Sutcliffe. The 8th IJCAR automated theorem proving system competition - CASC-J8. AI Commun.,
29(5):607–619, 2016.
[38] A. Voronkov. AVATAR: The architecture for first-order theorem provers. In Computer Aided Verification, vol.
8559 of Lecture Notes in Computer Science, pp. 696–710. Springer International Publishing, 2014.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>L.</given-names>
            <surname>Bachmair</surname>
          </string-name>
          and
          <string-name>
            <given-names>H.</given-names>
            <surname>Ganzinger</surname>
          </string-name>
          .
          <article-title>Resolution theorem proving</article-title>
          .
          <source>In Handbook of Automated Reasoning</source>
          , vol. I, chapter
          <volume>2</volume>
          , pp.
          <fpage>19</fpage>
          -
          <lpage>99</lpage>
          . Elsevier Science,
          <year>2001</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>L.</given-names>
            <surname>Bachmair</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Ganzinger</surname>
          </string-name>
          , and
          <string-name>
            <given-names>U.</given-names>
            <surname>Waldmann</surname>
          </string-name>
          .
          <article-title>Refutational theorem proving for hierarchic first-order theories</article-title>
          .
          <source>Appl. Algebra Eng. Commun. Comput.</source>
          ,
          <volume>5</volume>
          :
          <fpage>193</fpage>
          -
          <lpage>212</lpage>
          ,
          <year>1994</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>H.</given-names>
            <surname>Barbosa</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Fontaine</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Reynolds</surname>
          </string-name>
          .
          <article-title>Congruence closure with free variables</article-title>
          .
          <source>In Tools and Algorithms for the Construction and Analysis of Systems - 23rd International Conference, TACAS</source>
          <year>2017</year>
          ,
          <article-title>Held as Part of the European Joint Conferences on Theory and Practice of Software, ETAPS 2017</article-title>
          , Uppsala, Sweden,
          <source>April 22-29</source>
          ,
          <year>2017</year>
          , Proceedings,
          <string-name>
            <surname>Part</surname>
            <given-names>II</given-names>
          </string-name>
          , pp.
          <fpage>214</fpage>
          -
          <lpage>230</lpage>
          ,
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>C.</given-names>
            <surname>Barrett</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</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 Proceedings of the 23rd International Conference on Computer Aided Verification, number 6806 in Lecture Notes in Computer Science</source>
          , pp.
          <fpage>171</fpage>
          -
          <lpage>177</lpage>
          . Springer-Verlag,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>C.</given-names>
            <surname>Barrett</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Deters</surname>
          </string-name>
          ,
          <string-name>
            <surname>L. M. de Moura</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          <string-name>
            <surname>Oliveras</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Stump</surname>
          </string-name>
          .
          <article-title>6 years of SMT-COMP</article-title>
          .
          <source>J. Autom. Reasoning</source>
          ,
          <volume>50</volume>
          (
          <issue>3</issue>
          ):
          <fpage>243</fpage>
          -
          <lpage>277</lpage>
          ,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>C.</given-names>
            <surname>Barrett</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Nieuwenhuis</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Oliveras</surname>
          </string-name>
          , and
          <string-name>
            <given-names>C.</given-names>
            <surname>Tinelli</surname>
          </string-name>
          .
          <article-title>Splitting on demand in SAT modulo theories</article-title>
          .
          <source>In Logic for Programming</source>
          ,
          <source>Artificial Intelligence, and Reasoning</source>
          , 13th International Conference, LPAR 2006,
          <string-name>
            <given-names>Phnom</given-names>
            <surname>Penh</surname>
          </string-name>
          , Cambodia,
          <source>November 13-17</source>
          ,
          <year>2006</year>
          , Proceedings, vol.
          <volume>4246</volume>
          of Lecture Notes in Computer Science, pp.
          <fpage>512</fpage>
          -
          <lpage>526</lpage>
          . Springer,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>C.</given-names>
            <surname>Barrett</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>
          .
          <article-title>The Satisfiability Modulo Theories Library (SMT-LIB)</article-title>
          .
          <source>www. SMT-LIB.org</source>
          ,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>P.</given-names>
            <surname>Baumgartner</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Bax</surname>
          </string-name>
          , and
          <string-name>
            <given-names>U.</given-names>
            <surname>Waldmann</surname>
          </string-name>
          .
          <article-title>Beagle - A hierarchic superposition theorem prover</article-title>
          .
          <source>In Automated Deduction - CADE-25 - 25th International Conference on Automated Deduction</source>
          , Berlin, Germany,
          <source>August 1-7</source>
          ,
          <year>2015</year>
          , Proceedings, pp.
          <fpage>367</fpage>
          -
          <lpage>377</lpage>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>P.</given-names>
            <surname>Baumgartner</surname>
          </string-name>
          and
          <string-name>
            <given-names>U.</given-names>
            <surname>Waldmann</surname>
          </string-name>
          .
          <article-title>Hierarchic Superposition With Weak Abstraction</article-title>
          .
          <source>In Proceedings of the 24th International Conference on Automated Deduction, number 7898 in Lecture Notes in Artificial Intelligence</source>
          , pp.
          <fpage>39</fpage>
          -
          <lpage>57</lpage>
          . Springer-Verlag,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>N.</given-names>
            <surname>Bjørner</surname>
          </string-name>
          .
          <article-title>Linear quantifier elimination as an abstract decision procedure</article-title>
          .
          <source>In Automated Reasoning: 5th International Joint Conference, IJCAR</source>
          <year>2010</year>
          ,
          <article-title>Edinburgh</article-title>
          ,
          <string-name>
            <surname>UK</surname>
          </string-name>
          ,
          <source>July 16-19</source>
          ,
          <year>2010</year>
          . Proceedings, pp.
          <fpage>316</fpage>
          -
          <lpage>330</lpage>
          . Springer Berlin Heidelberg,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>S.</given-names>
            <surname>Cruanes</surname>
          </string-name>
          .
          <article-title>Extending Superposition with Integer Arithmetic, Structural Induction, and Beyond</article-title>
          .
          <source>PhD thesis</source>
          , INRIA,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <surname>L. M. de Moura</surname>
            and
            <given-names>N.</given-names>
          </string-name>
          <string-name>
            <surname>Bjørner</surname>
          </string-name>
          . Engineering DPLL(T) +
          <article-title>saturation</article-title>
          . In
          <source>Automated Reasoning, 4th International Joint Conference, IJCAR</source>
          <year>2008</year>
          , Sydney, Australia,
          <source>August 12-15</source>
          ,
          <year>2008</year>
          , Proceedings, pp.
          <fpage>475</fpage>
          -
          <lpage>490</lpage>
          ,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <surname>L. M. de Moura</surname>
            and
            <given-names>N. Bjørner.</given-names>
          </string-name>
          <article-title>Z3: an efficient SMT solver</article-title>
          .
          <source>In Proc. of TACAS</source>
          , vol.
          <volume>4963</volume>
          of LNCS, pp.
          <fpage>337</fpage>
          -
          <lpage>340</lpage>
          ,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>Y.</given-names>
            <surname>Ge and L. M. de Moura</surname>
          </string-name>
          .
          <article-title>Complete instantiation for quantified formulas in satisfiabiliby modulo theories</article-title>
          . In Computer Aided Verification, 21st International Conference,
          <string-name>
            <surname>CAV</surname>
          </string-name>
          <year>2009</year>
          , Grenoble, France, June 26 - July 2,
          <year>2009</year>
          . Proceedings, vol.
          <volume>5643</volume>
          of Lecture Notes in Computer Science, pp.
          <fpage>306</fpage>
          -
          <lpage>320</lpage>
          . Springer,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>A.</given-names>
            <surname>Gupta</surname>
          </string-name>
          , L. Kova´cs,
          <string-name>
            <given-names>B.</given-names>
            <surname>Kragl</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Voronkov</surname>
          </string-name>
          .
          <article-title>Extensional crisis and proving identity</article-title>
          .
          <source>In Automated Technology for Verification and Analysis - 12th International Symposium, ATVA</source>
          <year>2014</year>
          ,
          <article-title>Sydney</article-title>
          ,
          <string-name>
            <surname>NSW</surname>
          </string-name>
          , Australia, November 3-
          <issue>7</issue>
          ,
          <year>2014</year>
          , Proceedings, pp.
          <fpage>185</fpage>
          -
          <lpage>200</lpage>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>K.</given-names>
            <surname>Hoder</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Z.</given-names>
            <surname>Khasidashvili</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Korovin</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Voronkov</surname>
          </string-name>
          .
          <article-title>Preprocessing techniques for first-order clausification</article-title>
          . In Formal Methods in Computer-Aided Design,
          <string-name>
            <surname>FMCAD</surname>
          </string-name>
          <year>2012</year>
          , Cambridge, UK,
          <source>October 22-25</source>
          ,
          <year>2012</year>
          , pp.
          <fpage>44</fpage>
          -
          <lpage>51</lpage>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>K.</given-names>
            <surname>Hoder</surname>
          </string-name>
          , G. Reger,
          <string-name>
            <given-names>M.</given-names>
            <surname>Suda</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Voronkov</surname>
          </string-name>
          .
          <article-title>Selecting the selection</article-title>
          .
          <source>In Automated Reasoning: 8th International Joint Conference, IJCAR</source>
          <year>2016</year>
          , Coimbra, Portugal, June 27 - July 2,
          <year>2016</year>
          , Proceedings, pp.
          <fpage>313</fpage>
          -
          <lpage>329</lpage>
          . Springer International Publishing,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>K.</given-names>
            <surname>Hoder</surname>
          </string-name>
          and
          <string-name>
            <given-names>A.</given-names>
            <surname>Voronkov</surname>
          </string-name>
          .
          <article-title>The 481 ways to split a clause and deal with propositional variables</article-title>
          . In Automated
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>