<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Florian Pollitt</string-name>
          <email>pollittf@cs.uni-freiburg.de</email>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Mathias Fleury</string-name>
          <email>fleury@cs.uni-freiburg.de</email>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Armin Biere</string-name>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Marijn Heule</string-name>
          <email>marijn@cmu.edu</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Karem Sakallah</string-name>
          <email>karem@umich.edu</email>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Jiawei Chen</string-name>
          <email>chenjw@umich.edu</email>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Yonathan Fisseha</string-name>
          <email>yonathan@umich.edu</email>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Carnegie Mellon University</institution>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>University of Freiburg</institution>
        </aff>
        <aff id="aff2">
          <label>2</label>
          <institution>University of Michigan</institution>
          ,
          <country country="US">USA</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2025</year>
      </pub-date>
      <fpage>153</fpage>
      <lpage>167</lpage>
      <abstract>
        <p>We explain in detail how we reimplemented vivification in our award winning solvers and then, focusing on Kissat, report on experiments on an interesting scalable factoring benchmark suite which helped us to find and remove a subtle performance regression in the vivification code. While SAT solvers spend most of their time running the conflict-driven clause learning (CDCL) procedure [1], all winners of the SAT Competition since 2014 interleave this “search” procedure with other procedures globally transforming the formula, i.e., techniques collectively referred to as inprocessing [2]. They aim either to simplify the formula in ways that CDCL cannot or help it to run faster. There are diferent types of inprocessing techniques. Some like variable elimination [ 3] and variable addition [4] do not preserve models, but only equisatisfiability (requiring models to be fixed). Other techniques reduce duplicated information over variables, like equivalent literal substitution (ELS) [5]. Finally, many diferent techniques remove duplicated information within clauses, including subsumption or self-subsuming resolution. They are based on combining two clauses, either to show that one subsumes the other or to generate a shorter subsuming clause by resolving the two clauses. The focus of this work is one of the key inprocessing techniques, referred to as distillation [6], which also has been independently discovered and described as vivification [7]. We adopt the term “vivification” for this paper, in line with more recent literature [8, 9]. This technique generalizes self-subsuming resolution by utilizing multiple clauses to produce a shorter subsuming clause, rather than just resolving two. The process leverages the optimized unit propagation component of a SAT solver. In particular it is useful to simplify and remove learned “glue clauses” [10] which otherwise are kept indefinitely. The vivification algorithm must diferentiate among various scenarios involving the detection of subsumed clauses, their deletion, or their strengthening (aka. shrinking). We discuss how vivification has been implemented in our solvers, Kissat [11], since 2023, and in CaDiCaL (part of version 2.2-rc2) both with respect to how exactly clauses are “vivified” and vivification is scheduled. While working on a new scalable family of benchmarks factoring (Sec. 3), based on proving that no factorization of a prime number is possible, we observed an interesting performance regression in Kissat. After quite some debugging efort, we noticed that fewer clauses were deleted, which we then traced down to keeping more clauses during vivification. This lead to a solver slowdown accumulating over time, yielding much worse performance on these remarkable benchmarks.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;SAT solving</kwd>
        <kwd>inprocessing</kwd>
        <kwd>simplification</kwd>
        <kwd>vivification</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>
        In this paper, we discuss our new vivification algorithm implemented in both CaDiCaL and Kissat
and how it is scheduled. A major diference to our original vivification implementation in CaDiCaL [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ]
in 2018 is that the old version of vivification first worked on irredundant (original) clauses before
vivifying redundant ones. Further, now, overall scheduling as well as the time-budget allocated to
vivification is based on ticks (as a deterministic proxy of running time – similar to Knuth’s “mems” [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]),
and total vivification efort is explicitly split between clauses with diferent clause quality, i.e., redundant
tier-1, tier-2, tier-3, and irredundant clauses (Sec. 4). We further present how our new vivification
algorithm detects subsumed clauses on-the-fly, but otherwise mostly focus on clause deletion (Sec. 5).
      </p>
      <p>Our experiments (Sec. 6) show that considerable run-time variation can be observed for diferent
choices of removing or keeping a redundant clause during vivification. We also show that vivification
candidates are frequently subsumed. Still, the most common case of successful vivification are shorter
clauses as well as removing clauses due to finding an implied literal. Finally, we show that ticks-based
scheduling and limiting vivification efort is efective across diferent benchmarks.</p>
    </sec>
    <sec id="sec-2">
      <title>2. Vivification Algorithm</title>
      <p>
        For background on SAT, we refer to the Handbook of Satisfiability [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ]. Vivification relies mostly on unit
propagation of literals and on a dedicated conflict analysis similar to “analyze-final” in MiniSat [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ]
producing decision-only learned clauses. For related work on pre- and inprocessing (simplification before
running and during running CDCL), we also refer to the corresponding chapter of the Handbook [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ].
      </p>
      <p>
        Given a candidate clause the idea of vivification [
        <xref ref-type="bibr" rid="ref6 ref7">6, 7</xref>
        ] is to iteratively assume all its literals to be
false. Between each assumption / decision, the solver fully propagates all other clauses, ignoring the
candidate clause. Otherwise, the candidate clause would propagate the last unset literal.
      </p>
      <p>As in CDCL (actually as in DPLL already), if a conflict is found with the decisions ¬ℓ1, ¬ℓ2, . . . , ¬ℓ,
we know that the clause  := ℓ1 ∨ ℓ2 ∨ · · · ∨ ℓ is entailed by the formula. Therefore, it can be used to
strengthen the candidate clause  as follows:
• if the clause  is a strict subset of , then  subsumes , so we can strengthen the candidate
clause  by simply replacing  with the shorter clause  (also called “shrinking” );
• similarly, if the negation of one literal of  is propagated instead before being assigned as decision,
we can remove it from , i.e., also strengthening the candidate clause;
• otherwise, if a literal ℓ of  is propagated positively, then ℓ is implied, we assume that the
propagation power of  is covered by others, it is redundant and can be removed.</p>
      <p>
        Vivification had minor impact in 2007 and 2008, when it was originally described, but started to
shine in 2017 [
        <xref ref-type="bibr" rid="ref8 ref9">9, 8</xref>
        ], where a solver with a new variant of vivification won the SAT Competition 2017.
The important idea was that vivification should not only be applied to irredundant (equisatisfiable to
the original) clauses but also to redundant (learned) clauses, i.e., during inprocessing. In contrast to
our implementation and description of vivification above, Li et al. [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] propose to use a dedicated but
more general conflict analysis, which potentially can learn a completely diferent new clause, instead of
focusing on decision-only learned clauses, i.e., sub-sets of the candidate clause, as we do.
      </p>
      <p>
        Vivification was subsequently implemented in various solvers including Glucose (in the version that
entered the 2018 SAT Competition as the first and currently only inprocessing technique implemented
in Glucose [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ]) and CaDiCaL [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] in 2018.
      </p>
    </sec>
    <sec id="sec-3">
      <title>3. Factoring Benchmarks</title>
      <p>
        We created a new set of unsatisfiable benchmarks based on factoring prime numbers available at
https://github.com/m-fleury/sat-factoring-generator. For a fixed prime number (represented by a bit
vector of an appropriate bitwidth), we assert that there are two numbers (greater than one) whose
product generates said prime number (Alg. 1). We then simply use Bitwuzla [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ] to bit-blast this
SMT-LIB bit vector problem into CNF.
generate-factoring-smt (prime, bitwidth) // C++ like output stream with “&lt;&lt;”
&lt;&lt; "(set-info :smt-lib-version 2.6)"
&lt;&lt; "(set-logic QF_BV)"
&lt;&lt; "(declare-fun a () " &lt;&lt; bv-type (bitwidth) &lt;&lt; ")" // SMT-LIB constants for inputs and output
&lt;&lt; "(declare-fun c () " &lt;&lt; bv-type (bitwidth) &lt;&lt; ")"
&lt;&lt; "(declare-fun d () " &lt;&lt; bv-type (bitwidth) &lt;&lt; ")"
&lt;&lt; "(assert (= a (bvmul c d)))"
&lt;&lt; "(assert (= a #b" &lt;&lt; binary (prime, bitwidth) &lt;&lt; "))" // fix the output to “ prime”
&lt;&lt; "(assert (not (= c #b" &lt;&lt; binary (1, bitwidth) &lt;&lt; ")))" // avoid “one” as one of the factors
&lt;&lt; "(assert (not (= d #b" &lt;&lt; binary (1, bitwidth) &lt;&lt; ")))"
&lt;&lt; "(assert (not (bvumulo c d)))" // ensure no overflow during multiplication
&lt;&lt; "(check-sat)"
&lt;&lt; "(exit)"
      </p>
      <p>Algorithm 1: Generating SMT Formula
create-benchmarks (lower-bitwidth, upper-bitwidth, primes-per-bitwidth)
for current-bitwidth from lower-bitwidth to higher-bitwidth
low = (1 &lt;&lt; current-bitwidth) // “&lt;&lt;” = bit-shifting
high = (1 &lt;&lt; (current-bitwidth + 1))
increment = (high - low) / primes-per-bitwidth
for  from 1 to primes-per-bitwidth
lower-limit = (1 &lt;&lt; current-bitwidth) + increment * ( - 1)
upper-limit = (1 &lt;&lt; current-bitwidth) + increment * 
prime = find-smallest-prime-between (lower-limit, upper-limit)
if prime generate-factoring-smt (prime, current-bitwidth)</p>
      <p>// (non-random) uniform distribution</p>
      <sec id="sec-3-1">
        <title>Algorithm 2: Generating Factoring Family</title>
        <p>To obtain a benchmark set scaling in size and dificulty to solve, we generate a fixed number of
primes for each bitwidth (primes-per-bitwidth), uniformly distributed in the entire range which can be
expressed by this number of bits, forcing the most-significant bit to true (Alg. 2). To our surprise (see
Fig. 1), this actually created a remarkable family of unsatisfiable benchmarks scaling very nicely: the
runtime increases slowly and predictably, and it is easy to produce more benchmarks by increasing the
number of generated instances for each bitwidth, as well as harder benchmarks with larger bit-width.</p>
        <p>
          We attempted to produce scalable satisfiable benchmarks too by taking as starting point the product
of two prime numbers (prime numbers that are close to each other). However, the generated problems
turned out to be too easy (even for large numbers). A related benchmark set of satisfiable instances was
evaluated in [
          <xref ref-type="bibr" rid="ref18">18</xref>
          ] using [
          <xref ref-type="bibr" rid="ref19">19</xref>
          ] to generate CNF, while we rely on SMT-based bit blasting.
        </p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>4. Scheduling and Ordering</title>
      <p>There are three major questions when implementing vivification:
• How often to vivify?
• Which clauses should be vivified?
• In which order should the literals of a clause be assumed?
We answer these questions on an abstract level and dive into some additional details below. The
next Section 5 provides concrete pseudo-code with a more detailed discussion, high-lighting specific
s
d
n
o
c
e
s
n
i
e
m
it
g
n
il
v
o
s
0
1
5
implementation aspects. Ultimately the reader is invited to explore the actual implementation in Kissat
or CaDiCaL (available for instance on GitHub1).</p>
      <p>How often? How often vivification should be scheduled could be considered to be part of the “black
art” of SAT solver design. In CaDiCaL and Kissat, probing (including vivification) is scheduled in
increasing ( log ) conflict intervals. The duration of running one vivification round during probing
inprocessing is limited by the number of “ticks” taken during propagation while vivifying in relation
to the number of ticks consumed by CDCL search since the last time vivification was run. Ticks refer
to an estimation of memory access and are used as a deterministic proxy to actual time. For instance
visiting a clause during propagation counts as one tick. Ticks correlate well with running time, but
still allow fully deterministic behavior of the solver. Limiting time spent in vivification is necessary, as
unbounded vivification until completion is too costly on most instances.</p>
      <p>
        Which clauses? Li et al. [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] advocate to vivify only clauses with low LBD [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ], because larger LBD
clauses are expected to be less relevant and more expensive to vivify. Both CaDiCaL (2.2-rc2) and
Kissat work diferently: they determine a fixed budget of ticks spent on each kind of clauses; the
budget is split between irredundant, tier-1, tier-2, and tier-3 clauses, where the tiers are defined by fixed
(or dynamically calculated) LBD thresholds. Therefore, fewer tier-3 (high LBD) clauses are vivified
achieving a similar limiting efect, but without completely disregarding them.
      </p>
      <p>
        Li et al. [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] further suggest re-vivifying a clause only once when its LBD has decreased twice, in order
to avoid spending too much time in vivification. We do not explicitly limit our vivification procedure in
this way, but prioritize clauses that could not be vivified in the previous inprocessing round (as the
corresponding ticks budget was exhausted). As our solvers rarely manage to vivify all clauses, this
achieves a similar efect of not retrying a clause before the formula changed considerably.
      </p>
      <p>Initially we vivified first tier-3, followed by tier-2, tier-1 and finally irredundant clauses. The argument
was that vivification might remove redundant clauses and potentially promote shrunken clauses to a
smaller tier, e.g., larger clauses from tier-2 could be shrunken to size 3 and thus become part of tier-1. It
seemed natural to schedule them again immediately during the same vivification round.</p>
      <p>However, in practice there are usually fewer tier-1 than tier-2 followed by tier-3 clauses and many
more irredundant clauses. If vivification completes vivification of one tier with fewer clauses it is
beneficial to use the remaining vivification ticks budget for the next tier with more clauses. Otherwise
the ticks budget is wasted. As consequence of this argument, our latest version of vivification first
vivifies tier-1, then tier-2, followed by tier-3 clauses, and finally irredundant clauses.
1https://github.com/arminbiere/kissat/blob/master/src/vivify.c and https://github.com/arminbiere/cadical/blob/rel-2.2.0-rc2/src/vivify.cpp
What order? Finally, the question remains in which order the decisions should be picked, when
vivifying a candidate clause. Instead of choosing a heuristic based on the best expected result, CaDiCaL
and Kissat build an implicit prefix tree (or trie) of the clauses, which allows us to reuse decisions and
propagations over diferent candidate clauses, i.e., we do not necessarily backtrack between vivification
of two candidates. The order of decisions follows the prefix tree, maximizing reusability (throughput).</p>
      <p>
        In fact, this simulates the trie-data-structure in distillation [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ], without the need to explicitly transform
the CNF into a trie. Reusing propagation efort has also been the target of other related techniques [
        <xref ref-type="bibr" rid="ref20 ref21">20, 21</xref>
        ].
To maximize the efect, the candidate clause (and prefix tree) is sorted by literal occurrences (number
of positive or negative occurrences). Note, however, that CaDiCaL until version 2.1 used a weighted
occurrence count similar to the Jeroslow-Wang heuristic [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ] instead.
      </p>
      <p>Further, sorting the candidate stack lexicographically (also with respect to literal occurrence – taking
into account separately positive and negative occurrences of variables) would maximize reusability,
however this can be too costly. Instead, we can only consider the first literal (or first two literals in
CaDiCaL) in each clause for sorting the stack, which allows us to use the faster radix sort (faster
compared to C++’s default stable std::stable_sort).</p>
      <p>Our experiments show, that building a prefix tree saves roughly 30% of decisions (median for both
the factoring benchmarks as well as the SAT Competition 2024 benchmarks is 33%). This also saves
propagations and makes it possible to vivify many more clauses within the same ticks budget.
Further discussion. A minor subtlety is that the propagation of vivification should ignore the
candidate clause but should still update it to make sure that the watched literals invariants are valid.
Otherwise, propagations might be missed for subsequent clauses. Similarly, if the candidate clause was
propagating, the solver cannot reuse the last decision level (without loosing propagations). Not doing
so does not lead to issues in the subsequent CDCL loops, because at the end of vivification, the solver
backtracks to decision level zero, implicitly restoring watch invariants of the ignored clauses.</p>
      <p>To reiterate on sorting candidate clauses, it is of course important that sorting is fast. Considering
only one or two literals gives big speed-ups. However, one also looses certain potential advantages
compared to sorting lexicographically as was done in CaDiCaL previously. Actually the Kissat version
considered in the experiments uses a mixed strategy of lexicographic sorting for redundant clauses, i.e.,
tier-1, tier-2, and tier-3 clauses, and sorting irredundant clauses with respect to a single most occurring
literal in a clause (the considered fixed number of literals is a compile-time parameter). Storing these
one or two literals separately has another advantage: we keep the clauses watched without reordering
it, leading to hopefully good watches and no very long watch lists which you would need if you put
literals appearing the most often first.</p>
      <p>It is important to use a stable sorting algorithm for determinism and debugging (which is substantially
slower than default non-stable algorithms). When sorting with respect to the complete prefix tree,
uniquely determining the position of each clause, it is possible to use a non-stable algorithm. The only
issue in this regard is if the same clause occurs multiple times. This however can be detected cheaply
and solved by removing one of them (vivifyflush option in CaDiCaL, activated by default).</p>
      <p>It is also possible to detect subsumed clauses during candidate sorting: when comparing clauses with a
shared prefix and one clause is identical to that shared prefix the longer clause is subsumed by the shorter.
This technique requires sorting each individual clause first and updating watches accordingly. We did
not see any performance improvements in CaDiCaL due to employing this subsumption technique.</p>
      <p>
        Other solvers use diferent sorting scheme: For instance Glucose 4.2.1 [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] does not sort the candidate
clauses but simply takes the current order. Alternatively CryptoMiniSat [
        <xref ref-type="bibr" rid="ref23">23</xref>
        ] uses either the number
of occurrences or the order induced by the VSIDS decision heuristic [
        <xref ref-type="bibr" rid="ref24">24</xref>
        ]. The ParaFROST solver [
        <xref ref-type="bibr" rid="ref25">25</xref>
        ]
vivifies tier-1 and tier-2 clauses separately but within one tier sorts candidate clauses by literals.
vivify (CNF  ) // CNF updated in place / passed by reference
ticks-budget = search-ticks-since-last-vivificationstats × relative-vivification-efort option
tier-1-budget = ticks-budget × relative-tier-1-budgetoption
tier-2-budget = ticks-budget × relative-tier-2-budgetoption
tier-3-budget = ticks-budget × relative-tier-3-budgetoption
irredundant-budget = ticks-budget × relative-irredundant-budgetoption
remaining-ticks = vivify-tier( , tier-1 clauses of  , tier1-budget)
remaining-ticks = vivify-tier( , tier-2 clauses of  , tier2-budget + remaining-ticks)
remaining-ticks = vivify-tier( , tier-3 clauses of  , tier3-budget + remaining-ticks)
vivify-tier( , irredundant clauses of  , irredundant-budget + remaining-ticks)
      </p>
      <p>Algorithm 3: Main vivification inprocessing algorithm scheduled from CDCL loop.
vivify-tier (CNF  , CNF , ticks-budget) // update subset of clauses in original CNF in place
limit = ticksstats + ticks-budget // global variable “ticksstats” updated during propagation
sort literals in clauses  ∈  by number of occurrences (more occurrences first)
let 1 be the sub-set of clauses of  which were not tried during vivification last time
let 2 = ∖1 // new clauses or clauses already tried last time
sort 1 and separately 2 lexicographically w.r.t. literal occurrences (more first)
// decision level set to zero at this point
for all clauses  in the sequence 1, 2 sorted as in line 5 as long ticksstats &lt; limit
if vivify-clause ( , ) then increment vivifiedstats
backtrack to decision level zero
if ticksstats &gt; limit return 0 // incomplete – remember untried clauses
return limit − ticksstats // return unused ticks budget – no untried clauses remembered</p>
      <p>Algorithm 4: Vivifying one “tier” of clauses under a given ticks budget.</p>
    </sec>
    <sec id="sec-5">
      <title>5. Revisited Algorithm</title>
      <p>
        The revisited vivification algorithm vivify in Alg. 3 is called in Kissat from the probing inprocessing
procedure, after clausal congruence closure [
        <xref ref-type="bibr" rid="ref26">26</xref>
        ], equivalent literal substitution (ELS) [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] and binary
backbone computation [
        <xref ref-type="bibr" rid="ref27">27</xref>
        ]. It is followed by bounded clausal SAT sweeping [
        <xref ref-type="bibr" rid="ref28">28</xref>
        ], another round of ELS,
transitive reduction of the binary implication graph [
        <xref ref-type="bibr" rid="ref29">29</xref>
        ], a second round of binary backbone computation
and finally bounded variable addition (BVA) [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. Probing is called in increasing conflict intervals from
the main CDCL search loop, i.e., the conflict interval before it is rerun after its -th invocation is set
to “probe-intervaloption ·  · log10( + 9)” for some base conflict interval probe-intervaloption (default is
100 conflicts, which is also the initial conflict interval before the first probing round).
      </p>
      <p>The ticks-budget computed at (line 1 in Alg. 3) is then split (line 2-4) into a fixed fraction for each
of the tiers (according to run-time options). We hand over any remaining-ticks of the budget to the
next tier, with vivification of irredundant clauses last (line 9), as it is usually the most costly tier to run
vivification until completion (at least initially, for bigger formulas). The four calls to vivify-tier in Alg. 3
(line 6-9) consider only specific tier clauses as candidates to vivify as second argument. We formally also
give a reference to the global formula  as argument, to emphasize that Boolean constraint propagation
(unit-resolution) is always performed on the whole formula (line 12 in Alg. 5).</p>
      <p>The vivify-tier function is shown in Alg. 4. It first, as already discussed in the previous Sect. 4,
determines a total ticks limit on propagation efort for all considered candidate clauses , based on
the given budget (line 1). Then all candidates have their literals sorted by the number of occurrences
(line 2) in order to subsequently (line 5) allow sorting the clauses lexicographically w.r.t. the literal
occurrences. Before the candidates  are split into two sets 1 and 2 (line 3-4) prioritizing left-over
vivify-clause (CNF  , clause ) // update  and  in place
mark  as having been tried // puts it in 2 next time
let  = ℓ1 ∨ · · · ∨ ℓ sorted by number of occurrences (more occurrences first)
ifnd maximal  such that ℓ is assigned to false at decision level  for all  &lt;  // reuse trail
if  &gt; 0 and decision level larger than  − 1 backtrack to decision level  − 1
add  − 1 to both probesstats and reusedstats // reused  decisions / probes
literal implied = ⊥, clause conflict = ⊥ // initialize both to be undefined denoted as “ ⊥”
for  =  . . .  as long conflict = ⊥ // and implied = ⊥
if ℓ is assigned to false continue
if ℓ is assigned to true then implied = ℓ and break
increase decision level and assign ℓ to false, increment probesstats
// temporarily disable propagation over , i.e.,  is simply skipped during propagation
conflict = propagate ( , ) // update global assignment and ticksstats
// now we have either implied ̸= ⊥, conflict ̸= ⊥, or  is falsified by the current assignment
(subsuming, learned, irredundant) = vivify-analyze (, conflict, implied)
if subsuming ̸= ⊥
remove  from  , increment subsumedstats and return true
// . . . and need to make “subsuming” irredundant if it was redundant but  not
if |learned| &lt; || // actually “learned ⊂ ” as it is a decision learned clause</p>
      <p>replace  in  by learned, increment shrunkenstats and return true
if implied ̸= ⊥ and  redundant
// regression version “without-implied” would only return false but the “default” version has:
remove  from  , increment impliedstats and return true
conflicting = conflict ̸= ⊥ ∨ implied ̸= ⊥
if conflicting and  irredundant as well as analysis resolved only irredundant clauses
remove  from  , increment asymmetricstats and return true
if implied ̸= ⊥ and vivify-instantiate ( , , ℓ) //  falsified at decision level</p>
      <p>remove ℓ from , increment instantiatedstats and return true
return false</p>
      <sec id="sec-5-1">
        <title>Algorithm 5: Vivifiying a single clause candidate.</title>
        <p>candidates not tried last time vivification was run. This prioritization makes sure that all clauses of a
tier are vivified in a round-robin fashion, i.e., clauses are tried at least once before being attempted to
be vivified again. Note, that this scheme of vivification by tiers in combination with separate but fixed
relative ticks budgets allows to complete vivification of tiers with fewer clauses earlier and more often.</p>
        <p>Alg. 5 gives a high-level overview on our revisited clause vivification algorithm vivify-clause for
vivifying a single candidate clause. It maintains a global assignment that is not reset between diferent
candidates, i.e., subsequent calls to this function. Instead it reuses the trail as much as possible, in order
to reduce the number of necessary propagations to vivify the candidate.</p>
        <p>The propagation procedure called at line 12 ignores the candidate clause  given as argument and
further updates the global ticksstats statistics counter. It approximates non-local cache line access, similar
to Knuth’s “mems” statistics (counting the number of pointer dereferences instead). Counting ticks is
only an approximation and the result of profiling runs and inspecting the code, i.e., the programmer
adds instructions which increase the ticks counter whenever the program reaches a point, where a
non-local memory access is expected. Access to the same cache line (e.g., propagating many virtual
binary clauses for the same literal) is counted only once. Even though less automatic to implement,
ticks are more precise than mems, i.e., correlate better with actual running time.</p>
        <p>The function vivify-analyze (line 13) is a standard conflict analysis routine, similar to “analyze-final”
in MiniSat. It returns a decision-only learned clause, which is a subset of the negations of decisions, that
lead to the given conflict, derive the implied literal or (if both are undefined) to falsify the given candidate
clause. It further checks on-the-fly whether any of the resolved clauses subsumes the candidate clause.
In this case it aborts the analysis and returns the subsuming clause. Otherwise it returns the learned
clause and determines whether all resolved clauses in deriving the learned clause are irredundant.</p>
        <p>
          The function vivify-instantiate (line 24) originates from a CaDiCaL hack CaDiCaL _vivinst [
          <xref ref-type="bibr" rid="ref30">30</xref>
          ]
submitted to the SAT Competition 2023, taking first place in the hack track and third place in the main
track on satisfiable instances. After all the literals in the candidate clause are assigned and the clause
could not be subsumed nor shrunken, i.e., the candidate clause is falsified and all its literals are decisions,
we backtrack one level and assign the last literal ℓ to true. If then propagation fails we know that
we can remove ℓ. This is similar to variable instantiation [
          <xref ref-type="bibr" rid="ref31">31</xref>
          ], targeting to remove literals with few
occurrences, such that they become pure or can be eliminated by variable elimination later.
        </p>
        <p>What is missing in the high-level description of Alg. 5 is when (if at all) and to which level to backtrack
to after shrinking a clause and successful instantiation. If the procedure fails but a conflict was deduced
we might need additional backtracking too, as well as explicitly reestablish clause-watching invariants
for the candidate clause (as it was skipped during propagation). Further note, that sorting literals within
clauses during scheduling in vivify-tier (line 2 in Alg. 4) as well as during candidate clause vivification
in vivify-clause (line 2 in Alg. 5) should be done on copies of the clauses in separate data-structures to
keep watch-invariants intact (or as alternatives either reestablish them before propagation or use an
approximate short list of literals only – cf. Sect. 4).</p>
        <p>The procedure has 5 positive cases in which a candidate clause is vivifiedstats (line 7 in Alg. 4) and thus
the candidate clause is shrunken (replaced by a strict subset of literals) or removed. These correspond to
incrementing in Alg. 5 the statistics counters subsumedstats (line 15), shrunkenstats (line 17), impliedstats
(line 20), asymmetricstats (line 23) and instantiatedstats (line 25) with returning true. Otherwise the
procedure fails returning false (line 26) and keeps the candidate as is. The next section evaluates how
often these cases occur in practice (cf. Fig. 6 and 7).</p>
      </sec>
    </sec>
    <sec id="sec-6">
      <title>6. Experiments</title>
      <p>We ran Kissat version sc2024 as submitted to the SAT Competition 2024 on all 400 problems of the SAT
Competitions 2023 and 2024 and our 750 factoring benchmarks using the bwForCluster Helix with AMD
Milan EPYC 7513 CPUs and a time limit of 5000 seconds. More precisely we used four configurations of
Kissat: the default configuration, matching the description in Fig. 5 (including removing implied literal
candidates - keeping line 18-20 in Alg. 5 as is); versus the keep-implied configuration which keeps
implied clauses (returning false at line-20 in Alg. 5 without removing the candidate); the discard-both
configuration (replacing the condition “ implied ̸= ⊥” with “implied ̸= ⊥ ∨ conflict ̸= ⊥” at line-18 in
Alg. 5 which, if triggered, not only removes clauses with an implied literal but also conflicting candidate
clauses); finally the no-vivify configuration which disables vivification completely.</p>
      <p>On the 400 problems of the SAT Competitions 2023 and 2024 (Figures 2 and 3), the performance
does not difer much, but the default version performs best. Interestingly, it seems that completely
deactivating vivification does not make much of a diference on these instances anyhow. However, on
our factoring benchmarks the diference between the configurations is important (Fig. 4). For these
benchmarks, the discard-both configuration performs slightly better than the default configuration.</p>
      <p>In an intermediate version of Kissat we accidentally introduced the keep-implied variant, probably, as
it might appear that implied literal candidates should be treated the same way as conflicting candidates.
Note, that the diference only becomes relevant if a redundant clause candidate is not subsumed nor
shrunken during vivification (we reach line 18 in Alg. 3 and a literal is implied or we found a conflict).
These factoring benchmarks however revealed, that these two cases should be diferentiated.</p>
      <p>On competition benchmarks keeping conflicting but discarding implied literal candidates works best
(default), while for the factoring benchmarks, discarding implied literal candidates is a must (default
vs. keep-implied even though discard-both is even better). After we observed this regression empirically,
ifnding the root cause was rather dificult. Only after realizing that the regression version would keep
for long running benchmarks many more learned clauses, it became clear that we should search for
code where clauses are removed in one version and kept in the other. Furthermore, it was the first time
we observed such an almost linear line in a run-time scatter-plot of SAT solvers (cf. Fig. 5, right plot).</p>
      <p>To give more insight into the impact of vivification and how often specific cases of Alg. 5 occur we
have extracted statistics for the default configuration. Figure 6 shows the ratio and amount of time
the solver spends in vivification with respect to search and overall time on the factoring benchmarks.
These quantities scale very nicely on this benchmark set, as is evidenced by the fact that we can sort by
just one criterion, always plotting the same benchmark in one cross-section. Looking at the vivification
statistics (cf. end of Sect. 5), the percentages between the diferent cases are almost constant, only
asymmetricstats seems to tail of for the harder instances. The impliedstats clauses make out almost 40%
of all positive vivified clauses, explaining the regression we can observe in the previous plots. These
statistics on the SAT Competition 2024 benchmarks vary more but similar trends can be observed
(Fig. 8, 9). A diference overall seems to be the number of subsumed clausesstats, which is similar to
shrunkenstats and impliedstats on these instances, compared to about half for the factoring benchmarks.</p>
    </sec>
    <sec id="sec-7">
      <title>7. Conclusion</title>
      <p>We gave a deep dive into technical details of the implementation of our latest version of vivification in
our SAT solvers Kissat and CaDiCaL. Beside explaining the novel feature of on-the-fly subsumption
we further reported on an interesting performance regression we observed due to a subtle diference
of two versions of vivification, difering only in the choice of removing a vivification candidate with
an implied literal or not. Keeping them lead to a regression. It was detected on a new set of factoring
benchmark which by itself is quite remarkable as it yields very smooth run-time scaling behavior. Our
experiments reveal that all the considered special cases during vivification do occur in practice, but
most frequently, successfully vivified clauses are either shrunken, subsumed or have an implied literal,
while successful instantiation or asymmetric literal elimination in irredundant clauses occurs rarely.
0
0
3
400 instances (100%)
297 instances (74%)
s
d
n
o
c
e
s
0
0
0
5
f
o
it
m
li
297 default
291 discard−both
290 keep−implied
288 no−vivify
325 instances (81%)
0
1000
2000
3000
4000
5000
0
2
3
0
0
3
0
8
2
0
6
2
0
5
7
0
0
7
0
5
6
0
0
6</p>
      <p>0 1000 2000 3000 4000 5000
Figure 4: Performance of various Kissat configuration on our new 750 factoring benchmarks described in Sect. 3.
Again axis follow the common practice how results of the SAT competition are presented (as in Fig. 2+3 too).</p>
    </sec>
    <sec id="sec-8">
      <title>Acknowledgments</title>
      <p>This work was supported in part by the state of Baden-Württemberg through bwHPC, the German
Research Foundation (DFG) through grant INST 35/1597-1 FUGG, and by a gift from Intel Corporation.</p>
    </sec>
    <sec id="sec-9">
      <title>Declaration on Generative AI</title>
      <p>The authors partially used Mistral AI with a "fix typos" prompt for grammar and spell-checking. After
using that tool, the authors reviewed and edited content as needed and take full responsibility for the
publication’s content.
325 default
324 discard−both
320 no−vivify
319 keep−implied
750 discard−both
750 default
750 keep−implied
712 no−vivify
satisfiable
unsatisfiable
unsatisfiable
linear regression
)
s
d
n
o
c
e
s
n
i
e
m
it(
lt
u
a
f
e
d
0
0
0
5
0
0
0
4
0
0
0
3
0
0
0
2
0
0
0
5
0
8
0
6
0
4
0
2
0
0
0
1
0
8
0
6
0
4
0
2
0
100
150
200
250
300
0
0
1
0
8
0
6
0
4
0
2
0
0
4
0
2
0
0</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>J.</given-names>
            <surname>Marques-Silva</surname>
          </string-name>
          ,
          <string-name>
            <given-names>I.</given-names>
            <surname>Lynce</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Malik</surname>
          </string-name>
          ,
          <article-title>Conflict-driven clause learning SAT solvers</article-title>
          , in: A.
          <string-name>
            <surname>Biere</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Heule</surname>
          </string-name>
          , H. van Maaren, T. Walsh (Eds.),
          <source>Handbook of Satisfiability - Second Edition</source>
          , volume
          <volume>336</volume>
          <source>of Frontiers in Artificial Intelligence and Applications</source>
          , IOS Press,
          <year>2021</year>
          , pp.
          <fpage>133</fpage>
          -
          <lpage>182</lpage>
          . doi:
          <volume>10</volume>
          .3233/ FAIA200987.
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>M.</given-names>
            <surname>Järvisalo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Heule</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Biere</surname>
          </string-name>
          ,
          <article-title>Inprocessing rules</article-title>
          , in: B.
          <string-name>
            <surname>Gramlich</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          <string-name>
            <surname>Miller</surname>
            ,
            <given-names>U.</given-names>
          </string-name>
          Sattler (Eds.),
          <source>Automated Reasoning - 6th International Joint Conference, IJCAR</source>
          <year>2012</year>
          ,
          <article-title>Manchester</article-title>
          ,
          <string-name>
            <surname>UK</surname>
          </string-name>
          , June 26-29,
          <year>2012</year>
          . Proceedings, volume
          <volume>7364</volume>
          of Lecture Notes in Computer Science, Springer,
          <year>2012</year>
          , pp.
          <fpage>355</fpage>
          -
          <lpage>370</lpage>
          . doi:
          <volume>10</volume>
          .1007/978-3-
          <fpage>642</fpage>
          -31365-3_
          <fpage>28</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>N.</given-names>
            <surname>Eén</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Biere</surname>
          </string-name>
          ,
          <article-title>Efective preprocessing in SAT through variable and clause elimination</article-title>
          , in: F. Bacchus, T. Walsh (Eds.),
          <source>Theory and Applications of Satisfiability Testing</source>
          , 8th International Conference, SAT 2005,
          <article-title>St</article-title>
          . Andrews,
          <string-name>
            <surname>UK</surname>
          </string-name>
          , June 19-23,
          <year>2005</year>
          , Proceedings, volume
          <volume>3569</volume>
          of Lecture Notes in Computer Science, Springer,
          <year>2005</year>
          , pp.
          <fpage>61</fpage>
          -
          <lpage>75</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>N.</given-names>
            <surname>Manthey</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Heule</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Biere</surname>
          </string-name>
          ,
          <source>Automated reencoding of boolean formulas</source>
          , in: A.
          <string-name>
            <surname>Biere</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          <string-name>
            <surname>Nahir</surname>
            ,
            <given-names>T. E. J.</given-names>
          </string-name>
          <string-name>
            <surname>Vos</surname>
          </string-name>
          (Eds.),
          <source>Hardware and Software: Verification and Testing - 8th International Haifa Verification Conference, HVC</source>
          <year>2012</year>
          , Haifa, Israel, November 6-
          <issue>8</issue>
          ,
          <year>2012</year>
          .
          <source>Revised Selected Papers</source>
          , volume
          <volume>7857</volume>
          of Lecture Notes in Computer Science, Springer,
          <year>2012</year>
          , pp.
          <fpage>102</fpage>
          -
          <lpage>117</lpage>
          . doi:
          <volume>10</volume>
          .1007/ 978-3-
          <fpage>642</fpage>
          -39611-3_
          <fpage>14</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>A. V.</given-names>
            <surname>Gelder</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y. K.</given-names>
            <surname>Tsuji</surname>
          </string-name>
          ,
          <article-title>Satisfiability testing with more reasoning and less guessing</article-title>
          , in: D. S. Johnson, M. A.
          <string-name>
            <surname>Trick</surname>
          </string-name>
          (Eds.), Cliques, Coloring, and
          <string-name>
            <surname>Satisfiability</surname>
          </string-name>
          ,
          <source>Proceedings of a DIMACS Workshop</source>
          , New Brunswick, New Jersey, USA, October
          <volume>11</volume>
          -
          <issue>13</issue>
          ,
          <year>1993</year>
          , volume
          <volume>26</volume>
          <source>of DIMACS Series in Discrete Mathematics and Theoretical Computer Science</source>
          , DIMACS/AMS,
          <year>1993</year>
          , pp.
          <fpage>559</fpage>
          -
          <lpage>586</lpage>
          . doi:
          <volume>10</volume>
          .1090/DIMACS/026/27.
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>H.</given-names>
            <surname>Han</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Somenzi</surname>
          </string-name>
          ,
          <string-name>
            <surname>Alembic:</surname>
          </string-name>
          <article-title>An eficient algorithm for CNF preprocessing</article-title>
          ,
          <source>in: Proceedings of the 44th Design Automation Conference</source>
          ,
          <string-name>
            <surname>DAC</surname>
          </string-name>
          <year>2007</year>
          , San Diego, CA, USA, June 4-8,
          <year>2007</year>
          , IEEE,
          <year>2007</year>
          , pp.
          <fpage>582</fpage>
          -
          <lpage>587</lpage>
          . doi:
          <volume>10</volume>
          .1145/1278480.1278628.
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>C.</given-names>
            <surname>Piette</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y.</given-names>
            <surname>Hamadi</surname>
          </string-name>
          , L. Sais,
          <article-title>Vivifying propositional clausal formulae</article-title>
          , in: M.
          <string-name>
            <surname>Ghallab</surname>
            ,
            <given-names>C. D.</given-names>
          </string-name>
          <string-name>
            <surname>Spyropoulos</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          <string-name>
            <surname>Fakotakis</surname>
            ,
            <given-names>N. M.</given-names>
          </string-name>
          <string-name>
            <surname>Avouris</surname>
          </string-name>
          (Eds.),
          <source>ECAI 2008 - 18th European Conference on Artificial Intelligence</source>
          , Patras, Greece,
          <source>July 21-25</source>
          ,
          <year>2008</year>
          , Proceedings, volume
          <volume>178</volume>
          <source>of Frontiers in Artificial Intelligence and Applications</source>
          , IOS Press,
          <year>2008</year>
          , pp.
          <fpage>525</fpage>
          -
          <lpage>529</lpage>
          . doi:
          <volume>10</volume>
          .3233/978-1-
          <fpage>58603</fpage>
          -891-5-525.
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>C.</given-names>
            <surname>Li</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Xiao</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Luo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Manyà</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Z.</given-names>
            <surname>Lü</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y.</given-names>
            <surname>Li</surname>
          </string-name>
          ,
          <article-title>Clause vivification by unit propagation in CDCL SAT solvers</article-title>
          ,
          <source>Artif. Intell</source>
          .
          <volume>279</volume>
          (
          <year>2020</year>
          ). doi:
          <volume>10</volume>
          .1016/J.ARTINT.
          <year>2019</year>
          .
          <volume>103197</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>M.</given-names>
            <surname>Luo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Li</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Xiao</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Manyà</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Z.</given-names>
            <surname>Lü</surname>
          </string-name>
          ,
          <article-title>An efective learnt clause minimization approach for CDCL SAT solvers</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</source>
          <year>2017</year>
          , Melbourne, Australia,
          <source>August 19-25</source>
          ,
          <year>2017</year>
          , ijcai.org,
          <year>2017</year>
          , pp.
          <fpage>703</fpage>
          -
          <lpage>711</lpage>
          . doi:
          <volume>10</volume>
          .24963/IJCAI.
          <year>2017</year>
          /98.
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>G.</given-names>
            <surname>Audemard</surname>
          </string-name>
          , L. Simon,
          <article-title>Predicting learnt clauses quality in modern SAT solvers</article-title>
          , in: C.
          <string-name>
            <surname>Boutilier</surname>
          </string-name>
          (Ed.),
          <source>IJCAI 2009, Proceedings of the 21st International Joint Conference on Articfiial Intelligence</source>
          , Pasadena, California, USA, July
          <volume>11</volume>
          -
          <issue>17</issue>
          ,
          <year>2009</year>
          , Morgan Kaufmann Publishers Inc., San Francisco, CA, USA,
          <year>2009</year>
          , pp.
          <fpage>399</fpage>
          -
          <lpage>404</lpage>
          . URL: http://ijcai.org/Proceedings/09/Papers/074.pdf.
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>A.</given-names>
            <surname>Biere</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Faller</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Fazekas</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Fleury</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Froleyks</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Pollitt</surname>
          </string-name>
          , CaDiCaL, Gimsatul,
          <source>IsaSAT and Kissat entering the SAT Competition</source>
          <year>2024</year>
          , in: M.
          <string-name>
            <surname>Heule</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Iser</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Järvisalo</surname>
          </string-name>
          , M. Suda (Eds.),
          <source>Proc. of SAT Competition 2024 - Solver, Benchmark and Proof Checker Descriptions, volume B-2024-1 of Department of Computer Science Report Series B</source>
          , University of Helsinki,
          <year>2024</year>
          , pp.
          <fpage>8</fpage>
          -
          <lpage>10</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>A.</given-names>
            <surname>Biere</surname>
          </string-name>
          , CaDiCaL, Lingeling, Plingeling,
          <source>Treengeling and YalSAT Entering the SAT Competition</source>
          <year>2018</year>
          , in: M.
          <string-name>
            <surname>Heule</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Järvisalo</surname>
          </string-name>
          , M. Suda (Eds.),
          <source>Proc. of SAT Competition 2018 - Solver and Benchmark Descriptions</source>
          , volume
          <string-name>
            <surname>B-</surname>
          </string-name>
          <year>2018</year>
          -1 of Department of Computer Science Series of Publications B, University of Helsinki,
          <year>2018</year>
          , pp.
          <fpage>13</fpage>
          -
          <lpage>14</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>D. E.</given-names>
            <surname>Knuth</surname>
          </string-name>
          ,
          <source>The Art of Computer Programming</source>
          , Volume
          <volume>4</volume>
          ,
          <string-name>
            <surname>Fascicle</surname>
            <given-names>4</given-names>
          </string-name>
          :
          <string-name>
            <given-names>Generating</given-names>
            <surname>All TreesHistory of Combinatorial</surname>
          </string-name>
          <article-title>Generation (Art of Computer Programming)</article-title>
          ,
          <string-name>
            <surname>Addison-Wesley Professional</surname>
          </string-name>
          ,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>A.</given-names>
            <surname>Biere</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Järvisalo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Kiesl</surname>
          </string-name>
          ,
          <article-title>Preprocessing in SAT solving</article-title>
          , in: A.
          <string-name>
            <surname>Biere</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Heule</surname>
          </string-name>
          , H. van Maaren, T. Walsh (Eds.),
          <source>Handbook of Satisfiability</source>
          , volume
          <volume>336</volume>
          <source>of Frontiers in Artificial Intelligence and Applications</source>
          , 2nd edition ed., IOS Press,
          <year>2021</year>
          , pp.
          <fpage>391</fpage>
          -
          <lpage>435</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>N.</given-names>
            <surname>Eén</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Sörensson</surname>
          </string-name>
          ,
          <article-title>An extensible SAT-solver</article-title>
          , in: E.
          <string-name>
            <surname>Giunchiglia</surname>
            ,
            <given-names>A</given-names>
          </string-name>
          . Tacchella (Eds.),
          <source>Theory and Applications of Satisfiability Testing</source>
          , 6th International Conference,
          <string-name>
            <surname>SAT</surname>
          </string-name>
          <year>2003</year>
          .
          <article-title>Santa Margherita Ligure</article-title>
          , Italy, May 5-
          <issue>8</issue>
          , 2003 Selected Revised Papers, volume
          <volume>2919</volume>
          of Lecture Notes in Computer Science, Springer,
          <year>2003</year>
          , pp.
          <fpage>502</fpage>
          -
          <lpage>518</lpage>
          . doi:
          <volume>10</volume>
          .1007/978-3-
          <fpage>540</fpage>
          -24605-3_
          <fpage>37</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>G.</given-names>
            <surname>Audemard</surname>
          </string-name>
          , L. Simon,
          <article-title>Glucose and Syrup: Nine years in the SAT competitions</article-title>
          , in: M.
          <string-name>
            <surname>Heule</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Järvisalo</surname>
          </string-name>
          , M. Suda (Eds.),
          <source>Proc. of SAT Competition 2018 - Solver and Benchmark Descriptions</source>
          , volume
          <string-name>
            <surname>B-</surname>
          </string-name>
          <year>2018</year>
          -1 of Department of Computer Science Series of Publications B, University of Helsinki,
          <year>2018</year>
          , pp.
          <fpage>24</fpage>
          -
          <lpage>25</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>A.</given-names>
            <surname>Niemetz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Preiner</surname>
          </string-name>
          , Bitwuzla, in: C.
          <string-name>
            <surname>Enea</surname>
            ,
            <given-names>A</given-names>
          </string-name>
          . Lal (Eds.),
          <source>Computer Aided Verification - 35th International Conference, CAV 2023</source>
          , Paris, France,
          <source>July 17-22</source>
          ,
          <year>2023</year>
          , Proceedings,
          <string-name>
            <surname>Part</surname>
            <given-names>II</given-names>
          </string-name>
          , volume
          <volume>13965</volume>
          of Lecture Notes in Computer Science, Springer,
          <year>2023</year>
          , pp.
          <fpage>3</fpage>
          -
          <lpage>17</lpage>
          . doi:
          <volume>10</volume>
          .1007/ 978-3-
          <fpage>031</fpage>
          -37703-
          <issue>7</issue>
          _
          <fpage>1</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <surname>M. L. Ginsberg</surname>
          </string-name>
          , Satsisfiability and systematicity,
          <source>J. Artif. Intell. Res</source>
          .
          <volume>53</volume>
          (
          <year>2015</year>
          )
          <fpage>497</fpage>
          -
          <lpage>540</lpage>
          . doi:
          <volume>10</volume>
          . 1613/JAIR.4684.
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>P.</given-names>
            <surname>Purdom</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Sabry</surname>
          </string-name>
          ,
          <article-title>CNF generator for factoring problems</article-title>
          ,
          <year>2005</year>
          . URL: https://cgi.luddy.indiana. edu/~sabry/cnf.html.
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <surname>P. van der Tak</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Ramos</surname>
          </string-name>
          ,
          <string-name>
            <surname>M.</surname>
          </string-name>
          <article-title>Heule, Reusing the assignment trail in CDCL solvers</article-title>
          ,
          <source>J. Satisf. Boolean Model. Comput</source>
          .
          <volume>7</volume>
          (
          <year>2011</year>
          )
          <fpage>133</fpage>
          -
          <lpage>138</lpage>
          . doi:
          <volume>10</volume>
          .3233/SAT190082.
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <given-names>M.</given-names>
            <surname>Heule</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Järvisalo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Biere</surname>
          </string-name>
          ,
          <article-title>Revisiting hyper binary resolution</article-title>
          , in: C. P. Gomes, M. Sellmann (Eds.),
          <article-title>Integration of AI and OR Techniques in Constraint Programming for Combinatorial Optimization Problems</article-title>
          , 10th International Conference, CPAIOR 2013,
          <string-name>
            <surname>Yorktown</surname>
            <given-names>Heights</given-names>
          </string-name>
          ,
          <string-name>
            <surname>NY</surname>
          </string-name>
          , USA, May
          <volume>18</volume>
          -22,
          <year>2013</year>
          . Proceedings, volume
          <volume>7874</volume>
          of Lecture Notes in Computer Science, Springer,
          <year>2013</year>
          , pp.
          <fpage>77</fpage>
          -
          <lpage>93</lpage>
          . URL: https://doi.org/10.1007/978-3-
          <fpage>642</fpage>
          -38171-
          <issue>3</issue>
          _
          <fpage>6</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <given-names>R. G.</given-names>
            <surname>Jeroslow</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Wang</surname>
          </string-name>
          ,
          <article-title>Solving propositional satisfiability problems</article-title>
          , Ann. Math. Artif. Intell.
          <volume>1</volume>
          (
          <year>1990</year>
          )
          <fpage>167</fpage>
          -
          <lpage>187</lpage>
          . doi:
          <volume>10</volume>
          .1007/BF01531077.
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          [23]
          <string-name>
            <given-names>M.</given-names>
            <surname>Soos</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Nohl</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Castelluccia</surname>
          </string-name>
          ,
          <article-title>Extending SAT solvers to cryptographic problems</article-title>
          , in: O.
          <string-name>
            <surname>Kullmann</surname>
          </string-name>
          (Ed.),
          <source>Theory and Applications of Satisfiability Testing - SAT</source>
          <year>2009</year>
          , 12th International Conference, SAT 2009,
          <article-title>Swansea</article-title>
          ,
          <string-name>
            <surname>UK</surname>
          </string-name>
          , June 30 - July 3,
          <year>2009</year>
          . Proceedings, volume
          <volume>5584</volume>
          of Lecture Notes in Computer Science, Springer,
          <year>2009</year>
          , pp.
          <fpage>244</fpage>
          -
          <lpage>257</lpage>
          . doi:
          <volume>10</volume>
          .1007/978-3-
          <fpage>642</fpage>
          -02777-2_
          <fpage>24</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          [24]
          <string-name>
            <given-names>Y. S.</given-names>
            <surname>Mahajan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Z.</given-names>
            <surname>Fu</surname>
          </string-name>
          , S. Malik, zChaf
          <year>2004</year>
          :
          <article-title>An eficient SAT solver</article-title>
          , in: H. H.
          <string-name>
            <surname>Hoos</surname>
          </string-name>
          , D. G. Mitchell (Eds.),
          <source>Theory and Applications of Satisfiability Testing, 7th International Conference, SAT 2004</source>
          , Vancouver, BC, Canada, May
          <volume>10</volume>
          -13,
          <year>2004</year>
          , Revised Selected Papers, volume
          <volume>3542</volume>
          of Lecture Notes in Computer Science, Springer,
          <year>2004</year>
          , pp.
          <fpage>360</fpage>
          -
          <lpage>375</lpage>
          . doi:
          <volume>10</volume>
          .1007/11527695_
          <fpage>27</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          [25]
          <string-name>
            <given-names>M.</given-names>
            <surname>Osama</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Wijs</surname>
          </string-name>
          ,
          <article-title>GPU acceleration of bounded model checking with parafrost</article-title>
          , in: A.
          <string-name>
            <surname>Silva</surname>
          </string-name>
          ,
          <string-name>
            <surname>K. R. M. Leino</surname>
          </string-name>
          (Eds.),
          <source>Computer Aided Verification - 33rd International Conference, CAV</source>
          <year>2021</year>
          ,
          <string-name>
            <given-names>Virtual</given-names>
            <surname>Event</surname>
          </string-name>
          ,
          <source>July 20-23</source>
          ,
          <year>2021</year>
          , Proceedings,
          <string-name>
            <surname>Part</surname>
            <given-names>II</given-names>
          </string-name>
          , volume
          <volume>12760</volume>
          of Lecture Notes in Computer Science, Springer,
          <year>2021</year>
          , pp.
          <fpage>447</fpage>
          -
          <lpage>460</lpage>
          . doi:
          <volume>10</volume>
          .1007/978-3-
          <fpage>030</fpage>
          -81688-9_
          <fpage>21</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          [26]
          <string-name>
            <given-names>A.</given-names>
            <surname>Biere</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Fazekas</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Fleury</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Froleyks</surname>
          </string-name>
          ,
          <article-title>Clausal congruence closure</article-title>
          , in: S. Chakraborty,
          <string-name>
            <given-names>J. R.</given-names>
            <surname>Jiang</surname>
          </string-name>
          (Eds.),
          <source>27th International Conference on Theory and Applications of Satisfiability Testing, SAT 2024, August 21-24</source>
          ,
          <year>2024</year>
          , Pune, India, volume
          <volume>305</volume>
          of LIPIcs,
          <source>Schloss Dagstuhl - Leibniz-Zentrum für Informatik</source>
          ,
          <year>2024</year>
          , pp.
          <volume>6</volume>
          :
          <fpage>1</fpage>
          -
          <lpage>6</lpage>
          :
          <fpage>25</fpage>
          . doi:
          <volume>10</volume>
          .4230/LIPICS.SAT.
          <year>2024</year>
          .
          <volume>6</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          [27]
          <string-name>
            <given-names>N.</given-names>
            <surname>Froleyks</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E.</given-names>
            <surname>Yu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Biere</surname>
          </string-name>
          , BIG backbones, in: A.
          <string-name>
            <surname>Nadel</surname>
            , K. Y. Rozier (Eds.), Formal Methods in Computer-Aided Design,
            <given-names>FMCAD</given-names>
          </string-name>
          <year>2023</year>
          ,
          <article-title>Ames</article-title>
          ,
          <string-name>
            <surname>IA</surname>
          </string-name>
          , USA, October
          <volume>24</volume>
          -
          <issue>27</issue>
          ,
          <year>2023</year>
          , IEEE,
          <year>2023</year>
          , pp.
          <fpage>162</fpage>
          -
          <lpage>167</lpage>
          . doi:
          <volume>10</volume>
          .34727/2023/ISBN.978-3-
          <fpage>85448</fpage>
          -060-0_
          <fpage>24</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref28">
        <mixed-citation>
          [28]
          <string-name>
            <given-names>A.</given-names>
            <surname>Biere</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Fazekas</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Fleury</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
            <surname>Froleyks</surname>
          </string-name>
          ,
          <article-title>Clausal equivalence sweeping</article-title>
          , in: N.
          <string-name>
            <surname>Narodytska</surname>
            , P. Rümmer (Eds.), Formal Methods in Computer-Aided Design,
            <given-names>FMCAD</given-names>
          </string-name>
          <year>2024</year>
          , Prague, Czech Republic,
          <source>October 15-18</source>
          ,
          <year>2024</year>
          , IEEE,
          <year>2024</year>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>6</lpage>
          . doi:
          <volume>10</volume>
          .34727/2024/ISBN.978-3-
          <fpage>85448</fpage>
          -065-5_
          <fpage>29</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref29">
        <mixed-citation>
          [29]
          <string-name>
            <given-names>M.</given-names>
            <surname>Heule</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Järvisalo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Biere</surname>
          </string-name>
          ,
          <article-title>Clause elimination procedures for CNF formulas</article-title>
          , in: C. G. Fermüller,
          <string-name>
            <surname>A</surname>
          </string-name>
          . Voronkov (Eds.),
          <source>Logic for Programming</source>
          ,
          <source>Artificial Intelligence, and Reasoning - 17th International Conference, LPAR-17</source>
          , Yogyakarta, Indonesia,
          <source>October 10-15</source>
          ,
          <year>2010</year>
          . Proceedings, volume
          <volume>6397</volume>
          of Lecture Notes in Computer Science, Springer,
          <year>2010</year>
          , pp.
          <fpage>357</fpage>
          -
          <lpage>371</lpage>
          . doi:
          <volume>10</volume>
          .1007/ 978-3-
          <fpage>642</fpage>
          -16242-8_
          <fpage>26</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref30">
        <mixed-citation>
          [30]
          <string-name>
            <given-names>A.</given-names>
            <surname>Biere</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Fleury</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Pollitt</surname>
          </string-name>
          , CaDiCaL_vivinst, IsaSAT, Gimsatul, Kissat, and
          <article-title>TabularaSAT entering the SAT competition 2023</article-title>
          , in: T. Balyo,
          <string-name>
            <given-names>N.</given-names>
            <surname>Froleyks</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Heule</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Iser</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Järvisalo</surname>
          </string-name>
          , M. Suda (Eds.),
          <source>Proc. of SAT Competition 2023 - Solver and Benchmark Descriptions</source>
          , volume
          <string-name>
            <surname>B-</surname>
          </string-name>
          <year>2023</year>
          -1 of Department of Computer Science Report Series B, University of Helsinki,
          <year>2023</year>
          , pp.
          <fpage>14</fpage>
          -
          <lpage>15</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref31">
        <mixed-citation>
          [31]
          <string-name>
            <given-names>G.</given-names>
            <surname>Andersson</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Bjesse</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Cook</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Z.</given-names>
            <surname>Hanna</surname>
          </string-name>
          ,
          <article-title>A proof engine approach to solving combinational design automation problems</article-title>
          ,
          <source>in: Proceedings of the 39th Design Automation Conference</source>
          ,
          <string-name>
            <surname>DAC</surname>
          </string-name>
          <year>2002</year>
          ,
          <article-title>New Orleans</article-title>
          , LA, USA, June 10-14,
          <year>2002</year>
          , ACM,
          <year>2002</year>
          , pp.
          <fpage>725</fpage>
          -
          <lpage>730</lpage>
          . doi:
          <volume>10</volume>
          .1145/513918.514101.
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>