STP(1)

πŸ“¦
version 2.4.1 Β· 4 versions
, in arch rolling

πŸ’… 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. (Default 1.)
  • --aig-rewrite-passes arg (=0) β€” how many iterations of AIG rewriting to perform. (Default 0.)
  • --flattening arg (=0) β€” enables sharing-aware flattening of >2 arity nodes. (Default 0.)
  • --rewriting arg (=1) β€” enables sharing-aware rewriting. (Default 1.)
  • --split-extracts arg (=1) β€” creates new variables for some extracts. (Default 1.)
  • --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. (Default 0.)
  • --aig-core-simplification arg (=0) β€” simplifies the propositional core with AIGs. (Default 0.)
  • --use-intervals arg (=1) β€” simplifies with interval analysis. (Default 1.)
  • --pure-literals arg (=1) β€” pure literals get replaced. (Default 1.)
  • --merge-same arg (=0) β€” uses simple boolean algebra rules to combine conjuncts at the top level. (Default 0.)
  • --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. -1 means always. (Default 0.)
  • --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. -1 means always. (Default 0.)
  • --simplify-to-constants-only arg (=0) β€” uses just the simplifications from the potentially size increasing suite that transform nodes to constants. (Default 0.)
  • --difficulty-reversion arg (=1) β€” undoes size increasing simplifications if they haven't made the problem simpler. (Default 1.)

πŸ”₯ 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. (Default 1.)
  • --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. (Default 1.)
  • --bb.div-v2 arg (=1) β€” unsigned division encoding variant 2. (Default 1.)
  • --bb.div-v3 arg (=0) β€” unsigned division encoding variant 3. (Default 0.)
  • --bb.add-v1 arg (=1) β€” addition encoding variant 1. (Default 1.)
  • --bb.add-v2 arg (=1) β€” addition encoding variant 2. (Default 1.)
  • --bb.vle-v1 arg (=1) β€” comparison encoding variant 1. (Default 1.)
  • --bb.mult-variant arg (=1) β€” unsigned multiplication variant. (Default 1.)
  • --bb.mult-v2 arg (=0) β€” unsigned multiplication variant 2. (Default 0.)
  • --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. (Default 0.)

πŸ’– Printing options

So many ways to print things. We love options πŸ’…

  • -b, --print-stpinput β€” prints STP input back to cout
  • --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 into output_[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 to output.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. (Default medium.)
  • --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 driving stp interactively over a pipe. Off reads in blocks, which is faster. Default: on when reading from stdin, off when reading from a file. SMT-LIB2 only.
  • -g, --max-num-confl arg (=-1) β€” number of conflicts after which the SAT solver gives up. -1 means never, 0 means 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. -1 means never, 0 means 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