\section{Satisfiability Modulo Theories}
\label{sec:satisfiability-modulo-theories}

\textit{Satisfiability Modulo Theories} (SMT) is the problem of determining whether a mathematical formula is
satisfiable within a certain formal theory in first-order logic. Barrett et al.~\cite{barrett2016smtlib}
defined the SMT-LIB standard for input format and theory definitions.

For the verification of neural networks, the formal theory is \textit{Linear Real Arithmetic}
(LRA). LRA deals with formulas containing real variables, constants, addition, subtraction,
multiplication by constants, and equality/inequality relations: 
\begin{equation}
    \phi ::= t_1 \sim t_2 \mid \phi_1 \lor \phi_2 \mid \phi_1 \land \phi_2 \mid \neg \phi_1
\end{equation}
where $t_1, t_2$ are linear terms of the form $c_1 \cdot x_1 + \dots + c_k \cdot x_k + c_0$ (with $c_i \in \mathbb{R}$ and $x_i$ being real
variables), and $\sim \;\in \{=, \le, <, \ge, >\}$.

To represent a ReLU activation $y = \max(0, x)$ in LRA, we must introduce a disjunction:
\begin{equation}
    (x > 0 \land y = x) \lor (x \le 0 \land y = 0)
\end{equation}
For a network with $n$ ReLU neurons, there are up to $2^n$ possible activation patterns. Solving the
verification problem requires the SMT solver, such as Z3 presented by De Moura et
al.~\cite{demoura2008z3}, to implicitly explore this branching search space.
