\myheading{Theories}

QF\_S -- strings. You may need this to simulate strings to catch bugs like SQL injection.
\url{http://cvc4.cs.stanford.edu/wiki/Strings}.

\begin{lstlisting}
* QF_UF (Uninterpreted Functions): quantifier-free formulas whose
  satisfiability is to be decided modulo the empty theory. Each
  benchmark may introduce its own uninterpreted function and predicate
  symbols.

* QF_IDL (Integer Difference Logic): quantifier-free formulas to be
  tested for satisfiability modulo a background theory of integer
  arithmetic.  The syntax of atomic formulas is restricted to
  difference logic, i.e. x - y op c, where op is either equality or
  inequality and c is an integer constant.

* QF_RDL (Real Difference Logic): this division is like QF_IDL, except
  that the background theory is real arithmetic.

* QF_UFIDL (Integer Difference Logic with Uninterpreted Functions):
  this division contains benchmarks in a logic which is similar to
  QF_IDL, except that it also allows uninterpreted functions and
  predicates.

* QF_LIA (Linear Integer Arithmetic): quantifier-free formulas to be
  tested for satisfiability modulo a background theory of integer
  arithmetic.  The syntax of atomic formulas is restricted to contain
  only linear terms.

* QF_LRA (Linear Real Arithmetic): this division is like QF_LIA,
  except that the background theory is real arithmetic.

* QF_NIA (Nonlinear Integer Arithmetic): quantifier-free formulas to be
  tested for satisfiability modulo a background theory of integer
  arithmetic.  There is no restriction to linear terms.

* QF_UFLIA (Linear Integer Arithmetic with Uninterpreted Functions):
  this division contains benchmarks in a logic which is similar to
  QF_LIA, except that it also allows uninterpreted functions and
  predicates.

* QF_UFLRA (Linear Real Arithmetic with Uninterpreted Functions):
  this division is similar to QF_LRA, except that it also allows
  uninterpreted functions and predicates.

* QF_AX (Arrays with Extensionality): quantifier-free formulas to be
  tested for satisfiability modulo a background theory of arrays which
  includes the extensionality axiom.

* QF_AUFLIA (Linear Integer Arithmetic with Uninterpreted Functions
  and Arrays): quantifier-free formulas to be tested for
  satisfiability modulo a background theory combining linear integer
  arithmetic, uninterpreted function and predicate symbols, and
  extensional arrays.

* QF_BV (Fixed-size Bit-vectors): quantifier-free formulas over bit
  vectors of fixed size.

* QF_AUFBV (Bit-vectors with Arrays and Uninterpreted Functions):
  quantifier-free formulas over bit vectors of fixed size, with arrays
  and uninterpreted functions and predicate symbols.

* AUFLIA+p (Linear Integer Arithmetic with Uninterpreted Functions and
  Arrays, with patterns): quantified formulas to be tested for
  satisfiability modulo a background theory combining linear integer
  arithmetic, uninterpreted function and predicate symbols, and
  extensional arrays. Benchmarks include patterns for guiding
  instantiation mechanisms.

* AUFLIA-p (Linear Integer Arithmetic with Uninterpreted Functions and
  Arrays, without patterns): formulas from AUFLIA+p once all patterns
  have been removed.

* AUFLIRA (Arrays, Uninterpreted Functions, and Linear Arithmetic):
  quantifier formulas with arrays of reals indexed by integers
  (Array1), arrays of Array1 indexed by integers (Array2), and linear
  arithmetic over the integers and reals.

* UFNIA+p (Uninterpreted Functions and Nonlinear Arithmetic, patterns
  included): quantifier formulas with uninterpreted functions and
  nonlinear integer arithmetic.

* AUFNIRA (Arrays, Uninterpreted Functions, and Nonlinear Arithmetic):
  quantifier formulas with arrays of reals indexed by integers
  (Array1), arrays of Array1 indexed by integers (Array2), and
  nonlinear arithmetic over the integers and reals.
\end{lstlisting}

( \href{https://cs.nyu.edu/pipermail/smt-lib/2011/000468.html}{src} )

\lstinputlisting[style=customc,caption=Nicely commented smt\_logic\_codes.h file from Yices]{basics/smt_logic_codes.h}

What is \textit{theory}?

One can say that a SMT solver is a library of various methods on top of a SAT solver.
And sometimes, one \textit{theory}/method can perform better for your problem than another.

You can first start without setting theory explicitly or setting QF\_ALL.
But then you can experiment trying some of them.

It's recommended to set a \textit{theory} that has only features you need, nothing else.

And of course, SMT benchmarks for SMT solvers competition are divided by theories:
\url{http://smt-lib.loria.fr/zip}.

