@@ -153,7 +153,7 @@ \subsection{Source Distribution}
153
153
sudo apt-get install gperf
154
154
\end {verbatim }
155
155
\end {small }
156
- After this, compiling and installing Yices uses the following standard steps:
156
+ After this, compiling and installing Yices use the following standard steps:
157
157
\begin {small }
158
158
\begin {verbatim }
159
159
./configure
@@ -172,6 +172,40 @@ \subsection{Source Distribution}
172
172
source distribution gives more details.
173
173
174
174
175
+ \subsection {Nonlinear Arithmetic and MCSAT }
176
+ \label {mcsat-install }
177
+
178
+ Yices includes a solver for nonlinear arithmetic based on the Model
179
+ Constructing Satisfiability Calculus (MCSAT). This calculus and its
180
+ application to nonlinear arithmetic are explained
181
+ in~\cite {Jovanovic -etal:MCSATb:2013 }
182
+ and~\cite {deMouraJovanovic:nla:2012 }.
183
+
184
+ The precompiled, binary distributions of Yices include the MCSAT
185
+ solver and can process nonlinear arithmetic problems. If you build
186
+ Yices from source and want support for nonlinear arithmetic, you must
187
+ install an external library first and enable MCSAT support when you
188
+ compile Yices.
189
+
190
+ This library is called `` libpoly'' . It implements various operations
191
+ on polynomials used by the MCSAT solver. It is open source and it is
192
+ available on GitHub (\url {https://github.com/SRI-CSL/libpoly}). Make
193
+ sure that you download the latest version of libpoly. Yices~2.4.2
194
+ requires libpoly v0.1.2.
195
+
196
+ Once you have installed libpoly, you can compile Yices with MCSAT
197
+ support as follows:
198
+ \begin {small }
199
+ \begin {verbatim }
200
+ ./configure --enable-mcsat
201
+ make -j
202
+ sudo make install
203
+ \end {verbatim }
204
+ \end {small }
205
+ The usual environment variables (e.g., \texttt {CPPFLAGS } and
206
+ \texttt {LDFLAGS }) can be used if you install libpoly in a non-standad
207
+ location.
208
+
175
209
176
210
\section {Content of the Distributions }
177
211
@@ -213,19 +247,17 @@ \section{Library Dependencies}
213
247
reproduced in Appendix~\ref {gmp-license }.
214
248
215
249
Since release 2.4.0, Yices has optional support for nonlinear real
216
- arithmetic, using the Model Constructing Satisfiability Calculus
217
- (MCSAT)~\cite {deMouraJovanovic:nla:2012 ,deMouraJovanovic:MCSAT:2013 ,Jovanovic -etal:MCSATb:2013 }. This
218
- depends on an external library for operations on polynomials which is
250
+ arithmetic. As explained in Section~\ref {mcsat-install }, this depends
251
+ on an external library for operations on polynomials which is
219
252
available at~\url {https://github.com/SRI-CSL/libpoly}.
220
253
221
254
222
255
\section {Supported Logics }
223
256
224
257
The current Yices~2 release supports quantifier-free combinations of
225
258
linear integer and real arithmetic, uninterpreted function, arrays,
226
- and bitvectors. Currently, Yices~2 supports all SMT-LIB logics that do
259
+ and bitvectors. Currently, Yices~2 supports most SMT-LIB logics that do
227
260
not involve quantifiers as summarized in Table~\ref {supported-logics }.
228
- Yices~2 includes a solver for non-linear real arithmeitce
229
261
The meaning of the logics and theories in this table is explained at
230
262
the SMT-LIB website (\url {http://www.smtlib.org}). In addition,
231
263
Yices~2 supports a more general set of array operations than required
@@ -781,17 +813,12 @@ \subsection{Bitvectors}
781
813
\label {bitvectors }
782
814
\end {table }
783
815
784
- \medskip\noindent
785
- The semantics of all the bitvector operators is defined in the
786
- SMT-LIB standard. Yices~2 follows the standard except for the
787
- case of division by zero. In SMT-LIB, the result of a division by
788
- zero is an unspecified value, but one must ensure that the division
789
- operators are functional. In other words, SMT-LIB does not specify the
790
- result of $ (\mathtt {bvudiv}\ a\ b)$ if $ b$ is the zero vector, but
791
- $ (\mathtt {bvudiv}\ a\ b)$ and $ (\mathtt {bvudiv}\ c\ b)$ must be equal
792
- whenever $ a = c$ , even if $ b$ is the zero vector. Yices~2 uses a
793
- simpler semantics (inspired by the BTOR
794
- format~\cite {Brummayer -etal:2008 }):
816
+ \medskip\noindent The semantics of all the bitvector operators is
817
+ defined in the SMT-LIB standard. Like other SMT solvers, Yices~2
818
+ follows the BTOR conventions for bitvector division by
819
+ zero~\cite {Brummayer -etal:2008 }. Until recently, this was not the
820
+ semantics defined by the SMT-LIB standard. The SMT-LIB semantics
821
+ changed in October 2015. It is now the same as BTOR:
795
822
\begin {description }
796
823
\item [Unsigned Division:] If $ b$ is the zero bitvector of $ n$
797
824
bits then
@@ -1018,10 +1045,11 @@ \section{MCSAT}
1018
1045
currently dedicated to quantifier-free nonlinear real arithmetic. The
1019
1046
theory and implementation of MCSAT is discussed in several
1020
1047
publications~\cite {Jovanovic -etal:MCSATb:2013 ,deMouraJovanovic:MCSAT:2013 }.
1021
- Currently, this solver can process input written the SMT-LIB~2.0
1022
- notation. It does not support as many features as the CDCL-based
1023
- solver described in the previous section. In particular, the MCSAT
1024
- solver does not yet support incremental solving (i.e., push and pop).
1048
+ Currently, this solver can process input written in the SMT-LIB~2.0 or
1049
+ Yices notations. It does not support as many features as the
1050
+ CDCL-based solver described in the previous section. In particular,
1051
+ the MCSAT solver does not yet support incremental solving (i.e., push
1052
+ and pop).
1025
1053
1026
1054
1027
1055
\chapter {Yices Tool }
@@ -1248,6 +1276,10 @@ \section{Tool Invocation}
1248
1276
includes no theory solvers at all. All assertions must be purely
1249
1277
propositional (i.e., involve only Boolean terms).
1250
1278
1279
+ With option \texttt {--logic=QF\_ NRA }, the \texttt {yices } binary uses
1280
+ its MCSAT solver for nonlinear real arithmetic. When this solver is
1281
+ selected, incremental solving is not supported.
1282
+
1251
1283
\item [--arith-solver=<solver>] Select one of the possible arithmetic solvers.\\ [1mm]
1252
1284
\texttt {<solver> } must be one of \texttt {simplex },
1253
1285
\texttt {floyd-warshall }, or \texttt {auto }.
0 commit comments