STP(1)
π STP(1) β like, the whole manual, but make it make sense
okay so you opened the man page for stp and it's giving "User Commands", which basically means "a program you run in your terminal, bestie." It's the Simple Theorem Prover SMT solver, and yes, the name says "simple" but the option list said otherwise π. Don't worry tho β I got you. Sit down, grab a strawberry drink π, and let's go through it together.
β¨ NAME β¨
stp β the Simple Theorem Prover SMT solver π§
πΈ DESCRIPTION πΈ
Here's the whole vibe for how you actually run it:
USAGE: stp [options] <input-file>
...where input is SMTLIB1/2 or CVC, depending on your options and the file extension. So like, the file tells on itself a little bit. iykyk π
π Most important options (a.k.a. the ones you'll actually touch)
-h,--helpβ prints this help. Your "hello, what is this" button π«Ά--versionβ prints the version number. Receipts, basically.
π Simplifications
These control how much STP tidies up your problem before it starts solving. Genuinely iconic behaviour β the solver lowkey loves a glow-up.
--disable-simplificationsβ turns all the simplifications off. All of them. Like, every last one π-w,--switch-wordβ switches off the wordlevel solver-a,--disable-opt-incβ disables the rewriting simplifier--disable-cbitpβ disables constant bit propagation--disable-equalityβ disables equality propagation--size-reducing-onlyβ size-reducing simplifications only, nothing that could make things bigger--unconstrained-variable-elimination arg (=1)β unconstrained variables are eliminated. (Default1.)--aig-rewrite-passes arg (=0)β how many iterations of AIG rewriting to perform. (Default0.)--flattening arg (=0)β enables sharing-aware flattening of>2arity nodes. (Default0.)--rewriting arg (=1)β enables sharing-aware rewriting. (Default1.)--split-extracts arg (=1)β creates new variables for some extracts. (Default1.)--ite-context-simplifications arg (=0)β uses what's known to be true in an if-then-else node to simplify the true or false branches. (Default0.)--aig-core-simplification arg (=0)β simplifies the propositional core with AIGs. (Default0.)--use-intervals arg (=1)β simplifies with interval analysis. (Default1.)--pure-literals arg (=1)β pure literals get replaced. (Default1.)--merge-same arg (=0)β uses simple boolean algebra rules to combine conjuncts at the top level. (Default0.)--bit-blast-simplification arg (=0)β part-way through simplifying, converts to AIGs and looks for bits that the AIGs figure out are true/false or the same as another node β if the difficulty is less than this number.-1means always. (Default0.)--size-reducing-fixed-point-limit arg (=0)β if the number of non-leaf nodes is fewer than this number, runs size-reducing simplifications to a fixed-point.-1means always. (Default0.)--simplify-to-constants-only arg (=0)β uses just the simplifications from the potentially size increasing suite that transform nodes to constants. (Default0.)--difficulty-reversion arg (=1)β undoes size increasing simplifications if they haven't made the problem simpler. (Default1.)
π₯ SAT Solver options
Pick your solver, bestie. It's giving "choose your fighter" energy.
--cryptominisatβ uses cryptominisat as the solver. Only use CryptoMiniSat 5.0 or above tho, fr fr.--threads arg (=1)β number of threads for cryptominisat. (Default1.)--simplifying-minisatβ uses the installed simplifying minisat version as the solver--minisatβ uses the installed minisat version as the solver--search-bias argβ tunes the SAT search towards one answer:'unsat'(best for unsatisfiable / verification workloads),'sat', or'none'(the default, leaving the solver at its own settings). Solvers with no such setting ignore it. Main character energy for verification girlies π
π¦ Refinement options
-r,--ackermanizeβ eagerly encodes array-read axioms (Ackermannistaion). Yes that's how it's spelled in here, I'm just the messenger π
β Bit-blasting options
--bb.div-v1 arg (=1)β unsigned division encoding variant 1. (Default1.)--bb.div-v2 arg (=1)β unsigned division encoding variant 2. (Default1.)--bb.div-v3 arg (=0)β unsigned division encoding variant 3. (Default0.)--bb.add-v1 arg (=1)β addition encoding variant 1. (Default1.)--bb.add-v2 arg (=1)β addition encoding variant 2. (Default1.)--bb.vle-v1 arg (=1)β comparison encoding variant 1. (Default1.)--bb.mult-variant arg (=1)β unsigned multiplication variant. (Default1.)--bb.mult-v2 arg (=0)β unsigned multiplication variant 2. (Default0.)--bb.conjoin-constant arg (=0)β when constant-bit propagation detects a constant bit during AIG construction, asserts the AIG node and replaces it, in the AIG, by the constant bit. (Default0.)
π Printing options
So many ways to print things. We love options π
-b,--print-stpinputβ prints STP input back tocout--print-back-CVCβ prints input in CVC format, then exits--print-back-SMTLIB2β prints input in SMT-LIB2 format, then exits--print-back-SMTLIB1β prints input in SMT-LIB1 format, then exits--print-back-GDLβ prints AiSee's graph format, then exits--print-back-dotβ prints dotty/neato's graph format, then exits-p,--print-counterexβ prints counterexample-y,--print-counterexbinβ prints counterexample in binary-q,--print-arrayvalβ prints arrayval in declared order-s,--print-functionstatβ prints function statistics-t,--print-quickstatβ prints quick statistics-v,--print-nodesβ prints nodes-n,--print-outputβ print output
π Input options
-m,--SMTLIB1β uses the SMT-LIB1 format parser--SMTLIB2β uses the SMT-LIB2 format parser--CVCβ uses the CVC format parser
π Output options
--output-CNFβ saves the CNF intooutput_[0..n].cnf.
β οΈ NOTE (read this one, seriously): variables cannot be mapped back, and problems solved by the preprocessing simplifier alone will not generate any CNF, because the SAT solver is never invoked. No solver, no CNF, no cap.
--output-benchβ saves in ABC's bench format tooutput.bench
π Output options β yes, again, there's a second section with the same name π
We don't make the rules, we just report them.
--cnf-generation-effort arg (=medium)β effort spent minimising the CNF:very-low,low,medium,high,very-high. Higher is slower to generate but yields a smaller CNF. (Defaultmedium.)--exit-after-CNFβ exits after the CNF has been generated--parse-onlyβ exits after parsing the input, without solving. Like reading the group chat and not replying π«Ά--interactive argβ reads the input a character at a time, as needed when drivingstpinteractively over a pipe.Offreads in blocks, which is faster. Default:onwhen reading from stdin,offwhen reading from a file. SMT-LIB2 only.-g,--max-num-confl arg (=-1)β number of conflicts after which the SAT solver gives up.-1means never,0means give up without searching. (Default-1.)-k,--max-time arg (=-1)β number of seconds after which the SAT solver gives up. The budget is for the whole query, not for each call into the SAT solver.-1means never,0means give up without searching. (Default-1.)-d,--check-sanityβ constructs counterexample and checks it. Self-care, but for solver output β¨
π Hidden options
(shhh)
--file argβ input file
π SEE ALSO π
The full documentation for stp is maintained as a Texinfo manual. If the info and stp programs are properly installed at your site, this command:
info stp
should give you access to the complete manual. That's the whole manual-manual, bestie π
okay that's the page!! go solve something, you're literally gonna slay π
sign-off era: this was stp 2.4.1, dated October 2026 β that's the version and date, and I'm putting them here instead of copying the footer line, because we're cute like that πβ¨
π¦ where this page comes from
- arch rolling: stp 2.4.1-2 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms