This package is a concrete implementation of a particular concrete syntax for the abstract SMT-LIB semantics. In particular, it implements a Parser (which converts concrete to abstract) and a Printer (which converts abstract to concrete).

The particular concrete syntax implemented by the Parser and the Printer is the S-expression syntax described in the SMT-LIB v.2 documentation. In this syntax, all abstract quantities are rendered as S-expressions: either individual tokens, or a sequence consisting of a left-parenthesis, a series of whitespace-separated S-expressions, and a closing right-parenthesis. The whitespace separating a series of S-expressions may be spaces, tabs, new-line or carriage-return characters.

The allowed tokens are

A command has the form ( command-name arguments... )
in which the command-name is a symbol or reserved word naming the command and the arguments are also S-expressions of particular forms, depending on the command.

The logical formulas that are asserted and reasoned about by an SMT solver also are S-expressions. An expression can in general take one of the following forms, though the particular logic in effect may limit some of the syntax and will specify which functions are defined: