cryptominisat4 man page

cryptominisat — conflict-driven SAT solver


cryptominisat [Options] <input-files>


CryptoMiniSat is a SAT solver, solving problems given in CNF, or conjunctive normal form. CryptoMiniSat retains much of the API of MiniSat, but offers more versatility and better speed on many problems.

The program is a classical conflict-driven solver, with variable activities, clause learning and clause deletion. It however incorporates a number of advanced CNF simplification functionalities which should help the speed of solving. Further, it incorporates some advanced memory-management features that should help in getting the most out of modern CPU caches.

The input format is that of DIMACS CNF, i.e. a header of the form


where VARS is the number of variables, and CLAUSES is the number of clauses in the problem. It then lists the set of clauses such as:

1 -2 0

which is equivalent to the 2-long clause "v1 OR NOT v2 = TRUE"


Print help text.
Print cryptominisat's version number.
--input = <file1,file2,...>
Specify the file(s) to read.
-r,--random = <seed> [0 - 2^32-1]
Sets the random seed, used for picking decision variables (default = 0).
-t,--threads = <num> [1..]
Number of threads (default is 1).
--sync = <num>
Sync threads every num conflicts (default = 6000).
--maxtime = <num>
Stop solving after this much time, print stats and exit.
--maxconfl = <num>
Stop solving after this many conflicts, print stats and exit.
--occsimp = {0,1}
Perform occurrence-list-based optimizations, such as variable eliminiation, subsumption, and bounded variable addition. Default is 1.
--clbtwsimp = <num>
Perform this many cleaning iterations between simplification rounds (default = 2).
-d,--drup = {0,1}
Put DRUP verification information into this file.
--drupexistscheck = {0,1}
Check if the DRUP file provided already exists (default = 1).
--drupdebug = {0,1}
Output DRUP verification to the console. This is helpful to see where DRUP fails. Use in conjunction with --verb 20.


--agilg = <num>
See paper by Armin Biere on agilities.
--restart = {geom,agility,glue,glueagility}
Choose the restart strategy to follow.
--agillim = <num>
The agility below which the agility is considered too low (default = 0.03).
--agilviollim = <num>
The number of agility violations over which to demand a restart (default = 20).
--gluehist = <num>
The size of the moving window for short term glue history of redundant clauses (default = 100). If higher, the minimal number of conflicts between restarts is longer.
--blkrest = {0,1}
Perform blocking restarts as per Glucose 3.0 (default = 1).
--blkrestlen = <num>
The length of the long term trail size for blocking restart (default = 5000).
--blkrestmultip = <num>
Multiplier used for blocking restart cut-off, called "R" in Glucose 3.0 (default = 1.4).


--verb = <num> [0-10]
Verbosity of the solver (default = 2). Verbosity 0 only prints the results.
--verbstat = {0,1}
Turns off verbose stats if needed (default = 1).
--printfull = {0,1}
Print more thorough, but different, stats (default = 0).
-s,--printsol = {0,1}
Print the satisfying assignment if the solution is SAT (default = 1).
--printtrail = <num>
Print the longest decision trail of the last N conflicts; if 0, the decision trail is not printed (default = 0).
--printbest = <num>
Print the best N irredundant longer-than-3 learnt clauses; if 0, nothing is printed (default = 0).
--printtimes = {0,1}
Print the time taken for each simplification run; if 0, nothing is printed, which makes logs easier to compare (default = 1).


--updateglue = {0,1}
Update glues while propagating (default = 1).
--lhbr = {0,1}
Perform lazy hyper-binary resolution while propagating (default = 0).
--binpri = {0,1}
Propagated binary clauses are strictly first (default = 0).
--otfhyper = {0,1}
Perform hyper-binary resolution at decision level 1 after every restart and during probing (default = 1).

Redundant Clause Removal

--ltclean = <num> [0-1]
Remove at least this ratio of redundant clauses when doing redundant clause cleaning (default = 0.5).
--clean = {size,glue,activity,prconf,confdep}
Metric used to clean clauses (default = prconf). Use "prconf" for the sum of propagations and conflicts. Use "confdep" for (propagations + conflicts) / (depth at which they were caused).
--noremfreshgl2 = {0,1}
Don't remove glue 2 clauses that are fresh (default = 0).
--cleanconflmult = <num>
If propagations and conflicts are used to clean, the value by which conflicts are multiplied relative to propagations (default = 1). Conflicts are much rarer, but maybe more useful.
--lockuip = <num>
The number of clauses to lock into the database per cleaning based on UIP usage (default = 500).
--locktop = <num>
The number of clauses to lock into the database per cleaning based on the best uncleaned clauses as per the selected heuristic (default = 0).
--perfmult = <num>
Value by which to multiply clause performance values after every clause cleaning (default = 0).
--clearstat = {0,1}
Clear clause statistics data of each clause after clause cleaning (default = 1).
--startclean = <num>
Clean the first time after this many conflicts (default = 10000).
--incclean = <num>
Clean increment cleaning by this factor for the next cleaning (default = 1.1).
--maxredratio = <num>
Never have more than N * (irred_clauses) redundant clauses (default = 10).

Variable Branching

--vincmult = <num>
Variable activity increase multipler (default = 11).
--vincdiv = <num>
Variable activity increase divider (default = 10); it must be smaller than the multiplier.
--vincvary = <num>
Variable activity divider and multiplier are both changed +/- this amount, randomly, in sync (default = 0).
--vincstart = <num>
Variable activity increase stars with this value. Make sure that this, multiplied by the multiplier and divided by the divider, is larger than itself (default = 128).
--freq = <num> [0-1]
Frequency of picking decision variables at random (default = 0).
--dompickf = <num>
Use the dominating literal once in every N when picking decision literal (default = 400).
--morebump = {0,1}
Bump variables' activities based on the glue of redundant clauses there are in during UIP generation, as per Glucose (default = 1).

Variable Polarity

--polar = {true,false,rnd,auto}
Selects the polarity mode (default = auto). True selects only positive polarity when branching. False selects only negative polarity when branching. Auto selects the last polarity used (also called 'caching').
--calcpolar1st = {0,1}
Calculate the polarity of variables based on their occurrences at startup of solve() (default = 1).
--calcpolarall = {0,1}
Calculate the polarity of variables based on their occurrences at startup and after every simplification (default = 1).


--recur = {0,1}
Perform recursive minimisation.
--moreminim = {0,1}
Perform strong minimisation at conflict gen.
--moreminimcache = <num>
Timeout in microsteps for each more minimisation with cache (default = 200). Only active if 'moreminim' is on.
--moreminimbin = <num>
Timeout in microsteps for each more minimisation with binary clauses (default = 100). Only active if 'moreminim' is on.
--alwaysmoremin = {0,1}
Always strong-minimise clauses.
--otfsubsume = {0,1}
Perform on-the-fly subsumption.
--rewardotfsubsume = <num>
Reward with this many propagations and conflicts a clause that has been shortened with on-the-fly subsumption (default = 3).
--printimpldot = {0,1}
Print implication graph DOT files, for input into graphviz.

Iterative Solve

--maxsol = <num>
Search for the given number of solutions (default = 1).
--dumpred = <filename>
If stopped, dump redundant clauses here.
--maxdump = <num>
Maximum length of redundant clauses to dump.
--dumpirred = <filename>
If stopped, dump irredundant original problems here.
Solve at specific c Solver::solve() points in the CNF file. Used to debug file generated by Solver's needLibraryCNFFile() function.
--dumpresult = <filename>
Write result(s) to this file.


--bothprop = {0,1}
Do propagations solely to propagate the same value twice (default = 1).
--probe = {0,1}
Carry out probing (default = 1).
--probemaxm = <num>
Time in mega-bogoprops to perform probing (default = 1900).
--transred = {0,1}
Remove useless binary clauses; i.e., transitive reduction (default = 1).


--stamp = {0,1}
Use time stamping as per the Heule, Javisalo, and Biere paper (default = 1).
--cache = {0,1}
Use an implication cache (default = 1). This option may use a lot of memory.
--cachesize = <num>
Maximum size of the implication cache in MB (default = 2048). The cache may temporarily use more memory, but will be deleted and disabled if this limit is reached.
--calcreach = {0,1}
Calculate literal reachability (default = 1).
--cachecutoff = <num>
If the number of literals propagated by a literal is greater than this value, the literal is not included in the implication cache (default = 2000).


--schedsimp = {0,1}
Perform regular simplification rounds (default = 1).
--presimp = {0,1}
Perform simplification at the very start (default = 0).
--varelim = {0,1}
Perform variable elimination as per Een and Biere (default = 1).
--emptyelim = {0,1}
Perform empty resolvent elimination using the bit-map trick (default = 1).
--elimstrgy = {heuristic,calculate}
The strategy used to sort variable elimination order (default = heuristic). The heuristic strategy uses intelligent guessing. The calculate strategy uses exact calculation.
--elimcplxupd = {0,1}
Update estimated elimination complexity on-the-fly while eliminating (default = 1).
--elimcoststrategy = <num> [0-1]
How the simple guessing strategy is calculated.
--strengthen = {0,1}
Perform clause contraction through resolution (default = 1).
--bva = {0,1}
Perform bounded variable addition (default = 1).
--bvalim = <num>
Maximum number of variables to add by bounded variable addition per call (default = 150000).
--bva2lit = {0,1}
Bounded variable addition with 2-literal difference hack, too (default = 1). Beware, this reduces the effectiveness of 1-literal difference.
--noextbinsubs = {0,1}
No extended subsumption with binary clauses (default = 1).
--eratio = <num> [0-1]
Eliminate this ratio of free variables at most per variable elimination iteration (default = 0.12).
--skipresol = {0,1}
Skip BVE resolvents in case they belong to a gate (default = 0).
--occredmax = <num>
Don't add any redundant clauses larger than this to the occur list (default = 200).
--occirredmaxmb = <num>
Don't allow the irredundant occur size to be more than this many MB (default = 800).
--occredmaxmb = <num>
Don't allow the redundant occur size to be more than this many MB (default = 800).

Equivalent Literal

--scc = {0,1}
Find equivalent literals through SCC and replace them (default = 1).
--extscc = {0,1}
Perform SCC using cache (default = 1).
--sccperc = <num> [0-1]
Perform SCC only if the number of new binary clauses is at least this percentage of the number of free variables (default = 0.02).


--findcomp = {0,1}
Find components, but do not treat them (default = 0).
--comps = {0,1}
Perform component-finding and separate handling (default = 1).
--compsfrom = <num>
Do component finding only after this many simplification rounds (default = 0).
--compsvar = <num>
Only use components when the number of variables is below this limit (default = 1000000).
--compslimit = <num>
Limit how much time is spent in component finding (default = 500).


--sql = {0,1,2}
Write to Sql (default = 1). 0 means do not attempt to write to the database. 1 means to try to write to the database, but continue if the attempt fails. 2 means to abort if the database cannot be written.
--topnvars = <num>
At every restart, dump data about the top N variables (default = 0). If set to 0, nothing is dumped.
--dumptreevar = {0,1}
Dump variance stats of the variables' decision and trail depths (default = 0).
--sqluser = <username>
The Sql user to connect with (default = cmsat_solver).
--sqlpass = <password>
The Sql password to connect with.
--sqldb = <database>
The Sql database name (default = cmsat). The default is used by the PHP system, so it is highly recommended.
--sqlserver = <hostname>
The Sql server hostname or IP address (default = localhost).


--vivif = {0,1}
Regularly execute clause vivification (default = 1).
--viviflongmaxm = <num>
Maximum time in mega-bogoprops to spend on vivifying long irreducible clauses by enqueueing and propagating (default = 20).
--viviffastmaxm = <num>
Maximum time in mega-bogoprops to spend on vivifying long irreducible clauses through watches, cache and stamps (default = 400).
--sortwatched = {0,1}
Sort watches according to size (default = 1).
--renumber = {0,1}
Renumber variables to increase CPU cache efficiency (default = 1).
--savemem = {0,1}
Save memory by deallocating variable space after renumbering (default = 1). This only works if renumbering is active.
--implicitmanip = {0,1}
Subsume and strengthen implicit clauses with each other (default = 1).
--implsubsto = <num>
The timeout of implicit subsumption in mega-bogoprops (default = 1900).
--burst = <num>
The number of conflicts to do in burst search (default = 300).
--clearinter = {0,1}
Interrupt threads cleanly, all the time (default = 0).
--zero-exit-status = {0,1}
Exit with status zero in case the solving has finished without an issue.

Exit Status

The output is a solution, together with some timing information. If --zero-exit-status has not been specified, then the exit status is as follows:

The problem is satisfiable.
The problem's satisfiability was not determined.
The problem is unsatisfiable.


Mate Soos (soos@srlabs.de)

See Also

The DIMACS input format can be looked up here:



Mate Soos 4.5.3