<!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>Boolean Reasoning in a Higher-Order Superposition Prover</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Petar Vukmirović</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Visa Nummelin</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Vrije Universiteit Amsterdam</institution>
          ,
          <addr-line>De Boelelaan 1105, 1081 HV Amsterdam</addr-line>
          ,
          <country country="NL">The Netherlands</country>
        </aff>
      </contrib-group>
      <fpage>148</fpage>
      <lpage>166</lpage>
      <abstract>
        <p>We present a pragmatic approach to extending a Boolean-free higher-order superposition calculus to support Boolean reasoning. Our approach extends inference rules that have been used only in a firstorder setting, uses some well-known rules previously implemented in higher-order provers, as well as new rules. We have implemented the approach in the Zipperposition theorem prover. The evaluation shows highly competitive performance of our approach and clear improvement over previous techniques.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;higher-order logic</kwd>
        <kwd>theorem proving</kwd>
        <kwd>superposition</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>
        To fully bridge the gap between higher-order and first-order tools, we combine the two
approaches: we use the eficient higher-order superposition calculus and extend it with inference
rules that reason with Boolean terms. In early work, Kotelnikov et al. [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] have described a
FOOL paramodulation rule that, under some order requirements, removes the need for the axiom
describing the Boolean domain – @p : q.  « J _  « K. In this approach, it is assumed that
a problem with formulas occurring as arguments of symbols is translated to first-order logic.
      </p>
      <p>The backbone of our approach is based on an extension of this rule to higher-order logic.
Namely, we do not translate away any Boolean structure that is nested inside non-Boolean
terms and allow our rule to hoist the nested Booleans to the literal level. Then, we clausify the
resulting formula (i.e., a clause that contains formulas in literals) using a new rule.</p>
      <p>
        An important feature that we inherit by building on top of Bentkamp et al. [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] is support
for (function) extensionality. Moving to higher-order logic with Booleans also means that we
need to consider Boolean extensionality: @p : qp : q. p ô q ñ  « . We extend the rules
of Bentkamp et al. that treat function extensionality to support Boolean extensionality as well.
      </p>
      <p>
        Rules that extend the two orthogonal approaches form the basis of our support for Boolean
reasoning (Section 3). In addition, we have implemented rules that are inspired by the ones
used in the higher-order provers Leo-III [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] and Satallax [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ], such as elimination of Leibniz
equality, primitive instantiation and treatment of choice operator [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ]. We have also designed
new rules that use higher-order unification to resolve Boolean formulas that are hoisted to literal
level, delay clausification of non-atomic literals, reason about formulas under  -binders, and
many others. Even though the rules we use are inspired by the ones of refutationally complete
higher-order provers, we do not guarantee completeness of our extension of  -superposition.
      </p>
      <p>
        We compare our native approach with two alternatives based on preprocessing (Section 4).
First, we compare it to an axiomatization of the theory of Booleans. Second, inspired by work
of Kotelnikov et al. [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ], we implemented the preprocessing approach that does not require
introduction of Boolean axioms. We also discuss some examples, coming from TPTP [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ], that
illustrate advantages and disadvantages of our approach (Section 5).
      </p>
      <p>
        Our approach is implemented in the Zipperposition theorem prover [
        <xref ref-type="bibr" rid="ref18 ref19">18, 19</xref>
        ]. Zipperposition
is an easily extensible open source prover that Bentkamp et al. used to implement their
higherorder superposition calculus. We further extend their implementation.
      </p>
      <p>We performed an extensive evaluation of our approach (Section 6). In addition to evaluating
diferent configurations of our new rules, we have compared them to full higher-order provers
CVC4, Leo-III, Satallax and Vampire. The results suggest that it is beneficial to natively support
Boolean reasoning – the approach outperforms preprocessing-based approaches. Furthermore,
it is very competitive with state-of-the-art higher order provers. We discuss the diferences
between our approach and the approaches we base on, as well as related approaches (Section 7).</p>
    </sec>
    <sec id="sec-2">
      <title>2. Background</title>
      <p>
        We base our work on Bentkamp et al.’s [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] extensional polymorphic clausal higher-order logic.
We extend the syntax of this logic by adding logical connectives to the language of terms. The
semantic of the logic is extended by interpreting Boolean type  as a two-element domain. This
amounts to extending Bentkamp et al’s fragment of higher-order logic to full-higher order logic
(HOL). Our notation, definitions and the following text are largely based on Bentkamp et al.’s.
      </p>
      <p>A signature is a quadruple pΣty, Vty, Σ, Vq where Σty is a set of type constructors, Vty is a
set of type variables and Σ and V are sets of constants and term variables, respectively. We
require nullary type constructors  and , as well as binary constructor Ñ to be in Σty. A
type ,  is either a type variable  P Vty or of the form  p 1, . . .  q where  is an -ary type
constructor. We write  for  pq,  Ñ  for Ñ p,  q, and we abbreviate tuples p1, . . . , q as
 for  ě 0. Similarly, we drop parentheses to shorten  1 Ñ p¨ ¨ ¨ Ñ p ´1 Ñ  q ¨ ¨ ¨ q into
 1 Ñ ¨ ¨ ¨ Ñ  . Each symbol in Σ is assigned a type declaration of the form Π .  where all
variables occurring in  are among  .</p>
      <p>Function symbols a, b, f, g, . . . are elements of Σ; their type declarations are written as
f : Π .  . Term variables from the set V are written , ,  . . . and we denote their types as
 :  . When the type is not important, we omit type declarations. We assume that symbols
J, K, ␣, ^, _, ñ, ô with their standard meanings and type declarations are elements of Σ.
Furthermore, we assume that polymorphic symbols @ and D with type declarations Π. p Ñ
q Ñ  and « : Π.  Ñ  Ñ  are in Σ, with their standard meanings. All these symbols are
called logical symbols. We write binary logical symbols in infix notation.</p>
      <p>
        Terms are defined inductively as follows. Variables  :  are terms of type  . If f : Π . 
is in Σ and   is a tuple of types, called type arguments, then fx y (written as f if  “ 0, or if
type arguments can be inferred from the context) is a term of type  t  ÞÑ  u, called constant.
If  is a variable of type  and  is a term of type  then .  is a term of type  Ñ  . If  and 
are of type  Ñ  and  , respectively, then   is a term of type  . We call terms of Boolean type
() formulas and denote them by , , ℎ, . . .; we use , , , . . . for variables whose result type
is  and p, q, r for constants with the same result type. We shorten iterated lambda abstraction
 1. . . .  .  to  . , and iterated application p 1q ¨ ¨ ¨  to  . We assume the standard
notion of free and bound variables, capture-avoiding substitutions , , , . . . , and  -,  -, 
conversion. Unless stated otherwise, we view terms as  -equivalence classes, with  -long
 -reduced form as the representative. Each term  can be uniquely written as  .   where
 is either variable or constant and ,  ě 0; we call  the head of . We say that a term   is
written in spine notation [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ]. Following our previous work [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ], we define nonstandard notion
of subterms and positions inductively as a graceful extension of the first-order counterparts: a
term  is a subterm of itself at position . If  is a subterm of  at position  then  is a subterm
of   at position ., where  is a head. If  is a subterm of  at position  then  is a subterm
of .  at position 1.. We use | to denote subterm of  at position .
      </p>
      <p>Given a formula  we call its Boolean subterm  | a top-level Boolean if for all proper prefixes
 of , the head of  | is a logical constant. Otherwise, we call it a nested Boolean. For example,
in the formula  “ h a « g pp ñ qq _ ␣p,  |1 and  |2 are top-level Booleans, whereas  |1.2.1
is a nested Boolean (as well as its subterms). Only top-level Booleans are allowed in first-order
logic, whereas nested Booleans are characteristic for higher-order logic. A formula is called an
atom if it is of the form  , where  is a non-logical head, or of the form  « , where if  or 
are of type , and one of them has a logical head, the other one must be J or K. A literal  is
an atom or its negation. A clause  is a multiset of literals, interpreted and written (abusing
_) disjunctively as 1 _ ¨ ¨ ¨ _ . We write  ff  for ␣p « q. We say a variable is free in a
clause  if it is not bound inside any subterm of a literal in .</p>
    </sec>
    <sec id="sec-3">
      <title>3. The Native Approach</title>
      <p>
        Some support for Booleans was already present in Zipperposition before we started extending the
calculus of Bentkamp et al. In this section, we start by describing the internals of Zipperposition
responsible for reasoning with Booleans. We continue by describing 15 rules that we have
implemented. For ease of presentation we divide them in three categories. We assume some
familiarity with the superposition calculus [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ] and adopt the notation used by Schulz [
        <xref ref-type="bibr" rid="ref23">23</xref>
        ].
      </p>
      <sec id="sec-3-1">
        <title>3.1. Support for Booleans in Zipperposition</title>
        <p>
          Zipperposition is an open source1 prover written in OCaml. From its inception, it was designed
as a prover that supports easy extension of its base superposition calculus to various theories,
including arithmetic, induction and limited support for higher-order logic [
          <xref ref-type="bibr" rid="ref18">18</xref>
          ].
        </p>
        <p>Zipperposition internally stores applications in flattened, spine notation. It also exploits
associativity of ^ and _ to flatten nested applications of these symbols. Thus, the terms
p ^ pq ^ rq and pp ^ qq ^ r are represented as ^ p q r. The prover’s support for  -terms is used
to represent quantified nested Booleans: formulas @.  and D.  are represented as @ p.  q
and D p.  q. After clausification of the input problem, no nested Booleans will be modified or
renamed using fresh predicate symbols.</p>
        <p>
          The version of Zipperposition preceding our modifications distinguished between equational
and non-equational literals. Following E [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ], we modified Zipperposition to represent all literals
equationally: a non-equational literal  is stored as  « J, whereas ␣ is stored as  ff J.
Equations of the form  « K and  ff K are transformed into  ff J and  « J, respectively.
        </p>
      </sec>
      <sec id="sec-3-2">
        <title>3.2. Core Rules</title>
        <p>
          Kotelnikov et al. [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ], to the best of our knowledge, pioneered the approach of extending a
ifrst-order superposition prover to support nested Booleans. They call efects of including the
axiom @p : q.  « J _  « K a “recipe for disaster”. To combat the explosive behavior of
the axiom, they imposed the following two requirements to the simplification order ą (which
is a parameter to the superposition calculus): J ą K and J and K are two smallest ground
terms with respect to ą. If these two requirements are met, there is no self-paramodulation
of the clause and only paramodulation possible is from literal  « J of the mentioned axiom
into a Boolean subterm of another clause. Finally, Kotelnikov et al. replace the axiom with the
inference rule FOOL Paramodulation (FP):
where  is a nested non-variable Boolean subterm of clause , diferent from J and K. In
addition, they translate the initial problem containing nested Booleans to first-order logic
without interpreted Booleans; this translation introduces proxy symbols for J and K, and proxy
type for .
        </p>
        <p>r s
rJs _  « K</p>
        <p>FP</p>
        <p>We created two rules that are syntactically similar to FP but are adapted for higher-order
logic with one key distinction – we do not perform any translation:
The double line in the definition of CasesSimp denotes that the premise is replaced by conclusions;
obviously, the prover that uses the rules should not include them both at the same time. In
addition, since literals  « K are represented as negative equations  ff J, which cannot be
used to paramodulate from, we change the first requirement on the order to K ą J.</p>
        <p>These two rules hoist Boolean subterms  to the literal level; therefore, some results of Cases
and CasesSimp will have literals of the form  « J (or  ff J) where  is not an atom. This
introduces the need for the rule called eager clausification ( EC):</p>
        <p>1 ¨ ¨ ¨</p>
        <p>EC
We say that a clause is standard if all of its literals are of the form  «. , where  and  are not
Booleans or of the form  «. J, where the head of  is not a logical symbol and «. denotes «
or ff. The rule EC is applicable if clause  “ 1 _ ¨ ¨ ¨ _  is not standard. The resulting
clauses  represent the result of clausification of the formula @. 1 _ ¨ ¨ ¨ _  where 
are all free variables of .</p>
        <p>An advantage of leaving nested Booleans unmodified is that the prover will be able to prove
some problems containing them without using the prolific rules described above. For example,
given two clauses f pp  ñ p q « a and f pp a ñ p bq ff a, the empty clause can easily be
derived without the above rules. A disadvantage of this approach is that the proving process
will periodically be interrupted by expensive calls to the clausification algorithm.</p>
        <p>Naive application of Cases and CasesSimp rules can result in many redundant clauses.
Consider a clause  “ p pp pp pp aqqq « J where p :  Ñ , a : . Then, the clause
 “ a « J _ p K « J can be derived from  in eight ways using the rules, depending
on which nested Boolean subterm was chosen for the inference. In general, if a clause has
a subterm occurrence of the form p a, where both p and a have result type , the clause
a « J _ p K « J can be derived in 2´1 ways. To combat these issues we implemented
pragmatic restrictions of the rule: only the leftmost outermost (or innermost) eligible subterm
will be considered. With this modification  can be derived in only one way. Furthermore,
some intermediate conclusions of the rules will not be derived, pruning the search space.</p>
        <p>
          The clausification algorithm by Nonnengart and Weidenbach [
          <xref ref-type="bibr" rid="ref24">24</xref>
          ] aggressively simplifies the
input problem using well-known Boolean equivalences before clausifying it. For example, the
formula p ^ J will be replaced by p. To simplify nested Booleans we implemented the rule
where  ÝÑ  P  runs over fixed set of rewrite rules , and  is any substitution. In the
current implementation of Zipperposition,  consists of the rules described by Nonnengart
and Weidenbach [24, Section 3]. This set contains the rules describing how each logical symbol
behaves when either of its argument is J or K: for example, it includes J ñ  ÝÑ  and
 ñ J ÝÑ J. Leo-III implements a similar rule, called simp [25, Section 4.2.1.].
        </p>
        <p>Our decision to represent negative atoms as negative equations was motivated by the need
to alter Zipperposition’s earlier behavior as little as possible. Namely, negative atoms were not
used as literals that can be used to paramodulate from, and as such added to the laziness of the
superposition calculus. However, it might be useful to consider unit clauses of the form  ff J
as  « K to strengthen demodulation. To that end, we have introduced the following rule:
 ff J
 ff J</p>
      </sec>
      <sec id="sec-3-3">
        <title>3.3. Higher-Order Considerations</title>
        <p>
          To achieve refutational completeness of higher-order resolution and similar calculi it is necessary
to instantiate variables with result type , predicate variables, with arbitrary formulas [
          <xref ref-type="bibr" rid="ref16 ref25">25, 16</xref>
          ].
Fortunately, we can approximate the formulas using a complete set of logical symbols (e.g., ␣,
@, and ^). Since such an approximation is not only necessary for completeness of some calculi,
but very useful in practice, we implemented the primitive instantiation (PI) rule:
.
 _  .   «
        </p>
        <p>.
p _  .   « qt ÞÑ  u</p>
        <p>
          PI
where  is a free variable of the type  1 Ñ ¨ ¨ ¨ Ñ   Ñ . Choosing a diferent  that
instantiates , we can balance between explosiveness of approximating a complete set of logical
symbols and incompleteness of pragmatic approaches. We borrow the notion of imitation
from higher-order unification jargon [
          <xref ref-type="bibr" rid="ref21">21</xref>
          ]: we say that the term  . f p1 q ¨ ¨ ¨ p q is an
imitation of constant f :  1 Ñ ¨ ¨ ¨ Ñ   Ñ  for some variable  of type  1 Ñ ¨ ¨ ¨ Ñ   Ñ  .
Variables  are fresh free variables, where each  has the type  1 Ñ ¨ ¨ ¨ Ñ   Ñ  ; variable
 is of type  .
        </p>
        <p>Rule PI was already implemented by Simon Cruanes in Zipperposition, before we started our
modifications. The rule has diferent modes that generate sets of possible terms  for  :  1 Ñ
¨ ¨ ¨ Ñ   Ñ : Full, Pragmatic, and Imit‹ where ‹ is an element of a set of logical constants
 “ t^, _, «x y, ␣, @, Du. Mode Full contains imitations (for ) of all elements of  . Mode
Pragmatic contains imitations of ␣, J and K; if there exist indices ,  such that  ‰  and   “   ,
it contains  .  «  ; if there exist indices ,  such that  ‰ , and   “   “ , then it
contains  .  ^ and  .  _ ; if for some ,   “ , then it contains  . . Mode Imit‹
contains imitations of J, K and ‹ (except for Imit@D which contains imitations of both @ and D).</p>
        <p>While experimenting with our implementation we have noticed some proof patterns that
led us to come up with the following modifications. First, it often sufices to perform PI only on
initial clauses – which is why we allow the rule to be applied only to the clauses created using
at most  generating inferences. Second, if the rule was used in the proof, its premise is usually
only used as part of that inference – which is why we implemented a version of PI that removes
the clause after all possible PI inferences have been performed. We observed that the mode Imit‹
is useful in practice since often only a single approximation of a logical symbol is necessary.</p>
        <p>
          Eficiently treating axiom of choice is notoriously dificult for higher-order provers. Andrews
Ñ q. pDp :  q.  q ñ  p q, where  : Π. p

Ñ q Ñ 
denotes the choice operator [
          <xref ref-type="bibr" rid="ref16">16</xref>
          ]. After clausification, this axiom becomes   ff J _  p q « J
Since term   matches any Boolean term in the proof state, this axiom is very explosive.
.
        </p>
        <p>
          Therefore, Leo-III [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ] deals with the choice operator on the calculus level. Namely, whenever a
clause  “   ff J _  pf q « J is chosen for processing,  is removed from the proof state
and f is added to set of choice functions CF (which initially contains just ). Later, elements
of CF will be used to heuristically instantiate the axiom of choice. We reused the method of
recognizing choice functions, but generalized the rule for creating the instance of the axiom
(assuming  P CF ):
        </p>
        <p>r  s
 p q ff J _  p p p.  p qqqq « J</p>
        <sec id="sec-3-3-1">
          <title>Choice</title>
          <p>Let  be the conclusion of Choice. The fresh variable  in  acts as arbitrary context around
, the chosen instantiation for  from axiom of choice; the variable  can later be replaced by
imitation of logical symbols to create more complex instantiations of the choice axiom. To
generate useful instances early, we create t ÞÑ .  u and t ÞÑ .
␣u. Then, based on
Zipperposition parameters,  will either be deleted or kept. Note that  will not subsume its
instances, since the matching algorithm of Zipperposition is too weak for this.</p>
          <p>
            Most provers natively support extensionality reasoning: Bhayat et al. [
            <xref ref-type="bibr" rid="ref26">26</xref>
            ] modify first-order
unification to return unification constraints consisting of pairs of terms of functional type,
whereas Steen relies on the unification rules of Leo-III’s calculus [ 25, Section 4.3.3.] to deal with
extensionality. Bentkamp et al [
            <xref ref-type="bibr" rid="ref10">10</xref>
            ] altered core generating inference rules of the superposition
calculus to support extensionality. Instead of requiring that terms involved in the inference
are unifiable, it is required that they can be decomposed into
disagreement pairs such that at
least one of the disagreement pairs is of functional type. Disagreement pairs of terms  and
 of the same type are defined inductively using function
dp: dpp, q “ H if  and  are equal;
dpp ,  q “ Ť
          </p>
          <p>“1 dpp, q. Then the extensionality rules are stated as follows:
dpp ,  q “ tp ,  qu if  and  are diferent heads; dpp. , . 
q “ tp. , . 
qu;
 «  _</p>
          <p>r1s «.  _ 
p1 ff 11 _ ¨ ¨ ¨ _  ff 1 _ rs «.  _  _ q</p>
          <p>ff 1 _ 
p1 ff 11 _ ¨ ¨ ¨ _  ff 1 ¨ ¨ ¨ _ q</p>
        </sec>
        <sec id="sec-3-3-2">
          <title>ExtER</title>
          <p>«  _ 1 «  _ 
p1 ff 11 _ ¨ ¨ ¨ _  ff 1 _  ff  _ 1 «  _ q</p>
        </sec>
        <sec id="sec-3-3-3">
          <title>ExtSup</title>
        </sec>
        <sec id="sec-3-3-4">
          <title>ExtEF</title>
          <p>
            Rules ExtSup, ExtER, and ExtEF are extensional versions of superposition, equality resolution
and equality factoring [
            <xref ref-type="bibr" rid="ref23">23</xref>
            ]. The union of these three rules is denoted by Ext. In each rule, 
is a most general unifier of the types of  and 1, and dpp,  1 q “ tp1, 11q, . . . , p, 1qu. All
side conditions for extensional rules are the same as for the standard rules, except that condition
that  and 1 are unifiable is replaced by the condition that at least one  is of functional type
and that  ą 0. This rule is easily extended to support Boolean extensionality by requiring that
at least one  is of functional or type , and adding the condition “dpp, q “ tp, qu if  and
 are diferent formulas” to the definition of dp.
          </p>
          <p>Consider the clause f p␣p _ ␣qq ff f p␣pp ^ qqq. This problem is obviously unsatisfiable,
since arguments of f on diferent sides of the disequation are extensionally equal; however,
without Ext rules Zipperposition will rely on Cases(Simp) and EC rules to derive the empty
clause. Rule ExtER will generate  “ ␣p _ ␣q ff ␣pp ^ qq. Then,  will get clausified using
EC, efectively reducing the problem to ␣p␣p _ ␣q ô ␣pp ^ qqq, which is first-order.</p>
          <p>
            Zipperposition restricts ExtSup by requiring that  and 1 are not of function or Boolean
types. If the terms are of function type, our experience is that better treatment of function
extensionality is to apply fresh free variables (or Skolem terms, depending on the sign [
            <xref ref-type="bibr" rid="ref10">10</xref>
            ])
to both sides of a (dis)equation to reduce it to a first-order literal; Boolean extensionality is
usually better supported by applying EC on the top-level Boolean term. Thus, for the following
discussion we can assume  and 1 are not  -abstractions or formulas. Then, ExtSup is applicable
if  and 1 have the same head, and a functional or Boolean subterm. To eficiently retrieve such
terms, we added an index that maps symbols to positions in clauses where they appear as a
head of a term that has a functional or Boolean subterm. This index will be empty for first-order
problems, incurring no overhead if extensionality reasoning is not needed. Furthermore, we
do not apply Ext rules if all disagreement pairs have at least one side whose head is a variable;
those will be dealt with more eficiently using standard, non-extensional, versions of the rules.
We also eagerly resolve literals  ff 1 using at most one unifier returned by terminating,
pragmatic variant of unification algorithm by Vukmirović et al. [
            <xref ref-type="bibr" rid="ref21">21</xref>
            ].
          </p>
          <p>
            Expressiveness of higher-order logic allows users to define equality using a single axiom,
called Leibniz equality [
            <xref ref-type="bibr" rid="ref16">16</xref>
            ]: @p :  qp :  q. p@p :  Ñ q.   ñ  q ñ  « . Leibniz
equality often appears in TPTP problems. Since modern provers have the native support for
equality, it is usually beneficial to recognize and replace occurrences of Leibniz equality.
          </p>
          <p>Before we began our modifications, Zipperposition had a powerful rule that recognizes clauses
that contain variations of Leibniz equality and instantiates them with native equality. This rule
was designed by Simon Cruanes, and to the best of our knowledge, it has not been documented
so far. With his permission we describe this rule as follows:
 1 « J _ ¨ ¨ ¨ _   « J _  1 ff J _ ¨ ¨ ¨ _   ff J _ 

p 1 « J _ ¨ ¨ ¨ _   « J _ q</p>
        </sec>
        <sec id="sec-3-3-5">
          <title>ElimPredVar</title>
          <p>where  is a free variable,  does not occur in any  or , or in , and  is defined as
t ÞÑ  . Ž“1pŹ“1  « qu.</p>
          <p>To better understand how this rule removes variable-headed negative literals, consider the
clause  “  a1 a2 « J _  b1 b2 ff J _  c1 c2 ff J. Since all side conditions are fulfilled, the
rule ElimPredVar will generate  “ t ÞÑ . p « b1 ^  « b2q _ p « c1 ^  « c2qu. After
applying  to  and subsequent  -reduction, negative literal  b1 b2 ff J will reduce to pb1 «
b1 ^ b2 « b2q _ pb1 « c1 ^ b2 « c2q ff J, which is equivalent to K. Thus, we can remove this
literal and all negative literals of the form   ff J from  and apply  to the remaining ones.</p>
          <p>The previous rule removes all variables occurring in disequations in one attempt. We
implemented two rules that behave more lazily, inspired by the ones present in Leo-III and Satallax:
  « J _   ff J _ 
p «  _ q</p>
          <p>ElimLeibniz`
  ff J _   « J _ 
p «  _ q 1</p>
          <p>ElimLeibniz´
where  is a free variable,  does not occur in ,  “ t ÞÑ  .  « u and  1 “ t ÞÑ
 . ␣p « qu. This rule difers from ElimPredVar in three ways. First, it acts on occurrences
of variables in both positive and negative literals. Second, due to its simplicity, it usually does
not require EC as the following step. Third, it imposes much weaker conditions on . However,
removing all negative variables in one step might improve performance. Coming back to example
of the clause  “  a1 a2 « J _  b1 b2 ff J _  c1 c2 ff J, we can apply ElimLeibniz`
using the substitution  “ t.  « b1u to obtain the clause 1 “ a1 « b1 _ a1 ff c1.</p>
        </sec>
      </sec>
      <sec id="sec-3-4">
        <title>3.4. Additional Rules</title>
        <p>
          Zipperposition’s unification algorithm [
          <xref ref-type="bibr" rid="ref21">21</xref>
          ] uses flattened representation of terms with logical
operators ^ and _ for heads to unify terms that are not unifiable modulo  -equivalence,
but are unifiable modulo associativity and commutativity of ^ and _. Let ˛ denote either ^
or _. When the unification algorithm is given two terms ˛  and ˛ , where neither of  nor
 contain duplicates, it performs the following steps: First, it removes all terms that appear
in both  and  from the two argument tuples. Next, the remaining terms are sorted first by
their head term and then by their weight. Finally, the sorted lists are unified pairwise. As an
example, consider the problem of unifying the pair `^ pp aq pq pf aqq, ^ pq pf aqq p pf pf aqqq˘
where  is a free variable. If the arguments of ^ are simply sorted as described above, we
would unsuccessfully try to unify p a with q pf aq. However, by removing term q pf aq from the
argument lists, we will be left with the problem pp a,  pf pf aqqq which has a unifier.
        </p>
        <p>
          The winner of THF division of CASC-27 [
          <xref ref-type="bibr" rid="ref27">27</xref>
          ], Satallax [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ], has one crucial advantage over
Zipperposition: it is based on higher-order tableaux, and as such it does not require formulas
to be converted to clauses. The advantage of tableaux is that once it instantiates a variable with
a term, this instantiation naturally propagates through the whole formula. In Zipperposition,
which is based on higher-order superposition, the original formula is clausified and instantiating
a variable in a clause  does not automatically instantiate it in all clauses that are results of
clausification of the same formula as . To mitigate this issue, we have created extensions of
equality resolution and equality factoring that take Boolean extensionality into account:
 « 1 _
        </p>
        <sec id="sec-3-4-1">
          <title>BoolER</title>
          <p>ff J _ 1 « J _ 
p  « ␣1 _ q</p>
          <p>BoolEF´`
  « J _ 1 ff J _</p>
          <p>p  « ␣1 _ q
  ff J _ 1 ff J _ 
p  « 1 _ q</p>
          <p>BoolEF`´
BoolEF´´
All side conditions except for the ones concerning the unifiability of terms are as in the original
equality resolution and equality factoring rules. In rule BoolER,  unifies  and ␣1. In the
`´ and ´` versions of BoolEF,  unifies   and ␣1, and in the remaining version it unifies
  and 1. Intuitively, these rules bring Boolean (dis)equations in the appropriate form for
application of the corresponding base rules. It sufices to consider literals of the form  « 1
for BoolER since Zipperposition rewrites  ô  « J and ␣p ô q ff J to  «  (and does
analogous rewriting into  ff ).</p>
          <p>
            Another approach to mitigate harmful efects of eager clausification is to delay it as long
as possible. Following the approach by Ganzinger and Stuber [
            <xref ref-type="bibr" rid="ref28">28</xref>
            ], we represent every input
formula  as a unit clause  « J and use the following lazy clausification ( LC) rules:
p ^ q « J _ 
 « J _   « J _
          </p>
          <p>LC^</p>
          <p>p _ q « J _ 
 « J _  « J _</p>
          <p>LC_</p>
          <p>p ñ q « J _ 
 ff J _  « J _</p>
          <p>LCñ
p␣ q « J _ 
 ff J _</p>
          <p>LC␣
 t ÞÑ u _ 
 «  _</p>
          <p>LCD</p>
          <p>
            LC«
 ff J _  « J _   « J _  ff J _ 
The rules described above are as given by Ganzinger and Stuber (adapted to our setting), with
the omission of rules for negative literals ( ff J), which are easy to derive and which can be
found in their work [
            <xref ref-type="bibr" rid="ref28">28</xref>
            ]. In LC« we require both  and  to be formulas and at least one of
them not to be J. In LC@,  is a fresh variable, and in LCD, sk is a fresh symbol and  and 
are all the type and term variables occurring freely in D.  .
          </p>
          <p>Naive application of the LC rules can result in exponential blowup in problem size. To avoid
this, we rename formulas that have repeated occurrences. We keep the count of all non-atomic
.
formulas occurring as either side of a literal. Before applying the LC rule on a clause  « J _ ,
we check whether the number of  ’s occurrences exceeds the threshold . If it does, based on
.
the polarity of the literal  « J, we add the clause p  ff J _  « J (if the literal is positive)
or p  « J _  ff J (if the literal is negative), where  are all free variables of  and p is
. .
a fresh symbol. Then, we replace the clause  « J _  by p  « J _ .</p>
          <p>Before the number of occurrences of  is checked, we first check (using a fast, incomplete
matching algorithm) if there is a formula , for which definition was already introduced, such
that  “  , for some substitution  . This check can have three outcomes. First, if the definition
q  is already introduced for  with the polarity matching that of  «. J, then  is replaced
by pq q . Second, if the definition was introduced, but with diferent polarity, we create the
clause defining  with the missing polarity, and replace  with pq q . Last, if the there is no
renamed formula  generalizing  , then we perform the previously described check.</p>
          <p>
            In addition to reusing names for formula definitions, we reuse the Skolem symbols introduced
by the LCD rule. When LCD is applied to  “ D.  1 we check if there is a Skolem skx y
introduced for a formula  “ D. 1, such that  “  . If so, the symbol sk is reused and D.  1
is replaced by  1t ÞÑ pskx yq u. Renaming and name reusing techniques are inspired by
the VCNF algorithm described by Reger et al. [
            <xref ref-type="bibr" rid="ref29">29</xref>
            ].
          </p>
          <p>Rules Cases and CasesSimp deal with Boolean terms, but we need to rely on extensionality
reasoning to deal with  -abstractions whose body has type . Using the observation that the
formula @.  implies that  .  is extensionally equal to  . J (and similarly, if @. ␣ ,
then  .  «  . Kq, we designed the following rule (where all free variables of  are 
and variables occurring freely in ):</p>
          <p>r .  s
p@. ␣ q ff J _ r . Ks</p>
        </sec>
        <sec id="sec-3-4-2">
          <title>Interpret</title>
        </sec>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>4. Alternative Approaches</title>
      <p>An alternative to heavy modifications of the prover needed to support the rules described above
is to treat Booleans as yet another theory. Since the theory of Booleans is finitely axiomatizable,
simply stating those axioms instead of creating special rules might seem appealing. Another
approach is to preprocess nested Booleans by hoisting them to the top level.</p>
      <sec id="sec-4-1">
        <title>4.1. Axiomatization</title>
        <p>
          A simple axiomatization of the theory of Booleans is given by Bentkamp et al. [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ]. Following
their approach, we introduce the proxy type bool , which corresponds to , to the signature.
We define proxy symbols t, f, not, and, or, impl, equiv, forall, exists, choice, and eq which correspond
to the homologous logical constants from Section 2. In their type declarations  is replaced by
bool .
        </p>
        <p>
          To make this paper self-contained we include the axioms from Bentkamp et al. [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ]. Definitions
of symbols are computational in nature: symbols are characterized by their behavior on t and
f. This also reduces interferences between diferent axioms. Axioms are listed as follows:
t ff f
 « t _  « f
not t « f
not f « t
and t  « 
and f  « f
or t  « t
or f  « 
impl t  « 
impl f  « t
 ff  _ eqx y   « t
 «  _ eqx y   « f
equiv   « and pimpl  q pimpl  q
        </p>
        <p>forallx yp. tq « t
 « p. tq _ forallx y  « f</p>
        <p>existsx y  «
not pforallx y p. not p qqq
  « f _  pchoicex yq « t</p>
      </sec>
      <sec id="sec-4-2">
        <title>4.2. Preprocessing Booleans</title>
        <p>
          Kotelnikov et al. extended VCNF, Vampire’s algorithm for clausification, to support nested
Booleans [
          <xref ref-type="bibr" rid="ref13">13</xref>
          ]. Vukmirović et al. extended the clausification algorithm of Ehoh, the lambda-free
higher-order version of E, to support nested Booleans inspired by VCNF extension [11, Section
8]. Zipperposition and Ehoh share the same clausification algorithm, enabling us to reuse the
extension with one notable diference: unlike in Ehoh, not all nested Booleans diferent from
variables, J and K will be removed. Namely, Booleans that are below  -abstraction and contain
 -bound variables will not be preprocessed. They cannot be easily hoisted to the level of an atom
in which they appear, since this process might leak any variables bound in the context in which
the nested Boolean appears. Similar preprocessing techniques are used in other higher-order
provers [
          <xref ref-type="bibr" rid="ref30">30</xref>
          ].
        </p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>5. Examples</title>
      <p>The TPTP library contains thousands of higher-order benchmarks, many of them hand-crafted
to point out subtle interferences of functional and Boolean properties of higher order logic. In
this section we discuss some problems from the TPTP library that illustrate the advantages and
disadvantages of our approach.</p>
      <p>In the last five instances of the CASC theorem proving competition, the core calculus of the
best performing higher-order prover was tableaux – a striking contrast from first-order part
of the competition dominated by superposition-based provers. TPTP problem SET557^1 (a
statement of Cantor’s theorem) might shed some light on why tableaux-based provers excel on
higher-order problems. This problem conjectures that there is no surjection from a set to its
power set:</p>
      <p>
        ␣pDp :  Ñ  Ñ q. @p :  Ñ q. Dp :  q.   « q
After negating the conjecture and clausification this problem becomes sk1 psk2 q «  where sk1
and sk2 are Skolem symbols. Then, we can use ArgCong rule [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] which applies fresh variable
 to both sides of the equation, yielding clause  “ sk1 psk2 q  «  . Most
superpositionor paramodulation-based higher-order theorem provers (such as Leo-III, Vampire and
Zipperposition) will split this clause into two clauses 1 “ sk1 psk2 q  ff J _   « J and
2 “ sk1 psk2 q  « J _   ff J. This clausification step makes the problem considerably
harder. Namely, the clause  instantiated with the substitution t ÞÑ . ␣psk1  q,  ÞÑ
sk2 p. ␣psk1  qqu yields the empty clause. However, if the original clause is split into two
as described above, Zipperposition will rely on PI rule to instantiate  with imitation of ␣ and
on equality factoring to further instantiate this approximation. These desired inferences need
to be applied on both new clauses and represent only a fraction of inferences that can be done
with 1 and 2, reducing the chance of successful proof attempt. Rule BoolER imitates the
behavior of tableaux prover: it essentially rewrites the clause  into ␣psk1 psk2 q q ff  
which makes finding the necessary substitution easy and does not require a clausification step.
      </p>
      <p>Combining rule (Bool)ER with lazy clausification is very fruitful as the problem SYO033^1
illustrates. This problem also contains the single conjecture</p>
      <p>Dp : p Ñ q Ñ q. @p :  Ñ q.p  ô p@p :  q.  qq
The problem is easily solved if we instantiate variable  with the constant @. Moreover, the
prover does not have to blindly guess this instantiation for , but can obtain it by unifying
  with @  (which is the  -short form of @p :  q.  ). However, when the problem is
clausified, all quantifiers are removed. Then, Zipperposition only finds the proof if appropriate
instantiation mode of PI is used, and if both clauses resulting from clausifying the negated
conjecture are appropriately instantiated. In contrast, lazy clausification will derive the clause
 psk q ff @ psk q from the negated conjecture in three steps. Then, equality resolution results
in an empty clause, swiftly finishing the proof without any explosive inferences. This efect
is even more pronounced on problems SYO287^5 and SYO288^5, in which critical proof step
is instantiation of a variable with imitation of _ and ^. In configurations that do not use lazy
clausification and BoolER, Zipperposition times out in any reasonable time limit; with those
two options it solves mentioned problems in less than 100 ms.</p>
      <p>In some cases, it is better to preprocess the problem. For example, TPTP problem SYO500^1.005
contains many nested Boolean terms:</p>
      <p>f0 pf1 pf1 pf1 pf2 pf3 pf3 pf3 pf4 aqqqqqqq « f0 pf0 pf0 pf1 pf2 pf2 pf2 pf3 pf4 pf4 pf4 aqqqqqqqqqqq
In this problem, all functions f are of type  Ñ , and constant a is of type . FOOL unfolding
of nested Boolean terms will result in exponential blowup in the problem size. However,
superposition-based theorem provers are well-equipped for this issue: their CNF algorithms
use smart simplifications and formula renaming to mitigate these efects. Moreover, when the
problem is preprocessed, the prover is aware of the problem size before the proving process
starts and can adjust its heuristics properly. E, Zipperposition and Vampire, instructed to
perform FOOL unfolding, solve the problem swiftly, using their default modes. However, if
problem is not preprocessed, Zipperposition struggles to prove it using Cases(Simp) and due to
the large number of (redundant) clauses it creates, succeeds only if specific heuristic choices are
made.</p>
    </sec>
    <sec id="sec-6">
      <title>6. Evaluation</title>
      <p>
        We performed extensive evaluation to determine usefulness of our approach. As our benchmark
set, we used all 2606 monomorphic theorems from the TPTP library, given in THF format.
All of the experiments were performed on StarExec [
        <xref ref-type="bibr" rid="ref31">31</xref>
        ] servers with Intel Xeon E5-2609 0
CPUs clocked at 2.40 GHz. The evaluation is separated in two parts that answer diferent
questions: How useful are the new rules? How does our approach compare with state-of-the-art
higher-order provers?
      </p>
      <sec id="sec-6-1">
        <title>6.1. Evaluation of the Rules</title>
        <p>
          For this part of the evaluation, we fixed a single well-performing Zipperposition configuration
called base (b). Since we are testing a single configuration, we used the CPU time limit of 15 s
– roughly the time a single configuration is given in a portfolio mode. Configuration b uses the
pragmatic variant pv21121 of the unification algorithm given by Vukmirović et al. [
          <xref ref-type="bibr" rid="ref21">21</xref>
          ]. It enables
BoolSimp rule, EC rule, PI rule in Pragmatic mode with  “ 2, ElimLeibniz and ElimPredVar
rules, BoolER rule, and BoolEF rules. To evaluate the usefulness of all rules we described above,
we enable, disable or change the parameters of a single rule, while keeping all other parameters
of  intact. In figures that contain suficiently diferent configurations, cells are of the form pq
where  is the total number of proved problems by a particular configuration and  is the number
of unique problems that a given configuration solved, compared to the other configurations in the
same figure. Intersections of rows and columns denote corresponding combination of parameters.
Result for the base configuration is written in cursive; the best result is written in bold.
        </p>
        <p>First, we tested diferent parameters of Cases and CasesSimp rules. In Figure 1 we report
the results. The columns correspond to three possible options to choose subterm on which the
inference is performed: a stands for any eligible subterm, lo and li stands for leftmost outermost
and leftmost innermost subterms, respectively. The rows correspond to two diferent rules: b is
the base configuration, which uses CasesSimp, and bc swaps this rule for Cases. Although the
margin is slim, the results show it is usually preferable to select leftmost-outermost subterm.
b
bc</p>
        <p>a</p>
        <p>Second, we evaluated all the modes of PI rule with 3 values for parameter : 1, 2, and 8 (Figure
2). The columns denote, from left to right: disabling the PI rule, Pragmatic mode, Full mode,
and Imit‹ modes with appropriate logical symbols. The rows denote diferent values of . The
results show that diferent values for  have a modest efect on success rate. The raw data reveal
that when we focus our attention to configurations with  “ 2, mode Full can solve 10 problems
no other mode (including disabling PI rule) can. Modes Imit^ and Pragmatic solve 2 problems,
whereas Imit_ solves one problem uniquely. This result suggests that, even though this is not
evident from Figure 2, sets of problems solved solved by diferent modes somewhat difer.</p>
        <p>Figure 3 gives results of evaluating rules that treat Leibniz equality on the calculus level: EL
stands for ElimLeibniz, whereas EPV denotes ElimPredVar; signs ´ and ` denote that rule is
removed from or added to configuration b, respectively. Disabling both rules severely lowers
the success rate. The results suggest that including ElimLeibniz is beneficial to performance.</p>
        <p>Similarly, Figure 4 discusses merits of including (`) or excluding (´) BoolER (BER) and
BoolEF (BEF) rules. Our expectations were that inclusion of those two rules would make bigger
impact on success rate. It turned out that, in practice, most of the efects of these rules could be
achieved using a combination of the PI rule and basic superposition calculus rules.</p>
        <p>Combining these two rules with lazy clausification is more useful: when the rule EC is replaced
by the rule LC, the success rate increases (compared to 1646 problems solved by ) to 1660
problems. We also discovered that reasoning with choice is useful: when rule Choice is enabled,
the success rate increases to 1653. We determined that including or excluding the conclusion 
of Choice, after it is simplified, makes no diference. Counterintuitively, disabling BoolSimp
rule results in 1640 problems, which is only 6 problems short of configuration . Disabling Ext
and Interpret- rules results in solving 25 and 31 problems less, respectively. Raw data show
pure
coop</p>
        <p>CVC4
that in total, using configurations from Figure 1 to Figure 4, 1682 problems can be solved.</p>
        <p>Last, we compare our approach to alternatives. Axiomatizing Booleans brings Zipperposition
down to a grinding halt: only 1106 problems can be solved using this mode. On the other hand,
preprocessing is fairly competitive: it solves only 8 problems less than the  configuration.</p>
      </sec>
      <sec id="sec-6-2">
        <title>6.2. Comparison with Other Higher-Order Provers</title>
        <p>
          We compared Zipperposition with all higher-order theorem provers that took part in THF
division of CASC-27[
          <xref ref-type="bibr" rid="ref27">27</xref>
          ]: CVC4 1.8 prerelease [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ], Leo-III 1.4 [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ], Satallax 3.4 [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ], and
VampireTHF 4.4 [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ]. In this part of the evaluation, Zipperposition is ran in portfolio mode that runs
configurations in diferent time slices. We set the CPU time limit to 180 s, the time allotted to
each prover at CASC-27.
        </p>
        <p>
          Leo-III and Satallax are cooperative theorem provers – they periodically invoke first-order
provers to finish the proof attempt. Leo-III uses CVC4, E and iProver [
          <xref ref-type="bibr" rid="ref32">32</xref>
          ] as backends, while
Satallax uses Ehoh [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ] as backend. Zipperposition can use Ehoh as backend as well. To test
efectiveness of each calculus, we run the cooperative provers in two versions: pure, which
disables backends, and coop which uses all supported backends.
        </p>
        <p>In both pure and cooperative mode, Satallax comes out as the winner. Zipperposition comes
in close second, showing that our approach is a promising basis for further extensions.
LeoIII uses SMT solver CVC4, which features native support for Booleans, as a backend. It is
possible that the use of CVC4 is one of the reasons for massive improvement in success rate of
cooperative configuration of Leo-III, compared with the pure version. Therefore, we conjecture
that including support for SMT backends in Zipperposition might be beneficial.</p>
      </sec>
    </sec>
    <sec id="sec-7">
      <title>7. Discussion and Related Work</title>
      <p>
        Our work is primarily motivated by the goal of closing the gap between higher-order “hammer”
or software verifier frontends and first-order backends. Considerable amount of research efort
has gone into making the translations of higher-order logic as eficient as possible. Descriptions
of hammers like HOLyHammer [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] and Sledgehammer [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] for Isabelle contain details of these
translations. Software verifiers Boogie [
        <xref ref-type="bibr" rid="ref33">33</xref>
        ] and Why3 [
        <xref ref-type="bibr" rid="ref34">34</xref>
        ] use similar translations.
      </p>
      <p>
        Established higher-order provers like Leo-III and Satallax perform very well on TPTP benchmarks;
however, recent evaluations show that on Sledgehammer problems they are outperformed by
translations to first-order logic [
        <xref ref-type="bibr" rid="ref10 ref11 ref9">10, 11, 9</xref>
        ]. Those two provers are built from the ground up as
higher-order provers – treatment of exclusively higher-order issues such as extensionality or
choice is built into them usually using explosive rules. Those explosive rules might contribute
to their suboptimal performance on mostly first-order Sledgehammer problems.
      </p>
      <p>
        In contrast, our approach is to start with a first-order prover and gradually extend it with
higher-order features. The work performed in the context of Matryoshka project [
        <xref ref-type="bibr" rid="ref35">35</xref>
        ], in which
both authors of this paper participate, resulted in adding support for  -free higher-order logic
with Booleans to E [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] and veriT [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], and adding support for Boolean-free higher-order logic
to Zipperposition. Authors of many state-of-the-art first-order provers have implemented some
form of support for higher-order reasoning. This is true both for SMT solvers, witnessed by
the recent extension of CVC4 and veriT [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], and for superposition provers, witnessed by the
extension of Vampire [
        <xref ref-type="bibr" rid="ref36">36</xref>
        ]. All of those approaches were arguably more focused on functional
aspects of higher-order logic, such as  -binders and function extensionality, than on Boolean
aspects such as Boolean subterms and Boolean extensionality. A notable exception is work by
Kotelnikov et al. that introduced support for Boolean subterms to first-order Vampire [
        <xref ref-type="bibr" rid="ref12 ref13">12, 13</xref>
        ].
      </p>
      <p>
        The main merit of our approach is that it combines two successful complementary approaches
to support features of higher-order logic that have not been combined before in a modular
way. It is based on a higher-order superposition calculus that incurs around 1% of overhead
on first-order problems compared with classic superposition [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ]. We conjecture that it is this
eficient reasoning base on which the approach is based that contributes to its competitive
performance.
      </p>
    </sec>
    <sec id="sec-8">
      <title>8. Conclusion</title>
      <p>We presented a pragmatic approach to support Booleans in a modern automatic prover for
clausal higher-order logic. Our approach combines previous research eforts that extended
ifrst-order provers with complementary features of higher-order logic. It also proposes some
solutions for the issues that emerge with this combination. The implementation shows clear
improvement over previous techniques and competitive performance.</p>
      <p>
        What our work misses is an overview of heuristics that can be used to curb the explosion
incurred by some of the rules described in this paper. In future work, we plan to address this
issue. Similarly, unlike Bentkamp et al. [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ], we do not give any completeness guarantees for
our extension. We plan to develop a refutationally complete calculus that supports Booleans
around core rules such as Cases and LC in future work.
      </p>
      <p>Acknowledgment We are grateful to the maintainers of StarExec for letting us use their
service. We thank Alexander Bentkamp, Jasmin Blanchette and Simon Cruanes for many
stimulating discussions and all the useful advice. Alexander Bentkamp suggested the rule
BoolER. We are also thankful to Ahmed Bhayat, Predrag Janičić and the anonymous reviewers
for suggesting many improvements to this paper. We thank Evgeny Kotelnikov for patiently
explaining the details of FOOL, Alexander Steen for clarifying Leo-III’s treatment of Booleans,
and Giles Reger and Martin Suda for explaining the renaming mechanism implemented in VCNF.
Vukmirović’s research has received funding from the European Research Council (ERC) under
the European Union’s Horizon 2020 research and innovation program (grant agreement No.
713999, Matryoshka). Nummelin has received funding from the Netherlands Organization for
Scientific Research (NWO) under the Vidi program (project No. 016.Vidi.189.037, Lean Forward).</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>C.</given-names>
            <surname>Kaliszyk</surname>
          </string-name>
          ,
          <string-name>
            <surname>J. Urban,</surname>
          </string-name>
          <article-title>Hol(y)hammer: Online ATP service for HOL light</article-title>
          ,
          <source>Mathematics in Computer Science</source>
          <volume>9</volume>
          (
          <year>2015</year>
          )
          <fpage>5</fpage>
          -
          <lpage>22</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>L. C.</given-names>
            <surname>Paulson</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. C.</given-names>
            <surname>Blanchette</surname>
          </string-name>
          ,
          <article-title>Three years of experience with Sledgehammer, a practical link between automatic and interactive theorem provers</article-title>
          , in: G. Sutclife,
          <string-name>
            <given-names>S.</given-names>
            <surname>Schulz</surname>
          </string-name>
          , E. Ternovska (Eds.),
          <source>IWIL-2010</source>
          , volume
          <volume>2</volume>
          of EPiC, EasyChair,
          <year>2012</year>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>11</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>J.</given-names>
            <surname>Filliâtre</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Paskevich</surname>
          </string-name>
          , Why3
          <article-title>- where programs meet provers</article-title>
          , in: M.
          <string-name>
            <surname>Felleisen</surname>
          </string-name>
          , P. Gardner (Eds.),
          <source>Programming Languages and Systems - 22nd European Symposium on Programming, ESOP</source>
          <year>2013</year>
          ,
          <article-title>Held as Part of the European Joint Conferences on Theory and Practice of Software</article-title>
          ,
          <source>ETAPS</source>
          <year>2013</year>
          , Rome, Italy, March
          <volume>16</volume>
          -24,
          <year>2013</year>
          . Proceedings, volume
          <volume>7792</volume>
          <source>of LNCS</source>
          , Springer,
          <year>2013</year>
          , pp.
          <fpage>125</fpage>
          -
          <lpage>128</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>C. W.</given-names>
            <surname>Barrett</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C. L.</given-names>
            <surname>Conway</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Deters</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Hadarean</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Jovanovic</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>King</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Reynolds</surname>
          </string-name>
          , C. Tinelli, CVC4, in: G. Gopalakrishnan, S. Qadeer (Eds.),
          <source>CAV</source>
          <year>2011</year>
          , volume
          <volume>6806</volume>
          <source>of LNCS</source>
          , Springer,
          <year>2011</year>
          , pp.
          <fpage>171</fpage>
          -
          <lpage>177</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>S.</given-names>
            <surname>Schulz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Cruanes</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Vukmirovic</surname>
          </string-name>
          , Faster, higher,
          <source>stronger: E 2</source>
          .3, in: P. Fontaine (Ed.),
          <source>CADE</source>
          <year>2019</year>
          , volume
          <volume>11716</volume>
          <source>of LNCS</source>
          , Springer,
          <year>2019</year>
          , pp.
          <fpage>495</fpage>
          -
          <lpage>507</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <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>CAV</source>
          <year>2013</year>
          , volume
          <volume>8044</volume>
          <source>of LNCS</source>
          , Springer,
          <year>2013</year>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>35</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>J.</given-names>
            <surname>Robinson</surname>
          </string-name>
          ,
          <article-title>A note on mechanizing higher order logic</article-title>
          , in: B.
          <string-name>
            <surname>Meltzer</surname>
          </string-name>
          , D. Michie (Eds.),
          <source>Machine Intelligence</source>
          , volume
          <volume>5</volume>
          , Edinburgh University Press,
          <year>1970</year>
          , pp.
          <fpage>121</fpage>
          -
          <lpage>135</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>J.</given-names>
            <surname>Meng</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L. C.</given-names>
            <surname>Paulson</surname>
          </string-name>
          ,
          <article-title>Translating higher-order clauses to first-order clauses</article-title>
          ,
          <source>J. Autom. Reasoning</source>
          <volume>40</volume>
          (
          <year>2008</year>
          )
          <fpage>35</fpage>
          -
          <lpage>60</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>H.</given-names>
            <surname>Barbosa</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Reynolds</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D. E.</given-names>
            <surname>Ouraoui</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Tinelli</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C. W.</given-names>
            <surname>Barrett</surname>
          </string-name>
          ,
          <article-title>Extending SMT solvers to higher-order logic</article-title>
          , in: P. Fontaine (Ed.),
          <source>CADE</source>
          <year>2019</year>
          , volume
          <volume>11716</volume>
          <source>of LNCS</source>
          , Springer,
          <year>2019</year>
          , pp.
          <fpage>35</fpage>
          -
          <lpage>54</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>A.</given-names>
            <surname>Bentkamp</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Blanchette</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Tourret</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Vukmirović</surname>
          </string-name>
          , U. Waldmann, Superposition with lambdas,
          <year>2020</year>
          . Submitted to a journal, http://matryoshka.gforge.inria.fr/pubs/lamsup_ report.pdf.
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>P.</given-names>
            <surname>Vukmirovic</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J. C.</given-names>
            <surname>Blanchette</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Cruanes</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Schulz</surname>
          </string-name>
          ,
          <article-title>Extending a brainiac prover to lambda-free higher-order logic</article-title>
          ,
          <year>2020</year>
          . Submitted to a journal, http://matryoshka.gforge. inria.fr/pubs/ehoh_article.pdf.
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>E.</given-names>
            <surname>Kotelnikov</surname>
          </string-name>
          ,
          <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>A first class boolean sort in first-order theorem proving and TPTP</article-title>
          ,
          <source>CoRR abs/1505</source>
          .01682 (
          <year>2015</year>
          ). arXiv:
          <volume>1505</volume>
          .
          <fpage>01682</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>E.</given-names>
            <surname>Kotelnikov</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Kovács</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>A clausal normal form translation for FOOL</article-title>
          , in: C. Benzmüller, G. Sutclife, R. Rojas (Eds.),
          <source>GCAI</source>
          <year>2016</year>
          , volume
          <volume>41</volume>
          of EPiC Series in Computing, EasyChair,
          <year>2016</year>
          , pp.
          <fpage>53</fpage>
          -
          <lpage>71</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>A.</given-names>
            <surname>Steen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Benzmüller</surname>
          </string-name>
          ,
          <article-title>The higher-order prover Leo-III</article-title>
          , in: D.
          <string-name>
            <surname>Galmiche</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          <string-name>
            <surname>Schulz</surname>
          </string-name>
          , R. Sebastiani (Eds.),
          <source>IJCAR</source>
          <year>2018</year>
          , volume
          <volume>10900</volume>
          <source>of LNCS</source>
          , Springer,
          <year>2018</year>
          , pp.
          <fpage>108</fpage>
          -
          <lpage>116</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <surname>C. E. Brown</surname>
          </string-name>
          , Satallax:
          <article-title>An automatic higher-order prover</article-title>
          , in: B.
          <string-name>
            <surname>Gramlich</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          <string-name>
            <surname>Miller</surname>
            ,
            <given-names>U.</given-names>
          </string-name>
          Sattler (Eds.),
          <source>IJCAR</source>
          <year>2012</year>
          , volume
          <volume>7364</volume>
          <source>of LNCS</source>
          , Springer,
          <year>2012</year>
          , pp.
          <fpage>111</fpage>
          -
          <lpage>117</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <surname>P. B. Andrews</surname>
          </string-name>
          ,
          <article-title>Classical type theory</article-title>
          , in: J. A.
          <string-name>
            <surname>Robinson</surname>
            ,
            <given-names>A</given-names>
          </string-name>
          . Voronkov (Eds.),
          <source>Handbook of Automated Reasoning</source>
          , volume II,
          <article-title>Elsevier and</article-title>
          MIT Press,
          <year>2001</year>
          , pp.
          <fpage>965</fpage>
          -
          <lpage>1007</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <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</source>
          .0,
          <string-name>
            <given-names>J.</given-names>
            <surname>Autom</surname>
          </string-name>
          .
          <source>Reasoning</source>
          <volume>59</volume>
          (
          <year>2017</year>
          )
          <fpage>483</fpage>
          -
          <lpage>502</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>S.</given-names>
            <surname>Cruanes</surname>
          </string-name>
          ,
          <article-title>Extending Superposition with Integer Arithmetic, Structural Induction, and</article-title>
          <string-name>
            <surname>Beyond</surname>
          </string-name>
          ,
          <source>Ph.D. thesis</source>
          , École polytechnique,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>S.</given-names>
            <surname>Cruanes</surname>
          </string-name>
          ,
          <article-title>Superposition with structural induction</article-title>
          , in: C.
          <string-name>
            <surname>Dixon</surname>
          </string-name>
          , M. Finger (Eds.),
          <source>FroCoS</source>
          <year>2017</year>
          , volume
          <volume>10483</volume>
          <source>of LNCS</source>
          , Springer,
          <year>2017</year>
          , pp.
          <fpage>172</fpage>
          -
          <lpage>188</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>I.</given-names>
            <surname>Cervesato</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Pfenning</surname>
          </string-name>
          ,
          <article-title>A linear spine calculus</article-title>
          ,
          <source>J. Log. Comput</source>
          .
          <volume>13</volume>
          (
          <year>2003</year>
          )
          <fpage>639</fpage>
          -
          <lpage>688</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <given-names>P.</given-names>
            <surname>Vukmirovic</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Bentkamp</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Nummelin</surname>
          </string-name>
          ,
          <article-title>Eficient full higher-order unification</article-title>
          , in: Z. M.
          <string-name>
            <surname>Ariola</surname>
          </string-name>
          (Ed.),
          <source>FSCD</source>
          <year>2020</year>
          , volume
          <volume>167</volume>
          of LIPIcs,
          <source>Schloss Dagstuhl - Leibniz-Zentrum für Informatik</source>
          ,
          <year>2020</year>
          , pp.
          <volume>5</volume>
          :
          <fpage>1</fpage>
          -
          <lpage>5</lpage>
          :
          <fpage>17</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <given-names>L.</given-names>
            <surname>Bachmair</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Ganzinger</surname>
          </string-name>
          ,
          <article-title>Rewrite-based equational theorem proving with selection and simplification</article-title>
          ,
          <source>J. Log. Comput</source>
          .
          <volume>4</volume>
          (
          <year>1994</year>
          )
          <fpage>217</fpage>
          -
          <lpage>247</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          [23]
          <string-name>
            <given-names>S.</given-names>
            <surname>Schulz</surname>
          </string-name>
          ,
          <string-name>
            <surname>E -</surname>
          </string-name>
          <article-title>a brainiac theorem prover</article-title>
          ,
          <source>AI Commun</source>
          .
          <volume>15</volume>
          (
          <year>2002</year>
          )
          <fpage>111</fpage>
          -
          <lpage>126</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          [24]
          <string-name>
            <given-names>A.</given-names>
            <surname>Nonnengart</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Weidenbach</surname>
          </string-name>
          ,
          <article-title>Computing small clause normal forms</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>335</fpage>
          -
          <lpage>367</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          [25]
          <string-name>
            <given-names>A.</given-names>
            <surname>Steen</surname>
          </string-name>
          ,
          <article-title>Extensional paramodulation for higher-order logic and its efective implementation Leo-III, Ph</article-title>
          .D. thesis, Free University of Berlin, Dahlem, Germany,
          <year>2018</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          [26]
          <string-name>
            <given-names>A.</given-names>
            <surname>Bhayat</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G.</given-names>
            <surname>Reger</surname>
          </string-name>
          ,
          <article-title>A combinator-based superposition calculus for higher-order logic</article-title>
          , in: N.
          <string-name>
            <surname>Peltier</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          <string-name>
            <surname>Sofronie-Stokkermans</surname>
          </string-name>
          (Eds.),
          <source>IJCAR</source>
          <year>2020</year>
          , volume
          <volume>12166</volume>
          of Lecture Notes in Computer Science, Springer,
          <year>2020</year>
          , pp.
          <fpage>278</fpage>
          -
          <lpage>296</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          [27]
          <string-name>
            <given-names>G.</given-names>
            <surname>Sutclife</surname>
          </string-name>
          , The CADE-27
          <source>automated theorem proving system competition - CASC-27</source>
          ,
          <string-name>
            <given-names>AI</given-names>
            <surname>Commun</surname>
          </string-name>
          .
          <volume>32</volume>
          (
          <year>2019</year>
          )
          <fpage>373</fpage>
          -
          <lpage>389</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref28">
        <mixed-citation>
          [28]
          <string-name>
            <given-names>H.</given-names>
            <surname>Ganzinger</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Stuber</surname>
          </string-name>
          ,
          <article-title>Superposition with equivalence reasoning and delayed clause normal form transformation</article-title>
          ,
          <source>Inf. Comput</source>
          .
          <volume>199</volume>
          (
          <year>2005</year>
          )
          <fpage>3</fpage>
          -
          <lpage>23</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref29">
        <mixed-citation>
          [29]
          <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>New techniques in clausal form generation</article-title>
          , in: C. Benzmüller, G. Sutclife, R. Rojas (Eds.),
          <source>GCAI</source>
          <year>2016</year>
          , volume
          <volume>41</volume>
          of EPiC Series in Computing, EasyChair,
          <year>2016</year>
          , pp.
          <fpage>11</fpage>
          -
          <lpage>23</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref30">
        <mixed-citation>
          [30]
          <string-name>
            <given-names>M.</given-names>
            <surname>Wisniewski</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Steen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Kern</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Benzmüller</surname>
          </string-name>
          ,
          <article-title>Efective normalization techniques for HOL</article-title>
          , in: N.
          <string-name>
            <surname>Olivetti</surname>
            ,
            <given-names>A</given-names>
          </string-name>
          . Tiwari (Eds.),
          <source>IJCAR</source>
          <year>2016</year>
          , volume
          <volume>9706</volume>
          <source>of LNCS</source>
          , Springer,
          <year>2016</year>
          , pp.
          <fpage>362</fpage>
          -
          <lpage>370</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref31">
        <mixed-citation>
          [31]
          <string-name>
            <given-names>A.</given-names>
            <surname>Stump</surname>
          </string-name>
          , G. Sutclife, C. Tinelli,
          <article-title>StarExec: A cross-community infrastructure for logic solving</article-title>
          , in: S. Demri,
          <string-name>
            <given-names>D.</given-names>
            <surname>Kapur</surname>
          </string-name>
          ,
          <string-name>
            <surname>C.</surname>
          </string-name>
          Weidenbach (Eds.),
          <source>IJCAR</source>
          <year>2014</year>
          , volume
          <volume>8562</volume>
          <source>of LNCS</source>
          , Springer,
          <year>2014</year>
          , pp.
          <fpage>367</fpage>
          -
          <lpage>373</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref32">
        <mixed-citation>
          [32]
          <string-name>
            <given-names>K.</given-names>
            <surname>Korovin</surname>
          </string-name>
          , iprover
          <article-title>- an instantiation-based theorem prover for first-order logic (system description)</article-title>
          , in: A.
          <string-name>
            <surname>Armando</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          <string-name>
            <surname>Baumgartner</surname>
          </string-name>
          , G. Dowek (Eds.),
          <source>IJCAR</source>
          <year>2008</year>
          , volume
          <volume>5195</volume>
          <source>of LNCS</source>
          , Springer,
          <year>2008</year>
          , pp.
          <fpage>292</fpage>
          -
          <lpage>298</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref33">
        <mixed-citation>
          [33]
          <string-name>
            <surname>K. R. M. Leino</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          <string-name>
            <surname>Rümmer</surname>
          </string-name>
          ,
          <article-title>A polymorphic intermediate verification language: Design and logical encoding</article-title>
          , in: J.
          <string-name>
            <surname>Esparza</surname>
          </string-name>
          , R. Majumdar (Eds.),
          <source>TACAS</source>
          <year>2010</year>
          , volume
          <volume>6015</volume>
          <source>of LNCS</source>
          , Springer,
          <year>2010</year>
          , pp.
          <fpage>312</fpage>
          -
          <lpage>327</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref34">
        <mixed-citation>
          [34]
          <string-name>
            <given-names>F.</given-names>
            <surname>Bobot</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.-C.</given-names>
            <surname>Filliâtre</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Marché</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Paskevich</surname>
          </string-name>
          , Why3: Shepherd Your Herd of Provers, in: Boogie 2011: First International Workshop on Intermediate Verification Languages, Wroclaw, Poland,
          <year>2011</year>
          , pp.
          <fpage>53</fpage>
          -
          <lpage>64</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref35">
        <mixed-citation>
          [35]
          <string-name>
            <given-names>J.</given-names>
            <surname>Blanchette</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Fontaine</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Schulz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Tourret</surname>
          </string-name>
          , U. Waldmann,
          <article-title>Stronger higher-order automation: A report on the ongoing matryoshka project</article-title>
          , in: M.
          <string-name>
            <surname>Suda</surname>
          </string-name>
          , S. Winkler (Eds.),
          <source>EPTCS 311: Proceedings of the Second International Workshop on Automated Reasoning: Challenges</source>
          , Applications, Directions, Exemplary Achievements - Natal, Brazil,
          <year>August 26</year>
          ,
          <year>2019</year>
          , Electronic Proceedings in Theoretical Computer Science, EPTCS, EPTCS,
          <year>2019</year>
          , pp.
          <fpage>11</fpage>
          -
          <lpage>18</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref36">
        <mixed-citation>
          [36]
          <string-name>
            <given-names>A.</given-names>
            <surname>Bhayat</surname>
          </string-name>
          , G. Reger,
          <article-title>Restricted combinatory unification</article-title>
          , in: P. Fontaine (Ed.),
          <source>CADE</source>
          <year>2019</year>
          , volume
          <volume>11716</volume>
          <source>of LNCS</source>
          , Springer,
          <year>2019</year>
          , pp.
          <fpage>74</fpage>
          -
          <lpage>93</lpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>