KISSAT(1)
KISSAT(1) πΈ
User Commands β bestie, it's the Kissat satisfiability solver manual and it's giving main character energy π
NAME
kissat β Kissat Satisfiability Solver. That's the whole vibe. β¨
DESCRIPTION
okay so <hotpink>`<option>`</hotpink> can be one of these common options:
- **`--help`** β print this list of all command line options π
- **`-h`** β print only reduced list of command line options β¨
- **`-f`** β force writing proofs (to existing CNF alike file) πͺ
- **`-l`** β print logging messages (see also `--log`) π
- **`-n`** β do not print satisfying assignment π
ββοΈ
- **`-q`** β suppress all messages (see also `--quiet`) π€«
- **`-s`** β print all statistics (see also `--statistics`) π
- **`-v`** β increase verbose level (see also `--verbose`) π£οΈ
Further <hotpink>`<option>`</hotpink> can be one of the following less frequent options:
- **`--banner`** β print solver information π·οΈ
- **`--build`** β print build information π οΈ
- **`--color`** β use colors (default if connected to terminal) π
- **`--no-color`** β no colors (default if not connected to terminal) π«π
- **`--compiler`** β print compiler information π§βπ»
- **`--copyright`** β print copyright information Β©οΈ
- **`--embedded`** β print embedded option list π
- **`--force`** β same as `-f` (force writing proof) π₯
- **`--id`** β print `git` identifier (SHA-1 hash) π
- **`--range`** β print option range list π
- **`--relaxed`** β relaxed parsing (ignore DIMACS header) π
- **`--strict`** β stricter parsing (no empty header lines) π€
- **`--version`** β print version π·οΈ
The following solving limits can be enforced:
- **`--conflicts=<limit>`** β limit on conflicts β³
- **`--decisions=<limit>`** β limit on decisions π€
- **`--time=<seconds>`** β time limit in seconds β°
Satisfying assignments have by default values for all variables unless `--partial` is specified, then only values are printed for variables which are necessary to satisfy the formula. π
The following predefined 'configurations' (option settings) are supported:
- **`--basic`** β basic CDCL solving (`--plain` but no restarts, minimize, reduce) π§±
- **`--default`** β default configuration π
- **`--plain`** β plain CDCL solving without advanced techniques π¦
- **`--sat`** β target satisfiable instances (`--target=2 --restartint=50`) π―
- **`--unsat`** β target unsatisfiable instances (`--stable=0`) π«
Or <hotpink>`<option>`</hotpink> is one of the following long options:
> okay bestie, this list is long but every single one is iconic, no skips, periodt π
- **`--ands=<bool>`** β extract and eliminate and gates `[true]` β¨
- **`--backbone=0..2`** β binary clause backbone (`2=eager`) `[1]` π¦΄
- **`--backboneeffort=0..1e5`** β effort in per mille `[20]` πͺ
- **`--backbonemaxrounds=1...`** β maximum backbone rounds `[1e3]` π
- **`--backbonerounds=1...`** β backbone rounds limit `[100]` π
- **`--bigbigfraction=0..1e3`** β big binary clause fraction per mille `[990]` π
- **`--bump=<bool>`** β enable variable bumping `[true]` π
- **`--bumpreasons=<bool>`** β bump reason side literals too `[true]` π
- **`--bumpreasonslimit=1...`** β relative reason literals limit `[10]` π
- **`--bumpreasonsrate=1...`** β decision rate limit `[10]` β±οΈ
- **`--check=0..2`** β check model (`1`) and derived clauses (`2`) `[2]` β
- **`--chrono=<bool>`** β allow chronological backtracking `[true]` β³
- **`--chronolevels=0...`** β maximum jumped over levels `[100]` π¦
- **`--compact=<bool>`** β enable compacting garbage collection `[true]` ποΈ
- **`--compactlim=0..100`** β compact inactive limit (in percent) `[10]` π
- **`--congruence=<bool>`** β congruence closure on extracted gates `[true]` π
- **`--congruenceandarity=2..5e7`** β AND gate arity limit `[1e6]` π’
- **`--congruenceands=<bool>`** β extract AND gates for congruence closure `[true]` π§©
- **`--congruencebinaries=<bool>`** β extract certain binary clauses `[true]` π§©
- **`--congruenceites=<bool>`** β extract ITE gates for congruence closure `[true]` π§©
- **`--congruenceonce=<bool>`** β congruence closure only initially `[false]` 1οΈβ£
- **`--congruencexorarity=2..20`** β congruence XOR gate arity limit `[4]` π’
- **`--congruencexorcounts=1...`** β XOR counting rounds `[2]` π
- **`--congruencexors=<bool>`** β extract XOR gates for congruence closure `[true]` π§©
- **`--decay=1..200`** β per mille scores decay `[50]` π
- **`--definitioncores=1..100`** β how many cores `[2]` π
- **`--definitions=<bool>`** β extract general definitions `[true]` π
- **`--definitionticks=0...`** β kitten ticks limits `[1e6]` π±
- **`--defraglim=50..100`** β usable defragmentation limit in percent `[75]` π§Ή
- **`--defragsize=10...`** β size defragmentation limit `[2^18]` π§Ή
- **`--eagersubsume=0..4`** β eagerly subsume previous learned clauses `[4]` π¦
- **`--eliminate=<bool>`** β bounded variable elimination BVE `[true]` π«
- **`--eliminatebound=0..2^13`** β maximum elimination bound `[16]` π’
- **`--eliminateclslim=1...`** β elimination clause size limit `[100]` π
- **`--eliminateeffort=0..2e3`** β effort in per mille `[100]` πͺ
- **`--eliminateinit=0...`** β initial elimination interval `[500]` β±οΈ
- **`--eliminateint=10...`** β base elimination interval `[500]` β±οΈ
- **`--eliminateocclim=0...`** β elimination occurrence limit `[2e3]` π
- **`--eliminaterounds=1..1e4`** β elimination rounds limit `[2]` π
- **`--emafast=10..1e6`** β fast exponential moving average window `[33]` π
- **`--emaslow=100..1e6`** β slow exponential moving average window `[1e5]` π’
- **`--embedded=<bool>`** β parse and apply embedded options `[true]` π
- **`--equivalences=<bool>`** β extract and eliminate equivalence gates `[true]` βοΈ
- **`--extract=<bool>`** β extract gates in variable elimination `[true]` π§²
- **`--factor=<bool>`** β bounded variable addition `[true]` β
- **`--factorcandrounds=0...`** β candidates reduction rounds `[2]` π
- **`--factordelay=0..12`** β delaying factor `[4]` β³
- **`--factoreffort=0..1e6`** β bounded variable effort in per mille `[50]` πͺ
- **`--factorhops=1..10`** β structural factoring heuristic hops `[3]` π¦
- **`--factoriniticks=1..1e6`** β initial ticks ticks in millions `[700]` π
- **`--factorsize=2...`** β bounded variable addition clause size `[5]` π
- **`--factorstructural=<bool>`** β structural bounded variable addition `[false]` ποΈ
- **`--fastel=<bool>`** β initial fast variable elimination `[false]` β‘
- **`--fastelclslim=1...`** β fast elimination clause length limit `[100]` π
- **`--fastelim=1..1e3`** β fast elimination resolvents limit `[8]` β‘
- **`--fasteloccs=1..1e3`** β fast elimination occurrence limit `[100]` π
- **`--fastelrounds=1..1e3`** β fast elimination rounds `[4]` π
- **`--fastelsub=<bool>`** β forward subsuming fast variable elimination `[true]` β‘
- **`--flushproof=<bool>`** β flush proof lines immediately `[false]` π½
- **`--focusedtiers=<bool>`** β always used focused mode tiers `[true]` π―
- **`--forcephase=<bool>`** β force initial phase `[false]` πͺ
- **`--forward=<bool>`** β forward subsumption in BVE `[true]` β‘οΈ
- **`--forwardeffort=0..1e6`** β effort in per mille `[100]` πͺ
- **`--ifthenelse=<bool>`** β extract and eliminate if-then-else gates `[true]` π
- **`--incremental=<bool>`** β enable incremental solving `[false]` β
- **`--jumpreasons=<bool>`** β jump binary reasons `[true]` π¦
- **`--log=0..5`** β logging level (`1=on`,`2=more`,`3=check`,`4/5=mem`) `[0]` π
- **`--lucky=<bool>`** β try some lucky assignments `[true]` π
- **`--luckyearly=<bool>`** β lucky assignments before preprocessing `[true]` π
- **`--luckylate=<bool>`** β lucky assignments after preprocessing `[true]` π
- **`--mineffort=0...`** β minimum absolute effort in millions `[10]` πͺ
- **`--minimize=<bool>`** β learned clause minimization `[true]` π
- **`--minimizedepth=1..1e6`** β minimization depth `[1e3]` π³οΈ
- **`--minimizeticks=<bool>`** β count ticks in minimize and shrink `[true]` π
- **`--modeinit=10..1e8`** β initial focused conflicts limit `[1e3]` β±οΈ
- **`--modeint=10..1e8`** β focused conflicts interval `[1e3]` β±οΈ
- **`--otfs=<bool>`** β on-the-fly strengthening `[true]` π«
- **`--phase=<bool>`** β initial decision phase `[true]` π
- **`--phasesaving=<bool>`** β enable phase saving `[true]` πΎ
- **`--preprocess=<bool>`** β initial preprocessing `[true]` π§
- **`--preprocessbackbone=<bool>`** β backbone preprocessing `[true]` π¦΄
- **`--preprocesscongruence=<bool>`** β congruence preprocessing `[true]` π
- **`--preprocessfactor=<bool>`** β variable addition preprocessing `[true]` β
- **`--preprocessprobe=<bool>`** β probing preprocessing `[true]` π
- **`--preprocessrounds=1...`** β initial preprocessing rounds `[1]` π
- **`--preprocessweep=<bool>`** β sweep preprocessing `[true]` π§Ή
- **`--probe=<bool>`** β enable probing `[true]` π
- **`--probeinit=0...`** β initial probing interval `[100]` β±οΈ
- **`--probeint=2...`** β probing interval `[100]` β±οΈ
- **`--proberounds=1...`** β probing rounds `[2]` π
- **`--profile=0..4`** β profile level `[2]` π
- **`--promote=<bool>`** β promote clauses `[true]` β¬οΈ
- **`--quiet=<bool>`** β disable all messages `[false]` π€«
- **`--randec=<bool>`** β random decisions `[true]` π²
- **`--randecfocused=<bool>`** β random decisions in focused mode `[true]` π²
- **`--randecinit=0...`** β random decisions interval `[500]` β±οΈ
- **`--randecint=0...`** β initial random decisions interval `[500]` β±οΈ
- **`--randeclength=1...`** β random conflicts length `[10]` π
- **`--randecstable=<bool>`** β random decisions in stable mode `[false]` π²
- **`--reduce=<bool>`** β learned clause reduction `[true]` π
- **`--reducehigh=0..1e3`** β high reduce fraction per mille `[900]` π
- **`--reduceinit=2..1e5`** β initial reduce interval `[1e3]` β±οΈ
- **`--reduceint=2..1e5`** β base reduce interval `[1e3]` β±οΈ
- **`--reducelow=0..1e3`** β low reduce fraction per mille `[500]` π
- **`--reluctant=<bool>`** β stable reluctant doubling restarting `[true]` π
- **`--reluctantint=2..2^15`** β reluctant interval `[2^10]` β±οΈ
- **`--reluctantlim=0..2^30`** β reluctant limit (`0=unlimited`) `[2^20]` π«
- **`--reorder=0..2`** β reorder decisions (`1=stable-mode-only`) `[2]` π
- **`--reorderinit=0..1e5`** β initial reorder interval `[1e4]` β±οΈ
- **`--reorderint=1..1e5`** β base reorder interval `[1e4]` β±οΈ
- **`--reordermaxsize=2..2^8`** β reorder maximum clause size `[100]` π
- **`--rephase=<bool>`** β reinitialization of decision phases `[true]` π
- **`--rephaseinit=10..1e5`** β initial rephase interval `[1e3]` β±οΈ
- **`--rephaseint=10..1e5`** β base rephase interval `[1e3]` β±οΈ
- **`--restart=<bool>`** β enable restarts `[true]` π
- **`--restartint=1..1e4`** β base restart interval `[1]` β±οΈ
- **`--restartmargin=0..25`** β fast/slow margin in percent `[10]` π
- **`--restartreusetrail=<bool>`** β restarts tries to reuse trail `[true]` π
- **`--seed=0...`** β random seed `[0]` π±
- **`--shrink=0..3`** β learned clauses (`1=bin`,`2=lrg`,`3=rec`) `[3]` π
- **`--simplify=<bool>`** β enable probing and elimination `[true]` π§
- **`--smallclauses=0...`** β small clauses limit `[1e5]` π
- **`--stable=0..2`** β enable stable search mode `[1]` π§
- **`--statistics=<bool>`** β print complete statistics `[false]` π
- <pink>**`--substitute=<bool>`**</pink> β swapping a literal for its equivalent literal, like a little glow-up for your clause. Default `<yellow>`true`</yellow>` β¨
- <pink>**`--substituteeffort=1..1e3`**</pink> β how much effort to pour into that, measured in per mille. Default `10`.
- <pink>**`--substituterounds=1..100`**</pink> β max rounds of substitution, so it doesn't just keep going forever like my playlist. Default `2`.
- <pink>**`--subsumeclslim=1...`**</pink> β clause size limit for subsumption. Default `1e3`.
- <pink>**`--subsumeocclim=0...`**</pink> β occurrence limit for subsumption. Default `1e3`.
- <pink>**`--sweep=<bool>`**</pink> β turn on SAT sweeping π§Ήβ¨ Default `<yellow>`true`</yellow>`.
- <pink>**`--sweepclauses=0...`**</pink> β environment clauses. Default `2^10`.
- <pink>**`--sweepcomplete=<bool>`**</pink> β run SAT sweeping alllll the way until it's fully done. Default `<yellow>`false`</yellow>`.
- <pink>**`--sweepdepth=0...`**</pink> β environment depth. Default `2`.
- <pink>**`--sweepeffort=0..1e4`**</pink> β effort in per mille. Default `100`.
- <pink>**`--sweepfliprounds=0...`**</pink> β flipping rounds. Default `1`.
- <pink>**`--sweepmaxclauses=2...`**</pink> β maximum environment clauses. Default `2^15`.
- <pink>**`--sweepmaxdepth=1...`**</pink> β maximum environment depth. Default `3`.
- <pink>**`--sweepmaxvars=2...`**</pink> β maximum environment variables. Default `2^13`.
- <pink>**`--sweeprand=<bool>`**</pink> β randomize the sweeping environment, chaotic queen behaviour. Default `<yellow>`false`</yellow>`.
- <pink>**`--sweepvars=0...`**</pink> β environment variables. Default `2^8`.
- <pink>**`--target=0..2`**</pink> β target phases: `1` = stable, `2` = focused. Default `1` π
- <pink>**`--tier1=1..100`**</pink> β learned clause tier one glue limit. Default `2`.
- <pink>**`--tier1relative=0..1e3`**</pink> β relative tier one glue limit. Default `500`.
- <pink>**`--tier2=1..1e3`**</pink> β learned clause tier two glue limit. Default `6`.
- <pink>**`--tier2relative=0..1e3`**</pink> β relative tier two glue limit. Default `900`.
- <pink>**`--transitive=<bool>`**</pink> β transitive reduction of binary clauses. Default `<yellow>`true`</yellow>`.
- <pink>**`--transitiveeffort=0..2e3`**</pink> β effort in per mille. Default `20`.
- <pink>**`--transitivekeep=<bool>`**</pink> β keep the transitivity candidates around. Default `<yellow>`true`</yellow>`.
- <pink>**`--tumble=<bool>`**</pink> β tumbled external indices order. Default `<yellow>`true`</yellow>`.
- <pink>**`--verbose=0..3`**</pink> β verbosity level. Default `0`, so like, silent-treatment mode by default π
- <pink>**`--vivify=<bool>`**</pink> β vivify clauses, give them a whole new life π
Default `<yellow>`true`</yellow>`.
- <pink>**`--vivifyeffort=0..1e3`**</pink> β effort in per mille. Default `100`.
- <pink>**`--vivifyfocusedtiers=<bool>`**</pink> β use focused tier limits. Default `<yellow>`true`</yellow>`.
- <pink>**`--vivifyirr=0..100`**</pink> β relative irredundant effort. Default `3`.
- <pink>**`--vivifysort=<bool>`**</pink> β sort the vivification candidates, keep that to-do list tidy. Default `<yellow>`true`</yellow>`.
- <pink>**`--vivifytier1=0..100`**</pink> β relative tier1 effort. Default `3`.
- <pink>**`--vivifytier2=0..100`**</pink> β relative tier2 effort. Default `3`.
- <pink>**`--vivifytier3=0..100`**</pink> β relative tier3 effort. Default `1`.
- <pink>**`--walkeffort=0..1e6`**</pink> β effort in per mille. Default `50`.
- <pink>**`--walkinitially=<bool>`**</pink> β do an initial local search. Default `<yellow>`false`</yellow>`.
- <pink>**`--warmup=<bool>`**</pink> β initialize phases by unit propagation, like stretching before the main character moment. Default `<yellow>`true`</yellow>`.
---
<rainbow>okay bestie, and here's the stuff about the actual FILES π</rainbow>
<purple>**`<dimacs>`**</purple> is your input file, in DIMACS format. No `<dimacs>` given? Then the solver reads from `<stdin>` instead β it's flexible like that. π«Ά
And the glow-up part: if the path ends in `'.bz2'`, `'.gz'`, `'.lzma'`, `'7z'` or `'.xz'`, the solver goes hunting for the matching decompression tool β `'bzip2'`, `'gzip'`, `'lzma'`, `'7z'`, or `'xz'` respectively β to decompress the input file *on-the-fly*. But first it checks the input file actually has the correct format, i.e. it starts with the corresponding signature bytes. Vibe check before decompression, no cap. π
If `<proof>` is specified, a proof trace gets written to that file. Special case: if the file name is `'-'`, the proof goes to `<stdout>`, and in that case the **ASCII** version of the **DRAT** format is used. For real files (not `'-'`), the **binary** proof format is used, unless you pass `--no-binary`. π
Writing compressed proof files works exactly the same way as reading compressed files β the compression format comes from the file suffix, and it's checked that the corresponding compression utility can actually be found. Symmetry, she said. β¨
---
> <red>heads up bestie:</red> all of the above is verbatim-what-the-manpage-says, so don't come for me if you set `--substituteeffort=1e3` and your solve takes a lil minute π
That's the whole page, fr fr β no crumbs left. This one's `kissat 4.0.4`, dated `March 2026`, and it's `KISSAT(1)` in the house ππ¦ she ate and left absolutely zero notes. periodt. π
β¨
π¦ where this page comes from
- ubuntu stonking: kissat 4.0.4-1 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms