Version 2.5.0
May 17, 2010
We are happy to announce the availability of a new version of the NuSMV model checker. NuSMV version 2.5.0 is available from https://nusmv.fbk.eu.
NuSMV 2 extends the previous versions of NuSMV with several new features, most notably with the possibility of performing SAT-based Bounded Model Checking (see the Overview below).
Version 2.5.0 is a major release which provides new features, many optimizations and bug fixes, and an extensive reorganization of the source code and API.
Many changes were driven by projects which involved FBK, like:
- COCONUT, COrrect-by-CONstrUcTion Workbench for Design and Verification of Embedded Systems (http://www.coconut-project.eu/). COCONUT was founded by EU FP7-2007-IST-1-217069.
- COMPASS, COrrectness, Modeling and Performance of Aerospace SystemS (http://compass.informatik.rwth-aachen.de)
- EuRailCheck, European Railways Verification and Validation Tool (https://es.fbk.eu/projects/eurailcheck).
In all these projects, the core of NuSMV has been improved to deal with large scalability issues. Several bottlenecks were identified, and fixed, with particular care about the memory usage.
The main changes are listed below. For details please refer to the ChangeLog.
Features highlights
- Added forward version of the Emerson-Lei algorithm for checking language emptiness of Buchi fair transitions systems with BDDs.
- Improved invariant checking with new search strategies and heuristics.
- Extended the language support for arrays and matrices.
- Added several commands and options to dump the model. See the details about commands and options below.
- The previously provided default SAT solver "SIM" is no longer available. To use SAT solvers in NuSMV, now "MiniSAT" or "ZCHaff" are required.
New features details
- SMV and PSL grammar
- Support for arrays and matrices has been improved.
- Array and matrices subscript can be non-constant numeric expressions (only when reading), and they can also be passed to modules as parameters.
- Is is now possible to declare arrays of expressions. For example:
DEFINE x := [[1,2,3], [4,5,6]]; VAR i : -1..1; LTLSPEC G x[0][i+1] < 4
- Besides state and input variables, it is now possible to declare frozen variables. Frozen variables are like state variables, but after the initialization they retain their value through the whole evolution of the model.
- A new ternary operator
<cond> ? <expr> : <expr>has been added to improve models readability. - Word support has been extended.
- New type
signed wordhas been introduced, along with a few new operators:extend,signedandunsigned. - New operators have been introduced to easily manipulate word constants. They are
uwconst,swconst,sizeofandtoint. - The PSL grammar now supports word operations. All SMV word operators are supported, made exception for the bit-selection operator, which has a different syntax in
PSL [select(w, h, l)].
- New type
- Properties can now be named in the SMV model. The syntax for property naming is
NAME pname := expr
- Support for arrays and matrices has been improved.
- System commands
- Model compilation
- Added
-k numberoptions and-t timeoption to thecompute_reachablecommand, which respectively limit the forward search in number of steps or in execution time. - Added the
clean_bdd_cachecommand. Cleans the cached results of evaluations of symbolic expressions to ADD and BDD representations. - Added the
-doption to theflatten_hierarchycommand. This option delays the construction of vars constraints until needed
- Added
- Model Checking
- Added the
check_invar_bmc_inccommand, used for checking invariant specifications using BMC incremental algorithms. - Added the
check_ltlspec_bmc_inccommand, used for checking LTL specifications using BMC incremental algorithms. - Added some new options to the
check_invarcommand, to control the new analysis strategies and heuristics. - Added the
-P namecommand option to all property-checking commands (check_ctlspec, check_ltlspec, etc.) to refer to a property named in the model..
- Added the
- Simulation
- Added the
bmc_pick_statecommand. Similarly topick_state, chooses an element from the set of initial states, and makes it the current state. This must be done in order to proceed with BMC simulation - Added the
bmc_inc_simulatecommand. Does the same asbmc_simulate, but using incremental algorithms. - Added the
bmc_simulate_check_feasible_constraintscommand, used to check whether or not a given constraint is feasible and can thus be used as BMC simulation constraint.
- Added the
- Trace and counter-examples
- Added commands
execute_tracesandexecute_partial_traces, respectively used for complete and incomplete traces execution. Complete or even incomplete traces can now be executed within the model, to check whether or not the trace contains only valid assignments that are feasible in the model.
- Added commands
- Model inspection, dumpers, etc.
- Added the
print_formulacommand, which prints a formula in canonical format. - Added the
show_dependenciescommand, which shows the dependencies for the given expression - Added the
write_coi_modelcommand, which dumps on a file the model reduced w.r.t. cone of influence over a given property. - Added the
-poption to theprint_fsm_statscommand, which prints out the normalized predicates the FSM consists of. - Added a few options to the
print_reachable_statescommand, to enrich the features it provides. - Added
-2and-noptions to theechocommand.-2prints the given string to stderr instead of stdout.-ndoes not add a trailing newline to the printed string.
- Added the
- Model compilation
- Command line options
- Added option
-source sc_file: Executes NuSMV commands from file sc_file.-sourceis an alias for-loadwhich is now deprecated. - Added option
-disable_bdd_cacheto disable bdd reachable states caching. - Added option
-bdd_soh heuristicsto set the heuristics to be used to compute BDD ordering statically by analyzing the input model. - Added option
-ojeba algto set the algorithm used for BDD-based language emptiness of Buchi fair transition systems.
- Added option
- System variables
- System variables are now printed in a lexicographic order when calling command
set - Added system variable
bdd_static_order_heuristics, which sets the heuristics for guessing a good ordering by analyzing the input model. - Added system variable
bmc_inc_invar_alg, which sets the default algorithm for BMC incremental invariants checking. - Added system variable
check_invar_bddbmc_heuristic, which sets the bdd-bmc heuristics to be used when using bdd-bmc BDD invariants checking strategy - Added system variable
check_invar_bddbmc_threshold, which sets the threshold to be used when using bdd-bmc BDD invariants checking strategy - Added system variable
check_invar_forward_backward_heuristic, which sets the heuristics used for forward-backward strategy when checking invariants using BDD. - Added system variable
check_invar_strategy, which sets the strategy to be used for BDD based invariants specifications checking. - Added system variable
counter_examples_hiding_prefix. Symbols names that match this string prefix will be not printed out when showing a trace - Added system variable
counter_examples_show_re. Only symbols whose names match this regular expression will be printed out when showing a trace. - Added system variable
daggifier_counter_threshold,daggifier_depth_thresholdanddaggifier_statistics, which control the model dumper behavior. - Added system variable
enable_bdd_cache, which determines if during evaluation of symbolic expression to ADD and BDD representations the obtained results are cached or not. - Added system variable
oreg_justice_emptiness_bdd_algorithm, which sets the algorithm used to determine language emptiness of a Buchi fair transition system. - Added system variable
rbc_rbc2cnf_algorithm, which defines the algorithm used for conversion from RBC to CNF format. - Added system variable
show_defines_in_traces, which controls whether defines should be printed as part of a trace or be skipped. - Added system variable
trace_show_defines_with_next, which controls whether defines containing next operator should be printed as part of a trace or be skipped. - Added system variable
use_coi_size_sorting, which enables/disables the use of the cone of influence variables set size for properties sorting, before the verification step.
- System variables are now printed in a lexicographic order when calling command
Bug fixes and other improvements:
- Fixed the precedence of
modoperator. Now it has the same precedence as division. - Fixed some 64-bits issues in the Cudds library and in the NuSMV's core.
- Win64 and OSX-64 are now supported.
- Fixed several dozens of bugs. See ChangeLog for details.