A Summary of SMT-LIB Logic 2.0

(I moved this from my old blog.)

I was working on integrating two SMT solvers with Wenxin Feng, therefore it is necessary to understand the SMT-LIB 2.0 logic, which can be used as an input language for both solvers (AltErgo, CVC4). Part of the project is to classify formulas which can be solved by one solver, while not by the others. Therefore knowing how theories and logics are defined in SMT-LIB is also important.

if \( \varphi\) is closed, we say the structure \( \bf A\) a model of \( \varphi\).

Theories

Traditionally, its a set of axioms

Here it consists of three parts

Signature: \( \Sigma\)

Axioms:

I think this part is left for the people who implement solvers. Take \( \tt INT\) theory as an example, since we have the plus sign in our signature (we just denote it as \( \tt ADD\), so that you know it is only a symbol, not the actual operation), we will have an axiom like \( \forall x:{\tt INT}. y:{\tt INT}. \exists z:{\tt INT}. {\tt ADD}(x,y,z) \leftrightarrow x + y = z\). Therefore, our model (or structure) must contain the correct relations to map \( \tt ADD\) to the actual addition operation to satisfy this axiom.

Also, some theories like \( \tt REAL\) include those axioms as plain text, like associativity, commutativity, etc.

Models: A set of \( \Sigma\)-structures, all of which are models of the theory.