<!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>Prague, Czech Republic
$ jeotten@ifi.uio.no (J. Otten)
€ http://jens-otten.de/ (J. Otten)</journal-title>
      </journal-title-group>
    </journal-meta>
    <article-meta>
      <title-group>
        <article-title>20 Years of leanCoP - An Overview of the Provers</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Jens Otten</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Department of Informatics, University of Oslo</institution>
          ,
          <country country="NO">Norway</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2023</year>
      </pub-date>
      <volume>000</volume>
      <fpage>0</fpage>
      <lpage>0002</lpage>
      <abstract>
        <p>This paper gives a comprehensive overview of the automated theorem prover leanCoP and all its variants for classical and non-classical first-order logics that have been developed so far. It includes historical details describing how seven lines of Prolog code turned into some of the most popular and efficient connection provers for classical and non-classical logics. The paper provides an overview of the non-clausal version nanoCoP and other implementations inspired by leanCoP.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;leanCoP</kwd>
        <kwd>connection calculus</kwd>
        <kwd>classical logic</kwd>
        <kwd>automated reasoning</kwd>
        <kwd>non-classical logics</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>AReCCa 2023
CEUR-WS.org
prove(M,I) :- append(Q,[C|R],M), \+member(-_,C),
append(Q,R,S), prove([!],[[-!|C]|S],[],I).
prove([],_,_,_).
prove([L|C],M,P,I) :- (-N=L; -L=N) -&gt; (member(N,P);
append(Q,[D|R],M), copy_term(D,E), append(A,[N|B],E),
append(A,B,F), (D==E -&gt; append(R,Q,S); length(P,K), K&lt;I,
append(R,[D|Q],S)), prove(F,S,[L|P],I)), prove(C,M,P,I).</p>
    </sec>
    <sec id="sec-2">
      <title>2. leanCoP — Classical Logic</title>
      <p>
        The most popular versions of leanCoP are those for classical logic. As already mentioned,
leanCoP 1.0 is the first and most basic variant of the leanCoP provers. leanCoP 2.0 contains a
few selected optimizations, which significantly improve performance. leanCoP 2.1 and leanCoP
2.2 include a few additional features such as the output of a readable connection proof.
2.1. leanCoP 1.0
The minimal Prolog source code of the leanCoP 1.0 prover is shown in Fig. 1.1 It only uses
standard (built-in) Prolog predicates, such as append(List1,List2,List3) (List3 is the
concatenation of List1 and List2), member(Elem,List) (is true if Elem is an element of
List), length(List,Length) (is true if Length is the number of elements in List) and
copy_term(Term1,Term2) (which creates a copy of Term1 with renamed/fresh variables and
unifies it to Term2). With a size of 333 bytes, the core code is smaller than that of the first
popular lean prover leanTAP [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ], whose compact Prolog code is 360 bytes in size.2
      </p>
      <p>The prover is invoked by calling the predicate prove(M,I), in which M is a matrix and I is
the proof depth limit. The matrix M represents the input formula as a list of clauses, where
each clause is a list of literals. Prolog terms and variables are used to represent atomic formulae
and term variables, respectively, “-” is used for the negation “¬”. The proof depth limit I is a
natural number. The predicate succeeds iff (if and only if) there is a (connection) proof for the
matrix M, in which the proof depth (i.e. the size of the active path) is smaller than I.
Example 1. F1 = ( man (Plato) ∧ ∀x ( man (x) ⇒ mortal (x) ) ) ⇒ mortal (Plato) is a
firstorder formula (with term variable x), which is equivalent to the following formula in disjunctive
normal form ∃x( ¬man (Plato) ∨ (man (x)∧¬mortal (x)) ∨ mortal (Plato) ) , which is represented
by the matrix M1 = {{¬man (Plato)}, {man (x), ¬mortal (x)}, {mortal (Plato)}} . When the
leanCoP 1.0 prover is invoked with the input matrix M1 with</p>
      <p>prove([[-man(plato)],[man(X),-mortal(X)],[mortal(plato)]],2).
it returns “yes”. Therefore there is a proof for M1 with depth smaller than 2 and the matrix M1 as
well as the original formula F1 are valid (in classical logic).
1Sound Prolog unification has to be used. In most Prolog systems, such as ECLiPSe or SWI Prolog, this is switched
on by “set_flag(occur_check,on).”.
2Note that the leanCoP code (and its calculus) is entirely different from the leanTAP code (and its calculus).</p>
      <sec id="sec-2-1">
        <title>Start (S) Reduction (R) Extension (E)</title>
        <p>C2, M, {}
ε, M, ε</p>
        <p>C, M, P ath∪{L2}
C∪{L1}, M, P ath∪{L2}</p>
        <p>C, M, P ath</p>
        <p>
          C2 is a copy of C1∈M , L2∈C2,
{L1, L2} is σ-complementary
2.2. The Classical Connection Calculus
leanCoP 1.0 implements the basic (clausal) connection calculus for classical logic [
          <xref ref-type="bibr" rid="ref2 ref3 ref5">2, 3, 5</xref>
          ]. In
contrast to sequent calculi [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ] or tableau calculi [
          <xref ref-type="bibr" rid="ref7 ref8">7, 8</xref>
          ], connection calculi are connection-driven
leading to a goal-oriented, more efficient proof search. A connection is a set {A1, ¬A2} of literals
with the same atomic formula, but different polarities. It corresponds to an axiom in the sequent
calculus or a closed branch in the tableau calculus. For first-order logic, a term substitution σT
assigns terms to variables. A connection is σT -complementary iff σT (A1) = σT (A2).
Definition 1 (Clausal Connection Calculus for Classical Logic). The formal description of
the (clausal) connection calculus for classical logic is given in Fig. 2. It consists of one axiom and
three rules.3 The words of the calculus are tuples “C, M, P ath”, where M is a matrix, C is the
(subgoal) clause (or ε) and the (active) P ath is a set of literals (or ε). A copy of a clause C is made
by renaming all variables in C. A connection proof for M is a derivation of ε, M, ε with a term
substitution σ = σT in the connection calculus, in which all leaves are axioms.
        </p>
        <p>
          The rules of the calculus are applied in an analytic way, i.e. from bottom to top.4 The rigid
term substitution σT is calculated by a term unification algorithm (see, e.g. [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ]) whenever a
reduction or extension rule is applied. The connection calculus is sound and complete [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ].
Example 2. A formal connection proof for the matrix M1 from Example 1 is given below. It is
σT (x′) = Plato where the variable x′ occurs in the (implicit) copy of the second clause of M1.
{}, M1, {mortal(Plato), man(x′)} A {}, M1, {mortal(Plato)} A
{man(x′)}, {{¬man(Plato)}, . . .}, {mortal(Plato)} E {}, M1, {} A
{mortal(Plato)}, {{¬man(Plato)}, {man(x), ¬mortal(x)}, {mortal(Plato)}}, {} E
        </p>
        <p>
          ε, {{¬man(Plato)}, {man(x), ¬mortal(x)}, {mortal(Plato)}}, ε S
3This formalization of the connection calculus was first published in [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ] together with the code of leanCoP 1.0.
4During the proof search, backtracking might be necessary (in case the chosen rule or rule instance does not lead to
a proof) when more than one rule is applicable or for alternative clauses C1 or literals L2 (in the start, reduction or
extension rule). No backtracking is necessary for choosing the literal L1 (in the reduction or extension rule).
prove(I,S) :- \+member(scut,S) -&gt; prove([-(#)],[],I,[],S) ;
        </p>
        <p>lit(#,C,_) -&gt; prove(C,[-(#)],I,[],S).
prove(I,S) :- member(comp(L),S), I=L -&gt; prove(1,[]) ;</p>
        <p>(member(comp(_),S);retract(p)) -&gt; J is I+1, prove(J,S).
prove([],_,_,_,_).
prove([L|C],P,I,Q,S) :- \+ (member(A,[L|C]), member(B,P),</p>
        <p>
          A==B), (-N=L;-L=N) -&gt; ( member(D,Q), L==D ;
member(E,P), unify_with_occurs_check(E,N) ; lit(N,F,H),
(H=g -&gt; true ; length(P,K), K&lt;I -&gt; true ;
\+p -&gt; assert(p), fail), prove(F,[L|P],I,Q,S) ),
(member(cut,S) -&gt; ! ; true), prove(C,P,I,[L|Q],S).
2.3. leanCoP 2.0
Even though leanCoP 1.0 already outperformed the famous Otter theorem prover [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ] on a small
number of problems [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ], the development of the next version took a big step forward. In the year
2006, the problems of the MPTP challenge [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ] motivated the integration of further optimizations
into leanCoP: regularity, lemmata, restricted backtracking, conjecture start clauses, definitional
clausal form, strategy scheduling and a more efficient representation of the input clauses. It
resulted in leanCoP 2.0, whose minimal Prolog code of the core prover is shown in Fig. 3.5 This
minimal version of leanCoP 2.0 is still only 555 bytes in size.
        </p>
        <p>
          A few basic but effective techniques were carefully selected and integrated into leanCoP 2.0.
Regularity reduces the search space by ensuring that no literal occurs more than once on the
active path [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ]. Lemmata (or factorization) reuses the subproof of a literal in order to solve the
same literal at a later point in the proof search [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ]. Restricted backtracking is an effective (but
incomplete) technique to prune the search space in the (non-confluent) connection calculus [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ].
It cuts off any alternative applications of reduction and extensions rules once a literal from
the subgoal clause has been solved.6 Furthermore, backtracking can also be restricted when
selecting the clause C1 in the start rule by omitting alternative start clauses. Conjecture start
clauses restrict the start rule for formulae of the form (A1 ∧ . . . ∧ An) ⇒ C to clauses of the
conjecture C instead of the (default) positive clauses. A definitional clausal form translation,
which is done in a preprocessing step, introduces definitions for certain subformulae [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ],
hereby reducing the size of the resulting matrix. Reordering clauses is done in a preprocessing
step and modifies (indirectly) the proof search order, by reordering the clauses in the input
matrix. Strategy scheduling uses a sequence of different strategies to prove a formula, which are
specified in the last argument of the prove predicate [
          <xref ref-type="bibr" rid="ref12 ref13">13, 12</xref>
          ]. For example, the first strategy
“[cut,comp(7)]” used by leanCoP 2.0 uses restricted backtracking and restarts with a complete
proof search (without restricted backtracking) if a proof depth of 7 is reached [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ].
5The source code shown in Fig. 3 uses only standard (built-in) Prolog predicates and implements the whole proof
search. The input matrix is stored in Prolog’s database using the lit predicate (see below for details).
6The literal L1 in Fig. 2 is called solved; in case of the extension rule, there also has to be a proof for the left premise.
        </p>
        <p>
          Using a lean Prolog technology [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ], the clauses of the input matrix M are stored in Prolog’s
database in a preprocessing step. For every clause C ∈ M and for all literals L ∈ C the fact
“lit(L,C1,Grnd).” is stored, where C1=C\{L} and Grnd is g if C is ground (does not contain
any variables) and n, otherwise. This integrates the main advantage of the ”Prolog technology”
approach [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ] into leanCoP, using Prolog’s fast indexing mechanism to find connections.
        </p>
        <p>
          Fig. 4 (ignoring the underlined code) shows the comprehensive source code of leanCoP 2.0.
The core prover is invoked with prove(1,Set), where Set is a strategy and the initial limit
for the proof depth (size of the active path) is 1. This predicate succeeds iff there is a connection
proof for the matrix/clauses stored in Prolog’s database. The proof search starts by applying
the start rule (lines a–c). The path limit is used to perform iterative deepening on the size of the
active path (lines e–h), which is necessary for completeness. Afterwards, the reduction rule
(lines 2, 5, 8, 17) and the extension rule (lines 2, 5, 11–14, 17) are repeatedly applied, until the
branch in the derivation can be closed by an axiom (line 1). A controlled iterative deepening stops
the proof search if the current path limit for the size of the active path is not exceeded (line g and
13). This yields a decision procedure for ground (e.g. propositional) formulae and also allows for
refuting some (invalid) first-order formulae. The proof search optimizations integrated into the
core prover are regularity (line 4), lemmata (line 6), and restricted backtracking (line 16); see [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ]
for details. The term substitution σT is stored implicitly by Prolog. The additional optimizations
improve the performance of leanCoP significantly, in particular for large formulae [
          <xref ref-type="bibr" rid="ref12">12</xref>
          ].
(a)
(b)
(c)
(d)
(e)
(f)
(g)
(h)
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
(14)
(15)
(16)
(17)
prove(PathLim,Set,Proof)
:\+member(scut,Set) -&gt; prove([-(#)],[],PathLim,[],Set,[Proof]) ;
lit(#,C,_) -&gt; prove(C,[-(#)],PathLim,[],Set,Proof1),
        </p>
        <p>Proof=[C|Proof1].
prove(PathLim,Set,Proof)
:member(comp(Limit),Set), PathLim=Limit -&gt; prove(1,[],Proof) ;
(member(comp(_),Set);retract(pathlim)) -&gt;</p>
        <p>PathLim1 is PathLim+1, prove(PathLim1,Set,Proof).
prove([],_,_,_,_,[]).
prove([Lit|Cla],Path,PathLim,Lem,Set,Proof)
:</p>
        <p>Proof=[[[NegLit|Cla1]|Proof1]|Proof2],
\+ (member(LitC,[Lit|Cla]), member(LitP,Path), LitC==LitP),
(-NegLit=Lit;-Lit=NegLit) -&gt;
( member(LitL,Lem), Lit==LitL, Cla1=[], Proof1=[]
;
member(NegL,Path), unify_with_occurs_check(NegL,NegLit),
Cla1=[], Proof1=[]
;
lit(NegLit,Cla1,Grnd1),
( Grnd1=g -&gt; true ; length(Path,K), K&lt;PathLim -&gt; true ;</p>
        <p>\+ pathlim -&gt; assert(pathlim), fail ),
prove(Cla1,[Lit|Path],PathLim,Lem,Set,Proof1)
),
( member(cut,Set) -&gt; ! ; true ),
prove(Cla,Path,PathLim,[Lit|Lem],Set,Proof2).</p>
        <p>
          At CASC in 2007, leanCoP 2.0 [
          <xref ref-type="bibr" rid="ref12 ref13">13, 12</xref>
          ] proved more problems (out of 300 problems with a
time limit of 360 seconds) than four other provers in the main FOF division [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ], including 21
“difficult” problems; see Table 1. It proved four problems not solved by the Vampire prover [
          <xref ref-type="bibr" rid="ref16">16</xref>
          ],
won both the bushy and chainy 100$ MPTP challenges, and was awarded Best Newcomer [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ].
Example 3. The preprocessing step of leanCoP 2.0 stores the clauses of matrix M1 from Example 1,
M1 = {{¬man (Plato)}, {man (x), ¬mortal (x)}, {mortal (Plato)}}, in the following form:7
lit(#,[mortal(plato)],g). (clause 3) lit(man(X),[-mortal(X)],n). (clause 2)
lit(mortal(plato),[#],g). (clause 3) lit(-mortal(X),[man(X)],n). (clause 2)
lit(-man(plato),[],g). (clause 1)
Then when the leanCoP 2.0 prover is invoked with “ prove(1,[cut,comp(7)]).” it returns
“yes”. Therefore, the matrix M1 as well as the original formula F1 are valid (in classical logic).
2.4. leanCoP 2.1/2.2
In leanCoP 2.1 a few additional features have been added to leanCoP 2.0. leanCoP 2.1 directly
supports the TPTP input syntax (for FOF) with equality, where equality axioms are automatically
added if necessary. The fixed strategy scheduling is now controlled by a shell script, and support
for SWI and SICStus Prolog is added. Furthermore, an additional Proof argument is added
to the core prover, which returns a compact connection proof. Afterwards, this proof can be
translated into different formats: connect (standard connection proof), leantptp (proof in
a TPTP-like syntax) and readable (readable proof in natural language). In leanCoP 2.2 the
(detailed) proof output has been improved and the fixed strategy scheduling optimized.
        </p>
        <p>The source code of the leanCoP 2.1/2.2 core prover is shown in Fig. 4. The underlined code,
which collects the proof, was added to leanCoP 2.0, nothing else was changed. The core prover
is invoked with prove(1,Set,Proof), where Proof returns the found connection proof.</p>
        <p>At CASC in 2009, the leanCoP 2.1 prover, and at CASC in 2010, the leanCoP 2.2 prover were
among the top three provers that return a proof in the main FOF division.8
7The special literal # is added to all positive clauses and the proof starts with the subgoal [-(#)] (line b/c in Fig. 4).
8See https://www.tptp.org/CASC/J5/ and https://www.tptp.org/CASC/22/
Example 4. For the matrix M1 stored as shown in Example 3, the leanCoP 2.1/2.2 core prover
invoked with “ prove(1,[cut,comp(7)],Proof).” returns the compact connection proof</p>
        <p>Proof = [[#,mortal(plato)],[[-(mortal(plato)),man(plato)],[[-(man(plato))]]]]
which is a nested list of clauses C2 used in start/extension steps (or literals L2 in reduction steps).</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>3. ileanCoP — Intuitionistic Logic</title>
      <p>
        Intuitionistic logic [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ] has applications, e.g., in program synthesis and within interactive proof
assistants such as Coq [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ] and NuPRL [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ] used for constructing provably correct software.
Intuitionistic and classical logic share the same syntax, but their semantics is different. For
example, the formula man(Socrates) ∨ ¬man(Socrates) is valid in classical logic, but not in
intuitionistic logic. The semantics of intuitionistic logic requires a proof for man(Socrates) or
for ¬man(Socrates), which do not exist. Every formula that is valid in intuitionistic logic is
also valid in classical logic, but not vice versa. Gentzen already provided a sequent calculus
LJ for intuitionistic first-order logic [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]. Wallen extended Bibel’s matrix characterization [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] to
intuitionistic logic by using prefixes to encode the Kripke semantics [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ]. This characterization,
originally formulated for formulae in non-clausal form, was adapted to clausal form by using
an extended Skolemization [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ]. It serves as the basis for a clausal connection calculus for
intuitionistic first-order logic and the ileanCoP implementation [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ].
      </p>
      <sec id="sec-3-1">
        <title>3.1. The Intuitionistic Connection Calculus</title>
        <p>
          For intuitionistic logic the matrix and the calculus are extended by prefixes, representing world
paths in the Kripke semantics; see [
          <xref ref-type="bibr" rid="ref20 ref22">20, 22</xref>
          ]. A prefix p is a string consisting of variables (denoted
by V ) and constants (denoted by a) and assigned to each literal (and subformula).
Definition 2. The intuitionistic matrix M (F pol:p) of a prefixed formula F pol:p with polarity
pol∈{0, 1} (see [
          <xref ref-type="bibr" rid="ref20 ref7">7, 20</xref>
          ]) is defined according to Table 2. MG ∪β MH := {CG ∪ CH | CG ∈ MG,
CH ∈ MH }, x* is a new term variable, t* is the Skolem term f * (x1, . . . , xn), V * is a new prefix
variable, a* is the prefix constant f * (x1, . . . , xn), f * is a new function symbol and x1, . . . , xn
are all free term and prefix variables in A0 : p, (¬G)0 : p, (G ⇒ H)0 : p, (∀xG)0 : p or (∃xG)1 : p,
respectively. The intuitionistic matrix M i(F ) of a formula F is the intuitionistic matrix M (F 0 : ε).
        </p>
        <p>F pol : p
(G∧H)0 : p
(G∨H)1 : p
(G⇒H)1 :p
(∀xG)1 : p
(∃xG)0 : p
(∀xG)0 : p
(∃xG)1 : p</p>
        <p>C, M, P ath∪{L2: p2}
C∪{L1: p1}, M, P ath∪{L2: p2}
C2\{L2: p2}, M, P ath∪{L1: p1}</p>
        <p>C∪{L1: p1}, M, P ath
{L1: p1, L2: p2} is σ-complementary
C, M, P ath</p>
        <p>C2 is a copy of C1∈M ,
L2: p2∈C2, {L1: p1, L2: p2}
is σ-complementary</p>
        <p>
          A prefix substitution σP assigns strings to prefix variables and is calculated by a prefix
unification [
          <xref ref-type="bibr" rid="ref21">21</xref>
          ]. In intuitionistic logic, a connection {A10 : p1, A21 : p2} is σ-complementary iff
σT (A1) = σT (A2) and σP (p1) = σP (p2) for a combined substitution σ = (σT , σP ).
Definition 3 (Clausal Connection Calculus for Intuitionistic Logic). The (clausal)
connection calculus for intuitionistic logic [
          <xref ref-type="bibr" rid="ref21">21</xref>
          ] is given in Fig. 5. An intuitionistic connection
proof for F is a derivation of ε, M i(F ), ε with an admissible (see [
          <xref ref-type="bibr" rid="ref20 ref21">20, 21</xref>
          ]) combined substitution
σ = (σT , σP ), in which all leaves are axioms.
        </p>
        <p>Example 5. The intuitionistic matrix of the formula F1 from Example 1 is M1i = M i(F1) =
{{man(Plato)1 : a1V1}, {man(x)0 : a1V2 a2(x), mortal(x)1: a1V2V3}, {mortal(Plato)0 : a1a3}}.
The intuitionistic connection proof for M1i uses the same steps as the classical proof in
Example 2, but with a combined substitution σ = (σT , σP ) with σT (x′) = Plato, σP (V1) = a2(Plato),
σJ (V2) = ε and σP (V3) = a3 (where ε is the empty string). Therefore, M1i and F1 are valid in
intuitionistic logic. The intuitionistic matrix of the formula F2 = man(Socrates) ∨ ¬ man(Socrates) is
M2i = M i(F2) = {{man(Socrates)0 : a1}, {man(Socrates)1 : a2}}. It contains the only connection
{man(Socrates)0 : a1, man(Socrates)1 : a2}, which cannot be complementary as there is no σP
that unifies the two prefixes a1 and a2. Therefore, M2i and F2 are not valid in intuitionistic logic.
3.2. ileanCoP 1.0/1.2
ileanCoP is a compact Prolog implementation of the clausal connection calculus for intuitionistic
logic and extends the classical connection prover leanCoP by (a) prefixes (that are added to the
literals in the matrix in a preprocessing step), (b) a set of prefix equations (that are collected
during the proof search), (c) a set of term variables (with their prefixes) assigned to each clause
(in order to check the admissibility of σ, also called domain condition), and (d) a prefix unification
algorithm (that unifies the prefixes of the literals in each connection).</p>
        <p>
          ileanCoP 1.0 [
          <xref ref-type="bibr" rid="ref21">21</xref>
          ] is based on (classical) leanCoP 1.0 and implements the basic intuitionistic
connection calculus. ileanCoP 1.2 [
          <xref ref-type="bibr" rid="ref13">13</xref>
          ] integrates all the additional optimization techniques and
strategies of leanCoP 2.0. The minimal source code of the ileanCoP 1.2 core prover is shown in
Fig. 6. The underlined code was added to the classical prover leanCoP 2.0 shown in Fig. 3; no
further changes were made. In a preprocessing step the clauses of the intuitionistic matrix are
written into Prolog’s database using the lit predicate (see also Section 2.3).
prove(I,S) :- ( \+member(scut,S) -&gt;
prove([(-(#)):(-[])],[],I,[],[Z,T],S) ;
lit((#):_,G:C,_) -&gt; prove(C,[(-(#)):(-[])],I,[],[Z,R],S),
append(R,G,T) ), domain_cond(T), prefix_unify(Z).
prove(I,S) :- member(comp(L),S), I=L -&gt; prove(1,[]) ;
        </p>
        <p>(member(comp(_),S);retract(p)) -&gt; J is I+1, prove(J,S).
prove([],_,_,_,[[],[]],_).
prove([L:U|C],P,I,Q,[Z,T],S) :- \+ (member(A,[L:U|C]), member(B,P),
A==B), (-N=L;-L=N) -&gt; ( member(D,Q), L:U==D, X=[], O=[] ;
member(E:V,P), unify_with_occurs_check(E,N),
\+ \+ prefix_unify([U=V]), X=[U=V], O=[] ;
lit(N:V,M:F,H), \+ \+ prefix_unify([U=V]),
(H=g -&gt; true ; length(P,K), K&lt;I -&gt; true ;
\+p -&gt; assert(p), fail), prove(F,[L:U|P],I,Q,[W,R],S),
X=[U=V|W], append(R,M,O) ), (member(cut,S) -&gt; ! ; true),
prove(C,P,I,[L:U|Q],[Y,J],S), append(X,Y,Z), append(J,O,T).</p>
        <p>
          The prover is invoked with prove(1,S), where S is a strategy (see Section 2.3) and the
start limit for the size of the active path is 1. The predicate succeeds if there is an
intuitionistic connection proof for the stored input clauses. First, ileanCoP performs a classical proof
search. After a classical proof is found, the domain condition is checked and the prefixes of
the literals in each connection are unified [
          <xref ref-type="bibr" rid="ref21">21</xref>
          ]. This is done by the predicates domain_cond
and prefix_unify, respectively, in the fourth line of the code in Fig. 6. These are the only
additional predicates invoked during the proof search and are implemented by 5 and 21 lines of
Prolog code, respectively. The substitutions σT and σP are stored implicitly by Prolog.
        </p>
        <p>
          At CASC in 2007, see Table 1, ileanCoP 1.2 [
          <xref ref-type="bibr" rid="ref13">13</xref>
          ] proved two problems intuitionistically that
Vampire [
          <xref ref-type="bibr" rid="ref16">16</xref>
          ] did not prove classically even though reasoning in intuitionistic logic is significantly
harder (for propositional logic it is PSPACE-complete [
          <xref ref-type="bibr" rid="ref23">23</xref>
          ] compared to NP-complete [
          <xref ref-type="bibr" rid="ref24">24</xref>
          ]). For
more than 10 years ileanCoP 1.2 was the fastest prover for intuitionistic first-order logic.
        </p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>4. MleanCoP — Modal Logic</title>
      <p>
        Modal logics [
        <xref ref-type="bibr" rid="ref25 ref26">25, 26</xref>
        ] are among the most popular non-classical logics and have applications in,
e.g., planning, natural language processing, and program verification. Modal logics extend the
language of classical logic with the unary modal operators □ and ♢ representing the modalities
”it is necessarily true that” and ”it is possibly true that”, respectively. For example, the proposition
“if Plato is necessarily a man, then Plato is possibly a man” can be represented by the modal
formula □ man(Plato) ⇒ ♢ man(Plato) .
      </p>
      <p>The Kripke semantics of the (standard) modal logics is defined by a set of worlds and a binary
accessibility relation between these worlds. In each single world the classical semantics applies
to the classical connectives, whereas the modal operators □ and ♢ are interpreted with respect
to accessible worlds. There exist a broad range of different modal logics and the properties of
the accessibility relation specify the particular modal logic, such as D, T, S4 or S5.</p>
      <p>
        Proof calculi for modal logic often use prefixes [
        <xref ref-type="bibr" rid="ref27">27</xref>
        ] and so does Wallen’s matrix
characterizations [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ]. Again, this characterization was adapted and serves as the basis for the clausal
connection calculus and the MleanCoP implementation for several modal logics [
        <xref ref-type="bibr" rid="ref28 ref29">28, 29</xref>
        ].9
      </p>
      <sec id="sec-4-1">
        <title>4.1. The Modal Connection Calculus</title>
        <p>
          For modal logic the matrix and the calculus are extended by prefixes, representing world paths
in the Kripke semantics; see [
          <xref ref-type="bibr" rid="ref20 ref22">20, 22</xref>
          ]. Again, a prefix p is a string consisting of variables (denoted
by V ) and constants (denoted by a) and assigned to each literal (and subformula).
Definition 4. The modal matrix M (F pol:p) of a prefixed formula F pol:p with polarity
pol∈{0, 1} is defined according to Table 3. MG ∪β MH := {CG ∪ CH | CG ∈ MG, CH ∈ MH },
x* is a new term variable, t* is the Skolem term f * (x1, . . . , xn), V * is a new prefix variable, a* is
the prefix constant f * (x1, . . . , xn), f * is a new function symbol and x1, . . . , xn are all free term
and prefix variables in (∀xG)0 : p, (∃xG)1 : p, (□G)0 : p or (♢ G)1 : p, respectively. The modal
matrix M m(F ) of a formula F is the modal matrix M (F 0 : ε).
        </p>
        <p>
          A prefix substitution σP assigns strings to prefix variables and is calculated by a prefix
unification [
          <xref ref-type="bibr" rid="ref28 ref31 ref32">28, 31, 32</xref>
          ]. In modal logic, a connection {A10 : p1, A21 : p2} is σ-complementary iff
σT (A1) = σT (A2) and σP (p1) = σP (p2) for a combined substitution σ = (σT , σP ). The prefix
unification procedure depends on the specific modal logic and its domain condition and has
to respect its accessibility condition: |σP (V )| = 1 for the modal logic D and |σP (V )| ≤ 1 for
the modal logic T (for all prefix variables V ); for S5 only the last character (or ε if the prefix is
empty) of each prefix has to be unified; there is no restriction for the modal logic S4 [
          <xref ref-type="bibr" rid="ref28 ref29">28, 29</xref>
          ].
Definition 5 (Clausal Connection Calculus for Modal Logic). The (clausal) connection
calculus for modal logic [
          <xref ref-type="bibr" rid="ref28 ref31">28, 31</xref>
          ] is given in Fig. 5. A modal connection proof for the modal
formula F is a derivation of ε, M m(F ), ε with an admissible (see [
          <xref ref-type="bibr" rid="ref20 ref28">20, 28</xref>
          ]) combined substitution
σ = (σT , σP ), in which all leaves are axioms.
9The calculus and the implementation for modal logic are very similar to the ones for intuitionistic logic in Section 3;
only the specification of prefixes, the prefix unification and the domain condition differ. Indeed, Gödel showed that
intuitionistic logic can be embedded into the modal logic S4 with cumulative domains [
          <xref ref-type="bibr" rid="ref30">30</xref>
          ]. For historical reasons
and to keep the notation simple for different audiences, these logics are covered in separate sections.
Example 6. The modal matrix of F3 = □ man ⇒ □♢ man is M3m = M m(F3) = {{man1 :V1},
{man0 :a1V2}}. The modal connection proof for M3m has one connection {man1 :V1, man0 :a1V2},
which is σ-complementary for the combined (admissible) substitutions σP (V1) = a1, σP (V2) = ε
(empty string) for T, σP (V1) = a1V2 for S4, and σP (V1) = V2 for S5. Therefore, M3m and F3 are
valid in the modal logics T, S4 and S5, but not in the modal logic D (which requires |σP (Vi)| = 1).
4.2. MleanCoP 1.2/1.3
MleanCoP is a compact implementation of the connection calculus for the modal logics D, T,
S4 and S5 with constant, cumulative and varying domains. MleanCoP 1.2 [
          <xref ref-type="bibr" rid="ref28">28</xref>
          ] is based on
leanCoP 2.0 extended by prefixes and a prefix unification algorithm used to calculate the prefix
substitution σP . The minimal source code of the MleanCoP 1.2 core prover is shown in Fig. 6.
The underlined code was added to the classical prover, no further changes were made. In a
preprocessing step the clauses of the modal matrix are written into Prolog’s database using the
lit predicate (see also Section 2.3). The prover is invoked with prove(1,S), which succeeds
if there is a modal connection proof for the stored input clauses. After a classical proof is
found, the domain condition is checked (domain_cond) and the prefixes of the literals in each
connection are unified (prefix_unify), which depend on the specific modal logic [
          <xref ref-type="bibr" rid="ref20 ref28">20, 28</xref>
          ].
        </p>
        <p>
          MleanCoP 1.3 [
          <xref ref-type="bibr" rid="ref29">29</xref>
          ] includes the following improvements: support for heterogenous
multimodal logics, output of a compact modal connection proof, support for the modal QMLTP
input syntax [
          <xref ref-type="bibr" rid="ref33">33</xref>
          ] and an improved strategy scheduling. Up to the release of nanoCoP-M 2.0,
MleanCoP was the fastest prover for the first-order modal logics D, T, S4 and S5 [
          <xref ref-type="bibr" rid="ref34 ref35">34, 35</xref>
          ].
        </p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>5. nanoCoP — Non-Clausal Reasoning</title>
      <p>
        nanoCoP [
        <xref ref-type="bibr" rid="ref31 ref35 ref36 ref37">31, 36, 37, 35</xref>
        ] is a series of compact Prolog implementations of the non-clausal
connection calculus. The non-clausal connection calculus for classical [
        <xref ref-type="bibr" rid="ref38 ref39">38, 39</xref>
        ] and non-classical
logics [
        <xref ref-type="bibr" rid="ref37">37</xref>
        ] generalizes the clausal connection calculus [
        <xref ref-type="bibr" rid="ref1 ref2 ref3">1, 2, 3</xref>
        ].
      </p>
      <sec id="sec-5-1">
        <title>5.1. The Non-Clausal Connection Calculus</title>
        <p>
          In the clausal connection calculus a matrix is a set of clauses, where a clause is a set of literals.
The non-clausal connection calculus works on non-clausal matrices, in which a matrix is a set
of clauses and a clause is a set of literals and (sub)matrices. It can be seen as a representation of
a formula in negation normal form. For the non-classical logics, the non-clausal matrix and
calculus are extended by prefixes p, i.e., strings consisting of variables (V ) and constants (a).
Definition 6. The classical non-clausal matrix M (F pol) of F pol with polarity pol ∈ {0, 1}
is defined (inductively) according to Table 4; the prefixes : p... and the last two lines are to be
ignored. The non-classical non-clausal matrix M i/m(F pol:p) of F pol:p with polarity pol ∈ {0, 1}
is defined (inductively) according to Table 4; for intuitionistic logic (M i) the last two lines are to
be ignored, for modal logic (M m) the underlined characters are to be ignored). x* is a new term
variable, t* is the Skolem term f * (x1, . . . , xn), V * is a new prefix variable, a* is the prefix constant
f * (x1, . . . , xn), f * is a new function symbol and x1, . . . , xn are all free term and prefix variables
in the corresponding formula F pol : p. The classical non-clausal matrix M (F ) of F is the matrix
M (F 0). The non-classical non-clausal matrix M i/m(F ) of F is the matrix M i/m(F 0 : ε).
Definition 7 (Non-Clausal Connection Calculus). The non-clausal connection calculus for
classical [
          <xref ref-type="bibr" rid="ref38">38</xref>
          ] and non-classical [
          <xref ref-type="bibr" rid="ref37">37</xref>
          ] logic is given in Fig. 7 (for classical logic, the underlined
text is to be ignored). A classical non-clausal connection proof for F is a derivation of ε, M, ε
in the non-clausal connection calculus with a term substitution σ = σT , in which all leaves are
axioms. An intuitionistic/modal connection proof for F is a derivation of ε, M i/m(F ), ε with
an admissible (see [
          <xref ref-type="bibr" rid="ref20 ref37">20, 37</xref>
          ]) combined substitution σ = (σT , σP ), in which all leaves are axioms.
and C3:=β-clauseL2 (C2), C2 is copy of C1, C1 is e-clause of M wrt.
        </p>
        <p>Path ∪ {L1 : p1}, C2 contains L2 : p2, {L1:p1, L2:p2} is σ-complementary</p>
        <sec id="sec-5-1-1">
          <title>Decomposition (D)</title>
          <p>C ∪ C1, M, Path
C∪{M1}, M, Path</p>
          <p>and C1∈M1
Example 7. The (simplified) intuitionistic non-clausal matrix of F4 = ( man(Socrates) ⇒
man(Socrates) ) ∧ ( ( man(Plato) ∧ ∀x(man(x) ⇒ mortal(x)) ) ⇒ mortal(Plato) ) is M4i =
M i(F4) = { { {{man(Socrates)0 : a1V1}, {man(Socrates)1 : a1a2}}, {{man(Plato)1 : a3V2},
{man(x)0 : a3V3V4a4(V3, x, V4), mortal(x)1 : a3V3V4V5}, {mortal(Plato)0 : a3a5}} } } . The
graphical non-clausal connection proof for M4i with σ = (σT , σP ) and σT (x) = Plato, σP (V1) = a2,
σP (V2) = a4(ε, Plato, ε), σP (V3) = ε, σJ (V4) = ε, σP (V5) = a5 is depicted below.
 
 
 
5.2. nanoCoP</p>
          <p>
            man(Socrates)1:a1a2
man(Plato)1:a3V2
mortal(Plato)0:a3a5
 
 
 
nanoCoP is a compact Prolog implementation of the non-clausal connection calculus for classic
first-order logic (with equality) [
            <xref ref-type="bibr" rid="ref31 ref35 ref36">31, 36, 35</xref>
            ]. It is an extension of the leanCoP code (see Fig. 4).
          </p>
          <p>
            In the first step, the input formula F is translated into a non-clausal matrix M = M (F )
according to Table 4 (for intuitionistic and modal logic, prefixes are added to all literals in
the non-clausal matrix M i/m(F )). Every (sub-)clause (I, V, F V ) : C and submatrix J : M
are marked with unique indices I and J , sets V of (free) term and prefix variables that are
newly introduced in C (and sets F V including pairs x : pre(x) of free term variables and their
prefixes, necessary to check if σ is admissible for the non-classical logics). In Prolog, literals
with polarity 1 are marked with “-”. In the second step, for every literal Lit in M the fact
lit(Lit,ClaB,ClaC,Grnd) is asserted into Prolog’s database where ClaC ∈ M is the (largest)
clause in which Lit occurs, ClaB is β-clauseLit(ClaC) [
            <xref ref-type="bibr" rid="ref38">38</xref>
            ] and Grnd is g iff the smallest clause
in which Lit occurs is ground (i.e., does not contain variables).
          </p>
          <p>The source code of the nanoCoP 2.0 core prover is shown in Fig. 8. The underlined code is
necessary only for the non-classical logics and is to be ignored for (classical) nanoCoP.</p>
          <p>The predicate prove(Mat,PathLim,Set,Proof) implements the start rule (lines 1–7) and
iterative deepening (lines 8–12). Mat is the (prefixed) matrix generated in the
preprocessing step, PathLim is the size limit for Path, Set is a strategy (see Section 2.3), and Proof
contains the returned (non-clausal) connection proof. The predicate positiveC(Cla,Cla1)
returns the positive clause Cla1 of Cla (implemented in 7 additional lines of code). The
predicate prove(Cla,Mat,Path,PathI,PathLim,Lem,PreS,VarS,Set,Proof) implements the
axiom (line 13), the decomposition rule (lines 14–19), the reduction rule (lines 20–23, 27–29,
40–41), and the extension rule (lines 20–23, 31–41) of the calculus in Fig. 7. The substitution
σ is stored implicitly by Prolog. The predicate prove_ec(ClaB,Cla1,Mat,ClaB1,Mat1)
calculates extension clauses (lines 42–52). Additional optimization techniques (see Section 2.3) are
regularity (line 22), lemmata (lines 24–25) and restricted backtracking (line 39).</p>
        </sec>
      </sec>
      <sec id="sec-5-2">
        <title>5.3. nanoCoP-i and nanoCoP-M</title>
        <p>
          nanoCoP-i and nanoCoP-M are compact Prolog implementations of the non-clausal connection
calculus for first-order intuitionistic logic (with equality) and for the first-order modal logics D,
T, S4 and S5 with constant, cumulative and varying domains, respectively [
          <xref ref-type="bibr" rid="ref35 ref37">37, 35</xref>
          ].
% start rule
prove(Mat,PathLim,Set,[(I^0)^V:Proof])
:( member(scut,Set) -&gt; ( append([(I^0)^V^VS:Cla1|_],[!|_],Mat) ;
member((I^0)^V^VS:Cla,Mat), positiveC(Cla,Cla1) ) -&gt; true ;
( append(MatC,[!|_],Mat) -&gt; member((I^0)^V^VS:Cla1,MatC) ;
member((I^0)^V^VS:Cla,Mat), positiveC(Cla,Cla1) ) ),
prove(Cla1,Mat,[],[I^0],PathLim,[],PreS,VarS,Set,Proof),
append(VarS,VS,VarS1), domain_cond(VarS1), prefix_unify(PreS).
% axiom
prove([],_,_,_,_,_,[],[],_,[]).
% decomposition rule
prove([J^K:Mat1|Cla],MI,Path,PI,PathLim,Lem,PreS,VarS,Set,Proof)
:!, member(I^V^FV:Cla1,Mat1),
prove(Cla1,MI,Path,[I,J^K|PI],PathLim,Lem,PreS1,VarS1,Set,Proof1),
prove(Cla,MI,Path,PI,PathLim,Lem,PreS2,VarS2,Set,Proof2),
append(PreS2,PreS1,PreS), append(FV,VarS1,VarS3),
append(VarS2,VarS3,VarS), Proof=[J^K:I^V:Proof1|Proof2].
% reduction and extension rules
prove([Lit:Pre|Cla],MI,Path,PI,PathLim,Lem,PreS,VarS,Set,Proof)
:
        </p>
        <p>Proof=[Lit:Pre,I^V:[NegLit:PreN|Proof1]|Proof2],
\+ (member(LitC,[Lit:Pre|Cla]), member(LitP,Path), LitC==LitP),
(-NegLit=Lit;-Lit=NegLit) -&gt;
( member(LitL,Lem), Lit:Pre==LitL, Proof1=[], I=l, V=[],</p>
        <p>PreS3=[], VarS3=[]
;
member(NegL:PreN,Path), unify_with_occurs_check(NegL,NegLit),
Proof1=[], I=r, V=[],
\+ \+ prefix_unify([Pre=PreN]), PreS3=[Pre=PreN], VarS3=[]
;
lit(NegLit:PreN,ClaB,Cla1,Grnd1),
( Grnd1=g -&gt; true ; length(Path,K), K&lt;PathLim -&gt; true ;</p>
        <p>\+ pathlim -&gt; assert(pathlim), fail ),
\+ \+ prefix_unify([Pre=PreN]),
prove_ec(ClaB,Cla1,MI,PI,I^V^FV:ClaB1,MI1),
prove(ClaB1,MI1,[Lit:Pre|Path],[I|PI],PathLim,Lem,PreS1,VarS1,</p>
        <p>Set,Proof1), PreS3=[Pre=PreN|PreS1], append(VarS1,FV,VarS3)
),
( member(cut,Set) -&gt; ! ; true ),
prove(Cla,MI,Path,PI,PathLim,[Lit:Pre|Lem],PreS2,VarS2,Set,Proof2),
append(PreS3,PreS2,PreS), append(VarS2,VarS3,VarS).
% extension clause (e-clause)
prove_ec((I^K)^V:ClaB,IV:Cla,MI,PI,ClaB1,MI1)
:append(MIA,[(I^K1)^V1:Cla1|MIB],MI), length(PI,K),
( ClaB=[J^K:[ClaB2]|_], member(J^K1,PI),
unify_with_occurs_check(V,V1), Cla=[_:[Cla2|_]|_],
append(ClaD,[J^K1:MI2|ClaE],Cla1),
prove_ec(ClaB2,Cla2,MI2,PI,ClaB1,MI3),
append(ClaD,[J^K1:MI3|ClaE],Cla3),
append(MIA,[(I^K1)^V1:Cla3|MIB],MI1)
;
(\+member(I^K1,PI);V\==V1) -&gt;</p>
        <p>ClaB1=(I^K)^V:ClaB, append(MIA,[IV:Cla|MIB],MI1) ).</p>
        <p>The source code of nanoCoP-i 2.0 and nanoCoP-M 2.0 is shown in Fig. 8. The underlined text
is added to the nanoCoP code for classical logic. First, nanoCoP-i and nanoCoP-M perform a
classical proof search, in which the prefixes of each connection are stored in PreS. If the search
succeeds, the domain condition is checked using the predicate domain_cond (line 7) and the
prefixes in PreS are unified using the predicate prefix_unify (line 7). These predicates are
implemented by 18 and between 7 to 22 lines of code (depending on the logic), respectively.</p>
        <p>
          nanoCoP-i 2.0 and nanoCoP-M 2.0 are some of the fastest provers for first-order intuitionistic
logic and first-order modal logic (D, T, S4 and S5), respectively [
          <xref ref-type="bibr" rid="ref35">35</xref>
          ].
        </p>
      </sec>
    </sec>
    <sec id="sec-6">
      <title>6. Other CoPs — Re-Implementations and Machine Learning</title>
      <p>
        Several other provers are based on or were inspired by the leanCoP prover. More detailed
information about these provers can be found in the cited references.
6.1. randoCoP, leanCoP-SiNE, leanCoP-Ω and leanCoP on iPod
randoCoP [
        <xref ref-type="bibr" rid="ref40">40</xref>
        ] is a theorem prover for classical first-order logic, which integrates randomized
search techniques into the connection prover leanCoP 2.0. By randomly reordering the axioms
of the input problem/formula and the literals within its clausal form, the performance of the
incomplete search strategies of leanCoP 2.0, such as restricted backtracking, can be improved
significantly. A reordering strategy was later also integrated into leanCoP 2.1. At CASC in 2008,
randoCoP 1.1 was among the top three provers that return a proof in the core FOF division.
      </p>
      <p>
        leanCoP-SiNE is a theorem prover for classical first-order logic, which integrates the SiNE
preprocessor into leanCoP 2.1. SiNE [
        <xref ref-type="bibr" rid="ref41">41</xref>
        ] is an axiom selection system that uses a syntactic
approach based on predicate and function symbols in the input problem/formula to select
axioms that are (likely) relevant to find a proof. It significantly improves performance on very
large problems. At CASC in 2009, leanCoP-SiNE 2.1 ends up in third place in the proof class of
the SUMO reasoning prize.
      </p>
      <p>
        leanCoP-Ω is a prover for classical first-order logic with equality and interpreted functions
and predicates for linear integer arithmetic. It combines leanCoP 2.1 with the Omega 1.2 test
system [
        <xref ref-type="bibr" rid="ref42">42</xref>
        ]. The prover was developed in cooperation with Holger Trölenberg and Thomas
Raths. At CASC in 2010, leanCoP-Ω 0.1 wins the first (linear integer arithmetic) TFA division.
      </p>
      <p>
        leanCoP on iPod [
        <xref ref-type="bibr" rid="ref43">43</xref>
        ] is an implementation of leanCoP 2.1 on a (1st-generation) iPod nano.
An iPod nano is a very compact portable media/MP3 player with an 80 MHz ARM 7TDMI 32-bit
CPU and 32 MB of RAM, which was released in 2005. It shows how low leanCoP’s resource
requirements, in particular with respect to RAM are.
      </p>
      <sec id="sec-6-1">
        <title>6.2. Re-Implementations of leanCoP</title>
        <p>
          Re-implementations and extensions of leanCoP include lolliCoP (implemented in the linear
logic programming language Lolli) [
          <xref ref-type="bibr" rid="ref44">44</xref>
          ], fCoP (implemented in OCaml) [
          <xref ref-type="bibr" rid="ref45">45</xref>
          ], “C-leanCoP”
(implemented in C) [
          <xref ref-type="bibr" rid="ref46">46</xref>
          ], RACCOON/leanCoR (for the description logic ALC) [
          <xref ref-type="bibr" rid="ref47">47</xref>
          ], fleanCoP/fnanoCoP
(implemented in OCaml) [
          <xref ref-type="bibr" rid="ref48">48</xref>
          ], SATCoP (integrating a SAT solver) [
          <xref ref-type="bibr" rid="ref49">49</xref>
          ], meanCoP (implemented
in Rust) [
          <xref ref-type="bibr" rid="ref50">50</xref>
          ], Connect++ (in C++) [
          <xref ref-type="bibr" rid="ref51">51</xref>
          ], and pyCoP/ipyCoP/mpyCoP (in Python) [
          <xref ref-type="bibr" rid="ref52">52</xref>
          ].
        </p>
      </sec>
      <sec id="sec-6-2">
        <title>6.3. Machine Learning CoPs</title>
        <p>
          At TABLEAUX 2011, the MaLeCoP [
          <xref ref-type="bibr" rid="ref53">53</xref>
          ] prover was presented, one of the first implementations
that integrates Machine Learning (ML) into a theorem prover. It was the starting point for
a whole series of ML provers based on or inspired by leanCoP. Among them are MaLeCoP
(extends leanCoP by integrating ML techniques) [
          <xref ref-type="bibr" rid="ref53">53</xref>
          ] FEMaLeCoP (an optimized version of
MaLeCoP) [
          <xref ref-type="bibr" rid="ref54">54</xref>
          ], rlCoP (reinforcement learning using Monte Carlo search) [
          <xref ref-type="bibr" rid="ref55">55</xref>
          ], plCoP (extending
rlCoP and implemented in Prolog) [
          <xref ref-type="bibr" rid="ref56">56</xref>
          ], graphCoP (uses graph neural network models) [
          <xref ref-type="bibr" rid="ref57">57</xref>
          ],
monteCoP (using Monte Carlo Tree search) [
          <xref ref-type="bibr" rid="ref48">48</xref>
          ], lazyCoP (implements lazy paramodulation
and uses deep neural networks) [
          <xref ref-type="bibr" rid="ref58">58</xref>
          ], and FLoP (geared towards finding longer proofs) [
          <xref ref-type="bibr" rid="ref59">59</xref>
          ].
        </p>
      </sec>
    </sec>
    <sec id="sec-7">
      <title>7. Conclusion</title>
      <p>What started 20 years ago with seven lines of Prolog code, has established itself as a source and
starting point for the development of automated theorem provers for classical and non-classical
logics, as well as for the integration of machine learning into theorem provers. This happened
despite the fact that at the beginning, reception towards leanCoP was controversial and the
author faced some resistance even within his own community. Meanwhile, leanCoP has shown
that compact Prolog implementations are not only more flexible, extendable, “correct” and
easier to maintain than systems with ten thousands lines of low level language code, but they
can have state of the art performance. nanoCoP is perhaps the fastest prover that works on
the original formula structure, combining the advantages of more natural sequent and tableau
provers with the systematic and goal-oriented proof search of connection provers.10</p>
      <p>
        Perhaps the philosophy behind leanCoP is best summarized by Tony Hoare [
        <xref ref-type="bibr" rid="ref60">60</xref>
        ]: “I conclude
that there are two ways of constructing a software design: One way is to make it so simple that
there are obviously no deficiencies and the other way is to make it so complicated that there are
no obvious deficiencies. The first method is far more difficult. It demands the same skill, devotion,
insight, and even inspiration as the discovery of the simple physical laws which underlie the complex
phenomena of nature.”
      </p>
    </sec>
    <sec id="sec-8">
      <title>Acknowledgments</title>
      <p>The author would like to thank everyone who contributed directly or indirectly to the
development of the provers presented in this article, in particular Wolfgang Bibel for his continued,
generous support and (in alphabetical order) Christoph Benzmüller, Michael Färber, Christoph
Kreitz, Thomas Raths, Geoff Sutcliffe, Holger Trölenberg, Josef Urban, Arild Waaler and Lincoln
Wallen. Thanks also go to the anonymous reviewers for their helpful comments.
10The source code of leanCoP and all other provers presented in this paper can be downloaded at www.leancop.de.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>J.</given-names>
            <surname>Otten</surname>
          </string-name>
          , W. Bibel,
          <article-title>leanCoP: lean connection-based theorem proving</article-title>
          ,
          <source>Journal of Symbolic Computation</source>
          <volume>36</volume>
          (
          <year>2003</year>
          )
          <fpage>139</fpage>
          -
          <lpage>161</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>W.</given-names>
            <surname>Bibel</surname>
          </string-name>
          , Matings in matrices,
          <source>Communications of the ACM</source>
          <volume>26</volume>
          (
          <year>1983</year>
          )
          <fpage>844</fpage>
          -
          <lpage>852</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>W.</given-names>
            <surname>Bibel</surname>
          </string-name>
          ,
          <source>Automated Theorem Proving, Artificial intelligence, F. Vieweg und Sohn</source>
          ,
          <year>1987</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>B.</given-names>
            <surname>Beckert</surname>
          </string-name>
          , J. Posegga, leanTAP:
          <article-title>Lean tableau-based deduction</article-title>
          ,
          <source>Journal of Automated Reasoning</source>
          <volume>15</volume>
          (
          <year>1995</year>
          )
          <fpage>339</fpage>
          -
          <lpage>358</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>R.</given-names>
            <surname>Letz</surname>
          </string-name>
          , G. Stenz,
          <article-title>Model elimination and connection tableau procedures</article-title>
          , in: A.
          <string-name>
            <surname>Robinson</surname>
            ,
            <given-names>A</given-names>
          </string-name>
          . Voronkov (Eds.),
          <source>Handbook of Automated Reasoning, Elsevier Science</source>
          , Amsterdam,
          <year>2001</year>
          , pp.
          <fpage>2015</fpage>
          -
          <lpage>2112</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>G.</given-names>
            <surname>Gentzen</surname>
          </string-name>
          ,
          <article-title>Untersuchungen über das Logische Schließen</article-title>
          ,
          <source>Mathematische Zeitschrift</source>
          <volume>39</volume>
          (
          <year>1935</year>
          )
          <fpage>176</fpage>
          -
          <lpage>210</lpage>
          ,
          <fpage>405</fpage>
          -
          <lpage>431</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>R. M.</given-names>
            <surname>Smullyan</surname>
          </string-name>
          ,
          <string-name>
            <surname>First-Order</surname>
            <given-names>Logic</given-names>
          </string-name>
          ,
          <source>Ergebnisse der Mathematik und ihrer Grenzgebiete</source>
          , Springer-Verlag, Berlin, Heidelberg, New York,
          <year>1971</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>R.</given-names>
            <surname>Hähnle</surname>
          </string-name>
          ,
          <article-title>Tableaux and related methods</article-title>
          , in: A.
          <string-name>
            <surname>Robinson</surname>
            ,
            <given-names>A</given-names>
          </string-name>
          . Voronkov (Eds.),
          <source>Handbook of Automated Reasoning, Elsevier Science</source>
          , Amsterdam,
          <year>2001</year>
          , pp.
          <fpage>101</fpage>
          -
          <lpage>178</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <surname>J. A. Robinson,</surname>
          </string-name>
          <article-title>A machine-oriented logic based on the resolution principle</article-title>
          ,
          <source>Journal of ACM</source>
          <volume>12</volume>
          (
          <year>1965</year>
          )
          <fpage>23</fpage>
          -
          <lpage>41</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>W.</given-names>
            <surname>McCune</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Wos</surname>
          </string-name>
          ,
          <article-title>Otter - the CADE-13 competition incarnations</article-title>
          ,
          <source>Journal of Automated Reasoning</source>
          <volume>18</volume>
          (
          <year>1997</year>
          )
          <fpage>211</fpage>
          -
          <lpage>220</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>J.</given-names>
            <surname>Urban</surname>
          </string-name>
          , MPTP
          <volume>0</volume>
          .
          <article-title>2: Design, implementation, and initial experiments</article-title>
          ,
          <source>Journal of Automated Reasoning</source>
          <volume>37</volume>
          (
          <year>2006</year>
          )
          <fpage>21</fpage>
          -
          <lpage>43</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>J.</given-names>
            <surname>Otten</surname>
          </string-name>
          ,
          <article-title>Restricting backtracking in connection calculi</article-title>
          ,
          <source>AI Commun</source>
          .
          <volume>23</volume>
          (
          <year>2010</year>
          )
          <fpage>159</fpage>
          -
          <lpage>182</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          <source>[13] J. Otten, leanCoP 2.0 and ileanCoP 1</source>
          .
          <article-title>2: High performance lean theorem proving in classical and intuitionistic logic</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 LNAI</source>
          , Springer,
          <year>2008</year>
          , pp.
          <fpage>283</fpage>
          -
          <lpage>291</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>M. E.</given-names>
            <surname>Stickel</surname>
          </string-name>
          ,
          <article-title>A Prolog technology theorem prover: Implementation by an extended Prolog compiler</article-title>
          ,
          <source>Journal of Automated Reasoning</source>
          <volume>4</volume>
          (
          <year>1988</year>
          )
          <fpage>353</fpage>
          -
          <lpage>380</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>G.</given-names>
            <surname>Sutcliffe</surname>
          </string-name>
          , The CADE-21
          <source>automated theorem proving system competition</source>
          ,
          <source>AI Commun</source>
          .
          <volume>21</volume>
          (
          <year>2008</year>
          )
          <fpage>71</fpage>
          -
          <lpage>81</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>L.</given-names>
            <surname>Kovacs</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Voronkov</surname>
          </string-name>
          ,
          <string-name>
            <surname>First-Order Theorem</surname>
          </string-name>
          Proving and Vampire, in: N.
          <string-name>
            <surname>Sharygina</surname>
          </string-name>
          , H. Veith (Eds.),
          <source>Proceedings of the 25th International Conference on Computer Aided Verification, number 8044 in LNAI</source>
          , Springer,
          <year>2013</year>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>35</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>D. van Dalen</given-names>
            ,
            <surname>Intuitionistic</surname>
          </string-name>
          <string-name>
            <surname>Logic</surname>
          </string-name>
          , John Wiley &amp; Sons,
          <year>2017</year>
          , pp.
          <fpage>224</fpage>
          -
          <lpage>257</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>Y.</given-names>
            <surname>Bertot</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Castéran</surname>
          </string-name>
          ,
          <article-title>Interactive Theorem Proving and Program Development Coq'Art: The Calculus of Inductive Constructions</article-title>
          , EATCS Series, Springer, Heidelberg,
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>R. L.</given-names>
            <surname>Constable</surname>
          </string-name>
          , et al.,
          <article-title>Implementing Mathematics with the NuPRL proof development system</article-title>
          , Prentice-Hall, Englewood Cliffs, NJ,
          <year>1986</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>L. A.</given-names>
            <surname>Wallen</surname>
          </string-name>
          ,
          <source>Automated Deduction in Nonclassical Logics</source>
          , MIT Press, Cambridge,
          <year>1990</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <given-names>J.</given-names>
            <surname>Otten</surname>
          </string-name>
          ,
          <article-title>Clausal connection-based theorem proving in intuitionistic first-order logic</article-title>
          , in: B.
          <string-name>
            <surname>Beckert</surname>
          </string-name>
          (Ed.),
          <source>TABLEAUX</source>
          <year>2005</year>
          , volume
          <volume>3702</volume>
          <source>of LNAI</source>
          , Springer,
          <year>2005</year>
          , pp.
          <fpage>245</fpage>
          -
          <lpage>261</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <given-names>A.</given-names>
            <surname>Waaler</surname>
          </string-name>
          ,
          <article-title>Connections in nonclassical logics</article-title>
          , in: A.
          <string-name>
            <surname>Robinson</surname>
            ,
            <given-names>A</given-names>
          </string-name>
          . Voronkov (Eds.),
          <source>Handbook of Automated Reasoning, Elsevier Science</source>
          , Amsterdam,
          <year>2001</year>
          , pp.
          <fpage>1487</fpage>
          -
          <lpage>1578</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          [23]
          <string-name>
            <given-names>R.</given-names>
            <surname>Statman</surname>
          </string-name>
          ,
          <article-title>Intuitionistic propositional logic is polynomial-space complete</article-title>
          ,
          <source>Theoretical Computer Science</source>
          <volume>9</volume>
          (
          <year>1979</year>
          )
          <fpage>67</fpage>
          -
          <lpage>72</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          [24]
          <string-name>
            <given-names>S. A.</given-names>
            <surname>Cook</surname>
          </string-name>
          ,
          <article-title>The complexity of theorem-proving procedures</article-title>
          ,
          <source>in: Third Annual ACM Symposium on Theory of Computing</source>
          , ACM, New York,
          <year>1971</year>
          , pp.
          <fpage>151</fpage>
          -
          <lpage>158</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          [25]
          <string-name>
            <given-names>P.</given-names>
            <surname>Blackburn</surname>
          </string-name>
          ,
          <string-name>
            <surname>J. van Bentham</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Wolter</surname>
          </string-name>
          , Handbook of Modal Logic, Elsevier, Amsterdam,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          [26]
          <string-name>
            <given-names>M.</given-names>
            <surname>Fitting</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R. L.</given-names>
            <surname>Mendelsohn</surname>
          </string-name>
          ,
          <string-name>
            <surname>First-Order Modal</surname>
            <given-names>Logic</given-names>
          </string-name>
          , Kluwer, Dordrecht,
          <year>1998</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          [27]
          <string-name>
            <given-names>M.</given-names>
            <surname>Fitting</surname>
          </string-name>
          , Proof Methods for Modal and
          <string-name>
            <given-names>Intuitionistic</given-names>
            <surname>Logics</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Reidel</surname>
          </string-name>
          , Dordrecht,
          <year>1983</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref28">
        <mixed-citation>
          [28]
          <string-name>
            <given-names>J.</given-names>
            <surname>Otten</surname>
          </string-name>
          ,
          <article-title>Implementing connection calculi for first-order modal logics</article-title>
          , in: K. Korovin,
          <string-name>
            <given-names>S.</given-names>
            <surname>Schulz</surname>
          </string-name>
          , E. Ternovska (Eds.),
          <source>IWIL</source>
          <year>2012</year>
          , volume
          <volume>22</volume>
          of EPiC, EasyChair,
          <year>2012</year>
          , pp.
          <fpage>18</fpage>
          -
          <lpage>32</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref29">
        <mixed-citation>
          [29]
          <string-name>
            <given-names>J.</given-names>
            <surname>Otten</surname>
          </string-name>
          ,
          <article-title>MleanCoP: A connection prover for first-order modal logic</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 LNAI</source>
          , Springer,
          <year>2014</year>
          , pp.
          <fpage>269</fpage>
          -
          <lpage>276</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref30">
        <mixed-citation>
          [30]
          <string-name>
            <given-names>K.</given-names>
            <surname>Gödel</surname>
          </string-name>
          ,
          <article-title>An interpretation of the intuitionistic sentential logic</article-title>
          , in: J.
          <string-name>
            <surname>Hintikka</surname>
          </string-name>
          (Ed.),
          <source>The Philosophy of Mathematics</source>
          , Oxford University Press, Oxford,
          <year>1969</year>
          , pp.
          <fpage>128</fpage>
          -
          <lpage>129</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref31">
        <mixed-citation>
          [31]
          <string-name>
            <given-names>J.</given-names>
            <surname>Otten</surname>
          </string-name>
          ,
          <article-title>nanoCoP: A non-clausal connection prover</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 LNAI</source>
          , Springer,
          <year>2016</year>
          , pp.
          <fpage>302</fpage>
          -
          <lpage>312</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref32">
        <mixed-citation>
          [32]
          <string-name>
            <given-names>J.</given-names>
            <surname>Otten</surname>
          </string-name>
          , W. Bibel,
          <article-title>Advances in connection-based automated theorem proving</article-title>
          , in: M.
          <string-name>
            <surname>Hinchey</surname>
            ,
            <given-names>J. P.</given-names>
          </string-name>
          <string-name>
            <surname>Bowen</surname>
          </string-name>
          , E.-R. Olderog (Eds.),
          <source>Provably Correct Systems, NASA Monographs in Systems and Software Engineering</source>
          , Springer, Cham,
          <year>2017</year>
          , pp.
          <fpage>211</fpage>
          -
          <lpage>241</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref33">
        <mixed-citation>
          [33]
          <string-name>
            <given-names>T.</given-names>
            <surname>Raths</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Otten</surname>
          </string-name>
          ,
          <article-title>The QMLTP problem library for first-order modal logics</article-title>
          , in: B.
          <string-name>
            <surname>Gramlich</surname>
          </string-name>
          , et al. (Eds.),
          <source>IJCAR</source>
          <year>2012</year>
          , volume
          <volume>7364</volume>
          <source>of LNAI</source>
          , Springer,
          <year>2012</year>
          , pp.
          <fpage>454</fpage>
          -
          <lpage>461</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref34">
        <mixed-citation>
          [34]
          <string-name>
            <given-names>C.</given-names>
            <surname>Benzmüller</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Otten</surname>
          </string-name>
          , T. Raths,
          <article-title>Implementing and evaluating provers for first-order modal logics</article-title>
          , in: L.
          <string-name>
            <surname>De Raedt</surname>
          </string-name>
          , et al. (Eds.),
          <source>20th European Conference on Artificial Intelligence, ECAI</source>
          <year>2012</year>
          , IOS Press, Amsterdam,
          <year>2012</year>
          , pp.
          <fpage>163</fpage>
          -
          <lpage>168</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref35">
        <mixed-citation>
          [35]
          <string-name>
            <given-names>J.</given-names>
            <surname>Otten</surname>
          </string-name>
          ,
          <source>The nanoCoP 2</source>
          .
          <article-title>0 connection provers for classical, intuitionistic and modal logics</article-title>
          , in: A.
          <string-name>
            <surname>Das</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          Negri (Eds.),
          <source>TABLEAUX</source>
          <year>2021</year>
          , volume
          <volume>12842</volume>
          <source>of LNAI</source>
          , Springer,
          <year>2021</year>
          , pp.
          <fpage>236</fpage>
          -
          <lpage>249</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref36">
        <mixed-citation>
          [36]
          <string-name>
            <given-names>J.</given-names>
            <surname>Otten</surname>
          </string-name>
          , nanoCoP:
          <article-title>Natural non-clausal theorem proving</article-title>
          , in: C.
          <string-name>
            <surname>Sierra</surname>
          </string-name>
          (Ed.),
          <source>Proceedings of the Twenty-Sixth International Joint Conference on Artificial Intelligence, IJCAI-17</source>
          , Sister Conference Best Paper Track,
          <string-name>
            <surname>IJCAI</surname>
          </string-name>
          ,
          <year>2017</year>
          , pp.
          <fpage>4924</fpage>
          -
          <lpage>4928</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref37">
        <mixed-citation>
          [37]
          <string-name>
            <given-names>J.</given-names>
            <surname>Otten</surname>
          </string-name>
          ,
          <article-title>Non-clausal connection calculi for non-classical logics</article-title>
          , in: R.
          <string-name>
            <surname>Schmidt</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          Nalon (Eds.),
          <source>TABLEAUX</source>
          <year>2017</year>
          , volume
          <volume>10501</volume>
          <source>of LNAI</source>
          , Springer,
          <year>2017</year>
          , pp.
          <fpage>209</fpage>
          -
          <lpage>227</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref38">
        <mixed-citation>
          [38]
          <string-name>
            <given-names>J.</given-names>
            <surname>Otten</surname>
          </string-name>
          ,
          <article-title>A non-clausal connection calculus</article-title>
          , in: K. Brünnler, G. Metcalfe (Eds.),
          <source>TABLEAUX</source>
          <year>2011</year>
          , volume
          <volume>6793</volume>
          <source>of LNAI</source>
          , Springer,
          <year>2011</year>
          , pp.
          <fpage>226</fpage>
          -
          <lpage>241</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref39">
        <mixed-citation>
          [39]
          <string-name>
            <given-names>W.</given-names>
            <surname>Bibel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Otten</surname>
          </string-name>
          ,
          <article-title>From Schütte's formal systems to modern automated deduction</article-title>
          , in: R. Kahle, M. Rathjen (Eds.),
          <source>The Legacy of Kurt Schütte</source>
          , Springer, Cham,
          <year>2020</year>
          , pp.
          <fpage>217</fpage>
          -
          <lpage>251</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref40">
        <mixed-citation>
          [40]
          <string-name>
            <given-names>T.</given-names>
            <surname>Raths</surname>
          </string-name>
          ,
          <string-name>
            <surname>J. Otten,</surname>
          </string-name>
          <article-title>randoCoP: randomizing the proof search order in the connection calculus</article-title>
          , in: B.
          <string-name>
            <surname>Konev</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          <string-name>
            <surname>Schmidt</surname>
          </string-name>
          , S. Schulz (Eds.),
          <source>PAAR</source>
          <year>2008</year>
          , volume
          <volume>373</volume>
          <source>of CEUR Workshop Proceedings, CEUR-WS.org</source>
          ,
          <year>2008</year>
          , pp.
          <fpage>94</fpage>
          -
          <lpage>102</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref41">
        <mixed-citation>
          [41]
          <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>CADE-23</source>
          , volume
          <volume>6803</volume>
          <source>of LNCS</source>
          , Springer,
          <year>2011</year>
          , pp.
          <fpage>299</fpage>
          -
          <lpage>314</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref42">
        <mixed-citation>
          [42]
          <string-name>
            <given-names>W.</given-names>
            <surname>Pugh</surname>
          </string-name>
          ,
          <article-title>The omega test: A fast and practical integer programming algorithm for dependence analysis</article-title>
          ,
          <source>Communications of the ACM</source>
          <volume>31</volume>
          (
          <year>1992</year>
          )
          <fpage>4</fpage>
          -
          <lpage>13</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref43">
        <mixed-citation>
          [43]
          <string-name>
            <given-names>J.</given-names>
            <surname>Otten</surname>
          </string-name>
          ,
          <article-title>The pocket reasoner - automatic reasoning on small devices</article-title>
          ., in: E. B.
          <string-name>
            <surname>Johnsen</surname>
            ,
            <given-names>I. C.</given-names>
          </string-name>
          Yu (Eds.), Norwegian Informatics Conference,
          <string-name>
            <surname>NIK</surname>
          </string-name>
          <year>2018</year>
          ,
          <source>Open Journal Systems</source>
          ,
          <year>2018</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref44">
        <mixed-citation>
          [44]
          <string-name>
            <given-names>J. S.</given-names>
            <surname>Hodas</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Tamura</surname>
          </string-name>
          , lolliCoP
          <article-title>- A linear logic implementation of a lean connectionmethod theorem prover for first-order classical logic</article-title>
          , in: R.
          <string-name>
            <surname>Goré</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          <string-name>
            <surname>Leitsch</surname>
          </string-name>
          , T. Nipkow (Eds.),
          <source>IJCAR</source>
          <year>2001</year>
          , volume
          <volume>2083</volume>
          <source>of LNCS</source>
          , Springer,
          <year>2001</year>
          , pp.
          <fpage>670</fpage>
          -
          <lpage>684</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref45">
        <mixed-citation>
          [45]
          <string-name>
            <given-names>C.</given-names>
            <surname>Kaliszyk</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Urban</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Vyskočil</surname>
          </string-name>
          ,
          <article-title>Certified Connection Tableaux Proofs for HOL Light and TPTP</article-title>
          ,
          <source>in: Proceedings of the 2015 Conference on Certified Programs and Proofs (CPP</source>
          <year>2015</year>
          ), ACM,
          <year>2015</year>
          , pp.
          <fpage>59</fpage>
          -
          <lpage>66</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref46">
        <mixed-citation>
          [46]
          <string-name>
            <given-names>C.</given-names>
            <surname>Kaliszyk</surname>
          </string-name>
          ,
          <article-title>Efficient low-level connection tableaux</article-title>
          , in: H. de Nivelle (Ed.),
          <source>TABLEAUX</source>
          <year>2015</year>
          , volume
          <volume>9323</volume>
          <source>of LNCS</source>
          , Springer,
          <year>2015</year>
          , pp.
          <fpage>102</fpage>
          -
          <lpage>111</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref47">
        <mixed-citation>
          [47]
          <string-name>
            <surname>D. M. Filho</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          <string-name>
            <surname>Freitas</surname>
            ,
            <given-names>J. Otten,</given-names>
          </string-name>
          <article-title>RACCOON: A connection reasoner for the description logic ALC</article-title>
          , in: T.
          <string-name>
            <surname>Eiter</surname>
          </string-name>
          , D. Sands (Eds.),
          <source>LPAR-21</source>
          , volume
          <volume>46</volume>
          of EPiC, EasyChair,
          <year>2017</year>
          , pp.
          <fpage>200</fpage>
          -
          <lpage>211</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref48">
        <mixed-citation>
          [48]
          <string-name>
            <given-names>M.</given-names>
            <surname>Färber</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Kaliszyk</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Urban</surname>
          </string-name>
          ,
          <article-title>Machine learning guidance for connection tableaux</article-title>
          ,
          <source>Journal of Automated Reasoning</source>
          <volume>65</volume>
          (
          <year>2021</year>
          )
          <fpage>287</fpage>
          -
          <lpage>320</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref49">
        <mixed-citation>
          [49]
          <string-name>
            <given-names>M.</given-names>
            <surname>Rawson</surname>
          </string-name>
          , G. Reger,
          <article-title>Eliminating models during model elimination</article-title>
          , in: A.
          <string-name>
            <surname>Das</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          Negri (Eds.),
          <source>TABLEAUX</source>
          <year>2021</year>
          , volume
          <volume>12842</volume>
          <source>of LNCS</source>
          , Springer,
          <year>2021</year>
          , pp.
          <fpage>250</fpage>
          -
          <lpage>265</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref50">
        <mixed-citation>
          [50]
          <string-name>
            <given-names>M.</given-names>
            <surname>Färber</surname>
          </string-name>
          , Connection Provers in Rust,
          <year>2022</year>
          . URL: https://github.com/01mf02/cop-rs.
        </mixed-citation>
      </ref>
      <ref id="ref51">
        <mixed-citation>
          [51]
          <string-name>
            <given-names>S. B.</given-names>
            <surname>Holden</surname>
          </string-name>
          , Connect++
          <article-title>: A new automated theorem prover based on the connection calculus</article-title>
          , in: J.
          <string-name>
            <surname>Otten</surname>
          </string-name>
          , W. Bibel (Eds.),
          <source>Automated Reasoning with Connection Calculi</source>
          ,
          <source>AReCCa</source>
          <year>2023</year>
          , CEUR Workshop Proceedings, CEUR-WS.org, to appear, pp.
          <fpage>95</fpage>
          -
          <lpage>106</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref52">
        <mixed-citation>
          [52]
          <string-name>
            <given-names>F.</given-names>
            <surname>Rømming</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Otten</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S. B.</given-names>
            <surname>Holden</surname>
          </string-name>
          , Connections:
          <article-title>Markov decision processes for classical, intuitionistic, and modal connection calculi</article-title>
          , in: J.
          <string-name>
            <surname>Otten</surname>
          </string-name>
          , W. Bibel (Eds.),
          <source>Automated Reasoning with Connection Calculi</source>
          ,
          <source>AReCCa</source>
          <year>2023</year>
          , CEUR Workshop Proceedings, CEURWS.org, to appear, pp.
          <fpage>107</fpage>
          -
          <lpage>118</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref53">
        <mixed-citation>
          [53]
          <string-name>
            <given-names>J.</given-names>
            <surname>Urban</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Vyskocil</surname>
          </string-name>
          ,
          <string-name>
            <surname>P. Stepánek,</surname>
          </string-name>
          <article-title>MaLeCoP machine learning connection prover</article-title>
          , in: K. Brünnler, G. Metcalfe (Eds.),
          <source>TABLEAUX</source>
          <year>2011</year>
          , volume
          <volume>6793</volume>
          <source>of LNCS</source>
          , Springer,
          <year>2011</year>
          , pp.
          <fpage>263</fpage>
          -
          <lpage>277</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref54">
        <mixed-citation>
          [54]
          <string-name>
            <given-names>C.</given-names>
            <surname>Kaliszyk</surname>
          </string-name>
          ,
          <string-name>
            <surname>J. Urban,</surname>
          </string-name>
          <article-title>FEMaLeCoP: Fairly efficient machine learning connection prover</article-title>
          , in: M.
          <string-name>
            <surname>Davis</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          <string-name>
            <surname>Fehnker</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          <string-name>
            <surname>McIver</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          Voronkov (Eds.),
          <source>LPAR-20</source>
          , volume
          <volume>9450</volume>
          <source>of LNAI</source>
          , Springer,
          <year>2015</year>
          , pp.
          <fpage>88</fpage>
          -
          <lpage>96</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref55">
        <mixed-citation>
          [55]
          <string-name>
            <given-names>C.</given-names>
            <surname>Kaliszyk</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Urban</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Michalewski</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Olšák</surname>
          </string-name>
          ,
          <article-title>Reinforcement Learning of Theorem Proving</article-title>
          ,
          <source>in: Advances in Neural Information Processing Systems</source>
          , volume
          <volume>31</volume>
          ,
          <string-name>
            <surname>Curran</surname>
            <given-names>Associates</given-names>
          </string-name>
          , Inc.,
          <year>2018</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref56">
        <mixed-citation>
          [56]
          <string-name>
            <given-names>Z.</given-names>
            <surname>Zombori</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Urban</surname>
          </string-name>
          ,
          <string-name>
            <surname>C. E. Brown,</surname>
          </string-name>
          <article-title>Prolog technology reinforcement learning prover</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>12167</volume>
          <source>of LNAI</source>
          , Springer,
          <year>2020</year>
          , pp.
          <fpage>489</fpage>
          -
          <lpage>507</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref57">
        <mixed-citation>
          [57]
          <string-name>
            <given-names>M.</given-names>
            <surname>Olšák</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Kaliszyk</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Urban</surname>
          </string-name>
          ,
          <article-title>Property invariant embedding for automated reasoning</article-title>
          , in: G. D.
          <string-name>
            <surname>Giacomo</surname>
          </string-name>
          , et al. (Eds.),
          <source>ECAI</source>
          <year>2020</year>
          , volume
          <volume>325</volume>
          <source>of Frontiers in Artificial Intelligence and Applications</source>
          , IOS Press, Amsterdam,
          <year>2020</year>
          , pp.
          <fpage>1395</fpage>
          -
          <lpage>1402</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref58">
        <mixed-citation>
          [58]
          <string-name>
            <given-names>M.</given-names>
            <surname>Rawson</surname>
          </string-name>
          , G. Reger, lazyCoP: Lazy Paramodulation Meets Neurally Guided Search, in: A.
          <string-name>
            <surname>Das</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          Negri (Eds.),
          <source>TABLEAUX</source>
          <year>2021</year>
          , volume
          <volume>12842</volume>
          <source>of LNAI</source>
          , Springer,
          <year>2021</year>
          , pp.
          <fpage>187</fpage>
          -
          <lpage>199</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref59">
        <mixed-citation>
          [59]
          <string-name>
            <given-names>Z.</given-names>
            <surname>Zombori</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Csiszárik</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Michalewski</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Kaliszyk</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Urban</surname>
          </string-name>
          ,
          <article-title>Towards finding longer proofs</article-title>
          , in: A.
          <string-name>
            <surname>Das</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          Negri (Eds.),
          <source>TABLEAUX</source>
          <year>2021</year>
          , volume
          <volume>12842</volume>
          <source>of LNCS</source>
          , Springer,
          <year>2021</year>
          , pp.
          <fpage>167</fpage>
          -
          <lpage>186</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref60">
        <mixed-citation>
          [60]
          <string-name>
            <given-names>C. A. R.</given-names>
            <surname>Hoare</surname>
          </string-name>
          ,
          <article-title>The emperor's old clothes</article-title>
          ,
          <source>Communications of the ACM</source>
          <volume>24</volume>
          (
          <year>1981</year>
          )
          <fpage>75</fpage>
          -
          <lpage>83</lpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>