CADICAL(1)
okay bestie, welcome to cadical(1) from User Commands ๐ซถโจ
๐ธ NAME ๐ธ
cadical โ Simplified SAT solver ๐ง๐
โจ DESCRIPTION โจ
The usage is:
usage: cadical [ <option> ... ] [ <input> [ <proof> ] ]
where <option> is one of the following common options:
-hโ print only the common-options list instead ๐ซถ--helpโ print this complete list of all options ๐--versionโ print version ๐ท๏ธ-nโ do not print witness (same as--no-witness) ๐-vโ increase verbosity (also see--verbosebelow) ๐-qโ be quiet (same as--quiet) ๐คซ-t <sec>โ set wall clock time limit โฐ
Or <option> is one of the less common options:
-L<rounds>โ run local search initially (default0rounds) ๐-O<level>โ increase limits by2^<level>or10^<level>๐-P<rounds>โ initial preprocessing (default0rounds) ๐งผ
Note there is no separating space for the options above while the following options require a space after the option name:
-c <limit>โ limit the number of conflicts (default unlimited) ๐ฅ-d <limit>โ limit the number of decisions (default unlimited) ๐ง-o <output>โ write simplified CNF in DIMACS format to file ๐-e <extend>โ write reconstruction/extension stack to file ๐งฌ--force|-fโ parsing broken DIMACS header and writing proofs ๐ช--strictโ strict parsing (no white space in header) ๐ง-r <sol>โ read solution in competition output format to check consistency of learned clauses during testing and debugging ๐-w <sol>โ write result including a potential witness solution in competition format to the given file ๐ค--colorsโ force colored output ๐--no-colorsโ disable colored output to terminal ๐ซ--no-witnessโ do not print witness (also see-nabove) ๐--buildโ print build configuration ๐๏ธ--copyrightโ print copyright information ยฉ๏ธ
There are pre-defined configurations of advanced internal options:
--defaultโ set default advanced internal options ๐๏ธ--plainโ disable all internal preprocessing options ๐งผ--satโ set internal options to target satisfiable instances โ--unsatโ set internal options to target unsatisfiable instances โ
Or <option> is one of the following advanced internal options:
--arena=boolโ allocate clauses in arena[true]๐๏ธ--arenacompact=boolโ keep clauses compact[true]๐งณ--arenasort=boolโ sort clauses in arena[true]๐ค--arenatype=1..3โ1= clause,2= var,3= queue[3]๐งฉ--backbone=0..2โ binary clause backbone[1]๐ฆด--backboneeffort=0..1e5โ binary effort in per mile[20]๐ช--backbonemaxrounds=0..1e5โ backbone rounds limit[1e3]๐--backbonerounds=0..1e5โ backbone rounds limit[100]๐--backbonethresh=0..1e9โ delay if ticks smaller thresh*clauses[5]โณ--binary=boolโ use binary proof format[true]๐พ--block=boolโ blocked clause elimination[false]๐ซ--blockmaxclslim=1..2e9โ maximum clause size[1e5]๐--blockminclslim=2..2e9โ minimum clause size[2]๐--blockocclim=1..2e9โ occurrence limit[1e2]๐ข--bump=boolโ bump variables[true]๐--bumpreason=boolโ bump reason literals too[true]๐ช--bumpreasondepth=1..3โ bump reason depth[1]๐ณ๏ธ--bumpreasonlimit=1..2e9โ bump reason limit[10]๐ง--bumpreasonrate=1..2e9โ bump reason decision rate[100]โก--check=boolโ enable internal checking[false]๐--checkassumptions=boolโ check assumptions satisfied[true]โ--checkconstraint=boolโ check constraint satisfied[true]โ--checkfailed=boolโ check failed literals form core[true]๐งช--checkfrozen=boolโ check all frozen semantics[false]๐ง--checkproof=0..3โ1= drat,2= lrat,3= both[3]๐--checkwitness=boolโ check witness internally[true]๐--chrono=0..2โ chronological backtracking[1]โฑ๏ธ--chronoalways=boolโ force always chronological[false]๐ฐ๏ธ--chronolevelim=0..2e9โ chronological level limit[1e2]๐ฆ--chronoreusetrail=boolโ reuse trail chronologically[true]โป๏ธ--compact=boolโ compact internal variables[true]๐งณ--compactint=1..2e9โ compacting interval[2e3]โฒ๏ธ--compactlim=0..1e3โ inactive limit per mille[1e2]๐--compactmin=1..2e9โ minimum inactive limit[1e2]๐--condition=boolโ globally blocked clause elim[false]๐ซ--conditioneffort=1..1e5โ relative efficiency per mille[100]โ๏ธ--conditionint=1..2e9โ initial conflict interval[1e4]โฑ๏ธ--conditionmaxeff=0..2e9โ maximum condition efficiency[1e7]๐--conditionmaxrat=1..2e9โ maximum clause variable ratio[100]โ๏ธ--conditionmineff=0..2e9โ minimum condition efficiency[0]๐--congruence=boolโ congruence closure[true]๐--congruenceand=boolโ extract AND gates[true]๐ช--congruenceandarity=2..5e7โ AND gate arity limit[1e6]๐--congruencebinaries=boolโ extract binary and strengthen ternary clauses[true]๐งฑ--congruenceite=boolโ extract ITE gates[true]๐ช--congruencexor=boolโ extract XOR gates[true]๐ช--congruencexorarity=2..31โ XOR gate arity limit[4]๐--congruencexorcounts=1..5e6โ XOR gate round[1]๐--cover=boolโ covered clause elimination[false]๐งน--covereffort=1..1e5โ relative efficiency per mille[4]โ๏ธ--covermaxclslim=1..2e9โ maximum clause size[1e5]๐--covermaxeff=0..2e9โ maximum cover efficiency[1e8]๐--coverminclslim=2..2e9โ minimum clause size[2]๐--covermineff=0..2e9โ minimum cover efficiency[0]๐--decompose=boolโ decompose BIG in SCCs and ELS[true]๐งฉ--decomposerounds=1..16โ number of decompose rounds[2]๐--deduplicate=boolโ remove duplicated binaries[true]๐งน--deduplicateallinit=boolโ remove duplicated clauses once before solving[false]๐งน--eagersubsume=boolโ subsume recently learned[true]๐ฝ๏ธ--eagersubsumelim=1..1e3โ limit on subsumed candidates[20]๐ง--elim=boolโ bounded variable elimination[true]โ๏ธ--elimands=boolโ find AND gates[true]๐--elimbackward=boolโ eager backward subsumption[true]โฉ๏ธ--elimboundmax=-1..2e6โ maximum elimination bound[16]๐--elimboundmin=-1..2e6โ minimum elimination bound[0]๐--elimclslim=2..2e9โ resolvent size limit[1e2]๐--elimdef=boolโ mine definitions with kitten[false]๐ฑ--elimdefcores=1..100โ number of unsat cores[1]๐งฉ--elimdefticks=0..2e9โ kitten ticks limit[2e5]โฑ๏ธ--elimeffort=1..1e5โ relative efficiency per mille[1e3]โ๏ธ--elimequivs=boolโ find equivalence gates[true]๐ฐ--elimint=1..2e9โ elimination interval[2e3]โฒ๏ธ--elimites=boolโ find if-then-else gates[true]๐ช--elimlimited=boolโ limit resolutions[true]๐ง--elimmaxeff=0..2e9โ maximum elimination efficiency[2e9]๐--elimmineff=0..2e9โ minimum elimination efficiency[1e7]๐--elimocclim=0..2e9โ occurrence limit[1e2]๐ข--elimprod=0..1e4โ elim score product weight[1]โ๏ธ--elimrounds=1..512โ usual number of rounds[2]๐--elimsubst=boolโ elimination by substitution[true]๐--elimsum=0..1e4โ elimination score sum weight[1]โ--elimxorlim=2..27โ maximum XOR size[5]๐--elimxors=boolโ find XOR gates[true]๐--emadecisions=1..2e9โ window decision rate[1e5]๐ช--emagluefast=1..2e9โ window fast glue[33]๐ช--emaglueslow=1..2e9โ window slow glue[1e5]๐ช--emajump=1..2e9โ window back-jump level[1e5]๐ช--emalevel=1..2e9โ window back-track level[1e5]๐ช--emasize=1..2e9โ window learned clause size[1e5]๐ช--ematrailfast=1..2e9โ window fast trail[1e2]๐ช--ematrailslow=1..2e9โ window slow trail[1e5]๐ช--exteagerreasons=boolโ eagerly ask for all reasons (0: only when needed)[true]๐ฃ๏ธ--exteagerrecalc=boolโ after eagerly asking for reasons recalculate all levels (0: trust the external tool)[true]๐--externallrat=boolโ external lrat[false]๐--factor=boolโ bounded variable addition[false]โ--factorcandrounds=0..2e9โ candidates reduction rounds[2]๐--factorcheck=0..2โ API checks that variables have been declared (1= only with factor on,2= always)[1]โ--factordelay=0..12โ delay bounded variable addition between eliminations[4]โณ--factoreffort=0..1e6โ relative effort per mille[50]โ๏ธ--factoriniticks=1..1e6โ initial effort in millions[300]๐--factorsize=2..2e9โ clause size limit[5]๐--factorthresh=0..100โ delay if ticks smaller thresh*clauses[7]โณ--factorunbump=boolโ extension variable with lowest importance (1: as in kissat)[true]๐--fastelim=boolโ fast BVE during preprocessing[true]โก--fastelimbound=1..1e3โ fast BVE bound during preprocessing[8]๐--fastelimclslim=2..2e9โ fast BVE resolvent size limit[1e2]๐--fastelimocclim=1..2e9โ fast BVE occurence limit during preprocessing[100]๐ข--fastelimrounds=1..512โ number of fastelim rounds[4]๐--flush=boolโ flush redundant clauses[false]๐ฝ--flushfactor=1..1e3โ interval increase[3]๐--flushint=1..2e9โ initial limit[1e5]๐ง--forcephase=boolโ always use initial phase[false]๐--frat=0..2โ1= frat(lrat),2= frat(drat)[0]๐--idrup=boolโ incremental proof format[false]๐พ--ilb=0..2โ ILB (incremental lazy backtrack) (0: no,1: assumptions only,2: everything)[0]๐--incdecay=0..4โ decay clauses when doing incremental clauses[1]๐--incdecayint=1..2e9โ decay interval when doing incremental clauses[1e6]โฒ๏ธ--inprobeint=1..2e9โ inprobing interval[100]โฑ๏ธ--inprobing=boolโ enable probe inprocessing[true]๐--inprocessing=boolโ enable general inprocessing[true]โ๏ธ--instantiate=boolโ variable instantiation[false]๐งฌ--instantiateclslim=2..2e9โ minimum clause size[3]๐--instantiateocclim=1..2e9โ maximum occurrence limit[1]๐ข--instantiateonce=boolโ instantiate each clause once[true]1๏ธโฃ--lidrup=boolโ linear incremental proof format ๐ ([false])--lrat=boolโ use LRAT proof format ๐ ([false])--lucky=boolโ lucky phases ๐ ([true])--luckyassumptions=boolโ lucky phases with assumptions ๐โจ ([true])--luckyearly=boolโ lucky phases before preprocessing ๐โฌ ๏ธ ([true])--luckylate=boolโ lucky phases after preprocessing ๐โก๏ธ ([true])--minimize=boolโ minimize learned clauses โ๏ธ ([true])--minimizedepth=0..1e3โ minimization depth ๐ ([1e3])--minimizeticks=boolโ increment ticks in minimization โฑ๏ธ ([true])--otfs=boolโ on-the-fly self subsumption ๐ช ([true])--phase=boolโ initial phase ๐ ([true])--preprocessinit=0..2e9โ initial preprocessing base limit ๐๏ธ ([2e6])--preprocesslight=boolโ lightweight preprocessing ๐ชถ ([true])--probe=boolโ failed literal probing ๐ ([true])--probeeffort=1..1e5โ relative efficiency per mille โก ([8])--probehbr=boolโ learn hyper binary clauses ๐ง ([true])--probethresh=0..100โ delay if ticks smaller thresh*clauses ๐ข ([0])--profile=0..4โ profiling level ๐ ([2])--quiet=boolโ disable all messages ๐คซ ([false])--radixsortlim=0..2e9โ radix sort limit ๐ข ([32])--randec=boolโ random decisions ๐ฒ ([false])--randecfocused=boolโ random decisions in focused mode ๐ฒ๐ฆ ([true])--randecinit=2..2e9โ inital random decision interval ๐ฒโณ ([1e3]) โ yes bestie, "inital", that's the original's spelling, we don't touch it ๐--randecint=0..2e9โ random conflict length ๐ฒ๐ ([500])--randeclength=1..1e9โ length random decisions phases ๐ฒ๐ ([10])--randecstable=boolโ random decisions in stable mode ๐ฒ๐ง ([false])--realtime=boolโ real instead of process time โ ([false])--recomputetier=boolโ recompute tiers ๐งฎ ([true])--reduce=boolโ reduce useless clauses ๐๏ธ ([true])--reduceinit=1..1e6โ initial interval ๐ ([300])--reduceint=2..1e6โ reduce interval ๐ ([25])--reduceopt=0..2โ0=prct,1=sqrt,2=max๐๏ธ ([1])--reducetarget=10..1e2โ reduce fraction in percent ๐ฏ ([75])--reducetier1glue=1..2e9โ glue of kept learned clauses ๐ฏ ([2])--reducetier2glue=1..2e9โ glue of tier two clauses ๐ฏ๐ฏ ([6])--reluctant=boolโ stable reluctant doubling restarts ๐ค ([true])--reluctantint=0..2e9โ reluctant doubling period โฒ๏ธ ([1024])--reluctantmax=0..2e9โ maximum reluctant doubling period โฒ๏ธโฌ๏ธ ([1048576])--rephase=0..2โ enable resetting phase (0=no,1=always,2=stable-only) ๐ ([1])--rephaseint=1..2e9โ rephase interval ๐โณ ([1e3])--report=boolโ enable reporting ๐ข ([false])--reportall=boolโ report even if not successful ๐ข๐ ([false])--reportsolve=boolโ use solving not process time ๐ขโ ([false])--restart=boolโ enable restarts ๐ ([true])--restartint=1..2e9โ restart interval ๐โฑ๏ธ ([2])--restartmarginfocused=0..25โ focused slow fast margin in percent ๐ฏ ([10])--restartmarginstable=0..25โ stable slow fast margin in percent ๐ง๐ฏ ([25])--restartreusetrail=boolโ enable trail reuse ๐ค๏ธ ([true])--restoreall=0..2โ restore all clauses (2=really) ๐ณ ([0]) โ yes the "really" is doing a LOT of heavy lifting there--restoreflush=boolโ remove satisfied clauses ๐ฟ ([false])--reverse=boolโ reverse variable ordering ๐ ([false])--score=boolโ use EVSIDS scores ๐ ([true])--scorefactor=500..1e3โ score factor per mille ๐โ๏ธ ([950])--seed=0..2e9โ random seed ๐ฑ ([0])--shrink=0..3โ shrink conflict clause (1=binary-only,2=minimize-on-pulling,3=full) ๐ซง ([3])--shrinkreap=boolโ use a reap for shrinking ๐พ ([true])--shuffle=boolโ shuffle variables ๐๐ด ([false])--shufflequeue=boolโ shuffle variable queue ๐๐ ([true])--shufflerandom=boolโ not reverse but random ๐ ([false])--shufflescores=boolโ shuffle variable scores ๐๐ ([true])--stabilize=boolโ enable stabilizing phases ๐ง ([true])--stabilizeinit=1..2e9โ stabilizing interval ๐งโณ ([1e3])--stabilizeonly=boolโ only stabilizing phases ๐ง๐ ([false])--stats=boolโ print all statistics at the end of the run ๐ ([false])--stubbornIOfocused=boolโ force phases to I/O in focused mode every once in a while (requiresrephase==2) ๐ ([false])--subsume=boolโ enable clause subsumption ๐ซ ([true])--subsumebinlim=0..2e9โ watch list length limit ๐ ([1e4])--subsumeclslim=0..2e9โ clause length limit ๐ ([1e2])--subsumeeffort=1..1e5โ relative efficiency per mille โก ([1e3])--subsumelimited=boolโ limit subsumption checks ๐ง ([true])--subsumemaxeff=0..2e9โ maximum subsuming efficiency ๐ ([1e8])--subsumemineff=0..2e9โ minimum subsuming efficiency ๐ ([0])--subsumeocclim=0..2e9โ watch list length limit ๐ ([1e2])--subsumestr=boolโ subsume strengthen ๐ช ([true])--sweep=boolโ enable SAT sweeping ๐งน ([true])--sweepclauses=0..2e9โ environment clauses ๐ ([1024])--sweepcomplete=boolโ run SAT sweeping to completion ๐งนโ ([false])--sweepcountbinary=boolโ count binaries to environment ๐๐ข ([true])--sweepdepth=0..2e9โ environment depth ๐๐ณ๏ธ ([2])--sweepeffort=0..1e4โ relative effort in ticks per mille โก ([1e2])--sweepfliprounds=0..2e9โ flipping rounds ๐ ([1])--sweepmaxclauses=2..2e9โ maximum environment clauses ๐โฌ๏ธ ([3e5])--sweepmaxdepth=1..2e9โ maximum environment depth ๐โฌ๏ธ๐ณ๏ธ ([3])--sweepmaxvars=2..2e9โ maximum environment variables ๐๐ค ([8192])--sweeprand=boolโ randomize sweeping environment ๐ฒ๐ ([false])--sweepthresh=0..100โ delay if ticks smaller thresh*clauses ๐ข ([5])--sweepvars=0..2e9โ environment variables ๐๐ค ([256])--target=0..2โ target phases (1=stable only) ๐ฏ ([1])--terminateint=0..1e4โ termination check interval ๐โฑ๏ธ ([10])--ternary=boolโ hyper ternary resolution 3๏ธโฃ ([true])--ternaryeffort=1..1e5โ relative efficiency per mille โก ([8])--ternarymaxadd=0..1e4โ max clauses added in percent โ๐ฏ ([1e3])--ternaryocclim=1..2e9โ ternary occurrence limit 3๏ธโฃ๐ ([1e2])--ternaryrounds=1..16โ maximum ternary rounds 3๏ธโฃ๐ ([2])--ternarythresh=0..100โ delay if ticks smaller thresh*clauses ๐ข ([6])--tier1limit=0..100โ limit of tier1 usage in percentage ๐ฏ ([50])--tier1minglue=0..100โ lowest tier1 limit ๐ฏโฌ๏ธ ([0])--tier2limit=0..100โ limit of tier2 usage in percentage ๐ฏ ([90])--tier2minglue=0..100โ lowest tier2 limit ๐ฏโฌ๏ธ ([0])--transred=boolโ transitive reduction of BIG ๐ซ ([true])--transredeffort=1..1e5โ relative efficiency per mille โก ([1e2])--transredmaxeff=0..2e9โ maximum efficiency ๐ ([1e8])--transredmineff=0..2e9โ minimum efficiency ๐ ([0])--verbose=0..3โ more verbose messages ๐ฃ๏ธ ([0])--veripb=0..4โodd=check-deletions,>2 drat๐งพ ([0])--vivify=boolโ vivification โจ ([true])--vivifycalctier=boolโ recalculate tier limits ๐งฎ ([false])--vivifydemote=boolโ demote irredundant or delete directly โฌ๏ธ๐๏ธ ([false])--vivifyeffort=0..1e5โ overall efficiency per mille โก ([50])--vivifyflush=boolโ flush subsumed before vivification rounds ๐ฟ ([true])--vivifyinst=boolโ instantiate last literal when vivify โจ๐ค ([true])--vivifyirred=boolโ vivification of irredundant clauses โจ ([true])--vivifyirredeff=1..100โ irredundant efficiency per mille โก ([3])--vivifyonce=0..2โ vivify once:1=red,2=red+irr1๏ธโฃ ([0])--vivifyretry=0..5โ re-vivify clause if vivify was successful ๐โจ ([0])--vivifyschedmax=10..2e9โ maximum schedule size ๐ โฌ๏ธ ([5e3])--vivifythresh=0..100โ delay if ticks smaller thresh*clauses ๐ข ([20])--vivifytier1=boolโ vivification tier1 โจ1๏ธโฃ ([true])--vivifytier1eff=0..100โ relative tier1 effort โก1๏ธโฃ ([4])--vivifytier2=boolโ vivification tier2 โจ2๏ธโฃ ([true])--vivifytier2eff=1..100โ relative tier2 effort โก2๏ธโฃ ([2])--vivifytier3=boolโ vivification tier3 โจ3๏ธโฃ ([true])--vivifytier3eff=1..100โ relative tier3 effort โก3๏ธโฃ ([1])--walk=boolโ enable random walks ๐ถ ([true])--walkeffort=1..1e5โ relative efficiency per mille โก ([80])--walkfullocc=boolโ use Kissat's full occurrences instead of the single watched ๐ ([false])--walkmaxeff=0..2e9โ maximum efficiency (in 1e3 ticks) ๐ ([1e7])--walkmineff=0..1e7โ minimum efficiency ๐ ([0])--walknonstable=boolโ walk in non-stabilizing phase ๐ถ๐ซ ([true])--walkredundant=boolโ walk redundant clauses too ๐ถ๐ ([false])--warmup=boolโ warmup before walk using propagation ๐ฅ๐ถ ([true])
okay so ๐ the internal options have their default value printed in brackets right after their description, like you just saw. And there's cute shorthand:
--<name>is literally the same as--<name>=1โจ--no-<name>is literally the same as--<name>=0โจ
and you can also use true instead of 1, false instead of 0, and numbers with positive exponent like 1e3 instead of 1000. math girlie behavior, we love it ๐ง
Alternatively you can drop option values in the header of the DIMACS file, like this:
c --elim=false
or you can set them through environment variables, like:
CADICAL_ELIM=false
Priority check bestie, do NOT mix this up: embedded options in the DIMACS file have the highest priority, then command line options, and then values specified through environment variables. That's the order. Periodt. ๐
The input gets read from <input> and it's assumed to be in DIMACS format ๐. Incremental p inccnf files are supported too, with cubes at the end ๐ง.
If <proof> is given then a DRAT proof gets written to that file ๐งพโจ.
If <input> is missing then the solver reads from <stdin> ๐ธ, also if - is used as input path name <input>. Similarly,
For incremental files each cube is solved in turn ๐ง๐ง๐ง. The solver stops at the first satisfied cube if there is one and uses that one for the witness to print ๐. Conflict and decision limits are applied to each individual cube solving call, while -P, -L and -t remain global ๐. Only if all cubes were unsatisfiable does the solver print the standard unsatisfiable solution line:
s UNSATISFIABLE
By default the proof is stored in the binary DRAT format ๐พ unless the option --no-binary is specified, or the proof is written to <stdout> and <stdout> is connected to a terminal ๐ฅ๏ธ. (because dumping raw binary at your terminal would be a whole crime scene ๐ญ)
Okay so compression! ๐
If you hand over an input file explicitly and it's got a .gz, .bz2, .xz or .7z suffix, we're gonna assume it's compressed, bestie. Same energy for the output file โ suffix says compressed, we treat it as compressed. โจ
And likeโฆ obviously you need the actual tools for that, because we're not doing magic here. Depending on the format you gotta have gzip, bzip, xz or 7z installed on your system, fr fr. No utility, no zip-unzip, it's giving missing dependency. ๐ญ
But here's the safety net ๐ซถ โ the solver actually peeks at the file type signatures, and if the signature does NOT match, it just falls back to reading the file non-compressed. So a sneaky little mislabeled file isn't gonna ruin your whole day. Iconic behaviour honestly. ๐
And that's a wrap on CADICAL(1) babes!! ๐ธ This one's cadical 2.2.1, dated April 2026 โ go forth and solve, my gorgeous little SAT-solver-using main characters. ๐ฆ๐ periodt. โญ
๐ฆ where this page comes from
- fedora 44: cadical 1:2.2.1-4.fc44 ยท MIT
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms