Join GitHub today
GitHub is home to over 20 million developers working together to host and review code, manage projects, and build software together.
C C++ M4 HTML Makefile GAP Other
Fetching latest commit…
Cannot retrieve the latest commit at this time.
|Failed to load latest commit information.|
README ====== The yasmv (Yet Another Symbolic Model Verifier) project started off in fall 2011 as a tentative and partial C++ re-implementation of the NuSMV2 model checker. As a former member of the NuSMV2 development team (in the years between 2008 and 2011) I was never completely happy with a few architectural choices, inherited from the long history of the NuSMV model checker and/or due to the amount of legacy code and tools that relied on it. Overtime, however, the project has significantly diverged from the original goal of making a NuSMV re-implementation. The input language for yasmv is now a dialect of the smv language which retains only partial compatibility with NuSMV's original input language. In this area, my interest is all about exploring ways to improve language expressiveness and usability. The project has now approached a stage in which the program is usable to perform basic reachability analysis and step-by-step simulation. The source distribution includes a few examples to demonstrate how the program can be used to solve planning problems. BUILD ===== To install required dependencies on a Debian-like GNU/Linux distribution: $ sudo apt-get install autoconf libtool gcc g++ libboost-all-dev \ zlib1g-dev make minisat antlr3 libantlr3c-dev when all the required packages are installed, launching the build should boil down to this: $ ./setup.sh $ make The build may take quite a while. If your machine has multiple cores using -j <number-of-parallel-tasks> option when running `make` should help in reducing significantly build time, e.g. $ make -j8 Another option is to use distcc. The setup.sh script contains a working example. Refer to distcc documentation for more details. On my current development platform - Debian 8.6 ("Jessie") - the whole thing builds with no warnings. The parser is written with ANTLR3[*] so you will need some java JRE installed at build time to generate the parser and lexer code. Generated parser and lexer code itself is C ++, so as long as you don't change the grammar source files you will no longer need the JRE to make the build. No JRE is needed when running the final executable either. If you didn't run the setup.sh script, when done with the build there is one more step that needs to be taken in order to being able to actually run the program. yasmv requires access to the microcode data package, which is currently released along with the source code as a bz2'd tarball. Unpack the microcode tarball with: $ tar xfj microcode.tar.bz2 [ -C < optional-target-parent-directory > ] and ensure the YASMV_MICROCODE environment variable points to the `microcode` directory you've just created. For example, assuming you want the microcode distribution unpacked in the the same location as the program source code: $ tar xfj microcode.tar.bz2 $ export YASMV_MICROCODE=`pwd`/microcode $ ./yasmv yasmv - Yet Another Symbolic Model Verifier (c) 2011-2016, Marco Pensallorto < marco DOT pensallorto AT gmail DOT com > https://github.com/mwolf76/yasmv [Sat May 21 17:21:57 2016].459 src/main.cc:176 :: 2176 microcode fragments registered. >> When launched the program will parse the contents of the `microcode` directory and display the number of microcode fragments it found. The default microcode distribution consists of 2176 fragments and covers the full set of supported algebraic operations on n-bits integers (1 <= n <= 64). For further information on microcode, please refer to the README file in the microcode bzip2'd tarball. Unit tests can be run using: $ ./tests --log_level=all Remark: The default build for C ++ code uses a low level of optimization (-O0) to make life a whole lot easier for debugging. If you want to, feel free to enable higher level of optimization for the C ++ code (C code already uses '-O2' by default). Do not expect major performance gains though, as core services Cudd (used int the expression compiler) and Minisat (which powers the solving engine) are compiled/installed separately and already use a higher level of optimization. [*] Still haven't upgraded to ANTLR4. Nor have plans to do it. DISCLAIMER ========== This code is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. yasmv is in no way related to, or endorsed by, the NuSMV2 development board and/or FBK. yasmv does not contain any code from NuSMV's code base.