<!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>
      <journal-title-group>
        <journal-title>Seventh Workshop on Practical Aspects of Automated Reasoning, June</journal-title>
      </journal-title-group>
    </journal-meta>
    <article-meta>
      <title-group>
        <article-title>Layered Clause Selection for Saturation-Based Theorem Proving</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Bernhard Gleiss</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Martin Suda</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Czech Institute of Informatics</institution>
          ,
          <addr-line>Robotics, and Cybernetics, Jugoslávských partyzánů 1580/3, 160 00 Prague 6</addr-line>
          ,
          <country country="CZ">Czech Republic</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>TU Wien Informatics</institution>
          ,
          <addr-line>Favoritenstraße 9-11, 1040 Vienna</addr-line>
          ,
          <country country="AT">Austria</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2020</year>
      </pub-date>
      <volume>2</volume>
      <fpage>9</fpage>
      <lpage>30</lpage>
      <abstract>
        <p>Clause selection is one of the main heuristic decision points in navigating proof search of saturationbased theorem provers. A recently developed layered clause selection framework allows one to boost a basic clause selection heuristic by organising clauses into groups of more or less promising ones according to a specified numerical feature. In this work, we investigate this framework in depth and introduce, in addition to a previously presented feature (based on the amount of theory reasoning in the derivation of a clause), three new features for clause selection (tracking relatedness to the goal, the number of split dependencies in the Avatar architecture, and closeness to the Horn fragment, respectively). We implemented the resulting clause selection heuristics in the state-of-the-art saturation-based theorem prover Vampire and present an evaluation of these new clause-selection strategies and their combinations over the TPTP and SMTLIB libraries.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;saturation-based theorem proving</kwd>
        <kwd>heuristic</kwd>
        <kwd>clause selection</kwd>
        <kwd>layered selection</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>
        In the context of automated theorem proving, saturation refers to the process of iteratively
deriving (according to a particular inference system) logical consequences of a set of given input
clauses until the empty clause is derived, which witnesses unsatisfiability. Modern
saturationbased theorem provers for first-order logic typically employ some variant of a given-clause
algorithm, in which clauses are selected for inferences one by one [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. Clause selection, i.e. the
procedure for picking in each iteration the next clause to process, is one of the main heuristic
decision points in the prover, hugely afecting its performance [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ].
      </p>
      <p>The standard technology for implementing clause selection heuristics relies on two concepts.
First, certain numerical clause evaluation criteria are identified, such as the number of symbols
in a clause (a.k.a. clause weight) or the iteration when the clause was derived during search
(a.k.a. clause age1), such that a small clause in terms of the given criterion is more likely to lead
to a refutation than a large one. The prover then maintains a priority queue for each criterion
for the eficient extraction of “the current best clause”. Second, the prover alternates picking
clauses from these priority queues using a specified ratio. For example, a heuristic may specify
that every 10 selections, the prover should pick 9 clauses that are small by weight, i.e. light, and
one clause that is small by age, i.e. old.</p>
      <p>
        A recently developed layered clause selection framework [
        <xref ref-type="bibr" rid="ref3 ref4">3, 4</xref>
        ] allows one to boost a basic
clause selection heuristic, such as the one just described, by organising clauses into groups
of more or less promising ones according to a specified numerical feature and a certain cutof
value (or values). An example of a feature explored in this work is the number of positive
literals of a clause. According to this feature, we can split clauses into those having at most one
positive literal, i.e. those belonging to the Horn fragment, and the remaining ones. Now, the
main idea of layered selection is to “instantiate” the basic clause selection heuristic separately
for each such group of clauses and alternate between selecting from each group according to a
new “layer two” ratio. For example, the prover may decide to pick a Horn clause every four
out of five selections. Note that clause selection according to age and weight is still happening
according to the original ratio on “layer one”, i.e. in each group separately.
      </p>
      <p>
        In [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ], we proposed a clause feature measuring the amount of theory reasoning in the
derivation of a clause, and obtained a layered clause selection heuristic that dramatically improves
the performance of the automated theorem prover Vampire [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] on relevant benchmarks. In
this paper, we 1) present the framework of layered clause selection in more detail (Section 2)
including the ideas of
• defining the groups as either disjoint or monotone with respect to set inclusion, and
• the possibility of nesting multiple layers of selections based on diferent features.
2) In addition to the theory reasoning feature (recalled in Section 3), we introduce three additional
features:
• the first being the number of split dependencies of a clause in the AVATAR architecture
[
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] for clause splitting (Section 4),
• the second tracking relatedness of a clause to the goal, derived from the computation of
the SInE algorithm [
        <xref ref-type="bibr" rid="ref7 ref8">7, 8</xref>
        ] (Section 5), and
• the third being the already mentioned number of positive literals in a clause, essentially
measuring closeness of a clause to the Horn fragment (Section 6).
      </p>
      <p>Finally, 3) we present the results of extensive experiments with the new heuristics over TPTP
and SMTLIB and a specific set of benchmarks coming from program verification (Section 7).</p>
    </sec>
    <sec id="sec-2">
      <title>2. Layered clause selection using multi-split-queues</title>
      <p>
        We assume the reader to be familiar with the main ideas behind saturation-based theorem
proving [
        <xref ref-type="bibr" rid="ref10 ref9">9, 10</xref>
        ]. Details on given-clause saturation algorithms used most often in practice
can be found in [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ], a comprehensive description and evaluation of clause selection heuristics
pre-dating layered selection in [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ].
      </p>
      <sec id="sec-2-1">
        <title>2.1. The Age-weight-based heuristic</title>
        <p>The de facto standard clause selection heuristic used in modern saturation-based theorem
provers is the age-weight clause selection heuristic.</p>
        <p>Definition 1 (Age-weight clause selection heuristic). For any clause , define the age age()
as the depth of the derivation tree of 2 and define the weight weight() as the number of
symbols3 of . Let further  :  be a list of two positive integer values. Then the age-weight
clause selection heuristic aw( : ) alternates between selecting a clause  with the smallest
age age() and selecting a clause  with the smallest weight weight() using the ratio  : .</p>
        <p>The basic understanding of age-weight selection is that it performs a blend between the
breadth-first and the best-first search paradigms. Clauses of small weight are considered
better, because they are closer to the ultimate goal—the empty clause of weight zero—than the
larger ones. They also tend to produce small clauses as children, on average serve as stronger
simplifiers, and are computationally cheaper to process. The age criterion, on the other hand,
corresponds to the breadth-first aspect and helps to ensure fairness under which no generated
clause (unless shown redundant) waits too long before getting selected.</p>
      </sec>
      <sec id="sec-2-2">
        <title>2.2. Split heuristics</title>
        <p>Definition 2 (Split heuristics). Let  be a real-valued clause evaluation feature such that
preferable clauses have low value of  (), and let the cutofs 1, . . . ,  be monotonically increasing
real numbers with  = ∞. Furthermore, let the ratio 1 : . . . :  be a list of positive integer
values, and let finally  be an arbitrary clause selection heuristic.</p>
        <p>A split heuristic groups clauses into sets 1, . . . , , and selects clauses by alternating
selection from 1, . . . ,  using the ratio 1 : . . . : . The selection from each such set  is
performed using . We define two modes of split clause selection heuristic, which difer in how
they group clauses:
• The monotone split heuristic mono-split(,  1, . . . , , 1 : · · · : , ) uses sets  :=
{ |  () ≤ } for  = 1, . . . , .
• The disjoint split heuristic disj-split(,  1, . . . , , 1 : · · · : , ) uses sets 1 := { |
 () ≤ 1}, and  := { | − 1 &lt;  () ≤ } for 2 ≤  ≤ .</p>
        <p>Example 1. Consider the clause selection heuristic mono-split(, 0, 1, ∞, 3 : 1 : 1, (1 : 1)).
This heuristic will select 3 out of 5 times a clause  such that  () ≤ 0, 1 out of 5 times a
clause  such that  () ≤ 1, and 1 out of 5 times an arbitrary clause. On “layer one”, e.g., 3 out
of 10 times the clause  with the smallest age among the clauses  with  () ≤ 0 is selected,
or 1 out of 10 times the clause with smallest weight out of all clauses is selected.</p>
        <p>2This corresponds to how age is defined in Vampire. More precisely still, one uses only the depth with respect
to generating inferences. Reductions do not alter the age of a reduced clause.</p>
        <p>
          3Including multiplicities. As a variation, diferent kinds of symbols (such as the variables, the predicate symbols,
or the constants) may weigh more than others [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ].
        </p>
        <p>Split heuristics allow to adapt an existing clause selection heuristic  to take into account
the clause feature  . We now discuss how to pick the mode, the cutofs, and the ratios. We
observed two kinds of clause features:</p>
        <p>First, there are features where clauses with low feature value are more likely to contribute
to the proof search (this is the case for the features distth, distSInE, and distHorn, discussed in
Section 3, Section 5, resp. Section 6). For features of this kind, one should use a monotone split
heuristic. A good starting point for cutofs and ratios is 1, ∞ and 1 : 1, resp., where 1 is the
feature value we expect to obtain for the empty clause ⊥ (based on domain knowledge and
experience). One can extend the cutofs by introducing one or two additional cutofs close to 1,
in order to smooth the transition between 1 and ∞, and extend the ratio accordingly. It can
also make sense to vary the ratio, although in our experience, it is more important to identify
good cutofs, than to fine-tune the ratio.</p>
        <p>Secondly, there are features where clauses with low feature value are not necessarily more
likely to contribute to the proof search, but are less likely to have low weight (this is the case
for the feature distAV discussed in Section 4). As a consequence, it does not make sense to
compare clauses, which have diferent feature values, by weight. In such a case, one can use a
split heuristic in disjoint mode. Varying the cutofs and ratios of disjoint split heuristics has
a less predictable efect than for the monotone split heuristic and needs to be fine-tuned on a
case-by-case basis.</p>
      </sec>
      <sec id="sec-2-3">
        <title>2.3. Nesting split heuristics</title>
        <p>As split heuristics are parameterized by an arbitrary clause selection heuristic, we are able to
build clause selection heuristics containing nestings of split heuristics. Such clause selection
heuristics are powerful, as they allow us to easily combine diferent features.</p>
        <sec id="sec-2-3-1">
          <title>Example 2. Consider the nested split heuristic</title>
          <p>mono-split( 1, 0, 1, ∞, 15 : 4 : 1,
mono-split( 2, 1, ∞, 5 : 1,</p>
          <p>(1 : 1))).</p>
          <p>The resulting clause groupings and frequencies to pick from these groups are visualized in
Figure 1. The nested split heuristics form a tree. Each leaf node of the tree represents a set of
clauses, from which clauses are selected using (1 : 1). We can see that the leftmost leaf node
of the tree represents all clauses  with  1() ≤ 0 and  2() ≤ 1. We pick clauses from this
leaf using (1 : 1) in 15/20 · 5/6 = 5/8 of the cases.</p>
          <p>Note that each split heuristic ℎ provides a horizontal dimension consisting of the groups of ℎ.
The nesting of diferent split heuristics itself provides a vertical dimension.</p>
        </sec>
      </sec>
      <sec id="sec-2-4">
        <title>2.4. Implementation</title>
        <p>In this subsection we briefly discuss how to implement clause selection heuristics. As typical runs
of saturation algorithms can include several million clause selections, we strive to implement
these heuristics eficiently.
15/20</p>
        <p>1/20
all clauses
4/20
 1() ≤ 1
5/6
1/6</p>
        <p>all clauses
5/6
1/6
 1() ≤ 0
 2() ≤ 1
 1() ≤ 0
 1() ≤ 1
 2() ≤ 1</p>
        <p>An -heuristic with ratio  : ℎ can be implemented as a container  as follows.
The container  internally keeps two priority queues4 , , where both  and  store
all the clauses of  ,  keeps its clauses ordered by age and  keeps its clauses ordered by
weight. The container  determines whether it should select the next clause from  or
ℎ using a weighted round-robin scheme with ratio  : , and selection from the chosen
queue proceeds by popping the first element (i.e. a clause) from that queue and deleting the
corresponding record (of that clause) from the other queue.</p>
        <p>The heuristic mono-split(,  1, . . . , , 1 : · · · : , ), resp. disj-split(,  1, . . . , , 1 : · · · :
, ), can be implemented as a container SH as follows. Assume that  is implemented using
a container CS. The container SH keeps  instances CS1, . . . , CS of CS, where container CS
contains all clauses of group  of SH. The container SH determines from which of the
subcontainers CS1, . . . , CS it should select the next clause using a weighted round-robin scheme
with ratio 1 : · · · :  and then delegates clause selection to that CS.</p>
      </sec>
      <sec id="sec-2-5">
        <title>2.5. Discussion</title>
        <p>We believe that the nesting of split heuristics is a great conceptual tool for composing
independent ideas on how to improve clause selection into a single compound heuristic. This can be
already seen with the two layers, where the time-tested age-weight selection serves as a building
block for more powerful refined heuristics, and can get further pronounced with additional
nestings, as demonstrated by our experiments (see Section 7).</p>
        <p>
          Nevertheless, in retrospect it is not hard to see that computationally, the layered scheme
can be essentially “compiled down” to multiple level-one queues. More precisely, one needs
an extension of the typical level-one queue arrangement, such as the one implemented in E
[
          <xref ref-type="bibr" rid="ref11">11</xref>
          ], to allow clause queue content filtering by clause properties. This means that one needs to
        </p>
        <sec id="sec-2-5-1">
          <title>4In Vampire, these priority queues are implemented as skip lists.</title>
          <p>be able to set up a clause queue to only contain those clauses that satisfy a given property  .
Such property  could be, e.g.,  () =  1() ≤ 0 ∧  2() ≤ 1 to define the age and weight
level-one queues corresponding to the left-most leaf in Figure 1. The reason why clause queue
content filtering has until now not been used (to the best of our knowledge) in saturation-based
provers is probably that in the standard perspective each clause queue is meant to provide an
independent view of the whole set of passive clauses and not just a subset thereof (which would
complicate reasoning about completeness if left further unconstrained).5</p>
        </sec>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>3. Feature: Amount of theory reasoning</title>
      <p>
        Recently, saturation-based theorem provers have increasingly been used to reason about
problems requiring quantified theory reasoning [
        <xref ref-type="bibr" rid="ref13 ref14">13, 14</xref>
        ]. The standard solution to provide a prover
with support for reasoning in a given theory is to extend the input axioms of the problem
with an explicit axiomatization of the corresponding theory. There are two related problems
caused by this approach: First, the theory axioms generate a huge number of consequences, as
the theory axioms are repeatedly combined either with themselves or with other axioms, and
therefore blow up the search space. Secondly, many of these generated consequences have small
weight. If a standard age-weight-based heuristic is used for clause selection, those consequences
are therefore often selected, as selection by weight will favor them. While manually inspecting
proofs for problems of the application domains [
        <xref ref-type="bibr" rid="ref13 ref14">13, 14</xref>
        ], we observed that the amount of theory
reasoning actually required to prove these problems is small. As a result, the prover spends
most of its proof search in a part of the search space, where the chances to find a clause relevant
for the proof are low. We are therefore facing the challenge of guiding the proof search, so that
the prover does not spend too much time with theory reasoning, but at the same time still finds
proofs containing a small amount of theory reasoning.
      </p>
      <p>
        In the remainder of this section, we give an extended presentation of the solution to this
challenge already presented in [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. In a nutshell, our solution consists of a clause feature
distth, which measures the amount of theory reasoning in the derivation of a clause, and a
corresponding clause selection heuristic based on split heuristic and distth. We assume that the
input problem is given as a set of axioms, where the axioms corresponding to the axiomatization
of the theory are distinguished.
      </p>
      <p>We start by formalizing the amount of theory reasoning in the derivation of a clause  as the
ratio of the number of theory axioms and the number of all axioms in the derivation-DAG of .
Computing these numbers exactly for the derivation of each clause is potentially expensive,
since it requires for each clause a traversal of the derivation-DAG of the clause. We instead
approximate those numbers by treating the derivation-DAG as a tree, for which we can compute
the numbers using running sums, as follows:
Definition 3. For a theory axiom , define both thAx() and allAx() as 1. For a non-theory
axiom , define thAx() as 0 and allAx() as 1. For a derived clause  with parent clauses
1, . . . , , define thAx() as ∑︀ thAx() and allAx() as ∑︀ allAx(). Finally, we set
frac() := thAx()/allAx().</p>
      <p>
        5We note that clause priority functions of E [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] allow the user to order clauses on a particular queue such that
those clauses satisfying a given property  are all considered smaller than those that satisfy ¬ .
      </p>
      <p>With these notations at hand, we identify proofs that only need a small amount of theory
reasoning with the proofs where frac(⊥) is at most 1/, for some small positive integer value 
(⊥ here denotes the empty clause).</p>
      <p>Next, we present a clause feature distth which approximates the likeliness that a given
clause  occurs in a proof where frac(⊥) is at most 1/. The clause selection feature distth
is parameterized by the value  and measures the number of non-theory axioms which the
derivation of  would need to contain additionally in order to achieve a ratio of at most 1 : .
Definition 4. Let  be a positive integer value. Then distth : Clauses → N is defined as
distth() := max(thAx() ·  − allAx(), 0).</p>
      <p>The feature distth satisfies several properties, which we think are favorable: (i) if the derivation
of a clause  consists only of several axioms, then distth() is small, (ii) if derivations of clauses
1, 2 are combined into a derivation of clause , and if both distth(1) &gt; 0 and distth(2) &gt; 0,
then distth() &gt; distth(1) and distth() &gt; distth(2), and (iii) if derivations of clauses 1, 2
are combined into a derivation of clause , and if frac(1) = 1/, then distth() = distth(2).
Note that frac itself does not fulfill these properties.</p>
      <p>Example 3. Consider a clause 1, such that thAx(1) = 3 and allAx(1) = 5. Consider
further a clause 2, such that thAx(2) = 100 and allAx(2) = 200. Intuitively, 1 is much
more likely to occur in a proof with frac(⊥) = 1/4. We have distt4h(1) = 7 &lt; 200 = distt4h(2),
but frac(1) = 0.6 &gt; 0.5 = frac(2).</p>
      <p>Finally, we are able to construct a clause selection heuristic, which addresses the challenges
presented at the beginning of this section, using the split heuristic from Section 2.2 as
mono-split(distth, 1, . . . , − 1, ∞, 1 : · · · : ,  ),
where  is the positive integer such that 1/ is the expected fraction of the proof which we want
to find,  is some clause selection strategy, 1, . . . , − 1, ∞ are cutof values, and 1 : · · · :  is
a ratio. In our experience, varying  has a bigger efect than varying cutofs and ratios, and
setting  to 8 is a reasonable starting point for fine-tuning . In our experiments, other useful
values of  were between 4 and 50.</p>
    </sec>
    <sec id="sec-4">
      <title>4. Feature: AVATAR-splits</title>
      <p>
        AVATAR [
        <xref ref-type="bibr" rid="ref15 ref16 ref6">6, 15, 16</xref>
        ] is a theorem prover architecture in which a saturation algorithm is augmented
with a SAT (or an SMT) solver to facilitate an eficient version of clause splitting [
        <xref ref-type="bibr" rid="ref17 ref18">17, 18</xref>
        ]. In
a nutshell, a first-order clause  is called splittable if it can be written as  = 1 ∨ . . . ∨ ,
 &gt; 1, such that the individual components  are pairwise variable-disjoint. The main idea
behind splitting is that one can reason about the individual components separately, since for
every set of clauses  and every such splittable clause ,  ∪ {} is unsatisfiable if and only
if  ∪ {} is unsatisfiable for every  = 1, . . . , . This is advantageous, as the individual
components  are smaller than the original clause  and thus promise a strictly faster search.
      </p>
      <p>While the exact details of how AVATAR works are out of the scope of this paper, the key
aspect important here is easy to explain. First-order clauses in AVATAR need to keep track
of the dependencies on splits from which they were derived. This is done by assigning to
each clause  a set of dependencies  , denoted  ←  , where a dependency  ∈ 
is some identifier of a performed split registered elsewhere in the architecture. Clauses from
the input have their dependency set initialised as empty and the dependency set of a derived
clause is computed as the union of the dependencies of its parents. Then, when a clause such as
1 ∨ 2 ←  is split, with 1 and 2 variable-disjoint, the prover may continue reasoning
with 1 ←  ∪ {[1]} where [1] is the identifier of the dependency on the performed
split. Intuitively, each dependency  ∈  is a choice point for which the prover might
need to consider alternatives in the future. This means that a clause with many dependencies
corresponds to a logically weaker fact than a clause with fewer ones.</p>
      <p>Because the basic setup of AVATAR is oblivious to the size of the dependency set of a clause,
there is a danger of a strong preference for clauses of small weight (which arise easily with
splitting) that nevertheless depend on many splits and are therefore not the best for closing the
overall search fast. In order to potentially mitigate this efect, we propose here to use the size of
the dependency set of a clause, distAV( ←  ) = | |, as a feature for split heuristics.</p>
      <p>We then construct a clause selection heuristic using the split heuristic from Section 2 as
disj-split(distAV, 1, . . . , − 1, ∞, 1 : · · · : ,  ),
for a given clause selection function  , cutofs 1, . . . , − 1, ∞ and ratio 1 : · · · : .</p>
    </sec>
    <sec id="sec-5">
      <title>5. Feature: SInE-levels of a Clause</title>
      <p>
        The Sumo Inference Engine (SInE) [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] is a well-established algorithm for selecting premises for
ifrst-order theorem proving, i.e. for the task of reducing—before the start of the search—the
possibly large set of input axioms to a more manageable subset of those ones estimated to be
most promising for proving a given conjecture. SInE is an iterative algorithm which takes the
conjecture (also called the goal) and iteratively adds axioms that appear to be most related
to the goal or to previously added axioms by a similarity metric based on sharing symbols.
We define, for every input axiom , a heuristical distance distSInE() from the goal  as the
iteration number  at which  would be added by SInE to the included axioms for proving . By
definition, distSInE() = 0 for the goal itself and typically ranges between 1 up to approximately
10 for the non-goal input axioms [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. We will informally refer to the value distSInE( ) for a
particular formula  as its SInE-level.
      </p>
      <p>So far, we defined SInE-levels only for the input axioms and the goal. To be able to use them
as a feature of general clauses in proof search, we further define distSInE() of a derived clause
as the minimum of distSInE() over the parents  of . While the choice of the minimum
operation may appear arbitrary, note that it has the nice property that distSInE() = 0 if and only
if  has a goal among its ancestors. This is an important “flag” of a clause, typically tracked by
a theorem prover for use in various goal-directed heuristics, and SInE-levels therefore naturally
generalise this flag.
Finally, we derive a clause selection heuristic using the split heuristic from Section 2 as
mono-split(distSInE, 1, . . . , − 1, ∞, 1 : · · · : ,  ),
for a given clause selection function  , cutofs 1, . . . , − 1, ∞ and ratio 1 : · · · : . For
instance, we can use cutofs 0, ∞ and ratio 1 : 2 to ensure that from 2 + 1 clauses at least one
clause is selected which has a goal among its ancestors.</p>
    </sec>
    <sec id="sec-6">
      <title>6. Feature: Positive literals</title>
      <p>Saturation-based theorem provers are known to work well on benchmarks where each axiom is
a Horn clause, that is, a clause with at most one positive literal. We would like to extend the
eficiency of these provers to problems which are nearly Horn, in the sense that there exists a
proof of the conjecture of the problem, where the number of positive literals for each clause is
small. We can formalize this as follows: The Horn-distance distHorn() is defined as
where posLits() denotes the number of positive literals of . For a given proof  define
distHorn() := (posLits() − 1, 0),
distHorn( ) :=</p>
      <p>∑︁
 clause in 
distHorn().</p>
      <p>We claim that for many application domains, most examples are provable using a proof with
a small Horn-distance. But if we run a saturation-based theorem prover on such a problem,
it can still generate a lot of consequences which contain several positive literals. Such
consequences would typically be classified as highly unlikely to contribute to the refutation by
human inspection.</p>
      <p>We are able to guide clause selection towards finding proofs with small Horn-distance by
instantiating the split heuristic from Section 2 as</p>
      <p>disj-split(distHorn, 1, . . . , − 1, ∞, 1 : · · · : ,  ),
for a given clause selection function  , cutofs 1, . . . , − 1, ∞ and ratio 1 : · · · : .</p>
    </sec>
    <sec id="sec-7">
      <title>7. Experiments</title>
      <p>
        We implemented the heuristics described in Sections 3–6 in the state-of-the-art theorem prover
Vampire (version 4.4) [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]. Our implementation consists of about 1000 lines of C++ code and
will become integrated in the next release of the prover.
      </p>
      <p>
        We evaluated the extended implementation of Vampire on two sets of problems coming
from the TPTP library [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ] and from SMTLIB [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ], respectively. In detail, we selected all the
ifrst-order problems of the form CNF, FOF, and TF0 (including those with arithmetic) from TPTP
version 7.3.0. This gave us 18 294 problems. Additionally, we picked a subset of a recent version
(release 2019-05-06) of SMTLIB consisting of all the problems from the sub-logics that contain
quantification and theories, such as ALIA, LRA, NRA, UFDT, . . . , except for those requiring
bit-vector (BV) or floating-point (FP) reasoning, currently not supported by Vampire. For this
SMTLIB benchmark we obtained 68 234 problems.
      </p>
      <p>Our experiments were run on our local server with two Intel Xeon Gold 6140 Processors
(i.e., with 72 processor threads) and 188GB RAM. We were running 30 instances of Vampire
in parallel with no other significant load on the server. To obtain a baseline strategy, denoted
as base, we modified the default Vampire strategy (which uses Avatar) to use the Discount
saturation loop (for stability of results6) and the clause selection heuristic (1 : 10) (which
in our experience leads in Vampire to a good performance with Discount). All other tested
strategies extend base by applying one or more split heuristics for clause selection on top of
this setup. With the exception of Experiment 4 we used a time limit of 10 s per problem.7</p>
      <sec id="sec-7-1">
        <title>7.1. Experiment 1: testing the initial defaults</title>
        <p>
          Searching for good values of the cutofs, the ratio and other parameters of split heuristics is
rewarding, but requires some experience and a certain amount of experimental “tuning”. In
our previous work on layered clause selection [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ], we gained some of such experience for the
feature measuring the amount of theory reasoning (Section 3) and later—also with the help
of an experiment reported further below—picked certain default values for parameters of the
heuristics corresponding to the other features. We used these defaults (presented in Table 1) in
the first experiment, the purpose of which is to demonstrate the basic improvement we obtain
from using the presented heuristics and their combinations.
        </p>
        <p>Table 1 assigns a tag, typeset in the typewriter font, to each of our four heuristics when
understood as Vampire options used for defining a strategy. Thanks to the possibility of
nesting split heuristics, these options can be turned on and of independently from one another.
Although a particular fixed order is employed in Vampire to build up the nestings (namely the
order, from inside out: th, av, sl, pl), we use the operator + to denote possible combinations
to suggest that this order is actually irrelevant for the proof search (cf. Section 2.5).</p>
        <p>
          The results of the first experiment are shown in Table 2, separately for TPTP and for SMTLIB.
We observe that in the case of TPTP all the four new heuristics lead to an improvement in
the number of solved problems. This is easiest to see from the always positive column Δbase,
which shows the diference of the number of problems solved between the current strategy and
6The default Limited Resource Strategy [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ] is sensitive to timing measurements and repeated runs on the same
benchmark under essentially the same conditions may vary a lot.
        </p>
        <p>7A list of the selected problems along with other information needed to reproduce our experiments can be
found at https://github.com/quickbeam123/LCS4SbTP-materials.
base. The same success is not fully repeated on SMTLIB where th shows a great improvement,
but av performs worse than base. (Note that we did not run sl on SMTLIB, since the format
used in the library does not support specifying the goal.8)</p>
        <p>It should be pointed out that even a strategy which does not improve over base in terms
of the number of solved problems could be valuable for the potential participation in strategy
schedules, because of the problems it solves uniquely (as reported in the last column in the
tables). For another view of this efect, the last line in the two tables shows the number of
problems solved by at least one of the listed strategies, again also compared against base. We
can see that the use of split heuristics allows us to solve almost 1200 TPTP problems (and more
than 3200 SMTLIB problems) not solved by base.</p>
      </sec>
      <sec id="sec-7-2">
        <title>7.2. Experiment 2: nesting of the heuristics</title>
        <p>When looking in Table 2 at the performance of the combination of the four heuristics (strategy
th+av+sl+pl) one can ask why it does not get better at achieving a combined benefit of its
constituents. In Experiment 2, we look at this trend closer and especially try to estimate how
much time is typically spent on computing the clause selection heuristic and how this depends
on the number of heuristics combined.</p>
        <p>The report in Table 3 is based on TPTP runs of all the 16 possible strategies which combine
between zero to four of the heuristics introduced in this paper. The middle part of the table
reports on their performance in terms of the number of solved problems and is comparable
to (in fact, a super-set of) the results in Table 2 (left). One can notice here that combinations
indeed sometimes do not outcompete their constituents. E.g., *+av+pl is always worse than
just *+pl, which could indicate some unfavourable interactions of the two heuristics. (We leave
a more detailed study of this phenomenon for future work.)</p>
        <p>
          Our main focus in this experiment, however, is on the right part of the table. There, we took
the runs on those problems which none of the strategies could solve9 (i.e., on which they ran
for the full 10 s) and measured how much time was spent (on average) on interacting with the
passive clause container (this includes insertions, deletions and the popping of the selected
8There is, however, interesting work on “guessing the goal” for SMTLIB problems [
          <xref ref-type="bibr" rid="ref21">21</xref>
          ], which we plan to
experiment with in the future.
        </p>
        <p>9There were 7808 such problems.
clauses). This average time is reported in the last column, from which we can see that, indeed,
the more complex combined strategies are more expensive to execute.</p>
        <p>Additionally, for comparison, the #queues column in the table reminds us how many “layer
one” clause queues each strategy maintains (recall Section 2.3 and the number of “horizontal”
splits each heuristic uses, as shown in Table 1). The multiplier (*2) corresponding to av and pl
is rendered in brackets, because these two heuristics use the disjoint split mode. This means
that when deciding on distAV (or distHorn), each clause is strictly inserted only into one of two
possible sub-containers (rather than possibly to more than one, as with the monotone mode).
Correspondingly, the strategies are clearly separated into four groups in terms of average
interaction time, where the monotone splits of sl and th are the costly ones (and maintaining
the 4 queues of th costs more than the 3 queues of sl) whereas the disjoint split of the other
two heuristics does not seem to be adding any measurable overhead.</p>
        <p>We remark that the reported average times are not directly proportional to speed of clause
processing as each run was terminated after 10 s no matter how many selections were performed.
Moreover, quite diferent search spaces could have been traversed by each of the strategies.</p>
      </sec>
      <sec id="sec-7-3">
        <title>7.3. Experiment 3: parameter tunings</title>
        <p>
          In this section, we shed some light on how the performance of our heuristics varies under
the two possible modes of split and under changing the ratios. We focus here on the
SInElevels, AVATAR-splits, and the number of positive literals, referring the reader to [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ] for more
information on the behaviour of the theory reasoning heuristic. Fortunately, for these three
features, we always have a canonical value for the main cutof to try first:
• as explained in Section 5, clauses of distSInE() ≤ 0 are exactly those derived with the
help of the goal,
• clauses with distAV() ≤ 0 do not depend on any AVATAR splits, and
• clauses with distHorn() ≤ 1 are exactly the Horn clauses.
        </p>
        <sec id="sec-7-3-1">
          <title>With the last feature, we also try out the “obvious” cutof value 0.</title>
          <p>Although we do not spend much efort on exploring the multi-value “horizontal” splits (since
the risk of overfitting to the benchmark increases, and the parameter space becomes both too
large to sample eficiently and hard to visualise), we explain how we discovered the successful
default for sl with cutofs (0, 1, ∞) and suggest a multi-value cutof setting for pl.
Tuning SInE-levels Figure 2 shows the result of varying the ratio while splitting on distSInE
with the cutofs (0, ∞). We can observe that with distSInE, the monotone mode is clearly more
successful than the disjoint one.</p>
          <p>
            For a comparison, the figure also includes marks for the base strategy and the base strategy
enhanced by setting the non-goal weight coeficient (nwc) to values 2.0, 5.0, and 10.0. Changing
the non-goal weight coeficient is a diferent way of making clause selection goal oriented
which relies on multiplying the weight of each clause not derived from the goal by the given
nwc, making it artificially larger and thus less likely to be selected [
            <xref ref-type="bibr" rid="ref8">8</xref>
            ]. We can see that the
“nwc = 10.0” strategy still beats the best possible ratio for the SInE level split queue setup here.
          </p>
          <p>The method we used to further improve the SInE level split heuristic is as follows. We took
the best ratio 1 : 5 for the monotone split as shown in Figure 2. Let us recall that this strategy
tries to select once out of every 6 selections a clause  with distSInE() ≤ 0, the remaining 5
selections being unconstrained by distSInE. After adding a second cutof (of value 1), we can
speculate how to split these 5 selections into those with distSInE() ≤ 1 and the remaining,
again unconstrained ones. This led us to an experiment with the fixed cutofs (0, 1, ∞) and the
varied ratios 1:4:1, 1:3:2, 1:2:3, and 1:1:4, and with the resulting number of problems solved: 9112
(+4 over base), 9410 (+302), 9512 (+404), and 9501 (+393), respectively. Based on this experiment
we selected the cutofs (0, 1, ∞) and ratio 1:2:3 as the default for sl.10
Tuning AVATAR-splits Figure 3 visualizes the changes in performance when varying the
ratios for the AVATAR-based split heuristic with the distAV() ≤ 0 cutof and compares them
to base. We can see that the trends are similar for TPTP and SMTLIB and that here the highest
values are reached for the disjoint mode of split. Although the best ratio on TPTP is 2:3, we
chose the ratio 1:1 for the default in av given its much better performance on SMTLIB.
Tuning the positive literals feature The situation with the positive literals feature is a bit
harder to understand. Let us first have a look at the distHorn() ≤ 0 cutof, i.e. the perspective
in which the “good” clauses are the clauses with no positive literals.</p>
          <p>The performance development for this setup is visualised in Figure 4, again both for TPTP
(left) and SMTLIB (right). Here, the two behaviours are quite diferent. Most notably, the disjoint
mode, which we selected for the default of pl, is only dominant for SMTLIB, whereas for TPTP,
better values can be achieved with the monotone mode. Moreover, the monotone mode on
TPTP remains to be very successful (as compared to base) for up to high values of the ratio.
In contrast, on SMTLIB the performance of the monotone mode is close to that of base from
the ratio 1:5 onwards (and reaches it “from below” with the smaller values). Note that for the
monotone mode, increasing  in a ratio 1: efectively converges to turning the heuristic of.
This makes the observation that this mode is still very successful on TPTP for the ratio 1:30
even more surprising. We currently do not have a good explanation for this phenomenon.</p>
          <p>Let us with Figure 5 move on to the distHorn() ≤ 1 cutof, under which we recognise as
“good” those clauses that have at most one positive literal. This “Horn fragment” perspective is
10Table 2 reports a slightly diferent number of solved problems for the default sl. The variation, i.e., the 9512 vs
9525 solved problems, is an artefact of rerunning the experiment (in an inherently non-deterministic environment)
whose magnitude should be taken into account when interpreting the results in this whole section.
both for TPTP and for SMTLIB dominated by the monotone mode of split. When looking at the
actual number of problems solved, however, we observe that on neither of the two benchmarks is
the improvement over base as pronounced as for the distHorn() ≤ 0 cutof. The best measured
improvement for SMTLIB is +78 problems over base achieved for the ratio 1:1. On TPTP, we
gain +103 problems over base with the ratio 6:1.</p>
          <p>We used the same strategy for extending a good ratio from one non-trivial cutof to two as
with the SInE-levels. Focusing on the TPTP benchmark, which seems to be more “responsive”
to the heuristic based on positive literals, we started from the successful ratio 1:20 from the
distHorn() ≤ 0 cutof with the monotone mode of split and tested variations in which the
20 selections are distributed between a certain amount of those with distHorn() ≤ 1 and
the remaining, unconstrained ones. This way, we tested strategies with the cutof (0, 1, ∞)
and ratios 1:15:5, 1:16:4, 1:17:3, 1:18:2, and 1:19:1, obtaining, respectively, 9365, 9383, 9368,
9368, 9277 problems solved. The best of these, 1:16:4, improves over the 1:20-ratio (0,
∞)cutof monotone-mode strategy by additional 87 problems. For comparison, however, this new
strategy does not fare very well on SMTLIB, where it scores 181 fewer problems than base.
Our tentative conclusion from tuning the positive literals feature is that the ensuing “Horn
fragment” perspective is not very useful for improving the performance on SMTLIB.</p>
        </sec>
      </sec>
      <sec id="sec-7-4">
        <title>7.4. Experiment 4: software verification benchmarks</title>
        <p>
          A recent stream of work (started in [
          <xref ref-type="bibr" rid="ref13">13</xref>
          ]) formalizes the correctness of functional properties
about programs containing loops and arrays as validity problems in quantified first-order logic
modulo integers and diference logic over natural numbers. It then uses superposition-based
theorem proving to reason about the resulting encodings.
        </p>
        <p>These encodings are extremely challenging, since they include quantifier alternations and
quantified theory reasoning over both integers and diference logic and require proofs of
nontrivial size. We conjecture that the key ingredient to reason in this domain eficiently is to
equip the prover with domain-specific knowledge: From experience we know that proofs in
this domain require only light-weight theory reasoning and light-weight reasoning with case
distinctions. We furthermore know that it pays of to explore consequences related to the
conjecture. Our work measures the amount of theory reasoning in a derivation of a clause using
distth, measures the amount of case-distinctions in a derivation of a clause using distHorn, and
keeps track of whether the conjecture occurred in the derivation of a clause using distSInE. We
therefore are able to use nested split-heuristics with those features to guide proof search on
these examples.</p>
        <p>
          As a third experiment, we investigated the efect of guiding proof search using nested split
heuristics with features distt8h, distHorn, and distSInE on 103 benchmarks obtained from
unpublished work extending and improving [
          <xref ref-type="bibr" rid="ref13">13</xref>
          ]. We adapted the default configuration of Vampire
to a base configuration, by (i) turning of Avatar, (ii) turning on additional simplification
rules, including backward subsumption, backward subsumption resolution, and forward- and
backward subsumption demodulation [
          <xref ref-type="bibr" rid="ref22">22</xref>
          ] and (iii) additional smaller changes. Starting from
this base configuration, we compared two versions aw and split-heuristics. The version
aw combines the base configuration with Vampire’s default clause selection heuristic (1 : 1).
The version split-heuristics uses a portfolio of configurations, where each configuration
uses the clause selection heuristic
mono-split(distt8h, ,
mono-split(distHorn, ,
mono-split(distSInE, ,
        </p>
        <p>
          aw(1 : 1)))),
consisting of three nested monotone split heuristics with features distt8h, distHorn and distSInE,
where the cutofs and ratios of the split heuristics are varied in the portfolio. For each
configuration, we imposed a timeout of 60 s. The results of the experiment are listed in Table 4. While
Vampire was only able to prove 18 out of 103 examples with aw, it was able to prove 78 out of
103 examples while using split-heuristics. These results are significant, and suggest that
adding domain-specific knowledge using clause selection heuristics based on the split heuristic
is a key ingredient to eficient automation of the challenging software verification benchmarks
obtained from extensions of [
          <xref ref-type="bibr" rid="ref13">13</xref>
          ].
        </p>
      </sec>
    </sec>
    <sec id="sec-8">
      <title>8. Conclusion</title>
      <p>We investigated the framework of layered clause selection and split heuristics for clause selection
and generalized it to support arbitrary nestings and both disjoint and monotone groups. We
then revisited the existing feature distth and introduced three new features distAV, distSInE, and
distHorn. Finally, we instantiated the framework of split heuristics with these four features
and presented a thorough experimental evaluation. Our results suggest that split heuristics
heavily improve the performance for both general domains as well as for a specific application
to software verification.</p>
    </sec>
    <sec id="sec-9">
      <title>Acknowledgements</title>
      <p>Bernhard Gleiss was supported by the ERC Starting Grant 2014 SYMCAR 639270, the ERC Proof
of Concept Grant 2018 SYMELS 842066, and the Austrian FWF research project W1255-N23.
Martin Suda was supported by the ERC Consolidator grant AI4REASON no. 649043 under the
EU-H2020 programme and the Czech Science Foundataion project 20-06390Y.</p>
      <p>We thank the anonymous reviewers for their useful comments and suggestions. We also
thank Sibylle Ortner for a careful proofreading of a preliminary version of this paper.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>A.</given-names>
            <surname>Riazanov</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Voronkov</surname>
          </string-name>
          ,
          <article-title>Limited resource strategy in resolution theorem proving</article-title>
          ,
          <source>J. Symb. Comput</source>
          .
          <volume>36</volume>
          (
          <year>2003</year>
          )
          <fpage>101</fpage>
          -
          <lpage>115</lpage>
          . URL: https://doi.org/10.1016/S0747-
          <volume>7171</volume>
          (
          <issue>03</issue>
          )
          <fpage>00040</fpage>
          -
          <lpage>3</lpage>
          . doi:
          <volume>10</volume>
          .1016/S0747-
          <volume>7171</volume>
          (
          <issue>03</issue>
          )
          <fpage>00040</fpage>
          -
          <lpage>3</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>S.</given-names>
            <surname>Schulz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Möhrmann</surname>
          </string-name>
          ,
          <article-title>Performance of clause selection heuristics for saturation-based theorem proving</article-title>
          , in: N.
          <string-name>
            <surname>Olivetti</surname>
            ,
            <given-names>A</given-names>
          </string-name>
          . Tiwari (Eds.),
          <source>8th International Joint Conference on Automated Reasoning (IJCAR</source>
          <year>2016</year>
          ), volume
          <volume>9706</volume>
          of Lecture Notes in Computer Science, Springer,
          <year>2016</year>
          , pp.
          <fpage>330</fpage>
          -
          <lpage>345</lpage>
          . URL: https://doi.org/10.1007/978-3-
          <fpage>319</fpage>
          -40229-1_
          <fpage>23</fpage>
          . doi:
          <volume>10</volume>
          . 1007/978-3-
          <fpage>319</fpage>
          -40229-1\_
          <fpage>23</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>T.</given-names>
            <surname>Tammet</surname>
          </string-name>
          ,
          <article-title>GKC: A reasoning system for large knowledge bases</article-title>
          , in: P. Fontaine (Ed.),
          <source>27th International Conference on Automated Deduction (CADE</source>
          <year>2019</year>
          ), volume
          <volume>11716</volume>
          of Lecture Notes in Computer Science, Springer,
          <year>2019</year>
          , pp.
          <fpage>538</fpage>
          -
          <lpage>549</lpage>
          . URL: https://doi.org/10. 1007/978-3-
          <fpage>030</fpage>
          -29436-6_
          <fpage>32</fpage>
          . doi:
          <volume>10</volume>
          .1007/978-3-
          <fpage>030</fpage>
          -29436-6\_
          <fpage>32</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>B.</given-names>
            <surname>Gleiss</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Suda</surname>
          </string-name>
          ,
          <article-title>Layered clause selection for theory reasoning (short paper)</article-title>
          ,
          <source>in: 10th International Joint Conference on Automated Reasoning (IJCAR</source>
          <year>2020</year>
          ),
          <year>2020</year>
          . To appear.
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>L.</given-names>
            <surname>Kovács</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Voronkov</surname>
          </string-name>
          ,
          <article-title>First-order theorem proving and Vampire</article-title>
          , in: N.
          <string-name>
            <surname>Sharygina</surname>
          </string-name>
          , H. Veith (Eds.),
          <source>25th International Conference on Computer Aided Verification (CAV</source>
          <year>2013</year>
          ), volume
          <volume>8044</volume>
          of Lecture Notes in Computer Science, Springer,
          <year>2013</year>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>35</lpage>
          . URL: https://doi.org/10.1007/978-3-
          <fpage>642</fpage>
          -39799-
          <issue>8</issue>
          _1. doi:
          <volume>10</volume>
          .1007/978-3-
          <fpage>642</fpage>
          -39799-8\_1.
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>A.</given-names>
            <surname>Voronkov</surname>
          </string-name>
          ,
          <article-title>AVATAR: the architecture for first-order theorem provers</article-title>
          , in: A.
          <string-name>
            <surname>Biere</surname>
          </string-name>
          , R. Bloem (Eds.),
          <source>26th International Conference on Computer Aided Verification (CAV</source>
          <year>2014</year>
          ), volume
          <volume>8559</volume>
          of Lecture Notes in Computer Science, Springer,
          <year>2014</year>
          , pp.
          <fpage>696</fpage>
          -
          <lpage>710</lpage>
          . URL: https: //doi.org/10.1007/978-3-
          <fpage>319</fpage>
          -08867-9_
          <fpage>46</fpage>
          . doi:
          <volume>10</volume>
          .1007/978-3-
          <fpage>319</fpage>
          -08867-9\_
          <fpage>46</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>K.</given-names>
            <surname>Hoder</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Voronkov</surname>
          </string-name>
          ,
          <article-title>Sine qua non for large theory reasoning</article-title>
          , in: N.
          <string-name>
            <surname>Bjørner</surname>
          </string-name>
          , V. SofronieStokkermans (Eds.),
          <source>23rd International Conference on Automated Deduction (CADE</source>
          <year>2011</year>
          ), volume
          <volume>6803</volume>
          of Lecture Notes in Computer Science, Springer,
          <year>2011</year>
          , pp.
          <fpage>299</fpage>
          -
          <lpage>314</lpage>
          . URL: https: //doi.org/10.1007/978-3-
          <fpage>642</fpage>
          -22438-6_
          <fpage>23</fpage>
          . doi:
          <volume>10</volume>
          .1007/978-3-
          <fpage>642</fpage>
          -22438-6\_
          <fpage>23</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>M.</given-names>
            <surname>Suda</surname>
          </string-name>
          ,
          <article-title>Aiming for the goal with SInE</article-title>
          , in: L.
          <string-name>
            <surname>Kovács</surname>
            ,
            <given-names>A</given-names>
          </string-name>
          . Voronkov (Eds.),
          <source>Vampire 2018 and Vampire</source>
          <year>2019</year>
          .
          <article-title>The 5th and 6th Vampire Workshops</article-title>
          , volume
          <volume>71</volume>
          of EPiC Series in Computing, EasyChair,
          <year>2020</year>
          , pp.
          <fpage>38</fpage>
          -
          <lpage>44</lpage>
          . URL: https://easychair.org/publications/paper/lZfv. doi:
          <volume>10</volume>
          .29007/q4pt.
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>R. A.</given-names>
            <surname>Overbeek</surname>
          </string-name>
          ,
          <article-title>A new class of automated theorem-proving algorithms</article-title>
          ,
          <source>J. ACM</source>
          <volume>21</volume>
          (
          <year>1974</year>
          )
          <fpage>191</fpage>
          -
          <lpage>200</lpage>
          . URL: http://doi.acm.
          <source>org/10</source>
          .1145/321812.321814. doi:
          <volume>10</volume>
          .1145/321812.321814.
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>L.</given-names>
            <surname>Bachmair</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Ganzinger</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D. A.</given-names>
            <surname>McAllester</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Lynch</surname>
          </string-name>
          ,
          <article-title>Resolution theorem proving</article-title>
          ,
          <source>in: Handbook of Automated Reasoning (in 2 volumes)</source>
          ,
          <year>2001</year>
          , pp.
          <fpage>19</fpage>
          -
          <lpage>99</lpage>
          . URL: https://doi.org/ 10.1016/b978-044450813-3/
          <fpage>50004</fpage>
          -
          <lpage>7</lpage>
          . doi:
          <volume>10</volume>
          .1016/b978-044450813-3/
          <fpage>50004</fpage>
          -7.
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>S.</given-names>
            <surname>Schulz</surname>
          </string-name>
          ,
          <source>System Description: E 1</source>
          .8, in: K.
          <string-name>
            <surname>McMillan</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          <string-name>
            <surname>Middeldorp</surname>
            ,
            <given-names>A</given-names>
          </string-name>
          . Voronkov (Eds.),
          <source>Proc. of the 19th LPAR, Stellenbosch</source>
          , volume
          <volume>8312</volume>
          <source>of LNCS</source>
          , Springer,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>S.</given-names>
            <surname>Schulz</surname>
          </string-name>
          ,
          <string-name>
            <surname>E</surname>
          </string-name>
          <year>2</year>
          .
          <article-title>4 User Manual</article-title>
          , http://wwwlehre.dhbw-stuttgart.de/~sschulz/WORK/E_ DOWNLOAD/V_2.4/eprover.pdf (accessed
          <year>January 2020</year>
          ),
          <year>2019</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>G.</given-names>
            <surname>Barthe</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Eilers</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Georgiou</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Gleiss</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Kovács</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Mafei</surname>
          </string-name>
          ,
          <article-title>Verifying relational properties using trace logic</article-title>
          ,
          <source>in: Formal Methods in Computer Aided Design</source>
          <year>2019</year>
          (FMCAD
          <year>2019</year>
          ),
          <year>2019</year>
          , pp.
          <fpage>170</fpage>
          -
          <lpage>178</lpage>
          . doi:
          <volume>10</volume>
          .23919/FMCAD.
          <year>2019</year>
          .
          <volume>8894277</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>J.</given-names>
            <surname>Backes</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Bayless</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Cook</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Dodge</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Gacek</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A. J.</given-names>
            <surname>Hu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Kahsai</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Kocik</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Kotelnikov</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Kukovec</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>McLaughlin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Reed</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Rungta</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Sizemore</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Stalzer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Srinivasan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Subotić</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Varming</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Whaley</surname>
          </string-name>
          ,
          <article-title>Reachability analysis for aws-based networks</article-title>
          , in: I.
          <string-name>
            <surname>Dillig</surname>
          </string-name>
          , S. Tasiran (Eds.), Computer Aided Verification, Springer,
          <year>2019</year>
          , pp.
          <fpage>231</fpage>
          -
          <lpage>241</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>G.</given-names>
            <surname>Reger</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Suda</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Voronkov</surname>
          </string-name>
          ,
          <article-title>Playing with AVATAR, in:</article-title>
          <string-name>
            <given-names>A. P.</given-names>
            <surname>Felty</surname>
          </string-name>
          ,
          <string-name>
            <surname>A</surname>
          </string-name>
          . Middeldorp (Eds.),
          <source>25th International Conference on Automated Deduction (CADE</source>
          <year>2015</year>
          ), volume
          <volume>9195</volume>
          of Lecture Notes in Computer Science, Springer,
          <year>2015</year>
          , pp.
          <fpage>399</fpage>
          -
          <lpage>415</lpage>
          . URL: https://doi.org/10. 1007/978-3-
          <fpage>319</fpage>
          -21401-6_
          <fpage>28</fpage>
          . doi:
          <volume>10</volume>
          .1007/978-3-
          <fpage>319</fpage>
          -21401-6\_
          <fpage>28</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>G.</given-names>
            <surname>Reger</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Bjorner</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Suda</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Voronkov</surname>
          </string-name>
          ,
          <article-title>AVATAR modulo theories</article-title>
          , in: C. Benzmüller, G. Sutclife, R. Rojas (Eds.),
          <source>2nd Global Conference on Artificial Intelligence (GCAI</source>
          <year>2016</year>
          ), volume
          <volume>41</volume>
          of EPiC Series in Computing, EasyChair,
          <year>2016</year>
          , pp.
          <fpage>39</fpage>
          -
          <lpage>52</lpage>
          . URL: https://easychair. org/publications/paper/7. doi:
          <volume>10</volume>
          .29007/k6tp.
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>C.</given-names>
            <surname>Weidenbach</surname>
          </string-name>
          ,
          <article-title>Combining superposition, sorts and splitting</article-title>
          , in: J. A.
          <string-name>
            <surname>Robinson</surname>
            ,
            <given-names>A</given-names>
          </string-name>
          . Voronkov (Eds.),
          <source>Handbook of Automated Reasoning (in 2 volumes)</source>
          ,
          <article-title>Elsevier and</article-title>
          MIT Press,
          <year>2001</year>
          , pp.
          <fpage>1965</fpage>
          -
          <lpage>2013</lpage>
          . URL: https://doi.org/10.1016/b978-044450813-3/
          <fpage>50029</fpage>
          -
          <lpage>1</lpage>
          . doi:
          <volume>10</volume>
          .1016/b978-044450813-3/
          <fpage>50029</fpage>
          -1.
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>A.</given-names>
            <surname>Riazanov</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Voronkov</surname>
          </string-name>
          ,
          <article-title>Splitting without backtracking</article-title>
          , in: B. Nebel (Ed.),
          <source>17th International Joint Conference on Artificial Intelligence (IJCAI</source>
          <year>2001</year>
          ), Morgan Kaufmann,
          <year>2001</year>
          , pp.
          <fpage>611</fpage>
          -
          <lpage>617</lpage>
          . URL: http://ijcai.org/proceedings/2001-1.
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>G.</given-names>
            <surname>Sutclife</surname>
          </string-name>
          ,
          <article-title>The TPTP Problem Library and Associated Infrastructure. From CNF to TH0</article-title>
          ,
          <source>TPTP v6.4.0, Journal of Automated Reasoning</source>
          <volume>59</volume>
          (
          <year>2017</year>
          )
          <fpage>483</fpage>
          -
          <lpage>502</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>C.</given-names>
            <surname>Barrett</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Fontaine</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Tinelli</surname>
          </string-name>
          ,
          <article-title>The Satisfiability Modulo Theories Library (SMT-LIB), www</article-title>
          .
          <source>SMT-LIB.org</source>
          ,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <given-names>G.</given-names>
            <surname>Reger</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Riener</surname>
          </string-name>
          ,
          <article-title>What is the point of an SMT-LIB problem?</article-title>
          ,
          <source>in: 16th International Workshop on Satisfiability Modulo Theories (SMT</source>
          <year>2018</year>
          ),
          <year>2018</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <given-names>B.</given-names>
            <surname>Gleiss</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Kovács</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Rath</surname>
          </string-name>
          ,
          <article-title>Subsumption demodulation in first-order theorem proving</article-title>
          ,
          <source>in: Automated Reasoning - 10th International Joint Conference, IJCAR 2020</source>
          , Paris, France,
          <source>July 1-4</source>
          ,
          <year>2020</year>
          , Proceedings,
          <string-name>
            <surname>Part</surname>
            <given-names>I</given-names>
          </string-name>
          ,
          <year>2020</year>
          , pp.
          <fpage>297</fpage>
          -
          <lpage>315</lpage>
          . URL: https://doi.org/10.1007/ 978-3-
          <fpage>030</fpage>
          -51074-9_
          <fpage>17</fpage>
          . doi:
          <volume>10</volume>
          .1007/978-3-
          <fpage>030</fpage>
          -51074-9\_
          <fpage>17</fpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>